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