[22] HTML ではいろいろな場所で URL が使われます。
[21] HTML5 と URL Standard まで、 HTML における URL の定義は混乱した状況にありました。 (これは HTML 特有の事情ではなく URL というもの自体が混乱していました。)
[1] HTML 4 では、URI
という語を
[URI] で定義されている意味で使います。と
IW:HTML4:"types.html#type-uri" に書いてあります。
[URI] は HTML 4.01 では RFC 2396
のことです。
と、これはちょっと困ったことになります。
RFC 2396 では URI
と URI参照
を区別しているのです。
RFC 2396 の4章によれば、 URI 参照から素片識別子を取り除き、
相対URI は解決して得た絶対URI こそが
the URI
であるというのです。
これじゃあ、 HTML 4 でたとえば href
属性に相対 URI も素片識別子も使えなくなっちゃう。。。
[2] URI の紹介のところ IW:HTML4:"intro/intro.html#h-2.1" では相対 URI も素片識別子も含めて URI と言っています。 これが本来の意図であることは明らかです。 下手に RFC を参照せずにちゃんと説明しておけば良かったものを。。。
[3] まあ、 URI 関係の概念と名前は歴史的に泥々してますからあんまり責めちゃ可愛そうではあります。
ちなみに XHTML 1 はちゃんと URI 参照
と書いていたりします。。。
[4] HTML 4 では、 %URI;
型の属性の値は URI (>>1) です。
[5] 仕様書:
HTML 4.01 も XHTML m12n も RFC 2396 を参照しています (>>1) が、 RFC 1738 や RFC 1808 も参考文献一覧にしぶとく残っています。
[6] URI は一般に大文字・小文字を区別します。 部分部分は区別しないこともありますが、全体としては区別します。
[7] HTML 4 附属書 B (参考) には、 URI 属性値の非 ASCII 文字の取り扱いについての推奨事項が書かれています。
要点:
%URI
属性値に非 ASCII 文字を含む URI のようなものを指定しちゃいます。name
属性値にも同じ UTF-8 の符号化を適用するべきです。[8] 突っ込み:
olderとかお茶を濁すのではなく、 もうちょっと丁寧に現状を説明するべきだったのではないでしょうか。
name
属性云々は意味不明です。素片識別子として使う時は
UTF-8 + URI 逃避符号化せよという意味でしょうか。[9] HTML 4 は、次のように述べています。
フォームの提出で構築される URI は、
a
href
などでも使うことがあります。 運が悪くも&
をフォーム欄の分離子に使うと属性値表記の中で逃避して & のように書かなければなりません。
HTML 4 B.2.2 Ampersands in URI attribute values IW:HTML4:"appendix/notes.html#ampersands-in-uris" より要約
[10] この規定に触発されたのかどうかは知りませんが、
最近では CGIスクリプトの実装で &
と
;
を等しく query
の分離子とみなすのが普通になっているようです。
(HTTP や CGI の鯖がそう実装しているのは見たことがありません。
というか HTTP や CGI の鯖が query
を解釈するのは見たことがありません。。。)
ただ、 form
要素の属性か何かで
XForms のように application/x-www-form-urlencoded
の分離子を指定する方法を用意しておけば、
もっと広がったのではないかと思いますのに残念です。
フォームの提出時とアンカーをたどった時とで URI
の形が変わってしまうのは、なんとも美しくありません。
[12] XSLT 2.0 and XQuery 1.0 Serialization (Second Edition) ( ( 版)) http://www.w3.org/TR/2010/REC-xslt-xquery-serialization-20101214/#uri-attribute-values
[13] XSLT 2.0 and XQuery 1.0 Serialization (Second Edition) ( ( 版)) http://www.w3.org/TR/2010/REC-xslt-xquery-serialization-20101214/#list-of-uri-attributes
[14] XSLT and XQuery Serialization 3.0 ( ( 版)) http://www.w3.org/TR/xslt-xquery-serialization-30/#list-of-uri-attributes
[15] XSLT and XQuery Serialization 3.0 ( ( 版)) http://www.w3.org/TR/xslt-xquery-serialization-30/#uri-attribute-values
[16] XSLT and XQuery Serialization 3.0 ( ( 版)) http://www.w3.org/TR/xslt-xquery-serialization-3/#uri-attribute-values
[17] XSLT and XQuery Serialization 3.0 ( ( 版)) http://www.w3.org/TR/xslt-xquery-serialization-3/#list-of-uri-attributes
[11] XHTML2 の最初の作業原案では XML Schema 第1版勧告の
anyURI
であるとされていました。
[19] URL Standard 参照。
[20] XSLT and XQuery Serialization 3.1 () https://www.w3.org/TR/2017/REC-xslt-xquery-serialization-31-20170321/#uri-attribute-values