• 热门标签

当前位置: 主页 > 航空资料 > 计算机 >

时间:2010-08-09 13:05来源:蓝天飞行翻译 作者:admin
曝光台 注意防骗 网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者

时,它会用这三个属性取代参数实体名称。如果我们需要在D T D输入该属性集合,只需引用实
体p e o p l e P a r a m e t e r s即可。
在D T D中,所有参数实体必须在引用之前进行声明。这意味着D T D内部子集不能引用在外
部子集中声明的参数实体,因为解析器首先读取内部子集—所以会导致引用出现在声明之前。
引用参数实体时,需要在实体名称之前增加百分号,在其后增加分号。定界符与名称之间
没有空格。下面的代码显示了如何引用上面定义的参数实体:
第3章文档类型定义使用57 下载
以上代码声明I n s u r e d P e r s o n元素包含4个属性:其中c a r r i e r是显式声明的,其余三个参数
(a g e、w e i g h t和h e i g h t)包含在参数实体中,当解析器用置换文本取代实体引用时,会出现元素
的完整列表。因此,上面的例子等价于以下代码段:
程序清单3 - 1
这种类型的替换形式—在声明中进行替换—只能用于D T D外部子集。在内部子集中,
参数实体引用只能位于其他声明之间;因此这类实体引用的置换文本必须是一个完整的声明,
否则将影响D T D格式的正规性。
一个格式正规的文档应该遵循的规则都可以应用于参数实体。用置换文本取代实体引用后,
仍然必须保证文档格式的正规性。当你构建参数实体时,一定要谨记这条规则。通常,在参数
实体的置换文本中使用标记时要格外谨慎。下面的例子就破坏了格式正规约束:
% m y P a r m ;的置换文本是不完整的声明,它缺少结束标记>,因此当解析器替换% m y P a r m ;时,
D T D就不再是格式正规的了。
与通用实体类似,参数实体的置换文本也可以位于外部文件中。例如:
从以上讨论可以看出,对于定义X M L文档词汇表来说,实体是一种非常有价值的工具。下
面让我们看看如何定义词汇表中的元素类型。
3.3.2 元素
元素是X M L的核心与灵魂。在D T D中,元素类型是通过E L E M E N T标记声明的。除了关键
字,标记还提供所声明类型的名称和内容规范。正如第2章所述,元素类型名要遵守X M L对名称
的限制。名称可以是字母、数字,也可以使用标点符号,如:冒号( :)、下划线( _)、连字符
(-)和句点( .)。然而,名称不能以数字开头。它的第一个字符只能是字母、下划线或冒号。
虽然名称中可以使用冒号,但是在第7章介绍名称空间时,你会看到有关冒号的保留用法。
鉴于这方面的原因,最好避免在元素名称中使用冒号。
元素内容可以分为以下四种类型:空、元素、复合及任意。空元素中既不包含文本,也不
含子元素。但是它可以有属性。它用关键字E M P T Y来表示。元素(更确切地说是纯元素)内容
是指元素中只包含子元素,而不含文本。顾名思义,复合内容是元素和可解析字符数据
(# P C D ATA)或文本的组合。对于两种类型,我们可以通过结构表达所需的内容。复合内容和
元素内容是采用内容模型( content model)表示的。内容模型是一种规范,它定义了元素内容
的内部结构。如果你希望元素具有任意形式的内容,同时不破坏X M L的格式正规语法,应该使
58使用XML 高级编程
下载
用关键字A N Y进行声明。
元素类型S o m e D a t a不含任何内容。下面是该类型的实例:
通常,在以下情况你可能会使用空元素。在文档中写入元素本身足以起到标识的作用。例
如,H T M L中的< B R / >元素。你可以利用这种方法通知应用程序改变处理模式。如果你希望在文
档中插入一组相关的参数,而专门为它们建立结构又不太值得,此时你可以使用空元素,利用
它来表达参数之间的关系。稍后讨论属性时,你会对此有进一步认识, X M L定义的某些属性类
型可以用来表示一对一或一对多关系。如果你要说明的仅仅是关系本身,空元素是最适合不过
的。
A n y O l d T h i n g声明为A N Y内容,因此我们可以使
用元素和文本的任意组合。一般而言,使用A N Y内
容模型时要格外谨慎,因为解析器基本上不能提供
有效性验证。
内容模型即元素结构的声明。它是由圆括号包含的若干子元素名称、运算符和# P C D ATA关键
字的组合。运算符用于说明元素包含的元组,以及元素和字符数据之间的组合方式(参见表3 - 3)。
以逗号分隔的列表表示顺序排列的元素。下面的代码声明了P e r s o n N a m e元素:
在元素实例中, F i r s t、M i d d l e和L a s t必须按指定的顺序出现。如果你希望为文档的创作者提
供选择的余地,可以参考下面的F r u i t B a s k e t元素类型声明,它可以包含A p p l e或O r a n g e,但是两
者不能同时出现:
内容模型可以嵌套。下面的例子是修改后的F r u i t B a s k e t,它包含的第一个参数是C h e r r y,第
二个参数可以从A p p l e或O r a n g e中选择其一:
根据以上声明产生的实例必须包含两个元素: C h e r r y以及A p p l e或O r a n g e,且它们必须按照
指定的顺序出现。根据声明,元素实例只可能有以下两种形式:
程序清单3 - 2
程序清单3 - 3
第3章文档类型定义使用59 下载
表3 - 3
顺序运算符含义
, (逗号)表示严格顺序
| (管道符号)表示选择
除了我们前面介绍的顺序运算符,还有一种非
常重要的运算符——元组运算符。特定的元素类型
允许多少实例?表3 - 4列出了元组运算符。
如果没有元组运算符,说明元组数为一。元组
运算符可以用于元素或内容模型,它能够产生许多
非常复杂的结构。让我们进一步修改F r u i t B a s k e t元
素类型声明:
以上内容模型组表示F r u i t B a s k e t可以有一个或多个元素类型C h e r r y的实例,以及零个或多个
A p p l e或O r a n g e的实例。而且所有C h e r r y元素必须连续出现。下面是一个正确的F r u i t B a s k e t实例:
程序清单3 - 4
如果你希望表示复合内容,需要在内容模型中包含# P C D ATA。内容模型中的元素必须以|运
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(25)