XMLで診断テスト(kbd.xsl,kbdtemp.xls使い方)

by Hippo2000(1999/9/29)

kbd.xslは、よく雑誌なんかに載っている「Yes/Noで答える性格診断テスト」みたいなものをIEで実現しようというXSLなのです。ああいうものをなんと読んでいいのか分からないので、とりあえず「診断テスト」と読んでみました。(何かよい呼び方があったら教えて下さい)
IEを利用しているのでマルチメディアな表現も簡単です。さらにExcel97を利用してkbd.xslに対応したXMLを作成するプログラムの使い方も一緒に説明します。

このファイルやサンプル・プログラム、kbdtemp.xlsなどはまとめてダウンロードできます。ダウンロード


目次


kbd.xslの利用例

簡単な例(血液型占い)

以下のようなインチキな「血液型占い」を作ってみます。 

実際に動かしてみる。

これをXMLで以下のように表現します。

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml:stylesheet type="text/xsl"  
href="kbd.xsl"?>
<KBD><Rule>
<Item ID="NODE181">
  <Body>明るい性格ですね</Body>
    <Case Name="Oval 84" Text="Yes" ID="NODE25"/>
    <Case Name="Oval 85" Text="No" ID="NODE30"/>
</Item>
<Item ID="START">
  <Body>あなたの血液型は?</Body>
    <Case Name="Oval 35" Text="A型" ID="NODE15"/>
    <Case Name="Oval 36" Text="B型" ID="NODE181"/>
    <Case Name="Oval 40" Text="O型" ID="NODE18"/>
    <Case Name="Oval 42" Text="AB型" ID="NODE20"/>
</Item>
<Item ID="NODE15">
  <Body>几帳面でしょう</Body>
    <Case Name="Oval 86" Text="Yes" ID="NODE25"/>
    <Case Name="Oval 87" Text="No" ID="NODE30"/>
</Item>
<Item ID="NODE18">
  <Body>親分肌でしょう</Body>
    <Case Name="Oval 74" Text="Yes" ID="NODE25"/>
    <Case Name="Oval 75" Text="No" ID="NODE30"/>
</Item>
<Item ID="NODE20">
  <Body>分裂症ですね?</Body>
    <Case Name="Oval 58" Text="Yes" ID="NODE25"/>
    <Case Name="Oval 59" Text="No" ID="NODE30"/>
</Item>
<Item ID="NODE30">
  <Body>もう一度、血液型を
検査してもらいなはれ</Body>
</Item>
<Item ID="NODE25">
  <Body>大当たり</Body>
</Item>
</Rule></KBD>

画面は以下のようなものが表示され、ボタンがクリックされるたびに遷移していきます。

 

イメージを表示する(水族館巡り)

IEを使っているのでイメージを表示させたり、フォントを指定したりすることができます。

実際に動かしてみる。

以下のようなXMLを表現します。

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml:stylesheet type="text/xsl" 
href="kbd.xsl"?>
<KBD><Rule>
<Item ID="NODE21">
  <Body>
  <IMG SRC="toba/manaty_up.jpg"/>
  こっちに来たぁ</Body>
    <Case Name="Oval 217" Text="アシカShowやってんで" ID="NODE26"/>
</Item>
<Item ID="NODE261">
  <Body>
  <IMG SRC="toba/manaty.jpg"/>
  魚と遊んでるよ</Body>
    <Case Name="Oval 198" Text="こっち来い" ID="NODE21"/>
</Item>
<Item ID="NODE25">
  <Body>
  <IMG SRC="toba/asika_j.jpg"/>
  <H1>ジャンプ!</H1></Body>
    <Case Name="Oval 64" Text="オタリア見た?" ID="NODE7"/>
    <Case Name="Oval 65" Text="パンダイルカ" ID="NODE22"/>
</Item>
<Item ID="NODE26">
  <Body>
  <IMG SRC="toba/asika_wa.jpg"/>
  輪くぐり</Body>
    <Case Name="Oval 52" Text="次" ID="NODE30"/>
</Item>
<Item ID="NODE22">
  <Body>
  <IMG SRC="toba/panda.jpg"/>
  ほぉー</Body>
    <Case Name="Oval 47" Text="アシカShowやってるよ" ID="NODE26"/>
</Item>
<Item ID="START">
  <Body>水族館めぐり。どこにいく?</Body>
    <Case Name="Oval 6" Text="オタリア" ID="NODE7"/>
    <Case Name="Oval 16" Text="パンダイルカ" ID="NODE22"/>
    <Case Name="Oval 200" Text="マナティ" ID="NODE261"/>
