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

Slides:



Advertisements
Similar presentations
XML ゼミ 独習 XML ~ 第 6 章 XHTML~ 6.1 XHTML の概要 6.2 XHTML の構造 谷津 哲平.
Advertisements

情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
第9回 2007年6月22日 応用Java (Java/XML).
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
JavaScript プログラミング入門 2006/11/10 神津.
SQLエディタによる データベースプログラミング
京都大学情報学研究科 通信情報システム専攻 湯淺研究室 M2 平石 拓
コンパイラ 2011年10月17日
プログラミング言語としてのR 情報知能学科 白井 英俊.
NC-2 情報通信基礎実験 WEBデザイン基礎実験 (2日目) 担当:清水,田代 副手:浦辺,石井.
ウェブページ制作の基礎 タグの直接入力によるウェブページの制作 次のスライドへ進んだり,戻ったりしたい時は,右下のボタンをクリック。 次へ.
HTMLの記述と WWWにおける情報公開 遠藤
数値計算及び実習 第3回 プログラミングの基礎(1).
JSFによるWebアプリケーション開発 第11回
早稲田大学大学院理工学研究科 情報科学専攻修士2年 後藤滋樹研究室 坂本義裕
ホームページの作り方.
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
PHP 概要 担当 岡村耕二 月曜日 2限 平成21年度 情報科学III (理系コア科目・2年生)
XMLゼミ 2.3 XMLのプロローグ 2.4 XMLのタグ 高橋 辰裕.
C言語 配列 2016年 吉田研究室.
卒研:データベースチーム 第4回 DOMを使った処理
アルゴリズムとデータ構造 2011年6月13日
第6章 2重ループ&配列 2重ループと配列をやります.
構造体.
FM-Tokyo Oct 30, 2004 やっと見えた! FileMaker Server Avancedの全貌
PHP 概要 担当 岡村耕二 月曜日 2限 平成20年度 情報科学III (理系コア科目・2年生)
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
コンパイラ 2012年10月15日
XMLゼミ 5.1 XML文書と表示 5.2 CSS 5.3 XMLとXSL 高橋 辰裕.
データベース設計 第9回 Webインタフェースの作成(1)
シミュレーション演習 G. 総合演習 (Mathematica演習) システム創成情報工学科
9.1 DOMの概要 9.2 DOMプログラミングの基礎 9.3 DOMのプログラミング例
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
XML Transformation Language Based On Monadic Second Order Logic
PROGRAMMING IN HASKELL
XMLゼミ 5.4 XSLT (P118~P134)          兒玉 光太郎.
独習XML 第2章 XML文書の構成要素 2.1 XMLの文字と文字列 2.2 コメント
インラインスクリプトに対するデータフロー 解析を用いた XHTML 文書の構文検証
タグを使ったウェブページ作成 兵庫県立伊丹北高等学校 佐藤 勝彦.
Microsoft PowerPoint98 Netscape Communicator 4.06[ja]
Javaによる Webアプリケーション入門 第2回
情報スキル活用 第3週 基礎技術ー3 : 学部・学科紹介のページ作成.
XMLゼミ 1.3 XML文書の表示 1.4 XMLの役割 1.5 XMLとプログラミング M2 正木 裕一.
情報スキル活用 第2週 基礎技術ー2 : Webページの基本形.
第1章 実世界のモデル化と形式化 3.地物インスタンスの表現
情報スキル活用 第4週 基礎技術-4 : その1(タグのまとめ).
PHP 概要 担当 岡村耕二 月曜日 2限 平成22年度 情報科学III (理系コア科目・2年生)
XML Schema (1) ソフトウェア特論 第3回 /
~let's take fun when you can do it~
応用Java(Java/XML) 第7回 2006年6月16日 植田龍男.
3-1.文書と構造 3-2.整形式文書と検証済み文書 兒玉 光太郎
コンピュータ プレゼンテーション.
画像を貼る 目標:このようなページを作る.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
統計ソフトウエアRの基礎.
大容量XML文書のデータ更新が 可能なXML編集ライブラリ
vc-3. ダンプリスト,配列 (Visual Studio C++ の実用知識を学ぶシリーズ)
ポインタとポインタを用いた関数定義.
アルゴリズムとデータ構造 2012年6月11日
独習XML ~第1章 XMLの基礎~ 1.1 XML文書の基礎 1.2 XMLとHTML
Webページに動きを持たせるJavascript言語について 例題のプログラムを通して体験的に理解することとします。
vc-3. ダンプリスト,配列 (Visual Studio C++ の実用知識を学ぶシリーズ)
コンパイラ 2012年10月11日
プログラミング 4 文字列.
例題のプログラムを通して JavaScriptの仕組みを理解することとします。
情報処理Ⅱ 2005年11月25日(金).
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
Presentation transcript:

