ASCII24 Top ASCII24 Business Center ASCII24 News ASCII24 Review ASCII24 Business Center 携帯24 Mac24 Akiba2GO! デジタル用語辞典 ASCII24 Broadband Center 最新ニュース 特集 事例紹介 コラム NETWORK MAGAZINE ASCII24メールサービス Blogag
ASCII24 - [Main Menu] [Menu 2]


  ASCII24 > Business Center 111
記事/用語/ID検索 

最新ニュース
【お知らせ】 アスキーの新しいPC/IT情報サイト、ASCII.jpがオープン!(2007年1月29日)
【ここが変わったWindows Vista 100連発! Vol.27】 “サービス” タブが追加された “タスクマネージャ” (2007年1月26日)
東芝ダイレクト、Vista搭載の直販専用ノートパソコン春モデルを発表(2007年1月26日)
【フォトレポート】 さらにスリムに進化したソフトバンクモバイルの新機種に触ってきた!(2007年1月26日)
BCN、 “BCN AWARD 2007” の表彰式を開催(2007年1月26日)
ロジクール、省スペース/静音構造のUSBフルキーボード 『Classic Keyboard 200』 を発売(2007年1月26日)
NTTとNTTレゾナント、過去に見たウェブページを再度探し出すソフトを発表(2007年1月26日)
松下電器、パスワードで録音データを保護できるICレコーダー 『RR-US470-K』 など2機種を発売(2007年1月26日)
インテル、802.11nドラフトに準拠した無線LANモジュール “Next-Gen Wireless-N” を発表(2007年1月25日)
【Macworld 2007 Vol.14】 写真で一挙紹介!! 展示会場レポート (ハードウェア編) (2007年1月25日)
【発表会レポート】 ソフトバンクモバイル、最新春モデル14機種58色を発表!!(2007年1月25日)
XP Homeのサポートが2014年まで延長――マイクロソフト、Windows XP Home Editionのサポート提供期間延長を発表(2007年1月25日)
富士フイルム、SD/xD両対応のコンパクトデジタルカメラ3機種を発表(2007年1月25日)
プリンストンテクノロジー、応答速度が5msの22インチWSXGA+液晶ディスプレー 『PTFSAF-22W』 を発売(2007年1月25日)
ネットレイティングス、2006年12月度のインターネット利用動向調査結果を発表――任天堂にアクセスが急増。(2007年1月25日)
シマンテック、セキュリティーソフト “Norton AntiVirus” など3製品をVistaに対応(2007年1月25日)
JPRS、 “駅街ガイド” のアクセスランキングを発表(2007年1月25日)
日本サムスン、応答速度が5msの22インチWSXGA+液晶ディスプレー 『SyncMaster 225BW-R』 を発売(2007年1月25日)
日立、HDDとDVDドライブを搭載した “ハイブリッドカム Wooo” シリーズを4機種発売(2007年1月25日)
ソニーとバンダイ、合弁会社 “株式会社セリウス” を設立(2007年1月25日)
JEITA、2006年のパソコン出荷実績を発表――買い控えで4年ぶりの前年割れに(2007年1月25日)
飛鳥、6in1カードスロットを搭載したポータブルHDD 『Tripper Light』 を発売(2007年1月25日)
D-PA、TV番組のオークションへの違法出品の監視を開始(2007年1月25日)






Contact Information

[PR]
Printable Version コラム / XMLの常識 第2回

XMLの常識

XSLTを書いてみよう(1)


2000年7月20日

 前回は、XSLTを使ってXMLを別のスキーマのXML、あるいはHTMLなどに変換できると書いたが、ではXSLTとは具体的にどういった規格なのか、今回はこのあたりを突っ込んで解説したい。

 XSLTはXMLの規格と同じく、非営利団体であるW3Cによって勧告されている。仕様は完全にオープンで、開発者はその仕様に従って、自由にアプリケーションに実装することができる。これらXSLT対応アプリケーションは、XMLとXSLTファイルを読み込み、XSLTファイルに記述されたルール(テンプレート)に従ってXMLを変換し、その結果を出力するというのが、基本的な動作になる。

