PythonでXML(Extensible Markup Language)を扱う方法を勉強してみようと思うが、実はXML初心者なので、まずXML全般について学んでみなきゃあかん。とりあえず手元にあるFoundations of Python Network Programmingの第八章、「XML and XML-RPC」を参考にしてみることにする。
—–
XMLをWikipediaを見てみると予想通りかなりの記述があったので、こちらを併せて参考にする。
Wikipedia : Extensible Markup Language
Extensible Markup Language (エクステンシブルマークアップランゲージ、XML、拡張可能なマーク付け言語、JIS X 4159:2002) は、データを記述するマークアップ言語を定義するためのメタ言語である。W3C (World Wide Web Consortium) により1998年2月にXML1.0の勧告が公開された。 2005年現在、W3C勧告の最新バージョンはXML1.1である。
まあマークアップだ、メタ言語だと色々書いてあるけども、要するにコンピュータに人間様の言葉を理解させるための文書記述方式の一つ、という理解が大事だと思う。日本国神奈川県横浜市という文字列をコンピュータに理解させるのは困難を伴うが、それを
XMLが開発される以前に、データを記述するマークアップ言語を定義するためのメタ言語として、SGMLという技術が既に存在していた。SGMLはいくつかの分野で普及していたが、仕様が複雑で処理系の開発が難しく、またSGML文書の処理が重いという欠点があった。XMLではこのようなSGMLの欠点を解決すべく文法を簡素化した。技術者にとってはXMLはSGMLよりも習得しやすい技術であり、また処理系の開発が容易になったことで低コストでXML技術を利用できるようになった。現在ではXMLは非常に広く普及している技術である。XMLに準拠した技術にXHTML、RSS、SOAP、SVGなどがある。
SGMLという規格が前身にあり、その仕様を簡素化した形でXMLが生まれた、と。XMLは仕様が決まっているとはいえ、HTMLのようにとか決まったタグを使わなければならない訳ではなく、どんなタグを自分で作っても良い。でも皆好き勝手やっていたら通信などに使うときにこまるので、「こういうXMLの書き方でデータやりとりしようね」と取り決めた規格として、XHTML、RSS、SOAP、SVGなどがある。そういうことだろう。XML-RPCもそういった技術のひとつだと思われるが今後勉強していく上で明らかになるだろう。
スキーマ言語によって文書構造を定義し、XML ParserでそのXML文書(XMLインスタンス)の妥当性を検証できる。スキーマ言語としてはDTD、XML Schema、RELAX NGなどがある。スキーマ言語によって文書構造が定義され、XML文書の妥当性を検証するソフトウェアによって妥当性が検証されたXML文書のことを「妥当なXML文書」(valid XML document) という。一方、XML文書のマークアップ規則に従って記述されただけの文書を「整形式XML文書」(well-formed XML document) という。
そして規格に則って正しく書かれたXML文書であるかどうかを確かめてくれるスキーマ言語という仕組みもあるようだ。
プログラムからXML文書を処理する方法として、DOMやSAXなどのAPIが標準化されている。他の方法でXML文書を処理することも可能である。スタイルを指定する技術(スタイルシート)としてXSLやCSSなどがある。
DOM(Document Object Model)というのは、XML文書に書かれた構造をツリー形式のデータ構造でまるごとメモリ上に読み込んでしまうAPI。よって大きなサイズのXMLなどに使用するのは向かないが、扱いが分かり易い。tree-based parserと呼ばれる場合もある模様。
SAX(Simple API for XML)というのは、event-based parserと呼ばれているらしく、XMLに書いてある内容を逐一解釈して、「○○と書いてあったらこの仕事、△△と書いてあったらあの仕事」とプログラムを動かすときに用いるらしい。多分antなんかはこっちの形式でXMLを扱っているんじゃないだろうか。
では次のエントリでは、PythonでDOMを使ってXMLを扱ってみる。
間違いがあったらごめんなさい。