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)> 它給出了由逗號分隔的子元素序列,它必須包含在元素名稱中。
Ι <!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>