JavaTM 2 Platform
Standard Ed. 5.0

java.net
クラス URI

java.lang.Object
  上位を拡張 java.net.URI
すべての実装されたインタフェース:
Serializable, Comparable<URI>

public final class URI
extends Object
implements Comparable<URI>, Serializable

URI (Uniform Resource Identifier) 参照を表します。

次に示す小規模な変更は別にして、このクラスのインスタンスは、「RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax」で定義され、「RFC 2732: Format for Literal IPv6 Addresses in URLs」で修正された URI 参照を表します。リテラル IPv6 アドレス形式でも、scope_ids がサポートされます。scope_ids の構文と使用方法はここで説明しています。このクラスは、コンポーネントから、または文字列形式を解析して URI インスタンスを作成するためのコンストラクタ、インスタンスの各種コンポーネントにアクセスするためのメソッド、および URI インスタンスを正規化、解決、相対化するためのメソッドを提供します。このクラスのインスタンスは変更できません。

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
//~/calendar

階層 URI は、構文に従ってさらに解析されます。

[スキーマ:][//権限][パス][?クエリー][#フラグメント]
ここで、:/?、および # はその文字自体を表します。階層 URI のスキーマ固有部分は、スキーマとフラグメントコンポーネントの間の文字で構成されます。

階層 URI の権限コンポーネントが指定されている場合、その権限コンポーネントは「サーバベース」または「レジストリベース」です。サーバベース権限は、よく知られている構文に従って解析されます。

[ユーザ情報@]ホスト[:ポート]
ここで、@: はその文字自体を表します。現在使用されている URI スキーマのほとんどはサーバベースです。このように解析されない権限コンポーネントは、レジストリベースと見なされます。

階層 URI のパスコンポーネントは、スラッシュ (「/」) で始まる場合は絶対と呼ばれ、そうでない場合は相対と呼ばれます。絶対である階層 URI または権限を指定する階層 URI のパスは常に絶対です。

URI インスタンスには、全部で次の 9 つのコンポーネントがあります。

コンポーネント
スキーマString
スキーマ固有部分    String
権限String
ユーザ情報String
ホストString
ポートint
パスString
クエリーString
フラグメントString
指定されたインスタンスでは、どの特定のコンポーネントも「未定義」か「定義済み」であり、個別の型の値を持ちます。未定義の文字列コンポーネントは null で表され、定義済みの整数コンポーネントは -1 で表されます。文字列コンポーネントは、値として空の文字列を持つよう定義できます。これは、そのコンポーネントが未定義であることと同等ではありません。

特定のコンポーネントがインスタンスで定義されるかされないかは、表現される URI の型により異なります。絶対 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 //~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)  および
u.resolve(u.relativize(v)).equals(v)  
この操作は、可能であればどこででも、ドキュメントのベース URI に対して相対的でなければならない URI を含むドキュメントを構築する場合に便利です。たとえば、次の URI
http://java.sun.com/j2se/1.3/docs/guide/index.html
を次のベース URI に対して相対化すると、
http://java.sun.com/j2se/1.3
相対 URI docs/guide/index.html が生成されます。

文字カテゴリ

URI 参照の各種コンポーネントで許可される文字は、RFC 2396 で厳密に指定されています。次のカテゴリを使用して、この制約について説明します。これらのカテゴリのほとんどはその仕様から取られています。
英字 A」から「Z」、および「a」から「z」までの US-ASCII 英文字
数字 0」から「9」までの US-ASCII 10 進数字
英数字 すべての「英字」および「数字」文字
未予約     すべての「英数字」文字、および文字列「_-!.~'()*」内の文字
句読 文字列「,;:$&+=」内の文字
予約 すべての「句読」文字、および文字列「"?/[]@"」内の文字
エスケープ エスケープオクテット。つまり、パーセント文字 (「%」) とそれに続く 2 桁の 16 進数 (「0」〜「9」、「A」〜「F」、および「a」〜「f」) で構成される三重項
その他 US-ASCII 文字セットに含まれておらず、制御文字 (Character.isISOControl メソッドによる) でなく、空白文字 (Character.isSpaceChar メソッドによる) でない Unicode 文字 (US-ASCII に限定されている RFC 2396 を変更したもの)

「未予約」、「予約」、「エスケープ」、および「その他」の文字で構成されるすべての有効な URI 文字のセット

エスケープオクテット、引用符、符号化、および復号化

RFC 2396 では、エスケープオクテットをユーザ情報、パス、クエリー、およびフラグメントの各コンポーネントに表示することができます。エスケープは、次の 2 つの目的のために URI で使用されます。 このクラスでは、次の 3 つの関連する操作によりこれらの目的が遂行されます。 これらの操作は、次に示すように、このクラスのコンストラクタとメソッドで公開されます。

アイデンティティ

任意の 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.getUserInfo(), u.getAuthority(),
        
u.getPath(), u.getQuery(),
        
u.getFragment())
.equals(
u)
u が階層の場合
new URI(u.getScheme(),
        
u.getUserInfo(), u.getHost(), u.getPort(),
        
u.getPath(), u.getQuery(),
        
u.getFragment())
.equals(
u)
u が階層で、権限またはサーバベースの権限を持たない場合

