Revised: Oct./05th/2003
前のページに続いて、妥当性制約を記述する、DTD, XML Schemaと、スキーマを複数組み合わせて文書を作る仕組みであるXML名前空間について説明します。
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の記述規則を組み合わせることで表現します。
(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では他にも詳細な規則が定義されており、実態参照などの仕組みも備えているのですが、ここでは紹介しません。
XML文書をDTDと関連付けるためには、XML 宣言とルート要素の開始タグの間に DTD 宣言を記述します。DTD 宣言には、公開識別子と 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">
公開識別子では、次の情報が読み取れます。
html
であるXHTML 1.1
であるhttp://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd
" から 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の差異はアプリケーションの動作にとって重要な構成情報になります。
SEO | [PR] ����!�����u���O �����z�[���y�[�W�J�� �������C�u���� | ||