DTD元素
XML元素可以定義爲XML文檔的構建塊。元素可以表現爲容納文本,元素,屬性,媒體對象或所有元素的容器。
使用ELEMENT
聲明聲明DTD元素。 當DTD驗證XML文件時,解析器初始檢查根元素,然後驗證子元素。
語法
所有DTD元素聲明都有這種一般形式 -
<!ELEMENT elementname (content)>
-
ELEMENT
聲明用於指示要定義元素的解析器。 -
elementname
是定義的元素名稱(也稱爲通用標識符)。 -
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 Su</name>
<company>Yiibai Yiibai</company>
<phone>(086) 123-22334567</phone>
</address>
在上面的示例中,address
是父元素,而name
,company
和phone_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
必須在混合內容聲明中排在第一位。 -
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中聲明的元素。
示例
以下是一個簡單的示例,演示了包含任何內容的元素聲明 -
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address ANY>
]>
<address>
Here's a bit of sample text
</address>