2013-10-08 5 views
5

निम्नलिखित XML दस्तावेज़ और स्कीमा एक बहुत बड़ा स्कीमा जिसमें समस्या पहले हुई से नीचे उबला हुआ था:'null-namespace' को xml तत्व के लिए क्यों अपेक्षित किया गया है जिसे स्कीमा में नामस्थान 'परिभाषित किया गया था?

एक्सएमएल दस्तावेज़:

<f2b:Foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:f2b="http://www.outerfoospace.com/schemas/foo2bar" xsi:schemaLocation="http://www.outerfoospace.com/schemas/foo2bar f2b-0-0-0.xsd"> 
    <f2b:Bar>text</f2b:Bar> 
</f2b:Foo> 

स्कीमा:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:f2b="http://www.outerfoospace.com/schemas/foo2bar" targetNamespace="http://www.outerfoospace.com/schemas/foo2bar"> 
    <xs:complexType name="T_Foo"> 
     <xs:sequence> 
      <xs:element name="Bar" xmlns="f2b"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:element name="Foo" type="f2b:T_Foo"/> 
</xs:schema> 

जब मैं स्कीमा के खिलाफ दस्तावेज़ को मान्य करें, मुझे <f2b:Bar> पर एक त्रुटि संदेश मिलता है - यह कहकर कि <f2b:Bar> अपेक्षित नहीं है। दस्तावेज़ को वैध बनाने के लिए मुझे <Bar> को स्पष्ट रूप से (!) 'शून्य-नामस्थान' में रखना होगा: <Bar xmlns="">। मुझे नहीं पता कि एक शून्य-नामित तत्व की अपेक्षा क्यों की जानी चाहिए। स्कीमा सभी तत्वों के लिए नामस्थान परिभाषित करता है और <Foo>-f2b- नामस्थान को वास्तव में सत्यापनकर्ता द्वारा अपेक्षित किया जाता है। लेकिन अगर मैंने स्पष्ट रूप से <Bar> में नामस्थान सेट किया है- जैसा कि मैंने उपरोक्त किया है, सत्यापनकर्ता अभी भी -element के लिए xmlns="" की अपेक्षा करता है। मैंने स्कीमा और दस्तावेज के कई बदलावों को कोई भाग्य के साथ उत्तर खोजने की कोशिश की - और मैं बस अनुमान नहीं लगा सकता कि इस विशेष मामले में नरक नाम की उम्मीद क्यों है।

किसी भी संकेत की सराहना की ... Ekke

उत्तर

3

लघु जवाब: अपने स्कीमा की जड़ xs:schema टैग करने के लिए elementFormDefault="qualified" जोड़ें।

लंबा उत्तर: डिफ़ॉल्ट रूप से, केवल शीर्ष-स्तर "वैश्विक" तत्व घोषणा स्कीमा के लक्ष्य नामस्थान पर ले जाती है। एक जटिल प्रकार के अंदर "स्थानीय" तत्व घोषणाएं नामस्थान में नहीं हैं। xs:schema पर elementFormDefault का उपयोग करके सभी तत्वों के लिए form विशेषता का उपयोग करके form विशेषता का उपयोग करके, या वैश्विक स्तर पर एक विशेष स्थानीय तत्व के लिए इसे ओवरराइड कर सकते हैं।

+0

स्पष्ट उत्तर के लिए धन्यवाद - आप बिल्कुल सही हैं। Ekke – ekke

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