web-dev-qa-db-ja.com

xmlns、xmlns:xsi、xsi:schemaLocation、およびtargetNamespace?

次の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">

xmlnsxmlns:xsi、およびxsi:schemaLocation属性の正確な意味は何ですか?それらはどのように関係していますか? :とは何ですか?

xsi:schemaLocation=には2つのURLがあります

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

1が存在しない場合でも、なぜそこに配置するのですか?

40
smwikipedia

XMLおよびXMLスキーマ(XSD)のネームスペース関連の属性

  • xmlnsXML勧告のW3C名前空間 の一部です:

    プレフィックスxmlnsは、名前空間バインディングの宣言にのみ使用され、定義により名前空間名にバインドされます http://www.w3.org/2000/xmlns /

    あなたの例では、http://maven.Apache.org/POM/4.0.0がMavenプロジェクトの要素のデフォルト名前空間であることを宣言しています。

  • xmlns:xsi XSDで使用されるコア名前空間の標準名前空間プレフィックス(xsi)を宣言します:http://www.w3.org/2001/XMLSchema-instance

    XML Schema:Structuresは、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を適切に使用します。その値はスペースで区切られていますpairsofnamespaceand- 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 は、ネームスペースを指定するXSDのxs:schemaルート要素の属性ですXSDが管理することを意図しているXMLドキュメントインスタンスのルート要素。これらのXMLドキュメントのルート要素のデフォルトまたは明示的なネームスペースと一致する必要があります。

52
kjhughes

xmlnsは、デフォルトの名前空間を定義します。これは、プロジェクトノード内の名前空間エイリアスのないすべてのノードが、デフォルトでhttp://maven.Apache.org/POM/4.0.0名前空間にあることを示します。

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"は名前空間-http://www.w3.org/2001/XMLSchema-instanceを定義し、新しいエイリアスを与えます-xsi

xsi:schemaLocationは、"http://www.w3.org/2001/XMLSchema-instance"名前空間の属性schemaLocationです。値のペア-名前空間URIとその名前空間のxsd-schemaファイルのスキーマロケーションリンクが含まれます。定義された名前空間URIごとに1つのxsdファイル-値のペアを多数含むことができます。つまり、リンクhttp://maven.Apache.org/xsd/maven-4.0.0.xsdには、http://maven.Apache.org/POM/4.0.0名前空間の定義を持つxsdスキーマが含まれます。

7
Nodonutsforyou