computer 版 (精华区)
发信人: lyl (一条四处游荡的鱼), 信区: network
标 题: 查询和转换XML
发信站: 听涛站 (Fri Apr 28 21:19:52 2000), 转信
发信人: kyoshiro (千面狂死郎), 信区: XML
标 题: 查询和转换XML
发信站: BBS 水木清华站 (Thu Apr 6 15:06:14 2000)
转自<<中国XML联盟>>
简介
XSL概述
附加的查询功能
与XML-QL的关系
变量和连接
对象标识符
多重XML源的数据集成
数据库管理
总结
1. 简介
XML1.0标准使得网上的数据交换有了标准的方式。这样必然要有一种机制,通过它能够
查询询XML、对获取的数据定型(包括数据滤除和排序)、XML语法间的转换以及这些数据
通常在用户端的表现?
在“XML查询语言XML-QL”( http://www.w3.org/TR/NOTE-xml-ql/ )中建议的方法和正
由XSSL工作小组定义和转换语言有着惊人的相似。这两种方法的结合将会为XML提供强大
而灵活的查询和转换语言。
XSL和XSL模式语言作为查询和转换语言发展的基础有独特的优势:
W3C正在研究中
模式(查询)语法、转换功能和格式化语法的模块化
XML定型和表现方式的生成有统一的机制
规则、非规则甚至是递归的数据结构都能适用
2. XSL概述
XSL由三个模块组成:
XSL模式(XSL Pattern):
XSL定义一种“模式”句法标识XML文档中的节点。这项功能类似于SQL中WHERE语句.
“XSL”名域(“XSL” Namespace):
XSL的转换部分能表达为一个XML名域,它控制将查询结果具体化为一个XML文档。
“fo”名域(“fo” Namespace):
XSL格式化的功能可以用一个XML的语法文件来表达。
XSL模式句法还比较简洁,不能提供强大的查询能力。它参照了目录导航的方法。作为一
种换 于字符串的语法,它能够在属性值、脚本语言和URL中定位。“XSL”名域定义了一
套命令集合,实现将查询结果具体化为XML。一个XSL文档包括XSL名域中规定的元素,他
们可能是:
定义构造部分输出的模块
对来自XML源文件中的数据应用模板
将该模板结合查询
将一套这样的查询-模板结合进行组合,用于内部或者递归处理
将查询结果进行过滤和排序
XSL的格式化性能用XML的“fo”名域来表示,它完全独立于整个转换过程。
3. 附加的查询功能
由Microsoft、Texcel和Webmethods合写的相关文档”XQL建议”(“XQL Proposal”)可
看作作为XSL模式语法的扩展集,它提供了布尔操作,多种比较操作和位置、范围等性质
?
类似于XSL模式语法或XQL的语言还能在XSL之外的其它许多环境中使用,用来查询个别文
档换蚨喔鑫牡导 ,无论这些文档是表达为文本或DOM节点的形式。查询语句可以作为
字符串嵌入编程语言或XML/HTML的属性中。而且,这种方法并不对结果的表现格式有任
何的强制;结果可以返回为XM
L文本、指向节点的指针、表示文档区域的结构或者为如字符串、整数、布尔数、数组等
原适 结构。其灵活性允许这些语言能在W3C的许多环境中使用。
4. 与XML-QL的关系
XML-QL阐述的许多功能常与XSL转换和模式语言提供的功能类似。两种方式都是块结构且
面舷蚰 板,都能返回树或图表。在输出中生成新元素以及对XML进行查询。最大的差别
在于各自的语法。XSL采用类似URL的语法来规定模式、查询和XML的内在结构对查询块定
界。
这种方式的基本结构是:
<xsl:for-each select = "XSL pattern">
<!-- Construct result -->
</xsl:for-each>
相应的XML-QL结构是:
WHERE XML-QL pattern
CONSTRUCT output
为了比较这两种语言,我们将列举一些XML-QL W3C建议中的例子说明怎样用我们的方法
来写写这些查询语言。这些例子的作用对象是下面这个XML
<bib>
<book year="1995">
<!-- A good introductory text -->
<title> An Introduction to Database Systems </title>
<author> <lastname> Date </lastname> </author>
<publisher> <name> Addison-Wesley </name > </publisher>
</book>
<book year="1998">
<title> Foundation for Object/Relational Databases: The Third Manifesto </ti
tle>
<author> <lastname> Date </lastname> </author>
<author> <lastname> Darwen </lastname> </author>
<publisher> <name> Addison-Wesley </name > </publisher>
</book>
</bib>
用XML-QL的方法来查询由Addison-Wesley出版社出版的书的作者:
WHERE <book>
<publisher><name>Addison-Wesley</name></publisher>
<author>$a</author>
</book>
CONSTRUCT $a
用我们的相应的方法为:
<xsl:for-each select = "book[publisher/name = 'Addison-Wesley']/author">
<xsl:value-of />
</xsl:for-each>
原先的1997年8月制定的XSL建议(http://www.w3.org/TR/NOTE-XSL.html)提出了类似于
XML--QL的“按实例查询”(query by
example)语法,但后来这种方式遇到了一些挑战。而目前的类似URL的语法不管是对简单
还是是复杂的查询限制都能顺利工作。例如:比方我们要得到由几个出版社出版的书的
作者,可以简单写为?
<xsl:for-each select = "book[publisher[name = 'Addison-Wesley'
$or$ name = 'Microsoft Press']]/author">
<xsl:value-of />
</xsl:for-each>
XML-QL还有其他的一些特点:
4.1变量和连接
XML-QL模式允许使用变量,能返回变量和满足条件值的所有数据的捆绑(bindings)集;为
了种С 连接或更复杂的查询和转换,这项功能是必须的。不?,在需要变量的许多XML-
QL查询能够由XSL中的其它方法实现。
例如,考虑下面的使用变量的XML-QL查询:
WHERE
<book>$p</> IN "www.a.b.c/bib.xml",
<title>$t</>
<publisher><name>Addison-Wesley</></> IN $p
CONSTRUCT
<result>
<title>$t</>
WHERE <author>$a</> IN $p
CONSTRUCT <author>$a</>
</>
也可以用没有变量的XSL查询语句来实现同样的查询:
<xsl:for-each select = "book[publisher/name = "Addison-Wesley"]">
<result>
<title><xsl:value-of select="title" /></title>
<xsl:for-each select = "author">
<author><xsl:value-of /></author>
</xsl:for-each>
</result>
</xsl:for-each>
不过要建立连接(join)时变量就有作用了.要选出著于1995年之后的文章的作者,可以这
样行?
WHERE
<article>
<author>
<firstname>$f</>
<lastname>$l</>
</>
</> CONTENT_AS $a In "www.a.b.c./bib.xml"
<book year = $y>
<author>
<firstname>$f</>
<lastname>$l</>
</>
</> IN "www.a.b.c/bib.xml",
$y > 1995
CONSTRUCT
<article>$a</>
4.2. 对象标识符
对象标识符和Skolem一起保证了在输出中产生的元素唯一。另外,
对象标识符在建立图形时很有用.但是,当查询结果是“流”时对象标识符有一些问题,因
为怂市鞽ML-QL任何时候在图形的任何位置都可以产生一个元素。结果,不得不在图形
成为流之前将它缓存。这给Internet上的数据交换带来的严重的影响。
4.3. 多重XML源的数据集成
对象标识符在建立图形时很有用.但是,当查询结果是“流”时对象标识符有一些问题,因
为?
4.3. 多重XML源的数据集成
XML-QL允许每个WHERE语句从不同的文件查询数据.XSL目前只能对单独的XML文件进行查
询。
4.4. 数据库管理
查询语言的一个重要领域是数据库管理功能,包括创建、删除、更新和插入等操作。但
在XMML-QL和XSL中都没有相应的阐述。
5. 总结
查询XML中的问题与转换和构造结果的能力有密切的关系。XML-QL和XLS的相似之处意味
着两两者可以取长补短、互相促进。两者的相互协作能够为XML带来强大和通用的查询和
转换机制?
--
--
与其相濡以沫,不若相望于江湖。
http://10.23.31.91/
http://10.23.31.91:9999
※ 来源:.听涛站 cces.net.[FROM: 匿名天使的家]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:1.483毫秒