XSLT XML文書はそのままでは読み易い形で表示されない。 XML文書を別のXML文書に変換して、情報抽出や表示をする枠組みがXSLT。 XML Stylesheet Language Transformtion 実体の見えにくいXML文書の可視化、利用の技術として重要。

参考書 最近はXML関連の書籍が多くなり、XSLTの記述もされているが 実用的なものとしては XSLT+XPath (ソフトバンク社) 2002年刊が詳しい。

XSLTの導入

以下のようなXML文書をいきなりIE6などの ブラウザで表示すると <?xml version="1.0" encoding="Shift_JIS" ?> - <全体>- <授業>  <番号>0005</番号>   <科目名>数学</科目名>   </授業>  </全体> しかし、これではうれしくない!!

XSLスタイルシートでXML文書をHTMLに変換する <?xml version="1.0" encoding="Shift_JIS"?> <?xml-stylesheet type="text/xsl" href="ex1a.xsl"?> <全体> <授業> <番号>0005</番号>    これが変換の <科目名>数学</科目名> のためのXSL </授業>              ファイル </全体>

XSLファイルの構造は以下の通り <?xml version="1.0" encoding="Shift_JIS" ?> - <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">  <xsl:output method="html" version="4.01" encoding="Shift_JIS" /> - <xsl:template match="/">     変換の本体部分      文書のルートに </xsl:template>         対してtemplate </xsl:stylesheet> を適用

変換の本体部分(主要部のみ) 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に変換している。

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

XSLTの文法の大雑把な詳細

XSLの主な要素  <xsl:stylesheet xmlns:xsl=“http://www.w3.org/1999/XSL/Transform” 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の結果の表示方法の指定

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要素にマッチ / 文書のルートノードにマッチ

XSLの主な要素 <xsl:call-template name=“ABC”/> <xsl:template name=“ABC”> テンプレート本体 </xsl:template> call-template は ABCという名前で別の場所で定義されたテンプレートの呼び出し

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ファイルを表示したとき見えるモノ)に要素名のタグを持つノードを生成する

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>

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>

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 として表示

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を導入して繰り返しの記述を簡略化している例

Xpathの式 XML文書のある部分を指定するための言語が Xpath 現在地(カレントノード)から目的地までの経路(Xpathの式)を一般に a/b/c という形で書く。 経路をたどる途中での点をコンテキストノードという。 a/b で<b>までくると<b>がコンテキストノード。そこから /c という経路をたどると目的地まで行く。 <root> <a> <b> <c>x</c> </c> </a>

経路 (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>子要素を選択 A[@B1 and @B2] B1属性とB2属性を持つコンテキストノードの子要素Aの全てを選択

演算子:条件式を作るために使う or and = , != < &gt , <= &gt= = , != <  &gt , <= &gt= > &lt , >= &lt=

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 を返す

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

Xpath関数 translate(123121,’123’,’abc’)  abcaba sum(ノード集合) ノードの文字列値を数値に変換して総和 <root><a>12</a> <a>23</a></root> <xsl:value-of select=“sum(<root>)) />  35