web-dev-qa-db-ja.com

cvc-elt.1:要素「MyElement」の宣言が見つかりません

Xsdを使用して非常に単純なxmlを検証しようとしていますが、何らかの理由でこのエラーが発生します。誰かが私にその理由を説明してくれたら本当に感謝しています。

XMLファイル

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

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>
33
Mitko Mitev

スキーマはそのターゲット名前空間用ですhttp://www.example.org/Testので、そのターゲット名前空間MyElementという名前の要素を定義しますhttp://www.example.org/Test。ただし、インスタンスドキュメントには、名前空間なしMyElementという名前の要素があります。そのため、検証パーサーは、その要素の宣言が見つからず、名前空間にない要素のスキーマを提供していないと通知します。

ターゲットネームスペースをまったく使用しないようにスキーマを変更するか、使用するインスタンスを変更する必要があります。 <MyElement xmlns="http://www.example.org/Test">A</MyElement>

32
Martin Honnen

XXX要素に対してこのエラーが発生しました。これは、XSDがjavax.xml.bind v2.2.11に従って誤ってフォーマットされたためです。古いXSD形式を使用していると思いますが、確認することはありません。

私の最初の間違ったXSDは次のようなものでした:

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

移行を成功させるための優れたXSD形式は次のとおりです。

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

同様のすべてのXSDノードについても同様です。

0
Michael Fayad