当前位置:文档之家› 第4章_XML文档类型定义

第4章_XML文档类型定义

XML 教程

信永国际

o 教学提示:XML 的可扩展性表现在用户可以自己定义标记和标记之间的嵌套关系,而DTD 就是进行这种定义的语言。它定义了文档的逻辑结构,规定了文档中所使用的元素、实体、元素的属性、元素与实体之间的关系。根据DTD 可检查XML 文档中的数据,以验证其是否符合规定和要求,这可以保证XML 文档数据的正确性和有效性。本章介绍DTD 的语法,包括元素、属性和实体的语法,结合例子给出DTD 的使用方法并给出综合实例。

o 教学目标:了解DTD 的作用,熟悉元素、属性及实体的运用,掌握引用DTD 的方法,能够为特定的系统设计标记语言。

3 XML 文档类型定义

教学内容:

3.1 DTD的作用3.2 DTD元素3.3 DTD属性3.4 DTD中的实体3.5 使用DTD

有三种XML 文档:

无效文档没有遵守XML 规范定义的语法规则。如果开发人员已经在DTD 或模式中定义了文档能够包含什么,而某个文档没有遵守那些规则,那么这个文档也是无效的。

有效文档既遵守XML 语法规则也遵守在其DTD 或模式中定义的规则。

格式良好的文档遵守XML 语法,但没有DTD 或模式。

4.1 DTD的作用

标记语言的语言。在XML中可以创建新的标记语言,这些新的标记语言(也叫标记集)要通过文档类型定义(Document Type Definitions,DTD)来定义。DTD文档是这些新的标记语言的法律性文档。如果XML文档的语法符,DTD的定义和规定,那么就称为一个合法的XML文档,否则就是非法的XML文档。

DTD定义了文档的逻辑结构,规定了文档中所使用的元素、实体、元素的属性、元素与实体之间的关系。其作用主要表现在以下几个方面:

(1) 使用DTD可以提供一种统一的格式。XML的可扩展性为文档

的作者提供了很高的灵活性,可有时候需要的是统一,要求某一类文档具有相同的结构。

(2) 使用DTD可以保证数据交流和共享的顺利进行。

(3) DTD使用户能够不依赖具体的数据就知道文档的逻辑结构。

在没有XML文档的时候,也可以根据DTD为XML文档编写样式单,编写处理程序,这样可以有效地提高工作效率。(4) 使用DTD可以验证数据的有效性。DTD对文档的逻辑结构进

行了约束,这种约束可以比较宽松,也可以十分严格。可以根据DTD检查数据,以验证其是否符合规定和要求,这可以保证数据的正确和有效。

4.2 DTD元素

DTD中描述的基本部件是元素和属性,它们负责确定XML文档的逻辑结构。元素表示一个信息对象,而属性表示这个对象的性质。所有元素中有且只有一个根元素,其他的元素都是它的子元素,除根元素外,每个元素都被其他元素包含,一个元素可以有几个不同类型的子元素。

4.2.1 元素的基本类型

元素的基本类型大致可分为两种,一种称为简单型,另一种称为复合型。简单型具有文本数据,即可析字符数据,该类型也称为上下文中的

“#PCADTA”;复合型可以包含其他元素和文本数

据。

1.简单型

“#PCDATA”(Parsed Character Data)表示标记的内容是可解析文本,所谓的可解析文本就是非标记文本。用

“#PCDATA”规范了的元素不能再包含子元素。例如How

do you do是不包含标记的文本,而How do you

do就不是可解析的数据类型,因为其中包含有标记。另外DTD文档中不同元素定义的次序没有先后关系,但文档的语法对大小写敏感。

“#PCDATA”的声明格式:

2. 复合型

复合型元素与简单型元素相对,复合型元素可包含其他元素。

4.2.2 元素的声明

1. 元素声明的基本语法

元素的声明格式:

其中,Element_Name为声明的元素名称,

Element_Defination为元素内容格式的定义。

合法的元素声明语句如:

2. 空元素的声明

