DTD元素

XML元素可以定義爲XML文檔的構建塊。元素可以表現爲容納文本,元素,屬性,媒體對象或所有元素的容器。

使用ELEMENT聲明聲明DTD元素。 當DTD驗證XML文件時,解析器初始檢查根元素,然後驗證子元素。

語法

所有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是元素的名稱。
  • child1child2 ..是元素,每個元素在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 Su</name>
   <company>Yiibai Yiibai</company>
   <phone>(086) 123-22334567</phone>
</address>

在上面的示例中,address是父元素,而namecompanyphone_no是它子元素。

運算符和語法規則列表

下表顯示了可用於定義子元素的運算符和語法規則列表 -

運算符

語法

描述

+

<!ELEMENT element-name (child1+)>

它表示子元素可以在父元素內部出現一次或多次。

*

<!ELEMENT element-name (child1*)>

它表示子元素在父元素內可以出現零次或多次。

?

<!ELEMENT element-name (child1?)>

它表示子元素可以在父元素內部出現零次或一次。

,

<!ELEMENT element-name (child1, child2)>

它給出了由逗號分隔的子元素序列,它必須包含在元素名稱中。

Ι

它允許在子元素中進行選擇。

規則

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

  • 序列 - 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必須在混合內容聲明中排在第一位。
  • child1child2 ..是元素,每個元素在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中聲明的元素。

示例

以下是一個簡單的示例,演示了包含任何內容的元素聲明 -

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

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

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