面向地理空间数据库属性值约束检查的表达式解析方法

文档序号:8473073阅读:432来源:国知局
面向地理空间数据库属性值约束检查的表达式解析方法
【技术领域】
[0001] 本发明涉及地理空间数据库属性值约束关系检查技术,具体地,涉及面向地理空 间数据库属性值约束检查的表达式解析方法,尤其是一种利用表达式对地理空间数据属性 值约束关系进行定义、解析、计算与判断的技术。
【背景技术】
[0002] 地理空间数据库是组织与管理测绘地理信息产品的一种主要形式。地理空间数据 库中的一个数据表即是一类地理空间要素的集合,称为一个要素集。数据表中的一条记录 表示一个地理空间要素,一个数据列表示地理空间要素的一个属性。地理空间要素的各个 属性的值之间存在着一种约束关系,即一个属性的值被其他属性的值所约束。若属性赋值 为不满足属性值得约束关系会直接导致基于此数据的计算分析结果不可靠,因此属性值约 束关系检查是一项必不可少的工作。
[0003] 目前地理空间数据库属性值约束关系检查普遍借助SQL语句实现,但利用SQL语 句进行地理空间数据库属性值约束关系检查时存在明显的缺陷。这些缺陷主要表现为:
[0004] (1)难以对属性值约束关系进行统一标准的表达。属性值约束关系是一种蕴含逻 辑表达式,其形式一般为"若〈条件表达式 >,则〈决策表达式 >",而SQL语句并未提供 解析蕴含逻辑表达式的功能,因此无法用SQL语句对属性值约束关系进行统一的标准的表 达。
[0005] (2)无法满足复杂的属性约束关系检查。SQL语句并不包括针对属性值得算术运 算与复杂的函数运算,因而无法实现约束条件类似于"属性1+Sin(属性2) /属性3>Cos(属 性4)且属性3+属性5/属性7>属性1"的同时包含数学计算、逻辑运算及、关系运算及函 数运算的属性值约束检查。
[0006] 鉴于依赖SQL语句进行地理空间数据库属性值约束关系检查存在的问题,在进行 地理空间数据库的检验与验收过程中难以全面、准确、有效的检查出地理空间数据库中不 满足约束关系属性值,为检查验收工作带来极大的不便,同时也为后续数据库的分析埋下 的严重的潜在障碍。

【发明内容】

