Difference between revisions of "DAP4: DDX Grammar"
From OPeNDAP Documentation
(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...") |
|||
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>