# 13.12 `xml.sax.xmlreader` -- XML パーサのインターフェース

バージョン2.0 以降で新規追加された 仕様です。

各 SAX パーサは Python モジュールとして `XMLReader` インターフェー スを実装しており、関数 `create_parser()` を提供しています。こ の関数は新たなパーサ・オブジェクトを生成する際、 `xml.sax.make_parser()` から引き数なしで呼び出されます。

class `XMLReader`( | )

  SAX パーサが継承可能な基底クラスです。

class `IncrementalParser`( | )

  入力ソースをパースする際、すべてを一気に処理しないで、途中でドキュメ ントのチャンクを取得したいことがあります。SAX リーダは通常、ファイル 全体を一気に読み込まずチャンク単位で処理するのですが、全体の処理が終 わるまで `parse()` は return しません。つまり、 IncrementalParser インターフェースは `parse()` にこのような排 他的挙動を望まないときに使われます。

  パーサのインスタンスが作成されると、feed メソッドを通じてすぐに、デー タを受け入れられるようになります。close メソッドの呼出しでパースが終 わると、パーサは新しいデータを受け入れられるように、reset メソッドを 呼び出されなければなりません。

  これらのメソッドをパース処理の途中で呼び出すことはできません。つまり、 パースが実行された後で、パーサから return する前に呼び出す必要がある のです。

  なお、SAX 2.0 ドライバを書く人のために、XMLReader インターフェースの parse メソッドがデフォルトで、IncrementalParser の feed、close、 reset メソッドを使って実装されています。

class `Locator`( | )

  SAX イベントとドキュメントの位置を関連付けるインターフェースです。 locator オブジェクトは DocumentHandler メソッドを呼び出している間 だけ正しい情報を返し、それ以外とのときに呼び出すと、予測できない結果 が返ります。情報を取得できない場合、メソッドは `None` を返すこ ともあります。

class `InputSource`( | [systemId])

  `XMLReader` がエンティティを読み込むために必要な情報をカプセ ル化します。

  このクラスには公開識別子、システム識別子、(場合によっては文字エンコー ディング情報を含む)バイト・ストリーム、そしてエンティティの文字スト リームなどの情報が含まれます。

  アプリケーションは `XMLReader.parse()` メソッドに渡す引き数、 または EntityResolver.resolveEntity の戻り値としてこのオブジェトを作 成します。

  `InputSource` はアプリケーション側に属します。 `XMLReader` はアプリケーションから渡された `InputSource` オブジェクトの変更を許していませんが、コピーを作り、それを変更するこ とは可能です。

class `AttributesImpl`( | attrs)

  `Attributes` interface ( 13.12.5 参照)の実装です。辞書風のオブジェクトで、 `startElement()` 内で要素の属性表示をおこないます。多くの辞書 風オブジェクト操作に加え、ほかにもインターフェースに記述されているメ ソッドを、多数サポートしています。このクラスのオブジェクトはリーダ によってインスタンスを作成しなければなりません。また、attrs は 属性名と属性値を含む辞書風オブジェクトでなければなりません。

class `AttributesNSImpl`( | attrs, qnames)

  `AttributesImpl` を名前空間認識型に改良したクラスで、 `startElementNS()` に渡されます。`AttributesImpl` の派 生クラスですが、namespaceURI と localname、この2つのタプ ルを解釈します。さらに、元のドキュメントに出てくる修飾名を返す多くの メソッドを提供します。このクラスは `AttributesNS` interface ( section 13.12.6 参照) の実装です。