2011-03-07 13 views
27

मैं मुसीबत निम्नलिखित XML स्कीमा के व्यवहार को समझने हो रहा है:समझौता XSD: चुनाव और minOccurs

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="rootnode"> 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:choice minOccurs="1" maxOccurs="2"> 
      <xsd:element name="e1" minOccurs="1" maxOccurs="2"/> 
      <xsd:element name="e2" minOccurs="0" maxOccurs="1"/> 
     </xsd:choice> 
     </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

मैं या तो तत्व <e1> या <e2><rootnode> के एक बच्चे के रूप में आवश्यक हो कम से कम एक उदाहरण की उम्मीद। मेरी उम्मीदों के बावजूद, एक खाली <rootnode> इस स्कीमा के विरुद्ध सत्यापन होगा:

> xmllint --schema test.xsd empty.xml 
<?xml version="1.0" encoding="UTF-8"?> 
<rootnode> 
</rootnode> 
empty.xml validates 

अगर मैं "0" के अलावा कुछ करने के लिए तत्व e2 की minOccurs विशेषता बदलने के लिए, मैं व्यवहार मैं मूल रूप से उम्मीद मिलता है।

  • यह है जैसे कि मात्र <e2> मायने रखता है मेरे उदाहरण में xsd:choice का एक घटना के रूप में तत्व के अभाव लगता है।

  • यदि ऐसा है, तो यह असीमित संख्या कैसे होती है maxOccurs मेरी xsd:choice में सीमा का उल्लंघन नहीं करती है?

उत्तर

81

मैं आपको बता आप सबसे अधिक दो बार कम से कम एक बार और दुकानों पर जा सकते हैं, और हर बार जब आप क्या खरीदने के लिए की एक विकल्प है: आप सेब (या तो एक सेब या दो सेब) खरीद सकते हैं, या आप संतरे खरीद सकते हैं (या तो कोई संतरे या एक नारंगी)।

यह पूरी तरह से संभव है कि आप दो बार दुकानों पर जाने के लिए और नारंगी खरीदने के लिए प्रत्येक अवसर पर जाना चुनेंगे। तो आप कुछ भी वापस नहीं आते हैं।

+0

@ मिज़ो लिखते हैं (एक जवाब में मैंने हटा दिया): मैंने इसका एक निर्णय पेड़ खींचा, और निष्कर्ष निकाला कि चुनाव ग्यारह विशिष्ट अनुक्रमों का परिणाम हो सकता है। अगर मैं एक बार "खरीदारी करने" का फैसला करता हूं, तो मैं ई 1, ई 1 ई 1, कुछ भी नहीं या ई 2 के साथ समाप्त कर सकता हूं। अगर मैं दो बार खरीदारी करने का फैसला करता हूं, तो मैं पिछले चार क्रमिकताओं या ई 1 ई 1 ई 1, ई 1 ई 2, ई 1 ई 1 ई 1 ई 1, ई 1 ई 1 ई 2, ई 2 ई 1, ई 2 ई 1 ई 1 या ई 2 ई 2 के साथ समाप्त हो सकता हूं। क्या ये सही है? - मिजो 6 घंटे पहले –

+11

यही कारण है कि मैं केले खाते हैं: केले के पेड़ों में कम शाखाएं हैं। – Dan

+1

एसओ पर थोड़ी देर में मैंने पढ़ा है सबसे अच्छा जवाब: स्पष्ट, संक्षेप में, और आपको प्रक्रिया में मुस्कुराता है। कुडोस। – tsemer

1

यहाँ स्वीकार्य संयोजन

Two choices: 
e1 (1 - 2) + e1 (1 - 2) = e1 x (2 - 4), or 
e1 (1 - 2) + e2 (0 - 1), or 
e2 (0 - 1) + e1 (1 - 2), or 
e2 (0 - 1) + e2 (0 - 1) = e2 (0 - 2) 

One choice (but no new outcomes): 
e1 (1-2), or 
e2 (0-1) 


e1e1, e1e1e1, e1e1e1e1 
e1, e1e2, e1e1e2 
e2e1, e2e1e1 
empty, e2, e2e2 

ध्यान दें कि चुनाव [मिनट = 2 अधिकतम = 2] मान्य संयोजनों का एक ही सेट पैदा करने वाला होता है।

+0

ठीक है, तो अगर आप डुप्लिकेट 'e1e1' को हटाते हैं तो ग्यारह के रूप में गिना जाता है। निश्चित रूप से, 'पसंद' पर 'minOccurs' का कोई प्रभाव नहीं पड़ता है, अगर बच्चों के तत्वों में से एक 'minOccurs =" 0 "' है। – mizo

+0

दाएं, 11 अद्वितीय संभावनाएं। ध्यान दें कि minOccurs = "1" डिफ़ॉल्ट है, इसलिए विशेषता को हटाने से minOccurs मान नहीं बदला जाता है। यहां तक ​​कि जब आप minOccurs = 2 सेट करते हैं, तब भी वैध combos का सेट नहीं बदला जाना चाहिए। जब तक वैध विकल्पों में से एक minOccurs = 0 है, तो मैं निष्कर्ष निकालता हूं कि पसंद विशेषताएँ जहां minOccurs = maxOccurs एक ही सेट का उत्पादन करता है जहां minOccurs

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