要素を定義する
XML文書で使用できるよう外属性を指定する規則の欠き方は、内部DTDと外部DTDのどちらを作成する場合でも同じです。DTDでは、XML文書で使用するすべての要素と属性についての規則を定義しないと、そのDTDはXML文書に対して有効とはみなされません。XML文書に要素を追加する必要が生じたら、その定義に対応するDTDに追加するか、新しいDTDを作成する必要があります。
XML文書に記述できる内容と構造を制限するために、DTDではXML文書に含まれる各要素の内容と構造を定義します。要素を定義するには <!ELEMENT tag(contents)> という形を使います。
1. <!ELEMENT tag と入力します。
tagの部分には、定義する要素の名前を入力します。
2. その要素に内容を含めない場合は、EMPTYと入力します。または (contents) と入力します。
contents の部分には、その要素の説明、またはその要素に含めるテキストの説明を書きます。小カッコを忘れずに入力してください。ここに指定する内容については次ページ以降で後述します。
または、要素とテキストをとくに指定せずに任意の組み合わせで使用できるようにするには、ANY と入力します。
3. 最後に、> と入力して要素の宣言を終えます。
DTD例1:
DTD例2:
DTD例3:
・属性は内容ではありません。空の要素が属性を持つこともあります。
・ANYを使うときは十分注意しましょう。DTDの目的は、要素に含めることのできる内容と含めることのできない内容を決める規則を指定することです。何でも含めることのできる要素を定義するのであれば、DTDなど不要になります。DTDはデータの一貫性を保つためのものなので、DTDを用意することは必須ではありません。
・ANYを指定しても、その要素にDTDで定義されていない要素を含めることはできません。
・1つの要素をほかの複数の要素に含めることもできます。ただし、すべての要素は正確に1回ずつ定義しなければなりません。DTDに対して有効なXML文書には、DTDで定義されていない要素を使うことはできません。
・特定の位置に使用する特定の要素の数を指定することもできます。
・要素を宣言する順序に決まりはありません。たとえば、親要素より前に子要素を宣言しても問題ありません。
・シーケンスを使うと、XML文書で要素を指定する順序を指定することができます。
・XMLでは、大文字と小文字がすべて区別されます。<!ELEMENT という語はすべてこのとおりに入力しなければなりません。<!Element と入力しても無効です。感嘆符も忘れずに入力してください、要素名には大文字と小文字を組み合わせて使うことができますが、その要素を使う際には全く同じ組み合わせで大文字と小文字を入力します。すべて小文字にしておけば、後から思い出すために悩む必要がないので便利です。
・DTD宣言はXML要素ではないので、最後の > 記号の前にスラッシュを挿入する必要はありません。