### ナビゲーション

- 索引
- モジュール |
- 次へ |
- 前へ |
- Python 2.6ja2 documentation »
- Python 標準ライブラリ »
- 19. 構造化マークアップツール »

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

バージョン 2.0 で追加.

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

class `xml.sax.xmlreader.``XMLReader`

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

class `xml.sax.xmlreader.``IncrementalParser`

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

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

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

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

class `xml.sax.xmlreader.``Locator`

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

class `xml.sax.xmlreader.``InputSource`([systemId])

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

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

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

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

class `xml.sax.xmlreader.``AttributesImpl`(attrs)

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

class `xml.sax.xmlreader.``AttributesNSImpl`(attrs, qnames)

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

## 19.12.1. XMLReader オブジェクト

`XMLReader` は次のメソッドをサポートします。:

`XMLReader.``parse`(source)

  入力ソースを処理し、SAX イベントを発生させます。 source オブジェクトにはシステム識別子(入力ソースを特定する文字列 – 一般にファイル名やURL)、ファイル風オブジェクト、または `InputSource` オブジェクトを指定できます。 `parse()` から return された段階で、入力データの処理は完了、パーサ・オブジェクトは破棄ないしリセットされます。なお、現在の実装はバイト・ストリームのみをサポートしており、文字ストリームの処理は将来の課題になっています。

`XMLReader.``getContentHandler`()

  現在の `ContentHandler` を返します。

`XMLReader.``setContentHandler`(handler)

  現在の `ContentHandler` をセットします。 `ContentHandler` がセットされていない場合、コンテント・イベントは破棄されます。

`XMLReader.``getDTDHandler`()

  現在の `DTDHandler` を返します。

`XMLReader.``setDTDHandler`(handler)

  現在の `DTDHandler` をセットします。 `DTDHandler` がセットされていない場合、DTD イベントは破棄されます。

`XMLReader.``getEntityResolver`()

  現在の `EntityResolver` を返します。

`XMLReader.``setEntityResolver`(handler)

  現在の `EntityResolver` をセットします。 `EntityResolver` がセットされていない場合、外部エンティティとして解決されるべきものが、システム識別子として解釈されてしまうため、該当するものがなければ結果的にエラーとなります。

`XMLReader.``getErrorHandler`()

  現在の `ErrorHandler` を返します。

`XMLReader.``setErrorHandler`(handler)

  現在のエラー・ハンドラをセットします。 `ErrorHandler` がセットされていない場合、エラーは例外を発生し、警告が表示されます。

`XMLReader.``setLocale`(locale)

  アプリケーションにエラーや警告のロカール設定を許可します。

  SAX パーサにとって、エラーや警告の地域化は必須ではありません。しかし、パーサは要求されたロカールをサポートしていない場合、SAX 例外を発生させなければなりません。アプリケーションはパースの途中でロカールを変更することもできます。

`XMLReader.``getFeature`(featurename)

  機能 featurename の現在の設定を返します。その機能が認識できないときは、 `SAXNotRecognizedException` を発生させます。広く使われている機能名の一覧はモジュール `xml.sax.handler` に書かれています。

`XMLReader.``setFeature`(featurename, value)

  機能名 featurename に値 value をセットします。その機能が認識できないときは、 `SAXNotRecognizedException` を発生させます。また、パーサが指定された機能や設定をサポートしていないときは、 `SAXNotSupportedException` を発生させます。

`XMLReader.``getProperty`(propertyname)

  属性名 propertyname の現在の値を返します。その属性が認識できないときは、 `SAXNotRecognizedException` を発生させます。広く使われている属性名の一覧はモジュール `xml.sax.handler` に書かれています。

`XMLReader.``setProperty`(propertyname, value)

  属性名 propertyname に値 value をセットします。その機能が認識できないときは、 `SAXNotRecognizedException` を発生させます。また、パーサが指定された機能や設定をサポートしていないときは、 `SAXNotSupportedException` を発生させます。

## 19.12.2. IncrementalParser オブジェクト

`IncrementalParser` のインスタンスは次の追加メソッドを提供します。:

`IncrementalParser.``feed`(data)

  data のチャンクを処理します。

`IncrementalParser.``close`()

  ドキュメントの終わりを決定します。終わりに達した時点でドキュメントが整形式であるかどうかを判別、ハンドラを起動後、パース時に使用した資源を解放します。

