新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> Oracle, SQL Server与XML,XML在数据挖掘中的应用, PMML.
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - 高级XML应用『 XML 与 数据库 』 → XQL简介 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 11805 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: XQL简介 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     hsower 帅哥哟,离线,有人找我吗?狮子座1983-8-21
      
      
      威望:7
      等级:大四寒假(收到IBM的Offer啦)
      文章:72
      积分:1606
      门派:XML.ORG.CN
      注册:2004/4/3

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给hsower发送一个短消息 把hsower加入好友 查看hsower的个人资料 搜索hsower在『 XML 与 数据库 』的所有贴子 引用回复这个贴子 回复这个贴子 查看hsower的博客楼主
    发贴心情 XQL简介

    XML查询语言(XQL) 是用于定位和过滤XML文档中元素和文本的符号。它是XSL模式语法的自然扩展,为指向特定的元素或查找具有指定特征的节点提供了简明的可以理解的符号。XQL是最早由Microsoft,Texcel等公司提出的一种XML查询语言,前面我们已经提到,XSL模式语言提供了一种描述一类将需要处理的结点的好方法。实际上是通过XPath来实现的,当然XSL是说明性的,而非过程性的。但XSL也有许多不足之处,如不支持表达式,不能在结点间进行等值连接,对多个分散的XSL文档没有一个形式化的查询机制,没有支持聚集操作等。XQL则在XSL基础上提供了筛选操作,布尔操作,对结点集进行索引,并为查询、定位等提供了单一的语法形式。因而在一定意义上可将XQL看作XSL的超集。

      XQL主要针对解决以下四个问题域而提出:

      (1)在单个XML文档中进行查询。如在XML浏览器和编辑器中对所处理的XML文档进行查询。另外, Script也能利用这种性质给出一个非过程性的存取文档数据和结构的方法。

      (2)在XML文档集中进行查询。如在XML文档仓储(Repository)中进行查询。

      (3)能在XML文档间对结点进行定位。在HTML文档中,常常用HyperLink来定位其它文档,而在已有的XML中,链接形式更多样化,有TEL Links, HyTime Links,XML Linking,这些都允许链接有更大的灵活性。XQL则主要是想通过给出一已知位置的相对路径,或通过一绝对路径来在文档中定位任一结点。

      (4)以字符串语法形式表达,使其能在URL中应用在XSL模板中及其它地方应用。

      在介绍例子查询之前,对XQL中的一个重要的概念:Context 作一了解。Context即查询指定的一系列结点。XQL的基本语法模仿了URI(Unified Resource Identifier)目录导航语法,通过Context,XQL可以指定XQL查询是以XML树结构中哪一层开设作为查询范围(例如,从树的根结点或儿子结点)。XQL中以 / 表示根环境(Root context),以./ 表示当前环境(Current context)。

      XQL简单例子及分析

      举一个具体的例子来说明XML的应用,首先我们来建立一个如下的XML文档:

      <?xml version="1.0" encoding="GB2312" ?>
      <订单集合>
      <订单>
      <客户>
       美博进出口公司
      </客户>
      <注释>
       主要用来进出口各种办公用具:包括各种笔盒、本子、笔等等。
      </注释>
      <清单列表 n=2>
      <清单 数量=100 总金额="24.00">
      <产品 标记="STA" 名称="铅笔" 价格="0.24"/>
      </清单>
      <清单 数量=200 总金额="120.00">
       <产品 标记="STA" 名称="钢笔" 价格="0.60"/>
      </清单>
      </清单列表>
      </订单>
      <订单>
       <客户>
        金鼎进出口公司
       </客户>
      <注释>
       主要用来进出口各种化妆用具:包括各种眉笔、口红、护肤霜等等。
      </注释>
      <清单列表 n=2>
      <清单 数量=100 总金额="124.00">
      <产品 标记="BMA" 名称="眉笔" 价格="1.24"/>
      </清单>
      <清单 数量=200 总金额="720.00">
      <产品 标记="BMA" 名称="口红" 价格="3.60"/>
      </清单>
      </清单列表>
      </订单>
      </订单集合>

      下面我们来建立几个实际的查询例子,根据我们在XPath中的学习的经验可以知道,元素集合可以用路径操作符("/"或"//")指定。路径操作符将左部作为查询来源的参数集合,右部表示需要查询的元素。子女操作符("/")查询左部元素集合的直接子女集合,后代操作符("//")查询左部元素集合的任意后代集合。

      例子1:
      查询:  
      file://客户
      结果:
      <xql:result>
      <客户>
       美博进出口公司
      </客户>
      <客户>
       金鼎进出口公司
      </客户>
      </xql:result>

      我们知道,属性名称用"@"符号开头。XQL设计公平对待属性和子元素,在可能的情况下,两种类型的能力是等价的。注意:属性不能包含子元素。因此,在查询中属性不能使用路径操作符。否则将导致语法错误。同样地,属性天生没有顺序,索引不能用于属性。

      通过对集合增加过滤子句"[ ]",可以对任何集合进行限制和分枝。过滤是SQL中包含ANY语义的WHERE子句的模拟。过滤子句中包含了一个查询,称为子查询。子查询计算出布尔值,对集合中的每一个元素进行测试。集合中未通过子查询测试的元素将从结果集合中省略。为方便起见,如果集合放于过滤之中,或者如果集合中包含元素,则产生布尔值TRUE;如果集合为空,则产生FALSE。本质上,如author/degree的表达式表示集合到布尔值的转换函数,象如下虚构的"存在一个"方法:

      author[.there-exists-a(degree)]

      注意,在表达式的给定级别上可以出现任何数目的过滤,但空过滤是不允许的。同时需要注意的是,在XQL语言中,"=" 符号用于相等判断,"!="用于不相等判断。作为选择,$eq$和$ne$ 也可用于相等和不相等。单引号或双引号可以用于在表达式中分隔字符串,使得在脚本语言中创建或传递XQL变得更为容易。

      对于比较元素值而言,暗含了value()方法。也就是说,last-name < 'foo'实际上表示last-name!value() < foo。这有点象VB中对对象指定缺省的属性一样,比如一个Text对象Text1,Text1="中国"相当于Text1.text="中国"。

      请注意,过滤总是和上下文相关的。即:表达式book[author]表示对每一个找到的book元素,查看其是否包含author子元素。同样地,book[author = Bob ] 表示对每一个找到的book元素,查看其是否包含命名为author,且值为'Bob'的子元素。你也可以通过使用"."(句点) 查看当前上下文的值。例如,book[. ='古龙' ]表示对每一个找到的book元素,查看其值是否等于'古龙'。

      例子2:

      查询  
      file://产品[@标记='BMA']
      结果:
      <xql:result>
      <产品 标记="BMA" 名称="眉笔" 价格="1.24"/>
      <产品 标记="BMA" 名称="口红" 价格="3.60"/>
      </xql:result>

      例子3:  

       file://订单[客户='美博进出口公司']/产品
      结果:
      <xql:result>
       <产品 标记="STA" 名称="铅笔" 价格="0.24"/>
       <产品 标记="STA" 名称="钢笔" 价格="0.60"/>
      </xql:result>

      布尔表达式可以在子查询中使用。例如,可以使用布尔表达式查找特定值的节点集合,或者特定范围的节点集合。布尔表达式采取${op}$的形式,而{op}可以是任何{b|a}形式的表达式-即:操作符接收左值和右值参数,返回布尔结果。应用可以根据需要提供附加的布尔操作符。

      例子4:

      查询  

      file://产品[@标记='BMA'|@标记='STA']
      结果:
      <xql:result>
      <产品 标记="STA" 名称="铅笔" 价格="0.24"/>
      <产品 标记="STA" 名称="钢笔" 价格="0.60"/>
      <产品 标记="BMA" 名称="眉笔" 价格="1.24"/>
      <产品 标记="BMA" 名称="口红" 价格="3.60"/>
      </xql:result>

      这里,我们需要从上面的例子入手来描述XQL的语法特点,首先需要注意的是,XQL表达式返回的集合在定义范围内保持文档顺序,层次结构和标识。即:元素集合总是无重复地以文档顺序返回,属性集合将无重复地返回,但由于属性无顺序地定义,返回集合并不意味着顺序。


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/6/19 14:29:00
     
     GoogleAdSense狮子座1983-8-21
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XML 与 数据库 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/27 13:05:28

    本主题贴数2,分页: [1]

     *树形目录 (最近20个回帖) 顶端 
    主题:  XQL简介(6004字) - hsower,2004年6月19日
        回复:  果然 是简介受教了(19字) - kofuya,2005年3月21日

    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    78.125ms