DTD-クイックガイド

一般にDTDとして知られているXML文書型宣言は、XML言語を正確に記述する方法です。DTDは、XMLドキュメントの構造と語彙の妥当性を、適切なXML言語の文法規則と照合してチェックします。

XMLドキュメントは次のように定義できます-

  • Well-formed− XMLドキュメントが、タグを適切にネストし、開始タグと終了タグのバランスを取り、空のタグを「/>」で終了するなど、すべての一般的なXMLルールに準拠している場合、整形式と呼ばれます

    または

  • Valid−整形式であるだけでなく、使用するタグ、それらのタグに含めることができる属性、他のタグ内で発生する可能性のあるタグなどを指定する利用可能なDTDにも準拠している場合に有効と言われるXMLドキュメント。

次の図は、DTDを使用してXMLドキュメントを構造化することを表しています。

タイプ

DTDは、次のようにXMLドキュメントで宣言に基づいて分類できます。

  • 内部DTD

  • 外部DTD

DTDがファイル内で宣言されると、呼び出されます Internal DTD 別のファイルで宣言されている場合は、 External DTD

これらについては、DTD構文の章で詳しく説明します。

特徴

以下は、DTDが説明するいくつかの重要なポイントです-

  • XMLドキュメントに表示できる要素。

  • それらが表示される順序。

  • オプションおよび必須の要素。

  • 要素の属性と、それらがオプションか必須か。

  • 属性にデフォルト値を設定できるかどうか。

DTDを使用する利点

  • Documentation−XMLファイルに独自の形式を定義できます。このドキュメントを見ると、ユーザー/開発者はデータの構造を理解できます。

  • Validation −要素が正しい順序で表示されているか、必須の要素と属性が配置されているか、要素と属性が間違った方法で挿入されていないかなどを確認することにより、XMLファイルの有効性を確認する方法を提供します。

DTDを使用することのデメリット

  • 名前空間はサポートしていません。名前空間は、要素名と属性名をグループに割り当てることができるメカニズムです。ただし、DTDでは、名前空間をDTD内で定義する必要があり、これは名前空間を使用する目的に違反します。

  • テキスト文字列データ型のみをサポートします。

  • オブジェクト指向ではありません。したがって、継承の概念をDTDに適用することはできません。

  • 要素のカーディナリティを表現する可能性は限られています。

XML DTDは、ドキュメント内で指定することも、別のドキュメントに保存してから、ドキュメントをDTDドキュメントにリンクして使用することもできます。

構文

DTDの基本的な構文は次のとおりです-

<!DOCTYPE element DTD identifier
[
   declaration1
   declaration2
   ........
]>

上記の構文では-

  • DTD <!DOCTYPE区切り文字で始まります。

  • アン element 指定されたルート要素からドキュメントを解析するようにパーサーに指示します。

  • DTD identifierはドキュメントタイプ定義の識別子であり、システム上のファイルへのパスまたはインターネット上のファイルへのURLの場合があります。DTDが外部パスを指している場合、それは呼び出されますexternal subset.

  • ザ・ square brackets [ ] と呼ばれるエンティティ宣言のオプションのリストを囲みます internal subset

内部DTD

要素がXMLファイル内で宣言されている場合、DTDは内部DTDと呼ばれます。内部DTDとして参照するには、XML宣言のスタンドアロン属性を次のように設定する必要があります。yes。これは、宣言が外部ソースから独立して機能することを意味します。

構文

内部DTDの構文は次のとおりです-

<!DOCTYPE root-element [element-declarations]>

ここで、root-elementはルート要素の名前であり、element-declarationsは要素を宣言する場所です。

以下は、内部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>TutorialsPoint</company>
   <phone>(011) 123-4567</phone>
</address>

上記のコードを見てみましょう-

Start Declaration −XML宣言を次のステートメントで開始します。

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

DTD− XMLヘッダーの直後に、一般にDOCTYPEと呼ばれる文書型宣言が続きます。

