JavaTM 2 Platform
Standard Ed. 5.0

org.xml.sax
インタフェース ContentHandler

既知のサブインタフェースの一覧:
TemplatesHandler, TransformerHandler
既知の実装クラスの一覧:
DefaultHandler, DefaultHandler2, ValidatorHandler, XMLFilterImpl, XMLReaderAdapter

public interface ContentHandler

文書の論理コンテンツの通知を受け取ります。

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

ほとんどの SAX アプリケーションが、このインタフェースを実装しています。標準の構文解析イベントの通知を受ける必要がある場合、アプリケーションはこのインタフェースを実装し、 org.xml.sax.XMLReader#setContentHandler setContentHandler メソッドを使用してインスタンスを SAX パーサに登録します。パーサはこのインスタンスを使用して、要素や文字データの開始、終了といった標準の文書関連イベントを報告します。

このインタフェース内のイベントの順序は、文書自体に含まれる情報の順序をミラー化したものであり、非常に重要です。たとえば、ある要素のすべてのコンテンツ (文字データ、処理命令、サブ要素など) は、startElement イベントとこれに対応する endElement イベントの間に順番に並べられます。

このインタフェースは、現在では非推奨に指定されている SAX 1.0 の DocumentHandler インタフェースと似ていますが、新たに名前空間のサポートと、妥当性を検証しない XML プロセッサでスキップされた実体の報告のサポートが追加されています。

実装者は、java.net パッケージに ContentHandler クラスが含まれている点を考慮して、次のような処理は必ず避けてください。

import java.net.*;
 import org.xml.sax.*;
 

通常、「import ...*」を使用したプログラムは、ずさんな (sloppy) プログラムと見なされます。ユーザは、バグよりもこの点に注意を払う必要があります。

導入されたバージョン:
SAX 2.0
関連項目:
XMLReader, DTDHandler, ErrorHandler

メソッドの概要
 void characters(char[] ch, int start, int length)
          文字データの通知を受け取ります。
 void endDocument()
          文書の終了通知を受け取ります。
 void endElement(String uri, String localName, String qName)
          要素の終了通知を受け取ります。
 void endPrefixMapping(String prefix)
          接頭辞と URI のマッピングのスコープを終了します。
 void ignorableWhitespace(char[] ch, int start, int length)
          要素コンテンツに含まれる無視できる空白文字の通知を受け取ります。
 void processingInstruction(String target, String data)
          処理命令の通知を受け取ります。
 void setDocumentLocator(Locator locator)
          SAX 文書イベントの発生元を特定するオブジェクトを受け取ります。
 void skippedEntity(String name)
          スキップされた実体の通知を受け取ります。
 void startDocument()
          文書の開始通知を受け取ります。
 void startElement(String uri, String localName, String qName, Attributes atts)
          要素の開始通知を受け取ります。
 void startPrefixMapping(String prefix, String uri)
          接頭辞と URI 名前空間マッピングのスコープを開始します。
 

メソッドの詳細

setDocumentLocator

void setDocumentLocator(Locator locator)
SAX 文書イベントの発生元を特定するオブジェクトを受け取ります。

必須条件ではありませんが、ロケータが必要な場合は、SAX パーサの使用を強くお勧めします。SAX パーサは、ContentHandler インタフェース内のどのメソッドよりも先にこのメソッドを呼び出し、アプリケーションにロケータを提供します。

アプリケーションは、ロケータを利用して、パーサがエラーを報告しない場合でも文書関連イベントの終了位置を特定できます。通常、アプリケーションはこの情報を使用して固有のエラー (文字コンテンツがアプリケーションの機能規則に沿っていないなど) を報告します。一般に、ロケータから返される情報は不十分であり、検索エンジンでの使用に適していません。

ロケータは、startDocument が返されたあと、endDocument が呼び出される前の呼び出し SAX イベントコールバック中にかぎり適正な情報を返します。アプリケーションは、呼び出し SAX イベントコールバック以外にロケータを使用できません。

パラメータ:
locator - SAX 文書イベントの位置を返すオブジェクト
関連項目:
Locator

startDocument

void startDocument()
                   throws SAXException
文書の開始通知を受け取ります。

SAX パーサは、ほかのイベントがコールバックされる前に 1 回だけこのメソッドを呼び出します (setDocumentLocator 以外)。

例外:
SAXException - SAX 例外。ほかの例外をラップしている可能性がある
関連項目:
endDocument()

endDocument

void endDocument()
                 throws SAXException
文書の終了通知を受け取ります。

このメソッドのマニュアルと endDocument() のマニュアルとの間には明らかに矛盾があります。クライアントは、今後のメジャーリリースでこのあいまいさが解決されないかぎり、パーサが fatalError() を報告したり例外をスローしたときに endDocument() が呼び出されるかどうかを仮定しないようにする必要があります。 

SAX パーサは、このメソッドを構文解析の最後に 1 回だけ呼び出します。回復不能なエラーによって構文解析が途中で破棄されるか、入力が終了するまで、このメソッドは呼び出されません。

