XMLファイルに次の行が表示されました。
xmlns:android="http://schemas.android.com/apk/res/android"
私がxmlns
遭遇した他の多くのXMLファイルでも見ました。
それは何ですか?
XMLファイルに次の行が表示されました。
xmlns:android="http://schemas.android.com/apk/res/android"
私がxmlns
遭遇した他の多くのXMLファイルでも見ました。
それは何ですか?
回答:
あなたの例では、名前空間プレフィックスは「android」であり、名前空間URIは「http://schemas.android.com/apk/res/android」です
ドキュメントには、次のような要素があります。 <android:foo />
名前空間接頭辞は、完全な名前空間URIの短い名前のエイリアスを持つ変数と考えてください。これは、<http://schemas.android.com/apk/res/android:foo />
XMLパーサーがドキュメントを読み取るときの「意味」について書くことと同等です。
注:実際には、XMLインスタンスドキュメントの名前空間プレフィックスの代わりに完全な名前空間URIを使用することはできません。
名前空間に関するこのチュートリアルを確認してください:http : //www.sitepoint.com/xml-namespaces-explained/
<LinearLayout
接頭辞なしで作品を意味しますか?
基本的に、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:
は私のものです。
注意すべき点がいくつかあります。
名前空間宣言を除外すると、デフォルトの名前空間にあると見なされます。
識別子ではxmlns="http://somenamespace"
なく、つまりでなく名前空間を宣言するxmlns:rob="somenamespace"
と、ドキュメントのデフォルトの名前空間が指定されます。
実際の名前空間自体は、多くの場合IRIですが、実際には重要ではありません。一意である必要があるため、人々は所有するIRI / URIを選択する傾向がありますが、それ以上の意味はありません。XMLのスキーマ(定義)を指定されたIRIに配置する場合もありますが、これは一部の人々だけの規則です。
プレフィックスも重要ではありません。重要なのは、接頭辞がどの名前空間として定義されているかだけです。異なる接頭辞で始まるいくつかのタグは、すべて同じ名前空間にマップされ、同じと見なされます。
たとえば、プレフィックスpersonxml
とmycityxml
両方が同じネームスペースにマッピングされている場合(以下のスニペットのように)、特定の要素にプレフィックスとしてpersonxml
or を付けても問題ありませんmycityxml
。これらは両方ともXMLパーサーによって同じものとして扱われます。 。ポイントは、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>
最大の混乱は、xml名前空間が、情報を持たないある種のURLを指していることだと思います。しかし真実は名前空間の下で発明した人です:
xmlns:android="http://schemas.android.com/apk/res/android"
それをそのように呼び出すこともできます:
xmlns:android="asjkl;fhgaslifujhaslkfjhliuqwhrqwjlrknqwljk.rho;il"
これは単なる一意の識別子です。ただし、一意であり、その名前空間で使用されているタグ/属性の仕様を指す可能性があるURLを配置する必要があることが確立されています。これは必須ではありません。
なぜそれがユニークでなければならないのですか?名前空間の目的はそれらを一意にすることなので、たとえば名前空間からbackgroundと呼ばれる属性を別の名前空間からの背景と区別することができます。
その一意性のため、カスタム属性を作成する場合に名前の衝突が発生することを心配する必要はありません。
名前空間があるため、グローバルに一意の要素を持つことができます。ただし、99%の場合、これはそれほど重要ではありませんが、セマンティックWebの観点から考えると、重要になります。
たとえば、適切なを使用するだけで、さまざまなスキームのXMLマッシュアップを作成できますxmlns
。たとえば、友達の友達をvCardでマッシュアップします。