JavaTM 2 Platform
Standard Ed. 5.0

org.xml.sax.helpers
クラス NamespaceSupport

java.lang.Object
  上位を拡張 org.xml.sax.helpers.NamespaceSupport

public class NamespaceSupport
extends Object

SAX を使用するアプリケーションによって、また内部的には SAX ドライバによって使用する名前空間論理をカプセル化します。

このモジュールは、ソースコード、文書ともに公開ドメインに置かれています。したがって、内容に関する保証は一切提供されません詳細は、http://www.saxproject.org を参照してください。

このクラスは名前空間処理のロジックをカプセル化します。このクラスを使用して、各コンテキストで現在有効な宣言を追跡し、XML 修飾名から自動的に名前空間部分を生成できます。名前空間を生成元の XML qname に戻すこともできます。

名前空間サポートオブジェクトは再利用可能ですが、次のセッションまでの間に reset メソッドを呼び出す必要があります。

次に、単純なセッションの例を示します。


String parts[] = new String[3];
NamespaceSupport support = new NamespaceSupport();

support.pushContext();
support.declarePrefix("", "http://www.w3.org/1999/xhtml");
support.declarePrefix("dc", "http://www.purl.org/dc#");

parts = support.processName("p", parts, false);
System.out.println("Namespace URI: " + parts[0]);
System.out.println("Local name: " + parts[1]);
System.out.println("Raw name: " + parts[2]);

parts = support.processName("dc:title", parts, false);
System.out.println("Namespace URI: " + parts[0]);
System.out.println("Local name: " + parts[1]);
System.out.println("Raw name: " + parts[2]);

support.popContext();
 

このクラスは、名前空間宣言を含む要素がほとんどないことを想定して最適化されています。したがって、すべてのコンテキストで同一の接頭辞と URI のマッピングが繰り返されるような場合は、効率が低くなる可能性があります。

SAX ドライバ (パーサ) はこのクラスを選択して名前空間処理を実装する場合がありますが、これは要求されません。アプリケーションが名前空間情報を使用する場合は、アプリケーション自体が名前空間情報を追跡する必要があります。

導入されたバージョン:
SAX 2.0

フィールドの概要
static String NSDECL
          定数としての名前空間宣言 URI を表します。
static String XMLNS
          定数で XML 名前空間 URI を表します。
 
コンストラクタの概要
NamespaceSupport()
          新しい名前空間サポートオブジェクトを作成します。
 
メソッドの概要
 boolean declarePrefix(String prefix, String uri)
          名前空間接頭辞を宣言します。
 Enumeration getDeclaredPrefixes()
          このコンテキスト内に宣言されているすべての接頭辞の列挙を返します。
 String getPrefix(String uri)
          名前空間 URI にマッピングされている接頭辞を 1 つ返します。
 Enumeration getPrefixes()
          現在のコンテキスト内で宣言がアクティブな、すべての接頭辞の列挙を返します。
 Enumeration getPrefixes(String uri)
          現在のコンテキスト内で宣言がアクティブになっている指定された URI のすべての接頭辞の列挙を返します。
 String getURI(String prefix)
          接頭辞を検索し、現在マッピングされている名前空間 URI を取得します。
 boolean isNamespaceDeclUris()
          名前空間宣言の属性が名前空間に配置された場合は true を返します。
 void popContext()
          以前の名前空間コンテキストに戻します。
 String[] processName(String qName, String[] parts, boolean isAttribute)
          現在のコンテキスト内のすべての宣言が declarePrefix() によって処理されたあと、raw XML の修飾名を処理します。
 void pushContext()
          新しい名前空間コンテキストを開始します。
 void reset()
          この名前空間サポートオブジェクトを再利用するため、リセットします。
 void setNamespaceDeclUris(boolean value)
          名前空間宣言の属性が processName() によって NSDECL 名前空間に配置されるかどうかを制御します。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

XMLNS

public static final String XMLNS
定数で XML 名前空間 URI を表します。「Namespaces in XML*」勧告で定義されている値は http://www.w3.org/XML/1998/namespace です。

これは、「xml」接頭辞に自動的にマッピングされる名前空間 URI です。

関連項目:
定数フィールド値

NSDECL

public static final String NSDECL
定数としての名前空間宣言 URI を表します。「Namespaces in XML」勧告に対して下位互換性のない正誤表で定義されている値は http://www.w3.org/xmlns/2000/ です。この正誤表は SAX2 以降のものなので、SAX2 は元の勧告にはデフォルトで設定し、通常はこの URI は使用しません。

これは、「xmlns」属性と「xmlns:*」属性 にオプションで適用される名前空間 URI です。名前空間宣言に使用します。

導入されたバージョン:
SAX 2.1alpha
関連項目:
setNamespaceDeclUris(boolean), isNamespaceDeclUris(), 定数フィールド値
コンストラクタの詳細

