<br><font size=2 face="sans-serif">Mike</font>
<br>
<br><font size=2 face="sans-serif">That looks reasonable.</font>
<br>
<br><font size=2 face="sans-serif">However as you must still be able to
specify dfdl:initiator/terminator on the complexType for scoping we need
to somehow make it clear that the grammar describes where the properties
APPLY not where they are SPECIFIED. </font>
<br>
<br><font size=2 face="sans-serif">Do any properties APPLY to a complexType?</font>
<br><font size=2 face="sans-serif"><br>
Alan Powell<br>
<br>
MP 211, IBM UK Labs, Hursley, Winchester, SO21 2JN, England<br>
Notes Id: Alan Powell/UK/IBM email: alan_powell@uk.ibm.com
<br>
Tel: +44 (0)1962 815073
Fax: +44 (0)1962 816898<br>
</font>
<br>
<br>
<br>
<table width=100%>
<tr valign=top>
<td><font size=1 color=#5f5f5f face="sans-serif">From:</font>
<td><font size=1 face="sans-serif">"Mike Beckerle" <mbeckerle.dfdl@gmail.com></font>
<tr valign=top>
<td><font size=1 color=#5f5f5f face="sans-serif">To:</font>
<td><font size=1 face="sans-serif"><dfdl-wg@ogf.org></font>
<tr valign=top>
<td><font size=1 color=#5f5f5f face="sans-serif">Date:</font>
<td><font size=1 face="sans-serif">13/05/2009 20:09</font>
<tr valign=top>
<td><font size=1 color=#5f5f5f face="sans-serif">Subject:</font>
<td><font size=1 face="sans-serif">[DFDL-WG] Grammar issue - simple and
complex asymetry</font></table>
<br>
<hr noshade>
<br>
<br>
<br><font size=3> </font>
<br><font size=3>The draft 034 grammar productions do not allow for a separate
prefix/suffix for a simple type as distinguished from the element having
that type. </font>
<br><font size=3> </font>
<br><font size=3>Draft 034 <i>does</i> allow for an element of complex
type to have a separate prefix and suffix for the element itself and another
one for the sequence or choice inside it. </font>
<br><font size=3> </font>
<br><font size=3>I've come to believe this is a mistake and I suggest a
fix below.</font>
<br><font size=3> </font>
<br><font size=3>Right now the grammar is:</font>
<br><font size=1 face="Courier New"> </font>
<br><font size=1 face="Courier New">Element = SimpleElement | ComplexElement</font>
<br><font size=1 face="Courier New"> </font>
<br><font size=1 face="Courier New">SimpleElement = Prefix SimpleContent
Suffix </font>
<br><font size=1 face="Courier New"> </font>
<br><font size=1 face="Courier New">SimpleContent = StringText // terminal.
No more prefixes/suffixes</font>
<br><font size=1 face="Courier New"> </font>
<br><font size=1 face="Courier New">ComplexElement = Prefix ComplexContent
Suffix</font>
<br><font size=1 face="Courier New"> </font>
<br><font size=1 face="Courier New">ComplexContent = Sequence | Choice
</font>
<br><font size=1 face="Courier New"> </font>
<br><font size=1 face="Courier New">Sequence = Prefix SequenceContent Suffix</font>
<br><font size=1 face="Courier New">Choice = Prefix ChoiceContent Suffix</font>
<br><font size=1 face="Courier New"> </font>
<br><font size=3>So, if I do:</font>
<br><font size=1 face="Courier New"> </font>
<br><font size=1 face="Courier New"><complexType dfdl:initiator="["
dfdl:terminator="]"></font>
<br><font size=1 face="Courier New">...</font>
<br><font size=1 face="Courier New"><element name="y"></font>
<br><font size=1 face="Courier New"> <complexType></font>
<br><font size=1 face="Courier New"> <sequence dfdl:separator=","
></font>
<br><font size=1 face="Courier New"> <element name="x"
type="int"/></font>
<br><font size=1 face="Courier New"> <element name="z"
type="int"/></font>
<br><font size=1 face="Courier New"> </sequence></font>
<br><font size=1 face="Courier New"></complexType></font>
<br><font size=1 face="Courier New"></element></font>
<br><font size=1 face="Courier New">...</font>
<br><font size=1 face="Courier New"></complexType></font>
<br><font size=1 face="Courier New"> </font>
<br><font size=3>I have two prefix opportunities. I can flatten the productions
above to:</font>
<br><font size=1 face="Courier New"> </font>
<br><font size=1 face="Courier New">ComplexElement = Prefix Prefix SequenceContent
Suffix Suffix</font>
<br><font size=1 face="Courier New"> </font>
<br><font size=3>An instance of this type would look like [[[5],[6]]].
That is, for complex types, there are separate prefix and suffix regions
for the element, and for the model-group which makes up its content.</font>
<br><font size=3> </font>
<br><font size=3>The first [ initiates element y.</font>
<br><font size=3>The second [ initiates the sequence</font>
<br><font size=3>The third [ initiates element x.</font>
<br><font size=3> </font>
<br><font size=3>This same behavior is not true for simple types:</font>
<br><font size=1 face="Courier New"> </font>
<br><font size=1 face="Courier New"><complexType dfdl:initiator="["
dfdl:terminator="]"></font>
<br><font size=1 face="Courier New">...</font>
<br><font size=1 face="Courier New"> </font>
<br><font size=1 face="Courier New"><element name="y" ></font>
<br><font size=1 face="Courier New"> <simpleType></font>
<br><font size=1 face="Courier New"> <restriction base="int"/></font>
<br><font size=1 face="Courier New"> </simpleType></font>
<br><font size=1 face="Courier New"></element></font>
<br><font size=1 face="Courier New">...</font>
<br><font size=1 face="Courier New"></complexType></font>
<br><font size=1 face="Courier New"> </font>
<br><font size=3>This can only mean [5]. The grammar, as formulated in
draft 034, does not allow for more than one prefix or suffix.</font>
<br><font size=3>The [ is the initiator of element y. </font>
<br><font size=1 face="Courier New"> </font>
<br><font size=3> </font>
<br><font size=3>I believe we should fix this as follows. New grammar:</font>
<br><font size=1 face="Courier New"> </font>
<br><font size=1 face="Courier New">Element = SimpleElement | ComplexElement</font>
<br><font size=1 face="Courier New"> </font>
<br><font size=1 face="Courier New">SimpleElement = Prefix SimpleContent
Suffix</font>
<br><font size=1 face="Courier New"> </font>
<br><font size=1 face="Courier New">SimpleContent = StringText </font>
<br><font size=1 face="Courier New"> </font>
<br><font size=1 face="Courier New">ComplexElement = ComplexContent //
Note: no more surrounding prefix suffix.</font>
<br><font size=1 face="Courier New"> </font>
<br><font size=1 face="Courier New">ComplexContent = Sequence | Choice
</font>
<br><font size=1 face="Courier New"> </font>
<br><font size=1 face="Courier New">Sequence = Prefix SequenceContent Suffix</font>
<br><font size=1 face="Courier New">Choice = Prefix ChoiceContent Suffix</font>
<br><font size=1 face="Courier New"> </font>
<br><font size=3>The above grammar arranges for an element of complex type
and its model group to both taken together specify a single prefix and
suffix.</font>
<br><font size=3> </font>
<br><font size=3>Revisiting our example (just repeating it here):</font>
<br><font size=3> </font>
<br><font size=1 face="Courier New"><complexType dfdl:initiator="["
dfdl:terminator="]"></font>
<br><font size=1 face="Courier New">...</font>
<br><font size=1 face="Courier New"><element name="y"></font>
<br><font size=1 face="Courier New"> <complexType></font>
<br><font size=1 face="Courier New"> <sequence dfdl:separator=","
></font>
<br><font size=1 face="Courier New"> <element name="x"
type="int"/></font>
<br><font size=1 face="Courier New"> <element name="z"
type="int"/></font>
<br><font size=1 face="Courier New"> </sequence></font>
<br><font size=1 face="Courier New"></complexType></font>
<br><font size=1 face="Courier New"></element></font>
<br><font size=1 face="Courier New">...</font>
<br><font size=1 face="Courier New"></complexType></font>
<br><font size=1 face="Courier New"> </font>
<br><font size=3>An instance now would look like [[5],[6]]</font>
<br><font size=3> </font>
<br><font size=3>The first [ is the initiator of element y, which is the
same as the initiator of the sequence that is its type.</font>
<br><font size=3>The second [ is the initiator of element x. (which is
the same as the initiator of the int that is its type)</font>
<br><font size=3> </font>
<br><font size=3>I believe this is more sensible, as it makes the behavior
of simple and complex types more similar.</font>
<br><font size=2> </font>
<br><font size=3>It begs the question of how one combines conflicting properties
on an element with the properties on the type, and even the model group
inside the type in the complex case. Because all these properties are describing
the same syntax fields in the grammar.</font>
<br><font size=2> </font>
<br><font size=3>That's a separate topic in a subsequent email.</font>
<br><font size=2> </font><tt><font size=2>--<br>
dfdl-wg mailing list<br>
dfdl-wg@ogf.org<br>
</font></tt><a href="http://www.ogf.org/mailman/listinfo/dfdl-wg"><tt><font size=2>http://www.ogf.org/mailman/listinfo/dfdl-wg</font></tt></a>
<br>
<br><font size=2 face="sans-serif"><br>
</font>
<br><font size=2 face="sans-serif"><br>
</font>
<hr><font size=2 face="sans-serif"><br>
<i><br>
</i></font>
<p><font size=2 face="sans-serif"><i>Unless stated otherwise above:<br>
IBM United Kingdom Limited - Registered in England and Wales with number
741598. <br>
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6
3AU</i></font>
<p><font size=2 face="sans-serif"><br>
<br>
</font>
<br>
<br><font size=2 face="sans-serif"><br>
</font>