XML文書につけるタグに規則を与えることができます。この規則にそっているXML文書を妥当な文書(valid XML document)といいます。この規則のことをDTD(Document Type Definition: 文書型定義)と呼びます。
DTDが与えられていた場合、XML文書がそのDTDを満たしているかどうか(validかどうか)をチェックすることができます。DTDは、XMLファイル内に記述(内部サブセット)するか、別のファイルに記述(外部サブセット)します。
DTDの書式は、文書型宣言からなります。
文書型宣言
文書型宣言は以下のように記述します。
<!DOCTYPE ルート要素名[要素型宣言]>「要素型宣言」は要素の種類だけ必要となるので、通常複数の宣言文になります。その際には、『 [ 』、『 ] 』の前後で改行してインデントして記述すると分かりやすくなります。
要素型宣言
要素型宣言は以下のように記述します。
<!ELEMENT 要素名 (内容モデル)>要素の内容がないものは以下のように記述します。
<!ELEMENT 要素名 EMPTY>要素の内容に関して特に指定しない場合には以下のように記述します。
<!ELEMENT 要素名 ANY>内容モデル
内容モデルは、要素の内容について記述します。要素は内容として他の要素を含んだり、テキストデータを含んだりすることができます。
表記 意味 要素名 要素1つのみ 要素名1, 要素名2, … 複数の要素が順に 要素名1 | 要素名2 |… 複数の要素のいずれかが 要素名? 指定した要素が0または1 要素名+ 指定した要素が1以上 要素名* 指定した要素が0以上 #PCDATA テキストデータ。文字参照で記述 (内容モデル)の後ろに「*」を記述すると、指定した内容モデルが繰り返して現れることを意味します。
属性の取り決め
要素の属性を属性リスト宣言の形で取り決めます。属性リスト宣言は以下のように記述します。
<!ATTLIST 要素名 属性名 属性値に関する設定>
例 内部サブセット
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE characters[ <!ELEMENT characters (character+)> <!ELEMENT character (name, bloodtype)> <!ELEMENT name (#PCDATA)> <!ELEMENT bloodtype (#PCDATA)> ]> <characters> <character> <name>SOL BADGUY</name> <bloodtype>unknown</bloodtype> </character> <character> <name>KY KISKE</name> <bloodtype>AB</bloodtype> </character> </characters>赤字部分がDTDになります。ここではDTDの書式についてはここでは深く触れないことにします。
例 外部サブセット
【definition.dtd】
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE characters[ <!ELEMENT characters (character+)> <!ELEMENT character (name, bloodtype)> <!ELEMENT name (#PCDATA)> <!ELEMENT bloodtype (#PCDATA)> ]>【characters.xml】
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE characters SYSTEM "definition.dtd"> <characters> <character> <name>SOL BADGUY</name> <bloodtype>unknown</bloodtype> </character> <character> <name>KY KISKE</name> <bloodtype>AB</bloodtype> </character> </characters>DTDを外部ファイルとすることで、複数のXMLファイルで共通なDTDを利用することができます。CSSを外部ファイルにするのと似ていますね。
XML文書が与えられたDTDを満たしているかどうかをチェックするプログラムのことをバリデータ(validator)といいます。Microsoft社が提供しているツールを紹介します。
XMLを編集するためのプログラムはXMLエディタと呼ばれます。市販のものやフリーのものが開発されています。ここではバリデータの機能を持つフリーのXMLエディタを紹介しておきます。
XMLEditor.NETを実行するには.NET Framework 1.1のインストールが必要です。