Controlling Element Placement
You have already seen the xs:sequence element, which dictates that the elements it contains
must appear in exactly the same order in which they appear within
the sequence element. In addition to xs:sequence, schemas also provide the
xs:choice and xs:all
elements to control the order in which elements may appear. These
elements may be nested to create sophisticated element
structures.
Expanding the form-letter example, a sequence adds support for
various letter components to the formletter.xsd schema:
<xs:element name="letter">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="greeting"/>
<xs:element name="body"/>
<xs:element name="closing"/>
</xs:sequence>
</xs:complexType>
</xs:element>Now, thanks to the xs:sequence element, a letter must include
a greeting element, a body element, and a closing element, in that order. But, in
some cases, what is desired is that one and only one element appear
from a collection of possibilities. The xs:choice element supports this. For
example, if the greeting element
needed to be restricted to contain only one salutation out of a
permissible list, it could be declared to do so using xs:choice:
<xs:element name="greeting">
<xs:complexType mixed="true">
<xs:choice>
<xs:element name="hello"/>
<xs:element name="hi"/>
<xs:element name="dear"/>
</xs:choice>
</xs:complexType>
</xs:element>Now one of the permitted salutations must appear in the
greeting element for the letter
to be considered valid.
The remaining ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access