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 initially without any reference to any other explicit or implicit grammars so I could record my ideas. I have since modified it based on examining James' implied grammar and from comments from others and from a comparison with the xsd grammar.
Differences with DAP4 xsd Grammar
I converted the xsd grammar to an equivalent relax-ng (rng) grammar.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.
(but see
previous commentary).
- The dimensions of a variable are currently specified in the rng grammar as a sequence of elements named "Dimension" contained in the "variables" element type.
- The Dataset element in the xsd has a couple of extra
attributes. I added these.
- The xsd appears to allow attributes to themselves have
attributes. This needs discussion.
- The URL basetype is in the xsd. But I do not see the justification
for keeping it.
- It appears that the Dataset contains a top level
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.
- There may still be some minor differences in representing
coordinate variables.
-
The xsd represents attribute values thus:
<attribute name="a"><value>...</value><value>...</value></attribute>
I chose to use attributes in the multi-valued case because I prefer not to use elements with content unless really necessary. So I represented the above as this.<attribute name="a"><value value="..."/><value value="..."/></attribute>
- 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.
- 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
This grammar file 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.
java -jar jing.jar dap4.rng test.xmlNo output is produced if the validation succeeds, otherwise, error messages are produced.