DTD の共有


外部 DTD

DTD は、XML 文書の仕様を決めるための型定義です
これは、単一の XML 文書ではなく、この DTD に従う全ての XML 文書のためにあるべきで
本来ならば、XML 文書の内部ではなく、外部に記述されるべきでしょう

DTD を外部ファイルとして保存する場合、通常は *.DTD という拡張子を持ちます
XML 文書から外部の DTD 文書を用いることを表すには
まず、外部ファイルに依存するため、XML 宣言の standalone 属性を "no" に指定します

そして <!DOCTYPE で、要素名の後に SYSTEM キーワードを指定し
その次に、二重引用符 " で相対アドレス、または絶対アドレスを指定します

<!DOCTYPE ルート要素名 SYSTEM "URL">

こうすることで、一つの DTD ファイルを複数の XML 文書で共有できます
<!--test.dtd-->
<!ELEMENT object (document)>
<!ELEMENT document (title? , text)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT text (#PCDATA)>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE object SYSTEM "test.dtd">

<object>
	<document>
		<title>Kitty on your lap</title>
		<text>Rena is Nekomimi girl who I love.</text>
	</document>
</object>
これで、下の XML 文書は、外部の DTD ファイル "test.dtd" を読み込むでしょう
外部 DTD ファイルを用いて、XML 文書に共通の定義を適応させることができます

しかし、全ての XML 文書が、共通仕様だけで満足するわけではないでしょう
他の文書とは異なり、単一の XML 文書だけが必要とするユニークな定義が必要な場合
その単一の XML 文書のためだけに、共有する DTD に新しい定義を付加するのは冗長です
この場合は、さらにその文書に内部 DTD を使う方法が考えられます

方法は簡単で、外部 DTD の URL の後に [ ] を用いて内部 DTD を記述します
こうすることによって、共通仕様に固有の定義を加算することができます
<!--test.dtd-->
<!ELEMENT object (document)>
<!ELEMENT document (title? , (text | line)*)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT text (#PCDATA)>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE object SYSTEM "test.dtd"[
	<!ELEMENT line EMPTY>
]>

<object>
	<document>
		<title>Kitty on your lap</title>
		<text>Rena is Nekomimi girl who I love.</text>
		<line />
	</document>
</object>
この文書は、外部 DTD と、内部 DTD を用いて
共通仕様の要素と、この文書だけで用いられる line 要素を指定することができます


公開 DTD

外部 DTD よりも、さらにパブリックなものとして公開 DTD があります
公開 DTD は、社内文献などにとどまらず、ネット上の多くの人たちが共有する DTD です

例えば、ISO 等の機関が規定した標準 XML アプリケーションなどは
この公開 DTD を用いて文書を書いたりすることができるでしょう
HTML もまた、公開 DTD を用いていると考えることができます

公開 DTD の場合は、ルート要素名の次に PUBLIC キーワードを指定し
その次に " で囲んで、公開 DTD の名前を、その次に DTD の URL を指定します

<!DOCTYPE ルート要素名 PUBLIC "DTD name" "URL">

DTD の名前は、公開 DTD に関連付けられている一意な名前です
英文字、空白、改行、句読点以外の文字を指定する子とはできません
URL は XML プロセッサが名前から DTD を見つけられなかった時に参照されます

公開 DTD の名前は、次のような構文になっています

[ISO | + | -]//所有者//文書の種類//ISO 639 識別子

名前の先頭は、ISO が認定していれば ISO から始まり
それ以外の標準機関が認定していれば +、そうでなければ - から始まります
その後、// に続いて DTD の所有者、文書の種類を表す名前になり
最後は、DTD の言語を表す言語識別子が指定されます



前のページへ戻る次のページへ