モジュール java.xml
パッケージ org.xml.sax.helpers

クラスNamespaceSupport

java.lang.Object
org.xml.sax.helpers.NamespaceSupport

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

このクラスは名前空間処理のロジックをカプセル化します。このクラスを使用して、各コンテキストで現在有効な宣言を追跡し、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
  • フィールドのサマリー

    フィールド
    修飾子と型
    フィールド
    説明
    static final String
    定数としての名前空間宣言URIを表します。
    static final String
    定数でXML名前空間URIを表します。
  • コンストラクタのサマリー

    コンストラクタ
    コンストラクタ
    説明
    新しい名前空間サポート・オブジェクトを作成します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    boolean
    declarePrefix(String prefix, String uri)
    名前空間前置修飾子を宣言します。
    このコンテキスト内に宣言されているすべての前置修飾子の列挙を返します。
    名前空間URIにマッピングされている前置修飾子を1つ返します。
    現在のコンテキスト内で宣言がアクティブな、すべての接頭辞の列挙を返します。
    現在のコンテキスト内で宣言がアクティブになっている指定されたURIのすべての接頭辞の列挙を返します。
    getURI(String prefix)
    前置修飾子を検索し、現在マッピングされている名前空間URIを取得します。
    boolean
    名前空間宣言の属性が名前空間に配置された場合はtrueを返します。
    void
    以前の名前空間コンテキストに戻します。
    processName(String qName, String[] parts, boolean isAttribute)
    現在のコンテキスト内のすべての宣言がdeclarePrefix()によって処理されたあと、raw XMLの修飾名を処理します。
    void
    新しい名前空間コンテキストを開始します。
    void
    この名前空間サポート・オブジェクトを再利用するため、リセットします。
    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です。名前空間宣言に使用します。

      導入されたバージョン:
      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

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

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

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

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

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

      public String[] processName(String qName, String[] parts, boolean isAttribute)
      現在のコンテキスト内のすべての宣言が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

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

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

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

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

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

      戻り値:
      接頭辞の列挙(空以外)。
      関連項目:
    • getPrefix

      public String getPrefix(String uri)
      名前空間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