例外:
SAXException - SAX 例外。ほかの例外をラップしている可能性がある
関連項目:
startDocument()

startPrefixMapping

void startPrefixMapping(String prefix,
                        String uri)
                        throws SAXException
接頭辞と URI 名前空間マッピングのスコープを開始します。

通常の名前空間処理はイベントから提供される情報を必要としません。SAX の XML リーダは、http://xml.org/sax/features/namespaces 機能の値が true (デフォルト) に設定されていると、要素および属性名の接頭辞を自動的に置き換えます。

しかし、アプリケーションによって文字データや属性値の中で使用される場合、接頭辞を安全に展開できません。こうしたアプリケーションには、必要に応じて、start/endPrefixMapping イベントにより、接頭辞をアプリケーションコンテキスト内で拡張するために必要な情報が提供されます。

start/endPrefixMapping イベントがそれぞれ正しく入れ子にされるかどうかは保証されません。すべての startPrefixMapping イベントは、対応する startElement イベントの前にただちに発生し、すべての endPrefixMapping イベントは対応する endElement イベントのあとで発生しますが、これらの順番は保証されていません。

「xml」接頭辞は事前に宣言される不変の修飾子なので、その start/endPrefixMapping イベントは存在しません。

パラメータ:
prefix - 宣言される名前空間接頭辞。デフォルトによる要素の名前空間に使用する空文字列 (接頭辞なし)。
uri - 接頭辞のマップ先名前空間 URI
例外:
SAXException - 処理中にクライアントが例外をスローすることがある
関連項目:
endPrefixMapping(java.lang.String), startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)

endPrefixMapping

void endPrefixMapping(String prefix)
                      throws SAXException
接頭辞と URI のマッピングのスコープを終了します。

詳細は startPrefixMapping を参照してください。これらのイベントは常に、対応する endElement イベントのあとにすぐ発生しますが、endPrefixMapping イベントの順番は保証されていません。

パラメータ:
prefix - マッピングされた接頭辞。デフォルトマッピングのスコープが終了する場合は空文字列になる
例外:
SAXException - 処理中にクライアントが例外をスローすることがある
関連項目:
startPrefixMapping(java.lang.String, java.lang.String), endElement(java.lang.String, java.lang.String, java.lang.String)

startElement

void startElement(String uri,
                  String localName,
                  String qName,
                  Attributes atts)
                  throws SAXException
要素の開始通知を受け取ります。

パーサは XML 文書内の各要素の前でこのメソッドを呼び出します。各 startElement イベントには対応する endElement イベントがあります。これは、要素が空である場合も変わりません。対応する endElement イベントの前に、要素のコンテンツ全部が順番に報告されます。

このイベントでは、各要素に最大 3 つの名前コンポーネントを許可します。

  1. 名前空間 URI
  2. ローカル名
  3. 接頭辞付きの修飾名

http://xml.org/sax/features/namespaces プロパティおよび http://xml.org/sax/features/namespace-prefixes プロパティの値により、これらのどれか、または全部が提供されます。

提供される属性リストには、明示的な値 (指定された値またはデフォルト値) を持つ属性だけが含まれます。#IMPLIED 属性は含まれません。このリストには、http://xml.org/sax/features/namespace-prefixes プロパティが true (デフォルトの設定は false。true のサポートはオプション) である場合に限り、名前空間定義 (xmlns* 属性) に使用される属性が含まれます。

属性値は、characters() のように 2 つ以上の char 値を必要とする文字列を持つ場合があります。

パラメータ:
uri - 名前空間 URI。要素が名前空間 URI を持たない場合、または名前空間処理が行われない場合は空文字列
localName - 接頭辞を含まないローカル名。名前空間処理が行われない場合は空文字列
qName - 接頭辞を持つ修飾名。修飾名を使用できない場合は空文字列
atts - 要素に追加された属性。属性がない場合は空の Attributes オブジェクトになる。startElement が返されたあとのこのオブジェクトの値は定義されない
例外:
SAXException - SAX 例外。ほかの例外をラップしている可能性がある
関連項目:
endElement(java.lang.String, java.lang.String, java.lang.String), Attributes, AttributesImpl

endElement

void endElement(String uri,
                String localName,
                String qName)
                throws SAXException
要素の終了通知を受け取ります。

SAX パーサは、XML 文書内の各要素の終わりにこのメソッドを呼び出します。各 endElement イベントには対応する startElement イベントがあります。これは、要素が空である場合も変わりません。

名前については、startElement を参照してください。

パラメータ:
uri - 名前空間 URI。要素が名前空間 URI を持たない場合、または名前空間処理が行われない場合は空文字列
localName - 接頭辞を含まないローカル名。名前空間処理が行われない場合は空文字列
qName - 接頭辞を持つ修飾された XML 名。修飾名を使用できない場合は空文字列
例外:
SAXException - SAX 例外。ほかの例外をラップしている可能性がある