`IncrementalParser.``reset`()

  このメソッドは close が呼び出された後、次のドキュメントをパース可能にするため、パーサのリセットするのに呼び出されます。close 後、reset を呼び出さずに parse や feed を呼び出した場合の戻り値は未定義です。

## 19.12.3. Locator オブジェクト

`Locator` のインスタンスは次のメソッドを提供します。:

`Locator.``getColumnNumber`()

  現在のイベントが終了する列番号を返します。

`Locator.``getLineNumber`()

  現在のイベントが終了する行番号を返します。

`Locator.``getPublicId`()

現在の文書イベントの公開識別子を返します。

`Locator.``getSystemId`()

  現在のイベントのシステム識別子を返します。

## 19.12.4. InputSource オブジェクト

`InputSource.``setPublicId`(id)

  この `InputSource` の公開識別子をセットします。

`InputSource.``getPublicId`()

  この `InputSource` の公開識別子を返します。

`InputSource.``setSystemId`(id)

  この `InputSource` のシステム識別子をセットします。

`InputSource.``getSystemId`()

  この `InputSource` のシステム識別子を返します。

`InputSource.``setEncoding`(encoding)

  この `InputSource` の文字エンコーディングをセットします。

  指定するエンコーディングは XML エンコーディング宣言として定義された文字列でなければなりません(セクション 4.3.3 の XML 勧告を参照)。

  `InputSource` のエンコーディング属性は、 `InputSource` がたとえ文字ストリームを含んでいたとしても、無視されます。

`InputSource.``getEncoding`()

  この `InputSource` の文字エンコーディングを取得します。

`InputSource.``setByteStream`(bytefile)

  この入力ソースのバイトストリーム(Python のファイル風オブジェクトですが、バイト列と文字の相互変換はサポートしません)を設定します。

  なお、文字ストリームが指定されてもSAX パーサは無視し、バイト・ストリームを使って指定された URI に接続しようとします。

  アプリケーション側でバイト・ストリームの文字エンコーディングを知っている場合は、setEncoding メソッドを使って指定する必要があります。

`InputSource.``getByteStream`()

  この入力ソースのバイトストリームを取得します。

  getEncoding メソッドは、このバイト・ストリームの文字エンコーディングを返します。認識できないときは None を返します。

`InputSource.``setCharacterStream`(charfile)

  この入力ソースの文字ストリームをセットします(ストリームは Python 1.6 の Unicode-wrapped なファイル風オブジェクトで、ユニコード文字列への変換をサポートしていなければなりません)。

  なお、文字ストリームが指定されても SAX パーサは無視、システム識別子とみなし、バイト・ストリームを使って URI に接続しようとします。

`InputSource.``getCharacterStream`()

  この入力ソースの文字ストリームを取得します。

## 19.12.5. The `Attributes` インタフェース

`Attributes` オブジェクトは `copy()`, `get()`, `has_key()`, `items()`, `keys()`, `values()` などを含む、マッピング・プロトコルの一部を実装したものです。さらに次のメソッドも提供されています。:

`Attributes.``getLength`()

  属性の数を返す。

`Attributes.``getNames`()

  属性の名前を返す。

`Attributes.``getType`(name)

  属性名 name のタイプを返す。通常は `'CDATA'`

`Attributes.``getValue`(name)

  属性 name の値を返す。

## 19.12.6. `AttributesNS` インタフェース

このインタフェースは `Attributes` インタフェース (The Attributes インタフェース 参照) のサブタイプです。 Attributes インタフェースがサポートしているすべてのメソッドは `AttributesNS` オブジェクトでも利用可能です。

そのほか、次のメソッドがサポートされています。:

`AttributesNS.``getValueByQName`(name)

  修飾名の値を返す。

`AttributesNS.``getNameByQName`(name)

  修飾名 name に対応する `(namespace, localname)` のペアを返す。

`AttributesNS.``getQNameByName`(name)

  `(namespace, localname)` のペアに対応する修飾名を返す。

`AttributesNS.``getQNames`()

  すべての属性の修飾名を返す。

### ナビゲーション

- 索引
- モジュール |
- 次へ |
- 前へ |
- Python 2.6ja2 documentation »
- Python 標準ライブラリ »
- 19. 構造化マークアップツール »