NamespaceSupport

public NamespaceSupport()
新しい名前空間サポートオブジェクトを作成します。

メソッドの詳細

reset

public void reset()
この名前空間サポートオブジェクトを再利用するため、リセットします。

名前空間サポートオブジェクトを新しいセッションで再利用する前に、このメソッドを呼び出す必要があります。名前空間宣言 URI をサポートする場合は、そのフラグもデフォルト以外の値に設定する必要があります。

関連項目:
setNamespaceDeclUris(boolean)

pushContext

public void pushContext()
新しい名前空間コンテキストを開始します。新しいコンテキストは親コンテキストの宣言を自動的に継承しますが、このコンテキスト内で作成された宣言も引き続き追跡します。

イベントコールバックコードは、要素ごとに一度だけ新しいコンテキストを開始する必要があります。つまり、2 か所のうちのどちらかでこれを呼び出す準備をします。名前空間宣言を含まない要素の場合、「ContentHandler.startElement()」コールバックが正しい場所です。このような宣言を持つ要素の場合、最初の「ContentHandler.startPrefixMapping()」コールバックで行われます。コンテキストがすでに開始されたかどうかは boolean フラグを使用して追跡できます。 メソッドのどちらかが呼び出された場合、フラグをチェックして、新しいコンテキストを開始する必要があるかどうかを見ます。開始する必要がある場合は、コンテキストを開始してフラグを設定します。「ContentHandler.startElement()」は、これを行ったあと必ずフラグをクリアします。

通常、SAX ドライバは、新しいコンテキストを各 XML 要素の先頭にプッシュします。そして、最初に属性のパスを実行してすべての名前空間宣言を処理し、「ContentHandler.startPrefixMapping()」コールバックを行います。次に、2 つ目のパスですべての属性および要素名の名前空間修飾名を決めます。これにより、「ContentHandler.startElement()」コールバックのすべての情報が使用でき、実行可能になります。

名前空間サポートオブジェクトは、すでに有効になっているベースコンテキストで開始します。このコンテキストに宣言されているのは「xml」接頭辞だけです。

関連項目:
ContentHandler, popContext()

popContext

public void popContext()
以前の名前空間コンテキストに戻します。

通常は、各 XML 要素の終わりにコンテキストをポップする必要があります。コンテキストをポップすると、以前に有効だったすべての名前空間接頭辞マッピングが復元されます。

コンテキストをポップしたあと、新たに名前空間接頭辞を宣言する必要がある場合は、その前に必ず別のコンテキストをプッシュしてください。

関連項目:
pushContext()

declarePrefix

public boolean declarePrefix(String prefix,
                             String uri)
名前空間接頭辞を宣言します。すべての接頭辞は参照される前に宣言される必要があります。たとえば、SAX ドライバ (パーサ) は 2 つのパスの要素の属性をスキャンします。最初のパスは名前空間宣言のパスで、もう 1 つは processName() を使用し、再定義される可能性がある接頭辞に対して接頭辞を解釈するパスです。

このメソッドは、現在の名前空間コンテキスト内に接頭辞を宣言します。この接頭辞は、下位コンテキストでシャドウ化されないかぎり、現在のコンテキストがポップされるまで有効です。

デフォルトによる要素の名前空間を宣言するには、空文字列を接頭辞として使用します。

別の名前空間コンテキストをプッシュしてポップしたあとや、修飾名を処理して宣言の段階を終了したとみなして接頭辞を宣言することはできません。

このライブラリには非対称性があります。デフォルトによる要素の名前空間を宣言しても、getPrefix は接頭辞 "" を返しません。デフォルトの名前空間を確認する必要がある場合は、getURI を使用して明示的に検索を行ってください。この非対称性により、デフォルトの接頭辞を使用できない環境でも、属性名から接頭辞を検索しやすくなっています。

パラメータ:
prefix - 宣言する接頭辞、またはデフォルトによる要素の名前空間を示す空文字列。値「xml」または「xmlns」を持たない場合がある
uri - 接頭辞に関連付ける名前空間 URI
戻り値:
接頭辞が正当な場合は true、そうでない場合は false
関連項目:
processName(java.lang.String, java.lang.String[], boolean), getURI(java.lang.String), getPrefix(java.lang.String)

processName

public String[] processName(String qName,
                            String[] parts,
                            boolean isAttribute)
現在のコンテキスト内のすべての宣言が declarePrefix() によって処理されたあと、raw XML の修飾名を処理します。

このメソッドは、接頭辞を削除し、それを現在宣言されている接頭辞内で検索することによって現在のコンテキスト内で raw XML 修飾名を処理します。戻り値は呼び出し側から提供された配列になり、次のように割り当てられます。

