it-swarm.dev

cvc-elt.1: Nelze najít deklaraci prvku 'MyElement'

Snažím se ověřit opravdu jednoduchý xml pomocí xsd, ale z nějakého důvodu dostanu tuto chybu. Opravdu si vážím, jestli mi někdo může vysvětlit proč.

Soubor XML

<?xml version="1.0" encoding="utf-8"?> 
<MyElement>A</MyElement>

Soubor XSD

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.example.org/Test"
        xmlns:tns="http://www.example.org/Test"
        elementFormDefault="qualified">

    <simpleType name="MyType">
        <restriction base="string"></restriction>
    </simpleType>

    <element name="MyElement" type="tns:MyType"></element>
</schema>
28
Mitko Mitev

Vaše schéma je pro jeho cílový jmenný prostor http://www.example.org/Test, takže definuje prvek s názvem MyElement v tomto cílovém oboru názvů http://www.example.org/Test. Dokument vaší instance však obsahuje prvek s názvem MyElement v no namespace . To je důvod, proč validující analyzátor vám řekne, že nemůže najít deklaraci pro tento prvek, neposkytli jste schéma pro elementy v žádném oboru názvů.

Musíte buď změnit schéma tak, aby vůbec nepoužíval cílový jmenný prostor, nebo potřebujete změnit instanci, kterou chcete použít, např. <MyElement xmlns="http://www.example.org/Test">A</MyElement>.

29
Martin Honnen

Měla jsem tuto chybu pro svůj prvek XXX a bylo to proto, že můj XSD byl nesprávně formátován podle javax.xml.bind v2.2.11. Myslím, že to používá starší formát XSD, ale neobtěžoval jsem se to potvrdit.

Moje počáteční chyba XSD byla podobná následující:

<xs:element name="Document" type="Document"/>
...
<xs:complexType name="Document">
    <xs:sequence>
        <xs:element name="XXX" type="XXX_TYPE"/>
    </xs:sequence>
</xs:complexType>

Dobrý formát XSD pro migraci k úspěšnému byl následující:

<xs:element name="Document">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="XXX"/>
        </xs:sequence>
    </xs:complexType>        
</xs:element>
...
<xs:element name="XXX" type="XXX_TYPE"/>

A tak dále pro všechny podobné uzly XSD.

0
Michael Fayad