URI、URL、および URN

URI は Uniform Resource Identifier であり、URL は Uniform Resource Locator です。したがって、抽象的に言えば、すべての URL は URI ですが、すべての URI が URL であるとは限りません。これは、URI の別のサブカテゴリである URN (Uniform Resource Names) があるためです。URN はリソースに名前を付けますが、その検索方法は指定しません。前に示した mailtonews、および isbn の各 URI は、URN の例です。

URI と URL の概念上の区別は、このクラスと URL クラスの間の相違に反映されています。

このクラスのインスタンスは、RFC 2396 で定義されている構文的な意味での URI 参照を表します。URI は絶対でも相対でもかまいません。URI 文字列は一般構文に従って解析され、指定されたスキーマがあっても考慮しません。ホストの参照はあっても実行されず、スキーマ依存のストリームハンドラは構築されません。同等性、ハッシュ、および比較はインスタンスの文字内容によって厳密に定義されます。つまり、URI インスタンスは、比較、正規化、解決、および相対化の構文的な、スキーマに依存しない操作をサポートする構造化文字列にすぎません。

対照的に、URL クラスのインスタンスは、URL の構文的コンポーネント、および URL が記述するリソースへのアクセスに必要な情報の一部を表します。URL は絶対である必要があります。つまり、常にスキーマを指定する必要があります。URL 文字列はそのスキーマに従って解析されます。ストリームハンドラは常に URL 用に確立され、事実、ハンドラが使用できないスキーマの URL インスタンスを作成することはできません。同等性とハッシュは、もしあれば、スキーマとホストのインターネットアドレスの両方に依存します。比較は定義されません。つまり、URL は、解決の構文的操作と、ホストを参照し、指定されたリソースへの接続を開くネットワーク入出力操作をサポートする構造化文字列です。

導入されたバージョン:
1.4
関連項目:
RFC 2279: UTF-8, a transformation format of ISO 10646
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(URI that)
          この 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
 

コンストラクタの詳細

URI

public URI(String str)
    throws URISyntaxException
指定された文字列を解析して URI を構築します。

このコンストラクタは、「RFC 2396」付録 A の文法で厳密に指定された文字列を解析します。ただし、次の点が異なります。

パラメータ:
str - URI に解析される文字列
例外:
NullPointerException - strnull の場合
URISyntaxException - 上記の変更で追加されたように、指定された文字列が RFC 2396 に違反している場合

URI

public URI(String scheme,
           String userInfo,
           String host,
           int port,
           String path,
           String query,
           String fragment)
    throws URISyntaxException
指定されたコンポーネントから階層 URI を構築します。

スキーマが指定され、さらにパスも指定される場合は、パスは空かスラッシュ (「/」) で始まる必要があります。そうでない場合、新しい URI のコンポーネントは、対応するパラメータに null を渡すか、port パラメータの場合は -1 を渡して、未定義のままになることがあります。

