DTD-要素

XML要素は、XMLドキュメントの構成要素として定義できます。要素は、テキスト、要素、属性、メディアオブジェクト、またはすべての組み合わせを保持するためのコンテナとして動作できます。

DTD要素はELEMENT宣言で宣言されます。XMLファイルがDTDによって検証されると、パーサーは最初にルート要素をチェックし、次に子要素が検証されます。

構文

すべてのDTD要素宣言はこの一般的な形式を持っています-

<!ELEMENT elementname (content)>
  • ELEMENT宣言は、要素を定義しようとしているパーサーを示すために使用されます。

  • elementnameは、定義している要素名(総称識別子とも呼ばれます)です。

  • contentは、要素内に入れることができるコンテンツ(存在する場合)を定義します。

要素のコンテンツタイプ

DTDでの要素宣言の内容は、以下のように分類できます。

  • 空のコンテンツ

  • 要素の内容

  • 混合コンテンツ

  • 任意のコンテンツ

空のコンテンツ

これは、要素宣言の特殊なケースです。この要素宣言にはコンテンツが含まれていません。これらはキーワードで宣言されていますEMPTY

Syntax

空の要素宣言の構文は次のとおりです-

<!ELEMENT elementname EMPTY >

上記の構文では-

  • ELEMENTカテゴリEMPTYの要素宣言です

  • elementname 空の要素の名前です。

Example

以下は、空の要素宣言を示す簡単な例です。

<?xml version = "1.0"?>

<!DOCTYPE hr[
   <!ELEMENT address EMPTY>    
]>
<address />

この例では、アドレスは空の要素として宣言されています。address要素のマークアップは<address />として表示されます。

要素の内容

要素の内容を含む要素宣言では、内容は括弧内の許容要素になります。複数の要素を含めることもできます。

Syntax

以下は、要素の内容を含む要素宣言の構文です。

<!ELEMENT elementname (child1, child2...)>
  • ELEMENT 要素宣言タグです

  • elementname 要素の名前です。

  • child1、child2 ..は要素であり、各要素はDTD内で独自の定義を持っている必要があります。

Example

以下の例は、要素コンテンツを使用した要素宣言の簡単な例を示しています-

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>

<!DOCTYPE address [
   <!ELEMENT address (name,company,phone)>
   <!ELEMENT name (#PCDATA)>
   <!ELEMENT company (#PCDATA)>
   <!ELEMENT phone (#PCDATA)>
]>

<address>
   <name>Tanmay Patil</name>
   <company>TutorialsPoint</company>
   <phone>(011) 123-4567</phone>
</address>

上記の例では、addressが親要素であり、namecompanyphone_noがその子要素です。

演算子と構文規則のリスト

以下の表は、子要素の定義に適用できる演算子と構文規則のリストを示しています-

オペレーター 構文 説明
+ <!ELEMENT要素名(child1 +)> これは、子要素が親要素内で1回以上発生する可能性があることを示します。

<!ELEMENTアドレス(名前+)>

子要素は、要素名アドレス内で1回以上出現する可能性があります

* <!ELEMENT要素名(child1 *)> これは、子要素が親要素内で0回以上発生する可能性があることを示します。

<!ELEMENTアドレス(名前*)>

子要素は、要素名アドレス内で0回以上出現する可能性があります

<!ELEMENT要素名(child1?)> これは、子要素が親要素内で0回または1回発生する可能性があることを示します。

<!ELEMENTアドレス(名前?)>

子要素は、要素名アドレス内で0回または1回出現する可能性があります

<!ELEMENT要素名(child1、child2)> これは、要素名に含める必要があるコンマで区切られた子要素のシーケンスを提供します。

<!ELEMENTアドレス(名前、会社)>

子要素会社のシーケンス。要素名アドレス内で同じ順序で出現する必要があります

| <!ELEMENT要素名(child1 | child2)> 子要素で選択を行うことができます。

<!ELEMENTアドレス(名前|会社)>

これにより、子要素、つまり名前または会社のいずれかを選択できます。これらは、要素名アドレス内に存在する必要があります

ルール

複数の要素コンテンツがある場合は、特定のルールに従う必要があります-

  • Sequences −多くの場合、DTDドキュメント内の要素は異なる順序で表示する必要があります。この場合、シーケンスを使用してコンテンツを定義します。

    宣言は、<address>要素に正確に3つの子(<name>、<company>、および<phone>)が必要であり、これらがこの順序で表示される必要があることを示しています。例-

<!ELEMENT address (name,company,phone)>
  • Choices−両方ではなく、いずれかの要素を許可する必要があるとします。このような場合、パイプ(|)文字を使用する必要があります。パイプは排他的論理和として機能します。例-

<!ELEMENT address (mobile | landline)>

混合要素コンテンツ

これは、(#PCDATA)要素と子要素の組み合わせです。PCDATAは、解析された文字データ、つまりマークアップではないテキストを表します。混合コンテンツモデル内では、テキストを単独で表示することも、要素間に散在させることもできます。混合コンテンツモデルのルールは、前のセクションで説明した要素コンテンツと同様です。

Syntax

以下は、混合要素コンテンツの一般的な構文です。

<!ELEMENT elementname (#PCDATA|child1|child2)*>
  • ELEMENT 要素宣言タグです。

  • elementname 要素の名前です。

  • PCDATAマークアップではないテキストです。#PCDATAは、混合コンテンツ宣言の最初に来る必要があります。

  • child1、child2 ..は要素であり、各要素はDTD内で独自の定義を持っている必要があります。

  • 子要素が含まれている場合、演算子(*)は混合コンテンツ宣言に従う必要があります

  • (#PCDATA)要素と子要素の宣言は、(|)演算子で区切る必要があります。

Example

以下は、DTDでの混合コンテンツ要素宣言を示す簡単な例です。

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>

<!DOCTYPE address [
   <!ELEMENT address (#PCDATA|name)*>
   <!ELEMENT name (#PCDATA)>
]>

<address>
   Here's a bit of text mixed up with the child element.
   <name>
      Tanmay Patil
   </name>
</address>

任意の要素コンテンツ

コンテンツでANYキーワードを使用して要素を宣言できます。ほとんどの場合、混合カテゴリ要素と呼ばれます。ANYは、要素の許容内容をまだ決定していない場合に役立ちます。

Syntax

以下は、任意のコンテンツを含む要素を宣言するための構文です。

<!ELEMENT elementname ANY>

ここで、ANYキーワードは、テキスト(PCDATA)やDTD内で宣言された要素を、<elementname>要素のコンテンツ内で使用できることを示します。それらは、任意の順序で何度でも使用できます。ただし、ANYキーワードでは、DTD内で宣言されていない要素を含めることはできません。

Example

以下は、任意のコンテンツを含む要素宣言を示す簡単な例です。

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>

<!DOCTYPE address [
   <!ELEMENT address ANY>
]>

<address>
   Here's a bit of sample text
</address>