『はじめてのXSLT 』小林 信次
-
Upload
swapskills -
Category
Documents
-
view
3.348 -
download
5
description
Transcript of 『はじめてのXSLT 』小林 信次
はじめての XSLTSwapSKills 2009 vol.2
次に求められる Web サイト制作の技術
株式会社まぼろし:小林 信次2009.04.05
はじめての XSLT
2自己紹介
小林信次(こばやし・しんじ)株式会社まぼろし( maboroshi.biz )WEB ディレクター/マークアップエンジニ
ア
2
3自己紹介
3
2刷
4刷
4自己紹介
4
2/27 発売
5このセッションの流れ
XSLT とは ?XML を XSLT で変換してみよう !参考
5
6
1.XSLT とは ?
XML としての XSLTXSLT の歴史XSLT の名前XSLT の役割
6
7XML としての XSLT
7
XHTML
XSL-FO
XSLT XPath
XSL
SVG
MathML
XML
etc
8XSLT の歴史
8
1999-11-16 XSLT Version 1.02007-01-21 XSLT Version 2.0
9XSLT の名前
9
XSLT=XSL TransformationsXSL =Extensible Stylesheet Language = 拡張可能なスタイルシート言語Transformation= 変換、変形XSLT=
拡張可能なスタイルシートによるデータ構造変換
10XSLT の役割
10
XML を「他の形式の XML 」「 HTML 」「テキスト」
などに変換することができる【例】
XML XSLT HTML
XSL-FO PDF
ブラウジング
印刷
11
2.XML を XSLT で変換してみよう !
XSLT のお決まりXML と XSLT を関連付ける出力結果を指定するXSLT はテンプレートのかたまりDW と XSLT で、制作ページ一覧を作るAmazon の WEB サービスを利用する
11
12XSLT のお決まり
12
<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> ...</xsl:stylesheet>
13XML と XSLT を関連付ける
13
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href=“hoge.xsl" ?> ...</xsl:stylesheet> XSLT
までのパス
application/xslt+xmlapplication/xml
14出力結果を指定する
14
<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="html" encoding="UTF-8" /> ...</xsl:stylesheet>
【 xsl:output /属性参考】http://msdn.microsoft.com/ja-jp/library/ms256187.aspx
xmlhtmltextQNAME
15XSLT はテンプレートのかたまり
15
テンプレート = 一連のスタイル規則を定義したもの
<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="html" encoding="UTF-8"><xsl:template match="/"> ...</xsl:template></xsl:stylesheet>
ルート要素に適用されるテンプレート※このテンプレートから他のテンプレートを呼び出したりが可能
16XSLT はテンプレートのかたまり
16
<xsl:template match="/"> ...</xsl:template>
match 属性テンプレートが XML 文書のどの要素に
適用されるのか上記の例「 match=“/” 」 =
XML 文書のルート要素に適用される =XML 文書全体に適用
17XSLT はテンプレートのかたまり
17
XSLT
ルート要素のテンプレート
テンプレート
テンプレート
18
2-1. DW と XSLT で、制作ページ一覧を作る
変換する XML要素・属性の内容を表示するテンプレートから別のテンプレートを呼ぶ繰り返し処理属性を生成する
19変換する XML
19
20変換する XML
20
21要素・属性の内容を表示する
21
要素の内容を表示:<xsl:value-of select=“hoge" />
属性の内容を表示: <xsl:value-of select=“hoge/@hoge" />
現在のノードからのパス※XPath 式で記述
hoge 要素の hoge 属性
hoge 要素の内容
22
XML Path Languageマークアップ言語: XML に準拠した、
文書の特定の部分を指定する言語構文=パスを示すルール
XPath
23XPath
構文 概要 例/ 直下の子要素 a/b
a 要素直下の b 要素// すべての
子孫要素a//ba 要素内のすべての b 要素
* すべての要素 a/*a 要素直下のすべての要素
@ 要素の属性 a/@ba 要素の b 属性
XPath で利用できる主な構文の例
24テンプレートから別のテンプレートを呼ぶ
24
<xsl:apply-templates select=“hoge" />
現在のノードからのパス※XPath 式で記述
25テンプレートから別のテンプレートを呼ぶ
25
<xsl:stylesheet …><xsl:template match="/">
<xsl:apply-templates select=“hoge" /></xsl:template><xsl:template match=“hoge"></xsl:template>
</xsl:stylesheet>select 属性と一致したmatch 属性の値を持つテンプレートが呼び出される
26
さらに何重にもテンプレートを呼び出すことが可能
テンプレートから別のテンプレートを呼ぶ
26
ルート要素のテンプレート
テンプレート
テンプレート
27テンプレートから別のテンプレートを呼ぶ
27
ルート要素のテンプレート
テンプレート
テンプレート
テンプレートを入れ子にするのはNG
28
<xsl:for-each select=“hoge">…</xsl:for-each>
繰り返し処理
28
現在のノード配下にあるすべての hoge 要素を繰り返し処理
29
<xsl:stylesheet …><xsl:template match="/">
<xsl:apply-templates select=“hoge" /></xsl:template><xsl:template match=“hoge">
<xsl:for-each select=“fuga">…
</xsl:for-each></xsl:template>
</xsl:stylesheet>
現在のノード
ルート要素
ルート要素内のhoge 要素
hoge 要素内のfuga 要素
30
<a href=“<xsl:value-of select=“hoge/@fuga" />”>
属性を生成する
30
構文エラーになってしまう
31
<a><xsl:attribute name="href"><xsl:value-of select=“hoge" /></xsl:attribute><xsl:value-of select=“fuga" /></a>
属性を生成する
31
href 属性を生成し、
href 属性の値に、hoge 要素の内容を指定
a 要素の内容に、
fuga 要素の内容を指定
32
2-2. AMAZON の WEB サービスを利用する
変換する XML連番を追加するXSLT のソート機能条件によって表示を変える平均値を求める 85
33
■ アマゾンへのリクエスト例
http://ecs.amazonaws.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=1JCQ41ZTFKEWXT0FZ602&AssociateTag=skoba-22&Operation=ItemSearch&SearchIndex=Books&Keywords=xhtml&Sort=salesrank&ResponseGroup=ItemAttributes,Images
変換する XML
33
34
<ItemSearchResponse><Items>
<Request><ItemSearchRequest>
<Keywords><Item>
<DetailPageURL> <MediumImage>
<URL><Height><Width>
<ItemAttributes> <Author> <Creator Role=“hoge"> <ListPrice>
<Amount> <NumberOfPages> <Publisher> <Title>
変換する XML
34
35
<xsl:number format="01" />
連番を追加する
35
format 属性指定 番号の表示形式format="1" 1 2 3 ..... 10 11 12 .....
format="A" A B C ..... Z AA AB AC .....
format="a" a b c ..... z aa ab ac .....
format="i" i ii iii iv v vi .....
format="I" I II III IV V VI .....
format=" あ " あ い う え お か .....
format=" ア " ア イ ウ エ オ カ .....
format=" 一 " 一 二 三 四 五 六 .....
format=" 壱 " 壱 弐 参 四 五 六 .....
番号の表示形式
その他ももろもろ[ 割愛 ]
36
<xsl:sort select=“hoge“ data-type=“hoge“ order=“hoge" />
XSLT のソート機能
36
ソートする対象の要素を指定
データ型text/numberの 2 種類
昇順[ascending]降順[descending]
37
<xsl:if test=“ 条件式” >内容</xsl:if>
条件によって表示を変える
37
<xsl:choose><xsl:when test=“ 条件式
A”>内容 A</xsl:when><xsl:otherwise>内容 B</xsl:otherwise></xsl:choose>
条件式が trueのときに内容を表示
条件式 A が trueのときに内容 A を表示それ以外のときに内容 B を表示
xsl:whenは複数指定可能
38
条件式の例
price[number(.) <= 3000]
条件によって表示を変える
38
[]→ フィルタパターン※中に比較式や論理式を記述可能
39
フィルタパターンの構文
price[number(.) <= 3000]
条件によって表示を変える
39
要素 比較の対象 演算子
【比較式/論理式参考】http://msdn.microsoft.com/ja-jp/library/ms256081(VS.80).aspx
40
<xsl:value-of select=“sum(hoge/fuga) div count(hoge/fuga)” />
平均値を求める
40
hoge 要素内のfuga 要素の合計
【さまざまな XPath 関数参考】http://msdn.microsoft.com/ja-jp/library/ms256138(VS.80).aspx
割り算
hoge 要素内のfuga 要素の数
41
3. 参考
wikipediahttp://ja.wikipedia.org/wiki/XSL_TransformationsMSDN ライブラリhttp://msdn.microsoft.com/ja-jp/library/default.aspxXML 関係アーカイブ | Takazudo Clipping* http://gyauza.egoism.jp/clip/archives/xml/
41