[0007] 针对现有技术中的缺陷,本发明的目的是提供一种面向地理空间数据库属性值约 束检查的表达式解析方法。
[0008] 本发明属于数据库检查技术。例如同技术领域的,已授权的中国发明专利 ZL201080058072. 1(用于检查分层型数据库中的指针的一致性的系统和方法)就是一种数 据库检查技术。
[0009] 本发明也属于规则检查技术。例如同技术领域的,已授权的中国发明专利 ZL200710080107. 1 ( -种配置规则检查方法及装置)就是一种规则检查技术,其在背景技 术中提到可以使用对象约束语句来描述规则从而进行检查。
[0010] 根据本发明提供的一种面向地理空间数据库属性值约束检查的表达式解析方法, 包括如下步骤:
[0011] 步骤1,定义属性值约束关系表达式
[0012] 属性值约束关系表达式的定义方式为:
[0013] IF〈expl>Then〈exp2>
[0014] 其中,符号IF〈expl>表不括号内的表达式expl为条件表达式,符号Then〈exp2> 表不括号内的表达式exp2为决策表达式;
[0015] 条件表达式和决策表达式的计算结果只能为真或者假,且均采用如下定义方式:
[0016] exp= (V,A,M,R,L,F)
[0017] 其中,exp表示定义的表达式;(V,A,M,R,L,F)表示表达式exp所包含的全部元素 集合;V为自定义值,为数值或者字符串;A为属性名;M为算术运算符,算术运算符包括加 法运算符+、减法运算符_、乘法运算符X、除法运算符/ ;R为关系运算符,关系运算符包括 大于运算符〉、大于等于运算符彡、小于运算符 <、小于等于运算符 <、等于运算符=、不等 于运算符〈> ;L为逻辑运算符,逻辑运算符包括并运算符AncU或运算符Or、非运算符Not;F 为函数运算符;其中,V、A均称为操作数元素,M、R、L、F均称为操作符元素;
[0018] 步骤2,分解与转换属性值约束关系表达式
[0019] 依据属性值约束关系表达式的定义方式,将属性值约束关系表达式分解为条件表 达式expl与决策表达式exp2,并且将条件表达式、决策表达式分别转换为一个符号顺序表 形式进行表达;
[0020] 步骤3,解析表达式
[0021] 根据符号顺序表分别解析计算条件表达式的值、决策表达式的值;
[0022] 步骤4,判断属性值约束
[0023] 依据条件表达式的值和决策表达式的值判断属性值是否满足属性值约束关系表 达式。
[0024] 优选地,所述函数运算符的定义方式为:通过函数ID、函数名、参数个数、函数执 行入口来定义所述函数运算符。
[0025] 优选地,所述符号顺序表是按照从左至右的顺序依次取出属性值约束关系表达式 的操作符元素和操作数元素加入顺序表生成。
[0026] 优选地,所述步骤3包括如下步骤:
[0027] 步骤3. 1 :初始化操作符栈OperatorStack和操作数栈OperandStack,并置为空;
[0028] 步骤3. 2 :遍历符号顺序表,判断当前符号类型;
[0029] 步骤3. 3 :根据步骤3. 2的判断结果:
[0030] -若当前符号为操作数,则将该操作数压入操作数栈OperandStack并进入步骤 3. 2读取下一个符号;
[0031] _若当前符号为操作符,则执行步骤3. 4 ;
[0032] 步骤3. 4 :若操作符栈OperatorStack为空,则将当前符号压入操作符栈 OperatorStack;否则,读取操作符栈OperatorStack的栈顶元素,与当前操作符进行优先 级比较:
[0033]若当前操作符的优先级高于栈顶元素,则将当前操作符压入操作符栈 OperatorStack,并读取下一个符号;
[0034] 若当前操作符优先级低于栈顶元素,则操作符栈OperatorStack的栈顶元 素出栈,并依据栈顶元素,取出相应的操作数进行计算,并将计算结果压入操作数栈 OperandStack;
[0035] 若当前操作符优先级等于栈顶元素,则操作符栈OperatorStack的栈顶元素出 栈,判断出栈的操作符元素是否为函数运算符的函数名,若是,则根据函数运算符的参数个 数由操作数栈OperandStack进行出栈操作得到参数,进行函数计算,并将计算结果压入操 作数栈OperandStack;
[0036] 步骤3. 5 :重复执行步骤3. 4,直到当前操作符的优先级高于栈顶元素为止;
[0037] 步骤3. 6 :重复执行执行步骤3. 2至3. 5,直到符号顺序表为空为止;
[0038] 步骤3. 7 :若操作符栈为空,则执行步骤3. 8 ;否则,贝Ij令操作符栈OperatorStack 栈顶元素出栈,判断出栈的操作符元素是否为函数运算符的函数名:
[0039] 若出栈的操作符元素是函数运算符的函数名,则根据函数运算符的参数个数由 操作数栈OperandStack进行出栈操作得到参数,进行函数计算,并将计算结果压入操作 数栈OperandStack;否则,则取出相应的操作数进行计算,并将计算结果压入操作数栈 OperandStack;
[0040] 重复执行步骤3. 7,直到操作符栈为空;
[0041] 步骤3. 8 :若操作符栈OperatorStack为空且操作数栈OperandStack只有一个 元素,则将操作数栈OperandStack的栈顶元素作为计算结果,即属性值约束关系表达式的 值;否则,则判定属性值约束关系表达式不合法。
[0042] 优选地,所述操作符优先级的定义为:
[0043] 函数运算符的优先级为第一优选级;
[0044] 乘法运算符、除法运算符的优先级为第二优选级;
[0045] 加法运算符、减法运算符的优先级为第三优先级;
[00
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1