});XML関連規格の中でも、XSLTは比較的早い時期(1999年11月16日)にW3C勧告となった規格です。その理由は、異なるデータフォーマット(すなわちスキーマ)を使う企業間でデータ交換をする場合など、XSLTを使ってXMLデータの構造変換をする必要性が高かったからです。XSLTとは何物なのでしょうか。XSLTは、どのように書いたらよいのでしょうか。この記事は、XSLTの書き方を初心者の方にも取り組みやすく解説します。XMLを自由に変換するXSLTXMLはデータの論理的な構造を記述するための言語ですから、XMLによって記述されたXML文書(以下XMLデータ)には、それがどんな体裁でWebブラウザや紙などに表示されるべきかを指示するレイアウト情報(スタイル情報)は含まれていません。そのため、あるXMLデータを表示するためには、XMLデータの構造を、(Webブラウザなどの)フォーマッタが受け付けるオブジェクトへと、構造変換する処理(文字の大きさや色などの)スタイル付けをする処理の2つが必要です。Transformations)です。XSLTには、変数や関数、繰り返しや条件付き処理などさまざまなプログラミング機能が盛り込まれていて、複雑なデータ変換処理にも対応できるよう設計されています。XSLTが備える、XMLデータのデータ構造を変換させる機能は、あるXMLデータから、別のフォーマットのXMLデータやHTMLデータ、そしてテキストやCSVといった非XMLデータへの変換を実現しています。そのため、XMLデータをWeb表示のためにHTMLへ変換したり、社内データベース上のデータを電子商取引データであるXML形式に変換するための、汎用コンバージョンツールとして注目されています。XMLをHTMLに変換してみようXSLTによる変換処理の記述を、XSLTの世界では「スタイルシート」といいます。XSLTスタイルシートの記述に従ってXMLデータの構造変換を行うXSLTの処理プログラムは、「XSLTプロセッサ」と呼びます。以下、記事中で「スタイルシート」と記述した場合は、特に断らない限りXSLTのスタイルシートを指します。Sheet)のスタイルシートを思い浮かべる方も多いだろう。XSLTのスタイルシートとCSSのスタイルシートは、利用できる命令や文法はまったく異なる別物だ。XSLTプロセッサは、XSLTスタイルシートの記述に従ってXMLデータを構造変換するこの記事では、これからXMLデータをWebブラウザで表示するために、XMLデータからHTMLデータへの変換方法を紹介し、スタイルシートの基本的な書き方を解説します。Explorer(IE)で実際に試すことができます。インストールして有効にする必要があります。詳細は、マイクロソフトのサイトのMSXML3.0のページをご覧ください。XSLTでは、スタイルシート自体をXMLのタグを使って書きます。XSLTの名前空間に属する要素を、XSLTの命令として使用します。XSLTの名前空間に属する以下の4つの要素を使って、XMLをHTMLに変換するスタイルシートの例を紹介しましょう。xsl:stylesheetxsl:templatexsl:apply-templatesxsl:value-of今回の例では、次のようなXMLデータをWebブラウザで表示させることを考えます。<paragraph>この記事はXSLTについて理解していただくことを目的としたものです。</paragraph></article>表示したいXMLデータ。このXMLデータには、文字の大きさや色、書体といった情報がまったく含まれておらず、このままでは表示できないそのために、次のようなHTMLデータに変換します。<p>この記事はXSLTについて理解していただくことを目的としたものです。</p></html>XMLデータをHTMLに変換してしまえば、Webブラウザで表示できる形式となるこの変換を、XSLTのスタイルシートでどのように記述できるか、順を追って説明しましょう。■スタイルシートの冒頭にはXML宣言を書くXSLTのスタイルシートはXMLデータですから、XML宣言を付けます。UTF-8やUTF-16以外の文字コードを使う場合には、文字コードをencoding属性で指定しておきます。encoding="shift_jis"?>■xsl:stylesheet要素これは、スタイルシート全体を開始する(囲む)ものです。この命令で指定するのは、XSLTのバージョンとXSLTの名前空間の使用宣言です。......</xsl:stylesheet>version="1.0"がXSLTのバージョンを指定した部分で、xmlns:xsl=〜が、XSLTの名前空間を指定した部分です。"http://www.w3.org/1999/XSL/Transform"は、W3CによってXSLTに割り当てられたURIであり、ここではそれを表す名前空間接頭辞としてxslを使うことにしています。一般に、XSLTの名前空間接頭辞としてはxslを使いますので、xsl:stylesheet、xsl:template、xsl:apply-templates、xsl:value-ofなどといった要素になります。与えられたXMLデータのどのノードを、変換元とするのか変換先のXMLデータに、どんなノードを生成・付加するのかこの2つを指定することです。rule)で、XSLTではxsl:template要素で表現します。1.の指定はパターン(pattern)と呼ばれ、match属性で指定します(ノードの指定はXPath文法に従います。XPathについては次回説明します)。2.の指定はテンプレート(template)と呼ばれ、xsl:templateタグで挟まれた部分にXML構造として表現します。下記のようになるわけです。......変換先で生成されるXML構造のテンプレート......</xsl:template>例えば、今回は変換元になるXMLデータのparagraph要素に対して、HTMLのp要素を生成しますが、これは次のように書きます。<p></p></xsl:template>■文字列のコピーこれでp要素はできますが、このままではp要素が空となってしまい意味がありません。p要素の中にはparagraph要素の中の文字列をコピーする必要があるのです。このような値を指定するためにxsl:value-of要素が用意されています。/></p></xsl:template>xsl:value-of要素のselect属性で“.”(ドット)と書かれていますが、これは「現在の要素の文字列値」という意味になります。同様に変換元のXMLデータにtitle要素が出現したときに変換先のXMLデータにh1要素を生成・付加する場合には、次のように記述します。/></h1></xsl:template>■構造のコントロールXMLは、要素の階層でデータが表現されています。テンプレートルールは、変換元XMLデータの要素ごとに個別に指定しますが、変換先となるXMLデータ(もしくはHTMLデータ)にも構造を持たせなければなりません。それをコントロールするのがxsl:apply-templates要素です。/>は、article要素の子要素であるtitle要素、paragraph要素を別の場所にあるxsl:template要素を使って変換先へマッピングさせた結果を<html></html>の間に埋め込むというものです。■ルートノード最後にXSLT処理のスタート地点となる特別なノードを説明しましょう。match属性の値として“/”(スラッシュ)と書くルートノードがそれです。XPathの説明で述べますが、XSLT/XPathのデータモデルでは、XMLの最上位要素のさらに上にルートノードがあると考え、これに対するXSLT処理を実行することによって構造変換を開始します。今回は、単にarticle要素へと処理をつなげばよいので、次のように記述します。/>の部分に、ルートノードの子どもであるarticle要素のマッピング結果が入ります。これらをまとめて、次のXSLTスタイルシートが出来上がりました。5以上では、XSLTスタイルシートをXMLデータに適用させることによって変換先のHTMLを表示させることができます。先ほど作ったXSLTスタイルシートをarticle-view.xslというファイルで保存した場合、以下のxml-stylesheet処理命令を使ってそのファイルをhrefの先に指定します。<paragraph>この記事はXSLTについて理解していただくことを目的としたものです。</paragraph></article>元のXMLデータに、どのスタイルシートを適用して表示させたいかの指定を追加する。上のリストでは、2行目に追加されているtypeの先にはスタイルシートの種類を表すMIMEタイプを書きます。規格上はXSLTも「text/xml」というMIMEタイプで表現されるのですが、マイクロソフトのXMLパーサであるMSXML3.0では、「text/xsl」と書かなければXSLTのスタイルシートを適用してくれません。この点には注意が必要です。5での表示結果を以下に示します。XMLデータがスタイルシートによってHTMLデータに変換され、表示されているさて、ここで説明したスタイルシートの基本的な書き方をまとめると、次のとおりになります。スタイルシートの冒頭でXML宣言をします。>〜</xsl:stylesheet>で全体を囲みます。ルートノードから順に変換して行きます。変換の仕方は、xsl:template要素で表されるテンプレートルールという、変換するためのひな型を使って指定します。次回は、変換元XMLデータ中の処理対象ノードを指定するための言語XPathについて解説します。Xpress」に掲載された、XSLT特集「XSLTの実力を探る!」第1回から第3回の内容をもとに、加筆修正したものです。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。