テンプレート指定は、 xsl : セ e Ⅲ pl e 要素の内部に記述された XSL の動作が、 XML 文書中のどの要素に対して作用するのかを指定するものです。要素名やバター ンを指定することカてきます。 テンプレート指定 ・テンプレート指定 Aexs1:temp1ate テンプレート指定は、次のように xsl : セ emplate 要素を用いて行います。 xsl:template では、 XSL の処理対象とする要素を特定し、 <xsl:tem- plate>æ</xsl:template> の間で、その対象に対して行う処理を指定し ます。どの要素を処理対象とするかは、Ⅲ a し ch 属性で指定します。 <xsl:template Ⅲ a し ch = “要素名 " > ・ ・ </xsl:template> このように具体的に XSL の処理対象とする要素名を指定しても構いません し、次のようにパターンを指定し、そのパターンに一致する要素を処理対象と することもできます。パターン指定の詳細は、 p. 140 を参照してください。 <XSI : template match= " ノ ( 。ターン " > ・ ・すべての要素を取り出す指定 ・ </xsl:template> 次のスタイルシートを見てみましよう。 / は、 XML 文書のルート要素を意味する特別な記号です。実際のルート要素 の名前が何であるかは問いません。したがってこのテンプレートは、ルート要 素カ舸であっても、無条件に適用されます。ここで使われている xsl : value ー 。 f は、この要素以下の、つまりルート要素以下、すべての要素の値を抽出す る XSL 要素です。 136
マ使用例 <xsl:template match="/"> <xsl:apply—templates select="// 工 tem" Quantity “ / > </xsl:template> XML を表示する order—by=n 十 Price; Chapter . このテンプレートは " / " なので、無条件にルート要素にマッチして、ルート要素以下の任 意の階層にある工 t 要素を選択し、 price で昇順にソートし、さらに Quan し y で降 0 : ¥ xm Ⅳ ou ′ c 蘚ⅶ p 1. x ー M ⅳ 08 社 t t E 即、住同 = ロ ↓万イル 0 偏集 ) 表示お知こ入り住 ) ツール” マ表示例 を移動 価格 , 数量 価格 , 数量 価格 , 数量 : シャーシ 30000 60000 : 工ンジン 30000 100 : ドライプユ二ット 40000 5000 ・繰り返しと条件分岐 ・繰り返し処理—xsl:for-each 指定のパターンに一致する複数の要素それぞれに対して、 xsl : for-each に指定した処理が適用されます。 <XSI : for-each select=" / ( 。ターン“ く /xsl : for—each> ・条件付き処理—xsl:if order-by = " バター ン” > 指定のパターンを満たす要素に対してのみ xsl : 土 f に指定した処理が適用さ れます。 149
3 ー 6 ルート要素 XML データ内の要素をすべてまとめるおおもとの親となる要素があります。これ を「ルート要素」といいます。整形式 XML であっても検証済み XML であっても、 XML 文書には入り口となるルート要素が必要です。 ・ルート要素は 1 文書にひとつだけ XML には、ルートと呼ばれる要素があります。その XML 文書の要素をす べて包含する唯一の要素で、 1 文書にひとっしかありません。このルート要 素の始めからルート要素の終りまでが XML データとなります。 XML 宣言、 要素、ルートの 3 つがあり、整形式になっていれば、自分の作った XML を IE5.0 で表示することができます。 ですから、以下のような表現は、ルート要素がないので正しくありません。 く見出し > BNP 、バリバを買収く / 見出し > く記事 > これを正しい表現にするには、次のようにグループ化します。 く副見出し > 経済部へ松木 4 副見出し > く見出し > BNP 、パリバを買収く / 見出し > 並列表記 ルート要素 60 されます。 たとえば、記事というルート要素があるとき、 XML 文書は次のようにあらわ く / 記事 > く副見出し > 経済部へ松木く / 副見出し >
4 ー 5 文書型宣言 DTD の大き殳割のひとっとして、要素を定義すること、要素間の冓造を定義す ること、および必要な属性を設定することがあります。先似列は大変単純でしたが、 実際には、すべての要素と、それらの階層関係を記述しなければなりません。 DTD 内では、 DOCTYPE 、 EL 風皿↓ T 、 ATTL 工 ST 宣言を用いて定義を行います。 0 DTD と ) ト要素旨定 ~ DOCTYPE DOCTYPE 宣言は、 XML 文書の最初の入り口となるルート要素を指定しま す。パーサーは、必ずこのルート要素から処理を始めます。 DTD の記述はこの DOCTYPE 宣言から始めなくてはなりません。 次の図は、 DOCTYPE 宣言とルート要素、およびルート要素とそれ以外の要 素との関係を示しています。この DTD のルート要素は発注書です。 vDOCTYPE 宣言と )トト要素 く ! DOCTYPE 発 ) 主書 [ 発注書を細分化したもの 一三ロ 発注者 発注日 発注内容 品名 ルート要素 注 発 十一 87
次に、いくつかの位置指定例を発注書 (order. (1) に対応させて見てみ ましよう。 v 位置指定」 ルート→ 2 番目のテキスト 00 セ ) . descendant ( 2 を #text ルート→ 2 番目の子 00t ( ) . ch 土 1d ( 2 Pu 「 chaser Address 0 「 de 「 Date 07 / 06 / 2000 Phone Company 太陽製作所 新宿区 03-32XX-XXXX ルート→ 1 番目のは ems → 2 番目のは em て 00t ( ) ー . ch 土 ld ( 1 ′工 tems) ・ ch 土 lä ( 2 ーエ tem)? lte m bescription ボディ ltem P 「 ice 50000 Contact 山崎四郎 ltem Quantity 200 Desc 「 iption 工ンジン P 「 30000 QuantitY 100 Description 1 シャーシ Price 30000 ltems 60000 Qua ntity ルート→ 1 番目のは ems → 3 番目のテキスト 00 し ( ) . descendant (1 ′工 tems) . descendant (3,#text) 178 ルート→ 4 番目の子→ 2 番目の子→ 1 番目の Quantity 00t ( ) . chi1d(4) . c ild ( 2 ) .0 れ土 ld ( 1 ′ 0 an セ土セ Y )
6 ー 9 基本 xs し要素 148 る要素が見つかると、それに対して指定されているテンプレートが実行されます。 素を指定します。 + 要素で昇順、一要素で降川頁になります。パターンにマッチす を見つけるためのパターンを指定します。ソー村綻には、ソートキーとする要 バターンには、カレント要素以下の要素で次にテンプレートを適用させる要素 <xsl:apply-templates selec し = " ノ ( 。ターン。 order-by=" ソート旨定 " / > selec む属性を指定しないと、カレント要素の子供の全要素を処理対象にします。 xsl:apply-templates は、パターンにマッチする要素を処理対象にします。 ・テンプレートを適用する要素旨定—xsl:apply-templates 致する条件カったときに、テンプレート内に指定された動作が実行されます。 ます。テンプレートは受け身に動作します。つまり、指定されたパターンに合 す。スクリプト言語には xsl : scr 土 pt 中で記述するスクリプト言語を記述し パターンには、このテンプレートを適用する要素またはパターンを記述しま </xsl : template> <xsl:template match=" ノ (。ターン " language = 。スクリプト言ま吾。 > ・・・ xsl : し e Ⅲ pla し e では、スタイルシートの処理対象となる要素を指定します。 ・テンプレート窈旨定—xsl :template ・テンプレート っていただけると思います。 けやスクリプトの指定など、 XSL を使うとかなり複雑な処理ができることが、わか XSL の主要な要素について、構文の概要を旧 5. O をベースに説明します。条件分
4 ー 3 内部ロ T ロと 外部ロ T ロ 通常 DTD は、 XML 宣言に続いて記述しますが、外部ファイルに記述してその 場所を IJ で指定することもできます。 XML 文書の中に DTD を記述するものを内 部 DTD 、 XML 文書とは別に DTD 用のファイルを作って、そこに DTD を記述す るものを外部 DTD と呼びます。 ・内部 DTD 通常、 DTD は XML 宣言に続いて記述します。このように、 XML 文書の中 に DTD の記述があるものを内部 DTD といいます。 DTD の記述は DOCTYPE で 開始します。 DTD の基本的な形式は次のとおりです。 <!DOCTYPE ルート要素名 [ ・・・ DTD の記述・・・ ] > XML 文書全体で唯一のルートと なる要素名を指定 ・外部 DTD この部分に後述の要素名やそ の構造、属性などを指定 DTD の記述を外部ファイルに置くこともできます。これを外部 DTD といい、 複数の XML 文書が同一の DTD を利用する場合に大変重要な方式です。あるシ ステム内のすべての DTD を一箇所に集めておけば、一元的にデータ構造を管 理でき、安全性も高まります。 DTD のありかは以下のように URI で指定しま す。なお、 [ ・・・ D ルの記述・・・ ] は省略可能です。 ルート要素名 PUBL 工 c " 公開識方グ子 " " 工 " [ ・・・ DTD の言己述・・・ ] > 公開されている DTD ( 公開 <!DOCTYPE ルート要素名 SYSTEM 純沢蹙 [ ・・・ DTD の言己述・・・ ] > 識別子を持つ ) の場合 公開識別子を持たない DTW ) 場合 84 外部 DTD の場所 [ ・・・ DTD の記述・・・ ] は、な くても構わない
XML を表示する Chapter <xsl:stylesheet nlns : xsl = 第 h し p : / ハ . w3 . org/TR/WD—xs1"> <xsl:template match="/"> <xsl:value-of/> く /xsl:template> </xsl : stylesheet> ルート要素に対して ( 処理対象の特定 ) ルート以外の要素の値をす べて取り出す ( 処理動作の 指定 ) P. 133 で提示した order . にこの XSL を適用してみましよう。次のよう な結果が得られます。 XSL のプロセッサは、入力となる XML 文書のルート要 素から順次、ツリー構造をたどり、 xsl : し e 叩 la セ e の爪 a し ch 属性に指定さ れたパターンと要素名との一致を調べていきます。この例では、 match="/" によって無条件にルート要素に対して xs 1 : し emplat e が作用します。 xsl:template には、現在の要素の下の階層にあるすべての要素の値を取り 出す指定 <xsl:value-of/> があるので、次の画面のように、全要素の値 O:*x ml*source*s i mplel. x m ト M icrosoft t 針 n Exp 亂 」アドレス ) 、旦 ] O:*xml*source*simple1. xml 」ファイル 0 編集 ( 印表示お気に入り (A) ツールヘルプ ( 印 v テンプレートの用結果 がつながった表示が得られます。 50000 200 シャーシ 30000 60000 ドライブユニット 40000 5000 太陽製作所新宿区 03-3226-3666 07 / 06 / 1999 山崎四郎工ンジン 30000 100 ボディ 全要素窈直がつながっている 「マイコ北。ュータ 切べージが表示されました ・特定の要素たけを取り出す指定 それでは、この XSL を特定の要素工セ e Ⅲだけに働かせてみましよう。発注企 業名など、 XML 文書の前の部分は表示されずに、後ろにある発注品目に関す る情報だけが表示されます。 137
XPointer では、はじめに絶対位置を指定し、次に相対位置の指定をします。 こでは、位置指定の詳細を解説しましよう。 7 ー 7 絶対位置の指定 マ絶対位置旨定 ( 一部省略 ) 該当 XML 文書のルート要素が起点になります。 基準位置は、絶対的な位置で指定しなければなりません。指定を省略すると、 リンクが最初に到達する場所は、ポインタの起点 ( 基準位置 ) になります。 0 基準位置旨定 指定 r00 し ( ) origin ( ) id に d 属性直 ) h セⅢ 1 ( ) 174 ポイントする場所 文書のトップ ( ルート要素 ) リンク移動の発生時のリンクの起点 指定した土 d の場所 U で指定した HTML 文書での属性値を持つ A 要素 ( には該当 HTML 文書の name 属性の値を指定 )
6 ー 7 バターン マバターンで使う特殊記号 パターンには、いくつか特定の意味を持つ記号があります。 ・バターンで使う特殊記号 ッチングといいます。 ーンといいます。また、パターンに一致した処理対象を得ることをバターンマ て、さまざまな形で、 XSL の処理対象を指定することができます。これをバタ を持つ記号がほかにもあります。こうした記号と要素名や属性名を組み合わせ て処理の対象を確定しました。 XSL では、要素名以外に / のような特別な意味 先の例では、 match="/" でルート要素を指定したり、要素名を直接指定し ・バターンとバターンマッチング うなバターンで指定することもできます。 素名や属性名を指すこともできますが、それ以外に位置関係やワイルドカードのよ XSL では、処理の対象とする要素や属性を指定しなければなりません。特定の要 記号 意味 親子関係にあるノードとノードの間をあらわす。単独ま たは、パターンの先頭ではルート要素を意味する / と同様、親と子の要素の境界をあらわすが、 / / の場合 は両者の間に複数の階層があってもよい 現在処理対象となっているノード 属性か指定されている、あるいは特定の属性を持っ要素を 指す。 / ヾターン中で一番終わり ( 右端 ) にのみ指定できる 「任意の」を意味する これらの記号を使ったパターンの例です。 140