13.9 xml.sax -- SAX2 パーサのサポート

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

xml.sax パッケージはPython 用の Simple API for XML (SAX) イン ターフェースを実装した数多くのモジュールを提供しています。またパッケー ジには SAX 例外と SAX API 利用者が頻繁に利用するであろう有用な関数群も 含まれています。

その関数群は以下の通りです:

make_parser( [parser_list])
SAX XMLReader オブジェクトを作成して返します。パーサには最初 に見つかったものが使われます。parser_list を指定する場合は、 create_parser() 関数を含んでいるモジュール名のシーケンス を与える必要があります。parser_list のモジュールはデフォルトの パーサのリストに優先して使用されます。

parse( filename_or_stream, handler[, error_handler])
SAX パーサを作成してドキュメントをパースします。 filename_or_stream として指定するドキュメントはファイル名、ファ イル・オブジェクトのいずれでもかまいません。handler パラメータ には SAX ContentHandler のインスタンスを指定します。 error_handler には SAX ErrorHandler のインスタンスを指 定します。これが指定されていないときは、すべてのエラーで SAXParseException 例外が発生します。関数の戻り値はなく、 すべての処理は handler に渡されます。

parseString( string, handler[, error_handler])
parse() に似ていますが、こちらはパラメータ string で指定されたバッファをパースします。

典型的な SAX アプリケーションでは3種類のオブジェクト(リーダ、ハンドラ、 入力元)が用いられます(ここで言うリーダとはパーサを指しています)。言い 換えると、プログラムはまず入力元からバイト列、あるいは文字列を読み込み、 一連のイベントを発生させます。発生したイベントはハンドラ・オブジェクト によって振り分けられます。さらに言い換えると、リーダがハンドラのメソッ ドを呼び出すわけです。つまり SAX アプリケーションには、リーダ・オブジェ クト、(作成またはオープンされる)入力元のオブジェクト、ハンドラ・オブジェ クト、そしてこれら3つのオブジェクトを連携させることが必須なのです。前 処理の最後の段階でリーダは入力をパースするために呼び出されます。パース の過程で入力データの構造、構文にもとづいたイベントにより、ハンドラ・オ ブジェクトのメソッドが呼び出されます。

これらのオブジェクトは(通常アプリケーション側でインスタンスを作成しな い)インターフェースに相当するものです。Python はインターフェースという 明確な概念を提供していないため、形としてはクラスが用いられています。し かし提供されるクラスを継承せずに、アプリケーション側で独自に実装するこ とも可能です。InputSourceLocatorAttributesAttributesNSXMLReader の各インターフェースは xml.sax.xmlreader モジュールで定義されています。ハンドラ・ インターフェースは xml.sax.handler で定義されています。し ばしばアプリケーション側で直接インスタンスが作成される InputSource とハンドラ・クラスは利便性のため xml.sax にも含まれています。これらのインターフェースに関しては後に解説します。

このほかに xml.sax は次の例外クラスも提供しています。

例外 SAXException( msg[, exception])
XML エラーと警告をカプセル化します。このクラスには XML パーサとアプ リケーションで発生するエラーおよび警告の基本的な情報を持たせることが できます。また機能追加や地域化のためにサブクラス化することも可能です。 なお ErrorHandler で定義されているハンドラがこの例外のインス タンスを受け取ることに注意してください。実際に例外を発生させることは 必須でなく、情報のコンテナとして利用されることもあるからです。

インスタンスを作成する際 msg はエラー内容を示す可読データにし てください。オプションの exception パラメータは None も しくはパース用コードで補足、渡って来る情報でなければなりません。

このクラスはSAX 例外の基底クラスになります。

例外 SAXParseException( msg, exception, locator)
パースエラー時に発生する SAXException のサブクラスです。 パースエラーに関する情報として、このクラスのインスタンスが SAX ErrorHandler インターフェースのメソッドに渡されます。このク ラスは SAXException 同様 SAX Locator インターフェー スもサポートしています。

例外 SAXNotRecognizedException( msg[, exception])
SAX XMLReader が認識できない機能やプロパティに遭遇したとき発 生させる SAXException のサブクラスです。SAX アプリケーショ ンや拡張モジュールにおいて同様の目的にこのクラスを利用することもでき ます。

例外 SAXNotSupportedException( msg[, exception])
SAX XMLReader が要求された機能をサポートしていないとき発生さ せる SAXException のサブクラスです。SAX アプリケーション や拡張モジュールにおいて同様の目的にこのクラスを利用することもできま す。

参考:

SAX: The Simple API for XML
SAX API 定義に関し中心となっているサイトです。Java に よる実装とオンライン・ドキュメントが提供されています。実装 と SAX API の歴史に関する情報のリンクも掲載されています。

xml.sax.handler:モジュール
アプリケーションが提供するオブジェクトの インターフェース定義.

xml.sax.saxutils:モジュール
SAX アプリケーション向けの有用な関数群.

xml.sax.xmlreader:モジュール
パーサが提供するオブジェクトのインター フェース定義.



ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。