XMLを学習する1(理論編)

恒例の誰得エントリ。前回JavaScriptの基本を知ったが、ブログに貼ってみようとしたら、XMLで書かなくてはいけないことが分かった(前回:大体こんな感じ。javascript日和 - たぬきのねどこ)。折角なのでXMLをきちんと使えるように理解しようと思う。最終的にはインターネットを活用したちょっとしたガジェットが使えるようになりたい。今日の概略は以下の通り。

  1. @IT連載 XMLを学ぼうで理論を学ぶ(途中で飽きる)
  2. http://www6.airnet.ne.jp/manyo/xml/で実際動かしながら色々学ぶ(コレは次回)

感想とまとめなどを書いていきます。例の如く「続きを読む」記法で書くので、興味がある人だけどうぞ。
まずは@IT連載 XMLを学ぼうを使って学習開始。※それぞれの章のタイトルから、対応するページに飛べます。

第1回 最短のXML入門とメタ言語

XMLメタ言語。他のプログラミング言語よりメタな状態にあるわけか。プログラミング言語を記述する言語ということね。だからどんなものでも表すことが出来ると。具体的には理解できないけど、感覚的には理解できる(XMLの成り立ちについては、ここも分かりやすかった)。で、出てきた例をためしに打ってみる。

<?xml version='1.0' encoding='UTF-8' ?>
<doc><p>Hello</p></doc>

1行目がxmlで書きますよ、ということですね。test.xmlで保存しても、上のスクリプトのままで表示されるだけなんだけど……。んん?あ、そうか。どうタグを翻訳するか、ということを規定するものを通さないといけないのか。HTMLは既に決まっているけど、XMLはその辺を適当に決められる、と。

第2回 XMLのカタチ

XMLってなんぞや、の続き。XMLでわざわざプログラムを書く人はほとんどいなくて、普通はデータ記述に使うとのこと。なんだよ……。で、XMLは人間に読みやすく易しいのに対し、コンピューターには効率が悪い言語なため、最近のハイスペックなコンピューター向けとのこと。ふーん。
XMLは文字列、要素、属性、処理命令からなる。処理命令はで挟まれたもの。難しいからココでは書かないらしい。一番面白そうなのになぁ。
今回一番重要なことはXML木構造ということらしい。木構造はすっきりしていて見やすそう。今回もコード書きは無し、と。早く動かしてみたい。

第3回 現実のXML文書を見る

やっとXMLファイルが出てきたと思ったら、とってもゴチャゴチャしている。読んだ感じをまとめてみる。

<?xml version='1.0'?>
<!DOCTYPE document[
ここには書式設定を書く DTDっていうらしい
]>
<document>
 <head>
 XML⇔プレーンテキストを行き来させ易くするための記述
 </head>
 <p>データ記述</p>
</document>

よく分からないけど、そんなもんらしい。続いてCSVデータ(数値とコンマの羅列データ)をXMLに変えてみている。何故FF5……。んで、データの項目に自由に名前が付けられるから分かり易い。属性はサブ的なもの、というか複数要素を書くときに便利なもの、ということかな。下の例で言えば、翻訳されていない本もあるわけで翻訳者タブを作るよりはこっちの方が良い。

<本の情報>
 <題名>グレート・ギャッツビー</題名>
 <著者 役割="著">スコット フィッツジェラルド</著者>
 <著者 役割="訳">村上 春樹</著者>
 <出版>中央公論新社</出版>
</本の情報>

第4回 スキーマ言語「DTD」の機能と役割

DTD(Document Type Definition)。壁らしい。気合を入れて読んだけど、情報のフォーマットを作っておくだけなんじゃないの?上のグレート・ギャッツビーの例で言うと以下のようになる。著者は1以上なので+だよね。

<!ELEMENT 本の情報 (題名,著者+,出版)>
<!ELEMENT 題名(#PCDATA)>
<!ELEMENT 著者(#PCDATA)>
<!ELEMENT 出版(#PCDATA)>

で、なんでこんなものが必要かというと、保守や他人の作ったものを見るためか。C++でいうとヘッダファイル的なものだと思っていいんだね。

第5回 DTDを読んでみよう

DTD続き。もっと実際的なことをやるらしい。
まず!ENTITYについて。これはDEFINEみたいなものか。定義しておけば、&と;で挟んで呼び出せる、と(DTD内なら%と;)。どうやって&lt;が認識されるのかが分かるようなら問題ない。
次に!ATTLIST。これはゴチャゴチャしているな……。自分で書けないと理解するの難しい。よく分からないのでこちらを参照した。あーなるほど、属性を定義するための方法なのか。それが入れ子状になっているのでゴチャゴチャしている。慣れないと読みづらいなぁ。やや消化不良だが、DTDはこれでおしまいみたい。

<!ELEMENT 本の情報(題名,著者+,出版)>
  (中略)
<!ATTLIST 本の情報 ISBN CDATA #REQUIRED>

第6回 Unicodeでも発生する文字化けの危機と回避

パソコン通信の成立からUnicodeの誕生まで昔話。面白そうな話だが、授業受けている気分になったので、寝た。

第7回 ボキャブラリを拡大する「名前空間」

タグの名前衝突を避けるための名前空間の話。namespaceが分かっているので理解しやすい。鍋の具という分かりづらい例示。
名前空間の要素は「名前空間名:要素名」で表す。普通名前空間名はURL。名前空間を利用した要素の属性としてxmlns:xhtml="URL"とするのか。で、当たり前だけど、その要素の間は名前空間名を省略すると自動的に要素の名前空間が使用されると。クラス内ではクラス名を明示しなくてもいいのと同じね。ただ、省略時には直近の名前空間に属することになっちゃうから気をつけろ、ネストできないよ、と。
第4回 名前空間とは---名前空間で修飾された要素で応用言語を識別 | 日経 xTECH(クロステック)を見ると、名前空間の実際使用例が見れて理解しやすかった。RSS共通のところとApple専用のところを明確にしているわけか。

この辺で気付いたのだが

この連載は自分で書くことが無いからつまんない(あと例が分かりづらい)。ということで突然参考にするサイトを変えてみる。
いまさら聞けないWeb2.0時代のXML入門 (1/3):いまさら聞けないリッチクライアント技術(1) - @ITという3ページほどの記事で復習した後、http://www6.airnet.ne.jp/manyo/xml/というサイトの「XMLIEで表示(基礎編-1)」を読む事にした。
この先は大分話の流れが変わってきたので、一端ここで終了。次は実践編。