xmlxsdxsd-validationxml-validation

The difference between <all> <sequence> <choice> and <group> in XSD?


What is the difference between <all> <sequence> <choice> and <group> in XML Schema?


Solution

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


    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"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <xsd:element name="r">
        <xsd:complexType>
          <xsd:all>
            <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"/>
          </xsd:all>
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>
    

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

    <r>
      <b/>
      <a/>
    </r>
    

    See also