Download presentation
Presentation is loading. Please wait.
Published byえりか はらしない Modified 約 7 年前
1
XSLT XML文書はそのままでは読み易い形で表示されない。 XML文書を別のXML文書に変換して、情報抽出や表示をする枠組みがXSLT。
XML Stylesheet Language Transformtion 実体の見えにくいXML文書の可視化、利用の技術として重要。
2
参考書 最近はXML関連の書籍が多くなり、XSLTの記述もされているが 実用的なものとしては
XSLT+XPath (ソフトバンク社) 2002年刊が詳しい。
3
XSLTの導入
4
以下のようなXML文書をいきなりIE6などの ブラウザで表示すると
<?xml version="1.0" encoding="Shift_JIS" ?> - <全体>- <授業> <番号>0005</番号> <科目名>数学</科目名> </授業> </全体> しかし、これではうれしくない!!
5
XSLスタイルシートでXML文書をHTMLに変換する
<?xml version="1.0" encoding="Shift_JIS"?> <?xml-stylesheet type="text/xsl" href="ex1a.xsl"?> <全体> <授業> <番号>0005</番号> これが変換の <科目名>数学</科目名> のためのXSL </授業> ファイル </全体>
6
XSLファイルの構造は以下の通り <?xml version="1.0" encoding="Shift_JIS" ?> - <xsl:stylesheet xmlns:xsl=" version="1.0"> <xsl:output method="html" version="4.01" encoding="Shift_JIS" /> - <xsl:template match="/"> 変換の本体部分 文書のルートに </xsl:template> 対してtemplate </xsl:stylesheet> を適用
7
変換の本体部分(主要部のみ) XML内の要素を取り出し、HTMLのTABLEに変換している。 <HTML LANG="ja">
<BODY> <TABLE BORDER="1"> <TR> <CAPTION>例</CAPTION> <TH>科目番号</TH> <TD> <xsl:value-of select=“全体/授業/番号”/> </TD> <TH>科目名</TH> <TD> <xsl:value-of select=“全体/授業/科目名” /> </TD> </TR> </TABLE> </BODY> </HTML> XML内の要素を取り出し、HTMLのTABLEに変換している。
8
Template別に書いておいて 適用することもできる
<html>…..<body>…. <xsl:appply-templates select=“全体/授業”/> …. </body></html> 対応する <xsl:template match=“全体/授業”> <xsl:value-of select=“.”/> 全体/授業の内容 </xsl:template> を取り出す
9
XSLTの文法の大雑把な詳細
10
XSLの主な要素 <xsl:stylesheet xmlns:xsl=“ version=“1.0”> <xsl:output method=“xml” version=“1.0” indent=“yes” /> 本体 </ xsl:stylesheet> XSLファイルであることの宣言。XSLの先頭に書く。 <xsl:output method=“html か xml か text” version=“4.01” encoding=“Shift_JIS” indent=“yes か no" /> xmlの結果の表示方法の指定
11
XSLの主な要素 <xsl:template match=“パターン” name=“テンプレート名”>
<xsl:apply-templates select=“Xpathの式” > テンプレートの内容 (省略の場合は、指定されたモノ自体) </xsl:allply-templates> </xsl:template> template は、パターンにマッチする要素の指定 apply-templates はXpathの式で表されるテンプレートの適用 </xsl:xxx… /> は<xsl:xxx …></xsl:xxx>の省略 パターンの例 A 全てのA要素にマッチ * 全ての要素にマッチ A||B 全てのA要素または全てのB要素にマッチ A/B Aを親とする全てのB要素にマッチ A//B Aを祖先とする全てのB要素にマッチ / 文書のルートノードにマッチ
12
XSLの主な要素 <xsl:call-template name=“ABC”/>
<xsl:template name=“ABC”> テンプレート本体 </xsl:template> call-template は ABCという名前で別の場所で定義されたテンプレートの呼び出し
13
XSLの主な要素 ( テンプレートの中身になるもの)
<xsl:value-of select=“Xpathの式” /> Xpathの式で指定したノード以下をテキストに変換 <xsl:copy-of select=“ Xpathの式” /> Xpathの式で指定したノード以下をコピーする <xsl:copy> テンプレート例えば <xsl:apply-templates /> </xsl:copy> カレントノードをコピーする <xsl:element name=“要素名”>- 作成する要素の内容かテンプレート。例えば<xsl:value-of select=“a/b” /> </xsl:element> XMLのファイルの結果ツリー(XMLファイルを表示したとき見えるモノ)に要素名のタグを持つノードを生成する
14
XSLの主な要素 ( テンプレートの中身になるもの)
<xsl:comment>この一文はコメントです。</xsl:comment> コメントの作成(「この一文はコメントです。」) <xsl:text>テキスト012345</xsl:text> テキストの作成(「テキスト012345」) <xsl:number format=“01(数字昇順) か a (アルファベット順)など” /> ノードに番号付けをする。 使用例: <xsl:for-each select=“品名”> <xsl:number format="01" /> <xsl:apply-templates /> </xsl:for-each>
15
XSLの主な要素:判断、繰り返し制御 ( テンプレートの中身になるもの)
<xsl:if test=“条件式 例えば(価格>1000)”>- 条件式は成立する場合に実行するテンプレート </xsl:if> <xsl:for-each select=“Xpathの式”> Xpathの式のすぐ内側のノードに繰り返し適用するテンプ レート </xsl:for-each> <xsl:choose>- <xsl:when test=“条件式”>- 条件式が成立した場合に実行するテンプレート </xsl:when>- <xsl:when test=“別の条件式”>- 別の条件式が成立した場合に実行するテンプレート </xsl:when>- <xsl:otherwise> 上の条件式が全部成立しなかった場合に実行するテンプレート</xsl:otherwise> </xsl:choose>
16
XSLの主な要素:判断、繰り返し制御 ( テンプレートの中身になるもの)
<table border=“1”>- <xsl:for-each select=“情報”> <xsl:sort select="価格" data-type="number" order="ascending" /> <tr>- <th> <xsl:value-of select="品名" /> </th>- <td> <xsl:value-of select="価格" /> </td> </tr> </xsl:for-each> </table> xsl:sort select=“価格” data-type=“number” order=“ascending“ は価格要素をキーにして数字の昇順で並べ替える。 さらにこの例では、その結果をhtmlの表 table として表示
17
XSLの主な要素:判断、繰り返し制御 ( テンプレートの中身になるもの)
<xsl:variable name=“info” select=“/全体/情報” /> <xsl:template match="/"> <xsl:value-of select=“$info/品名” /> の販売実績は、 <xsl:value-of select=“$info/価格*$info/販売数*1.05” /> 円です。 </xsl:template> 変数$infoを導入して繰り返しの記述を簡略化している例
18
Xpathの式 XML文書のある部分を指定するための言語が Xpath
現在地(カレントノード)から目的地までの経路(Xpathの式)を一般に a/b/c という形で書く。 経路をたどる途中での点をコンテキストノードという。 a/b で<b>までくると<b>がコンテキストノード。そこから /c という経路をたどると目的地まで行く。 <root> <a> <b> <c>x</c> </c> </a>
19
経路 (Xpathの式)の表現方法 / 文書のルートノード A コンテキストノードの子要素Aを選択 * コンテキストノードの子要素全部を選択
/ 文書のルートノード A コンテキストノードの子要素Aを選択 * コンテキストノードの子要素全部を選択 text() コンテキストノードの子要素のうちのテキストノードを選択 @A コンテキストノードの属性Aを選択 <tag A=“10”> だと tagがタグ名、Aが属性、10が値 @* コンテキストノードの属性の全てを選択 A[1] コンテキストノードの最初の子要素Aを選択 A[last] コンテキストノードの最後の子要素Aを選択 //A 文書のルートのAというノードを全て選択 . (ピリオド) コンテキストノードを選択 .. (ピリオド2個) コンテキストノードの親を選択 a<b> 1個以上の<b>要素を持つコンテキストノードの<a>子要素を選択 B1属性とB2属性を持つコンテキストノードの子要素Aの全てを選択
20
演算子:条件式を作るために使う or and = , != < > , <= >=
= , != < > , <= >= > < , >= <=
21
Xpath関数(Xpathの式として使う)
position() ノードの位置を数値で返す <xsl:if test=“position()=2”> <xsl:apply-template /> last() ノード数を返す <xsl:if test=“position()=last()” /> count(ノード集合) count(A/B) <A>の子孫にあるノード全部の中の<B>の要素数 local-name() カレントノードのローカル名 <xsl:value-of-select=“local-name() /> <xsl:abc> abc がローカル名 name()はブローバル名 xsl:abc を返す
22
Xpath関数 string(A) ノードAを文字列にする number(A) Aを数値にする
非数値は NaN, <xsl:if test=“string(number(価格))=‘NaN’”> number(A) Aを数値にする concat(文字列1,文字列2,…) 連結された文字列 substring(“abcdef”,2,3) “bcd” 部分文字列 string-length(“abc”) 3
23
Xpath関数 translate(123121,’123’,’abc’) abcaba
sum(ノード集合) ノードの文字列値を数値に変換して総和 <root><a>12</a> <a>23</a></root> <xsl:value-of select=“sum(<root>)) /> 35
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.