XML の「xmlns」とはどういう意味ですか? 質問する

XML の「xmlns」とはどういう意味ですか? 質問する

XML ファイルに次の行がありました:

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns私がこれまでに目にした他の多くの XML ファイルでも同様です。

それは何ですか?

ベストアンサー1

その意味はXML名前空間

基本的に、テキスト名前空間に属し、要素の名前を「修飾」する方法です。

あなたと私がそれぞれ独自の XML を発明したと想像してください。あなたは人を記述するために XML を発明し、私は都市を記述するために XML を発明しました。どちらも と呼ばれる要素を含めますname。あなたのは人の名前を参照し、私のは都市名を参照します。まあ、少し不自然ですが。

<person>
    <name>Rob</name>
    <age>37</age>
    <homecity>
        <name>London</name>
        <lat>123.000</lat>
        <long>0.00</long>
    </homecity>
</person>

2 つの XML が 1 つのドキュメントに結合された場合、2 つの名前をどのように区別するのでしょうか。上記のように、2 つのname要素がありますが、それぞれ意味が異なります。

答えは、あなたと私が両方とも XML に名前空間を割り当てて、それを一意にするということです。

<personxml:person xmlns:personxml="http://www.your.example.com/xml/person"
                  xmlns:cityxml="http://www.my.example.com/xml/cities">
    <personxml:name>Rob</personxml:name>
    <personxml:age>37</personxml:age>
    <cityxml:homecity>
        <cityxml:name>London</cityxml:name>
        <cityxml:lat>123.000</cityxml:lat>
        <cityxml:long>0.00</cityxml:long>
    </cityxml:homecity>
</personxml:person>

これで XML が完全に修飾され、各要素の意味が明確になりましたname。 で始まるタグはすべてpersonxml:ユーザーの XML に属するタグであり、 で始まるタグはすべてcityxml:私の XML に属するタグです。

注意すべき点がいくつかあります:

  • 名前空間宣言を除外すると、デフォルトの名前空間にあるものとみなされます。

  • 識別子なしで名前空間を宣言した場合、つまりxmlns="http://somenamespace"ではなく の場合xmlns:rob="somenamespace"、ドキュメントのデフォルトの名前空間が指定されます。

  • 実際の名前空間自体は、多くの場合インドは、実際には重要ではありません。一意である必要があるため、人々は自分が所有する IRI/URI を選択する傾向がありますが、それ以上の意味はありません。指定された IRI に XML のスキーマ (定義) を配置する人もいますが、これは一部の人だけの慣例です。

  • プレフィックスも重要ではありません。重要なのは、プレフィックスがどの名前空間として定義されているかだけです。異なるプレフィックスで始まる複数のタグが同じ名前空間にマップされている場合、それらは同じものとみなされます。

    たとえば、プレフィックスpersonxmlと がmycityxml両方とも同じ名前空間にマップされている場合 (以下のスニペットのように)、特定の要素に または のプレフィックスを付けても問題はありませんpersonxml。XMLmycityxmlパーサーでは、どちらも同じものとして扱われます。重要なのは、XML パーサーはプレフィックスとして何を選択したかではなく、それがマップされる名前空間のみを気にするということです。プレフィックスは、名前空間を指す間接参照にすぎません。

    <personxml:person 
         xmlns:personxml="http://example.com/same/url"
         xmlns:mycityxml="http://example.com/same/url" />
    
  • 属性は修飾できますが、通常は修飾されません。また、要素とは異なり、属性は要素から名前空間を継承しません(以下を参照)。

また、要素の名前空間は親要素から継承されます。言い換えると、上記のXMLを次のように記述することもできます。

<person xmlns="http://www.your.example.com/xml/person">
    <name>Rob</name>
    <age>37</age>
    <homecity xmlns="http://www.my.example.com/xml/cities">
        <name>London</name>
        <lat>123.000</lat>
        <long>0.00</long>
    </homecity>
</person>

おすすめ記事