附属書C 相対URI参照の解決の例 C. Examples of Resolving Relative URI References

次の十分に定義された基底URIをもつオブジェクト内を考える。

Within an object with a well-defined base URI of

      http://a/b/c/d;p?q

この場合,相対URIはC.1及びC.2で示すとおりに解決される。

the relative URI would be resolved as follows:

C.1 正常な例 C.1. Normal Examples

      g:h           =  g:h
      g             =  http://a/b/c/g
      ./g           =  http://a/b/c/g
      g/            =  http://a/b/c/g/
      /g            =  http://a/g
      //g           =  http://g
      ?y            =  http://a/b/c/?y
      g?y           =  http://a/b/c/g?y
      #s            =  (現在の文書)#s
      g#s           =  http://a/b/c/g#s
      g?y#s         =  http://a/b/c/g?y#s
      ;x            =  http://a/b/c/;x
      g;x           =  http://a/b/c/g;x
      g;x?y#s       =  http://a/b/c/g;x?y#s
      .             =  http://a/b/c/
      ./            =  http://a/b/c/
      ..            =  http://a/b/
      ../           =  http://a/b/
      ../g          =  http://a/b/g
      ../..         =  http://a/
      ../../        =  http://a/
      ../../g       =  http://a/g

C.2 正常ではない例 C.2. Abnormal Examples

次の正常ではない例は通常の使用で発生することはほとんどないが,すべてのURI構文解析器は,それらを矛盾なく解決できることが望ましい。各々の例は,今までと同じ基底を使用している。

Although the following abnormal examples are unlikely to occur in normal practice, all URI parsers should be capable of resolving them consistently. Each example uses the same base as above.

空の参照は,現在の文書の開始を参照する。

An empty reference refers to the start of the current document.

      <>            =  (現在の文書)

構文解析器は,基底URIのパスに存在する階層レベルより多くの相対パス".."が存在する場合を処理するとき,注意しなければならない。

Parsers must be careful in handling the case where there are more relative path ".." segments than there are hierarchical levels in the base URI's path. Note that the ".." syntax cannot be used to change the authority component of a URI.

      ../../../g    =  http://a/../g
      ../../../../g =  http://a/../../g

実際には,実装の中には,相対URIの計算を適用した後で,先行する相対性を表す記号要素("."及び"..")を取り除くものがある。これは,明らかな文書作成者のエラーを補償することが,要求の失敗を許容することよりもよいという理論に基づいている。そこで,これらの二つの参照は,実装によっては,"http://a/g"として解釈される。

In practice, some implementations strip leading relative symbolic elements (".", "..") after applying a relative URI calculation, based on the theory that compensating for obvious author errors is better than allowing the request to fail. Thus, the above two references will be interpreted as "http://a/g" by some implementations.

同様に,構文解析器は,"."及び".."が相対パスの完全な構成要素ではない場合,それらを特殊なものとして取り扱うことを避けなければならない。

Similarly, parsers must avoid treating "." and ".." as special when they are not complete components of a relative path.

      /./g          =  http://a/./g
      /../g         =  http://a/../g
      g.            =  http://a/b/c/g.
      .g            =  http://a/b/c/.g
      g..           =  http://a/b/c/g..
      ..g           =  http://a/b/c/..g

可能性はより少ないが,相対URIが,完全なパス断片である"."及び".."を不必要に又は意味のない形式で使用する場合がある。

Less likely are cases where the relative URI uses unnecessary or nonsensical forms of the "." and ".." complete path segments.

      ./../g        =  http://a/b/g
      ./g/.         =  http://a/b/c/g/
      g/./h         =  http://a/b/c/g/h
      g/../h        =  http://a/b/c/h
      g;x=1/./y     =  http://a/b/c/g;x=1/y
      g;x=1/../y    =  http://a/b/c/y

すべてのクライアント応用は,相対URIを解決する前に,基底URIから問合せ構成要素を取り除く。しかし,応用の中には,相対パスを絶対パスに併合する前に,参照の問合せ及び/又は素片の構成要素を相対パスから分離することに失敗するものがある。このエラーは,ほとんど報告されていない。これは,素片の典型的な使用法では階層("/")文字を決して含まず,問合せ構成要素は相対参照内で通常は使用されないことによる。

All client applications remove the query component from the base URI before resolving relative URI. However, some applications fail to separate the reference's query and/or fragment components from a relative path before merging it with the base path. This error is rarely noticed, since typical usage of a fragment never includes the hierarchy ("/") character, and the query component is not normally used within relative references.

      g?y/./x       =  http://a/b/c/g?y/./x
      g?y/../x      =  http://a/b/c/g?y/../x
      g#s/./x       =  http://a/b/c/g#s/./x
      g#s/../x      =  http://a/b/c/g#s/../x

構文解析器の中には,相対URIの中に方式名が存在することを,それが基底URIの方式と同じ場合には許可するものがある。部分URIの先行する規定[RFC1630]における抜け道的な互換性と考えられる。その使用は,避けることが望ましい。

Some parsers allow the scheme name to be present in a relative URI if it is the same as the base URI scheme. This is considered to be a loophole in prior specifications of partial URI [RFC1630]. Its use should be avoided.

      http:g        =  http:g           ; 妥当性検証を行う構文解析器の場合
                    |  http://a/b/c/g   ; 後方互換性のための場合
http:g = http:g ; for validating parsers | http://a/b/c/g ; for backwards compatibility