HTML5メモ(1) href属性/URIとIRI の覚え書き
- 唐突に何かが始まるのはいつものこと。
- いつまで続くのかは不明
- 当然間違いがあるかもしれない。もしあれば遠慮無くつっこんでくれ。
HTML4ではhref属性でURI(RFC 2396)が扱えるという規定。おおざっぱに言えば、URIに使える文字列は、アルファベットと数字、決められた記号*1。つまり、日本語のドメイン名、パス名、ファイル名等はURIで扱えない。
HTML4での規定は過去ログ参照。
- HTMLデータ形式メモ2 - 血統の森+はてな
- http://d.hatena.ne.jp/momdo/20090611/p1
一方WHATWGのDraftにあるHTML5(18 May 2010)によると、
という具合にIRIも扱えるようになっている。つまり、日本語ドメインや日本語パス名をそのままで扱える、ということ。A Web address is a valid Web address if at least one of the following conditions holds:
- The URL is a valid URI reference [RFC3986].
- The URL is a valid IRI reference and it has no query component. [RFC3987]
- The URL is a valid IRI reference and its query component contains no unescaped non-ASCII characters. [RFC3987]
- The URL is a valid IRI reference and the character encoding of the URL's Document is UTF-8 or UTF-16. [RFC3987]
言い換えるなら、http://例え.テスト/メインページはIRI。で、Punycode*2とUTF-8でのURIパーセントエンコーディングを用いて
http://xn--r8jz45g.xn--zckzah/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8
と書くことができる。このようにIRIをURIとして記述することで、HTML4の範囲でも妥当に取り扱うことができる。
URNについて
URNについては次の文章を参照。
- URN (Uniform Resource Name) について-- ごく簡単なHTMLの説明
- http://www.kanzaki.com/docs/html/urn.html
URIの範囲にあるので、a要素href属性にURNを記述することで、適当なwebページが参照できそうに思えるが、この文章を書いている時点ではWindows版のIE、Firefox、Opera、Safari、Chromeといったwebブラウザでは扱うことができない。つまり、
urn:ietf:rfc:2141
といったURNを
http://www.ietf.org/rfc/rfc2141.txt
というURLに変換されて表示されることはない、ということ。FirefoxやSafariでは次のように怒られる。Operaはサポートされていないからといって、この文言はどうかとは思う。しかし、の言い回しだと、Mac版Safariではurnが解決できると言うことなの…?macユーザの方でコメントできる方は是非。mac版も一緒だそうな*3
以下のJavaScriptやアドオンを用いて、ある程度は解決できる。
- []urn
- isbn:[]とJavaScript - 徒書:http://www.akatsukinishisu.net/itazuragaki/id/urn_isbn_and_javascript
- URNサポート (URN Support) []
- :[] Add-ons for Firefox:https://addons.mozilla.org/ja/firefox/addon/1940/
- ぷろじぇくと、みすじら。 - URN Handler for Internet Explorer
- http://www.fastwave.gr.jp/diarysrv/misuzilla/200205a.html#20020501-1
webサーバが解決すべきものなのか、それともwebクライアントが解決すべきものなのか?という問題もありそう。
IANAに登録されているURNスキームは以下の通り。
- Uniform Resource Names (URN) Namespaces
- http://www.iana.org/assignments/urn-namespaces/urn-namespaces.xml
*1:正確なURIについては、[Studying HTTP] URI - Uniform Resource Identifiers:http://www.studyinghttp.net/uri を参照
*2:Punycodeの変換は 日本語JPドメイン名のPunycode変換・逆変換 - 日本語.jp:http://punycode.jp/ を使用した。