urn:isbn:とJavaScript

ウェブ技術に敏感なとある方面においては <a href="urn:isbn:n-nnnn-nnnn-n">本の名前</a> といった、ISBNをURIとしたリンクを使用しているのを時々見かけます。

このようなリンクを扱うものとしては、URN リダイレクタやXULアプリのURN Supportがありますが、もう少し手軽にbookmarkletで何とかしてみようと考えまして、試しに作ってみました。

urn:isbn:なリンクをAmazon.co.jpへのリンクに変換
javascript:isbn2Amazon();function isbn2Amazon() { var links = document.getElementsByTagName('a'); var url = 'http://www.amazon.co.jp/exec/obidos/ASIN/'; for (var i = 0; i < links.length; i++) { var a = links[i].href; if ( a.match(/^urn:isbn:(.+)$/i) ) { a = RegExp.$1; a = a.replace(/-/g,''); a = url + a; } links[i].href = a; } }
同じくbk1へのリンクに変換
javascript:isbn2bk1();function isbn2bk1() { var links = document.getElementsByTagName('a'); var url = 'http://www.bk1.co.jp/cgi-bin/srch/srch_result_book.cgi/?idx=3&isbn='; for (var i = 0; i < links.length; i++) { var a = links[i].href; if ( a.match(/^urn:isbn:(.+)$/i) ) { a = url + RegExp.$1; } links[i].href = a; } }
* * *

でまあ、閲覧する側としてはこのような対処でも何とかなるわけですが、そこから一歩進んで、ウェブページを作り出す側として urn:isbn:... のようなリンクを有効活用できないか、と考えまして、このようなものを作ってみました。

やっつけで作ったのでスクリプトの出来については疑問が残りますが、urn:isbn:なリンクの利用の仕方の一例、ということで。

* * *

スクリプトを作りをする際にurn:isbn:について調べてみたところ、RFC2888の3.2の以下の記述によると数字の間の"-"は無くてもよいようなのですが、読解に自信が無いので間違ってたらご指摘下さい。

For the ISBN namespace, some additional equivalence rules are appropriate. Prior to comparing two ISBN URNs for equivalence, it is appropriate to remove all hyphens, and to convert any occurrences of the letter X to upper case.

(2003年3月12日)

追記

掲示板にてsatoshiiさんより上記部分について意訳を頂きました。「二つの ISBN URN が等しいかどうかを比較する際には、あらかじめ全てのハイフンを除去し、全てのエックスを大文字に変換する」……とのことで、やはりハイフンは無くてもよさそうです。

(2003年3月16日)

北村曉 kits@akatsukinishisu.net