本文へジャンプ

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

送信されたすべての情報は安全です。

  • 閉じる [x]

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


送信されたすべての情報は安全です。

  • 閉じる [x]

XMLの論考: もう1つのPython/XMLツール・セット4Suite

体重400キロのゴリラのようなPython XMLツールの紹介

David Mertz, Ph.D (mertz@gnosis.cx), Author, Gnosis Software, Inc.
Photo of David Mertz
David Mertz氏は多くの分野で活躍しています。ソフトウェア開発や、それについて著述もしています。その他、学術政策理念について分野を問わず、関係する雑誌に記事も書いています。かなり以前には、超限集合論、ロジック、モデル理論などを研究していました。その後、労働組合組織者として活動していました。そして、David Mertz氏自身は人生の半ばにもまだ達していないと思っているので、これから何かほかの仕事をするかもしれません。

概要: Pythonモジュールからなる4Suiteセットは、「くろうとの選ぶ本格派」ツールです。広範で洗練された機能を持つ4Suiteツールは非常にパワフルで、プログラマーの学習カーブも急上昇します。4SuiteはPythonの最近のバージョンによって提供された基本的なXML機能以上のものを提供するだけでなく、いくつかの役立つオプションも含んでいます。著者Davidが4Suiteの最も注目すべき面を紹介し、あなたのPython/XMLツール・セットが4Suiteによってますます多機能になる様子を示します。

日付:  2002年 1月 01日
レベル:  初級 この記事の原文:  英語
アクティビティー: 2638 ビュー
お気軽にご意見・ご感想をお寄せください: 


私の以前のコラム魅力的な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単独でできる操作よりもずっと豊富な機能を提供するツール・セットです。主なツールには4XSLT4XPath4ODS4RDF があります。それぞれについて、後で説明します。

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以前ではそれほど明確に言えませんでしたが)。pulldomminidom の上に構築されていますが、選択的にサブツリーを構築できます。4SuitesのpDomletteminidom とほぼ同等ですが、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の方がシンプルで、shelvexml_pickle に似ているかもしれません (つまり、4ODSには固有のトランザクション機能がありません)。基本的に4ODSは、アプリケーションの複数回実行にまたがってPythonオブジェクトを永続化するための1つの方法です。(多くの言語では実装しにくい) 永続化には確かに価値がありますが、オブジェクト永続性は他のPythonツールを使ってでも十分に処理できます。4ODSが他とは異なる点は、(他のどのツールも実装しようとしない) ODMG Object Data Standard v3.0をとくに実装していることです .何よりも、ODMG標準は .odlファイルでオブジェクト形式の仕様を指定します。4ODSを使用すれば、必要に応じて、(shelvepickle のような) その場限りの方法よりも正式な永続オブジェクト設計が可能です。


4RDF

RDFは、XML文書の「メタデータ」を作成する1つの方法です。4RDFは、"Resource Description Framework" (RDF) を扱うライブラリーとコマンド行ツール (4rdf) で構成されています。当然、RDF文書そのものはXML形式です。RDFがどんなものかを理解するには、Uche Ogbuji氏によるdeveloperWorksコラムを読んでください (参考文献を参照)。


結論

4Suiteライブラリーは、Python/XMLプログラマーの「道具箱」の中にたくさんの高水準機能を追加します。4XSLTは、Python XMLツールの世界に見られる非常に大きなすき間を埋めてくれます。他の4Suiteツールは、もっと細かなニッチを占めています。それでも、あなたのアプリケーションがそうしたニッチを必要とするならば、検討してみる価値はあります。


参考文献

  • 4Suiteに関するさまざまな情報を得るには、まずホーム・ページhttp://4suite.org/ をご覧ください。ここでは4Suiteの最新バージョンとドキュメンテーションをダウンロードできるほか、FAQを調べたりメーリング・リストに参加することができます。

  • 最新版のPyXMLが、http://pyxml.sourceforge.net にあります。最新バージョンの4Suiteを使うためには、おそらくPyXMLの最新リリースが必要でしょう (すでにご使用のPythonよりも新しいバージョンが必要かもしれません)。もちろん、PyXMLの新しいバージョンには、便利な機能がいくつか追加されています。

  • 「魅力的なPython」 の一連のコラムの中で、私はPython用の汎用XMLツールを多数紹介してきました。最も新しい記事は、Python用XMLツールの再考です。

  • 以前のさまざまな記事でもほぼ同様の話題が扱われてきましたが、それらの記事が書かれた後にPythonやツールは多くの点で変化しています。それでも、Python用のXMLツールの紹介およびPythonのxml.domモジュールの分析を参考にすることができます。

  • 4XSLTと同じ位置を占めるツールに、XalanエンジンへのPythonラッパーを提供するPyanaがあります。Pyanaはかなり新しいプロジェクトですが、Xalanの方はよく確立されています。情報とダウンロードについては、http://sourceforge.net/projects/pyana/ をご覧ください。

  • XercesパーサーをラップするPIRXXにも注目してください。これは (SAXとともに) Python DOMオプションの1つとなっています。PIRXXについてはhttp://sourceforge.net/projects/pirxx/ をご覧ください。

  • RDFの正式な紹介はhttp://www.w3.org/RDF/ にあります。

  • Zopeは、ハイパフォーマンスのアプリケーション・サーバー、Webサーバー、およびコンテンツ・マネージメント・システムを含んでいるソフトウェア・システムです。詳しくは、http://zope.org/ をご覧ください。

  • IBMがLinuxコミュニティーに参加している様子を、http://www-1.ibm.com/linux/日本語サイト)でご覧ください。ここでは関連テクノロジーやサービスについて調べたり、Linuxニュースレターの申し込みをすることができます。

著者について

Photo of David Mertz

David Mertz氏は多くの分野で活躍しています。ソフトウェア開発や、それについて著述もしています。その他、学術政策理念について分野を問わず、関係する雑誌に記事も書いています。かなり以前には、超限集合論、ロジック、モデル理論などを研究していました。その後、労働組合組織者として活動していました。そして、David Mertz氏自身は人生の半ばにもまだ達していないと思っているので、これから何かほかの仕事をするかもしれません。

不正使用の報告のヘルプ

不正使用の報告

ありがとうございます。 このエントリーは、モデレーターの注目フラグが設定されました。


不正使用の報告のヘルプ

不正使用の報告

不正使用の報告の送信に失敗しました。


developerWorks: サイン・イン


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。 プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。 お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

表示名をお選びください

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

(半角英数字で3文字以上31文字以下にする必要があります)


「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


この記事を評価する

コメント

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML
ArticleID=240803
ArticleTitle=XMLの論考: もう1つのPython/XMLツール・セット4Suite
publish-date=01012002
author1-email=mertz@gnosis.cx
author1-email-cc=dwxed@us.ibm.com

タグ

Help
このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。

スライダーバーを使用することで、より多く(少なく)タグを表示します。

人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。

マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。

このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。