To Home
Last modified: Sun Jan 21 16:03:29 JST 2007

OcamlでXML処理

XML Light を使ってみた。(いつもどおりかよ...)

topをつくろう
make, make install して楽するために xml-light を組み込んだインタプリタを作る。
  ocamlmktop -o xmltop xml-light.cma

topを使おう
実際にパーズしてみる。 Xml.parse_file を使う。例として slashdot.rdf を持ってきてやってみる。
Xmamewo|15:52|~/download/xml/xml-light2> ./xmltop 
        Objective Caml version 3.06

# open Xml;;
# let x = Xml.parse_file "slashdot.rdf";;
val x : Xml.xml =
  Element
   ("rdf:RDF",
   [("xmlns:rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
    ("xmlns", "http://purl.org/rss/1.0/");
    ("xmlns:dc", "http://purl.org/dc/elements/1.1/");
    ("xmlns:slash", "http://slashcode.com/rss/1.0/modules/Slash/");
    ("xmlns:taxo", "http://purl.org/rss/1.0/modules/taxonomy/");
    ("xmlns:syn", "http://purl.org/rss/1.0/modules/syndication/")],
   [Element
     ("channel", [("rdf:about", "http://slashdot.jp/")],
     [Element
Xml.xml の型は以下の通り
type xml = 
  | Element of (string * (string * string) list * xml list)
  | PCData of string
Element は (タグ名, Attribute を連想配列にしたもの, タグの間にはさんでいるXML要素)
PCData は URL の文字列やテキスト文字列のようなただの文。 として表されている。いたってシンプルなパーズ。


xml_light_test.ml
  またまた slashdot.rdf のパーズ。一番上の記事の日付をとってくる
amazonaki.ml
  Amazon の Web サービスで提供 されている XML をパーズ。商品名だけ表示する。

おつぎは expat 。
Cでかかれたライブラリのラッパーなのだ。文章を読み込んで、開始タグ、タグにはさまれた 文字列、終了タグに遭遇したときの処理をあらかじめ登録して、文章を与える。
利点
  1. 単純な処理は簡単にかける。あるタグの内容を表示とか
  2. 文章全体に対応するデータを生成するわけではないのでメモリ消費量がすくない
  3. 文章の頭から処理を開始できる。値を返すとなると文章全体が得られないと結果を 返せないが、これだとある程度結果を返せる
欠点
  1. 文章を、プログラムから使用できる値にしたいとか、文章からなにか要素を 取り出したいときは副作用を用いなければならず、関数型には向かない


  expat_test.ml
メモ
xmllint は XMLの文法エラーチェックにつかえる。
リンク
Motion Twin :: Departement technique - XML Light
Ocaml Software
  Ocaml Expat を配布している
XML tools
  Caml humps の XML コーナー
xmllexer
  CWNより。さわったことはないです。
gui-*.tar.gz のなかの rdf/slash_with_time.ml など
  XMLを使ってニュースティッカーをつくってみました。

作者: 増山隆 address
To Home
Valid HTML 4.01!