万维网数据表示与查询处理语言

廖湖声 苏 航 刘 嘉

北京工业大学

万维网数据表示与查询处理语言

关键词:万维网 XML XML 查询语言

HTML HTML 是万维网

的基础,它定义了网页呈现的外观样式和语义内容,但语法规则不够严格。在早期的发展中,设计者更重视HTML 语言的外观呈现功能方面,导致不良设计的HTML 网页遍布Web 站点,制约了万维网的发展。为保证文档具有良好的结构,W3C 在推出HTML4.0标准后,转而制定了基于XML 的标准——扩展超文本

标识语言(XHTML1.0)。XHTML 与层叠式样式表(cascading style sheets, CSS)的结合实现了网页样式和内容的分离,有机地组合了网页代码。近年来,以SNS 社交网络、视频网站和电子商务等交互式站点为代表的Web2.0技术蓬勃发展,W3C 发布了HTML5标准草案,扩展了多种语法特征和应用程序接口,包括二维绘图(canvas API)、音频和视频(audio, video)标签、

地理信息(geolocation API)、跨文档通讯(communication API)、离线数据库(web storage API)以及编辑拖放等新功能。目前HTML5还在不断地演进,3D 图形、对等网络(P2P)和触摸事

件等内容即将被纳入到该标准中。

XML Web 时代,结构化

的关系数据库因其难以表示和查询网络上大量的复杂类型数据,而不能满足万维网上信息存储和交换的需求,非结构化数据的处理需求导致XML 的出现。XML 是由标准通用标示语言(standard generalized markup language, SGML)发展而来,1998年正式成为W3C 的推荐标准,即XML1.0。随后发布的XML1.1标准增加了命名空间功能,而XML2.0标准也在酝酿中。与HTML 不同,XML 允许设计者自由定义标签并且具有严格的语法规则。它采用树型的嵌套结构来组织由标签描述的数据内容,并且通过ID/IDREF 机制来描述引用关系,具备描述图数据的能力。由于XML 不再侧重数据的表现,而是更多地关注数据的存储和传输,因此逐渐演变为一种跨平台、可扩展的数据存储和交换格式。

在XML 的基础上,针对不同应用领域跨网络的数据共享和数据交换需求,已经出现了多种

随着互联网技术的发展,在超文本标记语言(HTML [1])和超文本传输协议(HTTP)基础上形成的万维网(World Wide Web)已经在全球范围得到广泛普及。万维网的发展需要计算机语言技术的支持。为应对网络中的各种数据组织、数据表示、数据查询与数据处理的特殊需求,人们开发了多种计算机语言,并且在万维网联盟(W3C)的组织和协调下,形成多种数据表示和查询处理的语言标准。同时,新型互联网的应用也在不断地要求计算机语言研究领域提供更加实用和强大的技术支持。

万维网的数据表示语言

针对万维网的信息发布和信息展示需求,HTML 为网络浏览器提供了标准的数据表示方法。随后,针对各种应用系统在网络中进行数据共享、数据交换和数据整合的需求,在W3C 的推动下,可扩展标记语言(XML [2])及其相关技术得到了发展。

领域专用的数据描述语言。这些语言中规定应用领域的命名空间,使用应用领域的专业词汇来设计一组XML标记。按照应用领域的信息组织,采用文档类型定义(document type defini-tions, DTD)或XML Schema来设计专用的数据模式,已经成为各个应用领域的信息描述标准。其中包括网页描述语言(the extensible hyper text markup lan-guage, XHTML)、Web服务描述语言(Web services description language, WSDL)、同步多媒体集成语言(synchronous multimedia integrate language, SMIL)、可缩放矢量图像标记语言(scalable vector graphics, SVG)、数学标记语言(mathematical markup language, MathML)、生物信息序列标记语言(bioinformatics se-quence markup language, BSML)、人力资源管理标记语言(human resource management markup language, HRMML)、音乐标记语言(musical markup language, MusicML)、天文数据标记语言(astronomical markup language, AML)、化学标记语言(chemical markup language, CML)等等。

