sxml.tools
- SXML構造を操作する ¶現在のバージョンは、sxml-toolsのCVSのリビジョン3.13から導出されています。
マニュアルのエントリは主に、オリジナルのソースコードから導出されています。
• SXMLの述語: | ||
• SXMLへのアクセッサ: | ||
• SXMLのモディファイヤ: | ||
• SXPathの補助的ユーティリティ: | ||
• SXMLからマークアップへの変換: |
{sxml.tools
}
与えられた要素objが空なら#t
を返す述語です。
空要素は、ネストした要素、テキストノード、PI
、コメントや実体を
持ちませんが、属性や名前空間IDは持つかもしれません。
それは、XMLのempty-element
のSXML版です。
{sxml.tools
}
与えられたobjが浅く正規化されたSXML要素であれば#t
を返します。
要素それ自体は正規化されていなければなりませんが、ネストした要素は
テストされません。
{sxml.tools
}
与えられたobjが正規化されたSXML要素であれば#t
を返します。
要素それ自体とその全てのネストした要素が正規化されていなければなりません。
{sxml.tools
}
与えられたobjが浅く最小化されたSXML要素であれば#t
を返します。
要素それ自体は最小化されていなければなりませんが、そのネストした要素は
テストされません。
{sxml.tools
}
与えられたobjが最小化されたSXML要素であれば#t
が返されます。
要素それ自体とその全てのネストした要素が最小化されていなければなりません。
{sxml.tools
}
与えられたSXMLノードの名前を返します。
これは単にcar
のエイリアスに過ぎませんが、カプセル化のために導入されています。
{sxml.tools
}
sxml:name
の、与えられたobjがSXML要素ではない場合は#f
を返す
バージョンです。objがSXML要素であれば、その名前を返します。
{sxml.tools
}
sxml:name
の、与えられたobjがSXMLノードでない場合は#f
を返す、
安全なバージョンです。objがSXMLノードであれば、その名前を返します。
{sxml.tools
}
与えられたobjの完全修飾名(Namespaces in XML production [6])のローカルパート、
つまりその完全修飾名を“:
”で分割した後ろの部分を返します。
与えられたノードの名前がNCName
(Namespaces in XML production [4])であれば、
それをそのまま返します。
SXMLの名前はシンボルですが、この関数は文字列を返すことに注意して下さい。
{sxml.tools
}
与えられた名前の名前空間ID部分を返します。与えられた名前がLocalNameの
場合は#f
を返します。
{sxml.tools
}
与えられたSXML要素かノードセット(テキストノードと要素ノードのみ)の内容を、
ドキュメントオーダーにしたがった文字列のリストとネストした要素として
返します。このリストは、objが空要素や空リストの場合は空です。
{sxml.tools
}
正規化されたSXML要素の全ての内容を、attr-listとaux-listを除いて
返します。
したがってそれは、PI
、COMMENT
、ENTITY
ノードとともに、sxml:content
によって返されるTEXT
やELEMENT
も含みます。
戻り値は、ドキュメントオーダーにしたがったノードのリストか、
objが空要素や空リストの場合は空リストになります。
この関数は、sxml:content
よりも高速です。
SXMLの通常のフォームでは、1つの要素は次のようなリストで表現されます。
(name attr-list aux-list content ...)
attr-listは@
で始まるリストで、aux-listは@@
で
始まるリストです。
最小化されたフォームでは、aux-listは空であれば省略できます。 attr-listは、それが空でかつaux-listがなければ省略できます。
以下の手続きは、attr-listとaux-listを抽出するものです。
{sxml.tools
}
与えられたobjのattr-listを返します。
attr-listが存在しなければ#f
を返します。
{sxml.tools
}
attr-listをリストにラップして返します。
attr-listが存在せずaun-listがある場合は’((@))
を返します。
両方とも存在しない場合には’()
を返します。
{sxml.tools
}
与えられたobjのaux-listを返します。
attr-listが存在しなければ#f
を返します。
{sxml.tools
}
aux-listをリストにラップして返します。
aux-listが存在しなければ’()
を返します。
{sxml.tools
}
与えられた要素かノードセットの属性のリストを返します。
((sxpath '(@ *)) obj)
と類似です。
属性のリストがない場合は空リストが返されます。
{sxml.tools
}
与えられた要素かノードセットの補助ノードのリストを返します。
((sxpath '(@@ *)) obj)
と類似です。
補助ノードのリストがない場合は空リストが返されます。
{sxml.tools
}
与えられた要素かノードセットの補助ノードのリストを返します。
((sxpath '(@@ *)) obj)
と類似です。
補助ノードのリストがない場合は空リストが返されます。
-u
が付くものは、正規化されていないSXMLノードに対しても
使えるということを示しています。(’u’は’universal’の意味です。)
{sxml.tools
}
与えられたSXML要素objでaux-nameという名前の付いている最初の
補助ノードを返します。そのようなノードがない場合は#f
を返します。
注意: 複数のノードがあっても最初に見つかったノードのみを
返します。したがって、ユニークな名前を持っているノード群に対して
使われることを意図しています。
{sxml.tools
}
与えられたSXML要素objでaux-nameとうい名前の付いている補助ノードの
リストを返します。そのようなノードがなければ’()
を返します。
{sxml.tools
}
与えられたSXML要素objのattr-nameという属性へのアクセッサです。
戻り値は、その属性が存在すればその属性の値、与えられた要素に
そのような属性がなければ#f
です。
{sxml.tools
}
与えられたSXML要素objのattr-nameという数値の属性への
アクセッサです。
戻り値は、その属性が存在してその値がstring->number
により数値へ
変換できる場合はその属性を数値としてその属性の値、
与えられた要素にそのような属性がないかその値が数値へ変換できない場合は
#f
です。
{sxml.tools
}
与えられたSXML要素objのattr-nameという名前の属性への
アクセッサです。objは、(通常はSXML要素の内容である)
属性リストやノードセットでも構いません。
戻り値は、その属性が存在すればその属性の値、与えられた要素に
そのような属性がない場合は#f
です。
-u
が付くものは、正規化されていないSXMLノードに対しても
使えるということを示しています。(’u’は’universal’の意味です。)
{sxml.tools
}
与えられた要素の名前空間のリストを返します。
((sxpath '(@@ *NAMESPACES* *)) obj)
と類似です。
名前空間のリストがない場合は空リストが返されます。
{sxml.tools
}
SXML要素objで、与えられたnamespace-idに対応する名前空間の
連想リストのリストを返します。
((sxpath '(@@ *NAMESPACES* namespace-id)) obj)
と類似です。
与えられたnamespace-idに対応する名前空間の連想リストがない場合は
空リストが返されます。
{sxml.tools
}
与えられたnamespace-idに対応するURIを返します。
与えられたnamespace-idに対応する名前空間の連想リストがない場合は
#f
を返します。
{sxml.tools
}
与えられた名前空間URIに対応する名前空間IDを返します。
{sxml.tools
}
与えられた名前空間連想リストに対応する名前空間IDを返します。
{sxml.tools
}
与えられた名前空間連想リストに対応するURIを返します。
{sxml.tools
}
与えられた名前空間連想リストに対応する名前空間接頭辞を返します。
与えられた名前空間IDの(XML文書における)オリジナルの接頭辞は、
それが名前空間IDと異なる場合は、名前空間連想リストの3番目の要素として
格納されなければなりません。
名前空間連想リストでオリジナルの接頭辞が省略されている場合は、
代わりに名前空間IDが使われます。
正規化されたSXMLデータのコンストラクタやミューテータです。 これらの関数は、正規化されたSXMLデータに最適化されています。 任意の正規化されていないSXMLデータには適用できません。
ほとんどの関数には2つのバージョンがあります。
sxml:change-content!
が挙げられます。
sxml:change-content
が挙げられます。
{sxml.tools
}
与えられたSXML要素の内容を、new-contentに変更します。
new-contentが空リストの場合は、objは空要素に変更されます。
結果のSXML要素は正規化されています。
{sxml.tools
}
結果のSXML要素は正規化されています。
new-attrlistが空の場合は、objのcadrは(@)
になります。
{sxml.tools
}
SXML要素の名前を破壊的に変更します。
{sxml.tools
}
属性attrが追加されたSXML要素objを返します。
与えられた名前の属性がすでに存在する場合は#f
を返します。
attrは(attr-name attr-value)
です。
sxml:add-attr!
に対応する純粋関数的な関数です。
{sxml.tools
}
要素objに属性attrを追加します。
与えられた名前の属性がすでに存在する場合は#f
を返します。
結果のSXMLノードは正規化されています。
sxml:add-attr
に対応するその場で更新する関数です。
{sxml.tools
}
属性attrの値が変更されたSXML要素objを返します。
与えられた名前の属性がない場合は#f
を返します。
attrは(attr-name attr-value)
です。
{sxml.tools
}
要素objの属性の値を変更します。
attrは(attr-name attr-value)
です。
そのような属性がない場合は#f
を返します。
{sxml.tools
}
要素objの属性attrをセットします。
そのような属性がない場合は新しい属性として追加されます。
{sxml.tools
}
補助ノードaux-nodeが追加されたSXML要素objを返します。
{sxml.tools
}
要素objに補助ノードaux-nodeを追加します。
{sxml.tools
}
与えられたSXML要素objとその子孫について、空のリストである属性
および補助リストを排除します(最小化)。
最小化され、正規化されたSXML要素が返されます。
{sxml.tools
}
与えられたSXML要素objとその子孫について、空リストである属性と、
全ての補助リストを削除します。
最小化され、正規化されたSXML要素が返されます。
これらは、SXPathの機能を拡張する便利なユーティリティです。
{sxml.tools
}
SXMLノードセットに’親へのポインタ’を追加したものを返します。
親へのポインタは、(*PARENT* thunk)
というフォームを持つ
補助ノードです。thunkは親要素を返します。
{sxml.tools
}
高速な’node-parent’関数を返します。
すなわち、SXML要素を1引数として取り、補助リストで
*PARENT*
ポインタを使ってその親ノードを返す関数を返します。
’*TOP-PTR*
はルートノードへのポインタとして使われます。
ルートノードに対して適用されると空リストを返します。
{sxml.tools
}
要素をそのIDを使って探します。
SXMLからXMLやHTMLなどのマークアップされたテキストを生成する手続き。
もっと高尚な変換器を得たいだけならば、
sxml.serializer
- SXMLからXMLとXHTMLのシリアライゼーションをチェックして下さい。
{sxml.tools
}
’fragments’をフィルタします。
fragmentsは、文字列、文字、数値、手続き、#f
、他のフラグメントの
リストです。
この関数はツリーを深さ優先でトラバースし、
文字列、文字、実行された手続きのリストを返し、
#f
と’()
を無視します。
全ての意味のあるフラグメントは文字列で、
この関数の結果に(apply string-append ... )
を
適用すると、そのstring-valueを返します。
これは、Oleg KiselyovのSRV:send-reply
の変種であるとみなすことが
できるでしょう。
SRV:send-reply
はフラグメントを印字(display)しますが、
この関数は意味のあるフラグメントのリストを返し、ごみをふるい落とします。
{sxml.tools
}
属性のXML/HTMLマークアップを作ります。
戻り値は、tree->string
やwrite-tree
に渡せる
文字列のツリーです(text.tree
- 怠惰なテキスト構築参照)。
attrは2要素のリスト
(attr-name attr-value)
で、
attr-nameはシンボルでなければなりません。
attr-valueはどんな値でも良いですが、文字列以外は
x->string
で文字列に変換されます。
省略可能なnamespace-prefix-assigは、属性名の名前空間プレフィクスを
エイリアスに置き換えるのに使われます。
詳しくは下のsxml:sxml->xml
を参照してください。
二つの手続きには微妙な差があります。値が空文字列だった場合、
sxml:attr->html
は値を省略しますが、sxml:attr->xml
はしません。
(use text.tree) (tree->string (sxml:attr->xml '(name foo))) ⇒ " name=\"foo\"" (tree->string (sxml:attr->html '(value "He said, \"Oops.\""))) ⇒ " value=\"He said, "Oops."\"" (tree->string (sxml:attr->xml '(download ""))) ⇒ " download=\"\"" (tree->string (sxml:attr->html '(download ""))) ⇒ " download"
註: この手続きは元のsxml-toolsから、 属性値中の特殊文字をエスケープするのと、名前空間プレフィクスを認識するように変更してあります。
{sxml.tools
}
string中の文字<
、>
、&
、"
を
対応する文字実体参照に置き換えた文字列のツリーを返します。
sxml:string->xml
では'
も置き換えられます。
戻り値は、tree->string
やwrite-tree
に渡せます
(text.tree
- 怠惰なテキスト構築参照)。
text.html-lite
- シンプルなHTMLドキュメントの構築の
html-escape-string
も参照して下さい。
{sxml.tools
}
SXMLをXMLあるいはHTMLにそれぞれ変換します。戻り値は文字列のツリーで、
tree->string
やwrite-tree
に渡せます
(text.tree
- 怠惰なテキスト構築参照)。
sxml:sxml->xml
は省略可能引数namespace-prefix-assigを取ります。
これはssax:xml->sxml
の同名の引数と同じく、
((alias-symbol . namespace-string) …)
という形の
リストでなければなりません(SSAXの高レベルのパーザ - XMLからSXMLへ参照)。
これは次の二つの効果を持ちます。
xmlns
属性を付加
sxml:sxml->html
はnamespace-prefix-assig引数を取りません。
HTMLには名前空間プレフィクスは無いからです。
XML版とHTML版の他の違いは次のとおりです。
sxml:attr->xml
/sxml:attr->html
参照)
sxml:string->xml
/sxml:string->html
参照)
(tree->string (sxml:sxml->xml '(div (@ (foo "") (bar "'"))))) ⇒ "<div foo=\"\" bar=\"'\"/>" (tree->string (sxml:sxml->html '(div (@ (foo "") (bar "'"))))) ⇒ "<div foo bar=\"'\"/>" (tree->string (sxml:sxml->xml '(img (@ (src "foo.png"))))) ⇒ "<img src=\"foo.png\"/>" (tree->string (sxml:sxml->html '(img (@ (src "foo.png"))))) ⇒ "<img src=\"foo.png\">"
{sxml.tools
}
この述語は、“終了タグのない”HTML 4.0のタグに対して#t
を
返します。