ContentHandler はアプリケーション側でサブクラス化して利用する ことが前提になっています。パーサは入力ドキュメントのイベントにより、そ れぞれに対応する以下のメソッドを呼び出します。
locator) |
SAX パーサによるロケータの提供は強く推奨されています(必須ではありま せん)。もし提供する場合は、DocumentHandler インターフェースのどのメ ソッドよりも先にこのメソッドが呼び出されるようにしなければなりません。
アプリケーションはパーサがエラーを通知しない場合でもロケータによって、 すべてのドキュメント関連イベントの終了位置を知ることが可能になります。 典型的な利用方法としては、アプリケーション側でこの情報を使い独自のエ ラーを発生させること(文字コンテンツがアプリケーション側で決めた規則 に沿っていない場合等)があげられます。しかしロケータが返す情報は検索 エンジンなどで利用するものとしてはおそらく不充分でしょう。
ロケータが正しい情報を返すのは、インターフェースからイベントの呼出し が実行されている間だけです。それ以外のときは使用すべきでありません。
) |
SAX パーサはこのインターフェースやDTDHandler のどのメソッド (setDocumentLocator()を除く)よりも先にこのメソッドを一度だ け呼び出します。
) |
SAX パーサはこのメソッドを一度だけ、パース過程の最後に呼び出します。 パーサは(回復不能なエラーで)パース処理を中断するか、あるいは入力の 最後に到達するまでこのメソッドを呼び出しません。
prefix, uri) |
このイベントから返る情報は通常の名前空間処理では使われません。SAX
XML リーダは feature_namespaces
機能が有効になっている場合(デ
フォルト)、要素と属性名のプリフィックスを自動的に置換するようになっ
ています。
しかしアプリケーション側でプリフィックスを文字データや属性値の中で扱 う必要が生じることもあります。この場合プリフィックスの自動展開は保証 されないため、必要に応じ startPrefixMapping() や endPrefixMapping() イベントからアプリケーションに提供される 情報を用いてプリフィックスの展開をおこないます。
startPrefixMapping() と endPrefixMapping() イベン トは相互に正しい入れ子関係になることが保証されていないので注意が必要 です。すべての startPrefixMapping() は対応する startElement() の前に発生し、endPrefixMapping() イ ベントは対応する endElement() の後で発生しますが、その順序 は保証されていません。
prefix) |
詳しくは startPrefixMapping() を参照してください。このイベ ントは常に対応する endElement() の後で発生しますが、複数の endPrefixMapping() イベントの順序は特に保証されません。
name, attrs) |
name パラーメータには要素型の raw XML 1.0名を文字列として、 attrs パラメータには要素の属性を保持する Attributes インターフェース オブジェクトをそれぞれ指定します。attrs として渡されたオブジェ クトはパーサで再利用することも可能ですが、属性のコピーを保持するた めにこれを参照し続けるのは確実な方法ではありません。属性のコピーを保 持したいときは attrs オブジェクトの copy() メソッドを 用いてください。
name) |
name パラメータには startElement() イベント同様の要素 型名を指定します。
name, qname, attrs) |
name パラーメータには要素型を (uri,
localname)
のタプルとして、qname パラメータにはソース・
ドキュメントで用いられている raw XML 1.0名、attrs には要素の属
性を保持する AttributesNS インターフェース のインスタンスをそれぞれ指定します。要
素に関連付けられた名前空間がないときは、name コンポーネントの
uri が None
になります。attrs として渡されたオブジェ
クトはパーサで再利用することも可能ですが、属性のコピーを保持するた
めにこれを参照し続けるのは確実な方法ではありません。属性のコピーを保
持したいときは attrs オブジェクトの copy() メソッドを
用いてください。
feature_namespace_prefixes
機能が有効になっていなければ、パー
サで qname を None
にセットすることも可能です。
name, qname) |
name パラメータには startElementNS() イベント同様の要素 型を指定します。qname パラメータも同じです。
content) |
パーサは文字データのチャンクごとにこのメソッドを呼び出して通知します。 SAX パーサは一連の文字データを単一のチャンクとして返す場合と複数のチャ ンクに分けて返す場合がありますが、ロケータの情報が正しく保たれるよう に、一つのイベントの文字データは常に同じ外部エンティティのものでなけ ればなりません。
content はユニコード文字列、バイト文字列のどちらでもかまいませ
んが、expat
リーダ・モジュールは常にユニコード文字列を生成す
るようになっています。
注意: Python XML SIG が提供していた初期 SAX 1 では、このメソッドにもっ と JAVA 風のインターフェースが用いられています。しかし Python で採用 されている大半のパーサでは古いインターフェースを有効に使うことができ ないため、よりシンプルなものに変更されました。古いコードを新しいイン ターフェースに変更するには、古い offset と length パラメー タでスライスせずに、content を指定するようにしてください。
whitespace) |
妥当性検査をおこなうパーサは無視可能な空白文字(W3C XML 1.0 勧告のセ クション 2.10 参照)のチャンクごとに、このメソッドを使って通知しなけ ればなりません。妥当性検査をしないパーサもコンテンツモデルの利用とパー スが可能な場合、このメソッドを利用することが可能です。
SAX パーサは一連の空白文字を単一のチャンクとして返す場合と複数のチャ ンクに分けて返す場合がありますが、ロケータの情報が正しく保たれるよう に、一つのイベントの文字データは常に同じ外部エンティティのものでなけ ればなりません。
target, data) |
パーサは処理命令が見つかるたびにこのメソッドを呼び出します。処理命令 はメインのドキュメント要素の前や後にも発生することがあるので注意して ください。
SAX パーサがこのメソッドを使って XML 宣言(XML 1.0 のセクション 2.8)や テキスト宣言(XML 1.0 のセクション 4.3.1)の通知をすることはありません。
name) |
パーサはエンティティをスキップするたびにこのメソッドを呼び出します。
妥当性検査をしないプロセッサは(外部 DTD サブセットで宣言されているな
どの理由で)宣言が見当たらないエンティティをスキップします。すべての
プロセッサは feature_external_ges
および
feature_external_pes
属性の値によっては外部エンティティをスキッ
プすることがあります。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。