『はじめてのxslt 』小林 信次
DESCRIPTION
『はじめてのXSLT 』小林 信次2009/4/5開催SwapSkills * XSLTとは? * XMLをXSLTで変換してみよう! * まとめTRANSCRIPT
![Page 1: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/1.jpg)
はじめての XSLTSwapSKills 2009 vol.2
次に求められる Web サイト制作の技術
株式会社まぼろし:小林 信次2009.04.05
はじめての XSLT
![Page 2: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/2.jpg)
2自己紹介
小林信次(こばやし・しんじ)株式会社まぼろし( maboroshi.biz )WEB ディレクター/マークアップエンジニ
ア
2
![Page 3: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/3.jpg)
3自己紹介
3
2刷
4刷
![Page 4: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/4.jpg)
4自己紹介
4
2/27 発売
![Page 5: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/5.jpg)
5このセッションの流れ
XSLT とは ?XML を XSLT で変換してみよう !参考
5
![Page 6: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/6.jpg)
6
1.XSLT とは ?
XML としての XSLTXSLT の歴史XSLT の名前XSLT の役割
6
![Page 7: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/7.jpg)
7XML としての XSLT
7
XHTML
XSL-FO
XSLT XPath
XSL
SVG
MathML
XML
etc
![Page 8: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/8.jpg)
8XSLT の歴史
8
1999-11-16 XSLT Version 1.02007-01-21 XSLT Version 2.0
![Page 9: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/9.jpg)
9XSLT の名前
9
XSLT=XSL TransformationsXSL =Extensible Stylesheet Language = 拡張可能なスタイルシート言語Transformation= 変換、変形XSLT=
拡張可能なスタイルシートによるデータ構造変換
![Page 10: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/10.jpg)
10XSLT の役割
10
XML を「他の形式の XML 」「 HTML 」「テキスト」
などに変換することができる【例】
XML XSLT HTML
XSL-FO PDF
ブラウジング
印刷
![Page 11: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/11.jpg)
11
2.XML を XSLT で変換してみよう !
XSLT のお決まりXML と XSLT を関連付ける出力結果を指定するXSLT はテンプレートのかたまりDW と XSLT で、制作ページ一覧を作るAmazon の WEB サービスを利用する
11
![Page 12: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/12.jpg)
12XSLT のお決まり
12
<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> ...</xsl:stylesheet>
![Page 13: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/13.jpg)
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
![Page 14: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/14.jpg)
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
![Page 15: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/15.jpg)
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>
ルート要素に適用されるテンプレート※このテンプレートから他のテンプレートを呼び出したりが可能
![Page 16: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/16.jpg)
16XSLT はテンプレートのかたまり
16
<xsl:template match="/"> ...</xsl:template>
match 属性テンプレートが XML 文書のどの要素に
適用されるのか上記の例「 match=“/” 」 =
XML 文書のルート要素に適用される =XML 文書全体に適用
![Page 17: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/17.jpg)
17XSLT はテンプレートのかたまり
17
XSLT
ルート要素のテンプレート
テンプレート
テンプレート
![Page 18: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/18.jpg)
18
2-1. DW と XSLT で、制作ページ一覧を作る
変換する XML要素・属性の内容を表示するテンプレートから別のテンプレートを呼ぶ繰り返し処理属性を生成する
![Page 19: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/19.jpg)
19変換する XML
19
![Page 20: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/20.jpg)
20変換する XML
20
![Page 21: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/21.jpg)
21要素・属性の内容を表示する
21
要素の内容を表示:<xsl:value-of select=“hoge" />
属性の内容を表示: <xsl:value-of select=“hoge/@hoge" />
現在のノードからのパス※XPath 式で記述
hoge 要素の hoge 属性
hoge 要素の内容
![Page 22: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/22.jpg)
22
XML Path Languageマークアップ言語: XML に準拠した、
文書の特定の部分を指定する言語構文=パスを示すルール
XPath
![Page 23: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/23.jpg)
23XPath
構文 概要 例/ 直下の子要素 a/b
a 要素直下の b 要素// すべての
子孫要素a//ba 要素内のすべての b 要素
* すべての要素 a/*a 要素直下のすべての要素
@ 要素の属性 a/@ba 要素の b 属性
XPath で利用できる主な構文の例
![Page 24: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/24.jpg)
24テンプレートから別のテンプレートを呼ぶ
24
<xsl:apply-templates select=“hoge" />
現在のノードからのパス※XPath 式で記述
![Page 25: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/25.jpg)
25テンプレートから別のテンプレートを呼ぶ
25
<xsl:stylesheet …><xsl:template match="/">
<xsl:apply-templates select=“hoge" /></xsl:template><xsl:template match=“hoge"></xsl:template>
</xsl:stylesheet>select 属性と一致したmatch 属性の値を持つテンプレートが呼び出される
![Page 26: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/26.jpg)
26
さらに何重にもテンプレートを呼び出すことが可能
テンプレートから別のテンプレートを呼ぶ
26
ルート要素のテンプレート
テンプレート
テンプレート
![Page 27: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/27.jpg)
27テンプレートから別のテンプレートを呼ぶ
27
ルート要素のテンプレート
テンプレート
テンプレート
テンプレートを入れ子にするのはNG
![Page 28: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/28.jpg)
28
<xsl:for-each select=“hoge">…</xsl:for-each>
繰り返し処理
28
現在のノード配下にあるすべての hoge 要素を繰り返し処理
![Page 29: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/29.jpg)
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 要素
![Page 30: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/30.jpg)
30
<a href=“<xsl:value-of select=“hoge/@fuga" />”>
属性を生成する
30
構文エラーになってしまう
![Page 31: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/31.jpg)
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 要素の内容を指定
![Page 32: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/32.jpg)
32
2-2. AMAZON の WEB サービスを利用する
変換する XML連番を追加するXSLT のソート機能条件によって表示を変える平均値を求める 85
![Page 33: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/33.jpg)
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
![Page 34: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/34.jpg)
34
<ItemSearchResponse><Items>
<Request><ItemSearchRequest>
<Keywords><Item>
<DetailPageURL> <MediumImage>
<URL><Height><Width>
<ItemAttributes> <Author> <Creator Role=“hoge"> <ListPrice>
<Amount> <NumberOfPages> <Publisher> <Title>
変換する XML
34
![Page 35: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/35.jpg)
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=" 壱 " 壱 弐 参 四 五 六 .....
番号の表示形式
その他ももろもろ[ 割愛 ]
![Page 36: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/36.jpg)
36
<xsl:sort select=“hoge“ data-type=“hoge“ order=“hoge" />
XSLT のソート機能
36
ソートする対象の要素を指定
データ型text/numberの 2 種類
昇順[ascending]降順[descending]
![Page 37: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/37.jpg)
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は複数指定可能
![Page 38: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/38.jpg)
38
条件式の例
price[number(.) <= 3000]
条件によって表示を変える
38
[]→ フィルタパターン※中に比較式や論理式を記述可能
![Page 39: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/39.jpg)
39
フィルタパターンの構文
price[number(.) <= 3000]
条件によって表示を変える
39
要素 比較の対象 演算子
【比較式/論理式参考】http://msdn.microsoft.com/ja-jp/library/ms256081(VS.80).aspx
![Page 40: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/40.jpg)
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 要素の数
![Page 41: 『はじめてのXSLT 』小林 信次](https://reader035.vdocuments.net/reader035/viewer/2022081412/545aeb53af795953128b560f/html5/thumbnails/41.jpg)
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