1 / 23

XSLT

XSLT. XML 文書はそのままでは読み易い形で表示されない。 XML 文書を別の XML 文書に変換して、情報抽出や表示をする枠組みが XSLT 。 X ML S tylesheet L anguage T ransformtion 実体の見えにくい XML 文書の可視化、利用の技術として重要。. 参考書. 最近は XML 関連の書籍が多くなり、 XSLT の記述もされているが 実用的なものとしては XSLT+XPath ( ソフトバンク社)  2002 年刊が詳しい。. XSLT の導入.

nasnan
Download Presentation

XSLT

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

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文書をいきなり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="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:outputmethod="html" version="4.01" encoding="Shift_JIS" />- <xsl:template match="/">     変換の本体部分      文書のルートに </xsl:template>       対してtemplate </xsl:stylesheet> を適用

  7. 変換の本体部分(主要部のみ) <HTML LANG="ja"> <BODY> <TABLE BORDER="1"> <TR><CAPTION>例</CAPTION> <TH>科目番号</TH> <TD><xsl:value-ofselect=“全体/授業/番号”/></TD> <TH>科目名</TH> <TD><xsl:value-ofselect=“全体/授業/科目名” /></TD> </TR> </TABLE> </BODY> </HTML> XML内の要素を取り出し、HTMLのTABLEに変換している。

  8. Template別に書いておいて適用することもできるTemplate別に書いておいて適用することもできる <html>…..<body>…. <xsl:appply-templates select=“全体/授業”/> …. </body></html> 対応する <xsl:template match=“全体/授業”> <xsl:value-of select=“.”/> 全体/授業の内容 </xsl:template> を取り出す

  9. XSLTの文法の大雑把な詳細

  10. XSLの主な要素 • <xsl:stylesheetxmlns:xsl=“http://www.w3.org/1999/XSL/Transform” version=“1.0”><xsl:outputmethod=“xml” version=“1.0” indent=“yes” />本体 </ xsl:stylesheet> • XSLファイルであることの宣言。XSLの先頭に書く。 • <xsl:outputmethod=“html か xml か text” version=“4.01” encoding=“Shift_JIS” indent=“yes か no" /> • xmlの結果の表示方法の指定

  11. XSLの主な要素 • <xsl:template match=“パターン” name=“テンプレート名”> <xsl:apply-templatesselect=“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-ofselect=“Xpathの式” /> • Xpathの式で指定したノード以下をテキストに変換 • <xsl:copy-ofselect=“ Xpathの式” /> • Xpathの式で指定したノード以下をコピーする • <xsl:copy>    テンプレート例えば<xsl:apply-templates /> </xsl:copy> • カレントノードをコピーする • <xsl:element name=“要素名”>- 作成する要素の内容かテンプレート。例えば<xsl:value-ofselect=“a/b” /> </xsl:element> • XMLのファイルの結果ツリー(XMLファイルを表示したとき見えるモノ)に要素名のタグを持つノードを生成する

  14. XSLの主な要素( テンプレートの中身になるもの) • <xsl:comment>この一文はコメントです。</xsl:comment> • コメントの作成(「この一文はコメントです。」) • <xsl:text>テキスト012345</xsl:text> • テキストの作成(「テキスト012345」) • <xsl:numberformat=“01(数字昇順) か a (アルファベット順)など” /> • ノードに番号付けをする。 • 使用例: • <xsl:for-each select=“品名”> <xsl:numberformat="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:sortselect="価格" data-type="number" order="ascending" /> <tr>- <th> <xsl:value-of select="品名" /> </th>- <td> <xsl:value-of select="価格" /> </td> </tr> </xsl:for-each> </table> • xsl:sortselect=“価格”data-type=“number” order=“ascending“は価格要素をキーにして数字の昇順で並べ替える。 • さらにこの例では、その結果をhtmlの表 table として表示

  17. XSLの主な要素:判断、繰り返し制御( テンプレートの中身になるもの) <xsl:variablename=“info” select=“/全体/情報” /> <xsl:template match="/"> <xsl:value-ofselect=“$info/品名” />の販売実績は、 <xsl:value-ofselect=“$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を選択 • * コンテキストノードの子要素全部を選択 • text() コンテキストノードの子要素のうちのテキストノードを選択 • @A コンテキストノードの属性Aを選択 • <tag A=“10”> だと tagがタグ名、Aが属性、10が値 • @* コンテキストノードの属性の全てを選択 • A[1] コンテキストノードの最初の子要素Aを選択 • A[last] コンテキストノードの最後の子要素Aを選択 • //A 文書のルートのAというノードを全て選択 • . (ピリオド) コンテキストノードを選択 • .. (ピリオド2個) コンテキストノードの親を選択 • a<b> 1個以上の<b>要素を持つコンテキストノードの<a>子要素を選択 • A[@B1 and @B2] 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を文字列にする • 非数値は 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

More Related