- From: Laurens van den Oever <laurens@Q42.nl>
- Date: Mon, 29 Jul 2002 11:28:36 -0400 (EDT)
- To: <www-dom@w3.org>
Hi,
While evaluating the proposed standard, I stumbled upon another problem:
the creation of nodes and especially the required children and
attributes of elements and the use of <xsd:choice/> in XML Schemas.
For instance:
XML:
<ancestor/>
XML Schema:
<xs:element name="parent">
<xs:complexType>
<xs:choice minOccurs="2" maxOccurs="2">
<xs:element name="childA" type="xs:string"/>
<xs:element name="childB" type="xs:string"/>
</xs:choice>
<xs:complexType>
</xs:element>
<xs:element name="ancestor">
<xs:complexType>
<xs:sequence>
<xs:element ref="parent" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
In this case the <ancestor/> element's getChildElements() method will
return a NodeList with one element: <parent/>. However, inserting this
<parent/> element will not result in valid XML since the <parent/>
element needs at least two children. Attributes with use=required pose
similar problems. Both an getRequiredChildElements() method or adding
the required children to the elements in the getChildElements() NodeList
can solve this problem.
However, <parent/> is valid in four different configurations and I'd
like to let the user choose the one to use. The <xs:choice/> element is
quite a challenge for validating XML editors. Especially when nested.
See for example the table declaration in the XHTML schema:
<xs:group name="table.content">
<xs:sequence>
<xs:element ref="caption" minOccurs="0"/>
<xs:choice>
<xs:element ref="col" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="colgroup" minOccurs="0" maxOccurs="unbounded"/>
</xs:choice>
<xs:choice>
<xs:sequence>
<xs:element ref="thead" minOccurs="0"/>
<xs:element ref="tfoot" minOccurs="0"/>
<xs:element ref="tbody" maxOccurs="unbounded"/>
</xs:sequence>
<xs:choice>
<xs:element ref="tr" maxOccurs="unbounded"/>
</xs:choice>
</xs:choice>
</xs:sequence>
</xs:group>
Most choices don't have to be resolved, but the choice between a
<table/> with <tbody/> children and a <table/> with <tr/> children has
to be made in order to get the document valid.
Greetings,
Laurens van den Oever
Received on Monday, 29 July 2002 16:08:18 UTC