由于XML具有数据表示灵活、可扩展性及互操作性强等诸多优点,在企业数据集成和互联网在线服务等领域得到了广泛的应用,已经成为数据交换的标准和SOA架构的基石。近年来,随着网络信息爆炸式的增长,如何解决海量XML数据的存储、

式语言的多样性给XML验证和

检验问题的解决带来了困难,业

界迫切需要找出解决该问题的有

效方法。鉴于XML树型结构的

特点,采用树文法和相应的树自

动机技术就能够解决XML模式

语言的分类和XML文档合法性

检查问题。按照其语言的描述能

力,XML模式语言的文法可以

分为本地树文法(local tree gram-

mars)、单类型树文法(single-type

tree grammars)和正规树文法

(regular tree grammars)。在本地

树文法中,任何相同标签的元素

都具有相同的类型定义,所描述

的语言以DTD为代表;单类型

树文法只要求同一双亲节点下的

相同标签元素应具有相同的类型

定义,所描述的语言以XSD为

代表;正规树文法进一步放宽了

约束限制,对于相同标签的元素

类型不附加任何限制,代表性语

言是RELAX NG[4]。根据XML

模式语言的分类可以构造相应

的树自动机来解决XML合法性

检查问题。三种树文法对XML

模式语言的约束依次递减,而

合法性检查算法的复杂度却依

次递增。

随着XML技术的不断发展,

XML模式语言也在逐渐演进。

2012年XSD1.1正式成为W3C

推荐标准,其主要特性是支持

XPath2.0标准;随着XML的广

泛应用,如何有效地设计XML

模式以满足海量数据的一致性要

求也成为学术界理论研究的前沿

课题。已有很多研究者提出诸如查询和可视化等问题亦成为学术

界和工业界关注的热点。2012年,

关注XML发展和研究的XML

Amsterdam会议的主题即为BIG

XML。与此同时,XML相关技

术也得到长足的发展,涵盖了数

据模式、信息安全、数据转换、

数据查询、数据处理、数据发布、

开发用组件和国际化等各个领域。

XML模式描述语言

DTD和XML Schema

 正如SQL数据库使用数据定

义语言(data definition language,

DDL)定义关系模式,XML文档

同样需要某种语言定义XML模

式。XML沿用SGML的模式定

义语言DTD,将文档内容组织

为层次结构并支持合法性检查。

但是DTD采用扩展的巴科斯范

式(extended backus naur form,

EBNF)定义XML模式,实现者

需要为DTD设计专门的解析器;

此外,DTD仅有10种内建类型

并且不支持自定义类型和命名空

间。W3C综合了DDML、SOX、

XML-Data和XDR等语言的特

点,推出XML Schema1.0[3](简

称XSD)作为XML模式描述语

言的推荐标准。XSD采用XML

语法,无需编写专门的解析器,

而且提供了更丰富的结构约束描

述功能,可以创建复杂的用户自

定义类型和规定元素的出现次

数,并且支持命名空间。

XML模式为XML文档的合

法性检查提供了依据。XML模

XML函数依赖、多值依赖和连接依赖等多种依赖关系及其相应的范式和模式规范化算法;扩展XML函数依赖等语义约束的描述功能也是XML模式语言的发展方向。

XML数据的查询和定位

