XML と XSLT 棚橋沙弥香
目次 現場のシステム構成とXML/XSLの位置づけ XMLとは XSL/XSLTとは Xalanのインストール いろいろなXSL XMLマスター試験の紹介
現場のシステム構成 HTML 画面上のデータ 電文 電文 外部 WEB サーバー (Java) CORBA 通信 認証サーバー (C 言語 ) DB XML 電文 HTML XSL XSLT 変換今回の説明範囲 電文 電文 一定の形式に従って記述された コンピュータ間で送受信されるひとまとまりのデータ 現場では 各データが固定長文字列で結合された形式となっている
XML とは XML(Extensible Markup Language) 文書やデータの意味や構造を記述するための言語 HTMLと同様 タグ と呼ばれる文字列を利用して記述するが HTMLと異なり 独自のタグを定義できる
XML の例 (languages.xml) <?xml version="1.0" encoding="shift_jis"?> <comp_langs> <comp_lang> <name>c 言語 </name> <appear>1972 年 </appear> </comp_lang> <comp_lang> <name>java</name> <appear>1995 年 </appear> </comp_lang> <comp_lang> <name>cobol</name> <appear>1959 年 </appear> </comp_lang> </comp_langs> ルート要素 ( 必ず 1 つもつ ) XML 宣言 ( 省略可 ) XML インスタンス 以下に記述する 要素 から成り立つ < 要素名 > 開始タグ 要素内容 </ 要素名 > 終了タグ 開始タグと終了タグの要素名は 必ず一致していなければならない 大文字 小文字も区別する 要素内容 には 他の要素も含められる
XML の階層構造 先ほどの例は 以下の階層構造で表せる comp_langs 果物リスト comp_lang comp_lang comp_lang name appear name appear name appear C 言語 1972 年 Java 1995 年 COBOL 1959 年
XML のパス指定 XMLでは パス指定によるデータの取得が容易 例えば comp_langs/comp_lang/name で C 言語 を示す comp_langs/comp_lang[2]/name で Java を示す comp_langs/comp_lang[3]/appear で 1959 年 を示す
XSLT/XSL とは XSLT(XSL Transformations) ある XML 文書を別の文書 (HTML 文書 テキスト文書 別の XML 文書 ) に変換すること XSL XML 文書を Web ブラウザに表示する際の設定 ( 文字の書式やサイズ 段落設定等 ) を指定できるスタイルシート言語
XSLT イメージ XML ドキュメント XSL XSLT プロセッサ XSLT 変換を行うためのソフト ( 例 :Xalan) HTML ドキュメント テキストファイル 他の XML ドキュメント
Xalan とは Xalan XSLT 変換を実現できるソフトウェア Apache ソフトウェア財団の Apache Xalan プロジェクトにより開発されている Apache ライセンスによるオープンソースのソフトウェアで Java 向けの実装と C++ 向けの実装が提供されている ( 以後 Java 向けの実装について説明する )
Xalan のインストール (1) Xalan のインストール手順は 以下の通り ( 以後 Windows へインストールする前提で説明する ) ( JDK は 1.8.0_25 Xalan は 2.7.2 で検証を行っている ) 1. JDK のダウンロード インストールを行う 手順は以下を参照のこと ( JDK or JRE の 1.3 以上が必要 ) http://www.javadrive.jp/install/jdk/index1.html 2. Xalan をダウンロードする 以下のサイトから xalan-j_x_x_x-bin.zip を取得する http://ftp.riken.jp/net/apache/xalan/xalan-j/binaries/
Xalan のインストール (2) 3. 取得した xalan-j_x_x_x-bin.zip を解凍する 4. 解凍された中に Xalanの実行に必要な4つのJARファイルがあることを確認する serializer.jar xalan.jar xercesimpl.jar xml-apis.jar 5. 4. の 4 つの JAR ファイルを jre lib ext 下にコピーする JDK のインストール先を変更しなかった場合は 以下のディレクトリ下にコピーする C: Program Files Java jre1.x.x_xx lib ext 注 )Xalan が動作しない場合は 下記ディレクトリ下にも JAR ファイルをコピーする C: Program Files Java jdk1.x.x_xx jre lib ext
Xalan の動作確認 コマンドプロンプト上で java org.apache.xalan.xslt.process と入力し Xalan のヘルプが表示されれば OK
Xalan の実行 XML ファイルを HTML ファイルに変換する場合は コマンドプロンプト上で 以下のようにパラメータを指定して実行する java org.apache.xalan.xslt.process -in [XML ファイル名 ] -xsl [XSL ファイル名 ] -out [ 出力ファイル名 ] 以下は コマンドプロンプト上で C: xml に移動後 XML ファイル名が languages.xml XSL ファイル名が sample1.xsl 出力ファイル名が sample1.html として実行する場合の例 C: >cd C: xml C: xml> java org.apache.xalan.xslt.process -in languages.xml -xsl sample1.xsl -out sample1.html
いろいろな XSL( 前提条件 ) 以後の XSL のサンプルで読み込む XML ファイルは 前出の languages.xml とする 内容は以下の通り <?xml version="1.0" encoding="shift_jis"?> <comp_langs> <comp_lang> <name>c 言語 </name> <appear>1972 年 </appear> </comp_lang> <comp_lang> <name>java</name> <appear>1995 年 </appear> </comp_lang> <comp_lang> <name>cobol</name> <appear>1959 年 </appear> </comp_lang> </comp_langs>
いろいろな XSL(1) <?xml version="1.0" encoding="shift_jis"?> <xsl:stylesheet version= 1.0 xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="html" encoding="shift_jis" /> <xsl:template match="/"> <html> <body> <xsl:value-of select="comp_langs/comp_lang/name"/> </body> </html> </xsl:template> </xsl:stylesheet> select 句に指定された要素のテキストを出力 ただし value-of 要素で選択するノードが複数存在した場合 最初のノード値を出力する XSLT スタイルシートの記述開始を宣言 変換先の出力形式を指定 テンプレートルール ( 何をどのように変換するか ) を指定 match= / は 読み込み XML のルートノードの場合 の意味 < 実行結果 > 作成された HTML の本文に C 言語 と表示される
いろいろな XSL(2) <?xml version="1.0" encoding="shift_jis"?> <xsl:stylesheet version= 1.0 xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="html" encoding="shift_jis" /> <xsl:template match="/"> <html> <body> 2 番目の comp_lang 要素の name の値を出力 <xsl:value-of select="comp_langs/comp_lang[2]/name"/> </body> </html> </xsl:template> </xsl:stylesheet> < 実行結果 > 作成された HTML の本文に Java と表示される
いろいろな XSL(3-1) <?xml version="1.0" encoding="shift_jis"?> <xsl:stylesheet version= 1.0 xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="html" encoding="shift_jis" /> <xsl:template match="/"> <html> <body> <xsl:for-each select="comp_langs/comp_lang"> <xsl:value-of select="name"/> は <xsl:value-of select="appear"/> に登場 <br/> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet> すべての comp_lang 要素について xsl:for-each 内の処理を繰り返す
いろいろな XSL(3-2) 先ほどの XSL の実行結果は以下の通り 出力 HTML に以下が表示される
いろいろな XSL(4-1) <?xml version="1.0" encoding="shift_jis"?> <xsl:stylesheet version= 1.0 xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="html" encoding="shift_jis" /> <xsl:template match="/"> <html> <body> <xsl:for-each select="comp_langs/comp_lang"> <xsl:sort select="appear order= ascending /> <xsl:value-of select= name /> は <xsl:value-of select="appear"/> に登場 <br/> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet> appear 要素の昇順にソート
いろいろな XSL(4-2) 先ほどの XSL の実行結果は以下の通り 出力 HTML に以下が表示される
いろいろな XSL(5-1) <?xml version="1.0" encoding="shift_jis"?> <xsl:stylesheet version= 1.0 xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="html" encoding="shift_jis" /> <xsl:template match="/"> <html> <body> <xsl:for-each select="comp_langs/comp_lang"> <xsl:if test="name='java'"> <xsl:value-of select= name /> は <xsl:value-of select="appear"/> に登場 <br/> </xsl:if> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet> name 要素が Java の場合のみ xsl:if 内の処理を行う
いろいろな XSL(5-2) 先ほどの XSL の実行結果は以下の通り 出力 HTML に以下が表示される
いろいろな XSL(6-1) <?xml version="1.0" encoding="shift_jis"?> <xsl:stylesheet version= 1.0 xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="html" encoding="shift_jis" /> <xsl:template match="/"> <html> <body> <xsl:call-template name="comp"/> </body> </html> </xsl:template> comp という名前の template を呼び出す <xsl:template name= comp > と書かれた定義が呼ばれる 次ページに続く
いろいろな XSL(6-2) <xsl:template name="comp"> <xsl:for-each select="comp_langs/comp_lang"> <xsl:if test="name='java'"> <xsl:value-of select= name /> は <xsl:value-of select="appear"/> に登場 <br/> </xsl:if> </xsl:for-each> </xsl:template> </xsl:stylesheet> この XSL の実行結果は 以下の通り 出力 HTML に以下が表示される
XML マスター試験 XML スキルを持つ技術者の育成を目標に XML 技術者育成推進委員会によって発足した XML 技術者認定制度 ベーシックとプロフェッショナルがある ベーシック試験は 試験時間 60 分 出題数 50 問 70% 以上の正解率で合格となる 受験料は 15,750 円 参考書は以下のようなものがある
参考文献 参考サイト XML マスター教科書ベーシック V2 Xalan について http://www.ajisaba.net/etc/xalan.html