おつぎは expat 。
topをつくろう
make, make install して楽するために xml-light を組み込んだインタプリタを作る。
ocamlmktop -o xmltop xml-light.cmatopを使おう
実際にパーズしてみる。 Xml.parse_file を使う。例として slashdot.rdf を持ってきてやってみる。Xml.xml の型は以下の通り
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/")], [ElementElement は (タグ名, Attribute を連想配列にしたもの, タグの間にはさんでいるXML要素)
type xml = | Element of (string * (string * string) list * xml list) | PCData of string
PCData は URL の文字列やテキスト文字列のようなただの文。 として表されている。いたってシンプルなパーズ。例
xml_light_test.ml
またまた slashdot.rdf のパーズ。一番上の記事の日付をとってくる
amazonaki.ml
Amazon の Web サービスで提供 されている XML をパーズ。商品名だけ表示する。
Cでかかれたライブラリのラッパーなのだ。文章を読み込んで、開始タグ、タグにはさまれた 文字列、終了タグに遭遇したときの処理をあらかじめ登録して、文章を与える。メモ
利点欠点
- 単純な処理は簡単にかける。あるタグの内容を表示とか
- 文章全体に対応するデータを生成するわけではないのでメモリ消費量がすくない
- 文章の頭から処理を開始できる。値を返すとなると文章全体が得られないと結果を 返せないが、これだとある程度結果を返せる
- 文章を、プログラムから使用できる値にしたいとか、文章からなにか要素を 取り出したいときは副作用を用いなければならず、関数型には向かない
例
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を使ってニュースティッカーをつくってみました。