web-dev-qa-db-fra.com

cvc-elt.1: Impossible de trouver la déclaration de l'élément 'MyElement'

J'essaie de valider un xml très simple à l'aide de xsd, mais pour une raison quelconque, je reçois cette erreur ... Je vais vraiment apprécier si quelqu'un peut m'expliquer pourquoi.

Fichier XML

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

Fichier 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

Votre schéma correspond à son espace de noms cible http://www.example.org/Test. Il définit donc un élément nommé MyElement dans cet espace de noms cible http://www.example.org/Test. Votre document d'instance comporte toutefois un élément nommé MyElement dans no namespace . C'est pourquoi l'analyseur validant vous dit qu'il ne peut pas trouver de déclaration pour cet élément, vous n'avez pas fourni de schéma pour les éléments dans aucun espace de nom.

Vous devez soit modifier le schéma pour ne pas utiliser un espace de nom cible, soit modifier l'instance pour utiliser, par exemple. <MyElement xmlns="http://www.example.org/Test">A</MyElement>.

29
Martin Honnen

J'ai eu cette erreur pour mon élément XXX et c'est parce que mon XSD a été mal formaté conformément à javax.xml.bind v2.2.11. Je pense qu’il utilise un format XSD plus ancien, mais je n’ai pas pris la peine de confirmer.

Ma première erreur XSD était semblable à ce qui suit:

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

Le bon format XSD pour réussir ma migration était le suivant:

<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"/>

Et ainsi de suite pour tous les nœuds XSD similaires.

0
Michael Fayad