DTD - 元素



XML 元素可以定義為 XML 文件的基本構建塊。元素可以充當容器,用於儲存文字、元素、屬性、媒體物件或所有這些的混合。

DTD 元素透過 ELEMENT 宣告進行宣告。當 XML 檔案透過 DTD 進行驗證時,解析器首先檢查根元素,然後驗證子元素。

語法

所有 DTD 元素宣告都具有以下通用形式:

<!ELEMENT elementname (content)>
  • ELEMENT 宣告用於指示解析器您即將定義一個元素。

  • elementname 是您正在定義的元素名稱(也稱為通用識別符號)。

  • content 定義元素內部可以包含哪些內容(如果有)。

元素內容型別

DTD 中元素宣告的內容可以分類如下:

  • 空內容

  • 元素內容

  • 混合內容

  • 任意內容

空內容

這是元素宣告的一種特殊情況。此元素宣告不包含任何內容。它們使用關鍵字EMPTY宣告。

語法

以下是空元素宣告的語法:

<!ELEMENT elementname EMPTY >

在以上語法中:

  • ELEMENTEMPTY類別的元素宣告

  • 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>TutorialsPoint</company>
   <phone>(011) 123-4567</phone>
</address>

在以上示例中,address是父元素,namecompanyphone_no是其子元素。

運算子和語法規則列表

下表顯示了可以在定義子元素時應用的運算子和語法規則列表:

運算子 語法 描述 示例
+ <!ELEMENT element-name (child1+)> 它表示子元素可以在父元素內出現一次或多次。

<!ELEMENT address (name+)>

子元素name可以在元素名稱address內出現一次或多次。

* <!ELEMENT element-name (child1*)> 它表示子元素可以在父元素內出現零次或多次。

<!ELEMENT address (name*)>

子元素name可以在元素名稱address內出現零次或多次。

? <!ELEMENT element-name (child1?)> 它表示子元素可以在父元素內出現零次或一次。

<!ELEMENT address (name?)>

子元素name可以在元素名稱address內出現零次或一次。

, <!ELEMENT element-name (child1, child2)> 它給出用逗號分隔的子元素序列,這些序列必須包含在element-name中。

<!ELEMENT address (name, company)>

子元素namecompany的序列,必須按相同的順序出現在元素名稱address內。

| <!ELEMENT element-name (child1 | child2)> 它允許在子元素中進行選擇。

<!ELEMENT address (name | company)>

它允許您選擇任一子元素,即namecompany,它們必須出現在元素名稱address內。

規則

如果有多個元素內容,我們需要遵循某些規則:

  • 序列 - DTD 文件中的元素通常必須以不同的順序出現。如果是這種情況,則使用序列定義內容。

    該宣告指示<address>元素必須恰好有三個子元素 - <name>、<company>和<phone> - 並且它們必須按此順序出現。例如:

<!ELEMENT address (name,company,phone)>
  • 選擇 - 假設您需要允許一個元素或另一個元素,但不能同時允許兩者。在這種情況下,必須使用管道 (|) 字元。管道充當異或。例如:

<!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 很有用。

語法

以下是使用 ANY 內容宣告元素的語法:

<!ELEMENT elementname ANY>

這裡,ANY 關鍵字表示文字 (PCDATA) 和/或在 DTD 中宣告的任何元素都可以在<elementname>元素的內容中使用。它們可以按任何順序使用任意次數。但是,ANY 關鍵字不允許您包含未在 DTD 中宣告的元素。

示例

以下是一個演示使用 ANY 內容宣告元素的簡單示例:

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

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

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

© . All rights reserved.