xml - सत्यापन रूट के लिए कोई भी मिलान वैश्विक घोषणा उपलब्ध नहीं है




xsd xmllint (2)

पृष्ठभूमि

स्कीमा का उपयोग करके XML दस्तावेज़ को मान्य करें।

संकट

समस्या का सबसे सरल रूप दो फ़ाइलों में दिखाया गया है।

XML दस्तावेज़

<?xml version="1.0"?>

<recipe
  xmlns:r="http://www.namespace.org/recipe">

<r:description>
  <r:title>sugar cookies</r:title>
</r:description>

</recipe>

XSD दस्तावेज़

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
   version="1.0"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   xmlns:r="http://www.namespace.org/recipe">

  <xsd:complexType name="recipe">
    <xsd:choice>
      <xsd:element name="description" type="descriptionType"
        minOccurs="1" maxOccurs="1" />
    </xsd:choice>
  </xsd:complexType>

  <xsd:complexType name="descriptionType">
    <xsd:all>
      <xsd:element name="title">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:minLength value="5" />
            <xsd:maxLength value="55" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>
    </xsd:all>
  </xsd:complexType>
</xsd:schema>

त्रुटि

xmllint से पूर्ण त्रुटि संदेश:

file.xml: 4: एलिमेंट रेसिपी: स्कीमा वैलिडिटी एरर: एलिमेंट 'रेसिपी': सत्यापन रूट के लिए उपलब्ध कोई भी मिलान वैश्विक घोषणा नहीं।

सवाल

यह सुनिश्चित करने के लिए कि क्या दिए गए स्कीमा को सफलतापूर्वक XML दस्तावेज़ को सफलतापूर्वक सत्यापित करने के लिए इस्तेमाल किया जा सकता है, सही सिंटैक्स (या कौन सी स्कीमा विशेषताएँ गायब हैं) है?


आपको अपना XML उदाहरण बदलना होगा। आपके वर्तमान एक का कहना है कि यह एक प्रकार की तलाश में है जिसे नामस्थान http://www.namespace.org/recipe में विवरण कहा जाता है। हालांकि, उस नाम स्थान में उजागर एकमात्र प्रकार को नुस्खा और विवरण कहा जाता है।

तो या तो एक्सएसडी स्कीमा में एक प्रकार का वर्णन परिभाषित करें, या अपना उदाहरण बदलें ताकि आप नुस्खा प्रकार को सही ढंग से संदर्भित कर रहे हैं:

<?xml version="1.0" encoding="utf-8"?>
<r:recipe
  xmlns:r="http://www.namespace.org/recipe">
  <description>
    <title>sugar cookies</title>
  </description>
</r:recipe>

जड़ तत्वों के रूप में केवल वैश्विक तत्व परिभाषा का उपयोग किया जा सकता है। आपके स्कीमा में केवल जटिल प्रकार हैं और इसलिए त्रुटि है। <xsd:complexType name="recipe"> से बदलें

<xsd:element name="recipe">
  <xsd:complexType>
    <xsd:choice>
      <xsd:element name="description" type="descriptionType"
        minOccurs="1" maxOccurs="1" />
    </xsd:choice>
  </xsd:complexType>
</xsd:element>

इसके बारे में here और पढ़ें