|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object | +--java.net.URI
URI (Uniform Resource Identifier) 参照を表します。
このクラスのインスタンスは、「RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax」で定義され、「RFC 2732: Format for Literal IPv6 Addresses in URLs」で修正され、下記で説明する部分が変更された URI 参照を表します。このクラスは、コンポーネントからまたは文字列形式を解析して URI インスタンスを作成するためのコンストラクタ、インスタンスの各種コンポーネントにアクセスするためのメソッド、および URI インスタンスを正規化、解決、相対化するためのメソッドを提供します。このクラスのインスタンスは変更できません。
[スキーマ:]スキーマ固有部分[#フラグメント]ここで、角括弧 [...] はオプションのコンポーネントを示し、: と # はその文字自体を表します。
「絶対」URI はスキーマを指定し、絶対でない URI は「相対」と呼ばれます。また、URI は「不透明」であるか「階層的」であるかによって分類されます。
「不透明」URI は、スキーマ固有部分がスラッシュ (/) で始まらない絶対 URI です。不透明 URI はそれ以上解析されません。不透明 URI の例を次に示します。
mailto:java-net@java.sun.com news:comp.lang.java urn:isbn:096139210x
「階層」URI は、スキーマ固有部分がスラッシュで始まる絶対 URI、または相対 URI (スキーマを指定しない URI) です。階層 URI の例を次に示します。
http://java.sun.com/j2se/1.3/
docs/guide/collections/designfaq.html#28 ../../../demo/jfc/SwingSet2/src/SwingSet2.java file:///‾/calendar
階層 URI は、構文に従ってさらに解析されます。
[スキーマ:][//権限][パス][?クエリー][#フラグメント]ここで、:、/、?、および # はその文字自体を表します。階層 URI のスキーマ固有部分は、スキーマとフラグメントコンポーネントの間の文字で構成されます。
階層 URI の権限コンポーネントが指定されている場合、その権限コンポーネントは「サーバベース」または「レジストリベース」です。サーバベース権限は、よく知られている構文に従って解析されます。
[ユーザ情報@]ホスト[:ポート]ここで、@ と : はその文字自体を表します。現在使用されている URI スキーマのほとんどはサーバベースです。このように解析されない権限コンポーネントは、レジストリベースと見なされます。
階層 URI のパスコンポーネントは、スラッシュ (/) で始まる場合は絶対と呼ばれ、そうでない場合は相対と呼ばれます。絶対である階層 URI または権限を指定する階層 URI のパスは常に絶対です。
URI インスタンスには、全部で次の 9 つのコンポーネントがあります。
指定されたインスタンスでは、どの特定のコンポーネントも「未定義」か「定義済み」であり、個別の型の値を持ちます。未定義の文字列コンポーネントは null で表され、定義済みの整数コンポーネントは -1 で表されます。文字列コンポーネントは、値として空の文字列を持つよう定義できます。これは、そのコンポーネントが未定義であることと同等ではありません。
コンポーネント タイプ スキーマ String スキーマ固有部分 String 権限 String ユーザ情報 String ホスト String ポート int パス String クエリー String フラグメント String
特定のコンポーネントがインスタンスで定義されるかされないかは、表現される URI のタイプにより異なります。絶対 URI にはスキーマコンポーネントがあります。不透明 URI にはスキーマ、スキーマ固有部分、およびおそらくフラグメントがありますが、その他のコンポーネントはありません。階層 URI には、常にパス (ただし空の場合あり) およびスキーマ固有部分 (少なくともパスを含む) があり、さらにその他のコンポーネントのいずれかがある場合があります。権限コンポーネントが存在していてサーバベースである場合、ホストコンポーネントは定義されます。ユーザ情報とポートコンポーネントは定義される場合もあります。
「正規化」は、階層 URI のパスコンポーネントから不要な「.」および「..」セグメントを削除するプロセスです。各「.」セグメントは単に削除されます。「..」セグメントは、「..」以外のセグメントが先行する場合にだけ削除されます。正規化は不透明 URI には影響しません。
「解決」は、ある URI を別の「ベース」URI に対して解決するプロセスです。結果の URI は、RFC 2396 で指定されているように、両方の URI のコンポーネントから構築され、元の URI で指定されていないコンポーネントのためにベース URI からコンポーネントを取り込みます。階層 URI の場合、元のパスはベースのパスに対して解決されて正規化されます。たとえば、次のようになります。
docs/guide/collections/designfaq.html#28 (1)をベース URI http://java.sun.com/j2se/1.3/ に対して解決すると、結果の URI は次のようになります。
http://java.sun.com/j2se/1.3/docs/guide/collections/designfaq.html#28相対 URI
../../../demo/jfc/SwingSet2/src/SwingSet2.java (2)をこの結果に対して解決すると、次のようになります。
http://java.sun.com/j2se/1.3/demo/jfc/SwingSet2/src/SwingSet2.java絶対と相対の両方の URI の解決、および階層 URI の場合は絶対と相対の両方のパスの解決がサポートされます。URI file:///‾calendar は絶対なので、これをほかの任意の URI に対して解決すると、元の URI が生成されるだけです。上記の相対 URI (2) を相対ベース URI (1) に対して解決すると、正規化されていても相対のままの URI が生成されます。
demo/jfc/SwingSet2/src/SwingSet2.java
最後に、「相対化」は解決の逆変換です。任意の 2 つの正規化された URI、u および v の場合、
u.relativize(u.resolve(v)).equals(v) およびこの操作は、可能であればどこででも、ドキュメントのベース URI に対して相対的でなければならない URI を含むドキュメントを構築する場合に便利です。たとえば、次の URI
u.resolve(u.relativize(v)).equals(v) になります。
http://java.sun.com/j2se/1.3/docs/guide/index.htmlを次のベース URI に対して相対化すると、
http://java.sun.com/j2se/1.3相対 URI docs/guide/index.html が生成されます。
英字 A から Z、および a から z までの US-ASCII 英文字 数字 0 から 9 までの US-ASCII 10 進数字 英数字 すべての「英字」および「数字」文字 未予約 すべての「英数字」文字、および文字列 _-!.‾'()* 内の文字 句読 文字列 ,;:$&+= 内の文字 予約 すべての「句読」文字、および文字列 "?/[]@" 内の文字 エスケープ エスケープ octet。つまり、パーセント文字 (%) とそれに続く 2 桁の 16 進数 (0 - 9、A - F、および a - f) で構成される三重項 その他 US-ASCII 文字セットに含まれておらず、制御文字 ( Character.isISOControl
メッソドによる) でなく、空白文字 (Character.isSpaceChar
メソッドによる) でない Unicode 文字 (US-ASCII に限定されている RFC 2396 を変更したもの)
すべての不正な文字は、単に符号化して「引用符で囲」まれる。たとえば空白文字は、%20 で置き換えて引用符で囲まれる。UTF-8 には US-ASCII が含まれるので、US-ASCII 文字の場合、この変換で RFC 2396 で要求される効果が正確に得られる
エスケープ octet のシーケンスは、そのシーケンスが UTF-8 文字セット内で表す文字のシーケンスで置き換えられることにより、「復号化」される。UTF-8 には US-ASCII が含まれるので、復号化には、引用符で囲まれたすべての US-ASCII 文字の引用符を解除する効果と、符号化された非 US-ASCII 文字を復号化する効果がある。エスケープ octet を復号化するときに 復号化エラーが発生した場合、不正な octet は Unicode の置換文字 \uFFFD で置き換えられる URI と URL の概念上の区別は、このクラスと このクラスのインスタンスは、RFC 2396 で定義されている構文的な意味での URI 参照を表します。URI は絶対でも相対でもかまいません。URI 文字列は一般構文に従って解析され、指定されたスキーマがあっても考慮しません。ホストの参照はあっても実行されず、スキーマ依存のストリームハンドラは構築されません。同等性、ハッシュ、および比較はインスタンスの文字内容によって厳密に定義されます。つまり、URI インスタンスは、比較、正規化、解決、および相対化の構文的な、スキーマに依存しない操作をサポートする構造化文字列にすぎません。
対照的に、
では、引数内の不正な文字を引用符で囲む必要があり、存在するすべてのエスケープ octet と「その他」の文字を保存する single-argument constructor
は、不正な文字が存在するコンポーネントの要求により不正な文字を引用符で囲む。パーセント文字 (%) は常にこれらのコンストラクタにより囲まれる。「その他」の文字は保存される multi-argument constructors
getRawUserInfo
、getRawPath
, getRawQuery
、getRawFragment
, getRawAuthority
、および getRawSchemeSpecificPart
メソッドは、対応するコンポーネントの値をそのままの形式で返し、エスケープ octet を解釈しない。これらのメソッドから返される文字列には、エスケープ octet と「その他」の文字の両方が含まれていることがあり、不正な文字は含まれない getUserInfo
、getPath
、getQuery
、getFragment
、getAuthority
、および getSchemeSpecificPart
メソッドは、対応するコンポーネント内のすべてのエスケープ octet を復号化する。これらのメソッドから返される文字列には、「その他」の文字と不正な文字の両方が含まれていることがあり、エスケープ octet は含まれない toString
メソッドは、すべての必要な引用符を持つ URI 文字列を返すが、「その他」の文字が含まれる場合がある toASCIIString
メソッドは、「その他」の文字を含まない、完全に引用符で囲まれて符号化された URI 文字列を返す アイデンティティ
任意の URI u の場合は、常に次のようになります。
new URI(u.toString()).equals(u)
空の権限の前に 2 つのスラッシュがあったり (file:///tmp/ など)、ホスト名のあとにコロンがあってもポートが指定されていなかったり (http://java.sun.com: など) するような冗長構文を含まず、引用符で囲む必要のある文字以外の文字を符号化しない URI u の場合は、次のようになります。
new URI(u.getScheme(),
すべての場合において
u.getSchemeSpecificPart(),
u.getFragment())
.equals(u)
new URI(u.getScheme(),
u が階層の場合
u.getUserInfo(), u.getAuthority(),
u.getPath(), u.getQuery(),
u.getFragment())
.equals(u)
new URI(u.getScheme(),
u が階層で、権限またはサーバベースの権限を持たない場合
u.getUserInfo(), u.getHost(), u.getPort(),
u.getPath(), u.getQuery(),
u.getFragment())
.equals(u)
URI、URL、および URN
URI は Uniform Resource Identifier であり、URL は Uniform Resource Locator です。したがって、抽象的に言えば、すべての URL は URI ですが、すべての URI が URL であるとはかぎりません。これは、URI の別のサブカテゴリである URN (Uniform Resource Names) があるためです。URN はリソースに名前を付けますが、その検索方法は指定しません。前に示した mailto、news、および isbn の各 URI は、URN の例です。
URL
クラスの間の相違に反映されています。
URL
クラスのインスタンスは、URL の構文的コンポーネント、および URL が記述するリソースへのアクセスに必要な情報の一部を表します。URL は絶対である必要があります。つまり、常にスキーマを指定する必要があります。URL 文字列はそのスキーマに従って解析されます。ストリームハンドラは常に URL 用に確立され、事実、ハンドラが使用できないスキーマの URL インスタンスを作成することはできません。同等性とハッシュは、もしあれば、スキーマとホストのインターネットアドレスの両方に依存します。比較は定義されません。つまり、URL は、解決の構文的操作と、ホストを参照し、指定されたリソースへの接続を開くネットワーク入出力操作をサポートする構造化文字列です。
「RFC 2373: IPv6 Addressing Architecture」、
「RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax」、
「RFC 2732: Format for Literal IPv6 Addresses in URLs」、
URISyntaxException,
直列化された形式
コンストラクタの概要 | |
URI(String str)
指定された文字列を解析して URI を構築します。 |
|
URI(String scheme,
String ssp,
String fragment)
指定されたコンポーネントから URI を構築します。 |
|
URI(String scheme,
String userInfo,
String host,
int port,
String path,
String query,
String fragment)
指定されたコンポーネントから階層 URI を構築します。 |
|
URI(String scheme,
String host,
String path,
String fragment)
指定されたコンポーネントから階層 URI を構築します。 |
|
URI(String scheme,
String authority,
String path,
String query,
String fragment)
指定されたコンポーネントから階層 URI を構築します。 |
メソッドの概要 | |
int |
compareTo(Object ob)
この URI を別のオブジェクトと比較します。 |
static URI |
create(String str)
指定された文字列を解析して URI を作成します。 |
boolean |
equals(Object ob)
この URI が別のオブジェクトと等しいかどうかを判定します。 |
String |
getAuthority()
この URI の復号化された権限コンポーネントを返します。 |
String |
getFragment()
この URI の復号化されたフラグメントコンポーネントを返します。 |
String |
getHost()
この URI のホストコンポーネントを返します。 |
String |
getPath()
この URI の復号化されたパスコンポーネントを返します。 |
int |
getPort()
この URI のポート番号を返します。 |
String |
getQuery()
この URI の復号化されたクエリーコンポーネントを返します。 |
String |
getRawAuthority()
この URI のそのままの権限コンポーネントを返します。 |
String |
getRawFragment()
この URI のそのままのフラグメントコンポーネントを返します。 |
String |
getRawPath()
この URI のそのままのパスコンポーネントを返します。 |
String |
getRawQuery()
この URI のそのままのクエリーコンポーネントを返します。 |
String |
getRawSchemeSpecificPart()
この URI のスキーマ固有部分を返します。 |
String |
getRawUserInfo()
この URI のそのままのユーザ情報コンポーネントを返します。 |
String |
getScheme()
この URI のスキーマコンポーネントを返します。 |
String |
getSchemeSpecificPart()
この URI の復号化されたスキーマ固有部分を返します。 |
String |
getUserInfo()
この URI の復号化されたユーザ情報コンポーネントを返します。 |
int |
hashCode()
この URI のハッシュコード値を返します。 |
boolean |
isAbsolute()
この URI が絶対かどうかを通知します。 |
boolean |
isOpaque()
この URI が不透明かどうかを通知します。 |
URI |
normalize()
この URI のパスを正規化します。 |
URI |
parseServerAuthority()
この URI の権限コンポーネント (定義されている場合) からユーザ情報、ホスト、およびポートの各コンポーネントへの解析を試みます。 |
URI |
relativize(URI uri)
指定された URI をこの URI に対して相対化します。 |
URI |
resolve(String str)
指定された文字列を解析し、その後その文字列をこの URI に対して解決して、新しい URI を構築します。 |
URI |
resolve(URI uri)
指定された URI をこの URI に対して解決します。 |
String |
toASCIIString()
この URI のコンテンツを US-ASCII 文字列として返します。 |
String |
toString()
この URI のコンテンツを文字列として返します。 |
URL |
toURL()
この URI から URL を構築します。 |
クラス java.lang.Object から継承したメソッド |
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
コンストラクタの詳細 |
public URI(String str) throws URISyntaxException
このコンストラクタは、「RFC 2396, Appendix A」の文法で厳密に指定された文字列を解析します。ただし、次の点が異なります。
空の権限コンポーネントは、そのあとに空でないパス、クエリーコンポーネント、またはフラグメントコンポーネントが続くかぎり許可されます。これにより、file:///foo/bar などの URI を解析できます。この URI は文法的には許可されませんが、RFC 2396 の意図に合致します。権限コンポーネントが空の場合、ユーザ情報、ホスト、およびポートの各コンポーネントは未定義です。
空の相対パスは許可されます。これは文法的には許可されませんが、RFC 2396 の意図に合致します。この変更の主な結果は、#foo などのスタンドアロンのフラグメントが空のパスおよび指定されたフラグメントを持つ相対 URI として解析され、ベース URI に対して有効に解決できる点です。
ホストコンポーネントの IPv4 アドレスは、「RFC 2732」で指定されているとおりに厳密に解析されます。ドットで 4 つに区分されたアドレスの各要素には 3 桁を超えない 10 進数が含まれている必要があります。さらに、各要素の値は 255 を超えてはならないという制約があります。
IPv6 アドレスがホストコンポーネントで許可されます。IPv6 アドレスは、「RFC 2732」で指定されているように、角括弧 ([ および ]) で囲む必要があります。IPv6 アドレス自体は、「RFC 2373」に従って解析する必要があります。さらに、IPv6 アドレスには、16 バイトを超えないアドレス情報で記述するという制約があります。制約は RFC 2373 に暗に示されていますが、文法では表現できません。
「その他」のカテゴリ内の文字は、RFC 2396 で「エスケープ」octet を許可しているところ、つまりユーザ情報、パス、クエリー、およびフラグメントの各コンポーネントと、権限がレジストリベースの場合は権限コンポーネントで許可されます。これにより、URI に US-ASCII 文字セット以外の Unicode 文字を含めることができます。
str
- URI に解析される文字列
NullPointerException
- str が null の場合
URISyntaxException
- 上記の変更で追加されたように、指定された文字列が RFC 2396 に違反している場合public URI(String scheme, String userInfo, String host, int port, String path, String query, String fragment) throws URISyntaxException
スキーマが指定され、さらにパスも指定される場合は、パスは空かスラッシュ (/) で始まる必要があります。そうでない場合、新しい URI のコンポーネントは、対応するパラメータに null を渡すか、port パラメータの場合は -1 を渡して、未定義のままになることがあります。
最初にこのコンストラクタは、「RFC 2396, section 5.2, step 7」で指定されている規則に従って、指定されたコンポーネントから URI 文字列を構築します。
最初は、結果の文字列は空です。
スキーマが指定される場合、そのスキーマは結果に追加され、コロン (:) が続きます。
ユーザ情報、ホスト、またはポートが指定される場合は、文字列 // が追加されます。
ユーザ情報が指定される場合、そのユーザ情報が追加されて、単価記号 (@) が続きます。「未予約」、「句読」、「エスケープ」、または「その他」のカテゴリにない文字はすべて 引用符で囲まれます。
ホストが指定される場合、そのホストが追加されます。そのホストがリテラル IPv6 アドレスで、角括弧 ([ および ]) で囲まれていない場合、角括弧が追加されます。
ポート番号が指定される場合、コロン (:) が追加され、10 進数のポート番号が続きます。
パスが指定される場合、そのパスが追加されます。「未予約」、「句読」、「エスケープ」、または「その他」のカテゴリになくて、スラッシュ (/) または単価記号 (@) に等しくない文字はすべて引用符で囲まれます。
クエリーが指定される場合、疑問符 (?) が追加されて、クエリーが続きます。有効な URI 文字でない文字はすべて引用符で囲まれます。
最後に、フラグメントが指定される場合、ハッシュ記号 (#) が追加されて、フラグメントが続きます。有効な URI 文字でない文字はすべて引用符で囲まれます。
結果の URI 文字列は、結果に対して URI(String)
コンストラクタを呼び出し、次に parseServerAuthority()
メソッドを呼び出したかのようにして、解析されます。これにより、URISyntaxException
がスローされる場合があります。
scheme
- スキーマ名userInfo
- ユーザ名と認証情報host
- ホスト名port
- ポート番号path
- パスquery
- クエリーfragment
- フラグメント
URISyntaxException
- スキーマとパスの両方が指定されているがパスが相対の場合、指定されたコンポーネントから構築された URI 文字列が RFC 2396 に違反する場合、または文字列の権限コンポーネントが存在するがサーバベースの権限として解析できない場合public URI(String scheme, String authority, String path, String query, String fragment) throws URISyntaxException
スキーマが指定され、さらにパスも指定される場合は、パスは空かスラッシュ (/) で始まる必要があります。そうでない場合、新しい URI のコンポーネントは、対応するパラメータに null を渡して未定義のままになることがあります。
最初にこのコンストラクタは、「RFC 2396, section 5.2, step 7」で指定されている規則に従って、指定されたコンポーネントから URI 文字列を構築します。
最初は、結果の文字列は空です。
スキーマが指定される場合、そのスキーマは結果に追加され、コロン (:) が続きます。
権限が指定される場合、文字列 // が追加されて、権限が続きます。権限にリテラル IPv6 アドレスが含まれる場合、そのアドレスは角括弧 ([ および ]) で囲む必要があります。「未予約」、「句読」、「エスケープ」、または「その他」のカテゴリになくて、単価記号 (@) に等しくない文字はすべて 引用符で囲まれます。
パスが指定される場合、そのパスが追加されます。「未予約」、「句読」、「エスケープ」、または「その他」のカテゴリになくて、スラッシュ (/) または単価記号 (@) に等しくない文字はすべて引用符で囲まれます。
クエリーが指定される場合、疑問符 (?) が追加されて、クエリーが続きます。有効な URI 文字でない文字はすべて引用符で囲まれます。
最後に、フラグメントが指定される場合、ハッシュ記号 (#) が追加されて、フラグメントが続きます。有効な URI 文字でない文字はすべて引用符で囲まれます。
結果の URI 文字列は、結果に対して URI(String)
コンストラクタを呼び出し、次に parseServerAuthority()
メソッドを呼び出したかのようにして、解析されます。これにより、URISyntaxException
がスローされる場合があります。
scheme
- スキーマ名authority
- 権限path
- パスquery
- クエリーfragment
- フラグメント
URISyntaxException
- スキーマとパスの両方が指定されているがパスが相対の場合、指定されたコンポーネントから構築された URI 文字列が RFC 2396 に違反する場合、または文字列の権限コンポーネントが存在するがサーバベースの権限として解析できない場合public URI(String scheme, String host, String path, String fragment) throws URISyntaxException
コンポーネントは、null を渡して未定義のままになることがあります。
この簡易コンストラクタは、次のように 7 つの引数のコンストラクタを呼び出すかのように動作します。
new URI
(scheme, null, host, -1, path, null, fragment);
scheme
- スキーマ名host
- ホスト名path
- パスfragment
- フラグメント
URISyntaxException
- 指定されたコンポーネントから構築した URI 文字列が RFC 2396 に違反する場合public URI(String scheme, String ssp, String fragment) throws URISyntaxException
コンポーネントは、null を渡して未定義のままになることがあります。
最初にこのコンストラクタは、指定されたコンポーネントを使用して文字列形式で URI を構築します。次のようになります。
最初は、結果の文字列は空です。
スキーマが指定される場合、そのスキーマは結果に追加され、コロン (:) が続きます。
スキーマ固有部分が指定される場合、そのスキーマ固有部分が追加されます。有効な URI 文字でない文字はすべて引用符で囲まれます。
最後に、フラグメントが指定される場合、ハッシュ記号 (#) が文字列に追加されて、フラグメントが続きます。有効な URI 文字でない文字はすべて引用符で囲まれます。
結果の URI 文字列は、新しい URI インスタンスを作成するために、URI(String)
コンストラクタを呼び出したかのようにして解析されます。これにより、URISyntaxException
がスローされる場合があります。
scheme
- スキーマ名ssp
- スキーマ固有部分fragment
- フラグメント
URISyntaxException
- 指定されたコンポーネントから構築した URI 文字列が RFC 2396 に違反する場合メソッドの詳細 |
public static URI create(String str)
この簡易ファクトリメソッドは、URI(String)
コンストラクタを呼び出したかのようにして動作します。コンストラクタからスローされる URISyntaxException
はすべてキャッチされて新しい IllegalArgumentException
オブジェクトにラップされ、その後スローされます。
このメソッドは、指定された文字列が有効な URI であることが既知の場合 (たとえば、プログラム内で宣言される URI 定数) に使用するために提供されています。したがって、文字列がこのように解析されないとプログラムエラーと見なされます。URISyntaxException
を直接スローするコンストラクタは、URI がユーザ入力やエラーが発生しやすいその他のソースから構築される場合に使用します。
str
- URI に解析される文字列
NullPointerException
- str が null の場合
IllegalArgumentException
- 指定された文字列が RFC 2396 に違反する場合public URI parseServerAuthority() throws URISyntaxException
この URI の権限コンポーネントがすでにサーバベースであると認識されている場合は、すでにユーザ情報、ホスト、およびポートの各コンポーネントに解析されています。この場合、またはこの URI に権限コンポーネントがない場合、このメソッドはこの URI を返すだけです。
そうでない場合、このメソッドは権限コンポーネントからユーザ情報、ホスト、およびポートの各コンポーネントへの解析をもう一度試み、権限コンポーネントがそのように解析できなかった理由を説明する例外をスローします。
このメソッドは、「RFC 2396」で指定されている一般 URI 構文が無効なサーバベース権限と有効なレジストリベース権限を必ずしも区別できないために用意されています。したがって、サーバベース権限の一部のインスタンスをレジストリベース権限のインスタンスとして扱う必要があります。たとえば、URI 文字列 //foo:bar などの権限コンポーネントは、有効なサーバベース権限ではありませんが、レジストリベース権限としては有効です。
URN または URL であることが既知の URI を使用するような多くの一般的な状況では、使用される階層 URI は常にサーバベースです。したがって、そのように解析するか、エラーとして扱う必要があります。この場合、次のような文は、
URI u = new URI(str).parseServerAuthority();
u が適切なユーザ情報、ホスト、およびポートの各コンポーネントのあるサーバベース権限を持つ URI (権限コンポーネントを持つ場合) を常に参照するようにするために使用できます。また、このメソッドを呼び出すと、権限がそのように解析できなかった場合に、スローされる例外に基づいて適切な診断メッセージを発行するようにできます。
URISyntaxException
- この URI の権限コンポーネントが指定されているが、RFC 2396 に従ってサーバベース権限として解析できない場合public URI normalize()
この URI が不透明である場合、またはそのパスがすでに正規形式である場合は、この URI が返されます。そうでない場合は、この URI と同じ新しい URI が構築されます。ただし、そのパスが「RFC 2396, section 5.2, step 6, sub-steps c through f」に適合する方法でこの URI のパスを正規化して求められる場合を除きます。次のようになります。
すべての . セグメントが削除されます。
.. セグメントの前に.. でないセグメントがある場合、これらのセグメントは両方とも削除されます。このステップは該当するものがなくなるまで繰り返されます。
パスが相対で、最初のセグメントにコロン (:) が含まれる場合、. セグメントが前に追加されます。これにより、a:b/c/d などのパスを持つ相対 URI があとで a のスキーマおよび b/c/d のスキーマ固有部分を使用して不透明 URI として再度解析されないようにします (RFC 2396 を変更したもの)。
正規化されたパスは、削除を可能にする .. でない先行のセグメントが不十分だった場合、1 つ以上の .. セグメントで始まります。正規化されたパスは、上記のステップ 3 で挿入さた場合、. セグメントで始まります。そうでない場合、正規化されたパスには . または .. セグメントは含まれません。
public URI resolve(URI uri)
指定された URI がすでに絶対である場合、またはこの URI が不透明である場合は、指定された URI が返されます。
指定された URI のフラグメントコンポーネントが定義され、そのパスコンポーネントが空で、そのスキーマ、権限、およびクエリーの各コンポーネントが未定義の場合は、指定されたフラグメントを持つがほかのすべてのコンポーネントがこの URI のコンポーネントと等しい URI が返されます。これにより、#foo などのスタンドアロンフラグメント参照を表す URI をベース URI に対して有効に解決することができます。
そうでない場合、このメソッドは、「RFC 2396, section 5.2」に適合する方法で新しい階層 URI を構築します。次のようになります。 この URI のスキームと指定された URI のクエリーおよびフラグメントコンポーネントを使用して、新しい URI が構築されます。 指定された URI に権限コンポーネントがある場合、新しい URI の権限とパスは指定された URI から取られます。 そうでない場合、新しい URI の権限コンポーネントがこの URI からコピーされ、そのパスは次のようにして求められます。 指定された URI のパスが絶対の場合、新しい URI のパスは指定された URI から取られます。 そうでない場合、指定された URI のパスは相対で、新しい URI のパスは指定された URI のパスをこの URI のパスに対して解決して求められます。これは、この URI のパスの最後のセグメント以外のすべてのセグメント (存在する場合) を指定された URI のパスと連結し、その結果を このメソッドの結果は、この URI が絶対の場合、または指定された URI が絶対の場合にだけ、絶対になります。
normalize
メソッドを呼び出したかのようにして正規化することによって行われます。
uri
- この URI に対して解決される URI
NullPointerException
- uri が null の場合
public URI resolve(String str)
この簡易メソッドは、このメソッドの呼び出しが式 resolve
(new create
(str)) の評価と同じであるかのように動作します。
str
- URI に解析される文字列
NullPointerException
- str が null の場合
IllegalArgumentException
- 指定された文字列が RFC 2396 に違反する場合public URI relativize(URI uri)
指定された URI のこの URI に対する相対化は、次のようにして求められます。
この URI または指定された URI が不透明である場合、2 つの URI のスキーマと権限コンポーネントが同じでない場合、またはこの URI のパスが指定された URI のパスの接頭辞でない場合は、指定されたURI が返されます。
そうでない場合、指定された URI から取られたクエリーおよびフラグメントコンポーネントと、指定された URI のパスの先頭からこの URI のパスを削除して求めたパスコンポーネントを使用して、新しい相対階層 URI が構築されます。
uri
- この URI に対して相対化される URI
NullPointerException
- uri が null の場合public URL toURL() throws MalformedURLException
この簡易メソッドは、最初にこの URI が絶対であることを確認してから、このメソッドの呼び出しが式 new URL(this.toString()) の評価と同じであるかのように動作します。
IllegalArgumentException
- この URL が絶対でない場合
MalformedURLException
- URL のプロトコルハンドラが発見できなかった場合、または URL の構築時にほかのエラーが発生した場合public String getScheme()
URI のスキーマコンポーネントには (定義されている場合)、「英数字」カテゴリおよび文字列 -.+ の文字だけが含まれます。スキーマは常に「英字」で始まります。
URI のスキーマコンポーネントにエスケープ octet を含めることはできないので、このメソッドは復号化を実行しません。
public boolean isAbsolute()
URI が絶対であるのは、その URI にスキーマコンポーネントがある場合だけです。
public boolean isOpaque()
不透明 URI は、スキーマコンポーネント以外では解析されません。不透明 URI の残りの部分は、getSchemeSpecificPart
メソッドにより取得できます。ほかのすべてのコンポーネントは未定義です。
public String getRawSchemeSpecificPart()
URI のスキーマ固有部分には、有効な URI 文字だけが含まれます。
public String getSchemeSpecificPart()
このメソッドから返された文字列は、getRawSchemeSpecificPart
メソッドから返された文字列と同じです。ただし、エスケープ octet のシーケンスがすべて復号化される場合を除きます。
public String getRawAuthority()
URI の権限コンポーネントには (定義されている場合)、単価記号 (@) と、「未予約」、「句読」、「エスケープ」、および「その他」のカテゴリの文字だけが含まれます。権限がサーバベースの場合は、さらに有効なユーザ情報、ホスト、ポートの各コンポーネントが必要です。
public String getAuthority()
このメソッドから返された文字列は、getRawAuthority
メソッドから返された文字列と同じです。ただし、エスケープ octet のシーケンスがすべて復号化される場合を除きます。
public String getRawUserInfo()
URI のユーザ情報コンポーネントには (定義されている場合)、「未予約」、「句読」、「エスケープ」、および「その他」のカテゴリの文字だけが含まれます。
public String getUserInfo()
このメソッドから返された文字列は、getRawUserInfo
メソッドから返された文字列と同じです。ただし、エスケープ octet のシーケンスがすべて復号化される場合を除きます。
public String getHost()
URI のホストコンポーネント (定義されている場合) の形式は、次のいずれかです。
ピリオド (.) で区分された 1 つ以上の「ラベル」で構成されるドメイン名。任意で、ピリオドが続く。各ラベルは、「英数字」文字とハイフン (-) で構成されます。ただし、ハイフンはラベルの最初または最後の文字としては使用できません。ドメイン名の最後のラベルだけは、「英字」文字で始まります。
数字+.数字+.数字+.数字+ の形式の、ドットで 4 つに区分された IPv4 アドレス。ここで、数字は 3 文字以内で、その値は 255 を超えません。
IPv6 アドレスは、角括弧 ([ および ]) で囲まれ、16 進数、コロン (:)、およびおそらく埋め込まれた IPv4 アドレスで構成されます。IPv6 アドレスの完全な構文は、「RFC 2373: IPv6 Addressing Architecture」で指定されています。
public int getPort()
URI のポートコンポーネントは (定義されている場合)、負でない整数です。
public String getRawPath()
URI のパスコンポーネントには (定義されている場合)、スラッシュ (/)、単価記号 (@) と、「未予約」、「句読」、「エスケープ」、および「その他」のカテゴリの文字だけが含まれます。
public String getPath()
このメソッドから返された文字列は、getRawPath
メソッドから返された文字列と同じです。ただし、エスケープ octet のシーケンスがすべて復号化される場合を除きます。
public String getRawQuery()
URI のクエリーコンポーネントには (定義されている場合)、有効な URI 文字だけが含まれます。
public String getQuery()
このメソッドから返された文字列は、getRawQuery
メソッドから返された文字列と同じです。ただし、エスケープ octet のシーケンスがすべて復号化される場合を除きます。
public String getRawFragment()
URI のフラグメントコンポーネントには (定義されている場合)、有効な URI 文字だけが含まれます。
public String getFragment()
このメソッドから返された文字列は、getRawFragment
メソッドから返された文字列と同じです。ただし、エスケープ octet のシーケンスがすべて復号化される場合を除きます。
public boolean equals(Object ob)
指定されたオブジェクトが URI でない場合、このメソッドは直ちに false を返します。
等しいと見なされる 2 つの URI は、両方とも不透明か、両方とも階層である必要があります。それらのスキーマは両方とも未定義か、大文字小文字に関係なく等しい必要があります。それらのフラグメントについても同様です。
等しいと見なされる 2 つの不透明 URI の場合、それらのスキーマ固有部分は等しい必要があります。
等しいと見なされる 2 つの階層 URI の場合、それらのパスは等しく、そられのクエリーは両方とも未定義か、等しくなければなりません。それらの権限は両方とも未定義か、両方ともレジストリベースか、あるいは両方ともサーバベースでなければなりません。それらの権限が定義されていてレジストリベースの場合、それらの権限は等しくなければなりません。それらの権限が定義されていてサーバベースの場合、それらのホストは大文字小文字に関係なく等しく、それらのポート番号は等しく、それらのユーザ情報コンポーネントは等しくなければなりません。
2 つの URI のユーザ情報、パス、クエリー、フラグメント、権限、またはスキーマ固有部分が等しいかどうか判定する場合、これらのコンポーネントは符号化された形式でなくそのままの形式で比較され、エスケープ octet の 16 進数は大文字小文字に関係なく比較されます。
このメソッドは、Object.equals
メソッドの汎用規約を満たします。
ob
- このオブジェクトと比較するオブジェクト
Object.hashCode()
,
Hashtable
public int hashCode()
Object.hashCode
メソッドの汎用規約を満たします。
Object.equals(java.lang.Object)
,
Hashtable
public int compareTo(Object ob)
2 つの URI の対応するコンポーネントを比較する場合、コンポーネントの一方が未定義で他方が定義されていると、前者は後者より小さいと見なされます。特に明記されていないかぎり、文字列コンポーネントは、String.compareTo
メソッドで定義されているように、本来の大文字小文字を区別した順序に従って順序付けられます。符号化される文字列コンポーネントは、符号化された形式でなくそのままの形式で比較されます。
URI の順序は次のように定義されます。
異なるスキーマを持つ 2 つの URI は、大文字小文字に関係なくそれらのスキーマの順序に従って順序付けられます。
階層 URI は、同じスキーマを持つ不透明 URI より小さいと見なされます。
同じスキーマを持つ 2 つの不透明 URI は、それらのスキーマ固有部分の順序に従って順序付けられます。
同じスキーマとスキーマ固有部分を持つ 2 つの不透明 URI は、それらのフラグメントの順序に従って順序付けられます。
同じスキーマを持つ 2 つの階層 URI は、それらの権限コンポーネントの順序に従って順序付けられます。
両方の権限コンポーネントがサーバベースである場合、URI はそれらのユーザ情報コンポーネントに従って順序付けられます。これらのコンポーネントが同じである場合、URI は大文字小文字に関係なくそれらのホストの順序に従って順序付けられます。ホストが同じである場合、URI はそれらのポートの順序に従って順序付けられます。
一方または両方の権限コンポーネントがレジストリベースである場合、URI はそれらの権限コンポーネンの順序に従って順序付けられます。
最後に、同じスキーマと権限コンポーネントを持つ 2 つの階層 URI は、それらのパスの順序に従って順序付けられます。パスが同じである場合、そららの階層 URI は、それらのクエリーの順序に従って順序付けられます。クエリーが同じである場合は、それらのフラグメントの順序に従って順序付けられます。
このメソッドは、Comparable.compareTo
メソッドの汎用規約を満たします。
Comparable
内の compareTo
ob
- この URI と比較するオブジェクト
ClassCastException
- 指定されたオブジェクトが URI でない場合public String toString()
この URI がこのクラスのコンストラクタの 1 つを呼び出して作成された場合は、元の入力文字列に等しい文字列、または当初に指定されたコンポーネントから求めた文字列 (適切な場合) に等しい文字列が返されます。そうでない場合、この URI は正規化、解決、または相対化によって作成されています。したがって、文字列は、「RFC 2396, section 5.2, step 7」で指定されている規則に従って、この URI のコンポーネントから構築されます。
public String toASCIIString()
この URI に「その他」のカテゴリの文字が含まれていない場合は、このメソッドを呼び出すと toString
メソッドを呼び出したときと同じ値が返されます。そうでない場合、このメソッドは、そのメソッドを呼び出して結果を符号化するかのように動作します。
|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.