探検 XMLボキャブラリの世界 第20回
第20回:ボキャブラリ変換のボキャブラリ ~XSLT~
2008年5月26日 更新
著者:岸 和孝(JAGAT客員研究員)
全文については,Printers Circle(2008年 2月号)をご覧ください。
▼図1 XML文書
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE CARD [
<!ELEMENT CARD (NAME,COMPANY,LOGO?) >
<!ELEMENT NAME (#PCDATA) >
<!ELEMENT COMPANY (#PCDATA) >
<!ELEMENT LOGO EMPTY >
<!ATTLIST LOGO HREF CDATA #REQUIRED >
]>
<CARD>
<NAME>桃 太郎</NAME>
<COMPANY>鬼が島商店</COMPANY>
<LOGO HREF="momo.jpg"/>
</CARD>
|
注:DSSSLではこの文書はSGML構文に書き換えるものとします。
▼図2 変換結果としてのHTML文書
<HTML>
<BODY>
<P>桃 太郎</P>
<P>鬼が島商店</P>
<IMG SRC="momo.jpg"/>
</BODY>
</HTML>
|
▼図3 ボキャブラリ変換のXSLTスタイルシート
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<HTML>
<BODY>
<P><xsl:value-of select="CARD/NAME" /></P>
<P><xsl:value-of select="CARD/COMPANY" /></P>
<IMG SRC="{CARD/LOGO/@HREF}"/>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
|
注:このXSLTスタイルシートの働きは,XTで確認しました。
▼図4 ボキャブラリ変換のDSSSLスタイルシート
<!doctype style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN">
(declare-flow-object-class element
"UNREGISTERED::James Clark//Flow Object Class::element")
(declare-flow-object-class empty-element
"UNREGISTERED::James Clark//Flow Object Class::empty-element")
(element (CARD) (make sequence
(make element gi: "HTML"
(make element gi: "BODY" (process-children) ) ) ) )
(element (CARD NAME)
(make sequence
(make element gi: "P" ) ) )
(element (CARD COMPANY)
(make sequence
(make element gi: "P" ) ) )
(element (CARD LOGO)
(make sequence
(make empty-element
gi: "IMG"
attributes: (list (list "SRC" (attribute-string "HREF") ) ) ) ) )
|
注:このDSSSLスタイルシートの働きは,Jadeで確認しました。これはDSSSLの変換言語で表すべきところですが,Jadeにはその機能がないため,DSSSLのスタイル言語で表してあります。
社団法人日本印刷技術協会(JAGAT) PrintersCircle 2008年2月号より転載
社団法人日本印刷技術協会(JAGAT) 探検 XMLボキャブラリの世界