首页 百科知识 文档类型定义()

文档类型定义()

时间:2022-10-05 百科知识 版权反馈
【摘要】:文件类型定义允许用户定义在XML文档中出现的元素、元素出现的次序、元素之间如何相互嵌套以及XML文档结构的其他详细信息。在这个文件类型定义中,我们定义了以下元素:〈address〉包含〈name〉、〈city〉、〈street〉、〈postal-code〉元素;〈name〉包含〈first-name〉、〈last-name〉和一个可选的〈title〉元素;以及其他显示文本数据的元素。如果文档是一个“有效的XML文档”,那么文档一定要有相应DTD文件,并且严格遵守DTD文件制定的规范。

文件类型定义(Document Type Definition,简称DTD)允许用户定义在XML文档中出现的元素、元素出现的次序、元素之间如何相互嵌套以及XML文档结构的其他详细信息。本节介绍有关DTD的基本知识。

1.DTD范例

DTD允许用户定义XML文档的组织结构,例如,可以像下面一样为前面介绍的地址信息XML定义DTD(可以用Dreamweaver MX创建XML文档的方式先创建该文件,然后另存为.dtd文件)。

〈!--address.dtd --〉

〈!ELEMENT address (name,city,street,postal-code)〉

〈!ELEMENT name (first-name,last-name,title?)〉

〈!ELEMENT first-name (#PCDATA)〉

〈!ELEMENT last-name (#PCDATA)〉

〈!ELEMENT title (#PCDATA)〉

〈!ELEMENT city (#PCDATA)〉

〈!ELEMENT street (#PCDATA)〉

〈!ELEMENT postal-code (#PCDATA)〉

在这个文件类型定义中,我们定义了以下元素:〈address〉包含〈name〉、〈city〉、〈street〉、〈postal-code〉元素;〈name〉包含〈first-name〉、〈last-name〉和一个可选的〈title〉元素;以及其他显示文本数据的元素(#PCDATA 元素代表已解析的字符元素,在该元素中不能再包含其他元素)。

为XML文档定义DTD后,文档必须包含DTD中定义的所有元素,并且要按照 DTD中的元素顺序在文档中出现。

DTD文件也是一个ASCII的文本文件,文件扩展名为 .dtd。

2.DTD文件声明

如果文档是一个“有效的XML文档”,那么文档一定要有相应DTD文件,并且严格遵守DTD文件制定的规范。DTD 文件的声明语句紧跟在XML声明语句后面,格式如下:

〈!DOCTYPE type-of-doc SYSTEM/PUBLIC "dtd-name"〉

其中:

"!DOCTYPE" 说明要定义一个 DOCTYPE;

"type-of-doc"是文档类型的名称,由用户自己定义,通常与DTD文件名相同;

"SYSTEM/PUBLIC" 这两个参数只用其一。SYSTEM 是指文档使用私有的DTD文件,而 PUBLIC 则指文档调用一个公用的DTD文件。

"dtd-name" 就是DTD文件的地址和名称。

例如,对于之前介绍的地址信息XML文档,可以使用如下语句:

〈?xml version="1.0" encoding="GB2312"?〉

〈!DOCTYPE address SYSTEM "address.dtd"〉

〈address〉

……

使其遵守前面定义的 address.dtd 文件的 DTD。

实际上,还可以将DTD直接包含在文档中,例如:

〈?xml version="1.0" encoding="GB2312"?〉

〈!DOCTYPE address [

〈!ELEMENT address (name,street,city,postal-code)〉

〈!ELEMENT name (first-name,last-name,title?)〉

〈!ELEMENT first-name (#PCDATA)〉

〈!ELEMENT last-name (#PCDATA)〉

〈!ELEMENT title (#PCDATA)〉

〈!ELEMENT city (#PCDATA)〉

〈!ELEMENT street (#PCDATA)〉

〈!ELEMENT postal-code (#PCDATA)〉

]〉

〈address〉

……

与前面调用独立的DTD文件效果一样。

3.DTD中的符号表示

DTD 中有几个符号用于指定某元素在XML文档中可能出现的次数。以下示例是这些符号的表示含义:

〈!ELEMENT address (name,street,city,postal-code)〉

元素〈address〉必须包含一个〈name〉元素、一个〈street〉元素、一个〈city〉元素和一个〈postal-code〉元素,这些元素在文档的中也必须以这个顺序出现。逗号表示元素的列表项目,在一个定义的元素中,使用逗号分隔的项目必须在文档中按照这个顺序出现。

〈!ELEMENT name (title? first-name,last-name)〉

元素〈name〉必须包含一个可选的〈title〉元素、一个〈first-name〉元素和一个〈last-name〉元素。其中问号表示该元素可以出现也可以不出现,而后面两个元素则是必须出现,并按照这个顺序出现。

〈!ELEMENT booktitle (title+)〉

元素〈booktitle〉中至少包括一个以上的〈title〉元素,可以是任意多个,但不能少于一个。加号表示不少于一个元素。

〈!ELEMENT bookname (name*)〉

元素〈bookname〉包含任意多个〈name〉元素,包括0个。星号表示可以包括任意多个项目元素。

〈!ELEMENT body (title?,table-align,(left | center | right)?,text*)〉

元素〈body〉包含一个可选的〈title〉元素、一个〈table-align〉元素、一个可选的〈left〉或〈center〉或〈right〉元素,最后是个任意多个 text 元素。竖线符号表示只能在多个项目中选择其一。

4. 定义元素的属性

在DTD中用户不仅可以定义元素来组织文档,还可以定义元素的属性。用户可以为元素定义哪些属性是必须的、属性的默认值以及属性的有效值。

下面示例代码显示了如何定义元素的属性:

〈!ELEMENT city (# PCDATA)〉

〈!ATTLIST city province CDATA #REQUIRED

postal-code CDATA #REQUIRED〉

在这段代码中,我们定义了〈city〉元素,同时为它指定了两个属性 province 和 postal-code。关键字 CDATA 和 #REQUIRED 说明属性中包含字符数据并且是必须的,如果属性是可选的,则可以使用关键字 #IMPLIED。

下面示例代码列举了如何定义属性的默认值以及属性的有效值:

〈!ELEMENT table (#PCDATA)〉

〈!ATTLIST table align CDATA (left | center | right) "left"〉

其中元素〈table〉的属性 align 默认值是 left,有效取值为 left、center、right。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