適用範囲内名前空間

適用範囲内名前空間

[1] 適用範囲内名前空間 (in-scope namespace) とは、 名前の通り、適用範囲内にある名前空間(束縛)のことです。

XML名前空間では、名前空間の宣言 (束縛) は要素属性という形で行いますが、 その要素が、すなわちその名前空間束縛の適用される範囲となります。

たとえば、

<foo:foo foo:foo="baz"
         xmlns:foo="http://bar.example/"
         foo:attr="attr">
  <foo:bar foo:baz="baz"/>
</foo:foo>

といういかにもわざとらしい例では、強調した6個所の foo が、 xmlns:foo 属性による名前空間束縛に影響を受けています。 これを逆に、例えば foo:bar 要素を観測地点としてみたときに、 xmlns:foo="http://bar.example/" という名前空間束縛が適用範囲内にあります。 つまり、 foo:bar 要素で xmlns:foo="http://bar.example/" は適用範囲内名前空間です。

[2] XML情報集合では、要素情報項目に、 [適用範囲内名前空間群]特性があって、適用範囲内名前空間すべてのリストが得られるようになっています。

[適用範囲内名前空間群]特性の構成要素は、その対象である要素情報項目と、 その[親]特性の値が要素情報項目である場合には、 その要素情報項目の[名前空間属性群]属性の構成要素である名前空間情報項目をすべて集めた集合となります。 ただし[名前空間接頭辞]属性が同じ場合には[親]情報項目のものよりも自身の物を優先します。 また、名前空間情報項目が、名前空間束縛を取り消すものである可能性があります。

[3] >>2 を XML 本体 + XML 名前空間の用語で説明し直すと、こうです。

ある要素における適用範囲内名前空間の集合とは、その要素と、 その親要素が存在する場合にはその要素の、名前空間宣言属性 (xmlns 属性または xmlns:* 属性) による名前空間束縛 (名前空間接頭辞名前空間名の関連付け) の集合のことです。 ただし、同じ名前の名前空間宣言属性が両要素にある時には子供の方の要素の物が優先します。 また、名前空間宣言属性が、名前空間束縛を取り消すもの (xmlns=""xmlns:*="") である可能性があります。 (ただし、 xmlns:*="" が可能なのは XML 1.1 のときだけです。)