</Item>
<Item ID="NODE7">
  <Body>
  <IMG SRC="toba/otaria.jpg"/>
  寝てんで。</Body>
    <Case Name="Oval 11" Text="アシカShowやってるよ" ID="NODE26"/>
</Item>
<Item ID="NODE30">
  <Body>
  <IMG SRC="toba/asika_3.jpg"/>
  三輪車</Body>
    <Case Name="Oval 90" Text="次" ID="NODE25"/>
</Item>
</Rule></KBD>

画面は以下のようなものが表示されます。


kbd.xslのタグ

kbd.xslを用いるXMLには、以下のようにタグになります。

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml:stylesheet type="text/xsl" 
href="kbd.xsl"?>
<KBD><Rule>
<Item ID="START" [TITLE="タイトル"] [BGCOLOR="背景色"] [BACKGROUND="背景"]>
  <Body>表示内容</Body>
    <Case Name="条件名1" Text="表示文字列1" ID="遷移先1"/>
    <Case Name="条件名2" Text="表示文字列2" ID="遷移先2"/>
</Item>
<Item ID="遷移先1" [TITLE="タイトル"] [BGCOLOR="背景色"] [BACKGROUND="背景"]>
  <Body>表示内容</Body>
</Item>
</Rule></KBD>

 

タグ 説     明
KBD KBD.xslに対応するXMLの一番外側の要素です。子供としてRule要素を1つ持ちます
Rule 遷移ルール全体の表す要素です。子供として複数のItem要素を持ちます。
Item 画面に表示される1つの単位を表します。子供としてBody要素を1つ、0または1つ以上のCase要素を持ちます。
属性は以下の1つを持ちます。
ID 必須 Itemの識別子です。遷移先を示すためにも用いられます。
1つのRuleの中で一意でなければなりません。
STARTという値を持つItemが最初のノードになります。    
Body 画面に表示される内容を表します。子供にはXHMLのBODYと同じ要素が指定できます。
属性は以下の3つを持ちます。これらの属性は指定されなければ現在の値のままになります。
TITLE 任意 ウィンドウのタイトルを表します。
BGCOLOR 任意 背景色を表します。
BACKGROUND 任意 背景イメージを表します。
Case 選択肢を表します。子供はありません。属性は以下の3つを持ちます。
Name 任意 選択肢の名前です。
Text 必須 表示する文字列
ID 任意 遷移先のItemのIDを表します。指定されなければ、そのCaseは無視されます。

kbdtemp.xlsについて

kbdtemp.xlsはExcel97によりKBD.XSLに対応するようなXMLを出力するプログラムです。ダウンロード

Win95、Win98のExcel97で動作を確認しています。

画面イメージ

使い方

  1. 新しいXMLを作成する場合には「新規用」というシートをコピーして作成してください。
  2. シートの上で右クリックすると新しいノード(長方形と2つの楕円、そしてコネクタ)が追加されます。
  3. シート上で図形を編集してください。図形の編集は通常のExcelでの操作と同じです。
    1) 新しい選択肢を増やしたい場合には楕円とコネクタをコピーしてください。
    2) 選択肢やノードを減らす場合には削除してください。
    2) 長方形のテキストはBody要素の内容に、名前はItem要素の属性IDに反映されます。
     名前は「名前ボックス」で指定します。(画面イメージではメニューのファイルの直下。STARTと表示)
    3) 楕円のテキストはCase要素のText、名前はCase要素の属性Nameに反映されます。
    4) コネクタの接続先がCase要素の属性IDに反映されます。(楕円から長方形へ接続してください
  4. 「グループ化」ボタンをクリックするとノード毎にグループ化されます。
    ノードの移動や削除が簡単になります。
  5. 「グループ化解除」ボタンをクリックすると、グループ化を解除されます。
    グループ化を解除しないと中の文字が編集できません。
  6. XMLを出力するときは「XMLファイル出力」ボタンをクリックしてください。

参考資料

Microsoft社のサイト:
あいにくと英語ですが、リファレンスなので見ておかないと...
XML DOM Reference http://msdn.microsoft.com/xml/reference/xmldom/start.asp
XSL Developer's Guide: http://msdn.microsoft.com/xml/xslguide/default.asp
XSL Reference : http://msdn.microsoft.com/xml/reference/xsl/start.asp

ホーム Perlの小技

ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。