- [1] ''Another HTML-lint : Explanation''
正しくない [[URI]] の例が幾つかあります。
[[#comment]]
* RFC 2068 の定義
[2] [[RFC 2068]] 3.2 で規定されています。
ただし、 [[HTTP]] で使うための
[[URI]] の定義であって、一般の場面の
URI としての定義ではないことに注意が必要です。
具体的には、本来 URI
では使えないはずの [[national]]
の文字が認められていたりします。
- http_URL = "http:" "//" host [ ":" port ] [ abs_path ]
- host =
-- = uri.[[host]] ;; = hostname / [[IPv4address]]
- port = *DIGIT
- relativeURI = net_path | abs_path | rel_path
- net_path = "//" net_loc [ abs_path ]
- abs_path = "/" rel_path
- rel_path = [ path ] [ ";" params ] [ "?" query ]
- path = fsegment *( "/" segment )
- fsegment = 1*pchar
-- = 1*((OCTET - unsafe) / escaped)
- segment = *pchar
-- = *((OCTET - unsafe) / escaped)
- params = param *( ";" param )
- param = *( pchar | "/" )
-- = *((OCTET - unsafe) / escaped)
- scheme = 1*( ALPHA | DIGIT | "+" | "-" | "." )
- net_loc = *( pchar | ";" | "?" )
-- = *((OCTET - unsafe) / escaped)
- query = *( uchar | reserved )
-- = *(([[OCTET]] - [[unsafe]]) / [[escaped]])
- fragment = *( uchar | reserved )
-- = *((OCTET - unsafe) / escaped)
なんかこの構文破綻してる気がしますが。。。
例えば [CODE(ABNF)[segment = 2068.segment - "/"]]
と定義しておかないと[[欲張り]]過ぎるんじゃ?
- [3] 仕様の詳細は [CODE(WikiPage)[[[HTTP//URI]]]] を参照されたし。
[[#comment]]
* メモ
[4]
> RFC 2616 には HTTPプロトコルに関することが書かれており,3.2.2 http URL に書かれている http URL も,HTTPプロトコルの中での話になります.一般に,HTML のリンクに使用されるものは,純粋に HTTPプロトコルの中で使用される http URL ではなく, scheme が http であるURI References です.
出典: [CITE[Perlメモ]]
(2005年3月現在)
このような解釈は正しく'''ありません'''。 [[IANA]]
の [[URI scheme]] 登録簿に拠れば [CODE(URI)[[[http]]:]]
URI scheme の出典は [[RFC 2616]] であり、 [[IETF]]
的に有効な [CODE(URI)[[[http]]:]] [[URI]] の規定は
([[HTTP]] であれ [[HTML]] であれ、その他の文脈であれ)
[[RFC 2616]] だけです。
更に
> たとえば http://user:passwd@www.din.or.jp/~ohzaki/perl.htm#URI は URI References ですが,user:passwd@ の部分,すなわち,userinfo や,#URI の部分,すなわち, Fragment Identifier は HTTPプロトコルの中で使用される http URL としては不正なものとなります.しかし,HTML のリンクとしては問題ありません.なぜなら,クライアント(ブラウザ)が HTTPプロトコルで通信する際にはそれらを削除しているからです.
と説明がありますが、このような議論は実装がそうであるというだけで、
仕様がそうであるとの根拠はありません。
([[RFC 2396]] の時代に [[URI参照]]の一部分ではあっても [[URI]]
の一部分ではなかった[[素片識別子]]は別として、)
単に仕様と実世界が整合していないというだけであって、
[[HTTP]] で使うか [[HTML]] で使うかは関係ありません。
個々の [[URI scheme]] の規定は [[RFC 2396]] (や新しい [[RFC 3986]])
の一般の規定に優先するので、 [[RFC 2396]] で許されるように見えても
[[RFC 2616]] で許されないものは、すべて認められません。
([CODE(URI)[[[ftp]]:]] [[URI]] に関する部分にも同様の指摘ができます。
ただし [CODE(URI)[[[ftp]]:]] [[URI scheme]] の仕様は未だにいにしえの
[[RFC 1738]] のままで、実装とまったく整合していません。)
[5]
[CITE[What do HTTP URIs Identify? - Design Issues]]
([[名無しさん]])
[6]
[CITE[What do HTTP URIs Identify? - Design Issues]]
([[名無しさん]])
[7]
[CITE[TAG Issues List]]
([[名無しさん]])
[8]
[CITE@EN[URNs, Namespaces and Registries]] ([TIME[2006-09-01 17:51:46 +09:00]] 版)
([[名無しさん]])