Logical Model View -- save as Relax NG
This should cover W3C XML Schema, Relax NG and DTD related problems.
-
- Posts: 80
- Joined: Fri Apr 23, 2004 5:24 pm
- Location: Durham, NC, USA
Logical Model View -- save as Relax NG
Hi Sorin et al,
I'm creating a big set of RelaxNG schemas that are composed out of a lot of modules using many <include> and <externalRef> elements.
I love being able to see the "post-simplification" version of the schema as the Logical Model View (LMV) diagramming pane. Currently you can save the LMV as a diagram image, and that's great.
But I have discovered two use cases for also being able to save the "post-simplification" schema as parsable Relax NG.
(1) Trang's RelaxNG-to-XMLSchema conversion does not support <externalRef>. Therefore, if I have a schema developed in RelaxNG that uses <externalRef>, and I want to Trang-convert it into XMLSchema, I need to manually go in and replace all the <externalRef> with the code fragments they reference. It seems like (and maybe I'm wrong here) if only I could get hold of the post-simplification version of my RelaxNG schema (which has all the <externalRef> resolved), I could get around doing this manually.
(2) My modular project design is intended to generate many different variations of my end-schema (kind of like an Abstract Factory pattern). Because the various customized end-schemas depend on a lot of <include> and <externalRef>, I will have to distribute to end users a package with many individual files to support the end-schemas.
Some users, though, might only be interested in one specific end-schema. They like to have the whole thing as a single, neat RNG file with no external dependencies on other files. It seems like (and again, maybe I'm wrong here) that the post-simplification version of the schema would be just the ticket.
So anyway, what do you think?
John
I'm creating a big set of RelaxNG schemas that are composed out of a lot of modules using many <include> and <externalRef> elements.
I love being able to see the "post-simplification" version of the schema as the Logical Model View (LMV) diagramming pane. Currently you can save the LMV as a diagram image, and that's great.
But I have discovered two use cases for also being able to save the "post-simplification" schema as parsable Relax NG.
(1) Trang's RelaxNG-to-XMLSchema conversion does not support <externalRef>. Therefore, if I have a schema developed in RelaxNG that uses <externalRef>, and I want to Trang-convert it into XMLSchema, I need to manually go in and replace all the <externalRef> with the code fragments they reference. It seems like (and maybe I'm wrong here) if only I could get hold of the post-simplification version of my RelaxNG schema (which has all the <externalRef> resolved), I could get around doing this manually.
(2) My modular project design is intended to generate many different variations of my end-schema (kind of like an Abstract Factory pattern). Because the various customized end-schemas depend on a lot of <include> and <externalRef>, I will have to distribute to end users a package with many individual files to support the end-schemas.
Some users, though, might only be interested in one specific end-schema. They like to have the whole thing as a single, neat RNG file with no external dependencies on other files. It seems like (and again, maybe I'm wrong here) that the post-simplification version of the schema would be just the ticket.
So anyway, what do you think?
John
Last edited by madde001 on Mon Dec 08, 2008 12:32 am, edited 1 time in total.
-
- Site Admin
- Posts: 2095
- Joined: Thu Jan 09, 2003 2:58 pm
Re: Logical Model View -- save as Relax NG
Hi John,
You can find below a simple class that gives you the RelaxNG schema in a single file. You need onvdl.jar or the latest Jing (jing-20081028, as the previous version of Jing contained a bug in the PatternDumper that I fixed both in oNVDL and in the latest Jing) in the classpath to run.
This can be easily integrated also in oXygen as external tool and you can use the ${cf} editor variable to point to your currently edited file.
Regards,
George
You can find below a simple class that gives you the RelaxNG schema in a single file. You need onvdl.jar or the latest Jing (jing-20081028, as the previous version of Jing contained a bug in the PatternDumper that I fixed both in oNVDL and in the latest Jing) in the classpath to run.
Code: Select all
import java.io.File;
import org.relaxng.datatype.helpers.DatatypeLibraryLoader;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import com.thaiopensource.relaxng.impl.PatternDumper;
import com.thaiopensource.relaxng.impl.SchemaBuilderImpl;
import com.thaiopensource.relaxng.impl.SchemaPatternBuilder;
import com.thaiopensource.relaxng.parse.sax.SAXParseable;
import com.thaiopensource.util.UriOrFile;
import com.thaiopensource.xml.sax.ErrorHandlerImpl;
import com.thaiopensource.xml.sax.Jaxp11XMLReaderCreator;
/**
* @author George Bina
*/
public class GetResolvedRelaxNGSchema {
public static void main(String[] args) {
if (args.length == 0)
System.out.println("Pass the RelaxNG schema as command line parameter!");
else {
try {
ErrorHandler eh = new ErrorHandlerImpl();
PatternDumper.dump(System.out, SchemaBuilderImpl.parse(
new SAXParseable(new Jaxp11XMLReaderCreator(), new InputSource(
UriOrFile.fileToUri(new File(args[0]))), eh), eh,
new DatatypeLibraryLoader(), new SchemaPatternBuilder(), false));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
Regards,
George
George Cristian Bina
-
- Site Admin
- Posts: 2095
- Joined: Thu Jan 09, 2003 2:58 pm
Re: Logical Model View -- save as Relax NG
Hi John,
I packed up the class plus onvdl.jar plus two RNG schemas as a sample at
http://www.oxygenxml.com/update/resolveRNG.zip
You need to invoke from the folder where you have the files as
For example:
Best Regards,
George
I packed up the class plus onvdl.jar plus two RNG schemas as a sample at
http://www.oxygenxml.com/update/resolveRNG.zip
You need to invoke from the folder where you have the files as
Code: Select all
java -cp .;onvdl.jar GetResolvedRelaxNGSchema x.rng
Code: Select all
D:\users\george\workspace\test\resolveRNG>type x.rng
<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<element name="x">
<externalRef href="y.rng"/>
</element>
</start>
</grammar>
D:\users\george\workspace\test\resolveRNG>type y.rng
<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<element name="y">
<text/>
</element>
</start>
</grammar>
D:\users\george\workspace\test\resolveRNG>java -cp .;onvdl.jar GetResolvedRelaxNGSchema x.rng
<?xml version="1.0"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<element>
<name ns="">x</name>
<ref name="p0"/>
</element>
</start>
<define name="p0">
<element>
<name ns="">y</name>
<ref name="p1"/>
</element>
</define>
<define name="p1">
<text/>
</define>
</grammar>
George
George Cristian Bina
-
- Posts: 80
- Joined: Fri Apr 23, 2004 5:24 pm
- Location: Durham, NC, USA
Re: Logical Model View -- save as Relax NG
George,
It works! I installed as an external tool, as you suggested. And the result (from a schema with dozens of externalRefs and includes) works fine as an input to Trang, making me a happy man.
It's interesting that one or two stylistic conventions in the xml are different from the way the LMV diagram presents it (e.g. LMV diagram preserves <element name="xyz"/> whereas xml version simplifies all to <element><name>xyz</name></element>). Are there some "de-simplifications" in the LMV diagram?
Thanks again! I'd vote to see "generate simplified rng" as a built-in menu command in some future release of oxygen.
John
It works! I installed as an external tool, as you suggested. And the result (from a schema with dozens of externalRefs and includes) works fine as an input to Trang, making me a happy man.
It's interesting that one or two stylistic conventions in the xml are different from the way the LMV diagram presents it (e.g. LMV diagram preserves <element name="xyz"/> whereas xml version simplifies all to <element><name>xyz</name></element>). Are there some "de-simplifications" in the LMV diagram?
Thanks again! I'd vote to see "generate simplified rng" as a built-in menu command in some future release of oxygen.
John
-
- Site Admin
- Posts: 2095
- Joined: Thu Jan 09, 2003 2:58 pm
Re: Logical Model View -- save as Relax NG
Hi John,
We preferred a little more compact and readable representation for the logical model diagram so instead of passing the pattern through the PatternDumper visitor we have a different visitor that, as you noted, puts the name as attribute if there is just one name (not a more complex name class) and generates more meaningful pattern names (like elementName.content) than p0 ,p1, etc.
I recorded an issue on our Jira with the support for putting this action directly in oXygen. Actually we have a "Flatten schema" action that currently works for XML Schema (given an XML Schema containing includes outputs a single schema file with the includes replaced with the included content) and we can provide the same action for Relax NG to get the simplified schema.
Best Regards,
George
We preferred a little more compact and readable representation for the logical model diagram so instead of passing the pattern through the PatternDumper visitor we have a different visitor that, as you noted, puts the name as attribute if there is just one name (not a more complex name class) and generates more meaningful pattern names (like elementName.content) than p0 ,p1, etc.
I recorded an issue on our Jira with the support for putting this action directly in oXygen. Actually we have a "Flatten schema" action that currently works for XML Schema (given an XML Schema containing includes outputs a single schema file with the includes replaced with the included content) and we can provide the same action for Relax NG to get the simplified schema.
Best Regards,
George
George Cristian Bina
-
- Posts: 156
- Joined: Sat Feb 26, 2005 12:09 am
- Location: USA
- Contact:
Re: Logical Model View -- save as Relax NG
Post by shudson310 »
would it be possible to re-post the jar file? I have a similar need to flatten the DocBook Publishers schema to help with review of the specification.
When I try to follow the link, it is currently broken.
Thanks and best regards,
--Scott
When I try to follow the link, it is currently broken.
Thanks and best regards,
--Scott
Scott Hudson
Staff Content Engineer
Site: docs.servicenow.com
Staff Content Engineer
Site: docs.servicenow.com
-
- Site Admin
- Posts: 2095
- Joined: Thu Jan 09, 2003 2:58 pm
Re: Logical Model View -- save as Relax NG
Hi Scott,
You are lucky
. I just uploaded a few hours ago a new build of Jing at
http://code.google.com/p/jing-trang/downloads/list
http://jing-trang.googlecode.com/files/ ... 090818.zip
You can use that to get a simplified schema using something like
java -jar jing.jar -s yourSchema.rng
The code posted previously in this topic did the same thing for older version of Jing.
Best Regards,
George
You are lucky

http://code.google.com/p/jing-trang/downloads/list
http://jing-trang.googlecode.com/files/ ... 090818.zip
You can use that to get a simplified schema using something like
java -jar jing.jar -s yourSchema.rng
The code posted previously in this topic did the same thing for older version of Jing.
Best Regards,
George
George Cristian Bina
-
- Posts: 156
- Joined: Sat Feb 26, 2005 12:09 am
- Location: USA
- Contact:
Re: Logical Model View -- save as Relax NG
Post by shudson310 »
Thanks, George! Nice timing! I tried it out, and it appears to work very well!
Best regards,
--Scott
Best regards,
--Scott
Scott Hudson
Staff Content Engineer
Site: docs.servicenow.com
Staff Content Engineer
Site: docs.servicenow.com
-
- Posts: 5
- Joined: Wed Mar 23, 2011 1:01 am
Re: Logical Model View -- save as Relax NG
Post by tara_athan »
Is it possible now to flatten Relax NG from within Oxygen? The earlier Java jar could be added as an external tool, but now that the capability is there in Jing, what is the best way to approach this?
-
- Site Admin
- Posts: 2095
- Joined: Thu Jan 09, 2003 2:58 pm
Re: Logical Model View -- save as Relax NG
No, it was not yet implemented - the above solution to configure an external tool is still the current option. Note that you can use an editor variable to refer to the current file and thus the external tool will work automatically for any schema you have open in oXygen.
Best Regards,
George
Best Regards,
George
George Cristian Bina
-
- Posts: 5
- Joined: Wed Mar 23, 2011 1:01 am
Re: Logical Model View -- save as Relax NG
Post by tara_athan »
I am having trouble understanding how to configure this. I first checked that the following command line input works correctly:
java -jar "C:\MyPath\OxygenXMLEditor\external_tools\jing-20090818\bin\jing.jar" -cs dishornlog_standard.rnc > dishornlog_standard_flatten.rng
Then I created a new external tool....
For the working directory I put the code for the current directory
${cfd}
For command line I put
java -jar "C:\MyPath\OxygenXMLEditor\external_tools\jing-20090818\bin\jing.jar" -cs ${cfne} > ${cfn}_flatten.rng
The tool runs and puts the output in the console, then looks for the file ">" and ends with an error message.
How do I redirect the output from the console to a file?
I am on Windows XP.
java -jar "C:\MyPath\OxygenXMLEditor\external_tools\jing-20090818\bin\jing.jar" -cs dishornlog_standard.rnc > dishornlog_standard_flatten.rng
Then I created a new external tool....
For the working directory I put the code for the current directory
${cfd}
For command line I put
java -jar "C:\MyPath\OxygenXMLEditor\external_tools\jing-20090818\bin\jing.jar" -cs ${cfne} > ${cfn}_flatten.rng
The tool runs and puts the output in the console, then looks for the file ">" and ends with an error message.
How do I redirect the output from the console to a file?
I am on Windows XP.
-
- Site Admin
- Posts: 2095
- Joined: Thu Jan 09, 2003 2:58 pm
Re: Logical Model View -- save as Relax NG
You need to run the shell (I think that is cmd on Windows), that is the application that handles the output redirection to a file. I am on a Mac and I cannot give you the exact details but if you have problems further one of my colleagues on Windows will surely help you.
Regards,
George
Regards,
George
George Cristian Bina
-
- Posts: 2879
- Joined: Tue May 17, 2005 4:01 pm
Re: Logical Model View -- save as Relax NG
Hello,
Like George said, you can use cmd:
cmd /C java -jar "C:\MyPath\OxygenXMLEditor\external_tools\jing-20090818\bin\jing.jar" -cs ${cfne} > ${cfn}_flatten.rng
Make sure the working directory is correct or use the current file directory editor variable: ${cfd}
Regards,
Adrian
Like George said, you can use cmd:
cmd /C java -jar "C:\MyPath\OxygenXMLEditor\external_tools\jing-20090818\bin\jing.jar" -cs ${cfne} > ${cfn}_flatten.rng
Make sure the working directory is correct or use the current file directory editor variable: ${cfd}
Regards,
Adrian
Adrian Buza
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
-
- Posts: 5
- Joined: Wed Mar 23, 2011 1:01 am
Re: Logical Model View -- save as Relax NG
Post by tara_athan »
Thanks, I got this working. For the benefit of other command-line challenged folks out there, this is the way the command line field should look
cmd.exe /c java -jar "C:\MyPath\jing-20091111\bin\jing.jar" -s ${cfne} > ${cfne}_flatten.rng
OR, for schema in compact syntax
cmd.exe /c java -jar "C:\MyPath\jing-20091111\bin\jing.jar" -sc ${cfne} > ${cfne}_flatten.rng
cmd.exe /c java -jar "C:\MyPath\jing-20091111\bin\jing.jar" -s ${cfne} > ${cfne}_flatten.rng
OR, for schema in compact syntax
cmd.exe /c java -jar "C:\MyPath\jing-20091111\bin\jing.jar" -sc ${cfne} > ${cfne}_flatten.rng
-
- Posts: 5
- Joined: Wed Mar 23, 2011 1:01 am
Re: Logical Model View -- save as Relax NG
Post by tara_athan »
One more twist on this: can I configure the external tool to add this file to the current project?
-
- Posts: 2879
- Joined: Tue May 17, 2005 4:01 pm
Re: Logical Model View -- save as Relax NG
I'm afraid you can't configure the external tool to add the output file to the project.
An alternative is to manually add the parent directory(or another ancestor) of the output file to the project. In the project tree right click on a logical resource or the tree root and from the contextual menu choose Add Folder.
After generating the file, refresh the parent directory and the file will appear in the tree.
Regards,
Adrian
An alternative is to manually add the parent directory(or another ancestor) of the output file to the project. In the project tree right click on a logical resource or the tree root and from the contextual menu choose Add Folder.
After generating the file, refresh the parent directory and the file will appear in the tree.
Regards,
Adrian
Adrian Buza
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
Jump to
- Oxygen XML Editor/Author/Developer
- ↳ Feature Request
- ↳ Common Problems
- ↳ DITA (Editing and Publishing DITA Content)
- ↳ SDK-API, Frameworks - Document Types
- ↳ DocBook
- ↳ TEI
- ↳ XHTML
- ↳ Other Issues
- Oxygen XML Web Author
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Content Fusion
- ↳ Feature Request
- ↳ Common Problems
- Oxygen JSON Editor
- ↳ Feature Request
- ↳ Common Problems
- Oxygen PDF Chemistry
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Feedback
- ↳ Feature Request
- ↳ Common Problems
- Oxygen XML WebHelp
- ↳ Feature Request
- ↳ Common Problems
- XML
- ↳ General XML Questions
- ↳ XSLT and FOP
- ↳ XML Schemas
- ↳ XQuery
- NVDL
- ↳ General NVDL Issues
- ↳ oNVDL Related Issues
- XML Services Market
- ↳ Offer a Service