public class NamespaceSupport extends Object
このモジュールは、ソースコード、文書ともに公開ドメインに置かれています。したがって、内容に関する保証は一切提供されません。詳細については、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 ドライバ (パーサー) はこのクラスを選択して名前空間処理を実装する場合がありますが、これは要求されません。アプリケーションが名前空間情報を使用する場合は、アプリケーション自体が名前空間情報を追跡する必要があります。
修飾子と型 | フィールドと説明 |
---|---|
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 名前空間に配置されるかどうかを制御します。 |
public static final String XMLNS
http://www.w3.org/XML/1998/namespace
です。
これは、「xml」接頭辞に自動的にマッピングされる名前空間 URI です。
public static final String NSDECL
http://www.w3.org/xmlns/2000/
です。この正誤表は SAX2 以降のものなので、SAX2 は元の勧告にはデフォルトで設定し、通常はこの URI は使用しません。
これは、xmlns 属性と xmlns:* 属性にオプションで適用される名前空間 URI です。名前空間宣言に使用します。
setNamespaceDeclUris(boolean)
、isNamespaceDeclUris()
、定数フィールド値public void reset()
名前空間サポートオブジェクトを新しいセッションで再利用する前に、このメソッドを呼び出す必要があります。名前空間宣言 URI をサポートする場合は、そのフラグもデフォルト以外の値に設定する必要があります。
public void pushContext()
イベントコールバックコードは、要素ごとに一度だけ新しいコンテキストを開始する必要があります。つまり、2 か所のうちのどちらかでこれを呼び出す準備をします。名前空間宣言を含まない要素の場合、ContentHandler.startElement() コールバックが正しい場所です。このような宣言を持つ要素の場合、最初の ContentHandler.startPrefixMapping() コールバックで行われます。コンテキストがすでに開始されたかどうかは boolean フラグを使用して追跡できます。メソッドのどちらかが呼び出された場合、フラグをチェックして、新しいコンテキストを開始する必要があるかどうかを見ます。開始する必要がある場合は、コンテキストを開始してフラグを設定します。ContentHandler.startElement() は、これを行なったあと必ずフラグをクリアします。
通常、SAX ドライバは、新しいコンテキストを各 XML 要素の先頭にプッシュします。そして、最初に属性のパスを実行してすべての名前空間宣言を処理し、ContentHandler.startPrefixMapping() コールバックを行います。次に、2 つめのパスですべての属性および要素名の名前空間修飾名を決めます。これにより、ContentHandler.startElement() コールバックのすべての情報が使用でき、実行可能になります。
名前空間サポートオブジェクトは、すでに有効になっているベースコンテキストで開始します。このコンテキストに宣言されているのは「xml」接頭辞だけです。
ContentHandler
, popContext()
public void popContext()
通常は、各 XML 要素の終わりにコンテキストをポップする必要があります。コンテキストをポップすると、以前に有効だったすべての名前空間接頭辞マッピングが復元されます。
コンテキストをポップしたあと、新たに名前空間接頭辞を宣言する必要がある場合は、その前に必ず別のコンテキストをプッシュしてください。
pushContext()
public boolean declarePrefix(String prefix, String uri)
processName()
を使用し、再定義される可能性がある接頭辞に対して接頭辞を解釈するパスです。
このメソッドは、現在の名前空間コンテキスト内に接頭辞を宣言します。この接頭辞は、下位コンテキストでシャドウ化されないかぎり、現在のコンテキストがポップされるまで有効です。
デフォルトによる要素の名前空間を宣言するには、空文字列を接頭辞として使用します。
このライブラリには非対称性があります。デフォルトによる要素の名前空間を宣言しても、getPrefix
は接頭辞 "" を返しません。デフォルトの名前空間を確認する必要がある場合は、getURI
を使用して明示的に検索を行なってください。この非対称性により、デフォルトの接頭辞を使用できない環境でも、属性名から接頭辞を検索しやすくなっています。
prefix
- 宣言する接頭辞、またはデフォルトによる要素の名前空間を示す空文字列。値「xml」または「xmlns」を持たない場合がある。uri
- 接頭辞に関連付ける名前空間 URI。processName(java.lang.String, java.lang.String[], boolean)
, getURI(java.lang.String)
, getPrefix(java.lang.String)
public String[] processName(String qName, String[] parts, boolean isAttribute)
declarePrefix()
によって処理されたあと、raw XML の修飾名を処理します。
このメソッドは、接頭辞を削除し、それを現在宣言されている接頭辞内で検索することによって現在のコンテキスト内で raw XML 修飾名を処理します。戻り値は呼び出し側から提供された配列になり、次のように割り当てられます。
配列内のすべての文字列が内部化されます。raw 名にまだ宣言されていない接頭辞が含まれている場合、戻り値は null になります。
属性名の処理方法は要素名の処理方法とは異なります。接頭辞を持たない要素名がデフォルトの名前空間 (存在する場合) を受け取るのに対して、接頭辞を持たない属性名はこれを受け取りません。
qName
- 処理される XML 修飾名。parts
- 呼び出し元が指定した配列 (3 個以上のメンバーを格納できる)。isAttribute
- 属性名 (true) であるか要素名 (false) であるかを示すフラグ。declarePrefix(java.lang.String, java.lang.String)
, String.intern()
public String getURI(String prefix)
このメソッドは、現在のコンテキスト内で接頭辞を検索します。デフォルトの名前空間を検索する場合は空文字列 ("") を使用します。
prefix
- 検索する接頭辞。getPrefix(java.lang.String)
, getPrefixes()
public Enumeration getPrefixes()
注: デフォルトの接頭辞は、戻り値の列挙に返されません。デフォルトの接頭辞を確認する場合は、引数 "" を指定して getURI
を使用してください。
getDeclaredPrefixes()
, getURI(java.lang.String)
public String getPrefix(String uri)
同じ URI に複数の接頭辞がマッピングされている場合、このメソッドはその中から無作為に 1 個を返します。すべての接頭辞を確認する場合は、このメソッドではなく getPrefixes()
メソッドを使用してください。
注: このメソッドは、空 (デフォルト) の接頭辞を返しません。デフォルトの接頭辞を確認する場合は、引数 "" を指定して getURI
を使用してください。
uri
- 名前空間 URIgetPrefixes(java.lang.String)
, getURI(java.lang.String)
public Enumeration getPrefixes(String uri)
このメソッドは特定の名前空間 URI にマッピングされている接頭辞を返します。戻り値には、接頭辞 xml: が含まれます。名前空間 URI にマッピングされている接頭辞を無作為に 1 個だけ取得する場合は、このメソッドではなく getPrefix
メソッドを使用します。
注: 空 (デフォルト) の接頭辞は、戻り値の列挙に絶対に含まれません。デフォルトの名前空間の存在を確認する場合は、引数 "" を指定して getURI
メソッドを使用してください。
uri
- 名前空間 URI。getPrefix(java.lang.String)
, getDeclaredPrefixes()
, getURI(java.lang.String)
public Enumeration getDeclaredPrefixes()
getPrefix(java.lang.String)
および getPrefixes()
の動作とは異なり、この列挙には、空 (デフォルト) の接頭辞も含まれます。
getPrefixes()
, getURI(java.lang.String)
public void setNamespaceDeclUris(boolean value)
processName()
によって NSDECL
名前空間に配置されるかどうかを制御します。この変更は、すべてのコンテキストがプッシュされる前にのみ行うことができます。IllegalStateException
- コンテキストがプッシュされたあとに設定しようとした場合。public boolean isNamespaceDeclUris()
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.