prefix

prefix

prefix 属性 (DOM Node 界面)

[1] DOM2 の属性 Node.prefix は、その節の名前空間接頭辞です。

[2] 値:

DOMString名前空間接頭辞下記以外の場合
null接頭辞なしの場合
null節の種類が要素又は属性のいずれでもない場合
null節が DOM 1 method で作成された場合

[3] 設定時の例外:

INVALID_CHARACTER_ERR接頭辞に不正な文字
NO_MODIFICATION_ALLOWED_ERR節は読取専用
NAMESPACE_ERR予約名の不正な使用

[4] この属性の変更により、自動的に nodeName 属性などの値も変更されます。 (逆はありません。 nodeName などは読取専用です。)

この属性を変更しても、それに合わせて namespaceURI 属性などが変化することはありません。

また、この属性を変更することによって、 既定値を持つ属性が再生されることはありません。

[5] >>4 の3つ目の話は、たとえばこんな例です。

DTD 断片:
  <!ATTLIST foo
    xmlns:prefix1 CDATA #FIXED 'http://uri.example/'
    prefix1:attr1 CDATA 'default'
  >
文書実現値断片:
  <foo prefix1:attr1="value"/>

ここで、 prefix1:attr1 属性の節の prefix 属性の値を prefix2 に変更したとします。

これが接頭辞の変更ではなく、 例えば属性節の削除であったなら、 nodeNameprefix1:attr1nodeValuedefault である新たな属性節が「再生」 してくるところです。しかし、単なる接頭辞の変更の場合は、 この「再生」は起こりません。

[6] >>5 もし prefix2:attr1 が DTD の既定値で定義されていたらとか考えてみると嫌になりますね。

[7] >>6 こんな処理とか。

  1. prefix2:attrprefix3:attr にする。
  2. prefix1:attrprefix2:attr にする。
  3. prefix3:attr を削除する。
  4. 元来の prefix2:attr が既定値で復活する。
  5. この後、 prefix2:attr を呼んだ時に、どちらの節が選ばれるかは処理系定義。

[8] >>5-7 DTD と XML 名前空間の相性の悪さに、 DOM と XML 名前空間の相性の悪さ, DOM と DTD の相性の悪さが絡まってやな感じになっているというか。 教訓:

[10] Test results for messing with Attr.prefix from Bjoern Hoehrmann on 2005-12-18 (www-archive@w3.org from December 2005) <http://lists.w3.org/Archives/Public/www-archive/2005Dec/0017.html>

名前空間属性prefix を変更したらどうなるのか? の実装状況 (名無しさん 2005-12-21 08:31:19 +00:00)

[11] Re: DOM3 Core: changing .prefix of namespace declarations from Ray Whitmer on 2005-12-19 (www-dom@w3.org from October to December 2005) <http://www.w3.org/mid/3CB4022A-E422-4D42-88DE-D93781579B3D@personallegal.net>

I do not find the specification confusing. I think expecting checks to occur that are not specified is what you call confusing. The spec seems fairly clear in most cases what checks occur and the rest would not occur.

[12] createElementNScreateAttributeNS で作成した Nodeprefix に代入してみました。

Firefox 1.5 では、どんな代入でも例外は発生せず、 指定された値 (を ToString したもの) が新しい prefix となりました。 XML名前空間的に適当な値かは一切チェックされないようです。 ただし、空文字列を指定したときだけは null になりました。

Opera 9 では、どんな代入も例外は発生せず、 prefix は変化しませんでした。

HTML でも XHTML でも同じ結果でした。

[13] Opera 8.5 と Opera 9 TP1 も prefix空文字列を指定しても何ら変化ありませんでした。 (名無しさん)

[14] DOM水準3で増えた記述:

(名無しさん)

[15] INVALID_CHARACTER_ERR についての言及は DOM水準2から。 DOM水準2正誤表には XML 1.0 に従う、 DOM水準3には xmlVersion に従うとある。

(名無しさん)

[16] NAMESPACE_ERR についての言及も DOM水準2から。指定された接頭辞が不正なら、 という点について DOM水準3では XML名前空間仕様書によると追記あり。参照されているのは XML名前空間 1.0

(名無しさん)

メモ

[17] IRC logs: freenode / #whatwg / 20110817 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20110817>

[18] XHTML+RDFa 1.1 - Second Edition ( ( 版)) <http://www.w3.org/TR/2013/REC-xhtml-rdfa-20130822/#A_prefix>

[19] HTML+RDFa 1.1 ( ( 版)) <http://www.w3.org/TR/2013/REC-html-rdfa-20130822/#extensions-to-the-html5-syntax>