2012-07-01 20 views
5

स्कीमा (गुप्त, ब्याज के मुख्य बिंदुओं का नाम बदला जाता है और बाकी को छोड़ दिया) को देखते हुए:यह XDocument प्रमाणीकरण विफल क्यों करता है?

Dim xDocument = 
<x:inspec xmlns:x='the_right_namespace'> 
<a_collection_property/> 
<another_collection_property/> 
</x:inspec> 

सत्यापन के साथ विफल:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema id="inspec" 
    targetNamespace="the_right_namespace" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
> 
    <xs:element name="inspec"> 
    <xs:complexType> 
     <xs:all> 
     <xs:element name="a_scalar_property" type="xs:int"/> 
     <xs:element name="a_collection_property"> 
      <xs:complexType> 
      <snip> 
      </xs:complexType> 
     </xs:element> 
     <xs:element name="another_collection_property"> 
      <xs:complexType>     
      <snip> 
      </xs:complexType> 
     </xs:element>      
     </xs:all> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

और उदाहरण (वीबी एक्सएमएल शाब्दिक का उपयोग कर घोषित) संदेश The element 'inspec' in namespace 'the_right_namespace' has incomplete content. List of possible elements expected: 'a_scalar_property'.

क्यों? W3Schools के अनुसार all तत्व:

"सभी तत्व निर्दिष्ट करते हैं कि बाल तत्व किसी भी क्रम में प्रकट हो सकते हैं और प्रत्येक बच्चा तत्व शून्य या एक बार हो सकता है।"

a_scalar_property को छोड़कर यह शून्य बार शामिल है। यह दस्तावेज़ मान्य करने में विफल क्यों होता है?

और 'पूर्ण कोड पोस्ट करें' जैसी चीजें न कहें - यह मेरा आईपी नहीं है और मैंने इसे एक अच्छे कारण के लिए अनामित किया है। इसके लिए बहुत कुछ और है, और मैंने इस न्यूनतम उदाहरण के साथ परीक्षण किया है, यह एक ही परिणाम देता है।

+0

प्रासंगिक: (। मैं यह नहीं कह रहा हूँ वे आवश्यक रूप से इस मामले में गलत होगा) http://w3fools.com/ – JJJ

+0

धन्यवाद - मुझे W3Schools को अपने आप का अधिक उपयोग करने के लिए नहीं मिला है, लेकिन इसे एक संदर्भ के रूप में शामिल किया गया है कि शायद सभी ने सुना है - और आपको उम्मीद है कि एक्सएमएल स्कीमा के मौलिक टुकड़े के बारे में पृष्ठ पर पहली वाक्य सही होगी! –

उत्तर

6

आप xs:all में हर वैकल्पिक तत्व के लिए minOccurs="0" निर्दिष्ट करना होगा:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema id="inspec" 
    targetNamespace="the_right_namespace" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
> 
    <xs:element name="inspec"> 
     <xs:complexType> 
      <xs:all> 
       <xs:element name="a_scalar_property" type="xs:int" minOccurs="0" /> 
       <xs:element name="a_collection_property" minOccurs="0"> 
        <xs:complexType> 
         <!-- snip --> 
        </xs:complexType> 
       </xs:element> 
       <xs:element name="another_collection_property" minOccurs="0"> 
        <xs:complexType> 
         <!-- snip --> 
        </xs:complexType> 
       </xs:element> 
      </xs:all> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 
+0

धन्यवाद। बेवकूफ लगता है कि मुझे परेशान करना है - '' का बिंदु क्या है यदि मुझे अभी भी प्रत्येक तत्व को एनोटेट करना है? फिर भी, समस्या हल करती है। –

+0

मदद करने के लिए खुशी हुई। 'xs: all' बस" किसी भी क्रम में "भाग हल करता है ... और आपको शायद" किसी ऑर्डर "और" शून्य, एक या अधिक "की आवश्यकता होने पर खुशी का सामना करना पड़ेगा। – Filburt

2

तत्व को वैकल्पिक बनाने के लिए, minOccurrs विशेषतासभी> समूह में भी 0 होना चाहिए। एक्सएमएल स्कीमा विनिर्देश पढ़ने से प्राप्त करना वास्तव में बोझिल है, लेकिन w3schools पर भरोसा करना एक अच्छा विकल्प नहीं है।

+0

[MSDN पर प्रलेखन] (http://msdn.microsoft.com/en-us/library/ms256182) उसी तरह से भ्रामक है: * "समूह में तत्वों को किसी भी क्रम में दिखाई देते हैं (या नहीं दिखाई देते हैं) की अनुमति देता है युक्त तत्व में। "* – Filburt

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