XPath语言 为了规范XML数据的查询,W3C于1999年发布了XPath 1.0[5]。XPath 1.0已经成为了XSLT、XPointer、XForm等多种计算机语言的子集,成为定位XML数据的主要工具。如图1所示,XPath语言的语句是一个由符号“/”分割的若干个查询步组成的路径表达式,该符号表示针对上下文节点的一个查询请求。每个查询步中可以指定轴操作(axis)、节点检测和谓词。针对XML数据具有的树型表示,轴操作支持基于树节点结构关系的查找功能。节点检测包括标记名、属性和元素类型的检测。谓词包括位置谓词、存在谓词和数据值关系运算。路径表达式的查询语义基本上遵循了按照轴操作来调整上下文节点,根据标记名、属性名等节点检测标志和谓词来筛选节点的原则。同时,XPath 1.0采用节点集合作为数据模型,所有轴操作、节点检测和谓词作用于XML节点集合。

2007年发布的XPath 2.0版本是XQuery语言的子集,采用

用户编写的XPath路径表达式中

的Twig模式可能具有冗余的查

询请求。为了消除这种请求,人

们对Twig查询的最小化问题进

行了研究。查询最小化的实现也

涉及到查询包含问题和查询等价

问题。同时,用户提供的XPath

本身也可能存在矛盾,即满足性

问题。这些查询语言的静态分析

问题得到了广泛的关注,相关理

论分析和有效实现算法也都得到

了深入的探讨。此外,在给定了

XML模式的场景下(即给定了

XML类型系统),满足性问题、

包含问题、等价问题和最小化问

题都会受到XML模式中各种语

义的约束,甚至语言分类的影响。

XQuery语言

2007年W3C发布了XQuery

语言[6],将其作为XML查询语

言的标准。XQuery1.0为XML XPath 2.0 data model)。这种数

据模型以XML节点序列代替了

XML节点集合。XPath 2.0语言

还扩展了支持循环处理For表达

式,支持存在谓词和全称谓词的

量化表达式、序列运算表达式、

条件表达式。XPath 2.0语言允许

采用XML Schema来描述XML

数据模式,并且提供一套类型描

述方法,以及类型检查和类型转

换的描述功能。

XPath语言的实现技术 

XPath语言表示的数据查询中经

常包含了若干个祖先后代或双亲

子女关系的结构连接,如图1所

示。这些结构连接组成的树型查

询模式称为小枝模式(Twig模

式)。这种Twig查询模式不同于

关系数据查询,被认为是XML

查询的核心操作,其实现算法以

Twig模式和XML树的模式匹配

为核心,得到了广泛的分析和研

究,成为数据库研究领域的热点。

数据处理的全过程提供了完整的开发支持,包括基于XPath2.0语言的数据定位功能、基于函数式程序设计的数据加工功能和基于节点构造的XML文档构造功能。XQuery语言和SQL语言在关系数据库技术中的地位相似,被认为是XML数据的“SQL语言”,目前已经成为XML数据查询和数据处理的主流语言。新发布的XQuery3.0草案扩展了滑动窗口、动态函数调用以及异常捕获等功能。

如图2所示,FLWOR表达式是XQuery语言的核心。它利用XPath路径式来获得XML节点,进行筛选和排序,并且使用各种表达式进行数据加工,构造出新的XML节点和XML文档片段,从而将XML数据查询和数据加工结合在一起。显然,FLWOR表达式描述的多个结构连接也可以组成Twig查询模式。此外,XQuery语言还支持自定义函数的使用。这就使得开发者可以利用自定义函数来构造多个数据查询模块和数据加工模块,并且通过函数调用的组合将多个程序模块组合成完整的XQuery 应用程序。

XQuery语言实现技术 XQuery语言既是数据查询语言,

又是图灵完全的函数式程序设

计语言。其实现技术不仅涉及

查询优化、查询处理等数据库

技术,还涉及各种编译优化技

术。XQuery语言的现有实现技

术提供了各种专用的查询代数来

描述XML数据查询,以支持基

于集合的逻辑优化和查询计划的

实现。Twig查询等XML特有的

运算有时也被设计为查询代数算

子。从编译技术的角度来看,查

询代数就是一种中间语言。对于

用于实现XQuery语言的中间语

言,不仅需要支持各种查询优化,

也应该能够支持程序模块内部和

