बस चयनकर्ता को <xs:selector xpath="answer"/>
पर बदलें और आप ठीक होंगे। आम तौर पर केवल प्रदर्शन कारणों से XP12s को .//*
से बचाना अच्छा होता है।
यह मुझे लगता है कि जिस तरह से आप चाहते हैं काम कर रहा है आपके द्वारा दिए गए एक्सएमएल नमूना के लिए XML स्कीमा है:
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="question" type="questionType">
<xs:unique name="AnswerIdUnique">
<xs:selector xpath="answer"/>
<xs:field xpath="@id"/>
</xs:unique>
</xs:element>
<xs:complexType name="questionType">
<xs:sequence>
<xs:element name="answer" type="answerType" minOccurs="2" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="answerType">
<xs:sequence>
<xs:element ref="question" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="id" type="xs:token" use="required"/>
</xs:complexType>
</xs:schema>
आपके द्वारा प्रेषित एक्सएमएल ऊपर के साथ ठीक सत्यापित करता है; किसी भी भाई उत्तर की आईडी को डुप्लिकेट करना एक सत्यापन त्रुटि उत्पन्न करता है। उदाहरण के लिए, निम्न XML:
<question>
<answer id="1">
<question>
<answer id="1"/>
<answer id="2"/>
<answer id="1"/>
</question>
</answer>
<answer id="1">
<question>
<answer id="1"/>
<answer id="2"/>
</question>
</answer>
</question>
जब मान्य (QTAssistant में, दृश्य स्टूडियो के बाद से यह एक ही तकनीक पर आधारित है में संदेश के समान होना चाहिए), इन त्रुटियों हैं:
Error occurred while loading [], line 6 position 5
There is a duplicate key sequence '1' for the 'AnswerIdUnique' key or unique identity constraint.
Error occurred while loading [], line 9 position 3
There is a duplicate key sequence '1' for the 'AnswerIdUnique' key or unique identity constraint.
Document1.xml is invalid.
नीचे विजुअल स्टूडियो 2010 का एक स्क्रीनशॉट है जो मैंने पोस्ट किए गए एक्सएसडी के खिलाफ उपरोक्त XML सत्यापन दिखा रहा है; जबकि समस्याओं को अनजाने में चेतावनियों के रूप में रिपोर्ट किया जाता है, फिर भी, वे रिपोर्ट किए जाते हैं।
मैं बेतरतीब ढंग से एक ऑनलाइन सत्यापनकर्ता (http://xsdvalidation.utilities-online.info/) उठाया और एक ही एक्सएमएल और XSD मैं पोस्ट किया है मान्य कर दिया है; त्रुटि के रूप में रिपोर्ट किया गया है:
org.xml.sax.SAXParseException: Duplicate unique value [1] declared for identity constraint of element "question".org.xml.sax.SAXParseException: Duplicate unique value [1] declared for identity constraint of element "question".
एक बात आप पर ध्यान देना है तो आप अपने XSD के लिए एक लक्ष्य नाम स्थान है जब; उस स्थिति में, सभी शामिल नामस्थानों के लिए उपनाम परिभाषित करने की आवश्यकता है, और अपने चयनकर्ताओं में उनका उपयोग करें।
अद्यतन: और नामस्थान के साथ XSD:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://localhost" xmlns="http://localhost" targetNamespace="http://localhost" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="question" type="questionType">
<xs:unique name="AnswerIdUnique">
<xs:selector xpath="tns:answer"/>
<xs:field xpath="@id"/>
</xs:unique>
</xs:element>
<xs:complexType name="questionType">
<xs:sequence>
<xs:element name="answer" type="answerType" minOccurs="2" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="answerType">
<xs:sequence>
<xs:element ref="question" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="id" type="xs:token" use="required"/>
</xs:complexType>
</xs:schema>
tns
उपसर्ग की शुरूआत और चयनकर्ता में इसका इस्तेमाल नोटिस करें।
यह किसी कारण से काम नहीं करता है। कृपया मेरा अद्यतन प्रश्न – joelmdev
देखें यदि मुझे पता था कि यह क्यों काम नहीं करता है, तो मैं इस सवाल को पहले स्थान पर पोस्ट नहीं करूँगा, इस प्रकार किसी कारण से बयान यह काम नहीं करता है। मैं वीएस -2010 का उपयोग कर रहा हूं और ऐसा लगता है कि xpath चयनकर्ता में "उत्तर" युक्त प्रत्येक संस्करण काम करने से इंकार कर देता है। उत्तर टाइप से अद्वितीय कॉन्स्टेंट को हटाने और रेफरी = "प्रश्न" जोड़ने से एक अस्पष्ट त्रुटि हुई जो कि "द रेफरी" विशेषता मौजूद नहीं हो सकती है।"संपादन काम करने के लिए जितना करीब है, उतना करीब है। कृपया अपना एक्सएसडी पोस्ट करें और मैं स्थानीय रूप से कोशिश करूंगा। मेरे साथ असर के लिए धन्यवाद- यह वर्षों से है क्योंकि मुझे एक्सएमएल स्कीमा दस्तावेज़ लिखना पड़ा है और मैं जंगली हूं। – joelmdev
पेट्रू, आप एक्सएमएल के साथ काम करने के लिए किस सॉफ्टवेयर का उपयोग कर रहे हैं और इसे स्कीमा के खिलाफ मान्य कर सकते हैं? – joelmdev