<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><section><h1>prefix 属性 (DOM Node 界面)</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM2</anchor> の属性
<code><var class="DOMi"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></var>.<code class="DOMa">prefix</code></code>
は、その節の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間接頭辞</anchor>です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> 値:<table><tbody><tr><td><code class="DOM"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMString</anchor></code></td><td>名前空間接頭辞</td><td>下記以外の場合</td></tr><tr><td colspan="2"><code class="DOM">null</code></td><td>接頭辞なしの場合</td></tr><tr><td colspan="2"><code class="DOM">null</code></td><td>節の種類が要素又は属性のいずれでもない場合</td></tr><tr><td colspan="2"><code class="DOM">null</code></td><td>節が DOM 1 method で作成された場合</td></tr></tbody></table></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> 設定時の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">例外</anchor>:<table><tbody><tr><td><code class="DOM">INVALID_CHARACTER_ERR</code></td><td>接頭辞に不正な文字</td></tr><tr><td><code class="DOM">NO_MODIFICATION_ALLOWED_ERR</code></td><td>節は読取専用</td></tr><tr><td><code class="DOM">NAMESPACE_ERR</code></td><td>予約名の不正な使用</td></tr></tbody></table></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> この属性の変更により、自動的に 
<code class="DOMa"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">nodeName</anchor></code>
属性などの値も変更されます。
(逆はありません。 <code class="DOMa">nodeName</code> などは読取専用です。)</p><p>この属性を変更しても、それに合わせて 
<code class="DOMa"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">namespaceURI</anchor></code> 属性などが変化することはありません。</p><p>また、この属性を変更することによって、
既定値を持つ属性が再生されることはありません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;4</anchor-internal> の3つ目の話は、たとえばこんな例です。</p><pre>DTD 断片:
  &lt;!ATTLIST foo
    xmlns:prefix1 CDATA #FIXED 'http://uri.example/'
    prefix1:attr1 CDATA 'default'
  &gt;
文書実現値断片:
  &lt;foo prefix1:attr1=&quot;value&quot;/&gt;</pre><p>ここで、 <samp class="XML">prefix1:attr1</samp> 属性の節の
