- DTD 有用资源
- DTD - 快速指南
- DTD - 有用的资源
DTD - 元素
XML 元素可以定义为 XML 文档的构建块。元素可以充当容器来保存文本、元素、属性、媒体对象或所有内容的组合。
DTD 元素是用 ELEMENT 声明来声明的。当通过 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 />。
元素内容
在带有元素内容的元素声明中,内容将是括号内允许的元素。我们还可以包含多个元素。
句法
以下是带有元素内容的元素声明的语法 -
<!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 元素名称 (child1+)> | 它表示子元素可以在父元素中出现一次或多次。 | <!ELEMENT 地址(名称+)> 子元素名称可以在元素名称地址内出现一次或多次。 |
* | <!ELEMENT 元素名称 (child1*)> | 它表示子元素可以在父元素中出现零次或多次。 | <!ELEMENT 地址(名称*)> 子元素名称可以在元素名称地址内出现零次或多次。 |
? | <!ELEMENT 元素名称 (child1?)> | 它表示子元素可以在父元素中出现零次或一次。 | <!ELEMENT 地址(名称?)> 子元素名称可以在元素名称地址内出现零次或一次。 |
, | <!ELEMENT 元素名称 (child1, child2)> | 它给出了以逗号分隔的子元素序列,这些子元素必须包含在元素名称中。 | <!ELEMENT 地址(姓名、公司)> 子元素名称、公司的序列,它们必须以相同的顺序出现在元素名称地址内。 |
| | <!ELEMENT 元素名称 (child1 | child2)> | 它允许在子元素中进行选择。 | <!ELEMENT 地址(名称 | 公司)> 它允许您选择子元素,即名称或公司,它们必须出现在元素名称地址内。 |
规则
如果有多个元素内容,我们需要遵循一定的规则 -
序列- 通常,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 很有用。
句法
以下是声明具有任何内容的元素的语法 -
<!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>