レベル: 初級 David Mertz, Ph.D (mertz@gnosis.cx), Author, Gnosis Software, Inc.
2002年 1月 01日 Pythonモジュールからなる4Suiteセットは、「くろうとの選ぶ本格派」ツールです。広範で洗練された機能を持つ4Suiteツールは非常にパワフルで、プログラマーの学習カーブも急上昇します。4SuiteはPythonの最近のバージョンによって提供された基本的なXML機能以上のものを提供するだけでなく、いくつかの役立つオプションも含んでいます。著者Davidが4Suiteの最も注目すべき面を紹介し、あなたのPython/XMLツール・セットが4Suiteによってますます多機能になる様子を示します。
私の以前のコラム魅力的なPython の各記事 (参考文献のIBM developerWorks XML Zoneを参照) では、標準ディストリビューションに含まれるPython XMLモジュールをご紹介しました。さらに、いくつかの役立つ (しかし機能のかなり限定された) 拡張機能を提供する他のモジュールも紹介しました。その中で私が取り上げなかったものは、体重400キロのゴリラのようなPython XMLツール、4Suiteです。
4Suiteそのものは、Fourthought, Inc. 社 (中でも、私の同僚のdeveloperWorksコラムニストUche Ogbuji氏) によって手がけられている、壮大なオープン・ソース・プロジェクトの半分でしかありません。残りの半分は4Suite Serverです。機能の豊富な4Suiteの操作法を理解するのにかなり時間がかかるとすれば、4Suite Serverにいたっては、ただ信じて使ってみるしかありません。この点で、4Suite Serverはもう1つの巨大なPythonサーバー・プロジェクトZopeによく似ています。4Suite ServerはXMLの保管と処理を行うきわめて汎用的なバックエンドであり、さまざまなXML文書ストアへのインターフェース機能も提供します。4Suite Serverを使えばXMLを既存のプロセスやシステムに統合するのが容易になり、すでに使用中のビジネス・ロジック (およびデータ・フォーマット) をそのまま利用できます。
4Suite Serverの機能はあまりに豊富なので、このコラムでは説明し切れません。今回はただ4Suiteだけを取り上げますが、それでも、非常に興味深い部分 (および、非常に役立つと思われる部分) をご紹介できるに過ぎません。
4Suiteには、既存のPyXMLを拡張した機能が含まれています。拡張された機能の1つは (まだベータの)cDomlette モジュールです。これは、PyXMLのデフォルトDOM実装よりもずっと高速に複雑なDOMツリーを作成できます。しかし4Suiteの大部分を占めるのは、PyXML単独でできる操作よりもずっと豊富な機能を提供するツール・セットです。主なツールには4XSLT、4XPath、4ODS、4RDF があります。それぞれについて、後で説明します。
4Suiteの初歩
4Suiteの第1歩は、Webサイト (参考文献を参照) から4Suiteディストリビューション (配布版) をダウンロードすることです。さらに、ドキュメンテーション・ファイル4Suite-docs-0_11_1.zip (またはtarball版、これが現在のバージョンです) を入手するとよいでしょう。このdocsドキュメンテーションには、4Suiteツールに関する説明が重複している部分もありますが、ソース・アーカイブにある資料よりもさらに詳しいようです。とくに、ドキュメンテーション・アーカイブ版には、ツールの適切な例が入った役立つ2つのディレクトリーdemo およびdemos が含まれています。
おそらく、Pythonインストールに含まれていたPyXML配布版をアップデートする必要があるでしょう。インストールの詳細は、ご使用のプラットフォームやPythonのバージョンによって異なるようです。しかし、最も安全な方法は、まずSourceForge.net (参考文献を参照) から最新のPyXML配布版をダウンロードして、その後で4Suiteをインストールすることです。
必須部分のインストールが終わった時点で、いくつかのコマンド行ツール、および多数の新しいモジュールが使用できるはずです。ほとんどのモジュールはFt 階層に入っていますが、xml 階層に一部のアップデートが入っているかもしれません。
DOMについて一言
PythonのDOMエンジンの多さには、やや圧倒されます。どれを使用すべきか明確に判断できない面もありますが、4Suiteをインストールすればオプションがさらに増えます。4Suiteがインストールされた状態で、以下のようなほぼ同等のインポートの中から、いずれかを使用することができます。
PythonでDOMを使用するいくつかの方法
>>>from xml.domimport minidom as dom1
>>>from xml.domimport pulldom as dom2
>>>from Ft.Libimport pDomlette as dom3
>>>from Ft.Libimport cDomlette as dom4
|
「標準的」な方法は、minidom を使用することです (Python 2.0以前ではそれほど明確に言えませんでしたが)。pulldom はminidom の上に構築されていますが、選択的にサブツリーを構築できます。4SuitesのpDomlette はminidom とほぼ同等ですが、APIが多少異なるかもしれません。しかも、4SuiteツールはpDomlette に依存します。cDomlette を使えばDOMツリーの構築がずっと高速になるかもしれませんが、まだベータですから、他のモジュールとの間に完全なAPI互換性がないかもしれません。
頭がこんがらがっていますか ? 実は、私もです。しかし一般的に言って、4Suiteの使用を前提にできないなら、Pythonの標準的インポートだけを使用してください。4Suiteを使用するのであれば、必要なDOMをインポートしてくれる高水準モジュールを使用できるでしょう。
4XSLT
この最も汎用的な4Suiteツールは、XSLT変換を行います。4XSLT はコマンド行バージョンです。そのソースは、調べるに値します。
4XSLT Pythonコマンド行スクリプト
#!/usr/bin/env python
from xml.xsltimport _4xslt
_4xslt.XsltCommandLineApp().run()
|
コマンド行バージョンのXSLT変換エンジンを作成するために必要なのは、たったこの2行です。実装ステップは、CGIや他のWebサーバーの場合も、バッチ処理の一部として実行する場合も、ほぼ同様でしょう。コマンド行ツールは、Sablotron (sabcmd)、Saxon、Xalanなどのツールと同様に、4Suiteパッケージの中から入手できます。もちろん、Pythonで書かれたツールを使うのが便利です (とくにPythonプログラマーにとっては)。
4XSLTで使用できるコマンド行オプションを表示するには、--help オプションを渡します。使用できるオプションは、他のコマンド行プロセッサーとほぼ同じです。妥当性検査は任意選択であり、URLを引数として指定できます。これによって、インターネット上のどんなXML文書をどんな形で変換することもでき、便利です。たとえば、次のようにします。
コマンド行ツールとして実行する4XSLT
% 4xslt -i http://gnosis.cx/publish/mertz/chap5.xml
http://gnosis.cx/publish/mertz/chapter.xsl
|
上記によってSTDOUT に送られるHTML文書は、Sablotron (sabcmd) によって静的に生成された (http://gnosis.cx/publish/mertz/chap5.html にある) HTMLと厳密に同じになるはずです (参考文献のXMLの論考: 第5回 を参照)。
4XSLT変換をより大きなPythonアプリケーションに統合するのも、これと同じくらい簡単です。基本的に、プログラマーはスタイル・シートを1つ選択して、それからXML文書の変換を実行するだけです。たとえば、次のようにします。
4XSLTを使用するPythonサンプル・コードの一部
from xml.xslt.Processorimport Processor
proc1,proc2 = Processor(),Processor()
proc1.appendStylesheetUri('mime.xsl')
result1 = processor.runUri('message.xml')
proc2.appendStylesheetString(open('mime.xsl').read())
result2 = proc2.runString(open('message.xml').read())
print result1,result2
|
さらに、4XSLT変換はメモリー内のDOMツリーに基づいていますから、XSLT変換をツリーのただ1つのノードに適用するのも同様に簡単です。変換に従ってDOMサブツリーを変形したい場合は、Processor() メソッド.runNode() を使用してください。変換の結果だけを戻したい場合には.execute() を使用します。
4xupdate
4Suiteパッケージに含まれる別の小さなコマンド行ツール・ユーティリティーは、4xupdate といいます。XUpdate仕様はSQLのUPDATE またはINSERT ステートメントと類似していますが、これはリレーショナル・データベース用ではなくXML文書用です。この仕様の基になっている考え方は、SAXやDOMの場合のように多くのカスタム・プログラミングを必要とせずに、XML文書のごく一部を変更するための軽量な手法を提供することです。XUpdateの命令自体、ちょうどXSLTのようにXMLで指定されます。そして、操作対象の文書位置を識別するためにXPathパスが使われます。
4XPath
XPathは、XML文書内のノード・パスを記述するための汎用的な仕様です。XPathはXSLTにとって不可欠ですが、他のXMLテクノロジーの一部として使用することもできます。たとえば、私が以前のコラムで大きなXML文書用のindexerを開発しようとしたとき、XML文書の各部分を記述するために必然的にXPathを選択しました。
4Suiteに付属のxml.xpath モジュールは、XPath記述に関連した追加的プログラミング用のラッパーを提供します。XPathはDOMフレームワークを必要としませんが、4XPathにはDOMツリーの作業ができるいくつかのユーティリティーが含まれています。XPath記述をDOMツリー (またはサブツリー) に対して実行でき、記述にマッチするノード・オブジェクトのリストが戻されます。たとえば、次のようにします。
XPathノード・マッチを処理するPythonの一部
from xml.dom.ext.readerimport PyExpat
from xml.xpathimport Evaluate
reader = PyExpat.Reader()
dom = reader.fromString(some_function_to_get_XML())
path_descript ='/this/that/other'
for nodein Evaluate(path_descript, dom.documentElement):
# do something with each matched node
|
上記のコード断片は4Suiteデモ・プログラムを改変したものですが、DOMツリーを再帰的に走査し、親が<that>、その上の親が<this> である<other> 要素を検出します。しかし一般的には、目的のノードのXPath記述をただ渡すだけの方がずっと簡単です。
4ODS
この記事ではODSについてごく簡単にしか触れません。その主な理由は、4ODSが実際にはXML固有のテクノロジーではないからです。さらに、このコラムには収まり切らないほど多くの副次的問題が存在するからです。4ODSが4Suiteに含まれる主な理由は、4Suite Serverの側で4ODSが使用できることを想定しているからです。
4ODSの機能は、ZODBにいくらか似ています。実際、ある意味では4ODSの方がシンプルで、shelve やxml_pickle に似ているかもしれません (つまり、4ODSには固有のトランザクション機能がありません)。基本的に4ODSは、アプリケーションの複数回実行にまたがってPythonオブジェクトを永続化するための1つの方法です。(多くの言語では実装しにくい) 永続化には確かに価値がありますが、オブジェクト永続性は他のPythonツールを使ってでも十分に処理できます。4ODSが他とは異なる点は、(他のどのツールも実装しようとしない) ODMG Object Data Standard v3.0をとくに実装していることです .何よりも、ODMG標準は .odlファイルでオブジェクト形式の仕様を指定します。4ODSを使用すれば、必要に応じて、(shelve やpickle のような) その場限りの方法よりも正式な永続オブジェクト設計が可能です。
4RDF
RDFは、XML文書の「メタデータ」を作成する1つの方法です。4RDFは、"Resource Description Framework" (RDF) を扱うライブラリーとコマンド行ツール (4rdf) で構成されています。当然、RDF文書そのものはXML形式です。RDFがどんなものかを理解するには、Uche Ogbuji氏によるdeveloperWorksコラムを読んでください (参考文献を参照)。
結論
4Suiteライブラリーは、Python/XMLプログラマーの「道具箱」の中にたくさんの高水準機能を追加します。4XSLTは、Python XMLツールの世界に見られる非常に大きなすき間を埋めてくれます。他の4Suiteツールは、もっと細かなニッチを占めています。それでも、あなたのアプリケーションがそうしたニッチを必要とするならば、検討してみる価値はあります。
参考文献
著者について  | 
|  | David Mertz氏は多くの分野で活躍しています。ソフトウェア開発や、それについて著述もしています。その他、学術政策理念について分野を問わず、関係する雑誌に記事も書いています。かなり以前には、超限集合論、ロジック、モデル理論などを研究していました。その後、労働組合組織者として活動していました。そして、David Mertz氏自身は人生の半ばにもまだ達していないと思っているので、これから何かほかの仕事をするかもしれません。 |
記事の評価
|