<code class="DOMa">prefix</code> 属性の値を <samp class="XML">prefix2</samp>
に変更したとします。</p><p>これが接頭辞の変更ではなく、
例えば属性節の削除であったなら、 <code class="DOMa">nodeName</code>
が <code class="XML">prefix1:attr1</code> で <code class="DOMa">nodeValue</code>
が <samp class="XML">default</samp> である新たな属性節が「再生」
してくるところです。しかし、単なる接頭辞の変更の場合は、
この「再生」は起こりません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;5</anchor-internal> もし <samp class="XML">prefix2:attr1</samp>
が DTD の既定値で定義されていたらとか考えてみると嫌になりますね。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;6</anchor-internal> こんな処理とか。<ol><li><samp class="XML">prefix2:attr</samp> を <samp class="XML">prefix3:attr</samp> にする。</li><li><samp class="XML">prefix1:attr</samp> を <samp class="XML">prefix2:attr</samp> にする。</li><li><samp class="XML">prefix3:attr</samp> を削除する。</li><li>元来の <samp class="XML">prefix2:attr</samp> が既定値で復活する。</li><li>この後、 <samp class="XML">prefix2:attr</samp> を呼んだ時に、どちらの節が選ばれるかは処理系定義。</li></ol></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;5</anchor-internal>-7 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DTD</anchor> と XML 名前空間の相性の悪さに、
DOM と XML 名前空間の相性の悪さ, DOM と DTD
の相性の悪さが絡まってやな感じになっているというか。
教訓: <ul><li>名前空間接頭辞の編集なんてするな。</li><li>名前空間<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">宣言</anchor>はできるだけ当たり障りのないように。</li><li>それ以前に名前空間を考えない文書・処理系は作るな。</li></ul></p><ul><li>[DOM2] <em>Document Object Model Core</em> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-NodeNSPrefix" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI">http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-NodeNSPrefix</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;7</anchor-internal> 補足。第5段階の時点で同じ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">展開名</anchor>の節が2つあるから、名前を使って選択しようとするとどちらが返されるかは処理系定義。</li></ul><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end>
<cite>Test results for messing with Attr.prefix from Bjoern Hoehrmann on 2005-12-18 (www-archive@w3.org from December 2005)</cite> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://lists.w3.org/Archives/Public/www-archive/2005Dec/0017.html" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI">http://lists.w3.org/Archives/Public/www-archive/2005Dec/0017.html</anchor-external></p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間属性</anchor>の <code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">prefix</anchor></code>
を変更したらどうなるのか? の実装状況
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor> <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">2005-12-21 08:31:19 +00:00</weak>)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end>
<cite>Re: DOM3 Core: changing .prefix of namespace declarations from Ray Whitmer on 2005-12-19 (www-dom@w3.org from October to December 2005)</cite>
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/mid/3CB4022A-E422-4D42-88DE-D93781579B3D@personallegal.net" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI">http://www.w3.org/mid/3CB4022A-E422-4D42-88DE-D93781579B3D@personallegal.net</anchor-external></p><blockquote><p>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.</p></blockquote><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end>
<code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">createElementNS</anchor></code> や
<code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">createAttributeNS</anchor></code>
で作成した <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code> の
<code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">prefix</anchor></code> に代入してみました。</p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Firefox</anchor> 1.5 では、どんな代入でも<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">例外</anchor>は発生せず、
指定された値 (を <code class="JS" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ToString</anchor></code> したもの)
が新しい <code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">prefix</anchor></code> となりました。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML名前空間</anchor>的に適当な値かは一切チェックされないようです。
ただし、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空文字列</anchor>を指定したときだけは
<code class="JS" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor></code> になりました。</p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Opera</anchor> 9 では、どんな代入も<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">例外</anchor>は発生せず、
<code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">prefix</anchor></code> は変化しませんでした。</p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML</anchor> でも <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XHTML</anchor> でも同じ結果でした。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://suika.fam.cx/~wakaba/-temp/test/dom/node/prefix/" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI">http://suika.fam.cx/~wakaba/-temp/test/dom/node/prefix/</anchor-external></comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end>
Opera 8.5 と Opera 9 TP1 も <code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">prefix</anchor></code>
に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空文字列</anchor>を指定しても何ら変化ありませんでした。
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor>)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM水準3</anchor>で増えた記述:<ul><li><code class="IDL" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor></code> と定義されているなら、値を設定しようとしても効果なし (その<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">読取専用</anchor>だろうと)。</li><li><code class="IDL" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor></code> に設定すると<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間接頭辞</anchor>未指定となる。</li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空文字列</anchor>を設定したら実装依存。</li></ul></p><p>(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor>)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end>
<code class="DOMc" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">INVALID_CHARACTER_ERR</anchor></code> についての言及は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM水準2</anchor>から。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM水準2</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正誤表</anchor>には <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML 1.0</anchor> に従う、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM水準3</anchor>には <code class="XMLa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">xmlVersion</anchor></code>
に従うとある。</p><p>(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor>)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end>
<code class="DOMc" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NAMESPACE_ERR</anchor></code> についての言及も
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM水準2</anchor>から。指定された<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">接頭辞</anchor>が不正なら、
という点について <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM水準3</anchor>では <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML名前空間</anchor>仕様書によると追記あり。参照されているのは <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML名前空間 1.0</anchor>。</p><p>(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor>)</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>メモ</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> <cite>IRC logs: freenode / #whatwg / 20110817</cite>
( (<time>2011-08-28 08:21:00 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://krijnhoetmer.nl/irc-logs/whatwg/20110817" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI">http://krijnhoetmer.nl/irc-logs/whatwg/20110817</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> <cite xml:lang="en">XHTML+RDFa 1.1 - Second Edition</cite>
( (<time>2013-08-15 17:11:45 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/2013/REC-xhtml-rdfa-20130822/#A_prefix" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI">http://www.w3.org/TR/2013/REC-xhtml-rdfa-20130822/#A_prefix</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> <cite xml:lang="en">HTML+RDFa 1.1</cite>
( (<time>2013-08-20 15:49:04 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/2013/REC-html-rdfa-20130822/#extensions-to-the-html5-syntax" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI">http://www.w3.org/TR/2013/REC-html-rdfa-20130822/#extensions-to-the-html5-syntax</anchor-external></p></section></body></html>