2009-04-18 6 views
53

क्या यह निर्दिष्ट करने का कोई तरीका है कि एक्सएसडी में 2 गुणों में से एक की आवश्यकता है?एक्सएसडी - 2 विशेषताओं में से एक की आवश्यकता है?

उदाहरण के लिए, मेरे पास इस तरह की परिभाषा है।

<xs:attribute name="Name" type="xs:string" use="optional" /> 
<xs:attribute name="Id" type="xs:string" use="optional" /> 

मैं यह परिभाषित करने में सक्षम होना चाहता हूं कि इनमें से कम से कम एक आवश्यक है। क्या यह संभव है?

उत्तर

40

नहीं, मुझे नहीं लगता कि आप इसे विशेषताओं के साथ कर सकते हैं। आप दो < xs को लपेट सकते हैं: तत्व > < xs में: विकल्प > - लेकिन विशेषताओं के लिए, कोई समकक्ष निर्माण नहीं है, मुझे डर है।

मार्क

9

मार्क बिल्कुल सही है ... आप XS नहीं कर सकते हैं: XSD में चुनाव पेरेंट तत्व: एक XS अंदर विशेषता बच्चे तत्वों।

तर्क यह प्रतीत होता है कि यदि किसी तत्व के दो उदाहरणों में परस्पर अनन्य विशेष गुण हैं तो वे तर्कसंगत रूप से दो अलग-अलग तत्व हैं।

इसके लिए एक कामकाज जेनी टेनीसन here द्वारा प्रस्तुत किया गया है।

20

XSD 1.1 आप इस का उपयोग करते हैं इस बात पर ज़ोर देंगे।

<xsd:element name="remove"> 
    <xsd:complexType>       
     <xsd:attribute name="ref" use="optional"/> 
     <xsd:attribute name="uri" use="optional"/> 
     <xsd:assert test="(@ref and not(@uri)) or (not(@ref) and @uri)"/>    
    </xsd:complexType> 
</xsd:element> 
+1

अच्छा समाधान है, लेकिन जब से यह 2012 (http://www.w3.org/TR/xmlschema11-1/) में जारी किया गया था, और मैं .NET 4.0 उपयोग कर रहा हूँ, (2010 में जारी) यह है समर्थित नहीं। क्या यह .NET 4.5 में समर्थित है? उदाहरण वर्ग: https://msdn.microsoft.com/en-us/library/swxzdhc0(v=vs.110).aspx –

0

उदाहरण "व्यक्ति" नामक तत्व को परिभाषित करता है जिसमें या तो "कर्मचारी" तत्व या "सदस्य" तत्व होना चाहिए।

<xs:element name="person"> 
    <xs:complexType> 
    <xs:choice> 
     <xs:element name="employee" type="employee"/> 
     <xs:element name="member" type="member"/> 
    </xs:choice> 
    </xs:complexType> 
</xs:element> 
+0

यहां अपने स्रोत का संदर्भ देने की देखभाल करें? http://www.w3schools.com/xml/el_choice.asp – Reisclef

संबंधित मुद्दे