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, 2014, Oracle and/or its affiliates. All rights reserved.