Daha sonraki bir düzenlemede eklenen sorunun alternatif formülasyonu hala cevaplanmamış gibi görünüyor: bir elemanın alt öğeleri arasında bir adlandırılmış child3, bir isimlendirilmiş child4ve herhangi bir numaranın olması gerektiğini belirtmek için child1veya child2, sırayla herhangi bir kısıtlama olmaksızın çocukların göründüğü.
Bu, doğrudan tanımlanabilir bir normal dildir ve ihtiyacınız olan içerik modeli, '3' ve '4' rakamlarının her birinin tam olarak bir kez geçtiği ve '1' ve '2 rakamlarının bulunduğu dizeler kümesini tanımlayan düzenli bir ifadeye izomorfiktir. 'herhangi bir sayıda meydana gelir. Bunu nasıl yazacağınız açık değilse, böyle bir dili tanımak için ne tür bir sonlu durum makinesi inşa edeceğinizi düşünmek yardımcı olabilir. En az dört farklı durumu olacaktır:
- ne '3' ne de '4' görülmeyen bir başlangıç durumu
- '3'ün görüldüğü ancak' 4'ün görülmediği bir ara durum
- '4'ün görüldüğü ancak' 3'ün görülmediği bir ara durum
- hem '3' hem de '4'ün görüldüğü son durum
Otomat hangi durumda olursa olsun, '1' ve '2' okunabilir; makinenin durumunu değiştirmezler. İlk durumda, '3' veya '4' de kabul edilecektir; ara eyaletlerde yalnızca '4' veya '3' kabul edilir; son durumda, ne '3' ne de '4' kabul edilir. Normal ifadenin yapısını anlamak en kolay olanı, ilk önce dilimizin alt kümesi için yalnızca '3' ve '4'ün geçtiği bir normal ifade tanımlarsak:
(34)|(43)
'1' veya '2'nin belirli bir konumda herhangi bir sayıda geçmesine izin vermek için, ekleyebiliriz (1|2)*(veya [12]*normal ifade dilimiz bu gösterimi kabul ederse). Bu ifadeyi mevcut tüm konumlara ekleyerek,
(1|2)*((3(1|2)*4)|(4(1|2)*3))(1|2)*
Bunu bir içerik modeline çevirmek basittir. Temel yapı, normal ifadeye eşdeğerdir (34)|(43):
<xsd:complexType name="paul0">
<xsd:choice>
<xsd:sequence>
<xsd:element ref="child3"/>
<xsd:element ref="child4"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element ref="child4"/>
<xsd:element ref="child3"/>
</xsd:sequence>
</xsd:choice>
</xsd:complexType>
Sıfır veya daha fazla seçenek eklemek child1ve child2basittir:
<xsd:complexType name="paul1">
<xsd:sequence>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="child1"/>
<xsd:element ref="child2"/>
</xsd:choice>
<xsd:choice>
<xsd:sequence>
<xsd:element ref="child3"/>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="child1"/>
<xsd:element ref="child2"/>
</xsd:choice>
<xsd:element ref="child4"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element ref="child4"/>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="child1"/>
<xsd:element ref="child2"/>
</xsd:choice>
<xsd:element ref="child3"/>
</xsd:sequence>
</xsd:choice>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="child1"/>
<xsd:element ref="child2"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
Yığını biraz küçültmek istersek, yinelenen child1ve seçenekleri için adlandırılmış bir grup tanımlayabiliriz child2:
<xsd:group name="onetwo">
<xsd:choice>
<xsd:element ref="child1"/>
<xsd:element ref="child2"/>
</xsd:choice>
</xsd:group>
<xsd:complexType name="paul2">
<xsd:sequence>
<xsd:group ref="onetwo" minOccurs="0" maxOccurs="unbounded"/>
<xsd:choice>
<xsd:sequence>
<xsd:element ref="child3"/>
<xsd:group ref="onetwo" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="child4"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element ref="child4"/>
<xsd:group ref="onetwo" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="child3"/>
</xsd:sequence>
</xsd:choice>
<xsd:group ref="onetwo" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
XSD 1.1'de, allgruplar üzerindeki bazı kısıtlamalar kaldırılmıştır, bu nedenle bu içerik modelini daha net bir şekilde tanımlamak mümkündür:
<xsd:complexType name="paul3">
<xsd:all>
<xsd:element ref="child1" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="child2" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="child3"/>
<xsd:element ref="child4"/>
</xsd:all>
</xsd:complexType>
Ancak daha önce verilen örneklerden görülebileceği gibi, allgruplara yapılan bu değişiklikler aslında dilin ifade gücünü değiştirmez; sadece belirli dil türlerinin tanımını daha kısa ve öz yaparlar.