私はまだXMLスキーマなどに慣れていないので、XML、スキーマ、スタイルシート(XSLT)の開発に取り組んでいます。私は合理的な進歩を遂げましたが、スキーマが機能しなくなったことに気づいたので、より単純な説明のない例に戻しました。
これが私のXMLです。
<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="Test.Namespace"
schemaLocation="http://myNameSpace.com Test1.xsd">
<element1 id="001">
<element2 id="001.1">
<element3 id="001.1" />
</element2>
</element1>
</Root>
私はここにあるスキーマを書きました:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="Test.Namespace"
elementFormDefault="qualified">
<xsd:element name="Root">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="element1" maxOccurs="unbounded" type="element1Type"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="element1Type">
<xsd:sequence>
<xsd:element name="element2" maxOccurs="unbounded" type="element2Type"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="element2Type">
<xsd:sequence>
<xsd:element name="item" type="element3Type"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="element3Type">
<xsd:attribute name="id" type="xsd:string"/>
</xsd:complexType>
</xsd:schema>
スキーマは、私の実際のXMLの構造を表しています。
さて、XMLを検証しようとすると、次のエラーが表示されます。
cvc-elt.1: Cannot find the declaration of element 'Root'. [7]
これは、ルート要素の名前空間の問題と関係があると思いますが、実際にはわかりません。
誰かが私が間違っていることを提案してください。
cvc-elt.1:要素「Root」の宣言が見つかりません。 [7]
ルート要素のschemaLocation
属性はxsi:schemaLocation
でなければならず、正しい名前空間を使用するように修正する必要があります。
おそらく、スキーマのtargetNamespace
とドキュメントのxmlns
をhttp://myNameSpace.com
に変更する必要があります(名前空間は有効なURIであると想定されているため、Test.Namespace
は、[urn:Test.Namespace
は問題ありません)。これを行うと、スキーマが見つかるはずです。ポイントは、スキーマのターゲット名前空間、ドキュメントの名前空間、およびスキーマの場所を指定する名前空間の3つすべてが同じでなければならないということです。
(ただし、<element2>
には、スキーマでitem
が必要なドキュメントに<element3>
が含まれているため、まだ検証されません)
上記の皆さんに感謝しますが、これは修正されました。他の人の利益のために、最も重大なエラーは、Ianによって提案された3つの名前空間を調整することでした。
完全を期すために、修正されたXMLおよびXSDを以下に示します
タイプミスが修正されたXMLを次に示します(遅刻による混乱はごめんなさい)
<?xml version="1.0" encoding="UTF-8"?>
<Root
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:Test.Namespace"
xsi:schemaLocation="urn:Test.Namespace Test1.xsd"
>
<element1 id="001">
<element2 id="001.1">
<element3 id="001.1" />
</element2>
</element1>
</Root>
そして、ここにスキーマがあります
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:Test.Namespace"
xmlns="urn:Test.Namespace"
elementFormDefault="qualified">
<xsd:element name="Root">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="element1" maxOccurs="unbounded" type="element1Type"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="element1Type">
<xsd:sequence>
<xsd:element name="element2" maxOccurs="unbounded" type="element2Type"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="element2Type">
<xsd:sequence>
<xsd:element name="element3" type="element3Type"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="element3Type">
<xsd:attribute name="id" type="xsd:string"/>
</xsd:complexType>
</xsd:schema>
皆さんに感謝します。これが将来誰かに役立つことを願っています。
XMLスキーマのtargetNamespace
がRoot要素の名前空間と一致しません(Test.Namespace
のドットとTest,Namespace
のコンマ)
上記に同意したら、element2
にXSDにない属性orderがあることを考慮する必要があります。