• 热门标签

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

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

在将用非验证型的解析器解析的、格式正规但并不有效的文档中,它们可能在一个独立的X M L
数据对象中的内部子集中声明,而不需要使用外部D T D或模式。
(1) 外部子集引用
有两种形式的引用D T D的外部子集的文档类型声明:
r o o t _ e l e m e n t _ n a m e是D T D的附着点。X M L文档的元素树中的所有子元素都继承这个根节点
的D T D声明。
S Y S T E M(上面例子中的“ s y s t e m _ i d e n t i f i e r”)和P U B L I C(上面的“ p u b l i c _ i d e n t i f i e r”)标
识符的值都是U R I(Uniform Resource Identifier,统一资源标识符)。在本文撰写时,在大多数
实践中, U R I都可以和U R L等同看待;虽然它的形式是“ h t t p : / / w w w. w r o x . c o m / m y f i l e . d t d”—
但实际上可以是任何能够被负责处理的应用程序识别出来的唯一名称。
P U B L I C标识符是用来引用某些D T D的,而它们是使用某些在X M L中没有定义的方法来分
类和检索的,但这只能是一个结构中的某种标准,或者是交换X M L数据的团队之间的协议。这
种不会像U R L那样成为一种盲目的引用,但它的缺点在于其适用范围不能超出相关机构的范围。
X M L解析器会试图使用P U B L I C标识符生成U R I。但如果做不到这一点,就会使用S Y S T E M
标识符的U R I。这种形式的缺点在于U R I可能失去作用(域名和文件路径可能改变,或者被废弃)
而D T D也找不到了。
由于通常使用的分段标识符(字符#)并不真正是U R I的组成部分,所以如果在S Y S T E M标
识符中出现分段标识符时可能会提示错误。任何包含非A S C I I字符的U R I都必须用U T F - 8中的字
符表示(可能用一个或多个字节),然后使用标准的U R I“% H H”转义序列来处理它们当中的每
一个字节(这里“H H”是十六进制值)。
下面是两个引用外部D T D的实例:
程序清单2 - 11
或:
程序清单2 - 1 2
第2章XML 语法使用41
下载
“标识符”是X M L从S G M L继承过来的另一小部分内容。
S G M L的“公共标识符”提供了一种方法,允许文档引用一个本地目录(或者使用其他更
好的办法)来查找D T D。这当然是一个非常有用的技术,但是在设计X M L时,并没有就
解决公共标识符的通用办法达成一致。结果是, X M L允许使用公共标识符,但需要系统
标识符作为备份引用。
(2) 内部子集声明如果没有外部D T D可用,X M L数据对象可以仍然使用实体引用,只要它
们在D T D的内部子集中声明过,后者是通过使用< ! D O C T Y P E . . . >的扩充形式来实现的。D T D语
法是下一章的主题,所以届时将揭示出更多的细节信息。作为基本常识,我们应该知道内部子
集的声明是在< ! D O C T Y P E . . . >使用中括号[ . . . ]分隔的,而< ! E N T I T Y. . . >声明则用来定义实体引用
的扩充部分。
下面是一个内部子集声明的简单例子,它涉及三个符号字符实体和两个“文本宏”或“样
板”实体:
程序清单2 - 1 3
上面的例子如果在I E 5中显示的话(如果用户没有指定使用的样式单),会得到如图2 - 8所示
的画面。
图2-8
42使用XML 高级编程
下载
X M L文档可能使用包含内部和/或外部子集的D T D。如果两种子集同时使用,而且有同一个
元素类型或实体的两个声明,内部子集优先。
现在我们已经讲解完了语言的语法和格式正规的文档的核心语法,下面我们很快地浏览一
下X M L的第三个部分。
2.10.2 尾声
X M L尾声可能包含注释、P I和/或空白。P I不一定非要应用到文档中尾声之前或接下来的数
据中(如果有的话)的元素中。
这种方案可能本身就是自找麻烦,或者说它本身就存在着问题。因为X M L没有定义任何文
档结束指示符号,所以大多数应用程序把文档元素的结束标记用于这种目的。这样一来,网络
链路可能在遇到根元素的结束标记时就关闭了,而不再对尾声进行任何处理。而且,文档之间
的处理指令在某种程度上也有些模糊不清。
尾声被Tim Bray(XML 1.0推荐标准的作者之一)认为是一个“真正的设计错误”—如果
没有很好地利用,使用它可能是一种错误,我们应当注意到它不太可能具备与其他X M L应用程
序的互操作性。
下面,我们应该好好回顾一下我们已经学到的关于X M L的语法了。
2.11 XML语法小结
X M L标记的形式参见表2 - 5。
表2 - 5
语法组件
< t a g n a m e > 元素起始标记
<tagname attribute=“value”> 带有属性的起始标记
< / t a g n a m e > 结束标记
< t a g n a m e / > 空元素标记
<tagname attr1=“value1” 带有两个属性的空元素标记
a t t r 2 = “ v a l u e 2 ” / >
特殊的X M L指令和声明参见表2 - 6。
表2 - 6
语法组件
<?xml version=“1.0” encoding=“UTF-8” standalone=“yes” ?> X M L声明
<?name string ?> 用于X M L应用程序的处理指令( P I)
<! - - string - -> 注释,供撰写者或编辑者使用
< ! [ C D ATA[string . . . ]]> 未解析的字符数据(C D ATA)部分
<!DOCTYPE string . . .> 文档类型声明(不是D T D)
X M L实体引用参见表2 - 7。
第2章XML 语法使用43
下载
表2 - 7
语法组件
& # d e c i m a l ; 使用十进制数字表示的字符编号的引用
例如: &#174;
& # x H E X ; 使用十六进制数字表示的字符编号的引用
例如: &#xAF4
& r e f ; 对预先定义的X M L实体(如文本宏)的引用
现在我们了解了可能在格式正规的文档中使用的各个部分,下面让我们讨论一下“格式正
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(18)