要素


タグ

HTML では、タグは全て決められたものしか使うことができず
しかも、その種類は数十、組み合わせは数千と考えられるものでした
XML は、逆に仕様が複雑になったもののタグは独自に定義することができます

XML において文書の基盤となるのは タグ です
タグとは < と > で囲まれた、文書の意味を指定(マーク付け)するためのものです
タグには、それぞれタグの名前(前回の場合は title)がつけられています

タグの命名規則も定められており、必ず最初の1文字目は文字、または _ にします
名前の2文字目以降は、文字、数次、アンダースコア、ハイフンなどを用いることができます
最初の1文字目を数字などにすると、エラーになるので注意してください
また、タグ名の途中で空白を入れることはできません
これらの命名規則は、タグだけではなく全ての識別子の定義に適応されます

XML では、必ず開始タグと終了タグをペアで用います
開始タグとは <タグ名> と指定し、終了タグは </タグ名> と指定します

<タグ名>要素内容</タグ名>

ここで、要素内容とはタグが意味付けする対象を表します
例えば <language>Java</language> とすれば
これは Java が「言語」であることを意味付けしていると考えることができます

HTML には終了タグを省略できるような物が存在しましたが
XML では終了タグを省略することができないので注意してください
開始タグから、内容、終了タグまでを要素と呼びます

では、これを踏まえて前回のサンプルをもう一度見てください
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<title>Kitty on your lap</title>
<title> から </title> までが一つの要素となっています
この要素の意味は定義していないので、ソフトウェアはそれを理解できませんが
人間の目で見ると、これが表題を表していることがよくわかります
XML とは、このように人間にもコンピュータにもわかりやすい設計になっているのです


親要素・子要素

XML 文書のある要素は、他の要素を含むことができます
これは、日本という要素に北海道や沖縄という要素があると考えてよいでしょう
このような関係を、実際に文書で表現することができるのです

例えば、あるオブジェクトを XML で表現すると考えた場合
オブジェクトがもつ性質を子要素を定義することができるようになります
子要素は拡張することもできるので、オブジェクトはより柔軟になります
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object>
	<document>
		<text>Kitty on your lap</text>
	</document>
</object>
サンプルを見る

この XML 文書は object 要素の子要素として document を持ちます
document 要素はさらに text 要素を含んでいることがわかります

これは、オブジェクト指向の概念を学習している人には理解しやすいでしょう
object 要素は XML 文書そのものを表していますし
document は XML 文書の内容を意味するオブジェクトであると考えられます

しかし、XML 文書は著作権や作成日、ファイル名とは別の表題を欲しがるかもしれません
そうであれば、object の子要素として info 等の別の要素を追加すれば良いのです
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object>
	<info>
		<title>Kitty on your lap</title>
		<copyright>Leon Akasaka</copyright>
	</info>
	<document>
		<text>Kitty on your lap</text>
	</document>
</object>
サンプルを見る

どうでしょうか、こんなに簡単に様々な情報を表現することができるのです
因みに、子要素の段階に分けて Tab を使っていますが、これは必須ではありません
読みやすくするために、Tab や改行を入れているだけにすぎません

このような親子の関係を作る場合、注意することが一つあります
決して 要素を部分的に重ねてはなりません
次の XML 文書は間違っています

<A><B>Kitty on your lap</A></B>

HTML では、このようなケースでも問題なく処理することができましたが
XML は、部分的に要素を重ねることは禁止されています
要素 B は、要素 A の子要素なので、親要素よりも先に終了しなければなりません


ルート要素

XML 文書には、全ての要素の親となるルート要素が必要です
ルート要素は文書要素と呼ばれることもあります

構造から考えて、通常ルート要素は子要素を含みます
そして、全ての要素はルート要素に含まれていると考えることもできます
すなわちルート要素とは、XML 文書それそのものをあらわす要素と考えてもかまいません

上のサンプルの場合、object という要素が全ての要素を含んでいました
実は、この object 要素はルート要素だったのです
XML は、ルート要素の外に要素を持つことはできません
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<title>Kitty on your lap</title>
<copyright>Leon Akasaka</copyright>
この XML 文書は不正な文書です
なぜならば、ルート要素を定義するべき空間に2つの要素が存在しています
全ての要素は、単一の「ルート要素」の傘下にいなければならないのです

どうして、このような仕組みになっているのかはプログラマがわかればよいことでがす
ルートがあり、そこからノードを辿ってリーフに行きつく仕組みを木構造と呼びます
木構造はプログラムの処理に適したモデルで、XML はまさに木構造なのです

object
||
infodocument
|||
titlecopyrighttext

例えば、object 要素をルート要素として、このような関係を作っていけば
プログラムから見た時、その構造を把握しやすいのです



前のページへ戻る次のページへ