2008-12-22 24 views
7

मैं निम्न के समान एक एक्सएमएल के लिए एक बहुत सरल XML स्कीमा निर्माण करने के लिए कोशिश कर रहा हूँ:अस्पष्ट XML स्कीमा

<messages> 
    <item> 
    <important_tag></important_tag> 
    </item> 
    <item> 
    <important_tag></important_tag> 
    <tag2></tag2> 
    </item> 
    <item> 
    <tag2></tag2> 
    <tag3></tag3> 
    </item> 
</messages> 

विचार यह है कि <important_tag> एक विशिष्ट परिभाषा है और यह कर सकते हैं या के तहत प्रकट नहीं हो सकता होगा <item>। यह एक से अधिक बार भी प्रकट हो सकता है। इसके अतिरिक्त, <important_tag> से पहले या उसके बाद अन्य टैग भी हो सकते हैं जिन्हें मैं पहले से नाम नहीं दे सकता।

मैं <important_tag> के लिए एक विशिष्ट परिभाषा देना चाहता हूं। उदाहरण के लिए, उन गुणों को परिभाषित करें जिनमें यह होना चाहिए। मेरा मतलब है कि यदि महत्वपूर्ण_टैग मौजूद है तो यह मेरी परिभाषा के अनुरूप होना चाहिए। किसी भी अन्य टैग को किसी भी परिभाषा के अनुरूप नहीं है।

मैं निम्नलिखित योजना उपयोग करने की कोशिश:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="messages"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element ref="item" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:element name="item"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element ref="important_tag" minOccurs="0"/> 
     <xs:any minOccurs="0"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:element name="important_tag"> 
    <xs:complexType> 
     <xs:simpleContent> 
     ... specific definitions for important_tag ... 
     </xs:simpleContent> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

यह कह रही है कि स्कीमा अस्पष्ट है एक त्रुटि का परिणाम है।

सटीक त्रुटि संदेश है:

cos-nonambig: '<xs:element ref="important_tag">' makes the content model non-deterministic against '<xs:any>'. Possible causes: name equality, overlapping occurrence or substitution groups. 

मैं Altova के XML जासूस उपयोग कर रहा हूँ।

मैं इसे कैसे हल करूं?

धन्यवाद, दाना

+0

क्या आप कृपया प्राप्त होने वाले सटीक त्रुटि संदेश और आपके द्वारा उपयोग किए जाने वाले टूल पोस्ट कर सकते हैं? – Tomalak

उत्तर

6

त्रुटि के बारे में: जो त्रुटि संदेश एक पंक्ति है कि XSD आप शामिल में नहीं है का उल्लेख है, लेकिन यह में इन दो पंक्तियों अस्पष्ट हैं:

<xs:element ref="important_tag" minOccurs="0"/> 
<xs:any minOccurs="0"/> 

सबसे सरल उदाहरण दिखाने के लिए अगर वहाँ सिर्फ था अस्पष्टता है एक <important_tag>:

<important_tag></important_tag> 
समस्या

है कि यह एक "important_tag" और शून्य "किसी भी" टैग (जो आप चाहते थे) के रूप में व्याख्या की जा सकती है, लेकिन यह भी शून्य "important_tag" और एक के रूप में व्याख्या की जा सकती "कोई भी" टैग। ऐसा इसलिए है क्योंकि "कोई भी" टैग "important_tag" सहित किसी भी टैग से मेल खा सकता है।

मैंने पढ़ा है कि एक्सएमएल स्कीमा का अगला संस्करण आपको यह कहने में सक्षम बनाता है: महत्वपूर्ण_टैग को छोड़कर कोई भी टैग।

एक्सएमएल को दो अलग-अलग तरीकों से मिलान करना नियमित अभिव्यक्ति "ए * ए *" मिलान "ए" से दो अलग-अलग तरीकों से मेल खाता है (एक पहला "ए" या एक सेकंड "ए")। इस अस्पष्टता को डीटीडी के लिए एक्सएमएल स्पेक में "गैर-निर्धारिती" कहा जाता था, लेकिन एक्सएमएल स्कीमा स्पेक इसे अनोखा कण एट्रिब्यूशन नियम (यूपीए) कहता है, जिसका अर्थ है कि आपको यह बताने में सक्षम होना चाहिए कि स्कीमा का कौन सा हिस्सा प्रत्येक भाग को प्राप्त करता है एक्सएमएल दस्तावेज़ का।

+1

आप सही हैं, यह सही समस्या थी। मैंने इसे "नियमों को बदलने" द्वारा अधिग्रहित किया, यानी, एक कठोर स्कीमा लागू करना। और टैग नाम पर नोट के लिए धन्यवाद - यह भी बदल गया है :) – Dana

7

वहाँ कि एक्स्टेंसिबल स्कीमा desigining, आप here पा सकते हैं जिसके बारे में बात करती है MSDN पर एक महान लेख, मैं सुझाव है कि आप यह सब के माध्यम से जाना है, लेकिन विशेष रूप से अपनी बात करने के लिए इसे आप क्यों बताते हैं 'है इस त्रुटि को बिंदु 2 में प्राप्त कर रहा है। "एक्सएमएल स्कीमा का उपयोग एक संस्करण योग्य XML प्रारूप को डिज़ाइन करने के लिए" (आप "गैर-निर्धारिती" की खोज कर सकते हैं और सीधे वहां जा सकते हैं।

असल में, एक बार आपके पास xs: कोई तत्व वैधकर्ता अन्य भाई तत्वों के बारे में कुछ भी नहीं मान सकता है, इसलिए - आपके पास महत्वपूर्ण_टैग की परिभाषा हो सकती है जिसके लिए उन अनिवार्य attribu की आवश्यकता नहीं होती है टीईएस और इसलिए उन तत्वों को

+0

और ऑर्चर्ड्स का लेख यहां: http://www.xml.com/lpt/a/1329 – annakata

+0

हां, धन्यवाद; इसे भी पढ़ें और सोचें कि यह बहुत अच्छा है। –

1

आपकी आवश्यकताओं के साथ ("किसी भी अन्य टैग को किसी भी परिभाषा के अनुरूप नहीं होना चाहिए"), Schematron, जो नियमों पर आधारित है ("यह सच होना चाहिए" "यह गलत होना चाहिए") डब्ल्यू 3 सी स्कीमा से बेहतर समाधान हो सकता है, जो कि "सब कुछ ऐसा होना चाहिए"।

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