Presentation is loading. Please wait.

Presentation is loading. Please wait.

XSLT XML文書はそのままでは読み易い形で表示されない。 XML文書を別のXML文書に変換して、情報抽出や表示をする枠組みがXSLT。

Similar presentations


Presentation on theme: "XSLT XML文書はそのままでは読み易い形で表示されない。 XML文書を別のXML文書に変換して、情報抽出や表示をする枠組みがXSLT。"— Presentation transcript:

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 = , != < > , <= >=
= , != <  &gt , <= &gt= > &lt , >= &lt=

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


Download ppt "XSLT XML文書はそのままでは読み易い形で表示されない。 XML文書を別のXML文書に変換して、情報抽出や表示をする枠組みがXSLT。"

Similar presentations


Ads by Google