Xml 简明教程

XML - DTDs

XML 文档类型声明,通常称为 DTD,是一种精确描述 XML 语言的方法。DTD 会检查 XML 文档结构的词汇和有效性,并与适当 XML 语言的语法规则对照。

XML DTD 可以指定在文档内部,或者保留在单独的文档中,然后单独引用。

Syntax

DTD 的基本语法如下−

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

在上述语法中,

  1. DTD 以 <!DOCTYPE 分隔符开头。

  2. 一个 element 告诉解析器从指定的根元素解析文档。

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

  4. The square brackets [ ] 包含一个可选的实体声明列表,称为内部子集。

Internal DTD

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

Syntax

以下是内部 DTD 的语法:

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

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

Example

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

让我们浏览上述代码 −

Start Declaration − 使用以下声明开始 XML 声明。

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

DTD − 在 XML 头之后,紧跟着文档类型声明,一般称为 DOCTYPE −

<!DOCTYPE address [

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

DTD Body − DOCTYPE 声明之后是 DTD 的主体,您在此声明元素、属性、实体和符号。

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

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

End Declaration − 最后,DTD 的声明部分使用关闭括号和关闭尖括号 ( ]> ) 关闭。这会有效结束定义,之后 XML 文档紧接着遵循。

Rules

  1. 文档类型声明必须出现在文档的开头(仅在 XML 头之前)- 在文档中的任何其他位置都不允许出现。

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

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

External DTD

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

Syntax

以下是外部 DTD 的语法−

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

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

Example

以下示例展示了外部 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)>

Types

您可以使用 system identifierspublic identifiers 来引用外部 DTD。

System Identifiers

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

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

正如您所看到的,它包含关键词 SYSTEM 和指向文档位置的 URI 引用。

Public Identifiers

公共标识符提供了一种查找 DTD 资源的机制,并按如下方式编写:

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

正如您所看到的,它以关键词 PUBLIC 开头,后跟一个专业标识符。公共标识符用于标识目录中的一个条目。公共标识符可以遵循任何格式,但是,一种常用的格式称为 Formal Public Identifiers, or FPIs