3

私の目標は、両方のファイルが名前空間 (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>
4

1 に答える 1

3

schemaLocation属性は名前空間も指定する必要があります。

<?xml version="1.0" encoding="utf-8"?>
<note
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://example/note example.xsd"
  xmlns="http://example/note">
  <from>Jacek</from>
  <to>Agatka</to>
  <body>Kocham cię!</body>
</note>

こちらのドキュメントを参照してください。

于 2013-04-20T20:19:33.140 に答える