/[pub]/suikawiki/wikidata/page/48544D4C.ns/555249.txt
Suika

Contents of /suikawiki/wikidata/page/48544D4C.ns/555249.txt

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.6 - (show annotations) (download)
Wed Apr 13 02:08:08 2005 UTC (19 years, 5 months ago) by wakaba
Branch: MAIN
CVS Tags: suikawiki3-final, HEAD
Changes since 1.5: +7 -0 lines
File MIME type: text/plain
auto-committed

1 [1] HTML 4 では、[CODE[URI]] という語を
2 [URI] で定義されている意味で使います。と
3 <IW:HTML4:"types.html#type-uri"> に書いてあります。
4 [URI] は HTML 4.01 では [[RFC 2396]]
5 のことです。
6
7 と、これはちょっと困ったことになります。
8 RFC 2396 では [CODE[[[URI]]]] と [CODE[[[URI参照]]]]を区別しているのです。
9 RFC 2396 の4章によれば、 URI 参照から[[素片識別子]]を取り除き、
10 [[相対URI]] は解決して得た[[絶対URI]] こそが
11 [CODE[the URI]] であるというのです。
12 これじゃあ、 HTML 4 でたとえば [CODE(HTMLa)[[[href]]]]
13 属性に相対 URI も素片識別子も使えなくなっちゃう。。。
14
15 [2] URI の紹介のところ <IW:HTML4:"intro/intro.html#h-2.1">
16 では相対 URI も素片識別子も含めて URI と言っています。
17 これが本来の意図であることは明らかです。
18 下手に RFC を参照せずにちゃんと説明しておけば良かったものを。。。
19
20 [3] まあ、 URI 関係の概念と名前は歴史的に泥々してますからあんまり責めちゃ可愛そうではあります。
21
22 ちなみに [[XHTML 1]] はちゃんと [CODE[URI 参照]]と書いていたりします。。。
23
24 [[#comment]]
25
26 * %URI; 型 (HTML 4)
27
28 [4] HTML 4 では、 [CODE(SGML)[%URI;]]
29 型の属性の値は [DFN[URI]] (>>1) です。
30
31 [5] 仕様書:
32 - [[HTML 4]]
33 -- <IW:HTML4:"types.html#type-uri">
34 -- [[厳密DTD]] <IW:HTML4:"sgml/dtd.html#URI">
35 -- [[移行用DTD]] <IW:HTML4:"sgml/loosedtd.html#URI">
36 -- [CITE[B.10 Notes on security]]
37 <IW:HTML4:"appendix/notes.html#notes-security">
38 -[[XHTML 1.0]]
39 -- [CSECTION[A.1.1. XHTML-1.0-Strict]]
40 <http://www.w3.org/TR/2002/REC-xhtml1-20020801/dtds.html#dtdentry_xhtml1-strict.dtd_URI>
41 -- [CSECTION[A.1.2. XHTML-1.0-Transitional]]
42 <http://www.w3.org/TR/2002/REC-xhtml1-20020801/dtds.html#dtdentry_xhtml1-transitional.dtd_URI>
43 -- [CSECTION[A.1.3. XHTML-1.0-Frameset]]
44 <http://www.w3.org/TR/2002/REC-xhtml1-20020801/dtds.html#dtdentry_xhtml1-frameset.dtd_URI>
45 - [[XHTML m12n]]
46 --[CSECTION[4.3. Attribute Types]]
47 <IW:XHTML1m12n:"abstraction.html#dt_URI">
48
49 [[HTML 4.01]] も [[XHTML m12n]] も [[RFC 2396]] を参照しています
50 (>>1) が、
51 [[RFC 1738]] や [[RFC 1808]] も参考文献一覧にしぶとく残っています。
52
53 [6]
54 URI は一般に大文字・小文字を区別します。
55 部分部分は区別しないこともありますが、全体としては区別します。
56
57 [[#comment]]
58
59 ** 非 ASCII 文字
60
61 [7] HTML 4 附属書 B (参考) には、 URI 属性値の非 ASCII
62 文字の取り扱いについての推奨事項が書かれています。
63
64 - HTML 4 [CITE[B.2.1 Non-ASCII characters in URI attribute values]]
65 <IW:HTML4:"appendix/notes.html#non-ascii-chars">
66
67 要点:
68 - URI は非 ASCII 文字を含みませんが、著者は [CODE(SGML)[%URI]]
69 属性値に非 ASCII 文字を含む URI のようなものを指定しちゃいます。
70 -- '''違法'''な例: [SAMP(HTML)[<A href="http://foo.example/ハーコン">...</A>]]
71 [SRC[HTML 4 B.2.1 改]]
72 - UA は非 ASCII 文字を次の通り変換することを[RUBYB[推奨][recommend]]します。
73 -= [[UTF-8]] ([[RFC 2279]]) で表現する
74 -= 問題のバイトを [[URI符号化]]する
75 - こうすれば、 HTML 文書の[[文字符号化]]とは独立な、
76 構文的に合法の URI ([[RFC 1738]] + [[RFC 2141]]) を生成できます。
77 - 古い UA は URI を受信した文書符号化で処理します。
78 古い HTML 文書はこれに依存していて、文書の符号を変換するとおかしくなります。
79 -- 古い文書も扱いたい UA は、合法でない文字を含む URI
80 を受信したら、最初に UTF-8 にしてみて、
81 うまくいかなかった時だけ元の符号化を使ってみるべきです。
82 - [CODE(HTMLa)[[[name]]]] 属性値にも同じ UTF-8 の符号化を適用するべきです。
83
84 [8] 突っ込み:
85 - 非 ASCII 文字のみならず、一部の ASCII 文字と ASCII の非[[印字可能文字]]も
86 URI 逃避符号化しないと、合法な [[URI参照]]にはなりません。
87 - なんで RFC 2141 なんて参照しているんだか。
88 (お前 [[URN]] て言いたいだけちゃうんか?) [[RFC 2396]]
89 を参照するべきですが、修正し忘れでしょうか。
90 - HTML 4 の当時に URI を UTF-8 + URI 逃避符号化というのは極々稀々であったはずです。
91 W3C の i18n な人達としては UTF-8 に誘導したいのでしょうが
92 (後の [[IRI]])、 [Q[older]] とかお茶を濁すのではなく、
93 もうちょっと丁寧に現状を説明するべきだったのではないでしょうか。
94 - [CODE(HTMLa)[name]] 属性云々は意味不明です。[[素片識別子]]として使う時は
95 UTF-8 + URI 逃避符号化せよという意味でしょうか。
96
97 [[#comment]]
98
99 * アンド記号の入った URI
100
101 [9] HTML 4 は、次のように述べています。
102 > [[フォーム]]の[[提出]]で構築される [[URI]] は、
103 [CODE(HTMLe)[[[a]]]] [CODE(HTMLa)[[[href]]]] などでも使うことがあります。
104 運が悪くも [CODE(char)[&]] をフォーム欄の分離子に使うと[[属性値表記]]の中で逃避して
105 [SAMP(SGML)[&amp;]] のように書かなければなりません。
106 > [[HTTP]] 鯖実装者と特に [[CGI]] 実装者は、
107 [CODE(char)[&]] の代わりに [CODE(char)[;]] を使うのにも対応することを推奨します。
108
109 HTML 4 [CITE[B.2.2 Ampersands in URI attribute values]]
110 <IW:HTML4:"appendix/notes.html#ampersands-in-uris"> より要約
111
112 [10] この規定に触発されたのかどうかは知りませんが、
113 最近では [[CGIスクリプト]]の実装で [CODE(char)[&]] と
114 [CODE(char)[;]] を等しく [CODE(ABNF)[[[query]]]]
115 の分離子とみなすのが普通になっているようです。
116
117 (HTTP や CGI の鯖がそう実装しているのは見たことがありません。
118 というか HTTP や CGI の鯖が [CODE(ABNF)[query]]
119 を解釈するのは見たことがありません。。。)
120
121 ただ、 [CODE(HTMLe)[[[form]]]] 要素の属性か何かで
122 [[XForms]] のように [CODE(MIME)[[[application/x-www-form-urlencoded]]]]
123 の分離子を指定する方法を用意しておけば、
124 もっと広がったのではないかと思いますのに残念です。
125 フォームの提出時とアンカーをたどった時とで URI
126 の形が変わってしまうのは、なんとも美しくありません。
127
128 [[#comment]]
129
130 * メモ

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24