曝光台 注意防骗
网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者
• 在DTD 的<!ATTLIST>标记中声明属性。
• 一个<!ATTLIST>标记可以声明一个元素任意数目的属性。
• 属性通常具有缺省值,但是可以通过使用关键词#REQUIRED、#IMPLIEDU 或#FIXED 改变这种状态。
• 在DTD 中,可以声明十种属性类型: CDATA、枚举类型、NMTOKEN、NMTOKENS、ID、IDREF、IDREFS、
ENTITY、ENTITIES 和NOTATION。
• 预定义的xml:space 属性确定元素中的空格是否有意义。
• 预定义的xml:lang 属性规定书写元素内容的语言。
下一章将学习到如何利用记号、处理指令和不可析实体在XML 文档中嵌入非XML 数据。
XML 实用大全
第 321 页
第11 章 嵌入非XML 数据
不是世界上的所有数据都为XML 格式。实际上,可以大胆地说世界上积累下来的数据大部分都不是XML 格式。大量数据按无
格式文本、HTML 和微软的Word 格式保存,这里只举出三种常用的非XML 格式。在理论上说,如果有兴趣且财力允许的情况
下,至少这些数据的大部分可以重写为XML 格式,但也不是所有的数据都可以。例如把图像编码为XML 格式就将导致处理效
率极端低下。
XML 提供三种结构:记号、不可析外部实体和处理指令,通常用于处理非XML 格式数据。记号描述非XML 格式数据;不可析
外部实体提供与非XML 格式数据实际位置的链接;处理指令给出如何观看这些数据的信息。
本章叙述的具体内容尚有许多争议。尽管我所说的每一个事情都符合XML 1.0 规范,但是不是所有人都同意上述观点。肯
定可以写出一个XML 文档,文档中没有使用注解和外部对象,仅有一些简单的处理说明。可以先跳过本章内容,在后面发
现有必要了解这方面内容时,再返回到这一章。
本章的主要内容如下:
• 记号
• 不可析外部实体
• 处理指令
• DTD 中的条件部分
11.1 记号
在XML 文档中使用非XML 格式数据将会遇到的第一个问题是识别数据格式,并通知XML 应用程序如何读出和显示这些非XML
格式数据。例如,企图在屏幕上画出MP3 声音文件就是不合适宜的。
在一个有限的范围内只利用一套固定的用于特定种类的外部实体的标记,就可在单一应用程序中解决外部非XML 数据的读取
和显示问题。例如,如果全部图片数据都通过IMAGE 元素嵌入,全部声音数据通过AVDIO 元素嵌入;那么开发一个知道如何
处理这两个元素的浏览器并不是一件很难的事。实际上这正是HTML 采用的方法,可是这样的方法不允许文档作者为了能更
加清楚地描述它们所需的内容,而创建新的标记;例如PERSON 元素碰巧就有一个PHOTO 属性,该属性指向那人的JPEG 格式
图片。
再者,没有一个应用程序可理解所有可能的文件格式。大多数Web 浏览器可以管理和读出GIF、JPEG、PNG 图像文件,或许
还包括一些其他格式的图像文件;但是它们在EPS、TIFF、FITS 文件前都束手无策,对于是几百种普遍和特殊的图像格式就
更加力不从心了。图11-1 的对话框或许再熟悉不过了。
图11-1 当Netscape Navigator 无法识别一种文件类型时将发生的事情
XML 实用大全
第 322 页
理想的情况是希望文档会通知应用程序外部实体的格式,因此不必去依赖应用程序来识别文件类型,或是靠具有魔力的数字
或者是并不可靠的文件扩展名。此外,如果应用程序自身无法处理这种格式的图像,也可以为应用程序提供一些关于什么程
序可用来显示图像的线索。
记号提供了部分解决这个问题的方法(尽管不能获得很好的支持)。记号描述非XML 数据的格式。在DTD 中,NOTATION 声
明规定特殊的数据类型。DTD 在与元素、属性和实体同一层次上声明记号。每个记号声明都包含一个名字和一个外部标识符,
语法结构如下:
<!NOTATION name SYSTEM "externalID">
name 为文档中使用的特殊格式的标识符;externalID 就是用来标识记号的有意义的字符串。例如,实体GIF 图像的记号可
以使用MIME 类型:
<!NOTATION GIF SYSTEM "Image/gif">
也可以使用PUBLIC 代替SYSTEM 标识符,这样做就必须提供public ID 和URL。例如:
<!NOTATION GIF PUBLIC
"-//IETF// NONSGML Media Type image/gif//EN"
"http://www.isi.edu/in-notes/iana/assignments/media-types/image/gif">
对于如何准确地作出外部标识,还存在激烈的争论。像图像/gif、文本/HTML 之类的MIME 类型是一种可能性;另
一个建议是选择URL,或者其他的标准文档定位方式——像http://www.w3.org/TR/REC-html140/。第三个选择是
使用正式的国际标准——如表示日期和时间的ISO 8601 标准。某些情况下,可能ISBN 或者国会图书馆为文献文档
编目的方法更为适用。此外还有其余许多选择。
选取何种方式,取决于对文档生命期的期望值。例如,如果选择不普遍的格式,就不能依赖每个月都会改变的URL
方式;如果希望文档在100 年内都具有活跃的生命力,那么就该考虑使用在100 年中都具有意义的标识符,而不是
使用仅具有10 年生命力的技术。
也可以使用记号来描述插入到文档中数据。例如,研究下面的DATA 元素:
<DATE>05-07-06</DATE>
05-07-06 到底表示哪一天?是公元1906 年5 月7 日还是公元1906 年7 月5 日?答案取决于是按美国格式还是欧洲格式理
解这个日期。甚至也可能是2006 年5 月7 日或者2006 年7 月5 日。或者是公元6 年5 月7 日,是西方鼎盛时期的罗马帝国
的秋天和中国的汉朝。也有可能这个日期根本不是公元纪年,而是犹太历、穆斯林历法或者中国的农历。没有更多的信息,
就无法确定其真实的意义。
为了避免这样混淆不清的情况,ISO 8601 标准为表示日期规定了一个精确的方法。应用这种方法,在XML 中,公元2006 年
7 月5 日写为20060705,或者是如下格式:
<DATE>20060705</DATE>
XML 实用大全
第 323 页
这种格式不是与每个人的想法都相同,对所有人都具有同等程度的迷惑性,不偏向任何一种文化(实际上仍然偏向西方传统
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:
XML实用大全(93)