3

デフォルトの名前空間とプレフィックス付きの名前空間が同じ名前空間 URI に解決される場合、両方が同じローカル名を持っているのに、プレフィックスのない属性がプレフィックス付きの属性と等しくないのはなぜですか?

「XML の名前空間」仕様は、そのように述べているだけですが、その理由については非常に短いです。どうしてこうなったか分かる人いますか?

http://www.w3.org/TR/xml-names11/#uniqAttrsのセクション「6.3 属性の一意性」からの抜粋:

たとえば、次の場合、それぞれの不正な空の要素タグは不正です。

<!-- http://www.w3.org is bound to n1 and n2 -->
<x xmlns:n1="http://www.w3.org" 
   xmlns:n2="http://www.w3.org" >
  <bad a="1"     a="2" />
  <bad n1:a="1"  n2:a="2" />
</x>

ただし、次のそれぞれは有効です。2 つ目は、デフォルトの名前空間が属性名に適用されないためです。

<!-- http://www.w3.org is bound to n1 and is the default -->
<x xmlns:n1="http://www.w3.org" 
   xmlns="http://www.w3.org" >
  <good a="1"     b="2" />
  <good a="1"     n1:a="2" />
</x>

パーサーは両方の属性の存在を確認し、どちらかを選択する必要があるため、これにより名前空間付き XML の解析が難しくなっていると思います。

私の場合、次のように XML ドキュメントに Atom リンクを追加します。

<root xmlns="..." xmlns:atom="...">
    <atom:link rel="self" type=".." href=".." />
</root>

atom:link の属性は要素の名前空間を継承すると思います。Java で DOM を使用して XML を解析すると、要素の Atom 名前空間が報告されましたが、属性の名前空間は報告されませんでした。

4

1 に答える 1

0

簡単な答え: 接頭辞のない属性は、常に空の名前空間にあります。つまり、名前空間がありません。

例では:

<good a="1"     n1:a="2" />

最初の a は次のように展開されます

{}a

一方、2番目は次のように展開されます。

{http://www.w3.org}a

アトムの例では、すべての属性が空の名前空間にあります。

于 2011-11-03T12:25:18.960 に答える