cvc-elt.1: ne trouve pas la déclaration de l'élément "MyElement"

j'essaie de valider un xml vraiment simple en utilisant xsd, mais pour une raison quelconque j'obtiens cette erreur. Je vais vraiment reconnaissant 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
demandé sur Line 2012-11-09 19:12:35

2 réponses

Votre schéma est pour son espace de noms cible http://www.example.org/Test ainsi il définit un élément avec nom MyElement dans ce namespace cible http://www.example.org/Test. Votre document d'instance a cependant un élément avec nom MyElementpas d'espace de noms. C'est pourquoi l'analyseur de validation 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 noms.

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

27
répondu Martin Honnen 2012-11-10 10:20:28

j'ai eu cette erreur pour mon élément XXX et c'était parce que mon XSD était mal formaté selon javax.XML.lier v2.2.11 . Je pense qu'il utilise un ancien format XSD mais je n'ai pas pris la peine de le confirmer.

Ma première mauvaise XSD est semblable à la suivante:

<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 que ma migration réussisse é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 noeuds xsd similaires.

0
répondu user1283704 2018-05-25 19:34:45