XML を処理する


Tags: R6RS, XML, SXML

XML を処理するライブラリとしては SXML がよく使われる。 SXML は XML Information set の S 式による具象表現であり、 XML 文書とはおおよそ次のように対応する。

<head>
  <title>XML を処理する</title>
  <base href="http://tips.lisp-users.org/scheme/index.cgi" />
  <link rel="alternate" type="application/rss+xml" title="RSS" href="http://tips.lisp-users.org/scheme/index.cgi?c=rss" />
  <link rel="stylesheet" href="wiliki.css" type="text/css" />
</head>

===

(*TOP*
 (head
  (title "XML を処理する")
  (base (¥x0040;
         (href "http://tips.lisp-users.org/scheme/index.cgi")))
  (link (¥x0040;
         (type "application/rss+xml")
         (title "RSS")
         (rel "alternate")
         (href "http://tips.lisp-users.org/scheme/index.cgi?c=rss")))
  (link (¥x0040;
         (type "text/css")
         (rel "stylesheet")
         (href "wiliki.css")))
  ))

ここで、 `@' が R6RS で妥当なシンボル名ではないために、 Unicode スカラー値による表記になっていることに注意。これについては他のシンボルを使うことも検討されている。 Cf: SourceForge.net: ssax-sxml

XML の読み込みには ssax:xml->sxml 手続きを使う。

(import (rnrs) (sxml ssax))

(call-with-port (open-file-input-port "index.htm"
                                      (file-options)
                                      (buffer-mode block)
                                      (make-transcoder (latin-1-codec)))
  (lambda (p)
    (ssax:xml->sxml p '())))

読み込まれた XML ファイルはリストや文字列といった Lisp オブジェクトに変換されているため、 car や cdr といった標準の操作関数で手軽にあつかうことができる。