DAP4: DDX Grammar: Difference between revisions
From OPeNDAP Documentation
⧼opendap2-jumptonavigation⧽
(Created page with "'''Version: 1.0''' Below is the formal grammar for the DAP4 DXD. <pre> <!-- Relax NG Grammar --> <!--grammar datatypelibrary="http://opendap.org/DAP4/datatypes.xml"--> <grammar...") |
No edit summary |
||
| Line 1: | Line 1: | ||
'''Version: 1.0''' | '''Version: 1.0''' | ||
Below is the formal grammar for the DAP4 DXD. | Below is the formal grammar for the DAP4 DXD, version 1.0. | ||
I constructed it without any reference to any other | |||
explicit or implicit grammars so I could record my | |||
proposal. | |||
Now, having looked at the implied grammar in page [[DAP4: Data Model]], | |||
I note at least the following differences. | |||
==== Variable definitions ==== | |||
I use the notation: | |||
<pre><variable name="v1" type="int32">... </pre> | |||
as opposed to using the typename as the element tag. | |||
<pre><Int32 name="v1>...</pre> | |||
I actually prefer the second notation, but it potentially interferes with | |||
my attempt to provide the equivalent of named user-defined types. | |||
That is, I want to give a name to, for example, a structure definition | |||
<pre><structure name="struct">...</pre> | |||
so that I can allow that type name to be used in variable | |||
<pre> | <pre> | ||
<!-- Relax NG Grammar --> | <!-- Relax NG Grammar --> | ||
Revision as of 23:05, 21 February 2012
Version: 1.0
Below is the formal grammar for the DAP4 DXD, version 1.0. I constructed it without any reference to any other explicit or implicit grammars so I could record my proposal.
Now, having looked at the implied grammar in page DAP4: Data Model, I note at least the following differences.
Variable definitions
I use the notation:
<variable name="v1" type="int32">...
as opposed to using the typename as the element tag.
<Int32 name="v1>...
I actually prefer the second notation, but it potentially interferes with my attempt to provide the equivalent of named user-defined types. That is, I want to give a name to, for example, a structure definition
<structure name="struct">...
so that I can allow that type name to be used in variable
<!-- Relax NG Grammar -->
<!--grammar datatypelibrary="http://opendap.org/DAP4/datatypes.xml"-->
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<element name="dataset">
<ref name="groupdef"/>
</element>
</start>
<define name="groupdef">
<attribute name="name"/>
<zeroOrMore>
<element name="attribute"><ref name="attributedef"/></element>
</zeroOrMore>
<optional>
<element name="dimensions">
<zeroOrMore>
<element name="dimension"><ref name="dimdef"/></element>
</zeroOrMore>
</element>
</optional>
<zeroOrMore>
<element name="variable"><ref name="variabledef"/></element>
</zeroOrMore>
<zeroOrMore>
<element name="group"><ref name="groupdef"/></element>
</zeroOrMore>
</define>
<define name="dimdef">
<attribute name="name"/>
<attribute name="size"/>
<zeroOrMore>
<element name="attribute"><ref name="attributedef"/></element>
</zeroOrMore>
</define>
<define name="variabledef">
<attribute name="name"/>
<zeroOrMore>
<element name="dimension">
<attribute name="name"/>
</element>
</zeroOrMore>
<zeroOrMore>
<element name="coordinatevar">
<attribute name="name"/>
</element>
</zeroOrMore>
<choice>
<attribute name="type"/>
<element name="structure"><ref name="structuredef"/></element>
<element name="sequence"><ref name="sequencedef"/></element>
<element name="grid"><ref name="griddef"/></element>
</choice>
<zeroOrMore>
<element name="attribute"><ref name="attributedef"/></element>
</zeroOrMore>
</define>
<define name="structuredef">
<attribute name="name"/>
<zeroOrMore>
<element name="variable"><ref name="variabledef"/></element>
</zeroOrMore>
<zeroOrMore>
<element name="attribute"><ref name="attributedef"/></element>
</zeroOrMore>
</define>
<define name="sequencedef">
<attribute name="name"/>
<zeroOrMore>
<element name="variable"><ref name="variabledef"/></element>
</zeroOrMore>
<zeroOrMore>
<element name="attribute"><ref name="attributedef"/></element>
</zeroOrMore>
</define>
<define name="griddef">
<attribute name="name"/>
<element name="array">
<element name="variable"><ref name="variabledef"/></element>
</element>
<element name="maps">
<zeroOrMore>
<element name="variable"><ref name="variabledef"/></element>
</zeroOrMore>
</element>
<zeroOrMore>
<element name="attribute"><ref name="attributedef"/></element>
</zeroOrMore>
</define>
<define name="attributedef">
<attribute name="name"/>
<attribute name="type"/>
<optional>
<attribute name="namespace"/>
</optional>
<choice>
<attribute name="value"/>
<oneOrMore>
<element name="value">
<attribute name="value"/>
</element>
</oneOrMore>
</choice>
</define>
</grammar>