このクラスは名前空間処理のロジックをカプセル化します。このクラスを使用して、各コンテキストで現在有効な宣言を追跡し、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ドライバ(パーサー)はこのクラスを選択して名前空間処理を実装する場合がありますが、これは要求されません。 アプリケーションが名前空間情報を使用する場合は、アプリケーション自体が名前空間情報を追跡する必要があります。
- 導入されたバージョン:
- 1.4, SAX 2.0
-
フィールドのサマリー
-
コンストラクタのサマリー
-
メソッドのサマリー
修飾子と型メソッド説明boolean
declarePrefix
(String prefix, String uri) 名前空間前置修飾子を宣言します。このコンテキスト内に宣言されているすべての前置修飾子の列挙を返します。名前空間URIにマッピングされている前置修飾子を1つ返します。現在のコンテキスト内で宣言がアクティブな、すべての接頭辞の列挙を返します。getPrefixes
(String uri) 現在のコンテキスト内で宣言がアクティブになっている指定されたURIのすべての接頭辞の列挙を返します。前置修飾子を検索し、現在マッピングされている名前空間URIを取得します。boolean
名前空間宣言の属性が名前空間に配置された場合はtrueを返します。void
以前の名前空間コンテキストに戻します。String[]
processName
(String qName, String[] parts, boolean isAttribute) 現在のコンテキスト内のすべての宣言がdeclarePrefix()
によって処理されたあと、raw XMLの修飾名を処理します。void
新しい名前空間コンテキストを開始します。void
reset()
この名前空間サポート・オブジェクトを再利用するため、リセットします。void
setNamespaceDeclUris
(boolean value) 名前空間宣言の属性がprocessName()
によってNSDECL
名前空間に配置されるかどうかを制御します。
-
フィールド詳細
-
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です。名前空間宣言に使用します。
- 導入されたバージョン:
- 1.5, SAX 2.1 alpha
- 関連項目:
-
-
コンストラクタの詳細
-
NamespaceSupport
public NamespaceSupport()新しい名前空間サポート・オブジェクトを作成します。
-
-
メソッドの詳細
-
reset
public void reset()この名前空間サポート・オブジェクトを再利用するため、リセットします。名前空間サポート・オブジェクトを新しいセッションで再利用する前に、このメソッドを呼び出す必要があります。 名前空間宣言URIをサポートする場合は、そのフラグもデフォルト以外の値に設定する必要があります。
- 関連項目:
-
pushContext
public void pushContext()新しい名前空間コンテキストを開始します。 新しいコンテキストは親コンテキストの宣言を自動的に継承しますが、このコンテキスト内で作成された宣言も引き続き追跡します。イベント・コールバック・コードは、要素ごとに一度だけ新しいコンテキストを開始する必要があります。 つまり、2か所のうちのどちらかでこれを呼び出す準備をします。 名前空間宣言を含まない要素の場合、ContentHandler.startElement()コールバックが正しい場所です。 このような宣言を持つ要素の場合、最初のContentHandler.startPrefixMapping()コールバックで行われます。 コンテキストがすでに開始されたかどうかはbooleanフラグを使用して追跡できます。 メソッドのどちらかが呼び出された場合、フラグをチェックして、新しいコンテキストを開始する必要があるかどうかを見ます。 開始する必要がある場合は、コンテキストを開始してフラグを設定します。 ContentHandler.startElement()は、これを行なったあと必ずフラグをクリアします。
通常、SAXドライバは、新しいコンテキストを各XML要素の先頭にプッシュします。 そして、最初に属性のパスを実行してすべての名前空間宣言を処理し、ContentHandler.startPrefixMapping()コールバックを行います。 次に、2つめのパスですべての属性および要素名の名前空間修飾名を決めます。 これにより、ContentHandler.startElement()コールバックのすべての情報が使用でき、実行可能になります。
名前空間サポート・オブジェクトは、すでに有効になっているベース・コンテキストで開始します。このコンテキストに宣言されているのは「xml」接頭辞だけです。
- 関連項目:
-
popContext
public void popContext()以前の名前空間コンテキストに戻します。通常は、各XML要素の終わりにコンテキストをポップする必要があります。 コンテキストをポップすると、以前に有効だったすべての名前空間接頭辞マッピングが復元されます。
コンテキストをポップしたあと、新たに名前空間接頭辞を宣言する必要がある場合は、その前に必ず別のコンテキストをプッシュしてください。
- 関連項目:
-
declarePrefix
名前空間前置修飾子を宣言します。 すべての接頭辞は参照される前に宣言される必要があります。 たとえば、SAXドライバ(パーサー)は2つのパスの要素の属性をスキャンします。最初のパスは名前空間宣言のパスで、もう1つはprocessName()
を使用し、再定義される可能性がある接頭辞に対して接頭辞を解釈するパスです。このメソッドは、現在の名前空間コンテキスト内に接頭辞を宣言します。この接頭辞は、下位コンテキストでシャドウ化されないかぎり、現在のコンテキストがポップされるまで有効です。
デフォルトによる要素の名前空間を宣言するには、空文字列を接頭辞として使用します。
このライブラリには非対称性があります。デフォルトによる要素の名前空間を宣言しても、
getPrefix
は接頭辞""を返しません。 デフォルトの名前空間を確認する必要がある場合は、getURI
を使用して明示的に検索を行ってください。 この非対称性により、デフォルトの接頭辞を使用できない環境でも、属性名から接頭辞を検索しやすくなっています。- パラメータ:
prefix
- 宣言する接頭辞、またはデフォルトによる要素の名前空間を示す空文字列。 値「xml」または「xmlns」を持たない場合がある。uri
- 接頭辞に関連付ける名前空間URI。- 戻り値:
- 前置修飾子が正当な場合はtrue、そうでない場合はfalse
- 関連項目:
-
processName
現在のコンテキスト内のすべての宣言がdeclarePrefix()
によって処理されたあと、raw XMLの修飾名を処理します。このメソッドは、接頭辞を削除し、それを現在宣言されている接頭辞内で検索することによって現在のコンテキスト内でraw XML修飾名を処理します。 戻り値は呼出し側から提供された配列になり、次のように割り当てられます。
- parts[0]
- 名前空間URI。使用されていない場合は空文字列。
- parts[1]
- ローカル名(前置修飾子なし)。
- parts[2]
- 元のraw名。
配列内のすべての文字列が内部化されます。 raw名にまだ宣言されていない接頭辞が含まれている場合、戻り値はnullになります。
属性名の処理方法は要素名の処理方法とは異なります。接頭辞を持たない要素名がデフォルトの名前空間(存在する場合)を受け取るのに対して、接頭辞を持たない属性名はこれを受け取りません。
- パラメータ:
qName
- 処理されるXML修飾名。parts
- 呼出し元が指定した配列(3個以上のメンバーを格納できる)。isAttribute
- 属性名(true)であるか要素名(false)であるかを示すフラグ。- 戻り値:
- 名前空間URIまたは空文字列、ローカル名、およびXML修飾名を示す、3つの内部化された文字列が格納された所定の配列。未宣言の接頭辞がある場合はnull。
- 関連項目:
-
getURI
-
getPrefixes
public Enumeration<String> getPrefixes()現在のコンテキスト内で宣言がアクティブな、すべての接頭辞の列挙を返します。 ここには、オーバーライドされていない親コンテキストの宣言も含まれます。ノート: デフォルトの接頭辞は、戻り値の列挙に返されません。デフォルトの接頭辞を確認する場合は、引数""を指定して
getURI
を使用してください。- 戻り値:
- 接頭辞の列挙(空以外)。
- 関連項目:
-
getPrefix
名前空間URIにマッピングされている前置修飾子を1つ返します。同じURIに複数の接頭辞がマッピングされている場合、このメソッドはその中から無作為に1個を返します。すべての接頭辞を確認する場合は、このメソッドではなく
getPrefixes()
メソッドを使用してください。ノート: このメソッドは、空(デフォルト)の接頭辞を返しません。デフォルトの接頭辞を確認する場合は、引数""を指定して
getURI
を使用してください。- パラメータ:
uri
- 名前空間URI- 戻り値:
- 指定のURIに現在マッピングされている接頭辞のうちの1つ。現在マッピングされている接頭辞がない場合、またはURIがデフォルトの名前空間に割り当てられている場合はnull
- 関連項目:
-
getPrefixes
public Enumeration<String> getPrefixes(String uri) 現在のコンテキスト内で宣言がアクティブになっている指定されたURIのすべての接頭辞の列挙を返します。 ここには、オーバーライドされていない親コンテキストの宣言も含まれます。このメソッドは特定の名前空間URIにマッピングされている接頭辞を返します。 戻り値には、接頭辞xml: が含まれます。 名前空間URIにマッピングされている接頭辞を無作為に1個だけ取得する場合は、このメソッドではなく
getPrefix
メソッドを使用します。ノート: 空(デフォルト)の接頭辞は、戻り値の列挙に絶対に含まれません。デフォルトの名前空間の存在を確認する場合は、引数""を指定して
getURI
メソッドを使用してください。- パラメータ:
uri
- 名前空間URI。- 戻り値:
- 接頭辞の列挙(空以外)。
- 関連項目:
-
getDeclaredPrefixes
public Enumeration<String> getDeclaredPrefixes()このコンテキスト内に宣言されているすべての前置修飾子の列挙を返します。getPrefix(java.lang.String)
およびgetPrefixes()
の動作とは異なり、この列挙には、空(デフォルト)の接頭辞も含まれます。- 戻り値:
- このコンテキスト内に宣言されているすべての接頭辞の列挙。
- 関連項目:
-
setNamespaceDeclUris
public void setNamespaceDeclUris(boolean value) 名前空間宣言の属性がprocessName()
によってNSDECL
名前空間に配置されるかどうかを制御します。 この変更は、すべてのコンテキストがプッシュされる前にのみ行うことができます。- パラメータ:
value
- 名前空間宣言属性がNSDECL
名前空間に配置されているかどうかを示すフラグ- 例外:
IllegalStateException
- コンテキストがプッシュされたあとに設定しようとした場合。- 導入されたバージョン:
- 1.5, SAX 2.1 alpha
-
isNamespaceDeclUris
public boolean isNamespaceDeclUris()名前空間宣言の属性が名前空間に配置された場合はtrueを返します。 この動作はデフォルトによるものではありません。- 戻り値:
- 名前空間宣言属性が名前空間に配置されている場合はtrue、そうでない場合はfalse
- 導入されたバージョン:
- 1.5, SAX 2.1 alpha
-