1. ホーム
  2. xml

[解決済み] xmlns、xmlns:xsi、xsi:schemaLocation、およびtargetNamespace?

2022-01-28 01:26:20

質問

以下のXMLの断片について。

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">

は何をするのでしょうか? xmlns , xmlns:xsi および xsi:schemaLocation 属性は正確にはどういう意味ですか?どのように関連しているのですか?この : のために?

そして、その中に2つのURLがあります。 xsi:schemaLocation=

  1. http://maven.apache.org/POM/4.0.0 (と同じです)。 xmlns が、アクセスすると404エラーになる)
  2. http://maven.apache.org/xsd/maven-4.0.0.xsd (これは実際のXSDドキュメントです)

1が存在しないなら、なぜまだそこに置くのですか?

どのように解決するのですか?

XML および XML スキーマ (XSD) における名前空間関連属性

  • xmlns はその一部です。 W3C Namespaces in XML Recommendation(XMLにおける名前空間に関する勧告 :

    接頭辞 xmlns は、名前空間バインディングを宣言するためにのみ使用され は定義上、名前空間の名前にバインドされます。 http://www.w3.org/2000/xmlns/ .

    あなたの例では と宣言しています。 http://maven.apache.org/POM/4.0.0 は、Maven プロジェクト内の要素のデフォルトのネームスペースです。

  • xmlns:xsi は標準的な名前空間プレフィックスを宣言しています ( xsi ) を使用して,XSD で使用される中核的な名前空間を指定する。 http://www.w3.org/2001/XMLSchema-instance

    XML スキーマ。構造体 は、直接使用するためのいくつかの属性も定義しています。 をあらゆるXML文書で使用することができます。これらの属性は、別の名前空間にあります。 という名前空間名を持つ http://www.w3.org/2001/XMLSchema-instance . 簡潔さのために、本文および この仕様の例では,この接頭辞 xsi: を使用しています。 後者の名前空間は、実際には任意の接頭辞を使用することができます。

    あなたの例では の従来のバインディングを宣言しています. xsi 名前空間接頭辞を http://www.w3.org/2001/XMLSchema-instance で、以下の属性の使用が適切に設定されます。

    • xsi:type は、XML インスタンスが XSD を介さずに直接要素の型情報を関連付けることを可能にする。 参照 XSDのxsi:typeを使用してXML要素の値を制限する方法は?

      あなたの例では , xsi:type は使用されていませんが、念のため記載します。 xsi .

    • xsi:nil を使用すると、XSD で許可されていない空の要素も有効であるとみなすことができます。

      あなたの例では , xsi:nil は使用されていませんが、念のため記載します。 xsi .

    • xsi:schemaLocation そして xsi:noNamespaceSchemaLocation は,XSD を XML 文書とどのように関連付けるかを示すヒントを XML プロセッサに提供する。 使用方法 xsi:schemaLocation は名前空間がある場合に使用します。 xsi:noNamespaceSchemaLocation は、名前空間がない場合に使用します。

      あなたの例では の場合、名前空間が存在するので、正しく xsi:schemaLocation その値はスペースで区切られます ペア 名前空間 XSD-location-URI . あなたの例では、名前空間を使用しています。 http://maven.apache.org/POM/4.0.0 であり、名前空間は語彙的な命名構造である。 は、回収する必要はありません。 . あなたの例では、XSD-location-URI も使用されています。 http://maven.apache.org/xsd/maven-4.0.0.xsd であり、当然のことながらリトリーブ可能です。

      この例で名前空間を使用していない場合、次のようになります。 xsi:noNamespaceSchemaLocation であり、その値は単一の XSD-location-URI これは、意図した XSD の場所を示唆するもので、取得可能であるべきものです。

  • targetNamespace xs:schema ルート XSD のルート要素の名前空間を指定するものである。 は、XSD が管理することを意図している XML 文書インスタンスの これは は、それらのXMLドキュメントのルートのデフォルトまたは明示的な名前空間と一致します。 要素で構成される。