characters

void characters(char[] ch,
                int start,
                int length)
                throws SAXException
文字データの通知を受け取ります。

パーサは、このメソッドを呼び出して、各文字データチャンクを報告します。SAX パーサは、連続する文字データを単一のチャンクとして、またはいくつかのチャンクに分割して返します。ただし、ロケータから有益な情報を得るためには、単一のイベントに含まれる文字がすべて同じ外部実体のものでなければいけません。

アプリケーションは、指定された範囲外の配列を読み取ることはできません。

それぞれの文字列は 2 つ以上の Java char 値で構成されます。文字列を 16 ビット以内で表示することはできないため、2 つの重要なケースが発生します。1 つは、文字列が 2 つの Unicode 値を使用して「Surrogate Pair」で表されることです。このような文字列は「Astral Planes」と呼ばれ、U+FFFF より大きいコードポイントを持ちます。もう 1 つは、1 つ以上のアクセント文字に結合しているベース文字列などの合成文字列になることです。

char-at-a-time 慣用法を使用するアルゴリズムは文字列を分割する場合もあるので、文字列単位で処理していると想定してはいけません。これは、XML が属性値、処理命令データ、コメントなどの任意の文字列や、このメソッドから報告されたデータ内にある任意の文字列を許可する場所に関連します。また、一般的には Java コードが国際化されたテキストを操作する場所に関連しますが、発行は XML に一意のものではありません。

一部のパーサは、このメソッドではなく ignorableWhitespace メソッドを使用して、要素コンテンツに含まれる空白文字を報告します。これは、妥当性を検証するパーサに「必須」の機能です。

パラメータ:
ch - XML 文書の文字
start - 配列内の開始位置
length - 配列から読み取られる文字数
例外:
SAXException - SAX 例外。ほかの例外をラップしている可能性がある
関連項目:
ignorableWhitespace(char[], int, int), Locator

ignorableWhitespace

void ignorableWhitespace(char[] ch,
                         int start,
                         int length)
                         throws SAXException
要素コンテンツに含まれる無視できる空白文字の通知を受け取ります。

妥当性を検証するパーサは、このメソッドを使用して、要素コンテンツに含まれる空白文字のチャンクを報告する必要があります (W3C XML 1.0 勧告セクション 2.10 を参照)。妥当性を検証しないパーサも、コンテンツモデルの構文解析および利用が可能である場合は、このメソッドを使用する場合があります。

SAX パーサは、連続するすべての空白文字を単一のチャンクとして、または複数のチャンクに分割して返します。ただし、ロケータから有益な情報を得るためには、単一のイベントに含まれる文字がすべて同じ外部実体のものでなければいけません。

アプリケーションは、指定された範囲外の配列を読み取ることはできません。

パラメータ:
ch - XML 文書の文字
start - 配列内の開始位置
length - 配列から読み取られる文字数
例外:
SAXException - SAX 例外。ほかの例外をラップしている可能性がある
関連項目:
characters(char[], int, int)

processingInstruction

void processingInstruction(String target,
                           String data)
                           throws SAXException
処理命令の通知を受け取ります。

パーサは、処理命令を検出するたびに 1 回ずつこのメソッドを呼び出します。処理命令は、メインの文書要素の前後に存在する可能性があります。

SAX パーサが、このメソッドを使用して XML 宣言を報告することはありません (XML 1.0、セクション 2.8)。また、テキスト宣言を報告することもありません (XML 1.0、セクション 4.3.1)。

処理命令データは、characters() のように 2 つ以上の char 値を必要とする文字列を持つ場合があります。

パラメータ:
target - 処理命令のターゲット
data - 処理命令を受けるデータ。データが提供されない場合は null。データには、ターゲットと自身を区別するための空白文字は含まれない
例外:
SAXException - SAX 例外。ほかの例外をラップしている可能性がある

skippedEntity

void skippedEntity(String name)
                   throws SAXException
スキップされた実体の通知を受け取ります。これは、要素開始タグやマークアップ宣言などのマークアップ構造内の実体参照に対しては呼び出されません。XML 勧告ではスキップされた外部実体の報告が必要です。また、SAX もマークアップ構造内を除く内部実体の拡張の有無を報告します。

パーサは、実体がスキップされるたびに 1 回ずつこのメソッドを呼び出します。妥当性を検証しないプロセッサは、(実体が外部 DTD サブセット内に定義されているなどの理由で) 宣言が検出されないと実体をスキップします。すべてのプロセッサは、http://xml.org/sax/features/external-general-entities プロパティと http://xml.org/sax/features/external-parameter-entities プロパティの値により、外部実体をスキップする可能性があります。

パラメータ:
name - スキップされた実体の名前。パラメータ実体の場合、この名前は「%」で始まる。外部 DTD サブセットの場合、文字列「[dtd]」で始まる
例外:
SAXException - SAX 例外。ほかの例外をラップしている可能性がある

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