配列内のすべての文字列が内部化されます。raw 名にまだ宣言されていない接頭辞が含まれている場合、戻り値は null になります。

属性名の処理方法は要素名の処理方法とは異なります。接頭辞を持たない要素名がデフォルトの名前空間 (存在する場合) を受け取るのに対して、接頭辞を持たない属性名はこれを受け取りません。

パラメータ:
qName - 処理される XML 修飾名
parts - 呼び出し元が指定した配列 (3 個以上のメンバを格納できる)
isAttribute - 属性名 (true) であるか要素名 (false) であるかを示すフラグ
戻り値:
名前空間 URI または空文字列、ローカル名、および XML 修飾名を示す、3 つの内部化された文字列が格納された所定の配列。未宣言の接頭辞がある場合は null
関連項目:
declarePrefix(java.lang.String, java.lang.String),

getURI

public String getURI(String prefix)
接頭辞を検索し、現在マッピングされている名前空間 URI を取得します。

このメソッドは、現在のコンテキスト内で接頭辞を検索します。デフォルトの名前空間を検索する場合は空文字列 ("") を使用します。

パラメータ:
prefix - 検索する接頭辞
戻り値:
関連名前空間 URI。接頭辞がこのコンテキスト内で宣言されていない場合は null
関連項目:
getPrefix(java.lang.String), getPrefixes()

getPrefixes

public Enumeration getPrefixes()
現在のコンテキスト内で宣言がアクティブな、すべての接頭辞の列挙を返します。ここには、オーバーライドされていない親コンテキストの宣言も含まれます。

注: デフォルトの接頭辞は、戻り値の列挙に返されません。デフォルトの接頭辞を確認する場合は、引数 "" を指定して getURI を使用してください。

戻り値:
接頭辞の列挙 (空以外)
関連項目:
getDeclaredPrefixes(), getURI(java.lang.String)

getPrefix

public String getPrefix(String uri)
名前空間 URI にマッピングされている接頭辞を 1 つ返します。

同じ URI に複数の接頭辞がマッピングされている場合、このメソッドはその中から無作為に 1 個を返します。すべての接頭辞を確認する場合は、このメソッドではなく getPrefixes() メソッドを使用してください。

注: このメソッドは、空 (デフォルト) の接頭辞を返しません。デフォルトの接頭辞を確認する場合は、引数 "" を指定して getURI を使用してください。

パラメータ:
uri - 名前空間 URI
戻り値:
指定の URI に現在マッピングされている接頭辞のうちの 1 つ。現在マッピングされている接頭辞がない場合、または URI がデフォルトの名前空間に割り当てられている場合は null
関連項目:
getPrefixes(java.lang.String), getURI(java.lang.String)

getPrefixes

public Enumeration getPrefixes(String uri)
現在のコンテキスト内で宣言がアクティブになっている指定された URI のすべての接頭辞の列挙を返します。ここには、オーバーライドされていない親コンテキストの宣言も含まれます。

このメソッドは特定の名前空間 URI にマッピングされている接頭辞を返します。戻り値には、接頭辞 xml: が含まれます。名前空間 URI にマッピングされている接頭辞を無作為に 1 個だけ取得する場合は、このメソッドではなく getPrefix メソッドを使用します。

注: 空 (デフォルト) の接頭辞は、戻り値の列挙に含まれません。デフォルトの名前空間の存在を確認する場合は、引数 "" を指定して getURI を使用してください。

パラメータ:
uri - 名前空間 URI
戻り値:
接頭辞の列挙 (空以外)
関連項目:
getPrefix(java.lang.String), getDeclaredPrefixes(), getURI(java.lang.String)

getDeclaredPrefixes

public Enumeration getDeclaredPrefixes()
このコンテキスト内に宣言されているすべての接頭辞の列挙を返します。

getPrefix(java.lang.String)getPrefixes() を使用する場合とは異なり、戻り値の列挙には、空 (デフォルト) の接頭辞も含まれます。

戻り値:
このコンテキスト内に宣言されているすべての接頭辞の列挙
関連項目:
getPrefixes(), getURI(java.lang.String)

setNamespaceDeclUris

public void setNamespaceDeclUris(boolean value)
名前空間宣言の属性が processName() によって NSDECL 名前空間に配置されるかどうかを制御します。この変更は、すべてのコンテキストがプッシュされる前にのみ行うことができます。

例外:
IllegalStateException - コンテキストがプッシュされたあとに設定しようとした場合
導入されたバージョン:
SAX 2.1alpha

isNamespaceDeclUris

public boolean isNamespaceDeclUris()
名前空間宣言の属性が名前空間に配置された場合は true を返します。この動作はデフォルトによるものではありません。

導入されたバージョン:
SAX 2.1alpha

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 も参照してください。