<!DOCTYPE address [

DOCTYPE宣言には、要素名の先頭に感嘆符(!)が付いています。DOCTYPEは、DTDがこのXMLドキュメントに関連付けられていることをパーサーに通知します。

DTD Body − DOCTYPE宣言の後には、DTDの本体が続きます。ここで、要素、属性、エンティティ、および表記法を宣言します。

<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone_no (#PCDATA)>

ここでは、<name>ドキュメントの語彙を構成するいくつかの要素が宣言されています。<!ELEMENT name(#PCDATA)>は、要素を「#PCDATA」タイプとして定義します。ここで、#PCDATAは解析可能なテキストデータを意味します。

End Declaration−最後に、DTDの宣言セクションは、閉じ括弧と閉じ角括弧(]>)を使用して閉じられます。これで定義が事実上終了し、その後、XMLドキュメントがすぐに続きます。

ルール

  • 文書型宣言は、文書の先頭に表示する必要があります(XMLヘッダーのみが前に付きます)。文書内の他の場所では許可されていません。

  • DOCTYPE宣言と同様に、要素宣言は感嘆符で始まる必要があります。

  • 文書型宣言の名前は、ルート要素の要素型と一致する必要があります。

外部DTD

外部DTDでは、要素はXMLファイルの外部で宣言されます。これらには、有効な.dtdファイルまたは有効なURLのいずれかであるシステム属性を指定することによってアクセスされます。外部DTDとして参照するには、XML宣言のスタンドアロン属性を次のように設定する必要があります。no。つまり、宣言には外部ソースからの情報が含まれます。

構文

以下は、外部DTDの構文です。

<!DOCTYPE root-element SYSTEM "file-name">

ここで、file-nameは、拡張子が.dtdのファイルです。

次の例は、外部DTDの使用法を示しています-

<?xml version = "1.0" encoding = "UTF-8" standalone = "no" ?>
<!DOCTYPE address SYSTEM "address.dtd">

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

DTDファイルの内容 address.dtd 示されているとおりです-

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

タイプ

を使用して外部DTDを参照できます。 system identifiers または public identifiers

System Identifiers

システム識別子を使用すると、DTD宣言を含む外部ファイルの場所を指定できます。構文は次のとおりです-

<!DOCTYPE name SYSTEM "address.dtd" [...]>

ご覧のとおり、キーワードSYSTEMと、ドキュメントの場所を指すURI参照が含まれています。

Public Identifiers

パブリック識別子は、DTDリソースを見つけるメカニズムを提供し、次のように記述されます。

<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">

ご覧のとおり、キーワードPUBLICで始まり、その後に特殊な識別子が続きます。パブリック識別子は、カタログ内のエントリを識別するために使用されます。公開識別子は任意の形式に従うことができますが、一般的に使用される形式は公的公開識別子(FPI)と呼ばれます

この章では、DTDの観点からXMLコンポーネントについて説明します。DTDには、基本的に次のXMLコンポーネントの宣言が含まれます-

  • Element

  • Attributes

  • Entities

要素

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

各XMLドキュメントには、1つ以上の要素が含まれ、その境界は開始タグと終了タグ、または空の要素で区切られます。

以下はXML要素の簡単な例です

<name>
   Tutorials Point
</name>

ご覧のとおり、<name>タグを定義しました。<name>の開始タグと終了タグの間にテキストがあります。要素をXML-DTDで使用する場合は、宣言する必要があります。これについては、DTD要素の章で詳しく説明します。

属性

属性はXML要素の一部です。要素は、任意の数の一意の属性を持つことができます。属性は、XML要素に関する詳細情報を提供します。より正確には、要素のプロパティを定義します。XML属性は、常に名前と値のペアです。

以下はXML属性の簡単な例です-

<img src = "flower.jpg"/>

ここで、imgは要素名ですが、srcは属性名であり、flower.jpgは属性srcに指定された値です。

XML DTDで属性を使用する場合は、これらを宣言する必要があります。これについては、DTD属性の章で詳しく説明します。

エンティティ

エンティティはXMLのプレースホルダーです。これらは、ドキュメントのプロローグまたはDTDで宣言できます。エンティティは主に次のように分類できます-

  • 組み込みエンティティ

  • 文字エンティティ

  • 一般的なエンティティ

  • パラメータエンティティ

整形式のXMLで動作する5つの組み込みエンティティがあります。

  • アンパサンド:&amp;

  • 一重引用符:&apos;

  • 大なり記号:&gt;

  • 未満:&lt;

  • 二重引用符:&quot;

XML DTDでのエンティティ宣言については、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>

この章では、DTD属性について説明します。属性は、要素に関する詳細情報を提供します。より正確には、要素のプロパティを定義します。XML属性は、常に名前と値のペアの形式です。要素は、任意の数の一意の属性を持つことができます。

属性宣言は、1つを除いて、多くの点で要素宣言と非常によく似ています。要素の許容コンテンツを宣言する代わりに、各要素の許容属性のリストを宣言します。これらのリストはATTLIST宣言と呼ばれます。

構文

DTD属性宣言の基本構文は次のとおりです。

<!ATTLIST element-name attribute-name attribute-type attribute-value>

上記の構文では-

  • 要素に属性が含まれている場合、DTD属性は<!ATTLISTキーワードで始まります。

  • element-name 属性が適用される要素の名前を指定します。

  • attribute-name element-nameに含まれる属性の名前を指定します。

  • attribute-type属性のタイプを定義します。これについては、次のセクションで詳しく説明します。

  • attribute-value属性が定義する必要のある固定値を取ります。これについては、次のセクションで詳しく説明します。

以下は、DTDでの属性宣言の簡単な例です。

<?xml version = "1.0"?>

<!DOCTYPE address [
   <!ELEMENT address ( name )>
   <!ELEMENT name ( #PCDATA )>
   <!ATTLIST name id CDATA #REQUIRED>
]>

<address>
   <name id = "123">Tanmay Patil</name>
</address>

上記のコードを見てみましょう-

  • 次のステートメントでXML宣言を開始します-

<?xml version = "1.0"?>
  • XMLヘッダーの直後には、以下に示すように、一般にDOCTYPEと呼ばれる文書型宣言があります。

    DOCTYPEは、DTDがこのXMLドキュメントに関連付けられていることをパーサーに通知します。DOCTYPE宣言には、要素名の先頭に感嘆符(!)が付いています。

<!DOCTYPE address [
  • 以下はDTDの本体です。ここで、要素と属性を宣言しました-

<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
  • 要素名の属性IDは次のように定義されます-

    ここで、属性タイプはCDATAであり、その値は#REQUIREDです。

<!ATTLIST name id CDATA #REQUIRED>

属性宣言のルール

  • XMLドキュメントで使用されるすべての属性は、属性リスト宣言を使用してドキュメントタイプ定義(DTD)で宣言する必要があります。

  • 属性は、開始タグまたは空のタグにのみ表示できます。

  • キーワードATTLISTは大文字でなければなりません

  • 特定の要素の属性リスト内で重複する属性名を使用することはできません。

属性タイプ

属性を宣言するときに、値に表示されるデータをプロセッサがどのように処理するかを指定できます。属性タイプは3つの主要なカテゴリに分類できます-

  • 文字列型

  • トークン化されたタイプ

  • 列挙型

次の表に、さまざまな属性タイプの概要を示します。

シニア番号 タイプと説明
1

CDATA

CDATAは文字データです(マークアップではなくテキスト)。これは文字列属性タイプです。

2

ID

これは、属性の一意の識別子です。複数回表示しないでください。これは、あるトークン化属性タイプ

3

IDREF

別の要素のIDを参照するために使用されます。要素間の接続を確立するために使用されます。これは、あるトークン化属性タイプ

4

IDREFS

複数のIDを参照するために使用されます。これは、あるトークン化属性タイプ

5

ENTITY

これは、ドキュメント内の外部エンティティを表します。これは、あるトークン化属性タイプ

6

ENTITIES

これは、ドキュメント内の外部エンティティのリストを表します。これは、あるトークン化属性タイプ

7

NMTOKEN

これはCDATAに似ており、属性値は有効なXML名で構成されます。これは、あるトークン化属性タイプ

8

NMTOKENS

これはCDATAに似ており、属性値は有効なXML名のリストで構成されます。これは、あるトークン化属性タイプ

9

NOTATION

要素は、DTDドキュメントで宣言されている表記法を参照します。これは列挙型属性タイプです。

10

Enumeration

これにより、値の1つが一致する必要がある特定の値のリストを定義できます。これは列挙型属性タイプです。

属性値の宣言

各属性宣言内で、値がドキュメントにどのように表示されるかを指定する必要があります。属性かどうかを指定できます-

  • デフォルト値を持つことができます

  • 固定値を持つことができます

  • 必要とされている

  • 暗示されています

デフォルト値

デフォルト値が含まれています。値は一重引用符( ')または二重引用符( ")で囲むことができます。

Syntax

以下は値の構文です-

<!ATTLIST element-name attribute-name attribute-type "default-value">

ここで、default-valueは定義された属性値です。

Example

以下は、デフォルト値-を使用した属性宣言の簡単な例です。

<?xml version = "1.0"?>

<!DOCTYPE address [
   <!ELEMENT address ( name )>
   <!ELEMENT name ( #PCDATA )>
   <!ATTLIST name id CDATA "0">
]>

<address>
   <name id = "123">
      Tanmay Patil
   </name>
</address>

この例では、デフォルト値が0である属性idを持つname要素があります。デフォルト値は二重引用符で囲まれています。

固定値

#FIXEDキーワードとそれに続く固定値は、属性値が一定で変更できないことを指定する場合に使用されます。固定属性の一般的な使用法は、バージョン番号を指定することです。

Syntax

以下は固定値の構文です-

<!ATTLIST element-name attribute-name attribute-type #FIXED "value" >

ここで、#FIXEDは定義された属性値です。

Example

以下は、FIXED値を使用した属性宣言の簡単な例です。

<?xml version = "1.0"?>

<!DOCTYPE address [
  <!ELEMENT address (company)*>
  <!ELEMENT company (#PCDATA)>
  <!ATTLIST company name NMTOKEN #FIXED "tutorialspoint">
]>

<address>
  <company name = "tutorialspoint">we are a free online teaching faculty</company>
</address>

この例では、キーワード#FIXEDを使用しました。これは、値「tutorialspoint」が要素<company>の属性名の唯一の値であることを示しています。属性値を変更しようとすると、エラーが発生します。

以下は無効なDTDです-

<?xml version = "1.0"?>

<!DOCTYPE address [
  <!ELEMENT address (company)*>
  <!ELEMENT company (#PCDATA)>
  <!ATTLIST company name NMTOKEN #FIXED "tutorialspoint">
]>

<address>
  <company name = "abc">we are a free online teaching faculty</company>
</address>

必要な値

属性が必須であることを指定する場合は常に、#REQUIREDキーワードを使用してください。

Syntax

以下は#REQUIREDの構文です-

<!ATTLIST element-name attribute-name attribute-type #REQUIRED>

ここで、#REQUIREDは定義された属性タイプです。

Example

以下は、#REQUIREDキーワードを使用したDTD属性宣言の簡単な例です。

<?xml version = "1.0"?>

<!DOCTYPE address [
   <!ELEMENT address ( name )>
   <!ELEMENT name ( #PCDATA )>
   <!ATTLIST name id CDATA #REQUIRED>
]>

<address>
   <name id = "123">
      Tanmay Patil
   </name>
</address>

この例では、#REQUIREDキーワードを使用して、要素名名に属性IDを指定する必要があることを指定しています。

暗黙の値

属性を宣言するときは、常に値の宣言を指定する必要があります。宣言する属性にデフォルト値がなく、固定値がなく、必須でない場合は、属性を暗黙的に宣言する必要があります。キーワード#IMPLIEDは、属性を暗黙的に指定するために使用されます。

Syntax

以下は#IMPLIEDの構文です-

<!ATTLIST element-name attribute-name attribute-type #IMPLIED>

ここで、#IMPLIEDは定義された属性タイプです。

Example

以下は#IMPLIEDの簡単な例です

<?xml version = "1.0"?>

<!DOCTYPE address [
   <!ELEMENT address ( name )>
   <!ELEMENT name ( #PCDATA )>
   <!ATTLIST name id CDATA #IMPLIED>
]>

<address>
   <name />
</address>

この例では、要素名に含める属性を指定したくないため、キーワード#IMPLIEDを使用しました。オプションです。

エンティティは、XMLドキュメント内の特殊文字へのショートカットを定義するために使用されます。エンティティには、主に4つのタイプがあります-

  • 組み込みエンティティ

  • 文字エンティティ

  • 一般的なエンティティ

  • パラメータエンティティ

エンティティ宣言構文

一般に、エンティティは宣言できます internally または externally。これらのそれぞれとその構文を次のように理解しましょう-

内部エンティティ

エンティティがDTD内で宣言されている場合、それは内部エンティティと呼ばれます。

Syntax

以下は、内部エンティティ宣言の構文です-

<!ENTITY entity_name "entity_value">

上記の構文では-

  • entity_name エンティティの名前の後に、二重引用符または一重引用符で囲まれた値が続きます。

  • entity_value エンティティ名の値を保持します。

  • 内部エンティティのエンティティ値は、プレフィックスを追加することで参照解除されます & エンティティ名、つまり&entity_nameに。

Example

以下は、内部エンティティ宣言の簡単な例です。

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

<!DOCTYPE address [
   <!ELEMENT address (#PCDATA)>
   <!ENTITY name "Tanmay patil">
   <!ENTITY company "TutorialsPoint">
   <!ENTITY phone_no "(011) 123-4567">
]>

<address>
   &name;
   &company;
   &phone_no;
</address>

上記の例では、それぞれのエンティティ名namecompanyphone_noは、XMLドキュメント内の値に置き換えられています。プレフィックスを追加することにより、エンティティ値が逆参照されます & エンティティ名に。

このファイルを名前を付けて保存 sample.xml任意のブラウザで開くと、namecompanyphone_noのエンティティ値がそれぞれ置き換えられていることがわかります。

外部エンティティ

エンティティがDTDの外部で宣言されている場合、それは外部エンティティと呼ばれます。システム識別子またはパブリック識別子のいずれかを使用して、外部エンティティを参照できます。

Syntax

以下は、外部エンティティ宣言の構文です。

<!ENTITY name SYSTEM "URI/URL">

上記の構文では-

  • name エンティティの名前です。

  • SYSTEM キーワードです。

  • URI/URL は、二重引用符または一重引用符で囲まれた外部ソースのアドレスです。

Types

−を使用して、外部DTDを参照できます。

  • System Identifiers −システム識別子を使用すると、DTD宣言を含む外部ファイルの場所を指定できます。

    ご覧のとおり、キーワードSYSTEMとドキュメントの場所を指すURI参照が含まれています。構文は次のとおりです-

<!DOCTYPE name SYSTEM "address.dtd" [...]>
  • Public Identifiers −パブリック識別子はDTDリソースを見つけるメカニズムを提供し、以下のように記述されます−

    ご覧のとおり、キーワードPUBLICで始まり、その後に特殊な識別子が続きます。パブリック識別子は、カタログ内のエントリを識別するために使用されます。公開識別子は任意の形式に従うことができます。ただし、一般的に使用される形式は、公的公開識別子(FPI)と呼ばれます

<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">

Example

次の例で外部エンティティを理解しましょう-

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE address SYSTEM "address.dtd">

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

以下は、DTDファイルの内容であるaddress.dtdは-

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

組み込みエンティティ

すべてのXMLパーサーは、組み込みエンティティをサポートする必要があります。一般に、これらのエンティティ参照はどこでも使用できます。要素の内容や属性値など、XMLドキュメント内で通常のテキストを使用することもできます。

整形式のXMLで役割を果たす5つの組み込みエンティティがあります。

  • アンパサンド:&amp;

  • 一重引用符:&apos;

  • 大なり記号:&gt;

  • 未満:&lt;

  • 二重引用符:&quot;

次の例は、組み込みのエンティティ宣言を示しています-

<?xml version = "1.0"?>

<note>
   <description>I'm a technical writer & programmer</description>
<note>

あなたがここで見ることができるように&amp; プロセッサがこれに遭遇すると、文字は&に置き換えられます。

文字エンティティ

文字エンティティは、情報の記号表現であるエンティティの一部に名前を付けるために使用されます。つまり、入力が困難または不可能な文字は、文字エンティティで置き換えることができます。

次の例は、文字エンティティ宣言を示しています-

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE author[
   <!ELEMENT author (#PCDATA)>
   <!ENTITY writer "Tanmay patil">
   <!ENTITY copyright "&#169;">
]>
<author>&writer;&copyright;</author>

ここで私たちが使用したことに気付くでしょう &#169;著作権文字の値として。このファイルをsample.xmlとして保存し、ブラウザで開くと、著作権が文字©に置き換えられていることがわかります。

一般的なエンティティ

一般エンティティは、XMLドキュメント内で使用する前に、DTD内で宣言する必要があります。一般エンティティは、単一の文字だけを表す代わりに、文字、段落、さらにはドキュメント全体を表すことができます。

構文

一般エンティティを宣言するには、DTDでこの一般形式の宣言を使用します-

<!ENTITY ename "text">

次の例は、一般的なエンティティ宣言を示しています-

<?xml version = "1.0"?>

<!DOCTYPE note [
   <!ENTITY source-text "tutorialspoint">
]>

<note>
   &source-text;
</note>

XMLパーサーは、ソーステキストエンティティへの参照を検出するたびに、参照のポイントでアプリケーションに置換テキストを提供します。

パラメータエンティティ

パラメータエンティティの目的は、置換テキストの再利用可能なセクションを作成できるようにすることです。

構文

以下は、パラメータエンティティ宣言の構文です-

<!ENTITY % ename "entity_value">
  • entity_valueは、「&」、「%」、または「」以外の任意の文字です。

次の例は、パラメータエンティティの宣言を示しています。以下のような要素宣言があるとします-

<!ELEMENT residence (name, street, pincode, city, phone)>
<!ELEMENT apartment (name, street, pincode, city, phone)>
<!ELEMENT office (name, street, pincode, city, phone)>
<!ELEMENT shop (name, street, pincode, city, phone)>

ここで、要素のを追加したいとします。次に、それを4つの宣言すべてに追加する必要があります。したがって、パラメータエンティティの参照に進むことができます。パラメータエンティティ参照を使用すると、上記の例は次のようになります。

<!ENTITY % area "name, street, pincode, city">
<!ENTITY % contact "phone">

パラメータエンティティは、一般的なエンティティ参照と同じ方法で逆参照されますが、アンパサンドの代わりにパーセント記号が使用されます。

<!ELEMENT residence (%area;, %contact;)>
<!ELEMENT apartment (%area;, %contact;)>
<!ELEMENT office (%area;, %contact;)>
<!ELEMENT shop (%area;, %contact;)>

パーサーがこれらの宣言を読み取ると、エンティティ参照の代わりにエンティティの置換テキストが使用されます。

DTDを使用して、XMLドキュメントを正確に記述します。DTDは、XMLドキュメントの構造と語彙の妥当性を、適切なXML言語の文法規則と照合してチェックします。DTDの有効性を確認するために、次の手順を使用できます。

  • Using XML DTD validation tools − XML Spy(無料ではありません)やXMLStarlet(オープンソース)などの一部のIDEを使用して、DTDドキュメントに対してXMLファイルを検証できます。

  • Using XML DTD on-line validators− W3C Markup Validation Serviceは、Webドキュメントを検証するように設計されています。オンラインバリデーターを使用して、ここでXMLDTDの有効性を確認してください。

  • Write your own XML validators with XML DTD validation API − JDKの新しいバージョン(1.4以降)は、XMLDTD検証APIをサポートします。独自のバリデーターコードを記述して、XMLDTD検証の有効性を確認できます。