<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><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:">DOM水準3</anchor> で定義されている<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">界面</anchor> <code class="DOMi">XPathNSResolver</code></dfn>
は、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPath</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">式</anchor>を解釈するに当たって<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間接頭辞</anchor>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間URI</anchor>
に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">解決</anchor>する必要が生じた時に呼び出される<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メソッド</anchor>
<code class="DOMm"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lookupNamespaceURI</anchor></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> 仕様書:<ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM水準3</anchor><ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPath</anchor> <code class="DOMi">XPathNSResolver</code> 
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="IW" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="DOM3:&quot;XPath/xpath.html#XPathNSResolver&quot;">IW:DOM3:&quot;XPath/xpath.html#XPathNSResolver&quot;</anchor-external></li></ul></li></ul></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> 界面:<ul><li><strong>メソッド <code class="DOMm"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lookupNamespaceURI</anchor></code></strong>:
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間接頭辞</anchor>を受け取り、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間URI</anchor> を返します。</li></ul></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> <strong><code class="DOMi">Node</code> の <code class="DOMm">XPathNSResolver</code></strong>:
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM水準3</anchor> の <code class="DOMi"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">界面</anchor>でも
<code class="DOMm">lookupNamespaceURI</code> メソッドが定義されています。
<code class="DOMi">XPathNSResolver</code> のメソッドは <code class="DOMi">Node</code>
のメソッドの subset のような定義になっています。
(<code class="DOMi">Node</code> 界面を直接使わないのは、
<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:">中核</anchor>モジュールの実装がなくても <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPath</anchor> 
モジュールを使えるようにするためらしいです。)</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> <strong>接頭辞無しの既定名前空間</strong>:
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPath 1.0</anchor> において<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間接頭辞</anchor>が無い <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">QName</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:">null名前空間</anchor>に固定されています。
ですから少なくても <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPath 1.0</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">式</anchor>の解釈のために
<code class="DOMm"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lookupNamespaceURI</anchor></code> の引数に <code class="DOM"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor></code>
や空文字列が渡されることはなく、渡された場合の結果は未定義とされています
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">DOM 水準3 XPath</src>。
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(<code xmlns="http://www.w3.org/1999/xhtml" class="DOMi"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code> 界面の同名のメソッドは <code xmlns="http://www.w3.org/1999/xhtml" class="DOM"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor></code> が渡された場合の動作も定義されています。)</weak></p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form><section><h1>作成</h1><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> <strong>節点から作成</strong>:
<code class="DOMi"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPathEvaluator</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">界面</anchor>で定義されている
<code class="DOMm"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">createNSResolver</anchor></code> メソッドは、 <code class="DOMi"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code>
を受け取って <code class="DOMi"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPathNSResolver</anchor></code> を作成します。
作成された <code class="DOMi"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPathNSResolver</anchor></code> は、
<code class="DOMm"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lookupNamespaceURI</anchor></code> メソッドが呼ばれたら
<code class="DOMi"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code> の <code class="DOMm"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lookupNamespaceURI</anchor></code>
メソッドを呼ぶような動作をします <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">DOM 水準3 XPath</src>。</p><p><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>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内容</anchor>として書かれている <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPath</anchor>
の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">式</anchor>を、その<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>における<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間</anchor>の束縛に従って解釈する、
というような場面でこの方法で作成した <code class="DOMi"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPathNSResolver</anchor></code>
を使うと便利そうです。</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> <strong>節点からキャストで作成</strong>:
<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:">中核</anchor>モジュールと <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPath</anchor>
モジュールの両方に対応した気が利いた 
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(<q xmlns="http://www.w3.org/1999/xhtml"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">界面</anchor></q>の概念を持つ言語での)</weak> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor>
の実装なら、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM水準3</anchor> の <code class="DOMi"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code>
界面を実装した物体が <code class="DOMi"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPathNSResolver</anchor></code>
界面も実装しているはずです。ですから、<pre class="example java code">resolver = (XPathNSResolver) document.getElementById (&quot;someElement&quot;);</pre></p><p>のようなことが <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(<anchor-internal a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;6</anchor-internal> を使わずに)</weak> できるでしょう。</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> <strong><code class="DOMm">lookupNamespaceURI</code> メソッドを持った物体を作成</strong>:
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">型</anchor>に関して弱い言語なら、適当に <code class="DOMi"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lookupNamespaceURI</anchor></code>
メソッドを持つ物体を用意すれば OK です。例えば <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> にある例は<pre class="example JS code">resolver = document.getElementById (&quot;someElement&quot;);</pre></p><p>のように特に何もしなくても大丈夫です。また、<pre class="example JS code">resolver = {
  lookupNamespaceURI: function (pfx) {
    switch (pfx) {
      case 'xhtml1': return &quot;http://www.w3.org/1999/xhtml&quot;;
      case 'xhtml2': return &quot;http://www.w3.org/2002/06/xhtml2/&quot;;
      default:       return null;
    }
  }
};</pre></p><p>のような感じで物体を作ってもよいです。</p></section><section><h1>呼び出し順序</h1><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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Chrome</anchor> も <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Firefox</anchor> も、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間接頭辞</anchor>それぞれに対して呼び出します。同じ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間接頭辞</anchor>を複数使ってもキャッシュされたりはせず、毎回呼び出されます。 <time>2013-09-28T10:25:25.600Z</time> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;15</anchor-internal></src></p><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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Chrome</anchor> も <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Firefox</anchor> も基本的には<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">式</anchor>の前から後ろへと呼び出していきます。しかし同じ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ステップ</anchor>内で
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Firefox</anchor> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前テスト</anchor> → <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">述語</anchor>の順に呼び出しますが、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Chrome</anchor> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">述語</anchor> →
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前テスト</anchor>の順に呼び出します。<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">述語</anchor>が複数ある場合どちらのブラウザーでも前から後ろへと呼び出します。
<time>2013-09-28T10:27:24.500Z</time> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;15</anchor-internal></src></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> 構文エラーがある場合、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Chrome</anchor> も <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Firefox</anchor> もその前にある<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間接頭辞</anchor>については呼び出しますが、
それ以後の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間接頭辞</anchor>は呼び出しません。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;18</anchor-internal></src> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Firefox</anchor>
は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">字句解析</anchor>レベルでのエラーがあるとそれ以前の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間接頭辞</anchor>についても呼び出しませんが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Chrome</anchor> は呼び出します。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;20</anchor-internal></src> また <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Chrome</anchor> は <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;17</anchor-internal>
の通り<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">述語</anchor>を先に処理するので、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">述語</anchor>で構文エラーがあると<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前テスト</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間接頭辞</anchor>は呼び出されません。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;21</anchor-internal></src> <time>2013-09-28T10:29:18.00Z</time></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Chrome</anchor> も <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Firefox</anchor> も、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">QName</anchor> や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NameTest</anchor> の全体の構文解析が終わってから<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間接頭辞</anchor>について呼び出すようです。 <time>2013-09-28T11:20:02.300Z</time></p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><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> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C!DOCTYPE%20html%3E%0A%3Cscript%3E%0A%20%20document.evaluate%20(%22hoge%3Aaa%2Fhoge%3Abb%2Ffuga%3Acc%5Bab%3Add%5Bbb%3Acc%5D%5D%5Bac%3Aee%5D%2Fxy%3Aaa%22%2C%20document%2C%20function%20(prefix)%20%7B%20w%20(prefix)%20%7D%2C%200%2C%20null)%3B%0A%3C%2Fscript%3E">http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C!DOCTYPE%20html%3E%0A%3Cscript%3E%0A%20%20document.evaluate%20(%22hoge%3Aaa%2Fhoge%3Abb%2Ffuga%3Acc%5Bab%3Add%5Bbb%3Acc%5D%5D%5Bac%3Aee%5D%2Fxy%3Aaa%22%2C%20document%2C%20function%20(prefix)%20%7B%20w%20(prefix)%20%7D%2C%200%2C%20null)%3B%0A%3C%2Fscript%3E</anchor-external></li><li><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> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C!DOCTYPE%20html%3E%0A%3Cscript%3E%0A%20%20document.evaluate%20(%22hoge%3Aaa%20%3C%3E%20fuga%3Aaa%22%2C%20document%2C%20function%20(prefix)%20%7B%20w%20(prefix)%20%7D%2C%200%2C%20null)%3B%0A%3C%2Fscript%3E">http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C!DOCTYPE%20html%3E%0A%3Cscript%3E%0A%20%20document.evaluate%20(%22hoge%3Aaa%20%3C%3E%20fuga%3Aaa%22%2C%20document%2C%20function%20(prefix)%20%7B%20w%20(prefix)%20%7D%2C%200%2C%20null)%3B%0A%3C%2Fscript%3E</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C!DOCTYPE%20html%3E%0A%3Cscript%3E%0A%20%20document.evaluate%20(%22hoge%3Aaa%20%60%20fuga%3Aaa%22%2C%20document%2C%20function%20(prefix)%20%7B%20w%20(prefix)%20%7D%2C%200%2C%20null)%3B%0A%3C%2Fscript%3E">http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C!DOCTYPE%20html%3E%0A%3Cscript%3E%0A%20%20document.evaluate%20(%22hoge%3Aaa%20%60%20fuga%3Aaa%22%2C%20document%2C%20function%20(prefix)%20%7B%20w%20(prefix)%20%7D%2C%200%2C%20null)%3B%0A%3C%2Fscript%3E</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C!DOCTYPE%20html%3E%0A%3Cscript%3E%0A%20%20document.evaluate%20(%22hoge%3Aaa%5Bfuga%3Aaa%20%2B%5D%22%2C%20document%2C%20function%20(prefix)%20%7B%20w%20(prefix)%20%7D%2C%200%2C%20null)%3B%0A%3C%2Fscript%3E">http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C!DOCTYPE%20html%3E%0A%3Cscript%3E%0A%20%20document.evaluate%20(%22hoge%3Aaa%5Bfuga%3Aaa%20%2B%5D%22%2C%20document%2C%20function%20(prefix)%20%7B%20w%20(prefix)%20%7D%2C%200%2C%20null)%3B%0A%3C%2Fscript%3E</anchor-external></li></ul></refs></section><section><h1>コールバック this 値</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Firefox</anchor> でも <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Chrome</anchor> でも <code class="JS" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Function</anchor></code> を指定した場合の
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">callback this value</anchor> はその<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">関数</anchor>自体になるようです。 <time>2013-10-07T14:14:52.000Z</time></p></section><section><h1>返す値の解釈</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Chrome</anchor> も <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Firefox</anchor> も <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor></code> が返されると <code class="JS" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">document.evaluate</anchor></code>
は <code class="DOM" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NamespaceError</anchor></code> を返します。 <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">undefined</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:">名前空間URL</anchor>と解釈するようです。ただし<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空文字列</anchor>はどの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間</anchor>とも
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null名前空間</anchor>とも) 一致しません。 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">例外</anchor>を投げると
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Firefox</anchor> は <code class="DOM" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SyntaxError</anchor></code>、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Chrome</anchor> は <code class="DOM" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NamespaceError</anchor></code>
を返します。 (<code class="DOM" 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>の場合そこで構文解析は終了します。) <time>2013-09-28T10:53:58.800Z</time></p></section><section><h1>歴史</h1><section><h1><code class="DOMi" xml:lang="en">NSResolver</code></h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[27]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Selectors API</anchor> ははじめ <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM3 XPath</anchor> を参照していましたが、かなり初期に自身で
<dfn><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NSResolver</anchor></code></dfn> を定義するようになりました。</p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[26]</anchor-end> <cite>2006/webapi/selectors-api/Overview.html - diff - 1.6</cite> (<time>2013-10-12 08:38:19 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://dev.w3.org/cvsweb/2006/webapi/selectors-api/Overview.html.diff?r1=1.5;r2=1.6;f=h">http://dev.w3.org/cvsweb/2006/webapi/selectors-api/Overview.html.diff?r1=1.5;r2=1.6;f=h</anchor-external></li></ul></refs></section></section><section><h1>メモ</h1><p><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> 参考:<ul><li><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>XUL Apps &gt; Tips &gt; DOM3 XPathをノードの検索に活用する - outsider reflex</cite>
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://piro.sakura.ne.jp/xul/tips/x0032.html">http://piro.sakura.ne.jp/xul/tips/x0032.html</anchor-external></li><li><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>Hawk's W3 Laboratory : XML : XPathと名前空間</cite> 
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.hawk.34sp.com/stdpls/xml/xpath_ns.html">http://www.hawk.34sp.com/stdpls/xml/xpath_ns.html</anchor-external></li><li><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> <cite>Hatena::agenda</cite> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://d.hatena.ne.jp/jintrick/20031204">http://d.hatena.ne.jp/jintrick/20031204</anchor-external></li></ul></p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPath</anchor> モジュール全体の使い方は <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;10</anchor-internal> を見ればよいでしょう。
<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;11</anchor-internal> と <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;12</anchor-internal> は名前空間の扱いに少々誤解がみられます。</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>
<cite xml:lang="ja">XPath, $X function, NSResolver &lt; 16 &lt; March &lt; 2006 &lt; nulog, NULL::something : out of the headphone</cite> (<code>2007-06-09 23:04:20 +09:00</code> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://lowreal.net/logs/2006/03/16/1">http://lowreal.net/logs/2006/03/16/1</anchor-external>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor> <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">2007-06-09 14:07:18 +00:00</weak>)</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>
<cite>d:id:quaa</cite> (<time>2007-06-07 22:15:24 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://d.hatena.ne.jp/quaa/20070604#p1">http://d.hatena.ne.jp/quaa/20070604#p1</anchor-external>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor> <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">2007-06-09 14:07:44 +00:00</weak>)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[25]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Chrome</anchor> では <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NoInterfaceObject</anchor> ですが <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Firefox</anchor> では
<code class="JS" xml:lang="en">window.XPathNSResolver</code> が存在します。 <time>2013-10-07T14:18:24.00Z</time></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[28]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Chrome</anchor> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor> が指定された時に <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</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:">null</anchor> を返すようです。この点で <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code> の <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lookupNamespaceURI</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:">null</anchor> になります。)
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Firefox</anchor> はどちらでも <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor> になるので <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPathNSResolver</anchor></code>
で特別な処理をしているのかどうかは観測できません。 <time>2013-10-12T08:41:39.300Z</time></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="29" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[29]</anchor-end> <cite xml:lang="en-US">Selectors API</cite>
( (<time>2007-08-29 13:51:08 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://dev.w3.org/cvsweb/~checkout~/2006/webapi/selectors-api/Overview.html?rev=1.28&amp;content-type=text/html;%20charset=utf-8#nsresolver-interface">http://dev.w3.org/cvsweb/~checkout~/2006/webapi/selectors-api/Overview.html?rev=1.28&amp;content-type=text/html;%20charset=utf-8#nsresolver-interface</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="30" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[30]</anchor-end> <cite xml:lang="en">384003 – XPathEvaluator does not accept a Node as NSResolver</cite>
( (<time>2013-11-01 00:13:05 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://bugzilla.mozilla.org/show_bug.cgi?id=384003">https://bugzilla.mozilla.org/show_bug.cgi?id=384003</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="31" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[31]</anchor-end> <cite xml:lang="en">Add the DOM XPath interfaces from the WHATWG wiki</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">annevk</anchor>著, <time>2019-08-30 17:38:53 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/dom/commit/dea5d92156f144faf57d1a5e54a17227139ca3c5">https://github.com/whatwg/dom/commit/dea5d92156f144faf57d1a5e54a17227139ca3c5</anchor-external></p></section></body></html>