The difference between and in XSD?

When to use xsd:all, xsd:sequence, xsd:choice, or xsd:group:

  • Use xsd:all when all child elements must be present, independent of
  • Use xsd:sequence when child elements must be present per their
    occurrence constraints and order does matters.
  • Use xsd:choice when one of the child element must be present.
  • Use xsd:group as a way to wrap any of the above in order to name
    and reuse in multiple locations within an XSD.

Note that occurrence constraints can appear on xsd:all, xsd:sequence, or xsd:choice in addition to the child elements to achieve various cardinality effects.

For example, if minOccurs="0" were added to xsd:element children of xsd:all, element order would be insignificant, but not all child elements would have to be present:

<?xml version="1.0"?>
<xsd:schema elementFormDefault="qualified"
  <xsd:element name="r">
        <xsd:element name="a" type="xsd:string" minOccurs="0"/>
        <xsd:element name="b" type="xsd:string" minOccurs="0"/>
        <xsd:element name="c" type="xsd:string" minOccurs="0"/>

For the above XSD, the following XML would be valid, even though not all children of r are present:


See also

Leave a Comment