xmlxsdxml-validationxsd-validation

Difference between <xsd:all> and <xsd:sequence> in schema definition?


I am using xsd:all in a complex type. When I miss any mandatory elements while validating it will show all the elements. It will not display the exact missed element.

But if I am use xsd:sequence I can get the exact missed element.

Is there any difference between these two?

xsd:sequence: XML element must be in same order.

But xsd:all: XML element may be any order.


Solution

  • <xsd:all> specifies that the child elements can appear in any order.

    <xsd:sequence> specifies child elements can only appear in the order mentioned.

    Example for Sequence:

    <xs:element name="compElement">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="ele1" type="xs:string"/>
          <xs:element name="ele2" type="xs:string"/>
          <xs:element name="ele3" type="xs:string"/>
          <xs:element name="ele4" type="xs:string"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    

    If you create an XML from this xsd then, it will look something like this:

    <compElement>
      <ele1>First</ele1>
      <ele2>Second</ele2>
      <ele3>Third</ele3>
      <ele4>Fourth</ele4>
    </compElement>
    

    Example for all:

    <xs:element name="compElement">
      <xs:complexType>
        <xs:all>
          <xs:element name="ele1" type="xs:string"/>
          <xs:element name="ele2" type="xs:string"/>
          <xs:element name="ele3" type="xs:string"/>
          <xs:element name="ele4" type="xs:string"/>
        </xs:all>
      </xs:complexType>
    </xs:element>
    

    If you create an XML file from this xsd then it could look something like this:

    <compElement>
      <ele2>Second</ele2>
      <ele1>First</ele1>
      <ele4>Fourth</ele4>
      <ele3>Third</ele3>
    </compElement>
    

    More info on xsd:all
    More Info on xsd:sequence

    Hope I answered your question.