目次へ

3. DTD

XMLが木構造をとることについて、前章でお話しました。XMLで言語を作成するということは、表現したい世界を木構造にモデリングし、要素や属性を定義していくことになります。本章は、要素や属性を決定する、DTDについて記述します。

3.1 DTDとは

DTD(Document Type Definition)は、日本語で文書型定義とよばれるもので、XMLのスキーマ言語のひとつです。スキーマ言語とは、データの論理構造や物理構造を定める言語です。XMLは、現実の世界を木構造にモデル化して、それを要素や属性の階層構造で表現します。よって、DTDは、要素や属性の階層構造を定義するものとなります。

以下に例を示します。社員名簿を記述する言語を作成するとします。社員の情報としては、社員番号、名前、住所、年齢、所属部署、所有資格、給料、入社年月日を管理するものとします。退社した社員に関しては、データを削除せずに、退社年月日の情報を付加するものとします。また、所属部署は、所属部と所属の課を記述し、所有資格に関しては、資格名と取得日も記述することとします。

図

 

DTDには、社員の情報がどのような階層構造をとっているかが、記述されています。例えば、社員番号の親要素は、社員要素であり、所属部署には、所属部と所属課要素が子供要素としてある、という情報が記述されています。また、一人の社員に対して、入社年月日は、唯一定まるものだが、資格は、全くもっていなかったり、複数持っていたり、とまちまちです。このような、情報などもDTDに記述されます。(上の図では、括弧でくくられている要素が必須ではない要素です。)上の要素の階層構造をDTDで記述すると以下のようになります。

<! DOCTYPE 社員名簿 [
	<!ELEMENT 社員名簿 (社員+)>
	<!ELEMENT 社員 (社員番号, 名前, 住所, 年齢, 所属部署, 入社年月日, 所有資格*, 退社年月日?)>
	<!ELEMENT 社員番号 (#PCDATA)>
	<!ELEMENT 名前 (#PCDATA)>
	<!ELEMENT 住所 (#PCDATA)>
	<!ELEMENT 年齢 (#PCDATA)>
	<!ELEMENT 所属部署 (所属部,所属課)>
	<!ELEMENT 所属部 (#PCDATA)>
	<!ELEMENT 所属課 (#PCDATA)>
	<!ELEMENT 入社年月日 (#PCDATA)>
	<!ELEMENT 所有資格 (資格名,取得日)>
	<!ELEMENT 資格名 (#PCDATA)>
	<!ELEMENT 取得日 (#PCDATA)>
	<!ELEMENT 退社年月日 (#PCDATA)>
]>

ところで、XMLは木構造をとると記述しました。XMLでは、木構造の1番根っことなる、ルート要素というものが存在します。ルート要素以外の要素は、必ず、親要素をひとつだけもちます。そして、要素の親をたどっていくと、必ずルート要素になります。上の例では、社員名簿要素がルート要素になります。XML文書では、ルート要素の開始タグと終了タグの間にすべての要素が含まれます。例えば、以下のXML文書は、エラーとなります。

<?xml version="1.0">
<error>このような文書はエラーになります。</error>
<error>ルート要素が存在しないからです。</error>

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp