What is the difference between <all>  <sequence> <choice> and <group> in XML Schema?
            Asked
            
        
        
            Active
            
        
            Viewed 1.1k times
        
    12
            
            
        
        kjhughes
        
- 106,133
 - 27
 - 181
 - 240
 
        huangweiwei
        
- 161
 - 1
 - 2
 - 9
 
1 Answers
24
            When to use xsd:all, xsd:sequence, xsd:choice, or xsd:group:
- Use 
xsd:allwhen all child elements must be present, independent of order. - Use 
xsd:sequencewhen child elements must be present per their occurrence constraints and order does matters. - Use 
xsd:choicewhen one of the child element must be present. - Use 
xsd:groupas 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"
           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
        kjhughes
        
- 106,133
 - 27
 - 181
 - 240
 
- 
                    I want to use xsd:all since I don't want to maintain the sequence, but it requires all child elements to be present. I do not want this constraint too. Any way for this? – Hrishikesh Bawane Feb 10 '23 at 04:55
 - 
                    @HrishikeshBawane: Add `minOccurs="0"` to those `xsd:element` children of `xsd:all` that you wish to be optional. I've updated the answer with an example showing how. – kjhughes Feb 12 '23 at 15:32