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>
スキーマはそのターゲット名前空間用ですhttp://www.example.org/Test
ので、そのターゲット名前空間MyElement
という名前の要素を定義しますhttp://www.example.org/Test
。ただし、インスタンスドキュメントには、名前空間なしのMyElement
という名前の要素があります。そのため、検証パーサーは、その要素の宣言が見つからず、名前空間にない要素のスキーマを提供していないと通知します。
ターゲットネームスペースをまったく使用しないようにスキーマを変更するか、使用するインスタンスを変更する必要があります。 <MyElement xmlns="http://www.example.org/Test">A</MyElement>
。
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ノードについても同様です。