2024年5月30日发(作者:养听荷)
倌阳师范学院学报:自然科学版
第23卷第2期2010年4月
Journal of Xinyang Normal University
Natural Science Edition Vo1.23 No.2 Apr。2010
DOI:10.3969/j.issn.1003-0972.2010.02.033
扩展XML查询实现GML查询
陈淑婷 ,李云浩
(江西理工大学8.建筑与测绘工程学院.b.信息工程学院,江西赣州341000)
摘要:GML(地理标记语言)是基于XML发展而来的行业标记语言,具有XML的所有特征,同时还具有
XML没有的空间特征。目前,对XML的查询有比较成熟壹询规范--Xquery,扩展XML查询是实现GML查询的
最佳途径,在分析现有开放源码XML查询引擎的基础上,选择XQEnsine进行扩展,实现了对GML空间数据的
本原查询。
关奠词:XML/GML;空间扩展;本原查询
中圈分类号:P208 文献标志码:A 文章编号:1003-0972(2010)02-0288-04
Further Development of XML Query to Realise GML Query
CHEN Shu-ring‘.LI Yun-hao。
(a,Faculty of Architectural and Survey Engineering;h.Faculty of Information Engineering。Jiangxi
University of Science and Technology。Ganzhou 341000,China)
Abstract:GML(Geography Markup Language)is the professional markup language based on the further develop・
ment of XML.It is not only featured with al1 the distinctive characteristics of XML.but also with its own unique char-
acteristic.At present,Xquery serves as the mature system for XML query.By analysing the open source of XML query
en ̄ne,further extending XQ Engine and developing XML query,the GML query can be realized eventually.
Key words:XML/GML;spatial expansion;primitive queries
O 引言
GML是由OGC推出地理标记语育(Geography
Markup Language,GML)实施规范.目前,GML已经
成为事实上的空间数据编码、传输、存储、发布的国
际标准.随着GML数据不断涌现,对GML数据的
管理与维护越来越显得紧迫,如何快速地从大量
GML数据中检索出所需地理信息数据,这是本文
所要解决的问题.由于GML是从XML扩展而来,
这样可以借鉴对XML的查询来处理对GML的查
询,但是XML不具有GML所具有的空问特征。所
以需要对XML查询语言扩展空间功能,实现对
GML数据的空间查询和空间运算.
XQuery草案,目前最新XQuery草案是2005年2
月11目的版本,它还在不断的修订和完善之中.目
前基于XQuery的开源XML查询引擎很多,通过对
这些开源引擎的分析,本研究选择XQEngine进行
扩展来实现对GML的查询.
XQEngine是一个使用XQuery规范的免费的
开源的Java组件用来查询XML文档的XML查询
引擎.这个引擎有两个主要优点:1)有一个简单易
行的API,它可以很方便地嵌入到终端用户应用程
序中;2)可以对它进行扩充,加入用户化功能,实
现其他用途.正因这两点,本文采用了XQEngine作
为基础平台来实现GML查询引擎.下面就
1 开源XML查询引擎分析
为了规范XML查询语言,W3C于1999年9
月正式成立了XQuery工作组,先后颁布了多个
XQEngine的应用和扩展进行分析:
(1)XQEngine嵌入式开发
创建一个Java文档,命名为testxqengine.java,
分别引入相应开发包,操作如下:
收稿日期:2009・12-30;修订日期:2010-01-25;’.通讯联系人.E-mail:1_yh8556@163.COnr
基金项目:江西省教育厅科技研究项目(GIJ09251)
作者简介:陈淑婷(1978-).女,河南商丘人,硕士。讲师,主要从事GML数据存储与索引的研究
288・
・
陈淑婷,等:扩展XML查询实现GML查询
impo ̄com.fatdog.xmlEngine.XQEngine;
impo ̄com.fatdog.xmlEngine.ResultList;
import org.xm1.sax.helpers.XMLReaderFacto・
ry;
impo ̄java.io.PrintWriter;
public class testxqengine{
public static void main(String[]args)
{XQEngine myengine=new XQEngine();//对
XQEngine实例化
ny{//设置XQEngine的解析器为xerces解
析器
myen ̄ne.setXMLReader(XMLReaderFactory.
createXMLReader(”org.apache.xerces.parsers.
SAXParser”));
//输人要查询的XML文档名(包含路径)
myengine.setDocument(XMLFilename);
//输入按照XQuery规范写的查询语文件名
(包含路径)
//并返回查询结果
ResultList rl=myengine.setQueryFromFile(XM-
LQueryFilename);
//这个true是让输出的xml符合一般格式的
System.out.println(r1.emitXml(true));
l
catch(Exception e)
{e.printStackTrace();}
}
{
(2)XQEngine用户扩展
主要扩展工作是在XQEngine类FandO.java
中进行.具体实现以空间交叉查询函数intersection
为例,过程如下:
①创建函数
ResuhList intersection(SimpleNode argl,Sier—
pleNode ars2)
throws InvalidQueryException
{Geometry gl;Geometry ;
Geometry g3;
g3。g1.intersection(s2);
return
ResuhList(m—treeWalker).newString(”GA in-
tersection GB:”+g3.toString());}
②注册函数
在Fand0.java的dispatchNamedFunction方法
中注册函数.
2 XML查询扩展内容
本文主要针对OGC简单要素规范SFS(Simple
Features Speciifcation For SQL)中定义的基本的空
间数据类型(Spatial Data Types)和空间操作算子
(Spatila Operators)以及GML3.X对XQuery进行了
扩展.
2.1 空间数据类型的扩展
OGC的SFS中定义的基本空间数据类型包
括:Point、LineString、LinearRing、Polygon、Geometry—
Collection(MultiPoint、MuhiLineString、MuhiPoly—
gon).SFS中的空间数据类型只限于2D、线性几何
对象(Linear eGometries),GML 2中的空间数据类
型与SFS中定义的数据类型一致,但GML 3.x中
的空间数据类型已超出SFS中定义的数据类型,除
了简单要素之外,还支持3D、非线性几何对象
(Nonlinear eGometries),需要对SFs中的空间数据
类型进行扩展,使其支持GMI_3.x.
2.2空间操作算子的扩展
空间操作算子的扩展包括:空间关系运算和空
间分析操作.空间关系运算包括:Equals、Disjoint、
Intersects Touches、Crosses,Within、Contains1 con—
tains、within、Overlaps、Relate;空间分析操作包括:
Distance、Buffer、ConvexHull、Intersection、Union、
Difference、SymDifference.
2.3空间索引扩展
引入空间索引主要是为了提高查询速度,空问
索引采用R-Tree索引,空间索引和GML文档独立
存储,通过唯一标识符相互联系.实现步骤:①利用
SAX遍历GML文档获取每个要素的外包矩形,重
新设置要素标识FID;②调用R-Tree索引算法,生
成R.Tree索引,索引ID的值和FID对应,这样就
可以在查询的时候将索引定位到对应要素;③将生
成的索引存储到磁盘空间,这样可以避免每次查询
相同文档都要重新生成索引.
2.4空间扩展的具体实现
首先对JTS提供的空间数据类型和空间操作
算子进行扩展,使其支持GML 3.x中定义的非线
性几何类型;然后对XQEngine扩展空间数据类型
和空间操作算子,使其支持GML空间数据的本原
查询.
・
289・
第23卷第2期 信阳师范学院学报:自然科学版hap://journa1.xyte.edu.cn 2010年4月
3基于XML查询的GML查询实现
3.1 GML查询流程
GML本原查询系统流程如图1所示,GML查
询引擎GMLQEngine主要对XQEngine查询引擎添
加GML查询语句解析器、XML/GML文档解析器、
R—Tree索引和空间扩展.一个完整的GML本原查
询流程是:
①首先将一个GML查询以文本的形式传送到
查询引擎的查询解析器,经处理从输入流获得记号
序列;
@GML文档解析器对GML文档进行解析;
③对GML文档建立空间索引,并存储为独立
文件(如果已经建立索引,则只需装载索引);
④然后经语法分析器处理生成查询语法树,判
断该查询是否存在语义错误,如果存在这样的错
误,则系统报告错误,查询不再往下执行;
⑤对查询计划进行求值和各种空间运算;
⑥最后通过查询输出构造器输出查询结果并
以文本显示.
0
霍
作霸夺问搽l
:子I
匝 G搬类型IMI 数l
I
MI
审问扩展
,
杏询gj擎
图1 GML查询系统流程
Fig.1 Flow of GML query system
3.2 GML查询具体实现
GML查询的实现主要内容包括5个方面:①
查询解析器的开发;②GML文档解析器的开发;③
空间索引;④空间扩展;⑤查询结果的处理.查询系
统界面如图2所示,该系统将所有功能都集成到一
个界面.
(1)查询解析器的开发
依据JavaCC的文法规则,本文创建了GML查
询的语法描述文件GMLXQueryParser.java,解析器
名为GMLXQueryParser.接下来使用JavaCC编译语
.
290-
法描述文件,自动生成GML查询解析器.JavaCC
在编译过程中,如果没有发现文法错误,则生成相
应的Java源程序,GML查询解析器的7个Java源
程序是:GMLXQueryParser.java——解析类;GMLX—
QueryParserTokenManager.java——记号管理类;
GMLXQueryParserConstants.java——记号与其代表
的符号名称联系接口.SimpleCharStream.javr
代表输入字符流;Token.java——代表输入的记号
(token);TokenMgrError.java——记号处理错误;
ParseException.java——语法解析错误.
图2 GML查询系统
Fig.2 GML query system
其中前3个是根据用户定义的解析器名生成
的Java类,后4个是公共的Java类.JavaCC的输入
为语法描述文件(GMLXQueryParser.java)、输出为
查询解析器相关的7个Java源文件.
查询解析器生成以后,在GML查询引擎GM—
LQEngine中可以通过以下方式:
GMLXQueryParser parser = new GMLX—
QueryParser(flew StringReader(query));
调用,其中query为GMLXQuery查询语句字符流.
GML查询解析器对查询语句query进行词法、语法
分析,若查询语句巾存在错误,则报告错误类型及
有关信息.
(2)GML文档解析器的开发
在SAX基础上设计了GMLSAXHandler.java
解析器,能够完成对XML/GML数据的解析工作.
通过继承org.xm1.sax.ContentHandler接口,对其
提供的儿个主要构造进行扩展实现.
GMLSAXHandIer.iava类主要对以下构造进行
扩展:( ̄)startDocument():开始解析文档②startEle.
merit(…):开始解析元素;③endEtement(・):元素
解析结束;( ̄)characters(・・):获取元素内容;⑤end-
Document():文档解析结束.
陈淑婷,等:扩展XML查洵实现GML查询
(3)空间扩展
where Intersection(¥c,”61850 52150 61950
52350”)and¥c//type=”Land”
return¥C
具体见3.2 GML查询语言的空间扩展.
(4)空间索引
具体见3.2 GML查询语言的空间索引扩展.
(5)查询结果的处理
对查询结果的处理提供了两种方式:GML格
式和SVG格式.
实验中的每个查询对每个文档大小都运行l0
次,且分别进行了属性查询实验、空间查询实验及
属性和空间相结合的查询实验,所有实验都得到了
预期结果,实验结果如表1至表5所示.从查询结
果可以看出查询时间随文件增大而增加,随查询结
4 GML查询测试
本文对1O个1~50 MB不等的GML文档进行
果个数增加而增加;同时,要素的复杂程度也会影
响查询时间.这些结果表明了本文提出的基于
XQEngine来开发GML本原查询系统是可行的,同
时也显示出了本文开发的GML本原查询系统的稳
定性良好.
各种查询测试,查询语句的写法,以空间交叉和属
性混合查询为例:
for¥C in doc(,e:\test\test.xml 3//Feature.
Member
表1属性查询测试
Tab.1 Attribute query test
文档大小/MB
O.5
l
1.5
查询时间/ms
63
78
140
结果个数
91
303
554
文档大sJ ̄/M
10
15
20
查询时间/ms
5 266
1O 831
22 492
结果个数
5 561
8 31l
l1 974
2.5
5
39O
l 500
1 131
2 664
25
5O
内存溢出错误
内存溢出错误
表2包含查询测试
Tab.2 Contain query test
文档大tJ ̄/MB
0.5
l
1.5
2.5
查询时问/ms
3O
40
55
7O
结果个数
23
26
26
36
文档大4,/M
10
15
20
25
查询时间/ms
1l0
175
222
243
结果个数
36
36
29
29
5 90 28 50 271 87
表3相交查询测试
Tab.3 Intersection query test
文档大小/MB 查询时问/ms 候选几何对象个数最终结果个数 文档大小/MB 查询U ̄1q/.m ̄ 候选几何对象个数最终结果个数
O.5
1
1.5
2.5
5
160
175
246
280
320
26
52
43
8O
67
9
9
19
12
22
10
15
20
25
50
44l
561
850
962
1 352
77
96
109
l09
109
64
25
l05
105
27
表4 k-邻近查询测试
Tab.4 K-nearest query test
文档大d ̄/MB
0.5
l
1.5
2.5
查询时间/ms
141
140
172
187
结果个数
20
20
20
20
文档大dx/M
10
15
20
25
查询时间/ms
218
219
218
234
结果个数
2O
20
2O
20
5 203 20 50 282 20
(下转第303页)
・
291・
周增国,等:基于ANSYS的大跨度拱桥拱肋吊装过程稳定性分析
(2)通过设置下拉索或通过多点下锚张拉控
线张拉的松紧程度不同,有可能使某些扣索的自振
制拱肋(箱)的纵向稳定.下拉索布置如考虑到拱 频率恰巧与风的脉动频率相同而发生风振现象.如
肋接头可能发生骨架变形,所以可在其下方设置拉
果有多根扣索发生风振现象,可能会对拱肋的稳定
索并通过改变拉索索力的大小来控制拱轴的变形. 产生不利的影啊所以应采取安装临时减振器的措
(3)安装临时减振器.在安装钢绞线扣索时, 施,以消除扣索的风振现象.
由于接线器的安装误差,导致其中一根或几根钢绞
参考文献:
[1]孟凡强.拱段吊装过程中的索力优化及拱肋稳定性研究[D].武汉:武汉理工大学,2008.
[2]项海帆,刘光栋.拱结构稳定与振动[M].北京:人民交通出版社,1991.
[3]庞大彬.大跨度钢筋混凝土箱型拱桥缆索吊装施工技术研究[J].铁道建筑技术,2003(3):303-304.
[4]席红星.150 m钢筋混凝土拱桥单箱悬臂吊装施工技术[J].铁道建筑,2002(4):9-11.
[5]李国豪.桥梁结构稳定与振动[M].北京:中国铁道出版社,1992.
[6]叶裕明,刘春山,沈火明,等.ANSYS在土木工程中的应用实例[M].北京:中国水利水电出版社,2005:149-214
[7]钱莲萍,项海帆.空间拱桥结构侧倾稳定性的实用计算[J].同济大学学报,1989,17(2):161・172.
[8]赵雷, 一之.大跨度拱桥施工稳定性的时变力学分析[J].铁道学报,2000,22(5):55-59.
责任编辑:郭红建
(上接第291页)
表5属性和空间联合查询测试
Tab.5 Attribute and spatial integration query test
文档大dx/MB 查询时间/ms 候选几何对象个数最终结果个数 文档大/b/MB 查询时IWms 候选几何对象个数最终结果个数
O.5 531 26 6 10 1 375 43 11
1 563 52 6 15 1 422 43 l1
1.5 1 032 43 11 2O 1 719 44 12
2.5 l o47 43 ll 25 3 062 l25 61
5 1 172 43 11 50 4 575 l72 35
5 结论
果表明了本文提出的基于XML查询扩展思路是可
本文在开源软件XML查询引擎XQEngine的基
行的,同时将空问索引技术作为查询的空间过滤条
础上扩充了GML空间数据类型、空间操作算子和空
件,大大缩减了查询时问,提高了查询效率.
间索引,实现了对GML的查询,从研究查询实验结
参考文献:
[1]高军,杨冬青,唐世渭,等.基于树自动机的XPath在XML数据流上的高效执行[J].软件学报,2005,16(2):223 ̄32.
[2]於荔,鲍培明,张书 .GML空间数据的对象化存储研究[J].南京师范大学学报:工程技术版,2006,6(1):67-71.
[3]兰小机,间国年,刘德儿,等.基于XQuery的GML查询语言研究[J].测绘科学,2005,30(6):99—102.
[4]Fegaras L.The ofSAX[c]//Proc ofthe1 stinternationalworkshop onXQueryimplementation,experience and perspectives.Paris:Maison
de al Chimie,2004:61-66.
[5]Li X G,Agrawal G.Effwient evaluation ofXQuery over streaming data[c]//Pmc ofthe 31 st VLDB Conference Trondheim,Nor,say,2005:
265.276.
[6]Bose S,FegarasI .Data streammanagementfor historicalXML data[c]//Proc of SIGMOD,NewYork:ACM Press,2004:239 ̄50.
[7]Guan J H_GQL:extending XQuery to query GML documents[J].Geospatial Information Science(S1009 ̄020),2006,9(2):118・126.
责任编辑:郭红建
・
303・
t
2024年5月30日发(作者:养听荷)
倌阳师范学院学报:自然科学版
第23卷第2期2010年4月
Journal of Xinyang Normal University
Natural Science Edition Vo1.23 No.2 Apr。2010
DOI:10.3969/j.issn.1003-0972.2010.02.033
扩展XML查询实现GML查询
陈淑婷 ,李云浩
(江西理工大学8.建筑与测绘工程学院.b.信息工程学院,江西赣州341000)
摘要:GML(地理标记语言)是基于XML发展而来的行业标记语言,具有XML的所有特征,同时还具有
XML没有的空间特征。目前,对XML的查询有比较成熟壹询规范--Xquery,扩展XML查询是实现GML查询的
最佳途径,在分析现有开放源码XML查询引擎的基础上,选择XQEnsine进行扩展,实现了对GML空间数据的
本原查询。
关奠词:XML/GML;空间扩展;本原查询
中圈分类号:P208 文献标志码:A 文章编号:1003-0972(2010)02-0288-04
Further Development of XML Query to Realise GML Query
CHEN Shu-ring‘.LI Yun-hao。
(a,Faculty of Architectural and Survey Engineering;h.Faculty of Information Engineering。Jiangxi
University of Science and Technology。Ganzhou 341000,China)
Abstract:GML(Geography Markup Language)is the professional markup language based on the further develop・
ment of XML.It is not only featured with al1 the distinctive characteristics of XML.but also with its own unique char-
acteristic.At present,Xquery serves as the mature system for XML query.By analysing the open source of XML query
en ̄ne,further extending XQ Engine and developing XML query,the GML query can be realized eventually.
Key words:XML/GML;spatial expansion;primitive queries
O 引言
GML是由OGC推出地理标记语育(Geography
Markup Language,GML)实施规范.目前,GML已经
成为事实上的空间数据编码、传输、存储、发布的国
际标准.随着GML数据不断涌现,对GML数据的
管理与维护越来越显得紧迫,如何快速地从大量
GML数据中检索出所需地理信息数据,这是本文
所要解决的问题.由于GML是从XML扩展而来,
这样可以借鉴对XML的查询来处理对GML的查
询,但是XML不具有GML所具有的空问特征。所
以需要对XML查询语言扩展空间功能,实现对
GML数据的空间查询和空间运算.
XQuery草案,目前最新XQuery草案是2005年2
月11目的版本,它还在不断的修订和完善之中.目
前基于XQuery的开源XML查询引擎很多,通过对
这些开源引擎的分析,本研究选择XQEngine进行
扩展来实现对GML的查询.
XQEngine是一个使用XQuery规范的免费的
开源的Java组件用来查询XML文档的XML查询
引擎.这个引擎有两个主要优点:1)有一个简单易
行的API,它可以很方便地嵌入到终端用户应用程
序中;2)可以对它进行扩充,加入用户化功能,实
现其他用途.正因这两点,本文采用了XQEngine作
为基础平台来实现GML查询引擎.下面就
1 开源XML查询引擎分析
为了规范XML查询语言,W3C于1999年9
月正式成立了XQuery工作组,先后颁布了多个
XQEngine的应用和扩展进行分析:
(1)XQEngine嵌入式开发
创建一个Java文档,命名为testxqengine.java,
分别引入相应开发包,操作如下:
收稿日期:2009・12-30;修订日期:2010-01-25;’.通讯联系人.E-mail:1_yh8556@163.COnr
基金项目:江西省教育厅科技研究项目(GIJ09251)
作者简介:陈淑婷(1978-).女,河南商丘人,硕士。讲师,主要从事GML数据存储与索引的研究
288・
・
陈淑婷,等:扩展XML查询实现GML查询
impo ̄com.fatdog.xmlEngine.XQEngine;
impo ̄com.fatdog.xmlEngine.ResultList;
import org.xm1.sax.helpers.XMLReaderFacto・
ry;
impo ̄java.io.PrintWriter;
public class testxqengine{
public static void main(String[]args)
{XQEngine myengine=new XQEngine();//对
XQEngine实例化
ny{//设置XQEngine的解析器为xerces解
析器
myen ̄ne.setXMLReader(XMLReaderFactory.
createXMLReader(”org.apache.xerces.parsers.
SAXParser”));
//输人要查询的XML文档名(包含路径)
myengine.setDocument(XMLFilename);
//输入按照XQuery规范写的查询语文件名
(包含路径)
//并返回查询结果
ResultList rl=myengine.setQueryFromFile(XM-
LQueryFilename);
//这个true是让输出的xml符合一般格式的
System.out.println(r1.emitXml(true));
l
catch(Exception e)
{e.printStackTrace();}
}
{
(2)XQEngine用户扩展
主要扩展工作是在XQEngine类FandO.java
中进行.具体实现以空间交叉查询函数intersection
为例,过程如下:
①创建函数
ResuhList intersection(SimpleNode argl,Sier—
pleNode ars2)
throws InvalidQueryException
{Geometry gl;Geometry ;
Geometry g3;
g3。g1.intersection(s2);
return
ResuhList(m—treeWalker).newString(”GA in-
tersection GB:”+g3.toString());}
②注册函数
在Fand0.java的dispatchNamedFunction方法
中注册函数.
2 XML查询扩展内容
本文主要针对OGC简单要素规范SFS(Simple
Features Speciifcation For SQL)中定义的基本的空
间数据类型(Spatial Data Types)和空间操作算子
(Spatila Operators)以及GML3.X对XQuery进行了
扩展.
2.1 空间数据类型的扩展
OGC的SFS中定义的基本空间数据类型包
括:Point、LineString、LinearRing、Polygon、Geometry—
Collection(MultiPoint、MuhiLineString、MuhiPoly—
gon).SFS中的空间数据类型只限于2D、线性几何
对象(Linear eGometries),GML 2中的空间数据类
型与SFS中定义的数据类型一致,但GML 3.x中
的空间数据类型已超出SFS中定义的数据类型,除
了简单要素之外,还支持3D、非线性几何对象
(Nonlinear eGometries),需要对SFs中的空间数据
类型进行扩展,使其支持GMI_3.x.
2.2空间操作算子的扩展
空间操作算子的扩展包括:空间关系运算和空
间分析操作.空间关系运算包括:Equals、Disjoint、
Intersects Touches、Crosses,Within、Contains1 con—
tains、within、Overlaps、Relate;空间分析操作包括:
Distance、Buffer、ConvexHull、Intersection、Union、
Difference、SymDifference.
2.3空间索引扩展
引入空间索引主要是为了提高查询速度,空问
索引采用R-Tree索引,空间索引和GML文档独立
存储,通过唯一标识符相互联系.实现步骤:①利用
SAX遍历GML文档获取每个要素的外包矩形,重
新设置要素标识FID;②调用R-Tree索引算法,生
成R.Tree索引,索引ID的值和FID对应,这样就
可以在查询的时候将索引定位到对应要素;③将生
成的索引存储到磁盘空间,这样可以避免每次查询
相同文档都要重新生成索引.
2.4空间扩展的具体实现
首先对JTS提供的空间数据类型和空间操作
算子进行扩展,使其支持GML 3.x中定义的非线
性几何类型;然后对XQEngine扩展空间数据类型
和空间操作算子,使其支持GML空间数据的本原
查询.
・
289・
第23卷第2期 信阳师范学院学报:自然科学版hap://journa1.xyte.edu.cn 2010年4月
3基于XML查询的GML查询实现
3.1 GML查询流程
GML本原查询系统流程如图1所示,GML查
询引擎GMLQEngine主要对XQEngine查询引擎添
加GML查询语句解析器、XML/GML文档解析器、
R—Tree索引和空间扩展.一个完整的GML本原查
询流程是:
①首先将一个GML查询以文本的形式传送到
查询引擎的查询解析器,经处理从输入流获得记号
序列;
@GML文档解析器对GML文档进行解析;
③对GML文档建立空间索引,并存储为独立
文件(如果已经建立索引,则只需装载索引);
④然后经语法分析器处理生成查询语法树,判
断该查询是否存在语义错误,如果存在这样的错
误,则系统报告错误,查询不再往下执行;
⑤对查询计划进行求值和各种空间运算;
⑥最后通过查询输出构造器输出查询结果并
以文本显示.
0
霍
作霸夺问搽l
:子I
匝 G搬类型IMI 数l
I
MI
审问扩展
,
杏询gj擎
图1 GML查询系统流程
Fig.1 Flow of GML query system
3.2 GML查询具体实现
GML查询的实现主要内容包括5个方面:①
查询解析器的开发;②GML文档解析器的开发;③
空间索引;④空间扩展;⑤查询结果的处理.查询系
统界面如图2所示,该系统将所有功能都集成到一
个界面.
(1)查询解析器的开发
依据JavaCC的文法规则,本文创建了GML查
询的语法描述文件GMLXQueryParser.java,解析器
名为GMLXQueryParser.接下来使用JavaCC编译语
.
290-
法描述文件,自动生成GML查询解析器.JavaCC
在编译过程中,如果没有发现文法错误,则生成相
应的Java源程序,GML查询解析器的7个Java源
程序是:GMLXQueryParser.java——解析类;GMLX—
QueryParserTokenManager.java——记号管理类;
GMLXQueryParserConstants.java——记号与其代表
的符号名称联系接口.SimpleCharStream.javr
代表输入字符流;Token.java——代表输入的记号
(token);TokenMgrError.java——记号处理错误;
ParseException.java——语法解析错误.
图2 GML查询系统
Fig.2 GML query system
其中前3个是根据用户定义的解析器名生成
的Java类,后4个是公共的Java类.JavaCC的输入
为语法描述文件(GMLXQueryParser.java)、输出为
查询解析器相关的7个Java源文件.
查询解析器生成以后,在GML查询引擎GM—
LQEngine中可以通过以下方式:
GMLXQueryParser parser = new GMLX—
QueryParser(flew StringReader(query));
调用,其中query为GMLXQuery查询语句字符流.
GML查询解析器对查询语句query进行词法、语法
分析,若查询语句巾存在错误,则报告错误类型及
有关信息.
(2)GML文档解析器的开发
在SAX基础上设计了GMLSAXHandler.java
解析器,能够完成对XML/GML数据的解析工作.
通过继承org.xm1.sax.ContentHandler接口,对其
提供的儿个主要构造进行扩展实现.
GMLSAXHandIer.iava类主要对以下构造进行
扩展:( ̄)startDocument():开始解析文档②startEle.
merit(…):开始解析元素;③endEtement(・):元素
解析结束;( ̄)characters(・・):获取元素内容;⑤end-
Document():文档解析结束.
陈淑婷,等:扩展XML查洵实现GML查询
(3)空间扩展
where Intersection(¥c,”61850 52150 61950
52350”)and¥c//type=”Land”
return¥C
具体见3.2 GML查询语言的空间扩展.
(4)空间索引
具体见3.2 GML查询语言的空间索引扩展.
(5)查询结果的处理
对查询结果的处理提供了两种方式:GML格
式和SVG格式.
实验中的每个查询对每个文档大小都运行l0
次,且分别进行了属性查询实验、空间查询实验及
属性和空间相结合的查询实验,所有实验都得到了
预期结果,实验结果如表1至表5所示.从查询结
果可以看出查询时间随文件增大而增加,随查询结
4 GML查询测试
本文对1O个1~50 MB不等的GML文档进行
果个数增加而增加;同时,要素的复杂程度也会影
响查询时间.这些结果表明了本文提出的基于
XQEngine来开发GML本原查询系统是可行的,同
时也显示出了本文开发的GML本原查询系统的稳
定性良好.
各种查询测试,查询语句的写法,以空间交叉和属
性混合查询为例:
for¥C in doc(,e:\test\test.xml 3//Feature.
Member
表1属性查询测试
Tab.1 Attribute query test
文档大小/MB
O.5
l
1.5
查询时间/ms
63
78
140
结果个数
91
303
554
文档大sJ ̄/M
10
15
20
查询时间/ms
5 266
1O 831
22 492
结果个数
5 561
8 31l
l1 974
2.5
5
39O
l 500
1 131
2 664
25
5O
内存溢出错误
内存溢出错误
表2包含查询测试
Tab.2 Contain query test
文档大tJ ̄/MB
0.5
l
1.5
2.5
查询时问/ms
3O
40
55
7O
结果个数
23
26
26
36
文档大4,/M
10
15
20
25
查询时间/ms
1l0
175
222
243
结果个数
36
36
29
29
5 90 28 50 271 87
表3相交查询测试
Tab.3 Intersection query test
文档大小/MB 查询时问/ms 候选几何对象个数最终结果个数 文档大小/MB 查询U ̄1q/.m ̄ 候选几何对象个数最终结果个数
O.5
1
1.5
2.5
5
160
175
246
280
320
26
52
43
8O
67
9
9
19
12
22
10
15
20
25
50
44l
561
850
962
1 352
77
96
109
l09
109
64
25
l05
105
27
表4 k-邻近查询测试
Tab.4 K-nearest query test
文档大d ̄/MB
0.5
l
1.5
2.5
查询时间/ms
141
140
172
187
结果个数
20
20
20
20
文档大dx/M
10
15
20
25
查询时间/ms
218
219
218
234
结果个数
2O
20
2O
20
5 203 20 50 282 20
(下转第303页)
・
291・
周增国,等:基于ANSYS的大跨度拱桥拱肋吊装过程稳定性分析
(2)通过设置下拉索或通过多点下锚张拉控
线张拉的松紧程度不同,有可能使某些扣索的自振
制拱肋(箱)的纵向稳定.下拉索布置如考虑到拱 频率恰巧与风的脉动频率相同而发生风振现象.如
肋接头可能发生骨架变形,所以可在其下方设置拉
果有多根扣索发生风振现象,可能会对拱肋的稳定
索并通过改变拉索索力的大小来控制拱轴的变形. 产生不利的影啊所以应采取安装临时减振器的措
(3)安装临时减振器.在安装钢绞线扣索时, 施,以消除扣索的风振现象.
由于接线器的安装误差,导致其中一根或几根钢绞
参考文献:
[1]孟凡强.拱段吊装过程中的索力优化及拱肋稳定性研究[D].武汉:武汉理工大学,2008.
[2]项海帆,刘光栋.拱结构稳定与振动[M].北京:人民交通出版社,1991.
[3]庞大彬.大跨度钢筋混凝土箱型拱桥缆索吊装施工技术研究[J].铁道建筑技术,2003(3):303-304.
[4]席红星.150 m钢筋混凝土拱桥单箱悬臂吊装施工技术[J].铁道建筑,2002(4):9-11.
[5]李国豪.桥梁结构稳定与振动[M].北京:中国铁道出版社,1992.
[6]叶裕明,刘春山,沈火明,等.ANSYS在土木工程中的应用实例[M].北京:中国水利水电出版社,2005:149-214
[7]钱莲萍,项海帆.空间拱桥结构侧倾稳定性的实用计算[J].同济大学学报,1989,17(2):161・172.
[8]赵雷, 一之.大跨度拱桥施工稳定性的时变力学分析[J].铁道学报,2000,22(5):55-59.
责任编辑:郭红建
(上接第291页)
表5属性和空间联合查询测试
Tab.5 Attribute and spatial integration query test
文档大dx/MB 查询时间/ms 候选几何对象个数最终结果个数 文档大/b/MB 查询时IWms 候选几何对象个数最终结果个数
O.5 531 26 6 10 1 375 43 11
1 563 52 6 15 1 422 43 l1
1.5 1 032 43 11 2O 1 719 44 12
2.5 l o47 43 ll 25 3 062 l25 61
5 1 172 43 11 50 4 575 l72 35
5 结论
果表明了本文提出的基于XML查询扩展思路是可
本文在开源软件XML查询引擎XQEngine的基
行的,同时将空问索引技术作为查询的空间过滤条
础上扩充了GML空间数据类型、空间操作算子和空
件,大大缩减了查询时问,提高了查询效率.
间索引,实现了对GML的查询,从研究查询实验结
参考文献:
[1]高军,杨冬青,唐世渭,等.基于树自动机的XPath在XML数据流上的高效执行[J].软件学报,2005,16(2):223 ̄32.
[2]於荔,鲍培明,张书 .GML空间数据的对象化存储研究[J].南京师范大学学报:工程技术版,2006,6(1):67-71.
[3]兰小机,间国年,刘德儿,等.基于XQuery的GML查询语言研究[J].测绘科学,2005,30(6):99—102.
[4]Fegaras L.The ofSAX[c]//Proc ofthe1 stinternationalworkshop onXQueryimplementation,experience and perspectives.Paris:Maison
de al Chimie,2004:61-66.
[5]Li X G,Agrawal G.Effwient evaluation ofXQuery over streaming data[c]//Pmc ofthe 31 st VLDB Conference Trondheim,Nor,say,2005:
265.276.
[6]Bose S,FegarasI .Data streammanagementfor historicalXML data[c]//Proc of SIGMOD,NewYork:ACM Press,2004:239 ̄50.
[7]Guan J H_GQL:extending XQuery to query GML documents[J].Geospatial Information Science(S1009 ̄020),2006,9(2):118・126.
责任编辑:郭红建
・
303・
t