DSSSL

ネクストソリューション(http://www.nextsolution.co.jp/index.html)からDSSSLの講座のお知らせのメールが来た.頑張っているなあ.
DSSSLはSGMLXMLを組み版するための言語で,LISPの方言のSchemeをべ-スとしたものをスタイルシート言語に用いる.ちなみにW3Cでは現在XSLT&XSL-FOをスタイルシート言語として推奨している(と思う).でもこれはみんな,うすうす感ずいていることだけど,XSL一族は失敗作だ.
仕事でXSLTとかやらされたことはあるが,あれは最悪最低の言語だと思う.多分XML文書の変換にはまだ向いていると思うけど,本来の目的であったはずのXMLドキュメントの組み版表示には全く向いていない.


具体的な事例をjagatのDSSSL講座から引用させてもらうけど

完全な文書と文書型定義


<!DOCTYPE HTMLLite [
<!ELEMENT HTMLLite O O (H1|P)*>
<!ELEMENT (H1|P) - - (#PCDATA|EM|STRONG)*>
<!ELEMENT (EM|STRONG) - - (#PCDATA)>
]>

<HTMLLite>
<H1>これは見出しです</H1>
<P>これは文です</P>
<P>これは<em>ボールド体</em>です</P>
<P>これは<strong>強調体</strong>です</P>
</HTMLLite>

これをHTML化するDSSSLスタイルシートはこうなる

完全なスタイルシート


<!DOCTYPE style-sheet system "style-sheet.dtd" >
<!-- これを正確に解析するにはJames Clark氏のstyle-sheet.dtdがなければなりません。 -->

(element HTMLLite
(make simple-page-sequence))

(element H1
(make paragraph
font-family-name: "中ゴシック体"
font-weight: 'bold
font-size: 20pt
line-spacing: 22pt
space-before: 15pt
space-after: 10pt
start-indent: 6pt
first-line-start-indent: -6pt
quadding: 'center
keep-with-next?: #t))

(element P
(make paragraph
font-family-name: "細明朝体"
font-size: 12pt
line-spacing: 13.2pt
space-before: 6pt
start-indent: 6pt
quadding: 'start))

(element EM
(make sequence
font-posture: 'italic))

(element STRONG
(make sequence
font-weight: 'bold))

似たような感じのものをXSLTで書いてみる.適当にでっちあげたので正確でないのはご容赦.

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="HTMLLite">
<html>
<xsl:apply-templates />
</html>
</xsl:template>


<xsl:template match="H1">
<p class="h1" style="font-family-name: 中ゴシック体;
font-weight: bold;
font-size: 20pt;
line-spacing: 22pt;
space-before: 15pt;
space-after: 10pt;
start-indent: 6pt;
first-line-start-indent: -6pt;
quadding: center;
keep-with-next:always;">
<xsl:apply-templates />
</p>
</xsl:template>

<xsl:template match="P">
<p style="font-family-name: 細明朝体
font-size: 12pt;
line-spacing: 13.2pt;
space-before: 6pt;
start-indent: 6pt;
quadding: 'start">
<xsl:apply-templates />
</p>
</xsl:template>

<xsl:template match="em">
<span style="font-style:italic;"> <xsl:apply-templates /></span>
</xsl:template>

<xsl:template match="strong">
<span style="font-weight:bold;"> <xsl:apply-templates /></span>
</xsl:template>


</xsl:stylesheet>

どちらが筋がいいかは明らかだろう.
XSLTの問題点のひとつは,スタイルシート言語XSLTと変換先の文書のエレメントがどちらもXMLなので,ある程度複雑になるとわけわかでごちゃごちゃになることだ.上の例はまだ許せるが<xsl:if>や<xsl:choose>などが入れ子構造になると,その醜さは筆舌に尽くしがたい.
ほかにも問題点はいろいろあって,はっきり言えばXSLTはToy Programである.XMLを勉強しましょうみたいな教科書の中のXSLTを使えばこんなことが簡単に出来ますみたいな短いサンプルの中では良さそうにみえるが,教科書の外で使おうとすると死ぬほど苦労させられる.
結局,本格的なPrograming言語であるLisp様には及びもつかないのだ.
正直消えてほしい言語だし,どうもそろそろXML自体が失敗作じゃないかという王様は裸だみたいな声も囁かれつつあるのだけれど,しばらくは付き合う羽目になるだろうな.

WILLBE6.ORG - 結局、DSSSLってなんなのよ?

http://www.willbe6.org/techdocs/xml/dsssl/what_is_dsssl.html
DSSSL講座.上記ネクストソリューションの人が個人的に執筆している.

[permalink][contents][page top]