『はじめてのXSLT 』小林 信次

42
ははははは XSLT SwapSKills 2009 vol.2 ははははははは Web はははははははは はははははははは はは はは 2009.04.05 ははははは XSLT

description

『はじめてのXSLT 』小林 信次2009/4/5開催SwapSkills * XSLTとは? * XMLをXSLTで変換してみよう! * まとめ

Transcript of 『はじめてのXSLT 』小林 信次

Page 1: 『はじめてのXSLT 』小林 信次

はじめての XSLTSwapSKills 2009 vol.2

次に求められる  Web サイト制作の技術

株式会社まぼろし:小林 信次2009.04.05

はじめての XSLT

Page 2: 『はじめてのXSLT 』小林 信次

2自己紹介

小林信次(こばやし・しんじ)株式会社まぼろし( maboroshi.biz )WEB ディレクター/マークアップエンジニ

2

Page 3: 『はじめてのXSLT 』小林 信次

3自己紹介

3

2刷

4刷

Page 4: 『はじめてのXSLT 』小林 信次

4自己紹介

4

2/27 発売

Page 5: 『はじめてのXSLT 』小林 信次

5このセッションの流れ

XSLT とは ?XML を XSLT で変換してみよう !参考

5

Page 6: 『はじめてのXSLT 』小林 信次

6

1.XSLT とは ?

XML としての XSLTXSLT の歴史XSLT の名前XSLT の役割

6

Page 7: 『はじめてのXSLT 』小林 信次

7XML としての XSLT

7

XHTML

XSL-FO

XSLT XPath

XSL

SVG

MathML

XML

etc

Page 8: 『はじめてのXSLT 』小林 信次

8XSLT の歴史

8

1999-11-16 XSLT Version 1.02007-01-21 XSLT Version 2.0

Page 9: 『はじめてのXSLT 』小林 信次

9XSLT の名前

9

XSLT=XSL TransformationsXSL =Extensible Stylesheet Language    = 拡張可能なスタイルシート言語Transformation= 変換、変形XSLT=

拡張可能なスタイルシートによるデータ構造変換

Page 10: 『はじめてのXSLT 』小林 信次

10XSLT の役割

10

XML を「他の形式の XML 」「 HTML 」「テキスト」

などに変換することができる【例】

XML XSLT HTML

XSL-FO PDF

ブラウジング

印刷

Page 11: 『はじめてのXSLT 』小林 信次

11

2.XML を XSLT で変換してみよう !

XSLT のお決まりXML と XSLT を関連付ける出力結果を指定するXSLT はテンプレートのかたまりDW と XSLT で、制作ページ一覧を作るAmazon の WEB サービスを利用する

11

Page 12: 『はじめてのXSLT 』小林 信次

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 』小林 信次

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 』小林 信次

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 』小林 信次

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 』小林 信次

16XSLT はテンプレートのかたまり

16

<xsl:template match="/"> ...</xsl:template>

match 属性テンプレートが XML 文書のどの要素に

適用されるのか上記の例「 match=“/” 」 =

XML 文書のルート要素に適用される =XML 文書全体に適用

Page 17: 『はじめてのXSLT 』小林 信次

17XSLT はテンプレートのかたまり

17

XSLT

ルート要素のテンプレート

テンプレート

テンプレート

Page 18: 『はじめてのXSLT 』小林 信次

18

2-1. DW と XSLT で、制作ページ一覧を作る

変換する XML要素・属性の内容を表示するテンプレートから別のテンプレートを呼ぶ繰り返し処理属性を生成する

Page 19: 『はじめてのXSLT 』小林 信次

19変換する XML

19

Page 20: 『はじめてのXSLT 』小林 信次

20変換する XML

20

Page 21: 『はじめてのXSLT 』小林 信次

21要素・属性の内容を表示する

21

要素の内容を表示:<xsl:value-of select=“hoge" />

属性の内容を表示: <xsl:value-of select=“hoge/@hoge" />

現在のノードからのパス※XPath 式で記述

hoge 要素の hoge 属性

hoge 要素の内容

Page 22: 『はじめてのXSLT 』小林 信次

22

XML Path Languageマークアップ言語: XML に準拠した、

文書の特定の部分を指定する言語構文=パスを示すルール

XPath

Page 23: 『はじめてのXSLT 』小林 信次

23XPath

構文 概要 例/ 直下の子要素 a/b

a 要素直下の b 要素// すべての

子孫要素a//ba 要素内のすべての b 要素

* すべての要素 a/*a 要素直下のすべての要素

@ 要素の属性 a/@ba 要素の b 属性

XPath で利用できる主な構文の例

Page 24: 『はじめてのXSLT 』小林 信次

24テンプレートから別のテンプレートを呼ぶ

24

<xsl:apply-templates select=“hoge" />

現在のノードからのパス※XPath 式で記述

Page 25: 『はじめてのXSLT 』小林 信次

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 』小林 信次

26

さらに何重にもテンプレートを呼び出すことが可能

テンプレートから別のテンプレートを呼ぶ

26

ルート要素のテンプレート

テンプレート

テンプレート

Page 27: 『はじめてのXSLT 』小林 信次

27テンプレートから別のテンプレートを呼ぶ

27

ルート要素のテンプレート

テンプレート

テンプレート

テンプレートを入れ子にするのはNG

Page 28: 『はじめてのXSLT 』小林 信次

28

<xsl:for-each select=“hoge">…</xsl:for-each>

繰り返し処理

28

現在のノード配下にあるすべての hoge 要素を繰り返し処理

Page 29: 『はじめてのXSLT 』小林 信次

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 』小林 信次

30

<a href=“<xsl:value-of select=“hoge/@fuga" />”>

属性を生成する

30

構文エラーになってしまう

Page 31: 『はじめてのXSLT 』小林 信次

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 』小林 信次

32

2-2. AMAZON の WEB サービスを利用する

変換する XML連番を追加するXSLT のソート機能条件によって表示を変える平均値を求める 85

Page 33: 『はじめてのXSLT 』小林 信次

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 』小林 信次

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 』小林 信次

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 』小林 信次

36

<xsl:sort select=“hoge“ data-type=“hoge“ order=“hoge" />

XSLT のソート機能

36

ソートする対象の要素を指定

データ型text/numberの 2 種類

昇順[ascending]降順[descending]

Page 37: 『はじめてのXSLT 』小林 信次

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 』小林 信次

38

条件式の例

price[number(.) &lt;= 3000]

条件によって表示を変える

38

[]→ フィルタパターン※中に比較式や論理式を記述可能

Page 39: 『はじめてのXSLT 』小林 信次

39

フィルタパターンの構文

price[number(.) &lt;= 3000]

条件によって表示を変える

39

要素 比較の対象 演算子

【比較式/論理式参考】http://msdn.microsoft.com/ja-jp/library/ms256081(VS.80).aspx

Page 40: 『はじめてのXSLT 』小林 信次

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 』小林 信次

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

Page 42: 『はじめてのXSLT 』小林 信次

42はじめての XSLT

42

ありがとうございました

[email protected]