बाद के संपादन में जोड़े गए प्रश्न का वैकल्पिक सूत्रीकरण अभी भी अनुत्तरित है: यह निर्दिष्ट करने के लिए कि किसी तत्व के बच्चों के बीच , क्रम में कोई बाधा के साथ एक नाम child3
, एक नाम child4
, और किसी भी नाम child1
या किसी भी संख्या का होना चाहिए child2
। जो बच्चे दिखाई देते हैं।
यह एक सीधा-साधा निश्चित नियमित भाषा है, और आपको जिस कंटेंट मॉडल की आवश्यकता है, वह आइसोमोर्फिक है जो एक रेगुलर एक्सप्रेशन है जो स्ट्रिंग्स के सेट को परिभाषित करता है जिसमें अंक '3' और '4' प्रत्येक में एक बार ठीक होता है, और अंक '1' और '2' में होते हैं। 'किसी भी संख्या में होते हैं। यदि यह स्पष्ट नहीं है कि इसे कैसे लिखना है, तो यह सोचने में मदद मिल सकती है कि आप इस तरह की भाषा को पहचानने के लिए किस प्रकार की परिमित राज्य मशीन का निर्माण करेंगे। इसमें कम से कम चार अलग-अलग राज्य होंगे:
- एक प्रारंभिक अवस्था जिसमें न तो '3' और न ही '4' देखा गया हो
- एक मध्यवर्ती राज्य जिसमें '3' देखा गया है, लेकिन '4' नहीं
- एक मध्यवर्ती स्थिति जिसमें '4' देखा गया है, लेकिन '3' नहीं
- एक अंतिम अवस्था जिसमें '3' और '4' दोनों देखी गई हैं
कोई फर्क नहीं पड़ता कि ऑटोमेटन किस स्थिति में है, '1' और '2' पढ़ा जा सकता है; वे मशीन की स्थिति को नहीं बदलते हैं। प्रारंभिक अवस्था में, '3' या '4' भी स्वीकार किया जाएगा; मध्यवर्ती राज्यों में, केवल '4' या '3' स्वीकार किया जाता है; अंतिम स्थिति में, न तो '3' और न ही '4' स्वीकार किया जाता है। नियमित अभिव्यक्ति की संरचना को समझना आसान है यदि हम पहली बार अपनी भाषा के सबसेट के लिए एक रेक्स को परिभाषित करते हैं जिसमें केवल '3' और '4' होते हैं:
(34)|(43)
दिए गए स्थान पर किसी भी संख्या में '1' या '2' की अनुमति देने के लिए, हम सम्मिलित कर सकते हैं (1|2)*
(या [12]*
यदि हमारी regex भाषा उस संकेतन को स्वीकार करती है)। सभी उपलब्ध स्थानों पर इस अभिव्यक्ति को सम्मिलित करते हुए, हम प्राप्त करते हैं
(1|2)*((3(1|2)*4)|(4(1|2)*3))(1|2)*
इसे सामग्री मॉडल में अनुवाद करना सरल है। मूल संरचना रेगेक्स के बराबर है (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>
शून्य-या-अधिक विकल्प सम्मिलित करना child1
और child2
सीधा है:
<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>
हम थोक थोड़ा कम करना चाहते हैं, तो हम का दोहरा विकल्पों के लिए एक नाम वाले समूह को परिभाषित कर सकते हैं child1
और 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 में, ऑन- all
ग्रुप्स में से कुछ बाधाओं को हटा दिया गया है, इसलिए इस सामग्री मॉडल को अधिक संक्षिप्त रूप से परिभाषित करना संभव है:
<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>
लेकिन जैसा कि पहले दिए गए उदाहरणों से देखा जा सकता है, all
-ग्रुप में ये परिवर्तन वास्तव में भाषा की अभिव्यंजक शक्ति को नहीं बदलते हैं; वे केवल कुछ विशेष प्रकार की भाषाओं की परिभाषा को अधिक सफल बनाते हैं।