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

user1679378 picture user1679378 · Apr 19, 2013 · Viewed 95.3k times · Source

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.

Answer

Madhusudan Joshi picture Madhusudan Joshi · Apr 19, 2013

<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.