• 热门标签

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

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

算符分隔,而且整个组声明为可出现“零次或多次”:
根据XML 1.0推荐标准中规定的语法,使用复合内容模型时, # P C D ATA关键字必须是模
型中的第一个选项。
以上代码表示可以从I t e m A、I t e m B和# P C D ATA中选择零个或多个选项。它可以有以下实
例:
程序清单3 - 5
考虑以下内容模型,看看它们各自表达什么含义:
元素f o o包含两个子元素,第一个永远是元素A。第二个是B或C。
在上例中, f o o包含两个或三个按顺序排列的子元素。其中B是可选的。
60使用XML 高级编程
下载
表3 - 4
元组运算符含义
? 可选的;可有可无
* 零个或多个
+ 一个或多个
现在,f o o元素变得更加复杂了。它的第一个子元素可以是A、B或D。根据选择不同,它可
以有一至四个子元素。其中A是可选的,然后是B和C或D,E也是可选的。
在上例中,元素f o o可以有一个或两个子元素。可能是顺序排列的A和B,也可能是C或者D。
让我们再稍微修改一下这个模型:
在上例中,元素f o o可以包含重复的A、B对列表,或者一个单独的C或D。借助内容模型,
可以产生变化多样的子内容实例。例如:
根据上述定义,元素f o o可以包含一个A,零个或多个B、C对,以及至少一个D。
我们希望通过上述例子能够激发起你尝试更复杂模型的兴趣。内容模型的规则虽然简单,
但是它能够产生灵活多样的结构。为了测试以上定义,你可以在D T D中插入其中一段代码,然
后编写符合定义的文档,并在能够验证有效性的解析器上运行。
I n t e r n e t上提供了几个可以通过We b页面访问的解析器。我常用的是h t t p : / / w w w. s t g .
brown.edu/service/xmlvalid/,我经常用它来检查DTD结构。
现在让我们来看一看属性。
3.3.3 属性
属性是对元素的补充和修饰,它能够将一些简单的特性与元素相关联。通过属性,我们可
以给元素绑定大量信息。例如,在H T M L标记I M G中,S R C就是一个属性。属性在XML DTD中
是使用AT T L I S T标记声明的。对于含属性的元素,至少要通过一个AT T L I S T标记声明其属性列
表。AT T L I S T声明由以下部分构成: AT T L I S T关键字、属性修饰的元素名称,以及零个或多个
属性定义。为了增强可读性,每个属性定义通常占据单独的一行。
属性定义包含属性名称、类型和缺省声明。
在以上代码中,我们声明了一个名为A t t r i b u t e N a m e的属性,它必须在m y E l e m e n t元素实例的
起始标记中出现(# R E Q U I R E D—这是缺省设置),属性的值是字符串( C D ATA)。
属性声明可以有几种不同的缺省设置,它定义了属性在文档中出现的方式。在研究属性类
型之前,我们先来看看属性声明的缺省设置。
1. 缺省值
属性声明可以有四种缺省设置,如表3 - 5所示。
表3 - 5
属性缺省设置含义
# R E Q U I R E D 元素的每个实例必须包含该属性
# I M P L I E D 元素实例可以选择是否包含该属性
# F I X E D加上缺省值属性的值永远固定为缺省值;如果元素中不包含该属性,解析器
第3章文档类型定义使用61 下载
(续)
属性缺省设置含义
将缺省值作为属性值
只有缺省值如果元素中不包含该属性,解析器将缺省值作为属性值。否则,
该属性可以有其他值
如果AT T L I S T声明中设置了缺省的属性值,即使文档中的某些元素实例忽略了该属性,
X M L解析器仍然会认为该属性已经被赋予了缺省值。因此,对于下面显示的属性声明,这两个
元素实例是等价的:
程序清单3 - 6
从上例可以看出,c o l o r属性声明有缺省值: b l u e。在第一个元素实例中,我们显式声明了这
个属性,而在第二个实例中,我们省略了属性。对于解析器来说,这两个实例是相同的——都
有值为b l u e的属性c o l o r。
在下面的例子中, B o o k元素包含一个名为l e v e l的属性。如果我们将l e v e l属性的缺省值设为
P r o f e s s i o n a l,考虑一下会出现什么情况。
如果文档中的B o o k元素不含l e v e l属性,任何处理该元素的应用程序都会认为元素设置了
l e v e l属性,且值为P r o f e s s i o n a l。如果缺省值出现的几率非常高,不妨采用这种方式。在这种情
况下,我们可以声明缺省值,当元素实例的属性值与缺省值相同时,可以省略该属性。
然而,这种技术也可能给应用程序带来麻烦。你必须确保所选择的缺省值对于应用程序的
处理来说是可靠的。元素的属性很容易被遗忘。在这种情况下,应用程序将使用D T D中声明的
缺省值。如果你编写的代码极其依赖于属性值的正确设置,应该使用# R E Q U I R E D关键字(或枚
举值,我们稍后会讨论有关内容),以确保属性值的显式设置。
下面显示了元素B o o k的属性列表,你不必对各部分的含义过于计较:
程序清单3 - 7
在属性列表中,首先要指定元素名称B o o k,然后是属性名称、类型,以及元素是否必须包
62使用XML 高级编程
下载
含该属性。可选的属性用关键字# I M P L I E D表示。用关键字# R E Q U I R E D修饰的属性必须出现在
每个B o o k元素实例中。
表3 - 6列出了X M L定义的属性类型。
表3 - 6
属性类型含义
C D ATA 字符数据(字符串)
I D 特定文档中唯一的名称
I D R E F 对某些具有I D属性的元素的引用,这些元素的I D属性值必须与
I D R E F属性的值相同
I D R E F S 若干以空格分隔的I D R E F
E N T I T Y 已定义的外部实体的名称
E N T I T I E S 若干以空格分隔的E N T I T Y名称
N M TO K E N 名称
N M TO K E N S 若干以空格分隔的N M TO K E N
N O TAT I O N 接受一个在D T D中声明为用于指示表示法类型的名称
[枚举值] 接受用户显式定义的属性可选值中的一个值
下面让我们依次讨论这些属性类型。
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(26)