XHTMLの文章構造を補完する目的で作られたシンプルな語彙集です。
まずは「SDL: The Simple Document Language』をご覧ください。若干名前などが変わっていますが大まかな設計と動機が書かれています。
SDFは文章構造が完全に入れ子になっているためセクションごとに分割して小さな1つの文章にしたり、逆に複数の文章を結合して大きな1つの文章にすることが簡単にできます。
たとえばblogのデータファイルに使う場合、1つのファイルに1ヶ月分の記事を纏めておいてリクエストに応じて1日分の記事を取り出したり、最新の記事のみを表示すると言ったことができます。この際、各セクションにメタデータを持たせておくことが出来るので情報の欠落が有りません。
Wikiやblogなど文章が基本のデータをSDFで記述することによりツール間の互換性を実現することを目標としています。
SDFで書かれた文章はXSLTにより簡単に他のXML文章へ変換することが出来ます。
Arielworksでは使用頻度が高いと思われるXHTMLへの変換を行うXSL文章を公開しています。また、サーバサイドでの変換を可能にするPHPによるクラスライブラリHIMMELも公開しています。
SDFが使用する名前空間URIは「http://www.arielworks.net/works/codeyard/sdf」とする。
この仕様書内で使用する接頭辞sdfは上記の名前空間にバインドされているものとする。実際の使用に当たっては任意の接頭辞を使用することが出来る。
SDFの要素、属性などの名前は全て小文字とする。
要素や属性など、この仕様書以外に書かれていない部分を新たに拡張する場合は別の名前空間で定義すること。SDFの名前空間を拡張することは出来ない。
名前空間が別であれば新たに要素や属性が追加できる。SDFは特にXHTMLとの連携を想定して作られている。
sdf:document
<sdf:document
version = number>
<!-- Content: (sdf:meta, sdf:body) -->
</sdf:document>
SDFのルート要素はsdf:document
である。
内容はsdf:meta
とsdf:body
のみであり、メタ情報および本文はそれぞれの要素内に記述する。
version
属性は必須。この仕様書が定義するバージョンは0.3
である。
sdf:section
<sdf:section>
version = number>
<!-- Content: (sdf:meta, sdf:body) -->
</sdf:section>
セクションの分割を明示する為の要素がsdf:section
である。
ルートノードではないという点およびversion
属性が必須ではないという点を除き、全ての点でsdf:document
要素と等しい。
version
属性が省略された場合、は最も近い先祖の値がバージョンとして使われる。
sdf:meta
<sdf:meta>
<!-- Content: (dc:title, dcterms:created, etc...) -->
</sdf:meta>
sdf:meta
要素には自身を包括しているsdf:document
もしくはsdf:section
要素についてのメタデータを記述できる。使用方法はXHTMLのhead
要素に似ている。
内容は既存の語彙(Dublin CoreやDublin Core Termsなど)または新たに作られた語彙(別の名前空間を使うこと)が想定されている。
RDFによる記述についてはここでは言及しない。現状ではrdf:about
属性の値に入れるべき適当な値が存在しない。
sdf:body
<sdf:body>
<!-- Content: (sdf:section, xh:p, xh:ul, etc...) -->
</sdf:body>
sdf:body
要素にはメタデータではない本文を記述する。XHTMLのbody
要素の使われ方と似ており、XHTMLの語彙が使われることが想定されている。
sdf:body
要素内をさらにセクションで分割する場合、sdf:section
要素を子として持つことが出来る。
Arielworks.net内の各ページはSDFで記述されているためURIに「/index.xml」を付ければ実際に使用されている文章を見ることが出来ます。
例: