多面相XML(マルチルックス)
XSLTを利用したIE5.0での多面的な表示
小林 茂

目次

まえがき
概要
主張したい点
実装方式
機能概要
多面相XML(マルチルックス)
表示対象XMLファイルの作成
複数のスタイル(面相)ファイルの作成
基本台紙XMLファイルの作成
リンク関係の作成
多面相XMLファイルの表示
サンプルデータの紹介
あとがき


まえがき

このXML文書は,1つのXML文書を複数のスタイルをつけて, Webブラウザで切り替えながら簡単に表示するための方法を 紹介するものである。 複数のスタイル(面相)を多面的に表示させるということで, 多面相XMLと名付け,愛称として「マルチルックス」とすることにした。

表示の基になるXML文書に対し,複数のスタイルシートを準備し, Webブラウザ(IE5.0以降)の下で, 一覧表の中から表示ししたい面相をクリックすると, その面相がそのページの下部に現れるという仕掛けである。

多面相XML(マルチルックス)は,2000年度のWWW XMLコンテストへ 応募するために作られたものである。 その際に,これを応用したサンプルをも, 同時にコンテストの対象にするべく,基になるXMLファイルと, いくつかのスタイルシートを作成することとした。

サンプルの題材として,簡単なXMLファイルを取り上げ, すでに作成していたソースリスト出力や 構造の表現出力をする面相を考えた。 その後,構造の表現として,DTDやスキーマが思い浮かび, サンプルとして付け加えた。

なお,DTDやスキーマは,XMLインスタンスから,一般には作成できないため, 単に1つの表現として捉え,本来のスキーマを捉え様とは思ってもいない。 単にこんな表現があるのだということが分かれば良いのだとしている。

DTDや各種のスキーマとして落とすには,かなりキツイ条件がついている。 今回のスタイルでは,あまり凝ったことは出来ないので, がっかりする部分も多々あるであろう。

この作品には,スタイルを付けるためのいくつかの方法が 具体的に示されているので,XMLのスタイル化を学習する上での 参考になれば良いと考えている。

なお,この本文そのものは,日本電子出版協会が規定する JEPA電子出版交換フォーマット(JepaX) を利用した。 JepaXが規定するタグのうち,かなり限定したタグだけを 本書では利用しているが,妥当な文書にはなっている。


概要

多面相XMLXML(マルチルックス)は,1つのXMLファイルと それに対応する複数のスタイルシートを, Webブラウザで切り替えながら(多くの面相を)表示させるための ツールとして利用できるものである。

その多面相XML(マルチルックス)を具体的に利用したサンプルとして, XMLファイルのソースや構造をいろいろな形式(面相)で表示させるための スタイルシート(XSLTファイル)を具体的化し提示もしている。

面相の例として,XMLファイルのソースを少し編集して表示したり, タグの親子関係などの構造を示したり, そのXMLの基になるスキーマの情報を編集して表示させたりしている。

主張したい点

3つの主要なポイントがある。

  1. 1つのXMLドキュメントを複数のスタイルシートを使って, 多面的な表示に簡単に切り替えられる方法を示すこと。

  2. XMLドキュメントのソースを色々なスタイルで示す具体的な例を 提示していること。

  3. XMLスキーマに関し提案されている仕様のイメージを掴むために, XMLドキュメントから各種のスキーマ表現を例示すること。

複数のスタイルシートを作成し活用するに便利である。

実装方式
機能概要

多面相XML ( マルチルックス )を利用して, 画面を表示させると 次図 の様になる。

ここで画面の内容を説明する。まず 画面の紹介 の図を見ていただきたい。

この図では,スタイルが1個の例となっている。 真中にスタイル(面相)を選択する表 ( 面相選択インデックス ) の部分がある。その 表中の番号1の行(2行目)には,スタイルファイルについての記述があり, 表中の最下欄には,表示対象ファイルの名前が見られる。 表中の第1行目にスタイル情報に関するキャプションがある。 ファイルの情報や,表内の情報,面相選択インデックス部分の 上下にある青い部分等には,色々な情報が表示されている。

多面相XML(マルチルックス)では,これらの情報を, あるファイル( 基本台紙XMLファイル ) に記述しておき, 基本的な情報だけを与えると 画面の紹介 のような画面から, 緑の下線がある部分をクリックすると, 指定したスタイル(面相)で表示したり, スタイルシート(XSLT)ファイルのソースを表示させることが出来る。

表示する部分は,面相選択インデックス部分の下にある図中で 「表示領域」と書いてある部分である。 表示領域の先頭に戻ることや,面相選択インデックス部分に ハイパーリンクすることもできる。

多面相XML(マルチルックス)

多面相XML(マルチルックス)を利用する手順は,概略次のようになる。

  1. 表示の対象となるXMLドキュメントをまず1つ用意する。 (→)

  2. そのXMLドキュメントに対し多面的な表示をするスタイルシートを複数作成する。 (→)

  3. それらをまとめて簡単にWebブラウザ(IE 5.0以上が必須)で表示するために, それらを統合するXMLファイル(multi-looks-main-1.xml)を作成する。 (→)

  4. その中で基になるXMLドキュメントとスタイルシートのファイルとを, XLinkの記述方法を使って指定する。 (→)

  5. multi-looks-main-1.xmlに対応するスタイルシートでは,ダイナミックHTMLを 利用して,ある1つのスタイルシートをクリックしたら,対応するスタイルで 表示させる。 (→)

以下に1つ1つの手順を簡単に追ってみる。

表示対象XMLファイルの作成

多面相XML(マルチルックス)を利用する場合には,まず, 表示とするXMLファイルを作成する。ここではそれを 表示対象XMLファイル と呼ぶ。これはすでに作成されたXMLファイルでよい。

今回,サンプルとしては, というファイルである。 1つだけ用意する。

複数のスタイル(面相)ファイルの作成

表示対象XMLファイルに対し,複数個のスタイル(面相)を持った スタイルシートを作成する。ここではそれらを 面相XMLファイル と呼ぶ。これはすでに作成されたXML(XSLT)ファイルで良い。

今回のサンプルとして,

  1. "xml-source.xsl" : XMLのソースにインデントを付けて表示

  2. "xml-tree1.xsl" : 要素のネスと関係だけをインデントして表示

  3. "xml-tree2.xsl" : 要素名と属性名だけを表示

  4. "xml-dtd-1.xsl" : DTDの1つを表示

  5. "xml-schema-1.xsl" : W3Cの作業案であるXML Schemaによる1つの表示

  6. "xml-data-1.xsl" : W3Cのノート(案)であるXML-Dataによる1つの表示

  7. "xml-xdr-1.xsl" : XML Data Reduced(XDR)による1つの表示

  8. "xml-dcd-1.xsl" : W3Cの作業案であるDCDによる1つの表示

  9. "xml-ddml-1.xsl" : W3Cの作業案であるDDMLによる1つの表示

  10. "xml-xsc-1.xsl" : XSchemaによる1つの表示

  11. "xml-rlx-1.xsl" : RelaxCoreによる1つの表示

というファイルを用意した。

基本台紙XMLファイルの作成

本題である多面相を実現するためのXMLファイルを作成する。 ここではそれを 基本台紙XMLファイル と呼ぶ。

基本台紙XMLファイルは,これまでに用意した表示対象XMLファイルと, 複数個(1つでも構わない)の面相XMLファイルの指定するXMLファイルである。

今回の場合, "multi-looks-main-1.xml" というファイルである。この中で具体的に指定する。指定する項目は, 次のとおりである。各項目について,タグの簡単な説明をしておく。

なお, メイン画面 の図を, 見ながら確認していただきたい。

  1. document-title : 多面相XMLファイルに対するタイトルを指定する。

  2. document-header : 多面相インデクス部分の前にヘッダとして 表示させたい内容を指定する。

    HTMLで使用するいくつかのタグが使える。p,div,span,ul,ol,liなどである。

  3. document-footer : 多面相インデクス部分の後にフッタとして 表示させたい内容を指定する。

    HTMLで使用するいくつかのタグが使える。p,div,span,ul,ol,liなどである。

  4. caption-title : 多面相インデクスの1行目の左欄のタイトルを指定する。

  5. caption-source : 多面相インデクスの1行目の中央欄のタイトルを指定する。

  6. caption-source : 多面相インデクスの1行目の右欄のタイトルを指定する。

  7. created-by : 多面相インデクス部分に載せる作成者情報を指定する。

    属性指定で,URLを指定できる。

これまでの指定では, メイン画面 の 全般を見てきた。 この図 に対する 基本台紙XMLファイル の中身は, 次のようになる。





<?xml version="1.0" encoding="UTF-16"?>

<?xml-stylesheet type="text/xsl" href="multi-looks-main-1.xsl"?>



<display-xml xmlns:xlink="http://www.w3.org/1999/xlink" >

  <head>

    <document-title>document-titleで指定</document-title>

    <document-header>

      <div style="background-color:lightblue; font-size:xx-small;

                  margin-top:0; margin-bottom:0; ">

        ここがヘッダ部分を表示する領域

      </div>

    </document-header>

    <document-footer>

      <div style="background-color:lightblue; font-size:small;

                  margin-top:0; margin-bottom:0; ">

        ここがフッタ部分を表示する領域

      </div>

    </document-footer>

    <caption-title>caption-titleで指定</caption-title>

    <caption-role>caption-roleで指定</caption-role>

    <caption-source>caption-sourceで指定</caption-source>

    <created-by hp-uri="http://www1.u-netsurf.ne.jp/~s-koba84/xml/xml-home.htm"

      >作成者情報(uriの指定も出来る)</created-by>

  </head>

  <xml-file  id="xml_1" 

      xlink:type="simple"

      xlink:href="test.xml"

      xlink:title="xlink:titleで指定"

      xlink:role="xlink:roeで指定"

  />

  <style-files>

    <file  id="xsl_s1"

      xlink:type="simple"

      xlink:href="test.xsl"

      xlink:title="xlink:titleで指定"

      xlink:role="xlink:roeで指定"

    />

  </style-files>

</display-xml>

        

この節 で扱ったタグは, "display-xml"の子供である"head"の中に記述するものであることが 分かる。

リンク関係の作成

表示対象XMLファイル についての情報と, 面相XMLファイル についての情報の指定について簡単に説明する。 コード を 適宜参照しながら読んでほしい。

これらの情報は,"xml-file"タグ及び"style-files"内の "file"タグに指定する。 具体的な情報はそれぞれ,"xml-file"又は"file"にある 属性として記述する。

  1. id 属性 : 内部的に使用するID。 文書内でユニークな名前を付けること。

  2. xlink:type 属性 : XLinkでのタイプであり, "simple"を指定する。

  3. xlink:href 属性 : 表示対象XMLファイルか, 面相XMLファイルを指定する。

    面相選択インデックスでは,各面相情報の第4欄目(最右端) に表示する。 第4欄をクリックすると,面相XMLファイルの ソースリストを表示する。

  4. xlink:title 属性 : リンク付けのタイトルを付ける。

    面相選択インデックスでは,各面相情報の第2欄目に 表示する文字列を指定する。 第2欄をクリックすると,表示対象XMLファイルに対し 面相XMLファイルスタイル化の結果を表示する。

  5. xlink:role 属性 : リンク付けの役割を説明する。

    面相選択インデックスでは,各面相情報の第3欄目に 表示する文字列を指定する。

多面相XMLファイルの表示

さて, 基本台紙XMLファイル の指定が出来たら,そのスタイルシートを指定する。 コード の2行目にある スタイル指示の処理命令 にある「href="ファイル名.xsl"」の所に実際の ファイル名を設定する。 多面相XML(マルチルックス)として提供するファイル名は, "multi-looks-main-1.xsl"である。 そして,同一なディレクトリ又はリンク関係で 指定したディレクトリにそれらのファイルを置く。

そしてWebブラウザ(IE 5.0)で, 基本台紙XMLファイル を開けば, の様な画面が出て,様々な面相での表示を見ることが できるようになる。

サンプルデータの紹介

ここでは,今回の多面相XML(マルチルックス)に付属させた, サンプルについて紹介する。あまり細かくは説明しないが 表示結果を見て,このような変換が出来るのだということを 確認していただきたい。

同じ名前の要素名や属性名があると,特に同一かの チェックをしないために,変なDTDやスキーマが 出来上がる。従って,そのようなXMLファイルを 指定しないこと。この条件は,4番目以降の面相で 利いてくるので注意のこと。

  1. "xml-source.xsl"

    XMLのソースにインデントを付けて表示する。 IE5.0でXMLファイルをスタイル無しで指定すると インデントをしてカラフルに表示してくれる。 これに近い形である。

    ただし"-"や"+"等を付けず,1部ソースの非表示・表示の 切り替え機能はない。これによって,表示されたものを コピーアンドペーストしてファイルに落とすと,そのまま XMLファイルが出来上がる。

    注意する点は,XMLのコンテンツにある"<"や">" 等の文字は,XMLファイル上では, 本来"&lt;"や"&gt;"等となっているはずだが, 表示上とは異なるという点である。

  2. "xml-tree1.xsl"

    XMLの木構造が分かるように,要素毎に1行でインデントを 付けて表示する。

    その要素に内容がある場合と,無い場合とを要素名の 左側につける矢印の形を変えて分かるようにした。

  3. "xml-tree2.xsl"

    XMLの構造に従って,要素名と属性名だけを表示する。 文字データを取り除いた形となっている。

  4. "xml-dtd-1.xsl"

    サンプルの表示対象XMLファイルを基に, そのXMLを妥当とするようなDTDの1つを表示する。

  5. "xml-schema-1.xsl"

    W3Cの作業案であるXML Schemaによる表示をする。

    このサンプルにもいくつかのXMLスキーマが出ているが, W3Cとしてこれから標準化しようとしている規格が, この"XML Schema"である。

    このスキーマは,XML形式で記述されており, DTDでの表現方法とは大きく異なる。 要素間の関係を示したり,出現回数などの設定が出来るなど, 機能的にはDTDで指定できることことのほかに, データ型の詳細化,数値の範囲などの条件つけ等 かなり多くの機能が入っている。

  6. "xml-data-1.xsl"

    W3Cのノート(案)で提案されたXML-Dataにより表示する

    マイクロソフト等から提案されたものである。 現在は,この次に出てくる"XDR"に変わりつつあり, この規格はこれ以上の進展はなさそうである。

  7. "xml-xdr-1.xsl"

    XML Data Reduced(XDR)により表示する。

    これもマイクロソフト等から提案されたものである。 XML-Dataから,派生している。現在,BizTalkなどでは, 既定のXMLスキーマである。今後,前述の"XML Schema"に 移り行くとのことである。

  8. "xml-dcd-1.xsl"

    W3Cの作業案であるDCDによる1つの表示をする。

    あまり細かくは知らない。

  9. "xml-ddml-1.xsl"

    W3Cの作業案であるDDMLによる1つの表示をする。

    あまり細かくは知らない。

  10. "xml-xsc-1.xsl"

    XSchemaによる1つの表示をする。

    DDMLの前身となった標準のようである。 結構使われていると聞くが詳細を知らない。

  11. "xml-rlx-1.xsl"

    RelaxCoreによる1つの表示をする。

    日本から発信されたのスキーマの表現方法の1つである。 今回のコンテストで,初めて少し勉強をはじめたが, もしかしたら間違えて理解しているかもしれない。 上述の"XML Schema"の標準化が,その検討過程で 複雑・難解になっており,なかなか発信しないのに比べ 軽量であり,分かりやすいとされているようである。


あとがき

今回XMLコンテストには,初めて参加した。 はじめに思いついた形とは少し違ったものとなったが, この作品を作成する体験を通して色々と学んだことが多い。 中でも解説書に関しては,HTMLで作成しようと考えていたが, 最後の最後で,XMLドキュメントを作成することにした。 スタートが遅かったせいか,最後に特にドキュメントの部分で あまり吟味したものが出来なかった面があるが, これで終了します。

この中でスタイルについて「面相」といっているが, 普段からこの言葉を使っているわけではないし, 今後もあまり使わないかもしれない。作品に名前を 考えるとき「面相」というほうが,変わっていて面白そうだ というだけのことである。この言葉は子供時代に, 「怪人20面相」という漫画や本が流行ったのを思い出し つけたものである。この作品が持つツールについて, 固有名詞的に使って行きたいと考えている。

以前,「1ページフェスタ」に応募したときに用いていた, 文書の形式とスタイルとを利用すれば,何とかなると思い, 急遽(実は,今朝(9/14夜)から),解説書を作成し始めた。

従ってスタイル変更は,基本的に「1ページフェスタ」の時と 同じにしたが,1部少し拡張した。また,DTDは, JEPA電子出版交換フォーマット(JepaX) を利用し,スタイルシートを自作した形となっている。このDTDでは, 段落などの記述で基本的にHTML(XHTML)のタグが使えるので, 記述しやすいという特徴があるが,DIVというタグですべての章節項を 記述するため,章節項の関係の(構造が)狂うと,メチャメチャニなると 言うことが起こる。このため少し記述しては,Webブラウザで見てみる という繰り返しであった。

結局,この解説書を作成し,別なスタイルシートを作って, このドキュメントから登録用のWebページも作成した。 多面相XML(マルチルックス)を利用して複数の面相(スタイル)を 表現する際に役立ててほしいと思う。

なお,HTML上で今回の画面構成で, 複数のスタイルを閲覧する方法としては, Javaコンソーシアムの 「XML部会」のホームページ にも載せている。 基本的な考えをそこで提示したが,今回はそれをXMLでの記述を間に 食わせると,簡単になることを示したことになる。


索引(キーワード索引)

JEPA電子出版交換フォーマット(JepaX)
基本台紙XMLファイル
スタイル指示の処理命令
多面相XML
表示対象XMLファイル
マルチルックス
面相XMLファイル
面相選択インデックス