最初にこのコンストラクタは、「RFC 2396」セクション 5.2、ステップ 7 で指定されている規則に従って、指定されたコンポーネントから URI 文字列を構築します。

  1. 最初は、結果の文字列は空である

  2. スキーマが指定される場合、そのスキーマは結果に追加され、コロン (「:」) が続く

  3. ユーザ情報、ホスト、またはポートが指定される場合は、文字列「//」が追加される

  4. ユーザ情報が指定される場合、そのユーザ情報が追加されて、単価記号 (「@」) が続く。「未予約」、「句読」、「エスケープ」、または「その他」のカテゴリにない文字はすべて引用符で囲まれる

  5. ホストが指定される場合、そのホストが追加される。そのホストがリテラル IPv6 アドレスで、角括弧 (「[」および「]」) で囲まれていない場合、角括弧が追加される

  6. ポート番号が指定される場合、コロン (「:」) が追加され、10 進数のポート番号が続く

  7. パスが指定される場合、そのパスが追加される。「未予約」、「句読」、「エスケープ」、または「その他」のカテゴリになくて、スラッシュ (「/」) または単価記号 (「@」) に等しくない文字はすべて引用符で囲まれる

  8. クエリーが指定される場合、疑問符 (「?」) が追加されて、クエリーが続く。有効な URI 文字でない文字はすべて引用符で囲まれる

  9. 最後に、フラグメントが指定される場合、ハッシュ記号 (「#」) が追加されて、フラグメントが続く。有効な URI 文字でない文字はすべて引用符で囲まれる

結果の URI 文字列は、結果に対して URI(String) コンストラクタを呼び出し、次に parseServerAuthority() メソッドを呼び出したかのようにして、解析されます。これにより、URISyntaxException がスローされる場合があります。

パラメータ:
scheme - スキーマ名
userInfo - ユーザ名と認証情報
host - ホスト名
port - ポート番号
path - パス
query - クエリー
fragment - フラグメント
例外:
URISyntaxException - スキーマとパスの両方が指定されているがパスが相対の場合、指定されたコンポーネントから構築された URI 文字列が RFC 2396 に違反する場合、または文字列の権限コンポーネントが存在するがサーバベースの権限として解析できない場合

URI

public URI(String scheme,
           String authority,
           String path,
           String query,
           String fragment)
    throws URISyntaxException
指定されたコンポーネントから階層 URI を構築します。

スキーマが指定され、さらにパスも指定される場合は、パスは空かスラッシュ (「/」) で始まる必要があります。そうでない場合、新しい URI のコンポーネントは、対応するパラメータに null を渡して未定義のままになることがあります。

最初にこのコンストラクタは、「RFC 2396」セクション 5.2、ステップ 7 で指定されている規則に従って、指定されたコンポーネントから URI 文字列を構築します。

  1. 最初は、結果の文字列は空である

  2. スキーマが指定される場合、そのスキーマは結果に追加され、コロン (「:」) が続く

  3. 権限が指定される場合、文字列「//」が追加されて、権限が続く。権限にリテラル IPv6 アドレスが含まれる場合、そのアドレスは角括弧 (「[」および「]」) で囲む必要がある。「未予約」、「句読」、「エスケープ」、または「その他」のカテゴリになくて、単価記号 (「@」) に等しくない文字はすべて引用符で囲まれる

  4. パスが指定される場合、そのパスが追加される。「未予約」、「句読」、「エスケープ」、または「その他」のカテゴリになくて、スラッシュ (「/」) または単価記号 (「@」) に等しくない文字はすべて引用符で囲まれる

  5. クエリーが指定される場合、疑問符 (「?」) が追加されて、クエリーが続く。有効な URI 文字でない文字はすべて引用符で囲まれる

  6. 最後に、フラグメントが指定される場合、ハッシュ記号 (「#」) が追加されて、フラグメントが続く。有効な URI 文字でない文字はすべて引用符で囲まれる

結果の URI 文字列は、結果に対して URI(String) コンストラクタを呼び出し、次に parseServerAuthority() メソッドを呼び出したかのようにして、解析されます。これにより、URISyntaxException がスローされる場合があります。

パラメータ:
scheme - スキーマ名
authority - 権限
path - パス
query - クエリー
fragment - フラグメント
例外:
URISyntaxException - スキーマとパスの両方が指定されているがパスが相対の場合、指定されたコンポーネントから構築された URI 文字列が RFC 2396 に違反する場合、または文字列の権限コンポーネントが存在するがサーバベースの権限として解析できない場合

URI

public URI(String scheme,
           String host,
           String path,
           String fragment)
    throws URISyntaxException
指定されたコンポーネントから階層 URI を構築します。

コンポーネントは、null を渡して未定義のままになることがあります。

この簡易コンストラクタは、次のように 7 つの引数のコンストラクタを呼び出すかのように動作します。

new URI(scheme, null, host, -1, path, null, fragment);

パラメータ:
scheme - スキーマ名
host - ホスト名
path - パス
fragment - フラグメント
例外:
URISyntaxException - 指定されたコンポーネントから構築した URI 文字列が RFC 2396 に違反する場合

URI

public URI(String scheme,
           String ssp,
           String fragment)
    throws URISyntaxException
指定されたコンポーネントから URI を構築します。

コンポーネントは、null を渡して未定義のままになることがあります。

最初にこのコンストラクタは、指定されたコンポーネントを使用して、次のように文字列形式で URI を構築します。

  1. 最初は、結果の文字列は空である

  2. スキーマが指定される場合、そのスキーマは結果に追加され、コロン (「:」) が続く

  3. スキーマ固有部分が指定される場合、そのスキーマ固有部分が追加される。有効な URI 文字でない文字はすべて引用符で囲まれる

  4. 最後に、フラグメントが指定される場合、ハッシュ記号 (「#」) が文字列に追加されて、フラグメントが続く。有効な URI 文字でない文字はすべて引用符で囲まれる

結果の URI 文字列は、新しい URI インスタンスを作成するために、URI(String) コンストラクタを呼び出したかのようにして解析されます。これにより、URISyntaxException がスローされる場合があります。

パラメータ:
scheme - スキーマ名
ssp - スキーマ固有部分
fragment - フラグメント
例外:
URISyntaxException - 指定されたコンポーネントから構築した URI 文字列が RFC 2396 に違反する場合
メソッドの詳細

create

public static URI create(String str)
指定された文字列を解析して URI を作成します。

この簡易ファクトリメソッドは、URI(String) コンストラクタを呼び出したかのようにして動作します。コンストラクタからスローされる URISyntaxException はすべてキャッチされて新しい IllegalArgumentException オブジェクトにラップされ、その後スローされます。

このメソッドは、指定された文字列が有効な URI であることが既知の場合 (たとえば、プログラム内で宣言される URI 定数) に使用するために提供されています。したがって、文字列がこのように解析されないとプログラムエラーと見なされます。URISyntaxException を直接スローするコンストラクタは、URI がユーザ入力やエラーが発生しやすいその他のソースから構築される場合に使用します。

パラメータ:
str - URI に解析される文字列
戻り値:
新しい URI
例外:
NullPointerException - strnull の場合
IllegalArgumentException - 指定された文字列が RFC 2396 に違反する場合

parseServerAuthority

public URI parseServerAuthority()
                         throws URISyntaxException
この URI の権限コンポーネント (定義されている場合) からユーザ情報、ホスト、およびポートの各コンポーネントへの解析を試みます。

この URI の権限コンポーネントがすでにサーバベースであると認識されている場合は、すでにユーザ情報、ホスト、およびポートの各コンポーネントに解析されています。この場合、またはこの URI に権限コンポーネントがない場合、このメソッドはこの URI を返すだけです。

そうでない場合、このメソッドは権限コンポーネントからユーザ情報、ホスト、およびポートの各コンポーネントへの解析をもう一度試み、権限コンポーネントがそのように解析できなかった理由を説明する例外をスローします。

このメソッドは、RFC 2396 で指定されている一般 URI 構文が無効なサーバベース権限と有効なレジストリベース権限を必ずしも区別できないために用意されています。したがって、サーバベース権限の一部のインスタンスをレジストリベース権限のインスタンスとして扱う必要があります。たとえば、URI 文字列「//foo:bar」などの権限コンポーネントは、有効なサーバベース権限ではありませんが、レジストリベース権限としては有効です。

URN または URL であることが既知の URI を使用するような多くの一般的な状況では、使用される階層 URI は常にサーバベースです。したがって、そのように解析するか、エラーとして扱う必要があります。この場合、次のような文は、

URI u = new URI(str).parseServerAuthority();

u が適切なユーザ情報、ホスト、およびポートの各コンポーネントのあるサーバベース権限を持つ URI (権限コンポーネントを持つ場合) を常に参照するようにするために使用できます。また、このメソッドを呼び出すと、権限がそのように解析できなかった場合に、スローされる例外に基づいて適切な診断メッセージを発行するようにできます。

戻り値:
権限フィールドがサーバベース権限として解析された URI
例外:
URISyntaxException - この URI の権限コンポーネントが指定されているが、RFC 2396 に従ってサーバベース権限として解析できない場合

normalize

public URI normalize()
この URI のパスを正規化します。

この URI が不透明である場合、またはそのパスがすでに正規形式である場合は、この URI が返されます。そうでない場合は、この URI と同じ新しい URI が構築されます。ただし、そのパスが「RFC 2396」セクション 5.2、ステップ 6、サブステップ c 〜 f に適合する方法でこの URI のパスを正規化して求められる場合を除きます。これは、次のようになります。

  1. すべての「.」セグメントが削除される

  2. ..」セグメントの前に「..」でないセグメントがある場合、これらのセグメントは両方とも削除される。このステップは該当するものがなくなるまで繰り返される

  3. パスが相対で、最初のセグメントにコロン (「:」) が含まれる場合、「.」セグメントが前に追加される。これにより、「a:b/c/d」などのパスを持つ相対 URI があとで「a」のスキーマおよび「b/c/d」のスキーマ固有部分を使用して不透明 URI として再度解析されないようにする (RFC 2396 を変更したもの)

正規化されたパスは、削除を可能にする「..」でない先行のセグメントが不十分だった場合、1 つ以上の「..」セグメントで始まります。正規化されたパスは、上記のステップ 3 で挿入さた場合、「.」セグメントで始まります。そうでない場合、正規化されたパスには「.」または「..」セグメントは含まれません。

戻り値:
この URI と同等の URI。ただし、そのパスは正規形式

resolve

public URI resolve(URI uri)
指定された URI をこの URI に対して解決します。

指定された URI がすでに絶対である場合、またはこの URI が不透明である場合は、指定された URI が返されます。

指定された URI のフラグメントコンポーネントが定義され、そのパスコンポーネントが空で、そのスキーマ、権限、およびクエリーの各コンポーネントが未定義の場合は、指定されたフラグメントを持つが、ほかのすべてのコンポーネントがこの URI のコンポーネントと等しい URI が返されます。これにより、「#foo」などのスタンドアロンフラグメント参照を表す URI をベース URI に対して有効に解決することができます。

そうでない場合、このメソッドは、「RFC 2396」セクション 5.2 に適合する方法で、次のように新しい階層 URI を構築します。

  1. この URI のスキームと指定された URI のクエリーおよびフラグメントコンポーネントを使用して、新しい URI が構築される

  2. 指定された URI に権限コンポーネントがある場合、新しい URI の権限とパスは指定された URI から取られる

  3. そうでない場合、新しい URI の権限コンポーネントがこの URI からコピーされ、そのパスは次のようにして求められる

    1. 指定された URI のパスが絶対の場合、新しい URI のパスは指定された URI から取られる

    2. そうでない場合、指定された URI のパスは相対で、新しい URI のパスは指定された URI のパスをこの URI のパスに対して解決して求められる。これは、この URI のパスの最後のセグメント以外のすべてのセグメント (存在する場合) を指定された URI のパスと連結し、その結果を normalize メソッドを呼び出したかのようにして正規化することによって行われる

このメソッドの結果は、この URI が絶対の場合、または指定された URI が絶対の場合にだけ、絶対になります。

パラメータ:
uri - この URI に対して解決される URI
戻り値:
結果の URI
例外:
NullPointerException - urinull の場合

resolve

public URI resolve(String str)
指定された文字列を解析し、その後その文字列をこの URI に対して解決して、新しい URI を構築します。

この簡易メソッドは、このメソッドの呼び出しが式 resolve(URI.create(str)) の評価と同じであるかのように動作します。

パラメータ:
str - URI に解析される文字列
戻り値:
結果の URI
例外:
NullPointerException - strnull の場合
IllegalArgumentException - 指定された文字列が RFC 2396 に違反する場合

relativize

public URI relativize(URI uri)
指定された URI をこの URI に対して相対化します。

指定された URI のこの URI に対する相対化は、次のようにして求められます。

  1. この URI または指定された URI が不透明である場合、2 つの URI のスキーマと権限コンポーネントが同じでない場合、またはこの URI のパスが指定された URI のパスの接頭辞でない場合は、指定されたURI が返される

  2. そうでない場合、指定された URI から取られたクエリーおよびフラグメントコンポーネントと、指定された URI のパスの先頭からこの URI のパスを削除して求めたパスコンポーネントを使用して、新しい相対階層 URI が構築される

パラメータ:
uri - この URI に対して相対化される URI
戻り値:
結果の URI
例外:
NullPointerException - urinull の場合

toURL

public URL toURL()
          throws MalformedURLException
この URI から URL を構築します。

この簡易メソッドは、最初にこの URI が絶対であることを確認してから、このメソッドの呼び出しが式 new URL(this.toString()) の評価と同じであるかのように動作します。

戻り値:
この URI から構築された URL
例外:
IllegalArgumentException - この URL が絶対でない場合
MalformedURLException - URL のプロトコルハンドラが発見できなかった場合、または URL の構築時にほかのエラーが発生した場合

getScheme

public String getScheme()
この URI のスキーマコンポーネントを返します。

URI のスキーマコンポーネントには (定義されている場合)、「英数字」カテゴリおよび文字列「-.+」内の文字だけが含まれます。スキーマは常に「英字」で始まります。

URI のスキームコンポーネントにエスケープオクテットを含めることはできません。したがって、このメソッドは復号化を実行しません。

戻り値:
この URI のスキーマコンポーネント。スキーマが未定義の場合は null

isAbsolute

public boolean isAbsolute()
この URI が絶対かどうかを通知します。

URI が絶対であるのは、その URI にスキーマコンポーネントがある場合だけです。

戻り値:
この URI が絶対である場合だけ true

isOpaque

public boolean isOpaque()
この URI が不透明かどうかを通知します。

URI が不透明なのは、その URL が絶対でスキーマ固有部分がスラッシュ文字 (「/」) で始まらない場合だけです。不透明な URI は、スキーマ、スキーマ固有部分、および (場合によっては) フラグメントを持ちます。その他のすべてのコンポーネントは未定義です。

戻り値:
この URI が不透明の場合だけ true

getRawSchemeSpecificPart

public String getRawSchemeSpecificPart()
この URI のスキーマ固有部分を返します。スキーマ固有部分は決して未定義ではありませんが、空の場合があります。

URI のスキーマ固有部分には、有効な URI 文字だけが含まれます。

戻り値:
この URI のそのままのスキーマ固有部分 (決して null ではない)

getSchemeSpecificPart

public String getSchemeSpecificPart()
この URI の復号化されたスキーマ固有部分を返します。

このメソッドから返された文字列は、getRawSchemeSpecificPart メソッドから返された文字列と同じです。ただし、エスケープオクテットのシーケンスがすべて復号化される場合を除きます。

戻り値:
この URI の復号化されたスキーマ固有部分 (決して null ではない)

getRawAuthority

public String getRawAuthority()
この URI のそのままの権限コンポーネントを返します。

URI の権限コンポーネントには (定義されている場合)、単価記号 (「@」) と、「未予約」、「句読」、「エスケープ」、および「その他」のカテゴリの文字だけが含まれます。権限がサーバベースの場合は、さらに有効なユーザ情報、ホスト、ポートの各コンポーネントが必要です。

戻り値:
この URI のそのままの権限コンポーネント。権限が未定義の場合は null

getAuthority

public String getAuthority()
この URI の復号化された権限コンポーネントを返します。

このメソッドから返された文字列は、getRawAuthority メソッドから返された文字列と同じです。ただし、エスケープオクテットのシーケンスがすべて復号化される場合を除きます。

戻り値:
この URI の復号化された権限コンポーネント。権限が未定義の場合は null

getRawUserInfo

public String getRawUserInfo()
この URI のそのままのユーザ情報コンポーネントを返します。

URI のユーザ情報コンポーネントには (定義されている場合)、「未予約」、「句読」、「エスケープ」、および「その他」のカテゴリの文字だけが含まれます。

戻り値:
この URI のそのままのユーザ情報コンポーネント。ユーザ情報が未定義の場合は null

getUserInfo

public String getUserInfo()
この URI の復号化されたユーザ情報コンポーネントを返します。

このメソッドから返された文字列は、getRawUserInfo メソッドから返された文字列と同じです。ただし、エスケープオクテットのシーケンスがすべて復号化される場合を除きます。

戻り値:
この URI の復号化されたユーザ情報コンポーネント。ユーザ情報が未定義の場合は null

getHost

public String getHost()
この URI のホストコンポーネントを返します。

URI のホストコンポーネント (定義されている場合) の形式は、次のどれかです。

URI のホストコンポーネントにエスケープオクテットを含めることはできません。したがって、このメソッドは復号化を実行しません。

戻り値:
この URI のホストコンポーネント。ホストが未定義の場合は null

getPort

public int getPort()
この URI のポート番号を返します。

URI のポートコンポーネントは (定義されている場合)、負でない整数です。

戻り値:
この URI のポートコンポーネント。ポートが未定義の場合は -1

getRawPath

public String getRawPath()
この URI のそのままのパスコンポーネントを返します。

URI のパスコンポーネントには (定義されている場合)、スラッシュ (「/」)、単価記号 (「@」) と、「未予約」、「句読」、「エスケープ」、および「その他」のカテゴリの文字だけが含まれます。

戻り値:
この URI のパスコンポーネント。パスが未定義の場合は null

getPath

public String getPath()
この URI の復号化されたパスコンポーネントを返します。

このメソッドから返された文字列は、getRawPath メソッドから返された文字列と同じです。ただし、エスケープオクテットのシーケンスがすべて復号化される場合を除きます。

戻り値:
この URI の復号化されたパスコンポーネント。パスが未定義の場合は null

getRawQuery

public String getRawQuery()
この URI のそのままのクエリーコンポーネントを返します。

URI のクエリーコンポーネントには (定義されている場合)、有効な URI 文字だけが含まれます。

戻り値:
この URI のそのままのクエリーコンポーネント。クエリーが未定義の場合は null

getQuery

public String getQuery()
この URI の復号化されたクエリーコンポーネントを返します。

このメソッドから返された文字列は、getRawQuery メソッドから返された文字列と同じです。ただし、エスケープオクテットのシーケンスがすべて復号化される場合を除きます。

戻り値:
この URI の復号化されたクエリーコンポーネント。クエリーが未定義の場合は null

getRawFragment

public String getRawFragment()
この URI のそのままのフラグメントコンポーネントを返します。

URI のフラグメントコンポーネントには (定義されている場合)、有効な URI 文字だけが含まれます。

戻り値:
この URI のそのままのフラグメントコンポーネント。フラグメントが未定義の場合は null

getFragment

public String getFragment()
この URI の復号化されたフラグメントコンポーネントを返します。

このメソッドから返された文字列は、getRawFragment メソッドから返された文字列と同じです。ただし、エスケープオクテットのシーケンスがすべて復号化される場合を除きます。

戻り値:
この URI の復号化されたフラグメントコンポーネント。フラグメントが未定義の場合は null

equals

public boolean equals(Object ob)
この URI が別のオブジェクトと等しいかどうかを判定します。

指定されたオブジェクトが URI でない場合、このメソッドはただちに false を返します。

等しいと見なされる 2 つの URI は、両方とも不透明か、両方とも階層である必要があります。それらのスキーマは両方とも未定義か、大文字/小文字に関係なく等しい必要があります。それらのフラグメントは両方とも未定義か、等しい必要があります。

等しいと見なされる 2 つの不透明 URI の場合、それらのスキーマ固有部分は等しい必要があります。

等しいと見なされる 2 つの階層 URI の場合、それらのパスは等しく、そられのクエリーは両方とも未定義か、等しくなければなりません。それらの権限は両方とも未定義か、両方ともレジストリベースか、あるいは両方ともサーバベースでなければなりません。それらの権限が定義されていてレジストリベースの場合、それらの権限は等しくなければなりません。それらの権限が定義されていてサーバベースの場合、それらのホストは大文字/小文字に関係なく等しく、それらのポート番号は等しく、それらのユーザ情報コンポーネントは等しくなければなりません。

2 つの URI のユーザ情報、パス、クエリー、フラグメント、権限、またはスキーマ固有部分が等しいかどうか判定する場合、これらのコンポーネントは符号化された形式でなくそのままの形式で比較され、エスケープオクテットの 16 進数は大文字/小文字に関係なく比較されます。

このメソッドは Object.equals メソッドの汎用規約を満たします。

オーバーライド:
クラス Object 内の equals
パラメータ:
ob - このオブジェクトと比較するオブジェクト
戻り値:
指定されたオブジェクトがこの URI と同じ URI である場合だけ true
関連項目:
Object.hashCode(), Hashtable

hashCode

public int hashCode()
この URI のハッシュコード値を返します。ハッシュコードは、URI のすべてのコンポーネントに基づき、Object.hashCode メソッドの汎用規約を満たします。

オーバーライド:
クラス Object 内の hashCode
戻り値:
この URI のハッシュコード値
関連項目:
Object.equals(java.lang.Object), Hashtable

compareTo

public int compareTo(URI that)
この URI を別のオブジェクトと比較します。そのオブジェクトは URI でなければなりません。

2 つの URI の対応するコンポーネントを比較する場合、コンポーネントの一方が未定義で他方が定義されていると、前者は後者より小さいと見なされます。特に明記されていないかぎり、文字列コンポーネントは、String.compareTo メソッドで定義されているように、本来の大文字/小文字を区別した順序に従って順序付けられます。符号化される文字列コンポーネントは、符号化された形式でなくそのままの形式で比較されます。

URI の順序は次のように定義されます。

このメソッドは Comparable.compareTo メソッドの汎用規約を満たします。

定義:
インタフェース Comparable<URI> 内の compareTo
パラメータ:
that - この URI と比較するオブジェクト
戻り値:
この URI が指定された URI より小さい場合は負の整数、等しい場合は 0、大きい場合は正の整数
例外:
ClassCastException - 指定されたオブジェクトが URI でない場合

toString

public String toString()
この URI のコンテンツを文字列として返します。

この URI がこのクラスのコンストラクタの 1 つを呼び出して作成された場合は、元の入力文字列に等しい文字列、または当初に指定されたコンポーネントから求めた文字列 (適切な場合) に等しい文字列が返されます。そうでない場合、この URI は正規化、解決、または相対化によって作成されています。したがって、文字列は、「RFC 2396」セクション 5.2、ステップ 7 で指定されている規則に従って、この URI のコンポーネントから構築されます。

オーバーライド:
クラス Object 内の toString
戻り値:
この URI の文字列形式

toASCIIString

public String toASCIIString()
この URI のコンテンツを US-ASCII 文字列として返します。

この URI に「その他」のカテゴリの文字が含まれていない場合は、このメソッドを呼び出すと toString メソッドを呼び出したときと同じ値が返されます。そうでない場合、このメソッドは、そのメソッドを呼び出して結果を符号化するかのように動作します。

戻り値:
この URI の文字列形式。必要に応じて、US-ASCII 文字セットの文字だけを含むように符号化される

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。