जैसा कि पहले के उत्तरों का पहले से ही उल्लेख किया गया है, आप एक ही कार्यक्षमता के साथ एक नया ItemType
विशेषता परिभाषित करने के बजाय xsi:type
विशेषता का उपयोग करके एक्सएसडी 1.0 में आसानी से पर्याप्त कर सकते हैं।
एक्सएसडी 1.1 में इस तरह के मामलों का समर्थन करना आसान बनाने के लिए डिज़ाइन किया गया एक निर्माण शामिल है, जो लोग किसी भी कारण से xsi:type
का उपयोग नहीं करना चाहते हैं: सशर्त प्रकार असाइनमेंट। अनिवार्य रूप से यह एक तत्व घोषणा को XPath/typename जोड़े के सरल अनुक्रम की अनुमति देता है; XPath अभिव्यक्तियों का अनुक्रम में मूल्यांकन किया जाता है और जब कोई सत्य का मूल्यांकन करता है, तो तत्व संबंधित प्रकार से जुड़ा होता है। एक्सपीएथ पर तत्वों के वंशजों में आगे बढ़ने या एक्सएमएल दस्तावेज़ के अन्य हिस्सों में देखने या बाहर जाने पर प्रतिबंध लगाने के लिए प्रतिबंध हैं (पहली बार स्कैन एक स्टार्ट-टैग से मुकाबला करने में मदद करता है, जैसे कि टाइप करने के लिए किसी तत्व को प्रमाणित करने के लिए उपयोग करें; दूसरा सत्यापन संदर्भ मुक्त रखने में मदद करता है), इसलिए अनिवार्य रूप से परीक्षण केवल विशेषता मानों पर परीक्षण हो सकते हैं। आपका उदाहरण इस प्रकार लिखा जा सकता है:
<xs:element name="item">
<xs:alternative test="@ItemType='SimpleMessage'" type="SimpleMessType"/>
<xs:alternative test="@ItemType='SimpleMessage'" type="ComplexMessType"/>
<xs:alternative type="xs:error"/>
</xs:element>
तीसरे विकल्प सुनिश्चित करता है कि आपके उम्मीद मामलों में से एक का सामना करना पड़ा जाना चाहिए, तत्व के लिए वैध था। यदि इसे यहां छोड़ा गया था, तो यदि परीक्षण अभिव्यक्तियों में से कोई भी सत्य नहीं था, तो इस मामले में xs:anyType
में तत्व घोषित प्रकार item
असाइन किया जाएगा।
स्रोत
2012-08-17 21:03:57