DTD - 语法

XML DTD 可以在文档内部指定,也可以保存在单独的文档中,然后可以将该文档链接到 DTD 文档以使用它。

语法

DTD 的基本语法如下 −

<!DOCTYPE element DTD identifier
[
   declaration1
   declaration2
   ........
]>

在上述语法中 −

  • DTD 以 <!DOCTYPE 分隔符开头。

  • element 告知解析器从指定的根元素解析文档。

  • DTD identifier 是文档类型定义的标识符,可能是系统上文件的路径或互联网上文​​件的 URL。如果 DTD 指向外部路径,则称为 外部子集

  • 方括号 [ ] 括起一个可选的实体声明列表,称为 内部子集

内部 DTD

如果元素在 XML 文件中声明,则 DTD 称为内部 DTD。要将其引用为内部 DTD,必须将 XML 声明中的 standalone 属性设置为 yes。这意味着声明独立于外部源工作。

语法

内部 DTD 的语法如下 −

<!DOCTYPE root-element [element-declarations]>

其中 root-element 是根元素的名称,element-declarations 是声明元素的位置。

示例

以下是内部 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>

让我们来看看上面的代码 −

开始声明 − 使用以下语句开始 XML 声明。

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>

DTD − 紧接着 XML 标头,紧接着是 文档类型声明,通常称为 DOCTYPE −

<!DOCTYPE address [

DOCTYPE 声明在元素名称的开头有一个感叹号 (!)。DOCTYPE 通知解析器 DTD 与此 XML 文档相关联。

DTD 主体 − DOCTYPE 声明后面是 DTD 主体,您可以在其中声明元素、属性、实体和符号 −

<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone_no (#PCDATA)>

此处声明了构成 <name> 文档词汇表的几个元素。<!ELEMENT name (#PCDATA)> 将元素 name 定义为"#PCDATA"类型。此处 #PCDATA 表示可解析的文本数据。

结束声明 − 最后,使用右括号和右尖括号 (]>) 结束 DTD 的声明部分。这实际上结束了定义,此后,XML 文档紧随其后。

规则

  • 文档类型声明必须出现在文档的开头(仅在 XML 标头之前) - 不允许出现在文档内的任何其他地方。

  • 与 DOCTYPE 声明类似,元素声明必须以感叹号开头。

  • 文档类型声明中的名称必须与根元素的元素类型匹配。

外部 DTD

在外部 DTD 中,元素在 XML 文件之外声明。通过指定系统属性来访问它们,这些属性可以是合法的 .dtd 文件或有效的 URL。要将其引用为外部 DTD,必须将 XML 声明中的 standalone 属性设置为 no。这意味着,声明包含来自外部源的信息。

语法

以下是外部 DTD − 的语法

<!DOCTYPE root-element SYSTEM "file-name">

其中 file-name 是扩展名为 .dtd 的文件。

示例

以下示例显示外部 DTD 用法 −

<?xml version = "1.0" encoding = "UTF-8" standalone = "no" ?>
<!DOCTYPE address SYSTEM "address.dtd">

<address>
  <name>Tanmay Patil</name>
  <company>TutorialsPoint</company>
  <phone>(011) 123-4567</phone>
</address>

DTD 文件 address.dtd 的内容如 −

所示
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>

类型

您可以使用 系统标识符公共标识符 引用外部 DTD。

系统标识符

系统标识符使您能够指定包含 DTD 声明的外部文件的位置。语法如下 −

<!DOCTYPE name SYSTEM "address.dtd" [...]>

如您所见,它包含关键字 SYSTEM 和指向文档位置的 URI 引用。

公共标识符

公共标识符提供了一种定位 DTD 资源的机制,其书写方式如下 −

<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">

如您所见,它以关键字 PUBLIC 开头,后跟一个专门的标识符。公共标识符用于标识目录中的条目。公共标识符可以采用任何格式,但一种常用的格式称为正式公共标识符,或 FPI