程序模块之间的代码优化。因此,

适用于XQuery语言的查询代数

研究有待得到深化。

XML数据更新功能 

XQuery语言本身提供XML文

档构造功能,但不支持XML数

据的更新,为此W3C制定了

XQuery Update Facility(XQUF)1.0

规范[7],作为XQuery数据更新

功能的标准发布。该规范扩展了

用于XML数据插入、删除和修

改的12种更新表达式和6种更

新函数。在语义方面,该规范考

虑到数据更新是基于副作用的计

算,有可能制约函数式程序的求

值顺序,因而其设计采用了一种

快照语义(snapshot)。

按照这种快照语义,一个

XQuery程序通常被看作是一个

快照。对于快照内部使用的更新

表达式,在表达式求值阶段中的

更新操作都被推迟,保留在一个

待更新操作列表中,直到整个快

照被执行结束后,再按照XQUF

规范中规定的顺序来执行这些更

新操作。按照这种快照语义,每

个XQuery表达式的求值结果是

一个由计算结果值和待更新操作

列表组成的二元组。快照语义仍

然保证了XQuery表达式的求值

结果和求值顺序无关。

XML数据处理及其

支撑语言

XSLT针对样式表应用需

求,W3C发展了可扩展样式表

语言[8](extensible stylesheet lan-

guage, XSL)。XSL由XSLT(XSL-

Transformations)和XSL-FO(XSL-

Formatting Object)组成。前者

通过描述XML文档样式来定制

格式转换,可以将一种格式的

XML文档转换为另一种符合用

户所需格式的树结构文档;后者

用于描述页面布局和格式,以适

用于向屏幕、纸张或者其他媒

介输出XML文档。XSLT1.0和

XSLT2.0分别于1999年和2007

年发布。XSLT3.0草案也已于

2012年发布。XSLT采用模板驱

动方式,规定了当某个输入文档

中指定的XML节点被匹配时所

应用的转换规则。每个转换规则

由模式和模板组成:模式用于

与输入XML数据匹配,使用

XPath在XML文档中进行导航

和定位XML节点;模板可以

根据匹配的节点被实例化为树。

这些转换规则用于控制对输入

 for $x in doc("books.xml")/bookstore/ book

 where $x/price>30

 order by $x/title

 return

{ $x/title, $x/author }

图2 XQuery程序示例

的XML元素的转换,并向输出文件中添加、移除元素和属性,重新排列元素,执行测试并决定隐藏或显示元素等。

面向流数据的XML查询 随着传感器网络、物联网等应用领域对流数据的处理提出了越来越高的要求,基于XPath的流数据查询技术得到重视。早期流数据查询处理采用基于XPath查询步构造自动机的方法,开发出下推转换器(pushdown transducer)技术。虽然这些方法不能覆盖XPath的所有功能,但足以有效地处理各种实用XPath查询。由于XML数据可抽象为一种嵌套字(nested words),基于可视式下推自动机(visible pushdown au-tomata, VPA)的查询自动机理论足以支持一元二阶逻辑(monadic second logic)表示的查询。由于XPath语言的核心功能可以表示为嵌套字上的一阶逻辑,基于VPA的查询算法足以支撑更强大的XML查询。同时,流数据应用领域中相当多的数据查询模式可抽象为一种复杂事件处理机制(complex event processing),适用于直接描述诸如股票变化趋势等复杂的应用需求。近来出现的XSeq语言专用于描述针对XML 流数据的复杂事件处理。该语言同样采用了XPath路径表达式,并且扩展了Kleen闭包等查询功能。借助于Kleen闭包和兄弟轴等功能,XSeq语言能够以流模式匹配的方式来描述查询模式,具有强大的抽象描述能力。同时,XSeq语言的实现采用了基

于VPA的查询自动机技术,性

能远高于基于其他XML查询语

言的各种流数据查询引擎。

