- DTD 有用資源
- DTD - 快速指南
- DTD - 有用資源
DTD - 元素
XML 元素可以定義為 XML 文件的基本構建塊。元素可以充當容器,用於儲存文字、元素、屬性、媒體物件或所有這些的混合。
DTD 元素透過 ELEMENT 宣告進行宣告。當 XML 檔案透過 DTD 進行驗證時,解析器首先檢查根元素,然後驗證子元素。
語法
所有 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 Patil</name> <company>TutorialsPoint</company> <phone>(011) 123-4567</phone> </address>
在以上示例中,address是父元素,name、company和phone_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)> 子元素name、company的序列,必須按相同的順序出現在元素名稱address內。 |
| | | <!ELEMENT element-name (child1 | child2)> | 它允許在子元素中進行選擇。 | <!ELEMENT address (name | company)> 它允許您選擇任一子元素,即name或company,它們必須出現在元素名稱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>