冬様もすなる☆日記というもの (2008年6月)

2008年6月28日

素片識別子のようなもの (@21:08 +09:00)

インターネット標準である RFC 3986 (STD 66) によれば、 URI のうち、文字「#」の後の部分は素片識別子と呼ばれ、資源の一部分 (など) を表すために用いることができます。例えば、 http://suika.fam.cx/suika#layer13 という URI は、 http://suika.fam.cx/suika という資源のうちの、「layer13」という名前の部分を表します。http://suika.fam.cx/suika解参照 (デリファレンス) すると (たまたま) HTML 文書が得られますが、 HTML 仕様に従うと、http://suika.fam.cx/suika#layer13 という URI は、その HTML 文書中で id 属性が「layer13」と指定された要素を表すことになります。

素片識別子の解釈は URI scheme (先の例では http) には依存せず、得られた資源の媒体型 (先の例では text/html = HTML 文書) によって決まることになっています。インターネット標準である RFC 3986 では、です。

しかし、現実は必ずしもインターネット標準である RFC 3986 と一致しません。例えば、 javascript:alert('abc#def') という構文的には正しい URI を Web ブラウザはどう解釈するでしょうか? 実際に試してみると、「abc#def」という文字列がダイアログ・ボックスに表示されます。 RFC 3986 通りに解釈するなら、「#」より後は素片識別子ですから、この URI は javascript:alert('abc という URI によって表される資源の一部分を表していることになります。しかし、この資源は URI として構文的には正しいですが、正しい JavaScript の文ではありませんから、構文誤りのために実行されないはずです。にもかかわらず、 JavaScript として構文誤りなしに実行され、しかも「abc#def」と表示されるということは、 RFC 3986 とは異なる解釈がなされたと理解せざるを得ません*1

もっとも、インターネット標準である RFC 3986 によれば定義されている URI scheme は IANA 登録簿に登録されているものなので、そこに掲載されていない javascript: URI はそもそも存在しないものです。ですから、 Web ブラウザが javascript: から始まる文字列をどのように解釈しようとも、 URI を定義するインターネット標準である RFC 3986 には関係がないのかもしれませんw ただし、 Web ブラウザのこのような解釈は実は javascript: URI*2 だけでなく、 IANA 登録簿に掲載されている URI scheme である data: URI*3mailto: URI (例えば mailto:info@example.org?subject=a#b)*4 でも行われています。

  1. 厳密に言えば、素片識別子付きの URI で識別される資源は may be some portion or subset of the primary resource, some view on representations of the primary resource, or some other resource defined or described by those representations (RFC 3986) と説明されていますので、素片識別子付きで実行した結果がある種の「view」あるいは「some other resource」なのだと主張できなくもありません。ですが、そのような解釈はほとんどこじつけといってよいでしょう。
  2. これは WinIE、Firefox、Opera、Safari のいずれでもです。現実に多くの Web サイトがこの動作に依存していると思われます。
  3. これは Firefox、Opera、Safari のいずれでもです。Firefox や Safari はデータとして解釈した上で、更に素片識別子としても解釈している (指定された要素までスクロールする) ようです。
  4. これは Firefox + Windows Mail、Safari + Windows Mail、Opera + Opera Mail ではそうですが、 WinIE7 + Windows Mail の場合にだけは素片識別子の部分が無視されました。
ご感想 (著者に直接送る)
[これは何?]

2008年6月13日

CD 届いたよ (@19:39 +09:00)

表紙絵の模様がケースに傷が入ってるように見えてびびった。

ご感想 (著者に直接送る)
[これは何?]

2008年6月11日

あと4分 (@00:15 +09:00)

後4分で危うく終電を逃すところでした。危ない危ない。。。

ご感想 (著者に直接送る)
[これは何?]