血統の森+はてな

旧はてなダイアリーの自動インポートによるアーカイブです。

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)によると、

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]

という具合にIRIも扱えるようになっている。つまり、日本語ドメインや日本語パス名をそのままで扱える、ということ。
言い換えるなら、http://例え.テスト/メインページはIRI。で、Punycode*2UTF-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版のIEFirefoxOperaSafariChromeといったwebブラウザでは扱うことができない。つまり、

urn:ietf:rfc:2141

といったURNを

http://www.ietf.org/rfc/rfc2141.txt

というURLに変換されて表示されることはない、ということ。FirefoxSafariでは次のように怒られる。Operaはサポートされていないからといって、この文言はどうかとは思う。しかし、の言い回しだと、MacSafariでは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/ を使用した。

*3:http://delicious.com/e_luck/urn