Проверка схемы XML: не удается найти объявление элемента
Я все еще немного новичок в XML-схеме и т. д. и работали над разработкой некоторых XML, схемы и Таблицы Стилей (XSLT). Я сделал разумный прогресс, но затем понял, что моя схема перестала работать, поэтому я вернул ее к более простому примеру без описания.
вот мой XML:
<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="Test.Namespace"  
      schemaLocation="http://myNameSpace.com Test1.xsd">
    <element1 id="001">
        <element2 id="001.1">
             <element3 id="001.1" />
        </element2>
    </element1>
</Root>
Я написал схему, которая лежит здесь:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="Test.Namespace"
            elementFormDefault="qualified">
    <xsd:element name="Root">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="element1" maxOccurs="unbounded" type="element1Type"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:complexType name="element1Type">
        <xsd:sequence>
            <xsd:element name="element2" maxOccurs="unbounded" type="element2Type"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>
    <xsd:complexType name="element2Type">
        <xsd:sequence>
            <xsd:element name="item" type="element3Type"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>
    <xsd:complexType name="element3Type">
         <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>        
 </xsd:schema>
схема представляет структуру моего реального XML.
Теперь, когда я пытаюсь проверьте мой XML, я получаю эту ошибку:
cvc-elt.1: Cannot find the declaration of element 'Root'. [7] 
Это, думаю, связано с проблемой пространства имен в корневом элементе, но я действительно не уверен.
может кто-нибудь подсказать, что я делаю неправильно, пожалуйста.
3 ответов
cvc-elt.1: не удается найти объявление элемента 'Root'. [7]
код schemaLocation атрибут корневого элемента должен быть xsi:schemaLocation, и вам нужно исправить это, чтобы использовать правильное пространство имен.
вы, вероятно, должны изменить targetNamespace схемы и xmlns документа http://myNameSpace.com (поскольку пространства имен должны быть допустимыми URIs, которые Test.Namespace нет, хотя urn:Test.Namespace было бы хорошо). После этого надо найти схему. Этот дело в том, что все три целевого пространства имен схемы, пространства имен документа и пространства имен, для которых вы задаете расположение схемы, должны быть одинаковыми.
(хотя он по-прежнему не будет проверять как ваш <element2> содержит элемент <element3> в документе, где схема ожидает item)
спасибо всем выше, но теперь это исправлено. В интересах других наиболее существенной ошибкой было выравнивание трех пространств имен, как это было предложено Ian.
для полноты, вот исправленные XML и XSD
вот XML, с исправленными опечатками (извините за любую путаницу, вызванную опозданием)
<?xml version="1.0" encoding="UTF-8"?>
<Root
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="urn:Test.Namespace"  
    xsi:schemaLocation="urn:Test.Namespace Test1.xsd"
    >
    <element1 id="001">
        <element2 id="001.1">
            <element3 id="001.1" />
        </element2>
    </element1>
</Root>
и вот схема
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="urn:Test.Namespace"
            xmlns="urn:Test.Namespace"
            elementFormDefault="qualified">
    <xsd:element name="Root">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="element1" maxOccurs="unbounded" type="element1Type"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:complexType name="element1Type">
        <xsd:sequence>
            <xsd:element name="element2" maxOccurs="unbounded" type="element2Type"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>
    <xsd:complexType name="element2Type">
        <xsd:sequence>
            <xsd:element name="element3" type="element3Type"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>
    <xsd:complexType name="element3Type">
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>        
</xsd:schema>
еще раз спасибо всем, я надеюсь, что это кому-то другому в будущее.
на targetNamespace вашей XML-схемы не соответствует пространству имен Root элемент (точка в Test.Namespace и запятую в Test,Namespace)
как только вы сделаете вышеуказанное согласиться, вы должны учитывать, что ваш element2 атрибут ордер это не в вашем XSD.
