/another/another0001.xml back up
コンテンツによって多少の構造の違いがありますが、サイト内のXMLファイルはだいたい同じ親子関係の要素で構造化されています(そうしないとソース書き間違えるため)。このページの解説はXMLファイルを作成したことがあるという程度のスキルをお持ちであることを前提としています。
例としてhpディレクトリのファイルを採りあげます。構造化要素と書かれているのは要素内にテキストを所持せず子要素のみ所有する要素です。テキストがデータとして「題名」「ファイルの説明」「コンテンツ」など、どういったグループに所属するのかを分類し、テキスト自体を所有する要素に意味づけをするものです。テキスト格納要素と書かれているのは要素内にテキストを所有する要素です。テキスト格納要素は大きな意味で「コンテンツ」と呼べます。なお構造化要素、テキスト格納要素とは、いま勝手にでっち上げた言葉で正式には通用しません。すみません。XMLのこのような構造を「ツリー構造」と言います(これはホント)。
XML宣言文 XSLT参照先 要素file_root(構造化要素:root要素で全ての要素を所有) │ ├要素head_group(構造化要素:ファイル情報要素よ所有) │ ├要素head_title(テキスト格納要素:タイトルを格納) │ └要素head_dir_add(テキスト格納要素:ファイルの階層を格納) │ └要素doc_group(構造化要素:コンテンツ用要素を所有) ├要素doc_header2(テキスト格納要素:ページ全体の表題を格納) ├要素doc_info(テキスト格納要素:ページ全体の概要を格納) │ └要素doc_src(構造化要素:セクション(段落)用要素を所有) ├要素doc_header3(テキスト格納要素:段落の表題を格納) │ └要素div_group(構造化要素:段落の文章を所有) │ └要素doc_div(構造化要素:文章を所有) ├要素division(テキスト格納要素:文章本体を格納) │ ├要素anchor_group(構造化要素:ハイパーリンク用要素を所有) │ ├要素anchor_href(テキスト格納要素:リンク先file名を格納) │ ├要素anchor_window(テキスト格納要素:target属性の値を格納) │ └要素anchor_text(テキスト格納要素:リンク用テキストを格納) │ ├要素img_group(構造化要素:画像表示用要素を所有) │ ├要素img_src(テキスト格納要素:画像のファイル名を格納) │ ├要素img_alt_text(テキスト格納要素:ALT属性の値を格納) │ ├要素img_width(テキスト格納要素:画像の幅の値を格納) │ └要素img_hight(テキスト格納要素:画像の高さの値を格納) │ └要素pre_group(構造化要素:pre表示用要素を所有) └要素pre_text(テキスト格納要素:pre表示テキストを格納)
表示するだけが目的ならば、要素を親子関係にする必要はありません。あくまでも意味付けのために階層化されています。
要素doc_srcは(XSLTによって)複数回繰り返すことが可能です。よってページ内に複数の段落を表示できます。また要素doc_divは(XSLTによって)要素doc_src内で複数回繰り返すことが可能です。よって段落内に複数の文章を繰り返すことが可能です。
例としてhpディレクトリのファイルを採りあげます。要素doc_srcは2回繰り返しています。要素doc_divは1つ目のdoc_src内で2回繰り返しています。行頭の数字は該当箇所を示すためのもので、実際のプログラムでは不要です。
01 <?xml version="1.0" encoding="UTF-8"?> 02 <?xml-stylesheet type="text/xsl" href="another_xml_xslt.xsl"?> 03 <file_root> 04 <head_group> 05 <head_title>ページのタイトル</head_title> 06 <head_dir_add>ファイルの住所</head_dir_add> 07 </head_group> 08 <doc_group> 09 <doc_header2>ページの題字</doc_header2> 10 <doc_info xml:space="default">概要</doc_info> 11 <!--1回目の要素doc_src--> 12 <doc_src> 13 <doc_header3>題字(セクション1)</doc_header3> 14 <div_group> 15 <!--1回目の要素doc_div--> 16 <doc_div> 17 <division xml:space="default">文章1-1</division> 18 <anchor_group> 19 <anchor_href></anchor_href> 20 <anchor_window></anchor_window> 21 <anchor_text></anchor_text> 22 </anchor_group> 23 <img_group> 24 <img_src></img_src> 25 <img_alt_text></img_alt_text> 26 <img_width></img_width> 27 <img_hight></img_hight> 28 </img_group> 29 <pre_group> 30 <pre_text>pre用テキスト</pre_text> 31 </pre_group> 32 </doc_div> 33 <!--2回目の要素doc_div--> 34 <doc_div> 35 <division xml:space="default">文章1-2</division> 36 <anchor_group> 37 <anchor_href></anchor_href> 38 <anchor_window></anchor_window> 39 <anchor_text></anchor_text> 40 </anchor_group> 41 <img_group> 42 <img_src>../image/null.jpg</img_src> 43 <img_alt_text>オルト属性値</img_alt_text> 44 <img_width>200</img_width> 45 <img_hight>100</img_hight> 46 </img_group> 47 <pre_group> 48 <pre_text></pre_text> 49 </pre_group> 50 </doc_div> 51 </div_group> 52 </doc_src> 53 <!--2回目の要素doc_src--> 54 <doc_src> 55 <doc_header3>題字(セクション2)</doc_header3> 56 <div_group> 57 <doc_div> 58 <division xml:space="default">文章2-1</division> 59 <anchor_group> 60 <anchor_href>nextpage.xml</anchor_href> 61 <anchor_window>self</anchor_window> 62 <anchor_text>次のページ</anchor_text> 63 </anchor_group> 64 <img_group> 65 <img_src></img_src> 66 <img_alt_text></img_alt_text> 67 <img_width></img_width> 68 <img_hight></img_hight> 69 </img_group> 70 <pre_group> 71 <pre_text></pre_text> 72 </pre_group> 73 </doc_div> 74 </div_group> 75 </doc_src> 76 </doc_group> 77 </file_root>
以下で行ごとにプログラムソースの解説をします。
XML宣言文です。
<?xml version="1.0" encoding="UTF-8"?>
参照先XSLファイルです。
<?xml-stylesheet type="text/xsl" href="another_xml_xslt.xsl"?>
このXMLファイルのルート要素です。
<file_root> ・・・ </file_root>
head_group要素です。子要素head_titleとhead_dir_addを持ちます。
<head_group> <head_title>ページのタイトル</head_title> <head_dir_add>ファイルの住所</head_dir_add> </head_group>
doc_group要素です。コンテンツ用要素を全て所有します。
<doc_group> ・・・ </doc_group>
doc_header2要素です。ページの題字テキストを格納します。
<doc_header2>ページの題字</doc_header2>
doc_info要素です。ページ概要を解説したテキストを格納します。xml:space="default"自体はあまり意味がありません。"default"ではないときに表示上の意味が発生します。
<doc_info xml:space="default">概要</doc_info>
doc_src要素です。子要素doc_header3とdiv_groupを所有します。
<doc_src> ・・・ </doc_src>
div_group要素です。子要素doc_divを所有します。
<div_group> ・・・ </div_group>
doc_div要素です。子要素divisionとanchor_groupとimg_groupとpre_groupを所有します。
<doc_div> <division xml:space="default">文章</division> <anchor_group> <anchor_href></anchor_href> <anchor_window></anchor_window> <anchor_text></anchor_text> </anchor_group> <img_group> <img_src></img_src> <img_alt_text></img_alt_text> <img_width></img_width> <img_hight></img_hight> </img_group> <pre_group> <pre_text>pre用テキスト</pre_text> </pre_group> </doc_div>
division要素です。文章テキストを格納します。
<division xml:space="default">文章1-1</division>
anchor_group要素です。anchor_groupは子要素anchor_hrefとanchor_windowとanchor_textを所有します。XSLTによってHTMLのancher要素に変換します。anchor_hrefはhref属性値に、anchor_windowはtarget属性値に、anchor_textはリンクスイッチになる(下線が引かれフォントカラーが変わる)テキストに、それぞれ変換されます。
<anchor_group> <anchor_href></anchor_href> <anchor_window></anchor_window> <anchor_text></anchor_text> </anchor_group>
img_group要素です。img_groupは子要素img_srcとimg_alt_textとimg_widthとimg_hightを所有します。XSLTによってHTMLのimg要素に変換します。img_srcはsrc属性値に、img_alt_textはalt属性値に、img_widthはwidth属性値に、img_hightはheight属性値に、それぞれ変換されます。
<img_group> <img_src>../image/null.jpg</img_src> <img_alt_text>オルト属性値</img_alt_text> <img_width>200</img_width> <img_hight>100</img_hight> </img_group>
pre_group要素です。pre_group要素は子要素pre_textを所有します。XSLTによってHTMLのpre要素に変換します。pre_textはpre要素のテキストに変換されます。
<pre_group> <pre_text></pre_text> </pre_group>
doc_div要素です。doc_div要素は複数表示できるようにXSLTをプログラムします。
<doc_div> ・・・ </doc_div>
doc_src要素です。doc_src要素は複数表示できるようにXSLTをプログラムします。
<doc_src> ・・・ </doc_src>
上記のように本体ファイルは、データのみを格納しています。コンテンツとなるテキストとしてのデータの他に、XSLTによってHTML要素に変換されるプログラムデータも格納します。
HTML以外のファイル形式に変換する場合は、それらに適したデータ要素を加えることになります。様々なファイル形式に単純に対応させるためには要素をファイル形式が必要とする分だけ付け足していけばよいのです。しかしそれでは増長なプログラムとなります。ソースを短くするなら共有化できるデータにする工夫が必要かもしれません。
XSLTで詳しく解説しますが、データがnullであれば表示させないことが可能です。