DTD - Document Type Definition

Revised: Oct./05th/2003

前のページに続いて、妥当性制約を記述する、DTD, XML Schemaと、スキーマを複数組み合わせて文書を作る仕組みであるXML名前空間について説明します。

DTD (Document Type Definition)

DTD (文書型定義宣言)は、XML の前身である SGML (Standard Generarized Markup Language) 以来の実績がある文書型定義方法です。XML 1.0 策定当初は DTD のみしか存在しなかったため、XML 1.0 仕様書でサポートされているのは DTD のみであり、今でも主流の定義方法として使われています。

リスト2はリスト1のスキーマを記述するDTDです。

リスト2. DTDの例(address.dtd)

<!ELEMENT  address (item*)>
<!ELEMENT  item   (name, access*, image?)>
<!ATTLIST  item
    sex    (male | female)    "male"
    custid ID                 #REQUIRED>
<!ELEMENT  name   (#PCDATA)>
<!ELEMENT  access (#PCDATA)>
<!ATTLIST  access
    kind   CDATA              #IMPLIED>
<!ELEMENT  image  EMPTY>
<!ATTLIST  image
    file   CDATA              #REQUIRED>

多くの場合は、既存のDTDに従ってXML文書を生成することになるでしょうから、ここではDTD記述の詳細については説明しません。リスト2で登場した規則については、かいつまんで紹介します。

要素タイプ

DTD は文書の型を定義する仕組みです。実際に存在する(記述する)文書(インスタンス)は、要素の組み合わせとなりますが、DTD は、その文書型で利用可能な要素の型(要素タイプ)を定義します。

要素タイプの定義は次のように記述します。

<!ELEMENT 要素名 内容モデル>

内容モデルは(xxx)で記述し、当該要素の内容に許される要素タイプを指定します。要素タイプの出現頻度を、表1の記述規則を組み合わせることで表現します。

表1. DTD中の出現頻度記述
(aaa, bbb)要素aaaとbbbがこの順番で一回ずつ現れる。
(aaa?) aaaはゼロ回か1回現れる。
(aaa*) aaaはゼロ回以上任意回数現れる。
(aaa+) aaaは1回以上任意回数現れる。
(aaa | bbb)要素aaaか要素bbbが一回現れる。
EMPTY 内容モデルを持たない空要素。

#PCDATAは任意の文字列を意味します。タグの区切り文字など、XML処理系が処理する特殊文字は処理対象になります。

属性定義

属性の定義は次のように記述します。

<!ATTLIST 要素名 属性名 属性値 "デフォルト値">

属性値は、具体的な値の候補がある場合は、要素定義の内容モデルのように、(xxx | yyy | zzz)で指定します。そのほかに、データ型として、CDATA, ID, IDREF, NMTOKEN などの指定が可能です。CDATA は文字列データで、ID は当該文書中で一意の識別子であることを意味します。

属性のデフォルト値は、明示的に属性値を指定するほかに、デフォルト値がないことを意味する #IMPLIED や、デフォルト値はないが必須であることを意味する #REQUIRED などが指定可能です。

DTDでは他にも詳細な規則が定義されており、実態参照などの仕組みも備えているのですが、ここでは紹介しません。

文書型定義宣言(DTD 宣言)

XML文書をDTDと関連付けるためには、XML 宣言とルート要素の開始タグの間に DTD 宣言を記述します。DTD 宣言には、公開識別子と SYSTEM 識別子と呼ばれる仕組みが用意されています。

SYSTEM 識別子

プライベートな文書型を定義する仕組みが SYSTEM 識別子です。SYSTEM 識別子は、次のような記述規則に従います。

<!DOCTYPE ルート要素 SYSTEM "DTDが得られるURL">

リスト2が"http://www.hoge.hoge.foo/demoDtd.dtd"で得られるならば、リスト1の冒頭はリスト3のようになります。

リスト3

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE address
    SYSTEM "http://www.hoge.hoge.foo/demoDtd.dtd">
<address>
...

公開識別子

W3Cなどの標準化団体が策定する文書型を指定するのが、PUBLIC識別子(公開識別子)と呼ばれる仕組みです。

例えば、W3Cが勧告するXHTML 1.1のDTD宣言は次のようになります。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
	"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

公開識別子では、次の情報が読み取れます。

Webアプリの構成ファイルである web.xml では、公開識別子は次のようになります。

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

XHTML 1.1 の場合と同様に、ルート要素、公開団体、名前、言語、DTD の取得 URL が読み取れます。HTML では、公開識別子から妥当性検証を行い、該当する文書型に応じて動作が変わるようなブラウザはほとんど存在しなかったため、DTD 宣言はおまじないのようなものでした。しかし、XML では、XML パーサが妥当性検証を厳密に行って、解析結果をアプリケーションに渡す仕組みをとるため、DTD宣言の有無や指定されたDTDの差異はアプリケーションの動作にとって重要な構成情報になります。



Copyright © 2003 SUGAI, Manabu. All Rights Reserved.
SEO [PR] ����!�����u���O �����z�[���y�[�W�J�� �������C�u����