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

元素内容

在元素声明中元素内容,内容将是括号内的允许元素.我们还可以包含多个元素.

语法

以下是元素声明的语法,包含元素内容和减号;

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

在上面的示例中,地址是父元素,名称公司 phone_no 是它的子元素.

运算符和语法规则列表

下表显示了列表可以应用于定义子元素和减号的运算符和语法规则;

运算符语法描述示例
+<!ELEMENT element-name(child1 +)>它表示子元素可以在父元素内出现一次或多次.

<!ELEMENT地址(名称+)>

子元素名称可以在元素名称地址内出现一次或多次.

*<!ELEMENT element-name(child1 *)>它表示子元素在父元素内可以出现零次或多次.

&lt ;!ELEMENT地址(名称*)>

子元素名称可以在元素名称地址内出现零次或多次.

<!ELEMENT element-name(child1?)>表示该子元素可以在父元素中出现零次或一次.

<!ELEMENT地址(姓名?)>

儿童element name 可以在元素名称地址内出现零次或一次.

<!ELEMENT element-name(child1,child2)>它给出了以逗号分隔的子元素序列,它必须包含在元素名称中.

<!ELEMENT地址(姓名,公司)>

子元素名称公司的序列,必须发生在元素名称地址内的相同顺序.

|<!ELEMENT element-name(child1 | child2)>它允许在子元素中做出选择.

<!ELEMENT地址(名称) |公司)>

它允许您选择子元素之一,即 name company ,这些元素必须出现在元素名称地址.

规则

如果有多个元素内容并且减去,我们需要遵循某些规则;

  • 序列 :  DTD文档中的元素通常必须以不同的顺序出现.如果是这种情况,则使用序列定义内容.

    声明表明< address> element必须有三个孩子 - < 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)和children元素声明必须用(|)运算符分隔.

示例

以下是演示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>