wake-up-neo.com

XML-Schemaüberprüfung: Die Deklaration des Elements kann nicht gefunden werden

Ich bin noch ein bisschen neu in XML Schema etc. und habe daran gearbeitet, XML, Schema und ein Stylesheet (XSLT) zu entwickeln. Ich habe vernünftige Fortschritte gemacht, aber dann festgestellt, dass mein Schema nicht mehr funktioniert, und habe es auf ein einfacheres, unbeschriebenes Beispiel zurückgeführt.

Hier ist mein 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>

Ich habe ein Schema geschrieben, das hier ist:

<?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>

Das Schema ist repräsentativ für die Struktur meines echten XML.

Wenn ich jetzt versuche, mein XML zu validieren, erhalte ich diesen Fehler:

cvc-elt.1: Cannot find the declaration of element 'Root'. [7]

Ich denke, dies hat mit einem Namespace-Problem im Root-Element zu tun, bin mir aber nicht sicher.

Kann jemand vorschlagen, was ich bitte falsch mache.

20
Nerdio

cvc-elt.1: Die Deklaration des Elements 'Root' kann nicht gefunden werden. [7]

Ihr Attribut schemaLocation für das Stammelement sollte xsi:schemaLocation Lauten, und Sie müssen es korrigieren, um den richtigen Namespace zu verwenden.

Sie sollten wahrscheinlich das targetNamespace des Schemas und das xmlns des Dokuments in http://myNameSpace.com Ändern (da Namespaces gültige URIs sein sollen, was Test.Namespace Nicht ist nicht, obwohl urn:Test.Namespace in Ordnung wäre). Sobald Sie das tun, sollte es das Schema finden. Der Punkt ist, dass alle drei Zielnamespaces des Schemas, der Namespace des Dokuments und der Namespace, für den Sie den Schema-Speicherort angeben, identisch sein müssen.

(obwohl es immer noch nicht validiert werden kann, da Ihr <element2> einen <element3> in dem Dokument enthält, in dem das Schema item erwartet)

18
Ian Roberts

Vielen Dank an alle oben, aber das ist jetzt behoben. Für die anderen bestand der größte Fehler in der Ausrichtung der drei Namespaces, wie von Ian vorgeschlagen.

Der Vollständigkeit halber hier das korrigierte XML und XSD

Hier ist die XML-Datei mit den korrigierten Tippfehlern (Entschuldigung für etwaige Unklarheiten, die durch Verspätung verursacht wurden).

<?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>

und hier ist das Schema

<?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>

Nochmals vielen Dank an alle, ich hoffe, dass dies in Zukunft jemand anderem von Nutzen ist.

21
Nerdio

Das targetNamespace Ihres XML-Schemas stimmt nicht mit dem Namespace des Root -Elements überein (Punkt in Test.Namespace vs. Komma in Test,Namespace)

Sobald Sie sich damit einverstanden erklärt haben, müssen Sie berücksichtigen, dass Ihr element2 hat ein Attribut order, das nicht in Ihrer XSD enthalten ist.

1
Petru Gardea