- 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>