* [CODE(ABNF)[query]] (URI)
[9]
[[URI]] の仕様書で使われている規則 [DFN[[CODE(ABNF)@en[query]]]]
は、 [[URI]] の[[照会]]部分
[WEAK[(最初の [CODE(URI)[?]] より後で、 [CODE(URI)[#]] より前の部分)]]
を表します。
[10] '''定義の変遷''':
= [1] [DEL[[CODE(ABNF)@en[[DFN[query]] := *( [[uchar]] / [[reserved]] ) ;; [[RFC 1808]]]]]]
= [2] [DEL[[CODE(ABNF)@en[[DFN[query]] := *[[uric]] ;; [[RFC 2396]]]]]]
= [6] [CODE(ABNF)@en[[DFN[query]] := *( pchar / "/" / "?" ) ;; [[RFC 3986]]]]
[7] '''RFC 3986 の定義の詳細''':
[[RFC 3986]] の [CODE(ABNF)@en[[[pchar]]]] は
[CODE(ABNF)@en[[[unreserved]] / [[pct-encoded]] / [[sub-delims]] / ":" / "@"]]
です。すなわち [[URI]] で使える[[文字]]のうち、
[CODE(ABNF)["#" / "[" / "]"]] だけが使えません。
定義としては [[RFC 2396]] と同じです。
[15]
vfyl8R xzajaewzoqtt, [url=http://zxfvhrhrtkrb.com/]zxfvhrhrtkrb[/url], [link=http://pikscwinoxvj.com/]pikscwinoxvj[/link], http://dzddrewgdfql.com/
([[hlccshr]] [dclegt@nmihiy.com] [WEAK[2008-01-09 07:48:09 +00:00]])
[[#comment]]
** より具体的な構文
[11]
[[照会]] ([CODE(ABNF)@en[query]])
は非階層的方法で[[資源]]を識別するものとされています
[SRC[[[RFC 3986]] 3.4.]] が、それ以上の構文や意味は各
[[URI scheme]] に任されています。
(そして scheme によっては更に下位の名前空間管理者に任されています。)
しかし、実際の使われ方はおおむねいくつかのパターンに当てはまります。
- [CODE(ABNF)@en[[[param]]]] 方式 >>12
- [CODE(HTMLe)@en[[[isindex]]]] 方式 >>13
[12] '''[CODE(ABNF)@en[param]] 方式''':
名前と値の組を複数個列挙します。最もよく使われるのは名前と値の間に
[CODE(URI)[=]] を挟み、名前・値の組同士の間に [CODE(URI)[&]]
を挟んで [SAMP(URI)@en[name1=value1&name2=value2]]
のようにします。
- 名前と値の間の区切子 (普通は [CODE(URI)[=]])
- 組同士の間の区切子 ([CODE(URI)[&]] と [CODE(URI)[;]]
が多く、 [CODE(URI)[,]], [CODE(URI)[$]], [CODE(URI)[|]] (構文違反),
[CODE(URI)[!]] などが使われることもあります。)
- 使用できる名前の種類や値の種類
- 同じ名前を複数回使っても良いか
- 組の順序は意味を持つか
- [[予約文字]]・[[非予約文字]]・[[百分率符号化]]の使用可否
などにより、幾つかのバリエーションがあります。
主な使用例:
- [CODE(URI)@en[[[http]]:]] + [[HTML]] ([[Web Forms]])
- [CODE(URI)@en[[[mailto]]:]]
[13] '''[CODE(HTMLe)@en[isindex]] 方式''':
複数の値を与える時に [CODE(URI)[+]] で区切ります。
単純な一次元配列です。
主な使用例:
- [[HTML]] の [CODE(HTMLe)@en[[[isindex]]]] 要素
[14]
[CITE@en[Specifying time intervals in URI queries and fragments of time-based Web resources]] ([CODE[2006-05-06 10:39:46 +09:00]] 版)
([[名無しさん]])
[[#comment]]
** メモ
[DEL[
- [3] 2396 によれば、問い合わせでの予約文字は [CODE(regex)[ [;/?:@&=+,$] ]] です。 [CODE(URI)[?]] は問い合わせのそれ以前との分離のための予約。 [CODE(regex)[ [&$;=] ]] は [[HTTP]] などで問合せを[[引数]]的に解釈するのによく使われるもの。残る [CODE(regex)[ [/:@,] ]] はどうでしょうね? これらも [[CGIスクリプト]]なんかが意味を持たせて使っていたりするのかな。
- [4] >>3 [CODE(URI)[+]] が抜けてました。これはよく[[間隔]]の意味で使いますね。で、これを含めた10文字が、丁度 2396 の [CODE(ABNF)[reserved]] でした。つまり、予約文字全部が予約ですと、ただそれだけの意味でした。
- [5] >>3 [CODE(URI)[/]] はへたれ実装対策で escape encode した方が安全というのもあるでしょう。
]DEL]
[8] (>>3-5 の話は間違っていませんし [[RFC 3986]] でも変わっていませんが、
[CODE(ABNF)[[[query]]]] 固有の話としては出てこなくなりました。
このあたりの話については[[予約文字]]や[[百分率符号化]]の項を参照して下さい。)
[[#comment]]
* memo