Hippo2000 (2000/7/28)
URIモジュールなのです。
作者はGisle Aasさんです。メールで許可をいただきました。
なおURIモジュールには以下のサブクラスがあります。
| クラス名 | 説 明 |
|---|---|
| URI::data | 直にデータを持っているURI |
| URI::Escape | 安全でない文字のエスケープとアンエスケープ |
| URI::file | ローカル・ファイル名に対応するURI |
| URI::Heuristic | 学習を使ったURIの展開 |
| URI::ldap | LDAP 定型資源位置(Uniform Resource Locators ) |
| URI::URL | 定型資源位置(Uniform Resource Locators) |
| URI::WithBase | そのベースを覚えるURI |
URI - 定型資源識別子(Uniform Resource Identifiers) (絶対そして相対)
$u1 = URI->new("http://www.perl.com";);
$u2 = URI->new("foo", "http");
$u3 = $u2->abs($u1);
$u4 = $u3->clone;
$u5 = URI->new("HTTP://WWW.perl.com:80";)->canonical;
$str = $u->as_string; $str = "$u";
$scheme = $u->scheme; $opaque = $u->opaque; $path = $u->path; $frag = $u->fragment;
$u->scheme("ftp");
$u->host("ftp.perl.com");
$u->path("cpan/");
このモジュールはURIクラスを実装します。このクラスのオブジェクトはRFC 2396で指定されている定型資源識別子("Uniform Resource Identifier references")を表わしています。
定型資源識別子(Uniform Resource Identifier)は抽象的あるいは物理的リソースを識別するための文字のコンパクトな文字列です。Uniform Resource IdentifierはさらにUniform Resource Locator (URL) と Uniform Resource Name (URN)に分類することができます。URLとURNの違いはURIクラス・インターフェースには関係ありません。"URI-reference"はURIで、フラグメント識別子の形式に付けられる追加の情報を持っているかもしれません。
絶対URIリファレンスは3つの部分で構成されます。スキーム(scheme)、スキーム独自部分(scheme specific part)、そしてフラグメント識別子です。URIリファレンスのサブセットは階層的名前空間のための共通の文法を共有します。これらのためスキーム独自部分は、さらにauthority, path そしてquery 要素に分けられます。これらのURIは相対URIリファレンスの形式を取ることもできます。そこではscheme(そして通常はauthorityも)要素がなく、しかしURIリファレンスの文脈により暗黙のうちに決められています。URIリファレンスの書式の3つの形式は、以下のようにまとめることができます:
<scheme>:<scheme-specific-part>#<fragment> <scheme>://<authority><path>?<query>#<fragment> <path>?<query>#<fragment>
URIリファレンスの構成要素はスキームに依存して分割されます。URIクラスは個々の構成要素を取得し、設定するメソッドを提供します。特定のURIオブジェクトのために利用できるメソッドはスキームに依存します。
以下のメソッドが新しいURIオブジェクトを組み立てます:
コンストラクタはスキームを判定し、これを適切なURIサブクラスにマップし、そのクラスの新しいオブジェクトを組み立て、それを返します。
$scheme引数は$strが相対URIのときだけ使われます。それにはスキームを示す単純な文字列、絶対URIリファレンスが入った文字列、絶対URIオブジェクトが指定できます。相対URIに$schemeが指定されなければ、$strは単純に(何もスキーム独自のメソッドが使えない)汎用のURIとして扱われます。
URIリファレンスを組み立てるために使える文字のセットは制限されています(URI::Escapeをご覧ください)。このセットから外れる文字はURIコンストラクタにより自動的にエスケープされます。
このセクションで説明されるメソッドはすべてのURIオブジェクトで利用可能です。
URILの構成要素へのアクセスを提供するメソッドは常にその構成要素の古い値を返します。その構成要素がなければ返される値はundefになります。一般的に構成要素が空(""で表されます)であることと構成要素がない(undefで表されます)には違いがあります。もしアクセスするメソッドに引数が与えられれば、それは対応する構成要素を更新し、その構成要素の古い値を返します。未定義の引数を渡すと、(もし可能であれば)その構成要素を削除します。さまざまなアクセスするメソッドの説明がそのコンポーネントにエスケープされた文字列として渡すのかあるいは、エスケープされない文字列として渡すのかを示します。さらに細かい部分に分割できる構成要素は、通常エスケープされて渡されます。これはエスケープされていないとその意味が変わってしまうからです。
すべてのURIで利用可能な共通メソッドを以下に示します:
文字の大文字/小文字はスキーム名では問題ありません。$uri->schemeで返される値は常に小文字です。もしURIに書いた元の大文字/小文字の状態が欲しいのであれば、代わりに$uri->_schemeメソッドを使うことができます。
効率の理由から、$uriがすでに正規化されている形式であれば、コピーの代わりにそれへのリファレンスが返されます。
2つのURIオブジェクト・リファレンスが同じオブジェクトを示しているかをテストする必要があれば、'=='演算子を使ってください。
以下のメソッドは、階層的名前空間のための一般的/汎用の書式を使うスキームに使うことが出来ます。下記のスキームの説明はこれらのうちのどれかを示します。分からないスキームは一般的な書式をサポートしておらず、そのため以下のメソッドをサポートしていないものと考えられます。
authority 構成要素がインターネット・ホストを示すスキームは汎用メソッドに加えて以下のメソッドを利用することが出来ます。
いくつかのスキームにとっては、コロンで区切られたこれはユーザ名とパスワードになります。この実装は推奨されません。(URIのように)クリアなテキストに埋め込むことは、使うすべての場合においてセキュリティのリスクとなることが証明されています。
$new_host文字列がコロンと数字で終わっていれば、この番号はポートを設定します。
URIで明確にポートが指定されなければ、URIスキームのデフォルトのポートが返されます。デフォルトのポートへの置換をして欲しくないのであれば、$uri->_portメソッドを代りに使うことが出来ます。
以下のURIスキームは特別にサポートされています。これらのうちの1つに所属していないURIオブジェクトでは、共通と汎用メソッドしか使えません。
dataスキームに所属するURI オブジェクトは共通メソッドと、スキーム特有の構成要素にアクセスするための2つの新しいメソッド; $uri->media_typeと$uri->data をサポートします。詳細はURI::data をご覧下さい。
fileスキームに所属するURI オブジェクトは共通と汎用のメソッドをサポートします。さらにfile URIとローカル・ファイル名をマッピングする2つのメソッド; $uri->file、$uri->dir を提供します。詳細はURI::fileをご覧下さい。
ftpスキームに所属するURI オブジェクトは共通、汎用、サーバーのメソッドをサポートします。さらにuserinfoにアクセスするための2つのメソッド; $uri->user、$uri->passwordを提供します。
gopherスキームに所属するURIオブジェクトは共通、汎用、そしてサーバメソッドをサポートします。さらにgopher特有のpath構成要素にアクセスするためのメソッドをサポートします: $uri->gopher_type, $uri->selector, $uri->search, $uri->string.
httpスキームに所属するURI オブジェクトは共通、汎用そしてサーバメソッドをサポートします。
ldapスキームに所属するURI オブジェクトは共通、汎用、サーバメソッドとldapメソッドをサポートします: $uri->dn, $uri->attributes, $uri->scope, $uri->filter, $uri->extensions。詳細はURI::ldap をご覧下さい。
mailtoスキームに所属するURI オブジェクトは共通メソッドと汎用の問い合わせメソッドをサポートします。さらに以下のmailto独自のメソッドもサポートします: $uri->to, $uri->headers.。
newsスキームに所属するURI オブジェクトは共通、汎用そしてサーバメソッドをサポートします。さらにpathにアクセスするための幾つかのメソッドも提供します: $uri->group と $uri->message.
popスキームに所属するURI オブジェクトは共通、汎用、そしてサーバメソッドをサポートします。さらにuserinfo構成要素に空く瀬するための2つのメソッドを提供します: $uri->user と $uri->auth
以下の構成設定変数がクラストそのメソッドがどのように動くかに影響を与えます:
URI->new("http:foo";)->abs("http://host/a/b";)
==> "http:foo";
local $URI::ABS_ALLOW_RELATIVE_SCHEME = 1;
URI->new("http:foo";)->abs("http://host/a/b";)
==> "http:/host/a/foo";
URI->new("../../../foo")->abs("http://host/a/b";)
==> "http://host/../../foo";
local $URI::URL::ABS_REMOTE_LEADING_DOTS = 1;
URI->new("../../../foo")->abs("http://host/a/b";)
==> "http://host/foo";
URI::file, URI::WithBase, URI::Escape, URI::Heuristic
RFC 2396: ``Uniform Resource Identifiers (URI): Generic Syntax'', Berners-Lee, Fielding, Masinter, August 1998.
(原文のまま)
Copyright 1995-1999 Gisle Aas.
Copyright 1995 Martijn Koster.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
(原文のまま)
This module is based on the URI::URL module,
which in turn was (distantly) based on the wwwurl.pl
code in the libwww-perl for perl4 developed by Roy Fielding, as
part of the Arcadia project at the University of California,
Irvine, with contributions from Brooks Cutter.
URI::URL was developed by Gisle Aas, Tim Bunce,
Roy Fielding and Martijn Koster with input from other people on
the libwww-perl mailing list.
URI and related subclasses was developed by Gisle Aas.
ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。