在第3章中已介绍了空标记的使用方法,那么在DTD中如何对与其对应的空元素进行声明呢?其声明格式:

例如下面的语句:

3. 不限定元素内容的声明

ANY是DTD中使用很频繁的一个关键字,特别是对于文档根元素的声明。在定义一个DTD文档时通常很难准确地确定一个元素是否具有子元素的情况,此时一般的做法是指定该元素的子元素为ANY型(表示可以是任意的元素),这样在它之中可以包含任何数据、任何

声明的子元素及其数据和子元素的组合。

ANY元素的声明格式:

在XML中有一种针对复合元素的最为严格的设定方法,称为子元素列表的设定。这种方式下,元素都拥有哪些子元素、每个子元素出现的次数和位置都有明确的规定,在具体文档实现时,必须严格执行。

子元素列表的设定语法如下:

Child_Element2,…)>

其中“(Child_Element1, Child_Element2,…)”部分为Element_Name所拥有的子元素列表。

有些时候,需要在两个或多个互斥的元素中进行选择。即多选一的情况,如一个人的性别可以是男或女,两者中只能有一种情况。DTD有专门的语法来处理这种情况,其语法格式如下:

Element_Name(Child_Element1|Child_Element2|……)>

其中,“(Child_Element1|Child_Element2|…)”部分为选择性元素组合,具体使用时必须要在这个列表中选择其一。

(1) 一个元素可能出现一次,也可能不出现。这时可通过在元素

名后面加上一个“?”来实现。

(2) 一个元素可能不出现,也可能出现多次。这时可通过在元素

名后面加上一个“*”来实现。

(3) 一个元素可能出现一次,也可能出现多次,但至少也要出现

一次。这时可通过在元素名后面加上一个“+”来实现。

7. 元素组

在声明复合型元素的时候,可以使用括号将其部分子元素组合在一起,成为一个元素组,该元素组在特性上与普通元素没什么区别,可以对其使用“?”、“*”、“+”等控制字符。在实际应用中,使用元素组可能不是最好的方案。这时也可以先将准备分组的元素定义为一个复合元素,再在原来的元素中引用刚定义的复合元素,这样文档的结构更清晰。

8. 混合型元素

还有另一种元素,其内容既可以为字符数据,也可以为子元素,这种元素称为混合型元素。混合型元素的声明格式:

混合型元素的存在破坏了文档的层次结构化,不利于应用软件对XML文档的处理,在XML文档开发过程中,它可以作为一个不成熟的DTD文档,一步一步地在XML文档中添加元素,边添加边测试其正确性,这时可将尚未处理的部分作为字符数据组织到一个混合型元素中,以便使文档通过测试。

但在文档最后完成时,要通过添加新元素的方法来清除这种非结构化信息。

3.3 DTD属性

简单来讲就是元素的附加特性,在DTD中声明元素时,也必须对该元素的属性进行声明。

3.3.1 属性的声明

在DTD中,属性的声明格式:

Default_value>

其中,为属性声明的关键字,Element_name为元素名,Attribute_name为属性名,TYPE是属性类型,

Default_value为没有设定属性值时的默认值。

在声明属性时有以下需要注意的事项。

(2) 属性的声明在文档中的次序没有严格的要求,可位于与其相连

的元素声明之前或之后。

(3) 所有元素的属性,都要在各自所对应的标记中声明。

(4) 属性有4种不同类型的默认值,可在属性声明中的

Default_value部分指定。

①default:表示使用提供的默认值,default不是一个关键字,它

代表一个预设的字符串。

此例句表示当在XML文档中省略了对bookinfo元素的

bookcategory属性值进行设定时,该属性的默认值就是“文艺”。

②#REQUIRED:表示属性值必须指定。

③#IMPLIED:表示元素的这个属性可用可不用。

④#FIXED:表示元素的这个属性值是一个固定值,且必须是指定

的值。

3.3.2 属性的类型

声明属性

属性声明拥使用下列语法:

DTD 实例:

XML 实例:

属性类型的选项

相关主题
文本预览
相关文档 最新文档