現状でのまとめ。STP。
javaのXOMにインスパイアされたもの。
STPの生成とSerialize。
---
(defparameter *stp-ex* (cxml:parse #p"example-100.xml" (stp:make-builder)))
(stp:serialize *stp-ex* (cxml:make-character-stream-sink *standard-output*))
---
データ構造はDOMに似ている。nodeを基本とする。
map-recursively, do-recursively, find-recursively,
filter-recursively
などの再帰関数が用意されている。
---
CL-USER(21): (stp:filter-recursively (stp:of-name "bar") *stp-ex*)
(#.(CXML-STP:ELEMENT
#| :PARENT of type ELEMENT |#
:ATTRIBUTES '(#.(CXML-STP:ATTRIBUTE
#| :PARENT of type ELEMENT |#
:VALUE "default"
:LOCAL-NAME "space"
:NAMESPACE-PREFIX "xml"
:NAMESPACE-URI "http://www.w3.org/XML/1998/namespace"))
:BASE-URI "file://+/Users/aka/scratch/cl/xml/example-100.xml"
:CHILDREN '(#.(CXML-STP:TEXT #| :PARENT of type ELEMENT |# :DATA " "))
:LOCAL-NAME "bar")
#.(CXML-STP:ELEMENT
#| :PARENT of type ELEMENT |#
:ATTRIBUTES '(#.(CXML-STP:ATTRIBUTE
#| :PARENT of type ELEMENT |#
:VALUE "preserve"
:LOCAL-NAME "space"
:NAMESPACE-PREFIX "xml"
:NAMESPACE-URI "http://www.w3.org/XML/1998/namespace"))
:BASE-URI "file://+/Users/aka/scratch/cl/xml/example-100.xml"
:CHILDREN '(#.(CXML-STP:TEXT #| :PARENT of type ELEMENT |# :DATA " "))
:LOCAL-NAME "bar"))
CL-USER(22):
---
で、このあと、CLっぽいAPIが続く、また、STPの構成物(element他)を生
成したり操作するAPIが続く。まあ、これらは難しくないのではしょる。
STPからDOMやXMLSに変換できる。
---
(stp:serialize *stp-ex* (cxml-dom:make-dom-builder))
(stp:serialize *stp-ex* (cxml-xmls:make-xmls-builder))
---
まさにDOMの代替物という感じであった。これ以上は実際に使うときにや
ることにする。
次回はcxmlにおけるschemaとvalidatorの取り扱いを確認する。
こつこつ。
0 件のコメント:
コメントを投稿