XSLTの特徴

 XSLTの第一の特徴は、構文自体がXMLの規格に則ったものになっているという点。つまり、変換のルールは、タグを記述することによって指示していくわけだ。XSLTの仕様には、変換を行なうために利用するタグがいくつも定められており、これらのタグを使い分けることによって、XSLTプロセッサにどのように変換をするかを指示していく。

 XSLTの第2の特長は、XSLTの特徴はプログラミング言語的な側面も持っている点である。タグの中には、条件分岐を行なうもの、あるいは変数や引数を利用するためのものなどがあり、これらを利用することにより、単純にタグの名前を変換するといったことだけでなく、エレメントの値によって結果を変更する、あるいは引数によって処理を変えるといったことが行なえる。HTMLに変換する場合なら、「価格エレメントの値が1000以上ならば赤字で表示し、それ以下なら黒字にする」といった変換も可能である。

 XSLTは、「XPath」という規格も同時に利用する。XPathがXSLTに対して提供する機能はいくつかあるが、特に重要なのがXSLTによる処理を行なう範囲の指定である。たとえばエレメントの値を取り出す場合、どのタグに挟まれているのかを、何らかの方法で指示しなければ取り出せないわけだが、このタグを指定する記述の仕方をXPathで定めているわけだ。たとえば「住所録タグの下にある名前タグ」を指定するといった場合ならば「住所録/名前」といったようにパスを指定する。これをXSLTでは<xsl:value-of select="住所録/名前"/>と記述する。これによって、住所エレメントの下にある名前エレメントの値が得られるわけだが、この"住所録/名前"という部分がXPathの規格を使っている部分になる。

 また、XPathはXSLTに対して関数の機能も提供している。関数は大きく分けて「ノード集合関数」「文字列関数」「ブール関数」「数値関数」に分けられ、2つの文字列の接続や、文字列から指定した長さを取り出すといったことも関数を利用すればできる。前回、XSLTを利用すれば、エレメントとしてXML文書に記述されているものを属性に変換することもできると書いたが、こうした単純な変換ではXPathの関数まで覚える必要はない。しかし、同じ名前のタグでも現われた順番によって処理を変える、エレメントの値の一部分だけの値を調べるといったことを行なおうとすると、XPathの関数が必要になってくる。

XSLTの基本

 上記のような機能をフルに活用すれば、かなり高度な変換まで実現できる。ただ難点となってくるのが、高機能ゆえの難しさである。例1は、<doc>というタグを<文書>タグに変換するためのごくごくシンプルなXSLTだが、これだけを行なう場合でも、XSLTによる変換のプロセスや理屈が理解できていなければ書くのは難しい。ただそれらさえわかってしまえば、それなりにXSLTを記述できるようになる。ここではこの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="/">
                <xsl:apply-templates/>
        </xsl:template>

        <xsl:template match="doc">
                <文書>
                        <xsl:apply-templates/>
                </文書>
        </xsl:template>

</xsl:stylesheet>

例1

 まず1行目はXML宣言文で、先に解説したとおりXSLTもXMLになっているので、XMLに必須のXML宣言を記述しなければならない。2行目には<xsl:stylesheet>というタグが記述されている。これはXSLT全体を括るためのタグで、必ず必要となるもの。属性としてまず「version」を記述しているが、これはXSLTのバージョンを指定するもので、現時点では「1.0」という値を記述する。このversion属性は必須となっているので、必ず書かなければならない。

 続いて「xmlns:xsl="http://www.w3.org/1999/XSL/Transform"」という文字があるが、これはXMLの関連規格の1つである「ネームスペース(正しくはNameSpaces in XML)」の設定を行なっている部分である。ネームスペースはXMLの中でも重要な規格なので回を改めて解説するが、1つのXML文書中に複数のスキーマ(タグや属性の名前、文書の構造などの規定)を混在させるために用意された規格だ。たとえば、HTMLの中に化学式を含めたい場合、すでに化学式のスキーマが用意されているのなら、HTMLの規格の中に化学式のタグを追加するのではなく、すでに規格化されている化学式のタグを利用するほうが効率的だろう。このように1つの文書の中に複数のスキーマを混在させる場合、何らかの方法でタグを区別する方法を用意する必要がある。なぜなら、もし2つのスキーマで同じ名前のタグがあった場合、処理を行なうソフトウェアはどちらのスキーマのタグかを判断する手段がないからだ。そこで、インターネット上で一意のデータであるURIを利用し、スキーマの区別を行なうというのがネームスペースである。

 ただURIとして「http://www.ascii.co.jp/」などを利用すると、タグを書くたびにその長い文字列を打ちこまなければならず面倒くさい。そこで簡単な文字を用意し、その文字とURIを関連付けておいて、その簡単な文字が現われればそのURIであることにすれば、いちいち長いURIを書く暇が省ける。その関連付け作業が「xmlns:xsl="http://www.w3.org/1999/XSL/Transform」という部分である。この設定を行なうには、「xmlns:」という文字に続けて、先ほど述べた簡単な文字(プリフィックスという)を記述する。XSLTであれば「xsl」という文字を使うのが一般的である。続けて「=」を書き、そのプリフィックスに関連付けるURIとして、XSLTの規格で指定されている「http://www.w3.org/1999/XSL/Transform」というURIを「"」で括って記述する。これで「xsl」という文字が現われると「http://www.w3.org/1999/XSL/Transform」というURIとして解釈する。これによってXSLTを処理するソフトウェアは、XSLTとそれ以外のタグを見分けることができるわけだ。これからXSLTのように数多くのXMLのスキーマが登場すると思われるが、基本的にはそれぞれのスキーマごとにこうしたネームスペースを設定することになる。

 最初の<xsl:stylesheet>エレメントに関しては、大雑把に説明するとこんな感じになる。ただこの辺りのことを理解しなくても、XSLTの記述であれば「<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"gt;」と記述すればよい、と覚えておけば間違いない。次回は、これ以降のタグを解説していく。

(及川晴生)





advertisement

Copyright (C) 1997-2007 ASCII Corporation. All Rights Reserved.
No portion of this web site may be reproduced or duplicated without the express written permission of ASCII Corporation.
This web site is written in Japanese only.
記事に関するご意見やご質問は、お問い合わせフォームにてお送りください