DAP4: DDX Grammar
Version: 1.0
At the end of this document are instructions for accessing and testing a formal grammar for the DAP4 DDX using the Relax-NG schema language. I constructed it without any reference to any other explicit or implicit grammars so I could record my proposal. I have since modified it based examining the implied grammar in page DAP4: Data Model and from comments from others and from a comparison with the xsd grammar.
Differences with DAP4 xsd Grammar
I converted the xsd-based grammar
http://scm.opendap.org/trac/browser/trunk/xml/dap/dap4.xsd
to an equivalent relax-ng grammar.
http://dl.dropbox.com/u/53929684/xsd.rng
One major difference I see is in dimension handling.
- I just used the name "dimension" rather than "shareddimension"; For me, all dimensions (except anonymous ones) are shared.
- The xsd separates out scalars from arrays. I always allowed the dimensions for a variable to be optional to handle the scalar case.
- I attempted to be as consistent as possible, so I allowed any type including sequences and structures to be dimensioned.
- The dimensions of a variable are currently specified in the rng grammar as an attribute named "dimensions" associated with "variables": e.g. dimensions="dr d1".
Previously I used this:
<dimensions> <dimension name="dr"/> <dimension name="d1"/> </dimensions>
But this seemed kind of verbose.
Other differences:
- The Dataset element in the dsd has a couple of extra attributes. I added these.
- The xsd appears to allow attributes to themselves have attributes. This needs discussion.
- I forgot enumerations and opaque. I added them.
- The URL basetype is in the xsd. What is the justification for keeping it?
- It appears that the Dataset contains a top level <group> declaration; I chose to treat the Dataset itself as the top-level group.
- Attribute declarations appear to have their own "namespace" attribute. Not sure why this is needed.
- I do not understand the purpose of the "NewAttribute" attribute.
- The Grid issue, of course.
There are also some minor differences.
- Element names (e.g. <structure>) are capitalized in the xsd grammar.
- There is an issue of interleaving of definitions, or equivalently, what elements must occur in a fixed order.
- Where should attributes be legal; I think the rng grammar and the xsd grammar agree on this: putting them almost everywhere, but it needs discussion.
Other differences:
- <delI temporarily suppressed OtherXML because it did not translate correctly
Fixed with the element named "xml". - I dropped Blobtype; I fail to see the need for this.
Testing the Relax-NG Grammar
You will need to copy three files:
- dap4.rng - this is the grammar file; it uses the Relax-NG schema language (http://relaxng.org/).
This can be obtained from http://dl.dropbox.com/u/53929684/dap4.rng - test.xml - this is a test file, that I am growing to cover the whole grammar.
This can be obtained from http://dl.dropbox.com/u/53929684/test.xml - jing.jar - Jing is a validator that takes the grammar and a test file and checks that the test file conforms to the grammar.
This can be obtained from http://dl.dropbox.com/u/53929684/jing.jar.
To use it, do the command:
java -jar jing.jar dap4.rng test.xml
No output is produced if the validation succeeds, otherwise, error messages are produced.
-Dennis Heimbigner