मेरे पास कुछ एक्सएमएल दस्तावेज़ हैं जिन पर मेरा कोई नियंत्रण नहीं है। उनकी संरचना अच्छी तरह से परिभाषित है, लेकिन इसका वर्णन पीडीएफ के समूह में किया गया है, जो कि बहुत सटीक होने के बावजूद स्वचालित सत्यापन को बहुत ही व्यवहार्य नहीं बनाते हैं। मैं उन पीडीएफ निष्पादन योग्य नियमों (अधिकतर) बनाने के लिए एक एक्सएमएल स्कीमा लिखने की कोशिश कर रहा हूं।टाइप किए गए मानों को XML स्कीमा के साथ खाली करने की अनुमति कैसे दें?
सभी तत्व अनिवार्य हैं। लेकिन उनमें से आधा या तो खाली हो सकता है या सरल टाइप की गई सामग्री हो सकती है।
इन तत्वों के लिए डेटाटाइप को परिभाषित करते समय, मैंने प्रत्येक के दो संस्करणों को परिभाषित किया: एक "सामान्य" एक, और दूसरा जो खाली हो सकता है।
<xs:simpleType name="empty">
<xs:restriction base="xs:string">
<xs:length value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="codPostal">
<xs:restriction base="xs:string">
<xs:pattern value="^[0-9]{4}-[0-9]{3}$"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="opt_codPostal">
<xs:union memberTypes="empty codPostal"/>
</xs:simpleType>
वहाँ ऐसा करने का एक कम दोहराव रास्ता नहीं है: मैं एक empty
डेटाप्रकार साथ यूनियनों को परिभाषित करते हुए ऐसा किया?
हां, स्ट्रिंग उदाहरण बेवकूफ था ... मैंने इसे और अधिक सार्थक में बदल दिया (जो वास्तव में आपके उत्तर को अमान्य नहीं करता है।) –
मुझे * दस्तावेज़ में 'xsi: nil' का उपयोग करना चाहिए? मैं दस्तावेज़ को नहीं बदल सकता :( –
@ मार्टिन्हो: दुर्भाग्य से हाँ, आपको दस्तावेज़ पर भी "शून्य" निर्दिष्ट करने की आवश्यकता है। AFAIK केवल वही गैर-घुसपैठ करने का तरीका है जो आप चाहते हैं वह संघ प्रकार का दृष्टिकोण है जिसे आपने पहले ही चुना है –