XML とは拡張可能なマーク付け言語 (eXtensible Markup Language) のことであり, XML で記述されたデータを XML 文書 (XML document) という。 すなわち XML はデータの記述形式を定める規約であり,XML 文書が個々のデータのことである。
XML は広く普及しており,最近では多くのアプリケーションが XML 文書としてデータをファイルに保存できるようになった。 また,XML は Web 技術との親和性が高く,Web でデータを交換する際の標準的なデータ記述言語となっている。
この資料では,簡単な XML 文書を作成するために必要な XML 文書の構造や記述の規則に関する基礎的事項を紹介する。
XML 文書の例として,この資料の参考文献データを格納した XML 文書を示す。
<?xml version="1.0" encoding="UTF-8" ?> <!-- 参考文献データ --> <ref> <web> <title>Extensible Markup Language (XML) 1.0 (Fifth Edition)</title> <uri>http://www.w3.org/TR/xml/</uri> </web> <web> <title>W3Cの仕様書等の文書の日本語訳集</title> <uri>http://www.w3.org/Consortium/Translation/Japanese.html</uri> </web> <book isbn="4-7561-4584-1"> <title>はじめて読む XML</title> <author>株式会社日本ユニテック Web 技術研究グループ</author> <publisher>アスキー</publisher> <year>2005</year> </book> <book isbn="4-534-03620-5"> <title>すっきりわかるXML</title> <author>西村めぐみ</author> <publisher>日本実業出版社</publisher> <year>2003</year> </book> <!-- 空要素の例 --> <book isbn="1-55860-622-X" /> </ref>
例えば,多くの Web ブラウザは,XML 文書を読み込んで,その構造を階層的に表示することができる (web ブラウザでのXML文書表示例参照)。 これは,Web ブラウザに XML パーサが組み込まれているために行えることである。
この節では,XML 文書の主要な構成要素を,第 1.1 節の XML 文書例を基に説明する。
<?xml version="1.0" encoding="UTF-8" ?>をXML 宣言 (XML declaration) という。
XML 宣言は,その文書が XML 文書であることを明示するものである。 XML 宣言は省略できるものの,XML の仕様では,そのバージョンを含んだ XML 宣言で XML 文書を始めるべき (should) とされている。
XML 宣言では,その文書で用いられている文字の符号化方式 (文字コード) 等も指定でき, 上記の encoding="UTF-8" は符号化方式が UTF-8 であることを示している。
なお,XML 宣言や,宣言内の encoding="..." を省略しても, 文字エンコーディングは UTF-8 または UTF-16 とみなされる。 この指定が実際に用いられている文字コードと異なると, XML 文書を処理する際にいわゆる文字化け等の不具合が起きる 1。
XML 宣言の記述位置は XML 文書の冒頭でなければならない。 そのため,次に紹介するコメントも,XML 宣言の前には書くことはできないので注意すること。
<!--
と -->
で囲んで記述する。
コメント内に --
を書くことはできないので,コメントを入れ子にすることは許されない。
また,XML 宣言の前にはコメントも書けない。
<title>Extensible Markup Language (XML) 1.0 (Fifth Edition)</title>などを要素 (element)という。 ここで,title は要素の名前 (name) すなわち要素名であり, Extensible Markup Language (XML) 1.0 (Fifth Edition) は要素の内容 (contents) である。 なお,タグ自体も要素の一部である。
要素
<name>contents</name>において, <name> を開始タグ (start-tag)といい, </name> を終了タグ (end-tag) という。 contents には,さらに要素を含めることができる。 その場合,要素は正しく入れ子になっていなければならない。
入れ子になった要素同士の関係を,親や子などの用語で表現する。 第 1.1 節の XML 文書例には web 要素が複数存在するが, 何れの web 要素も ref 要素の子であり, 逆に ref 要素は web 要素の親である。 また,title 要素は ref 要素の子孫であり, ref 要素は title 要素の祖先である。
XML 文書には,ルート要素 (root element) と呼ばれる唯一の要素が必要である2。 ルート要素は他の全要素の祖先となる要素であり, ルート要素以外のすべての要素はルート要素の開始タグと終了タグの間に入る。 先の XML 文書例では <ref> から </ref> までがルート要素である。
内容 contents が空である要素
<name></name>を空要素 (empty element) という。 空要素 <name></name> を,代わりに <name /> と書いてよい。
例えば,
<book isbn="4-7561-4584-1">
における
isbn="4-7561-4584-1" は book 要素の属性であり,
isbn を属性名 (attribute name),
4-274-13285-4を属性値 (attribute value)
と呼ぶ。
属性値は "
(二重引用符) または '
(単一引用符) で囲む。
開始タグに複数の属性を記述するには,それらを空白文字で区切る。 ただし,一つの開始タグ内に,同じ名前の属性を複数記述することはできない。
xmllint というコマンドが使える環境では,
xmllint
file
によって,file が整形式であることを検証できる。
整形式でなければエラーが出力される。
XML文書を作成する際には,予約された名前以外であれば,要素名や属性名等を基本的に自由に決めてよい。 ただし,複数の人やアプリケーションで共有される XML 文書の場合,用いる要素の名前等に一定の規則を設けるのが望ましい場合がある。
そのような記述規則を XML 文書に与えるには, 文書型宣言 (document type declaration) を使う。 文書型宣言に則った文書を妥当 (valid) な XML 文書という。
次に示すのは DTD (document type definition) という文法で記述した文書型宣言の例である。
<!DOCTYPE greeting [ <!ELEMENT greeting (#PCDATA)> ]>この文書型宣言は次のことを規定している。
!DOCTYPE greeting
: ルート要素名が greeting である
[ !ELEMENT greeting (#PCDATA) ]
:
文書内の要素は greeting のみで,その内容は文字データ (PCDATA) のみである
文書型宣言を XML 文書に含める場合, 記述場所はルート要素よりも前としなければならない。 次に示す XML 文書は,文書型宣言の規定に適合するため,妥当である。
<?xml version="1.0" ?> <!DOCTYPE greeting [ <!ELEMENT greeting (#PCDATA)> ]> <greeting>Hello, world!</greeting>
XML 文書の妥当性は,
xmllint --valid
file
で検証できる。
ここで file は XML 文書の入ったファイルの名前である。
以下の問題では,エディタを使って XML 文書を作成してください。 ファイル名は任意ですが,.xml で終る名前を勧めます。 GNU Emacs を,マウス操作で使いたい人は, 「情報機器の操作」の資料 「12. ウィンドウシステムとエディタ」の中の 「1.2 X の起動」の記述に従って,X アプリケーション利用の準備手順を行ってください。
<?xml version="1.0" ?> <page>w3c<uri>http://www.w3.org/TR/xml/</uri> <uri>http://www.w3.org/MarkUp/</page></uri>
<?xml version="1.0" ?> <greeting>Hello, world!</greeting> <greeting>Good afternoon, sir.</greeting>
<?xml version="1.0" ?> <!DOCTYPE greeting [ <!ELEMENT greeting (#PCDATA)> ]> <GREETING>Hello, world!</GREETING>
市名 | 町名 | 郵便番号 |
hakodate | aoyagi-cho | 0400044 |
hakodate | akagawa | 0410804 |
hakodate | (自宅の町名) | (自宅の郵便番号) |
otaru | aioi-cho | 0470028 |
otaru | akaiwa | 0470046 |
(青柳町や赤川に住んでいる人は,自宅の行は省略)
文書内の要素は以下の指定に従うこと。