<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:">URL</anchor> は同じものを表すにも関わらず複数の表現方法がある場合が数多く存在します。
その一方で、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</anchor> <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(によって表されるもの)</weak> が同一かどうか判定したいこともあります。
それ故、2つの <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</anchor> が同一かどうかを判定する<strong><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">比較演算</anchor></strong>を定義する必要が生じます。
比較演算の定義に当たっては<strong><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正規化</anchor></strong>の方法を規定し、それによる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正規形</anchor>の比較を用いることもあります
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(もちろん<anchor>正規化</anchor>なしで<anchor>比較</anchor>を定義することもあります)</weak>。
なお、<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>のために使われることがありますし、
<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="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:">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:">比較</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>を無視できないというのも様々なバリエーションが生まれる要因となっています。</p><section><h1>URL の構文解析、解決、比較と正準化</h1><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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL Standard</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:">構文解析<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">URLの構文解析</title></anchor>、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">解決<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">URLの解決</title></anchor>、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">比較<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">URLの比較</title></anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正準化<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">URLの正準化</title></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="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL Standard</anchor> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">構文解析<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">URLの構文解析</title></anchor>、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">解決<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">URLの解決</title></anchor>、
基本的な<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正準化<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">URLの正準化</title></anchor>を1つの不可分の演算として改めて正確に定義し、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">比較<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">URLの比較</title></anchor>はその結果について 
(あるいは場合によっては文脈依存の更なる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">演算</anchor>を経たものについて) 行うものとしました。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><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:">URLの構文解析</anchor>を参照。</comment-p></section><section><h1>単純文字列比較</h1><p><em><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URLの単純文字列比較</anchor></em></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:">URL</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="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</anchor-end> ほとんど自明な比較方法に思えますが、単純比較すら、いくつかバリエーションが考えられます。<ul><li><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:">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>する</li><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> 与えられた <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</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:">絶対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:">比較</anchor>する</li><li><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:">IRI</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>する</li><li><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:">URL</anchor> を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイト列</anchor>として比較する</li></ul></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> 普通は <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;25</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:">URL</anchor> だったり、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 3986</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URI</anchor> 上の演算として定義されていたりするので注意が必要です。</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> 普通は仕様上は<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:">非ASCII文字</anchor>が含まれる時に結果が変わってしまうことがあるので、やはり注意が必要です。</p><figure class="short list"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="51" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[51]</anchor-end> 単純な<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字列の比較</anchor></figcaption><ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML名前空間URL</anchor></li><li><code>tag:</code></li></ul></figure></section><section><h1>URL 記録の比較</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="45" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[45]</anchor-end> 次の<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:">URL構文解析器</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>するものです。<figure class="list"><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="46" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[46]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">素片識別子</anchor>以外の全部分の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">比較</anchor><ul><li><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 xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フレーム</anchor>読み込み</li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">navigate</anchor> から<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">素片識別子へのnavigate</anchor> に移るか否か</li><li><code class="DOMm" xml:lang="en">pushState</code>/<code class="DOMm" xml:lang="en">replaceState</code> を認めるか否か</li></ul></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="47" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[47]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">scheme<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">URL scheme</title></anchor> と <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">authority</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">比較</anchor><ul><li><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> <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">pushState</anchor></code>/<code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">replaceState</anchor></code> を認めるか否か</li></ul></li></ul></figure></p></section><section><h1>URL scheme にあまり依存しない比較・正規化</h1><figure class="list"><ul><li><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 xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">navigate</anchor> アルゴリズム中の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">AppCache</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>が行われた状態です。)</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[32]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">AtomにおけるURLの正規形</anchor></li><li><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:">OAuthにおけるURLの正規化</anchor></li></ul></figure></section><section><h1>URL scheme に依存した比較・正規化</h1><figure class="list"><ul><li><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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTPにおけるURLの比較</anchor></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[33]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SIPにおけるURLの比較</anchor></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[36]</anchor-end> <code class="URI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">msrp:</anchor></code> / <code class="URI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">msrps:</anchor></code></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="40" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[40]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ハッシュ値URLの比較</anchor></li><li><code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">uniformResourceIdentifier</anchor></code></li><li><code class="URI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">pkcs11:</anchor></code></li><li><code class="URI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ws:</anchor></code>/<code class="URI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">wss:</anchor></code></li></ul></figure><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="35" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[35]</anchor-end> <cite>Widget Access Request Policy</cite> (<time>2012-02-04 04:00:27 +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/2006/waf/widgets-access/#ta-case-insensitive-compare">http://dev.w3.org/2006/waf/widgets-access/#ta-case-insensitive-compare</anchor-external></li></ul></refs></section><section><h1>条件との比較</h1><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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</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:">URL</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:">URLパターン</anchor>も参照。</p></section><section><h1>正準化とプロトコル処理</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="48" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[48]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求対象</anchor>の処理では、 <code>absolute-form</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><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><code xmlns="http://www.w3.org/1999/xhtml">absolute-form</code> 参照。</comment-p></section><section><h1>歴史</h1><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="41" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[41]</anchor-end> RFC 2396 (URI) 6. URI Normalization and Equivalence</figcaption><blockquote><p>In many cases, different URI strings may actually identify the
identical resource. For example, the host names used in URL are
actually case insensitive, and the URL <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.XEROX.com">http://www.XEROX.com</anchor-external> is
equivalent to <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.xerox.com">http://www.xerox.com</anchor-external>. In general, the rules for
equivalence and definition of a normal form, if any, are scheme
dependent. When a scheme uses elements of the common syntax, it will
also use the common syntax equivalence rules, namely that the scheme
and hostname are case insensitive and a URL with an explicit &quot;:port&quot;,
where the port is the default for the scheme, is equivalent to one
where the port is elided.</p></blockquote></figure></section><section><h1>メモ</h1><ul><li><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:">XML</anchor> と関連仕様における URI の扱いについては <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML//URI</anchor> も参照して下さい。</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>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 4452</anchor>: <code class="URI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">info</anchor>:</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URI</anchor> の比較法</p><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></p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SOAP</anchor>: 応用依存</ed><p><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> <cite>Wondering around: Java's URL little secret</cite>
(<time>2009-08-29 10:34:46 +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://www.eishay.com/2008/04/javas-url-little-secret.html">http://www.eishay.com/2008/04/javas-url-little-secret.html</anchor-external></p><p><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> <cite>OWL 2 Web Ontology Language Structural Specification and Functional-Style Syntax</cite>
(<time>2009-10-27 23:15:00 +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://www.w3.org/TR/2009/REC-owl2-syntax-20091027/#IRIs">http://www.w3.org/TR/2009/REC-owl2-syntax-20091027/#IRIs</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="34" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[34]</anchor-end> <cite xml:lang="en">RFC 6021 - Common YANG Data Types</cite>
(<time>2010-10-07 04:53:03 +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://tools.ietf.org/html/rfc6021">http://tools.ietf.org/html/rfc6021</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="37" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[37]</anchor-end> <cite xml:lang="en">RFC 6943 - Issues in Identifier Comparison for Security Purposes</cite>
( (<time>2013-11-19 01:20:54 +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://tools.ietf.org/html/rfc6943#section-3.3">http://tools.ietf.org/html/rfc6943#section-3.3</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="38" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[38]</anchor-end> <cite xml:lang="en">RDF 1.1 Concepts and Abstract Syntax</cite>
( (<time>2014-04-26 05:40:02 +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://dvcs.w3.org/hg/rdf/raw-file/default/rdf-concepts/index.html#dfn-iri-equality">https://dvcs.w3.org/hg/rdf/raw-file/default/rdf-concepts/index.html#dfn-iri-equality</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="39" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[39]</anchor-end> <cite xml:lang="en">RFC 7252 - The Constrained Application Protocol (CoAP)</cite>
( (<time>2014-06-27 00:59:37 +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://tools.ietf.org/html/rfc7252#section-6.3">http://tools.ietf.org/html/rfc7252#section-6.3</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="42" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[42]</anchor-end> <cite>IRC logs: freenode / #whatwg / 20140903</cite>
( (<time>2014-09-04 12:38:30 +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://krijnhoetmer.nl/irc-logs/whatwg/20140903#l-914">http://krijnhoetmer.nl/irc-logs/whatwg/20140903#l-914</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="43" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[43]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r8739     Attempt to mitigate the injection elevation attack on appcache, and describe the attack in detail</cite>
( (<time>2014-09-04 06:39:00 +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://html5.org/r/8739">http://html5.org/r/8739</anchor-external></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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XRD</anchor> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL scheme</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="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal></src> としています。</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="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <cite>Extensible Resource Descriptor (XRD) Version 1.0</cite> (<time>2010-11-01 20:25:40 +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://docs.oasis-open.org/xri/xrd/v1.0/xrd-1.0.html#element.subject">http://docs.oasis-open.org/xri/xrd/v1.0/xrd-1.0.html#element.subject</anchor-external></li></ul></refs><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> <cite>Protocolv2Spec - google-safe-browsing - Client specification for the Google Safe Browsing v2.2 protocol - protect users from malicious web pages - Google Project Hosting</cite>
(<time>2015-03-22 00:44:28 +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://code.google.com/p/google-safe-browsing/wiki/Protocolv2Spec#6.1._Canonicalization">https://code.google.com/p/google-safe-browsing/wiki/Protocolv2Spec#6.1._Canonicalization</anchor-external></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> <cite xml:lang="en">Phishing Protection: Server Spec - MozillaWiki</cite>
(<time>2015-03-21 19:45:51 +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://wiki.mozilla.org/Phishing_Protection:_Server_Spec#Canonical_Hostname_Creation">https://wiki.mozilla.org/Phishing_Protection:_Server_Spec#Canonical_Hostname_Creation</anchor-external></p><figure class="quote"><figcaption><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> <cite xml:lang="en">RFC 7612 - Lightweight Directory Access Protocol (LDAP): Schema for Printer Services</cite>
(<time>2015-07-01 10:20:12 +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://tools.ietf.org/html/rfc7612#section-1.4.2">https://tools.ietf.org/html/rfc7612#section-1.4.2</anchor-external></figcaption><blockquote><p>These URI attributes specify EQUALITY matching with</p><p>'caseIgnoreMatch' (rather than with 'caseExactMatch') in order to</p><p>conform to the spirit of <strong>[</strong>STD66<strong>]</strong>, which requires case-insensitive</p><p>matching on the host part of a URI versus case-sensitive matching</p><p>on the remainder of a URI.</p><p>These URI attributes follow existing practice of supporting</p><p>case-insensitive equality matching for host names in the</p><p>associatedDomain attribute defined in <strong>[</strong>RFC4524<strong>]</strong>.</p></blockquote></figure><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 xml:lang="en">Define URL equivalence. Fixes https://www.w3.org/Bugs/Public/show_bug… · whatwg/url@3f0bc8b</cite>
(<time>2015-08-15 11:32:10 +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/url/commit/3f0bc8b84d2f3bdb651207ce0f90c659c3a5a573">https://github.com/whatwg/url/commit/3f0bc8b84d2f3bdb651207ce0f90c659c3a5a573</anchor-external></p><figure class="quote"><figcaption><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 xml:lang="en">Model for Tabular Data and Metadata on the Web</cite>
(<time>2015-12-03 19:28:42 +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://www.w3.org/TR/2015/REC-tabular-data-model-20151217/#h-url-normalization">http://www.w3.org/TR/2015/REC-tabular-data-model-20151217/#h-url-normalization</anchor-external></figcaption><blockquote><p>Metadata Discovery and Compatibility involve comparing URLs. When comparing URLs, processors must use Syntax-Based Normalization as defined in <strong>[</strong>RFC3968<strong>]</strong>. Processors must perform Scheme-Based Normalization for HTTP (80) and HTTPS (443) and should perform Scheme-Based Normalization for other well-known schemes.</p></blockquote></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="44" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[44]</anchor-end> <cite xml:lang="en">Sniffly for ports.</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">mikewest</anchor>著, <time>2016-07-07 15:31:29 +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/w3c/webappsec-csp/commit/22d08b990290e49f5a666fad08de16d75bb369e7">https://github.com/w3c/webappsec-csp/commit/22d08b990290e49f5a666fad08de16d75bb369e7</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="49" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[49]</anchor-end> <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>を行っているようです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="50" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[50]</anchor-end> 例えば、<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>#</code> ごと除去します。</p></section></body></html>