缩写 | 说明 |
Namespaces | 防止不同软件使用名字因为重复而发生冲突 |
XPath | 定位文档中的数据 |
XPointer | 说明在文档中的位置 |
Xquery | 在文档集中查找数据 |
XSLT | 对数据进行格式转换 |
XSL | 以页面格式表示数据 |
Xlink | 连接来自不同文档的数据 |
N/A | 说明比DTD 更广泛的格式定义 |
|
|
这一篇简单介绍一下XML的特性标准。
首先是命名空间,在实际利用XML的过程中,存在一种现象,就是不同的程序使用同一张XML文档,但是不同程序可能用了同样的名字去表示其实是不一样的数据,为了解决这个问题,引入了命名空间的概念,将XML的元素或属性跟唯一的‘命名空间’联系起来,以区分不同数据。比如,一张订单可以用XML表示,部分数据如下:
<Reconciliation>
<Customer>
<Name>John</Name>
<Address>Accounts Payable-Bar Corporation</Address>
<Order>
<Status>.....</Status>
</Order>
</Customer>
</Reconciliation>
Status 表示订单的状态,如果是财务程序处理这张 XML ,那么 Status 的值为‘invoiced’(已开票)或‘uninvoiced’;如果是交货程序处理,是“shipped”(已交货)或“unshipped”,即同样一个元素,对不同部门可能意义不同,这时就可以用命名空间;
<Reconciliation
xmlns:acct=http://www.foocompany.com/names/acct-rev10
xmlns:ful=http://www.foocompany.com/names/ful-rev10>
<Customer>
<Name>John</Name>
<Address>Accounts Payable-Bar Corporation</Address>
<Order>
<acct:Status>.....</acct:Status>
<ful:Status>.....</ful:Status>
</Order>
</Customer>
</Reconciliation>
当越多的人使用同一个XML时,命名空间就越重要,对开发商而言,所有产品可以定义为一张XML,但不同产品应该有不同的命名空间;企业内部不同部门也应该对应不同的命名空间;
Xpath 、 XPointer 、XQuery 都有定位数据的功能,XPath 是基础,XPath 的语法提供了利用类似文件目录那样的层级结构表示树状结构(因为两者是对应的),XPointer 是比 XPath 更 精确的方式,而 XQuery 是从一个文档集而不是一篇文档中搜集符合条件的节点。这方面详细的内容同样可以参考W3CSchool.
XSL 和 XSLT 从名字上就可以看出是相关的,它们的关系是由于历史原因;最初,人们想要为 XML 文档设计一种通用的显示方式,就是 XSL;它的作用相当于 CSS 对 HTML 的作用,要达到这个目标,XSL需要满足两方面要求,第一是重新组织文档的内容(这是显示的关键),第二是将显示属性与内容相关联;问题在于,第一方面的研究进展很快,而且发现这种对XML文档的重组不仅对显示有用,对很多其他方面也很有用,最简单的就是,两个公司各自有各自的XML标准,现在要对两个公司的业务进行自动化处理,而业务都是以XML存储的,那么这个过程势必需要对XML结构进行改变,以使两种标准能统一,这就是XSLT!而第二方面,合适显示属性的研究还存在争议,所以单独作为 XSL,而XSLT先一步成为了标准。事实上,XSLT 不仅在数据转换方面发挥重要作用,在基于XML文档的数据抽取方面也有很大作用的,这个以后有机会再详细说;
有一个问题需要知道,就是以上提到的几种特性标准,实际上用一般的程序语言也可以达到同样的操作,比如用java的dom或SAX,同样可以定位到某一节的去取值,所以,这些所谓特性标准其实是将这类比较经常的操作独立出来而已。所以,有些操作,用 XSLT 的效率还远比不上直接用 dom 写,但是复杂的问题,用 特性标准来做就可以使系统更清晰。