SXML
ネストしたリスト(SchemeにおけるS式)は、ネストしたXML文書の自然な表現を提供する。Schemeは、コードとデータを、動的な型の要素のネストしたリストで表現し、XML文書(ネストしたXML要素の階層構造からなる)は、階層的なネストしたSchemeのリスト(所謂、S式)と考えることができる。
Schemeは、ほとんどのXML用の言語(例えば、XSLTとXQuery)と同じく関数型言語である。Schemeは、(ネストした)リストを再帰的な方法で処理する。この方法は、文書ツリーを、渡り歩く/変換する処理と考えることもできる
Scheme(LISPの方言である)は、広い意味でのスクリプト言語である。Schemeは、実際に使用されている、最も洗練され、コンパクトなプログラミング言語の一つである: Schemeの標準の記述は、わずか40ページである。 Schemeは、高水準言語であり、高速なプロトタイピングに向いている。 さらに、Schemeプログラムは、一般的に、同じ機能のCプログラムよりも何倍もコンパクトである。
XMLとSXMLの字面は、とても似ている: 非公式には、SXMLは、XMLの開始/終了 タグを開き/閉じ 括弧で置き換える。 一方、SXMLは、S式であり、それゆえ、Schemeプログラミング言語の主なデータ構造であり、結果として、Schemeを経由して、簡単かつ自然に処理できる。
情報項目は、項目自身の属性のコンテナと解釈でき、そして、テキストの文字列(例えば、名前、名前空間URI)や、項目自身(例えば、XMLの子要素)も同様であるかもしれない。
情報集合は、それゆえ、ネストしたコンテナの階層である。 このようなコンテナの階層、つまりテキストの文字列と他のコンテナから構成されるコンテナの階層は、一般的にS式によって記述できる。なぜなら、S式は、リストのメンバーはアトムの値かS式自身であると、再帰的に定義されるからである。 S式は、簡単に、トラバースに適した内部表現にパースできる; S式には、簡潔な外部表記法があり、S式は、比較的容易に、手作業ででも、構築する事ができる。
SXMLは、XML情報集合の、S式による完全なインスタンスである。 情報集合のゴールは、全ての関連するデータの書式と、データの抽象化、データ同士の関連のコンテナ・スロットを提示することである。 SXMLは、S式で完全に具象化した、ネストしたコンテナを与え、情報項目と属性へのアクセス手段を供給する。 SXMLは、XPathとDOM(これらは、XML情報集合の2つの別のデータモデルでもある)の親戚である。 SXMLは、とりわけSchemeベースの XML/HTMLの記述、XPathクエリ、ツリーの変換に向いている。
XMLとSXMLは、それゆえに、XML情報集合についての、2つの文法的に異なった表現と考える事ができる。
さらに、情報集合仕様で与えられた実装の裁量範囲において、SXML自身は、情報集合のインスタンスである。
XMLの推奨は、処理命令 (PI) は、要素や文字データと区別できる事を指示している; 処理命令は、アプリケーションを通さなければならない。 SXMLにおいては、それゆえ、PIは専用の型である*PI*のノードで表現される。 XPath とDOM Level 2も、同様の方法で処理命令を扱っている。
XML文書と、それに対応するSXML表現のサンプルの両方を以下に示す。これらは、ネストしたXMLのタグとネストしたSXMLのリストの比較例を提示している。
SXML文書の方が、同等のXMLよりも僅かにコンパクトである事に注意してほしい。
SXMLは、XML文書をパースした、抽象構文木であると考える事もできる。 XML文書もしくは、整書式になっているXMLの一部分は、自動的に、対応するSXML形式に、SchemeのXMLパース・フレームワークのSSAXを用いて変換される。
注目に値するのは、SXMLは、XML文書に含まれる全ての情報を表現する事である。コメント、XML名前空間や外部エンティティも含めて。 これらの事は、単純にするために本節では省かれているが、SXMLの仕様では検討されている事である。
例えば、簡易なXHTMLページは、以下のようなものがある:
これをSXMLに変換すると以下のようになる:
各要素のタグのペアは、括弧のセットに置き換えられる。タグの名前が終わりの部分で繰り返される事はなく、単にリストの最初のシンボルになるだけである。要素の内容が要素名に続き、内容は要素自身か、文字列である。XMLの属性については特別な文法はない。SXMLにおいては、属性は単純に別のノード、特別に@の名前を持つノードで、表現される。これが、実際の"@"タグと衝突する事はない。なぜなら、@は、XMLではタグの名前として許されていないからである。これは、SXMLで共通のパターンである: いつでも、タグが特別な状態や物事を示すのに使われ、そのタグはXMLでは使われる事はなく、その名前を使って有効なXMLの識別子を作る事はできない。
また他に、エスケープや他の特別な意味を持つ文字、&amp;実体参照や&gt;実体参照のような表記が必要ない事を見てとれる。全ての文字列の内容は、自動的にエスケープされる。何故なら、それらは純粋に内容と解釈でき、タグやエンティティを中に含まないからである。これはまた、自動的に生成された内容を中に挿入するがずっと容易であり、エスケープし忘れる危険を侵さずに、生成内容を別のユーザーに表示できる。(これらは、全ての種類のやっかいなクロスサイト・スクリプト攻撃や、他の頭痛の種を引き起こす)