【SQL开源代码栏目提醒】:网学会员为广大网友收集整理了,空间SQL语法分析器的设计实现 - 硕士论文,希望对大家有所帮助!
硕士学位论文空间
SQL语法分析器 申请学位级别:硕士 专业:计算机技术 大连理_T大学专业学位硕士学位论文 摘 要 空间数据库系统是描述、存储和处理空间数据及其属性数据的数据库系统,它是随着地理信息系统的开发和应用而发展起来的数据库新技术。
空间数据库中既保存了用于描述地理对象特征的属性数据,又保存了地理对象位置信息的空间数据,因此要设计完全满足对空间数据库中所保存内容处理要求的空间查询语言就比较困难。
就目前而言,还没有一种通用的空间查询语言能满足所表达的空间概念和用户的需求完全符合。
由于空间数据库管理系统是一种扩展的数据库管理系统,很自然的希望能扩展SQL来支持空间数据,于是基于SQL扩展的空间查询语言逐渐成为空间查询语言研究一个重要的发展方向。
本文首先介绍了SQL的国际标准ANSI/ISO SQL99、行业标准OpenGIS,以及扩展SQL的基本原则,随后设计了一种在SQL2标准的基础上添加了SQL3标准的自定义数据类型和对OpenGIS标准有所支持的简单的空间SQL。
本文就这种空间SQL在语法规则上的设计进行了详细的讨论,最后利用Linux系统自带的创建编译程序工具Lex和Yacc,以及应用程序开发框架Qt,用图形化的方式实现了它的语法分析器。
关键词:空间查询语言;语法规则;语法分析器;编译 大连理工大学专业学位硕十学位论文 Design and Implementation of the Spatial SQL Parser Abstract Spatial database system is a database system that is used to describe,store and operatespatial data and its property data.It is a new technology developing wim the exploitation andapplication of geographic information system.Both the property data that is used to describethe character of geographic object,and the spatial data that is used to describe the positioninformation of geographic object are stored in spatial database,SO it is quite difficult to designa spatial query language which matches the demand of operating the data stored in thedatabase perfectly.Up to now,no general spatial query language whose spatial notion couldfully match what user need has been found.Because spatial database management system isan extension of database management system,naturally,we wish it could be possible toextend SQL to support spatial data.So research on spatial query languages that based-onextended SQL gradually becomes one of the most important aspects. TIlis paper first introduces some standards about SQL including the ANSI/ISO SQL99and the OpenGIS standard and some basic principle extending SQL.Then simple spatial on aSQL based-on SQL2 WaS designed,and it supports user-defined types announced in SQL3and OpenGlS standard.And this paper presents a detailed description of designation on thesyntax rule of the spatial SQL. In the end,the spatial SQL parser is implemented with toolsLex,Yacc and Qt binding to Linux. Key Words:Spatial Query Language;Syntax Rule;Parser;Compile ..III.. 大连理工大学专业学位硕士学位论文1 绪论1.1 地理信息系统概述 地理信息系统(Geographic Information System,即GIS)是--1’7集计算机科学、信息学、地理学等多门科学为一体的新兴学科,它是在计算机软件和硬件支持下,运用系统工程和信息科学的理论,科学管理和综合分析具有空间内涵的地理数据,以提供对规划、管理、决策和研究所需信息的空间信息系统。
自1963年加拿大测量学家R.F Tomlinson首先提出了地理信息系统这一术语,并建成世界上第一个GIS(〕JfI拿大地理信息系统CGIS),用于自然资源的管理和规划后,地理信息系统已经经历了开拓期、巩固发展起、大发展期,现在已迈入用户时代。
目前主流的GIS系统按功能层次划分为三个相对独立,而又密切相连的子系统:数据库系统,GIS通用系统,GIS专业应用系统。
如图1.1所示。
图1.1 GIS系统的基本结构 Fig.1.1 The basic structure of GIS system (1)数据库系统 由于GIS应用系统不仅要处理大量的空间图形数据,也要处理大量的与空间实体相关的属性数据和管理数据,因此如何组织和管理这些数据是GIS所面临的首要问题。
关系数据库系统经过几十年的发展和完善,具备了一系列高速可靠的数据存取机制,如多用户控制,并发控制,客户服务器机制等。
由于数据库系统一般只提供通用数据的存储和检索,而地图数据是一些特殊的格式化的数据,因此必须要经过一个中间层来进行格式转换。
(2)通用的GIS模型 尽管不同的应用系统有其特殊的需求,但都需要一组基本的操作,如地图显示、地理数据输入、进行坐标转换等。
现在主流的GIS通用系统,例如Intergraph公司的GcoMcdia采用了组件技术来完成中间层的格式转换,如图1.2所示。
图1.2 GIS通用系统结构 Fig.1.2 The general system structure of GIS (3)专业应用系统 专业应用系统面向用户的具体应用。
如电力系统的配电GIS,消防GIS等。
它向用户提供符合用户习惯的操作环境、提供某个领域内的专用分析工具、为用户提供决策支持信息。
GIS的研究内容很广泛,概括起来由地理数据的输入、存储、操作、分析和输出5个方面组成。
目前GIS主要向网络GIS、GIS和其他空间技术综合、GIS与数据库技术融合以及开放式GIS等方向发展。
中国地理信息系统事业起步较晚,但经过多年发展,取得了重大进展。
地理信息系统的研究和应用正逐步形成行业,具备走向产业化的条件。
1.2空间数据库概述 空间数据库系统是描述、存储和处理空间数据及其属性数据的数据库系统。
空间数据库是随着地理信息系统的开发和应用而发展起来的数据库新技术。
目 2 大连理工大学专业学位硕士学位论文前,空间数据库系统尚不是独立存在的系统,它与应用紧密结合,大多数作为地理信息系统的基础和核心的形式出现。
空间数据库数据技术研究的主要内容包括以下几方面: (1)空间数据模型 空间数据模型是描述空间实体和空间实体关系的数据模型,一般来说可以利用传统的数据模型加以扩充和修改来实现,也可以用面向对象的数据模型来实现。
空间数据库常用的空间数据结构有矢量数据结构和栅格数据结构两种。
(2)空间数据查询语言 空间数据查询包括位置查询、空间关系查询和属性查询等。
前两种查询是空间数据库特有的,基本方式有:面.面查询、线.线查询、点.点查询、线.面查询,点.线查询、点.面查询等。
开发空间数据查询语言的目的是为了正确表达以上查询请求。
(3)空间数据库管理系统 空间数据库管理系统的主要功能是提供对空间数据和空间关系的定义和描述;提供空间数据查询语言,实现对空间数据的高效查询和操作;提供对空间数据的存储和组织;提供对空间数据的直观显示等。
空间数据库管理系统比传统的数据库管理系统在数据的查询、操作、存储和显示等方面要复杂许多。
1.3研究背景及意义 如今地图空间数据可以很轻易的在各种商用的GIS系统中通过图像表现出来,但是相应的空间查询语言则发展相对薄弱。
在大多数环境下,这些查询语言仅仅是为了某一些特定的系统开发。
这样就导致了最终的用户程序不能与他系统兼容,同时也加剧了系统的开发和维护的复杂度。
因此定义一种简单和友好的查询接口变得非常迫切。
在过去的20年中,很多专家提出了各种不同的空间查询分析解决方案,但仍处于理论发展和技术探索阶段。
我们可以大致将其划分为两大类: (1)文本化语言(textual languages):包括自然语言(natural languages)和人工智能语言(artificial languages)。
(2)表现化语言(representational languages):包括了表格式语言(tabularlanguages),图形语言(graphical languages)和可视化语言(visual languages)。
对于一种空间查询语言最关键的部分是对空间概念的描述。
理想的情况是其语言完全能表示人所能理解的空间含义,就目前而言,现有的查询语言还不能达到这样的完备性,即查询语言所能表达的空间概念和用户的需求或多或少有一些 空间SQL语法分析器距离。
我们研究的方向也是要尽量通过查询语言将用户的查询准确地传递到系统中执行从而产生用户所期望的结果,同时也要兼顾系统的可扩展性和效率问题。
1.4论文的内容与组织 本文研究的主要内容是空间SQL语法分析器,包括对传统SQL2标准的SQL语法的规则设计,对SQL3标准添加的行类型、数组类型、自定义类型等方面的规则设计,对OpenGIS标准添加的类型和函数的规则设计以及实现图形化空间SQL的语法分析器。
本文共分五章,其组织结构和每章的内容如下: 第一章为绪论,对使用空间查询语言的地理信息系统和空间数据库进行了概述,同时对研究背景及意义做了介绍。
第二章将对SQL和OpenGIS标准做出介绍,并以SQL为基础做出语言扩展的基本原则。
本章重点介绍了开发设计中用到的相关技术。
第三章将介绍空间SQL的设计过程,包括SQL2标准SQL语法规则的设计和加入空间特性的SQL语法规则的设计。
第四章将介绍语法分析器的图形化实现,界面的实现,并且将通过一个实例来展示使用该语法分析器。
第五章结论对全文做出总结。
最后是参考文献、附录、致谢和大连理工大学学位论文版权使用授权书。
4 大连理丁大学专业学位硕士学位论文2基于SQL扩展的空间查询语言及相关技术2.1 查询语言的国际标准及行业标准2.1.1 NASl/I SO S0k标准 SQL(Structured Query Language结构化查询语言)为关系数据库的通用查询语言,最初由IBM公司San Jose实验室的Boyce和Chamberlim于1972年为System R关系数据库设计。
SQL于1986年和1987年分别成为美国国家标准学会(ANSI)和国际标准化组织(ISO)标准——SOL86,在1989年、1992年、1999年和2003年又对其进行了修订——SQL89、SQL92、SQL99和SQL2003。
SQL92标准又称作SQL2标准,是当前关系数据库查询语言遵循的标准,使用最为广泛,而SQL99标准又被称为SQL3标准,在这个标准中,添加了对对象关系的支持,在用户自定义数据类型、组合(抽象)数据类型等领域指定了新的语句、子句和表达式。
SQL99/SQL3标准的数据类型如图2.1所示【1】。
图2.1 ANSI/IS0 SOL99的数据类型 Fig.2.1 ANSI/ISO SQL 99 types of data 空间SOL语法分析器2.1.2 OpenGI S标准 OGIS是一些主要软件供应商组成的联盟,负责制定与GIS互操作相关的行业标准。
OGIS是基于图2.2所示的几何数据模型之上的。
该数据模型包括一个基类GEOMETRY,这个基类是非实例化的,但它规定了一个适用于其子类的空间参照系统。
有四个主要的子类从GEOMETRY这个超类派生出来,这四个子类是Point、Curve、Surface和GeometryCollection,每个类还关联了一组操作,这组操作作用于类的实例【71。
表2.1、2.2、2.3列出了一些重要操作及其定义【21。
图2.2 OGIS提出的关于空间几何体的基本构件(采用U地概念表示) Fig.2.1 OGIS On space geometric form the basic components(using UML concept) 6 大连理工大学专业学位硕十学位论文 表2.1 SQL的oGIS标准定义的一些操作 Tab.2.1 The SQL OGIS standard definition of some of the operating 基本函数 定义SpatialReference() 返回几何体的基本坐标系统 Envelope 0 返回包含几何体的最小外接矩阵 Export0 返回以其他形式表示的几何体 IsEmpty 0 如果几何体是空值则返回真 IsSimple() 如果几何体是简单的(即不自交)则返回真 Boundary() 返回几何体的边界 表2.2 SQL的OGIS标准定义的一些操作 Tab.2.2 The SQL OGIS standard definition of some ofthe operating 拓扑/集合运算符 定义 Equal 如果两个几何体的内部和边界在空间上相等,则返回真 Di sjoint 如果内部和边界都不相交,则返回真 Intersect 如果几何体不相交,则返回真 Touch 如果两个面仅仅是边界相交但是内部不相交,则返回真 Cross 如果一条线和面的内部相交,则返回真 Within 如果给定的几何体的内部不和另一个几何体的外部相交, 则返回真 Contains 判断给定的几何体是否包含另一个给定的几何体 Overlap 如果两个几何体的内部有非空交集,则返回真 表2.3 SOL的oGIS标准定义的一些操作 Tab.2.3 The SQL OGIS standard definition of some of the operating 空间分析 定义 Distance 返回两个几何体之间的最短距离 Buffer 返回到给定几何体的距离小于或等于指定值的几何体的点 的集合 ConvexHull 返回几何体的最小闭包 Intersection 返回由两个几何体的交集构成的几何体 Union 返回由两个几何体的并集构成的几何体 Difference 返回几何体与给定几何体不相交的部分 SymmDiff 返回两个几何体与对方互不相交的部分 7 空间SOL语法分析器2.2 SOL扩展语言的设计原则2.2.1兼容性原则 在任何一个空间查询语言中需要解决三种最基本的查询方式: (1)只包含空间约束条件的查询:如查询某一条河流流经的城镇。
(2)只包含非空间约束条件的查询:如查询a城市的人口有多少。
(3) 结合空间约束条件和非空间约束条件的查询:如查询某个范围内的饭店名称。
对于第二种只包含非空间约束条件的查询,我们可以通过SQL很容易地实现,如上述查询可以描述成以下SQL语句: SELECT city.population FROM city WHERE city.name=‘a’: 为了实现上述三种查询,对SQL语一言的空间扩展必须保持其原有的功能,以允许用户可以继续通过原有的方式对非空间数据进行查询,因此对SQL的扩展将建立在保留原有语言的设计思想上。
SQL语言中经典的查询结构SELECT.FROM.WHERE子句模式将被继续沿用下去。
除此以外,还包括以下几条设计原则: (1)每一条查询的结果都存在于一个关系集合中。
(2)每一条查询的基本结构都遵循SELECT.FROM.WHERE模式。
(3)WHERE子句中的非空间谓词都将建立在非空间的属性约束条件上。
此外标准SQL查询语句不区分大小写,因此扩展SQL也应该同样遵循这一原则,同时标准SQL里的保留字也应该在扩展SQL中继续沿用下去。
2.2.2扩展性原则 为了支持空间查询,SQL必然会引入一些相关的空间概念,下面我们主要从语言层面上探讨一下SQL在支持空间查询语义方面的扩展。
(1)要素类 在GIS系统中,我们一般将具有相同属性元数据定义(Attribute Schema)的地理对象抽象为一个要素类(Feature Class)或者一个图层(Layer)。
这些要素类具有两层含义:对于属性数据而言,它定义了原有的二元关系;对于空间数据而言,它定义了具有相似地理概念的对象集合,如河流要素类,公路要素类等。
因此在扩展SQL语言中,新的要素类可以很自然地代替原有的二元关系。
8 大连理丁大学专业学位硕士学位论文 但是并不是所有的查询都是完全针对要素类集合的,同样有些查询是跨越新的要素类和原有二元关系的。
在这种情况下,原有的二元关系仍然将被沿用,但只能针对其定义属性相关的操作,而不包括任何空间相关的操作。
(2)空间数据表达 空间数据的表达是SQL扩展空间查询语义的基础。
一方面,在扩展SQL语句中,用户可能需要表达一个诸如点、线、面等的空间几何实体。
另一方面,在一个实际的查询结果中,可能包含与空间数据相关的一系列空间属性,扩展SQL除了需要引入新的空间算子定义这些空间属性外,还需要定义其中空间数据类型的表达形式。
OpenGIS SQL实现规范中定义了两种常用的表达方式。
①基于文本形式的空间数据表达:well know text representation(WKT) ②基于二进制形式的空间数据表达:well know binary representation(wKB) 通过相应的转换算子,用户可以选择基于这两种形式之一定义和读取空间数据。
譬如用户要求查询道路的名称,长度和道路某一范围下的缓冲区,其中空间数据以文本的形式返回给用户。
道路的长度和缓冲区都属于空间相关的属性,后者的计算结果则属于空间数据类型。
该查询在扩展SQL中可能被定义为如下形式: SELECT road.name,LENGTH(road),GeometryToWKT(BUFFER(road,50)) FROM road (3)空间约束条件 空间查询对SQL的扩展还表现在查询条件的空间约束上,和基于非空间属性约束条件一样,这些空间约束条件将归入WHERE子旬或者HAVING子句的范畴。
目前SQL提供的SELECT.FROM.WHERE子句加上可能的GROUP.BY—HAVING子句对于新引入的空间逻辑已经足够使用了。
因此我们不需要加入新的针对空间表达的特定子句。
而且引入新的子句将有可能增加用户组织查询语句的复杂度。
2.3空间SOL语法分析器用到的相关技术 该图形化空间SQL语法分析程序是在Linux Fedora Core3操作系统下,利用Lex和Yacc编译工具,将设定的规则文件转为空间SQL语法,最后利用Qt应用程序开发框架设计出图形化界面。
2.3.1 Fedora相关技术 Fedora是一个开放的、创新的、前瞻性的操作系统和平台,基于Linux。
它允许任何人自由地使用、修改和重发布,无论现在还是将来。
它由一个强大的社 空间SQL语法分析器群开发,这个社群的成员以自己的不懈努力,提供并维护自由、开放源码的软件和开放的标准。
Fedora项目由Fedora基金会管理和控制,得到了Red Hat.Inc.的支持。
Fedora是一个独立的操作系统,是Linux的一个发行版,可运行的体系结构包括x86(且〔I i386.i686),x86 64和PowerPC。
Fedora Core(自第七版直接更名为Fedora)是众多Linux发行套件之一。
它是一套从Red Hat Linux发展出来的免费Linux系统。
现时Fedora最新的版本是Fedora 1 1,Fedora是linux发行版中更新最快的之一,通常每6个月发布一个正式的新版本。
Fedora和Redhat这两个Linux的发行版放联系很密切。
Redhat自9.0以后,不再发布桌面版的,而是把这个项目与
开源社区合作,于是就有了Fedora这个Linux发行版。
Fedora可以说是Redhat桌面版本的延续,只不过是与
开源社区合作。
Fedora Core的前身就是Red Hat Linux。
2003年9月,红帽公司(Red Hat)突然宣布不再推出个人使用的发行套件而专心发展商业版本(Red Hat EnterpriseLinux)的桌面套件,但是红帽公司也同时宣布将原有的Red Hat Linux开发计划和Fedora计划整合成一个新的Fedora Project。
Fedora Projeet将会由红帽公司赞助,以Red Hat Linux 9为范本加以改进,原本的开发团队将会继续参与Fedora的开发计划,同时也鼓励开放原始码社群参与开发工作。
Fedora Core被红帽公司定位为新技术的实验场,与Red Hat EnterpriseLinux被定位为稳定性优先不同,许多新的技术都会在Fedora Core中检验,如果稳定的话红帽公司则会考虑 加入Red Hat Enterprise Linux中。
Fedora预计每年发行2---3次的发行版本。
2003年11月,第一个发行版本Fedora Core 1出炉,版本
代码为Yarrow。
这一版本与Red Hat Linux非常相似,加入了新的安装机制yum之外,只是把Red Hat的标志代换掉,并更新套件而已。
2004年5月,Fedora Core 2正式发布,版本
代码为Tettnang。
这一版本除了是第一个采用2.6版核心的发行套件及用XorgXll取代XFree86外,也加入了IIIMF,SELinux等许多新技术,并且在开放原始码社群的支援下修正了许多套件的错误。
2004年11月,Fedora Core 3正式发布,版本
代码为Heidelberg。
这一版本采用2.6.9版核心、Xorg 6.8.1、 GNOME 2.8和KDE 3.3.O。
10 .
上一篇:
计算机管理信息系统——6章_详细设计
下一篇:
青青子衿,悠悠我心