过程型程序设计功能 虽

然XQuery是一种图灵完全的函

数式语言,由于未提供赋值语

句功能,XQuery语言仍然难以

描述不少常见的算法,开发者

往往需要将XQuery代码嵌入到

外部语言中实现。为克服这些困

难,W3C提出了XQuery Script-

ing Extension (XQSX)1.0草案[9]。

该草案扩展了一种顺序执行的

程序模块(顺序表达式),可以

包含赋值表达式、更新表达式、

条件表达式和函数调用。此外,

XQSX规范还提供了循环表达

式、出口表达式和过程化自定义

函数等语言功能。

对于XQSX规范所提供的扩

展功能,由于导入了各种基于副

作用的计算功能,XQSX规范同

样采用了快照语义,但是针对不

同的表达式又规定了不同的快照

范围,约定顺序表达式的每个成

员、每个赋值号右侧表达式、每

个循环条件表达式等特定的表达

式都是独立的快照。按照快照语

义的约定,每个快照结束时执行

所有待更新操作,从而使数据更

新和赋值的结果能够被后续的程

序所访问。按照XQSX规范,针

对不同表达式的快照语义规定了

程序顺序执行次序,从而支持了

过程化算法的程序描述,使得这

种XQuery程序能够有效地应用

到更多的场景。

XProc 互联网上众多的

XML数据应用使各种XML处

理工具得到快速发展,进而带

来了采用软件组装方式开发

XML分布式处理软件的需求。

因此,W3C组织了XProc语言[10]

(an XML pipline language)的研

究,于2010年发布了XProc语

言规范。

在XProc语言中,管道由

若干作用于XML文档上的一系

列简单互连的操作步骤组成,并

构造类似于条件分支、迭代和

异常处理等标记来控制这些步

骤的执行,包括原子步骤、复

合步骤和多容器步骤。原子步骤

对XML文档进行特定的操作,

如:XSLT转换;复合步骤包含

由小步骤组成的子管道,如:

iteration、group等用于迭代控制

和分组;多容器步骤包含多个

可选择的子管道,如cho/when/

otherwise、try/catch等用于子管

道选择控制和异常处理。标准的

步骤库提供了XSLT2、XQuery、

XInclude,XML Schema合法性

检查和XML更新等操作,方便

XProc来描述复杂的XML处理

过程。

综上所述,计算机语言随着

万维网应用软件开发的需求得以

不断发展,更加适应分布式计算

环境下的软件集成、流数据处理

和数据集成等软件,并能提供更

强大的开发工具。■

参考文献

[1] Hyper Text Markup Language

(HTML). https://www.360docs.net/doc/145479608.html,/TR/html/[2] Extensible markup language

(XML). https://www.360docs.net/doc/145479608.html,/XML/[3] XML Schema (XSD). http://

https://www.360docs.net/doc/145479608.html,/XML/Schema.html [4] RELAX NG. https://www.360docs.net/doc/145479608.html,/[5] XPath 1.0: XML path language

(XPath). https://www.360docs.net/doc/145479608.html,/TR/XPath/[6] XQuery 1.0: An XML query

language. https://www.360docs.net/doc/145479608.html,/TR/xquery/[7] XQuery update facility 1.0.

https://www.360docs.net/doc/145479608.html,/TR/xquery-update-10/[8] The Extensible Stylesheet

Language Family (XSL). https://www.360docs.net/doc/145479608.html,/Style/XSL/ [9] XQuery scripting extension 1.0.

https://www.360docs.net/doc/145479608.html,/TR/xquery-sz-10/[10]XProc: An XML pipeline

language. https://www.360docs.net/doc/145479608.html,/

TR/xproc/

苏 航

CCF会员。北京工业大学讲师。主要研究方向为程序理论、编译技术和XML数据管理等。

suhang@https://www.360docs.net/doc/145479608.html,

相关主题
相关文档
最新文档