どこにも分類できなかったコンテンツの置き場所です。
古い情報が多く、改定予定もないのでご注意を!

XMLとは

2007/10

1 始めに

XMLご存知ですか?
私は仕事上システム開発の人に会うことが多いので、名前だけは知ってました(ほんとに名前だけです)。
ある日、ちょっと調べてて”これは!!”と思いました。自分のページに使えそう。
それで本を買ったのが運のつき。よく判らないからまたサンプル集を買う。
それに掛かった投資がもったいなくて、実現しなきゃならない気分になっちゃいました。

2 XMLでやりたいこと

XMLについては、私がつたない説明をするよりはこちらを見て頂く方が早いと思います。
HTMLとXMLは双方タグを使うので、似たものに見えます。しかしその違いを一言で言えば、

XMLではタグを自分で作ります。例えば、<title>砂の女</title>の様にです。
また階層を持てます。例えば<book> <title>aaa</title/> <auther>bbb</auther> <publisher>ccc</publisher> </book>のように書けば、
  book
   ├titel
   ├auther
   └publisher     という意味を持ちます。  
私は直感的に”これはデータベースじゃないか”と考えました。
データベースのメリットの一つは、1つのデータを色んな形で表示できることです。例えば、選択や整列を使って「最近読んだ本」「お勧めの本」「著者別」「カテゴリー別」・・・。
そう、私がやりたかったのはそれなんです。今も一部FreeのJava Script サンプルを使わせてもらって近いことはしてましたが、もっと拡張できそうと感じました。

3 XMLの表示

XMLファイルそのものは単にデータのかたまりです。表示してもタグにはさまれた階層的なリストが出るだけで、とても実用にはなりません。
その表示のためにはXSLTやDOMを使う必要があります。

3.1 XSLTによる表示

XSL(eXtensible Stylesheet Language Transformations)はXML用のスタイルシートで、表示方法や選択・整列方法を記述し、通常XMLとは別ファイルとして定義します。
複数のXSLを用いることで、1つのデータ(XML)を色んな形で表示できます。
例えばXSLで表を定義し、その表の中にデータを埋め込む;丁度図書カードのフォーマット(帳票)がXSLTで、そこにXMLからデータを読み込んでカードを作成するようなものです。
複数のフォーマットを準備すれば、同じデータで違うカードが出来ます。例えば、タイトルと著者だけのカード、それに読了日や感想も書き込んだカードの様にです。
XSLTの中に条件文を書くと、作るカードを限定できます。例えば作家名をAさんという条件をXSLTの中に定義すれば、Aさんの本だけのカードが出来ます。
同様に整列も出来ます。タイトル順・読了順・・・などです。

> もしAccessをご存知ならば、XMLがTable、XSLTがQueryとFormだと考えれば問題ないと思います。

3.2 DOM(Document Object Model)による表示

DOMはXMLのデータを”いったん読み込んで、整形加工して、吐き出す”Java Script や VB Scriptのかたまりです。当然ながら、Java Script や VB Scriptの知識が無いと出来ませんが、そのかわり使いこなせれば色んなことが出来そうです。

4 どんなコンテンツにするか

色々調べたり、サンプルを見つけてきたりしていじくってる間に、大体どんなことが(自分の実力で)出来るかが見えてきました。言い換えれば”やりたいこと”と”出来ること”の折り合いが付いて来ました。
そこで、全体のページ構成を以下のようにすることにしました。
 1.DOMを使って、カテゴリー別の全所有本のリストとお勧め本のリストを表示
 2.XSLを使って、お勧め作家の作品紹介と最近読んだ本の紹介
詳しくはこちらを見てください。元となるXMLのデータは、トライした結果結構大きくなりそうなので、国内と海外で分けます。

5 XMLデータの作成

まずは元になるXMLデータを作る必要があります。
以前から、国内本についてはエクセルでリストを作成済みでした。当然、これを利用できないかと言うことで・・・。
やっぱりありました。CSV(カンマ区切りテキスト;エクセルから吐き出せる)からXMLを作成するフリーソフトです。
eXeedというソフトでVecterに有りました。著者のページ;http://www.toru.marumoto.net/
部分的にはエラーが出ましたが、十分使えます。
海外本については変換元のデータが無いために、どうしようもありませんが、国内データでトライアルしていくことにしました。