XSLTとは,XMLデータをトランスレートするための言語です.詳しく知りたいかたは,W3CのXSL Transformations (XSLT)をお読みください.
ここでは,私がXSLTについて日々考えていることを語ります.
JDK 1.4以降にXSLTが含まれています.
XalanやMSXMLは必要ありません.
import javax.xml.transform.*; import javax.xml.transform.stream.*; public class helloxslt { public static void main(String[] args) { try { // TransformerFactoryインスタンスを取得 TransformerFactory factory = TransformerFactory.newInstance(); // XSLファイルからtranceformerを取得 Transformer transformer = factory.newTransformer(new StreamSource("helloxslt.xsl")); // 出力するエンコーディングを設定 transformer.setOutputProperty("encoding", "Shift_JIS"); // XMLファイルをXSLTで変換して出力 transformer.transform( new StreamSource("data.xml"), new StreamResult(System.out)); } catch (Exception e) { e.printStackTrace(); } } }
<?xml version="1.0" encoding="Shift_JIS" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method = "text" /> </xsl:stylesheet>
コンピュータシステムを新しく作るとき,20世紀までは,プログラムの設計から始めていました.しかし,これではコストが膨大になることがわかってきました.そこで,21世紀のコンピュータシステムでは,データ指向のコンピュータシステムという考え方が導入されました.コンピュータシステムとは,データをトランスレートするものです.入力データを,なんらかの規則にしたがってトランスレートし出力するもの,これがコンピュータシステムです.
たとえば,JSP/サーブレットシステムの多くでは,XMLデータを読み込み,ユーザの入力にあわせてデータを計算し,結果をHTMLとして出力しています.これって,トランスレートですね.
データはデータ構造に従っています.データ構造を綺麗に設計することがコンピュータシステムを作る上で重要です.
入力のデータが決まっており,出力のデータも決まっています.コンピュータシステムは,入力のデータをもとにして,出力のデータを生成します.この考えかたを,データ指向といいます.データ指向では,コンピュータシステムの中心にあるものは,プログラムではなくデータです.
データ,データ構造,データのトランスレート.データ指向コンピュータシステムでは,この3つにより,コンピュータシステムは構成されます.
2001年現在,データの記述フォーマットとしてはXMLが最適です.XML以外は考えられません.これは,多くの書籍や雑誌が語るとおりです.これについての異論はないものとします.データはXMLです.
データ構造を設計するための道具を,スキーマ言語といいます.スキーマ言語にはいくつか種類がありますが,評判が高いのはRELAX NGです.RELAX NGでデータ構造の設計を行います.データ構造はRELAX NGです.
データにはXMLを使い,データ構造にはRELAX NGを使うことはわかりました.では,データのトランスレートには,なにを使えばよいのでしょうか.
データのトランスレーションを行うための道具が,いくつかあります.もっとも普及しているものはJavaでしょう.JavaからDOMやSAXというAPI群を使うことで,データのトランスレーションが容易に行えます.
しかし,ここで扱うのは,Javaではなく,XSLTです.XSLTとは,データをトランスレーションするためだけに設計開発された道具です.XSLTは,データをお気楽にさくっとトランスレーションするときに使うとエレガントです.XSLTとはJavaよりもエレガントに,美しさを求めるあなたのための,データ指向コンピュータシステムのコンピュータシステム記述言語です.
コンピュータシステムは,データをトランスレートするもので,XSLTとは,データをトランスレートするための道具です.三段論法で,XSLTとは,コンピュータシステムを作るための道具です.コンピュータシステムは,XSLTを使って作るものです.
XSLTは,歴史をたどると,もともとはスタイルシートでした.スタイルシートとは,文書のコンテンツと表示情報とを分離する,あのスタイルシートです.HTMLでいえば,CSSです.
で,スタイルシートなんて,簡単です.なにも難しいことはありません.では,XSLTは,XMLのスタイルシートですから,そんなに難しくなるはずがないだろうと,そう思いがちです.
が,XMLのスタイルシート,つまり,XSLTとは,スタイルシートの範囲を大幅に超えています.これは,スタイルシートではなく,むしろ言語なのです.XSLTをスタイルシートだと思って,あまく見てかかると,ひどい目に遭います.ある程度,腰をすえてかかるくらいの覚悟は必要でしょう.
XSLTは,スタイルシートではなく,コンピュータシステムを作るための道具です.
いきなり核心についてしましましたが,ここで問うべきは,XSLTは簡単なのかと,そういうことです.
私は,XSLTは,簡単に思う人と,難しく思う人と,両方いると考えています.これが,XSLTをめぐる事情を複雑にしている要因です.
XSLTを簡単に思う人と,難しく思う人と,両方いるというのは,その人のバックグラウンドに由来します.
XSLTは,チューリングモデルです.オートマトンです.
と,この説明でわかってくれる人は,あなたは既にXSLTにハマりはじめています.ようこそ,XSLTへ.
この説明でわからない人が大半でしょうから,詳しく説明します.XSLTは,現在世界で広く普及している主なプログラミング言語とは,そもそものアプローチが違います.JavaとかCとかVisualBasicとかCOBOLとかは,手続き型のプログラミング言語です.これらを経験していると,そのパラダイムの違いに,なんでこんな簡単なことができないのかと,お怒りになられるかもしれません.
しかし,XSLTの思想というのは,複雑なことを簡単に行います.XSLTにより,複雑な処理を,驚くほどシンプルに記述できます.
コンピュータシステムに対する考え方を,手続き型ではなく,チューリングモデルに切り替えることが重要です.
LispとかPrologとかLogoは,XSLTに近いプログラミング言語です.これらの言語を知っていると,XSLTも抵抗なく習得できます.私が始めて触ったプログラミング言語はLogoですので,私はXSLTに対する素養があるのではと思っています.素養というと大げさですが,XSLTを簡単に感じるか難しく感じるかは,このXSLTの世界観をつかめるかにかかっているのです.これは,重要なことです.この世界観を理解できなければ,あなたはXSLTを使うべきではありません.Javaってください.
まあ、そのとおりなのですけれども、XSLTを利用して、XMLからSQLのDDL文を生成しようという趣旨です。そのとおりですね。 DBMSにおいてOracleやらPostgreSQLやらMySQLやらのDDL文の違いを吸収させるために、XMLで書いた定義からSQLのDDL文を吐いてくれたら嬉しいねってことなのですけれども。 まだ、あまり書いていません。
ノベルゲームをXSLTとCSSで作っちゃおうという大胆かつ壮大なプロジェクト橘花のBetaバージョンやらを置いておきます。デバッグデバッグ。
日経225企業へのリンク集です.名前空間もようやく意味がわかるようになってきました.名前空間の確認の意味も兼ねています.なんだかんだいってもXML+XSLTって便利です.XSLTの使えるブラウザで見てください.