Tutorial
XML の基本的な書き方
XML(Extensible Markup Language)とは構造を記述するための一般的な方式の一つです。
horologram ではテーマファイル作成の際、どのパーツをどこに配置するかを指定するためにこの方式を採用しています。
ウェブサイトを作る際にも使われているので <body> などのタグに見覚えがある人も多いと思います。
タグがたくさん並んでいると一見難しそうに見えてしまいますが、一つ一つを見ていくと単純なルールに従って書かれているだけなので、そのルールさえ覚えてしまえば簡単です。
XMLファイルの一行目にはそのテキストが XML であることを示すための宣言を書きます。
<?xml version="1.0" ?>
これでそのテキストがバージョン1.0のルールに沿って書かれた XML ファイルであることを表すことが出来ます。
将来的にバージョン2.0などが現れるかもしれませんが現状「1.0」としておけば問題有りません。
基本的に XML は入れ物を表す「要素」とその性質を表す「属性」、要素の「内容」の3つで作られています。
<book category="novel">吾輩は猫である</book>
例では一冊の本を表すために <book> という入れ物を用意し、内容としてタイトルを「<book>~</book>」の間にはさんでいます。
ここまでがひとつの要素であるということを示すために要素名の前に「/」をつけた「閉じタグ」を使います。
開始タグと閉じタグに挟まれた部分がその要素の内容となります。
構造だけを見てみると次のようになっています。
<要素名 属性名="属性値">要素の内容</要素名>
上記を踏まえて最初の例を見返すと、book が1冊有り、category は novel、内容は「吾輩は猫である」という意味が読み取れます。
別の書き方として、要素の中に更に他の要素を含む方法もあります。
<?xml version="1.0" ?> <doc> <book> <title>吾輩は猫である</title> <author>夏目 漱石</author> </book> </doc>
こうすると一冊の本(book)があり、その題名(title)が「吾輩は猫である」で、その著者(author)は「夏目漱石」だということがわかりやすくなります。
要素の中には <title> や <author> のように複数の要素を入れることが出来ます。ただし一番外側の要素はひとつである必要があります。
そのため、<doc> のように全体を束ねるための要素(ルート要素)を一つだけ作り、その中にいろいろな要素を追加していくのが XML の基本です。
下の例のように一番外側の要素を複数使ってはいけません。
・悪い例
<?xml version="1.0" ?> <sample>要素1</sample> <sample>要素2</sample>
・良い例
<?xml version="1.0" ?> <doc> <sample>要素1</sample> <sample>要素2</sample> </doc>
例では見やすくするため、行頭に半角スペースで空白を作っています。これをインデントといいます。インデントには半角スペースかタブが使えます。
インデントや改行は必須では無いのですが、同じ内容でも見やすさが大きく異なるのでなるべくやっておいたほうがいいでしょう。
全く行わなくてもエラーにはなりませんが、次のように書いてしまうとても見辛いためミスを探すのに苦労します。
<?xml version="1.0" ?> <doc><book><title>吾輩は猫である</title><author>夏目 漱石</author></book></doc>
今度は本のジャンルごとにカテゴリーを作って本を分類してみます。
<?xml version="1.0" ?> <doc> <category name="novel"> <book> <title>吾輩は猫である</title> <author>夏目 漱石</author> </book> <book> <title>ポラーノの広場</title> <author>宮沢 賢治</author> </book> </category> <category name="art"> <book> <title>やさしい人物画</title> <author>A・ルーミス</author> </book> </category> </doc>
2つのカテゴリー「novel(小説)」と「art(芸術)」を作り、3冊の本を分類してみました。
<category>~</category> の中にある <book> がそのカテゴリーに入っているのが見て取れると思います。
このように要素の中に要素が入っている(入れ子)関係を「親子関係」といい、category を親とした時の子は book ということになります。 また、title を子として見た時の親は book です。
空要素
要素と属性のどちらに何を入れるかというのは XML を読み取るプログラムによって決められているので勝手に変えてしまうわけには行きません。例ではあまり属性を使っていませんが、プログラムによっては次のように書くルールになっている場合もあります。
<book title="吾輩は猫である" author="夏目漱石" category="novel" />
上の例では全て属性を使って描きました。タイトル・著者・カテゴリーがあるという点では同じです。
最初に要素の内容は <book>~</book> のように要素の内容を開始タグと閉じタグで挟んで書くと言いましたが、
内容が無い場合は <book />として省略できます。これを「空要素」といい、<book></book> と書くのと同じ意味です。
使ってはいけない文字
本には色々なタイトルが有り、中には変わった記号を使うものも有ります。
そういった記号の中には XML の要素の内容や属性の内容として使ってはいけない物があるため、別の文字で置き換える必要があります。
例えば、「<title>」というタイトルの本がもしあったとしたら次のようになってしまいます。
<title><title></title>
どれが要素名でどれが本のタイトルなのか区別がつかず、このままではエラーとなっていまいます。
XML では「<>」などの記号を要素以外の箇所で使ってはいけないというルールが有るため、別の記号で置き換えます。
「<」を「<」、「>」を「>」に置き換えて書くと、XML を読み取るプログラムが自動的に「<>」に戻してくれます。
このように使用不可能な文字を置き換えることを「エンティティ参照」あるいは「エスケープ」といいます。
先程の例を正しく書くとこうなります。
<title><title></title>
さらに「<title>」という嫌がらせのようなタイトルの本があったりしたらどう表すのでしょうか?(ちょっと読んでみたい)
「&」は「&」に置き換えることができるので、このように書きます。
<title>&lt;title&gt;</title>
ダブルコーテーションも同じように置き換えする必要があります。「"A"」というダブルコーテーション(")を含んだカテゴリーが合った場合、「"」を使って次のようにします。
<category name=""A"">
このように XML 内で置き換えをしなければならない文字とその対応は以下のとおりです。
記号 | 代替文字 |
---|---|
< | < |
> | > |
& | & |
" | " |
' | ' |
ちょっと覚えにくそうですが、「lt」は「less than(~より小さい)」、「gt」g「greater than(~より大きい)」の略なので、
それぞれ何の略なのか知っていると覚えやすくなると思います。
文字化け対策
コンピュータで日本語を含むテキストファイルを作る時、「UTF-8」「Shift-JIS」「EUC-JP」等の文字コードのうちいずれかの方式を選択する必要があります。
コンピュータはそのままでは人間の文字を理解できないので、この文字コードを使って人間の文字を機械に分かる言葉に置き換えています。XML ではどの文字コードを使ってそのテキストが作られているかを明示しておくと文字化けを防ぐことが出来ます。これを「文字コード宣言」といいます。
文字コード宣言をする場合は冒頭の XML 宣言に「encoding」を追記します。
<?xml version="1.0" encoding="UTF-8" ?>
どの文字コードを使えばいいのかは XML を読み取るプログラムによって異なります。(horologram は UTF-8)
「UTF-8」と宣言した場合はファイルを保存する際にテキストエディタの保存時のオプションで文字コードを「UTF-8」にして保存して下さい。宣言した文字コードと実際に使われている文字コードが異なっていると文字化けを起こしてしまいます。
英語のみで書かれた XML ファイルの場合文字コード宣言を省略しても問題になることはまれですが、常にこの宣言をしておいたほうが無難です。
以上が基本的な XML の書き方です。
見慣れない記号が並ぶので複雑そうに見えてしまいますが、このページを読むだけで基本的な XML の読み書きが出来てしまうほどシンプルなものです。覚えておくと Web サイトや RSS、サイトマップ等、色々な場面で役に立つと思いますのでぜひ習得してみて下さい。