Dtd-elements
DTD-要素
XML要素は、XMLドキュメントの構成要素として定義できます。 要素は、テキスト、要素、属性、メディアオブジェクト、またはすべての組み合わせを保持するコンテナーとして動作できます。
DTD要素はELEMENT宣言で宣言されます。 XMLファイルがDTDによって検証されると、パーサーは最初にルート要素をチェックし、次に子要素が検証されます。
構文
すべてのDTD要素宣言には、この一般的な形式があります-
<!ELEMENT elementname (content)>
- _ELEMENT_宣言は、要素を定義しようとしているパーサーを示すために使用されます。
- _elementname_は、定義する要素名(_generic identifier_とも呼ばれます)です。
- _content_は、要素内に含めることができるコンテンツ(ある場合)を定義します。
要素コンテンツタイプ
DTDの要素宣言の内容は以下のように分類することができます-
- 空のコンテンツ
- 要素の内容
- 混合コンテンツ
- 任意のコンテンツ
空のコンテンツ
これは、要素宣言の特殊なケースです。 この要素宣言にはコンテンツが含まれていません。 これらは、キーワード EMPTY で宣言されます。
構文
空の要素宣言の構文は次のとおりです-
<!ELEMENT elementname EMPTY >
上記の構文では-
- ELEMENT はカテゴリ_EMPTY_の要素宣言です
- elementname は空の要素の名前です。
例
以下は、空の要素宣言を示す簡単な例です-
<?xml version = "1.0"?>
<!DOCTYPE hr[
<!ELEMENT address EMPTY>
]>
<address/>
この例では、_address_が空の要素として宣言されています。 _address_要素のマークアップは、<address/>として表示されます。
要素の内容
要素コンテンツを使用した要素宣言では、コンテンツは括弧内の要素として許可されます。 複数の要素を含めることもできます。
構文
以下は、要素の内容を持つ要素宣言の構文です-
<!ELEMENT elementname (child1, child2...)>
- ELEMENT は要素宣言タグです
- elementname は要素の名前です。
- _child1、child2 .._は要素であり、各要素はDTD内で独自の定義を持っている必要があります。
例
以下の例は、要素の内容を持つ要素宣言の簡単な例を示しています-
<?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>finddevguides</company>
<phone>(011) 123-4567</phone>
</address>
上記の例では、address_が親要素であり、_name _、 company_、および_phone_no_がその子要素です。
演算子と構文規則のリスト
以下の表は、子要素の定義に適用できる演算子と構文規則のリストを示しています-
Operator | Syntax | Description | Example |
---|---|---|---|
+ | <!ELEMENT element-name (child1+)> | It indicates that child element can occur one or more times inside parent element. |
<!ELEMENT address (name+)> 子要素_name_は、要素名_address_内で1回以上使用できます。 |
* | <!ELEMENT element-name (child1*)> | It indicates that child element can occur zero or more times inside parent element. |
<!ELEMENT address (name*)> 子要素_name_は、要素名_address_内で0回以上出現できます。 |
? | <!ELEMENT element-name (child1?)> | It indicates that child element can occur zero or one time inside parent element. |
<!ELEMENT address (name?)> 子要素_name_は、要素名_address_内で0回または1回出現できます。 |
, | <!ELEMENT element-name (child1, child2)> | It gives sequence of child elements separated by comma which must be included in the the element-name. |
<!ELEMENT address (name, company)> 子要素_name 、 company_のシーケンス。要素名_address_内で同じ順序で出現する必要があります。 |
<!ELEMENT element-name (child1 | child2)> |
規則
複数の要素コンテンツがある場合、特定のルールに従う必要があります-
- シーケンス-多くの場合、DTDドキュメント内の要素は明確な順序で表示される必要があります。 この場合、シーケンスを使用してコンテンツを定義します。 +宣言は、<address>要素に正確に3つの子(<name>、<company>、および<phone>)が必要であり、この順序で表示される必要があることを示しています。 たとえば-
<!ELEMENT address (name,company,phone)>
- 選択-両方ではなく、1つの要素を許可する必要があるとします。 そのような場合、パイプ(|)文字を使用する必要があります。 パイプは排他的ORとして機能します。 たとえば-
<!ELEMENT address (mobile | landline)>
混合要素コンテンツ
これは、(#PCDATA)要素と子要素の組み合わせです。 PCDATAは、解析された文字データ、つまり、マークアップではないテキストを表します。 混合コンテンツモデル内では、テキストは単独で表示することも、要素間に散在させることもできます。 混合コンテンツモデルのルールは、前のセクションで説明した要素コンテンツに似ています。
構文
以下は、混合要素コンテンツの一般的な構文です-
<!ELEMENT elementname (#PCDATA|child1|child2)*>
- ELEMENT は要素宣言タグです。
- elementname は要素の名前です。
- PCDATA は、マークアップではないテキストです。 #PCDATAは、混合コンテンツ宣言の最初に来る必要があります。
- _child1、child2 .._は要素であり、各要素はDTD内で独自の定義を持っている必要があります。
- 子要素が含まれる場合、演算子(*)は混合コンテンツ宣言に従う必要があります
- (#PCDATA)および子要素の宣言は、(|)演算子で区切る必要があります。
例
以下は、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は、要素の許容コンテンツをまだ決定していない場合に役立ちます。
構文
以下は、任意のコンテンツを持つ要素を宣言するための構文です-
<!ELEMENT elementname ANY>
ここで、ANYキーワードは、DTD内で宣言されたテキスト(PCDATA)および/または任意の要素を<elementname>要素のコンテンツ内で使用できることを示します。 任意の順序で何度でも使用できます。 ただし、ANYキーワードでは、DTD内で宣言されていない要素を含めることはできません。
例
以下は、任意のコンテンツを持つ要素宣言を示す簡単な例です-
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address ANY>
]>
<address>
Here's a bit of sample text
</address>