2010-03-22 11 views
5

मेरे पास एक एक्सएमएल स्कीमा (एक्सएसडी) है जो तत्व को अनिवार्य रूप से परिभाषित करता है (इसे अभिभावक कहें); इस माता-पिता ने कहा है, पांच बच्चे तत्व, जो सभी वैकल्पिक हो सकते हैं, लेकिन कम से कम एक बच्चे तत्व होना चाहिए।एक्सएमएल स्कीमा (एक्सएसडी) - कम से कम एक बच्चे तत्व रखने के लिए पैरेंट तत्व को कैसे निर्दिष्ट करें?

मैं इसे xsd में कैसे निर्दिष्ट कर सकता हूं?

स्पष्टीकरण के लिए: बच्चे विभिन्न तत्व और वैकल्पिक हैं। उदाहरण के लिए ।

<Parent> 
    <Child1>contents are different to other siblings and arbitrary</Child1> 
    <Child2>can be text, a simple element, or another complex element</Child2> 
    <Child3>etc.. etc</Child3> 
</Parent> 

<xs:complexType name="Parent"> 
    <xs:sequence> 
    <xs:element minOccurs="0" name="Child1" type="xs:string"/> 
    <xs:element minOccurs="0" name="Child2" /> 
    <xs:element minOccurs="0" name="Child3" /> 
    </xs:sequence> 
</xs:complexType> 

हालांकि हर बच्चा वैकल्पिक है, माता-पिता को कम से कम एक बच्चा होना चाहिए।

+0

(और बहुत सारे गूगलिंग), ऐसा लगता है कि xsd में यह निर्दिष्ट करने के लिए कोई आसान निर्माण नहीं है; इसके लायक होने से अधिक परेशानी, मैंने वैध सॉफ़्टवेयर को अतिरिक्त नियमों को लागू करने का विकल्प चुना है (जैसे कि कम से कम एक बच्चा होना चाहिए)। – joedotnot

उत्तर

4

वहाँ हमेशा सीधा रास्ता है:

<xs:complexType name="Parent"> 
    <xs:choice> 
    <xs:sequence> 
     <xs:element name="Child1"/> 
     <xs:element name="Child2" minOccurs="0"/> 
     <xs:element name="Child3" minOccurs="0"/> 
    </xs:sequence> 
    <xs:sequence> 
     <xs:element name="Child2"/> 
     <xs:element name="Child3" minOccurs="0"/> 
    </xs:sequence> 
    <xs:sequence> 
     <xs:element name="Child3"/> 
    </xs:sequence> 
    </xs:choice> 
</xs:complexType> 
+2

प्रत्यक्ष दृष्टिकोण शायद काम करेगा; लेकिन बहुत से बच्चे तत्वों के लिए बहुत बोझिल हो जाता है। – joedotnot

+0

जब आप इसे जावा क्लास में बदलते हैं तो जेएक्सबी खराब परिणाम उत्पन्न कर रहा है –

0

minOccurs का उपयोग करें, उदा।

<xsd:complexType name="Parent"> 
    <xsd:sequence> 
    <xsd:element minOccurs="1" maxOccurs="5" name="Child" type="q10:string"/> 
    </xsd:sequence> 
</xsd:complexType> 
+0

मेरे इरादे से काफी कुछ नहीं। कृपया अद्यतन प्रश्न देखें जो उम्मीदपूर्वक इरादे को स्पष्ट करता है। – joedotnot

0

आप एक प्रतिस्थापन समूह बना सकते हैं जो आपके सभी बच्चों के तत्वों को शामिल करता है। इसके लिए आप minOccurs विशेषता का उपयोग यह निर्दिष्ट करने के लिए करते हैं कि समूह में कम से कम एक तत्व दस्तावेज़ में होना चाहिए।

+0

ऐसा नहीं लगता कि यह काम करेगा; प्रतिस्थापन समूह तत्वों को किसी भी तरह से एक दूसरे से संबंधित या व्युत्पन्न किया जाना चाहिए; मेरे प्रश्नों के अनुसार मेरे तत्व पूरी तरह से स्वतंत्र हैं। – joedotnot

0

कथनों का उपयोग करना (मुझे लगता है कि यह XSD 1.1 में ही उपलब्ध है) तो निम्न कार्य करना संभव है: उत्तर समीक्षा करने के बाद

<xs:element name="Parent"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="Child1" type="xs:string" minOccurs="0"/> 
      <xs:element name="Child2" minOccurs="0"/> 
      <xs:element name="Child3" minOccurs="0"/> 
     </xs:sequence> 
     <xs:assert test="count(*)>=1"/> 
    </xs:complexType> 
</xs:element> 
संबंधित मुद्दे