私の目標は、両方のファイルが名前空間 (xmlns
属性にデフォルトの名前空間を設定することによる XML) を使用しながら、構造を記述する XSD ファイルを正しく参照する XML を作成することです。
XML で属性を指定できxsi:noNamespaceSchemaLocation
、少なくとも一部のバリデーター ( http://www.validome.org/xml/validate/など) で機能します。しかし、名前空間を追加しようとすると、バリデーターはエラーを返します (要素 'note' の宣言が見つかりません)。
私が用意したテストファイルの最終版を以下に添付します。次のようにテストしましたxmllint
:
xmllint example.xml --schema example.xsd
それは機能しましたが、パラメーターでスキーマの場所を指定しました。私の質問は、XML ファイルが XSD を正しく参照しているか、名前空間を正しく使用しているかということです。バリデーターがエラーを返すのはなぜですか?
例.xml:
<?xml version="1.0" encoding="UTF-8"?>
<note
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="example.xsd"
xmlns="http://example/note"
>
<from>Jacek</from>
<to>Agatka</to>
<body>Kocham cię!</body>
</note>
例.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://example/note"
targetNamespace="http://example/note"
>
<xsd:element name="note">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="from"/>
<xsd:element ref="to"/>
<xsd:element ref="body"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="from" type="xsd:string"/>
<xsd:element name="to" type="xsd:string"/>
<xsd:element name="body" type="xsd:string"/>
</xsd:schema>