或者指出使用国际标准化组织(ISO)的日期格式,如下所示:
当元素包含属性时,常称为复合类型(complex type)元素。后面将会看到,这在书写XML模式文档时是很重要的。
在同一个元素内,可以为不同的属性分别使用双引号或单引号,如:
请注意,不要在同一个属性中分别使用单引号和双引号,否则文档就不是合式的了。
注意 从文字处理文档中剪切属性粘贴到XML文档中时要十分小心。文字处理软件通常使用小引号,而这
会在XML文档中引起错误。
还可以将属性改写为嵌套的子元素。例如
可改写为:
关于哪种写法更好并没有一个明确的规则。两种写法都是可接受的。 现在总结一下与属性相关的规则:
l 属性由名称/值对组成;
l 属性值必须封装在单引号或双引号中; l 属性中不能含有XML标签; l 属性名称必须遵循XML命名规则。
3.文本
所有XML文档内部的文本都包含于开始标签和结束标签内部。除非该文本被标记为CDATA,那么它将会被认为是XML,从而做相应的处理。也就是说,左尖括号会被认为是某个XML标签的一部分。
如果希望在文本中使用保留的字符,那么必须将它们写为字符实体。例如,可以将左尖括号<写作<。保留字符也可以嵌入到CDATA中。
4.CDATA段
CDATA可以对文本块进行标记,这样它们就不会被当作XML进行处理。前面曾提到过,这对于包含XML保留字符的文本来说是非常有用的。
此CDATA段以
CDATA段可用于在XML文档中嵌入代码,如JavaScript代码,或者加入不需要处理的内容。例如,当一个应用程序从数据库里读取数据并且将它标记在XML文档中时,它可能将所有的内容都嵌入到CDATA段中,以避免对那些保留字一个一个地进行处理。第3章会介绍一个关于JavaScript的使用CDATA的例子。
5.实体
字符实体是表示单一字符的符号。在XHTML中,字符实体被用于表示一些特殊的符号,如与号&(&)和不间断空格( )。
在XML文档中,可以用字符实体替代保留字符。因为所有的标签都以左尖括号开始,所以在一个元素的文本中是无法包含这个字符的:
如果需要处理这个元素,文本25前面的左尖括号就会引起一个处理错误。这种情况下,应该以实体<来替代这个符号,如:
以下这些保留符号是需要注意的:
l <,表明一个标签的开始;
l &,表明一个实体的第一个字符; l xml,保留为用于对XML语言其他部分的引用,如xml-stylesheet。 表1-1总结了常用的字符实体。 表1-1 XML文档中使用的字符实体 字 符
& ' > < \
实 体 & ' > < "
有时一些字符是不能加入到XML文档中的,也许因为这些字符不在键盘上或者它是图形字符。在这种情况下,可以使用Unicode或十六进制数字将它们以字符实体的形式加入。比如,可以将版权符号?编码成©或©。
以开始并以分号结束的引用都是字符引用。中间的数字是所需字符的Unicode编码。如果编码写成十六进制形式,那么它的前面有一个x作为前缀。
实体也可以自己定义。比如,可以将Copyright 2006 Apress定义为©right;。每次需要在XML文档中包含这段文字时,都可以使用实体引用©right;。这使文本更容易管理和更新。
现在继续了解XML文档的处理。
1.4 XML的处理模型
XML推荐标准假设XML文档是以一种特定方式处理的。下面这个模型说明XML处理程序将XML文档的内容和结构都传递给应用程序。XML处理程序通常也称为XML解析器,因为它们对XML文档进行解析,如图1-2所示。
图1-2 XML文档处理模型
常见的XML处理程序有微软的XML Parser(MSXML)、Apache Xerces2和Oracle XML parser,可以在应用程序中使用任意一种。一些XML解析器也可以以软件包的形式自动安装。用于在Web浏览器中显示XML的XSLT(可扩展样式表语言转换)处理器就是这种类型。MSXML包含了XML解析器和XSLT处理器,它即是一个XML处理器也是一个应用程序。它随IE和其他微软的软件一起自动安装。
1.4.1 XML处理方式
XML有两种处理方式:基于树的和基于事件的。很多XML解析器,包括MSXML的最新版本,对两种模型都支持。基于树的解析器通常也称为DOM(文档对象模型)解析器,而基于事件的解析器通常被称为SAX(XML简单应用编程接口)解析器。二者都是以它们支持的规则命名的。
DOM是W3C推荐的XML文档应用编程接口(API)的标准。所有的应用程序都可以使用这个API来操作XML、读取信息、添加节点以及编辑当前的内容。关于这个推荐标准可以在http://www.w3.org/TR/REC-DOM-Level-1/中了解到更多内容。
SAX并不是W3C的推荐标准,但也得到了大大小小软件公司的支持。基于SAX的解析器顺序地读取XML文档,当它遇到文档中的重要部分时会触发事件,比如在元素的起始或结束位置。在http://www.saxproject.org/中可以了解到其更多内容。
1.4.2 DOM解析
图1-3表示的是前面所述dvd.xml文档的树型结构。
以这种方式显示文档进一步强调了在族谱中元素之间的关系。
图1-3 以树型结构显示的dvd.xml文档
DOM解析允许通过编程语言或是脚本语言(如JavaScript)访问这些元素以及它们的值,还可访问文档中的所有其他部分。
1.4.3 SAX解析
基于SAX的解析器以一串事件的形式展现XML文档。必须对每个事件编写处理程序,这样当事件触发处理程序时会产生相应的结果。
这种形式的解析对于有良好事件处理机制的语言非常适用。例如,SAX解析在Java中很常用。它对于网络上经常采用的脚本语言不太适用,因此这里就不详细讨论了。
1.4.4 为什么有两种处理模型
两种处理模型都有其优点。基于DOM的解析提供了对XML文档的完整的读写访问,并且可以通过遍历文档树对文档内的节点进行访问。它还可以对照DTD或XML模式来判断一个文档是否有效。