* [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]] と同じです。 [[#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]]]] 要素 [[#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