面向地理空間數(shù)據(jù)庫屬性值約束檢查的表達式解析方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及地理空間數(shù)據(jù)庫屬性值約束關(guān)系檢查技術(shù),具體地,涉及面向地理空 間數(shù)據(jù)庫屬性值約束檢查的表達式解析方法,尤其是一種利用表達式對地理空間數(shù)據(jù)屬性 值約束關(guān)系進行定義、解析、計算與判斷的技術(shù)。
【背景技術(shù)】
[0002] 地理空間數(shù)據(jù)庫是組織與管理測繪地理信息產(chǎn)品的一種主要形式。地理空間數(shù)據(jù) 庫中的一個數(shù)據(jù)表即是一類地理空間要素的集合,稱為一個要素集。數(shù)據(jù)表中的一條記錄 表示一個地理空間要素,一個數(shù)據(jù)列表示地理空間要素的一個屬性。地理空間要素的各個 屬性的值之間存在著一種約束關(guān)系,即一個屬性的值被其他屬性的值所約束。若屬性賦值 為不滿足屬性值得約束關(guān)系會直接導(dǎo)致基于此數(shù)據(jù)的計算分析結(jié)果不可靠,因此屬性值約 束關(guān)系檢查是一項必不可少的工作。
[0003] 目前地理空間數(shù)據(jù)庫屬性值約束關(guān)系檢查普遍借助SQL語句實現(xiàn),但利用SQL語 句進行地理空間數(shù)據(jù)庫屬性值約束關(guān)系檢查時存在明顯的缺陷。這些缺陷主要表現(xiàn)為:
[0004] (1)難以對屬性值約束關(guān)系進行統(tǒng)一標準的表達。屬性值約束關(guān)系是一種蘊含邏 輯表達式,其形式一般為"若〈條件表達式 >,則〈決策表達式 >",而SQL語句并未提供 解析蘊含邏輯表達式的功能,因此無法用SQL語句對屬性值約束關(guān)系進行統(tǒng)一的標準的表 達。
[0005] (2)無法滿足復(fù)雜的屬性約束關(guān)系檢查。SQL語句并不包括針對屬性值得算術(shù)運 算與復(fù)雜的函數(shù)運算,因而無法實現(xiàn)約束條件類似于"屬性1+Sin(屬性2) /屬性3>Cos(屬 性4)且屬性3+屬性5/屬性7>屬性1"的同時包含數(shù)學(xué)計算、邏輯運算及、關(guān)系運算及函 數(shù)運算的屬性值約束檢查。
[0006] 鑒于依賴SQL語句進行地理空間數(shù)據(jù)庫屬性值約束關(guān)系檢查存在的問題,在進行 地理空間數(shù)據(jù)庫的檢驗與驗收過程中難以全面、準確、有效的檢查出地理空間數(shù)據(jù)庫中不 滿足約束關(guān)系屬性值,為檢查驗收工作帶來極大的不便,同時也為后續(xù)數(shù)據(jù)庫的分析埋下 的嚴重的潛在障礙。
【發(fā)明內(nèi)容】
[0007] 針對現(xiàn)有技術(shù)中的缺陷,本發(fā)明的目的是提供一種面向地理空間數(shù)據(jù)庫屬性值約 束檢查的表達式解析方法。
[0008] 本發(fā)明屬于數(shù)據(jù)庫檢查技術(shù)。例如同技術(shù)領(lǐng)域的,已授權(quán)的中國發(fā)明專利 ZL201080058072. 1(用于檢查分層型數(shù)據(jù)庫中的指針的一致性的系統(tǒng)和方法)就是一種數(shù) 據(jù)庫檢查技術(shù)。
[0009] 本發(fā)明也屬于規(guī)則檢查技術(shù)。例如同技術(shù)領(lǐng)域的,已授權(quán)的中國發(fā)明專利 ZL200710080107. 1 ( -種配置規(guī)則檢查方法及裝置)就是一種規(guī)則檢查技術(shù),其在背景技 術(shù)中提到可以使用對象約束語句來描述規(guī)則從而進行檢查。
[0010] 根據(jù)本發(fā)明提供的一種面向地理空間數(shù)據(jù)庫屬性值約束檢查的表達式解析方法, 包括如下步驟:
[0011] 步驟1,定義屬性值約束關(guān)系表達式
[0012] 屬性值約束關(guān)系表達式的定義方式為:
[0013] IF〈expl>Then〈exp2>
[0014] 其中,符號IF〈expl>表不括號內(nèi)的表達式expl為條件表達式,符號Then〈exp2> 表不括號內(nèi)的表達式exp2為決策表達式;
[0015] 條件表達式和決策表達式的計算結(jié)果只能為真或者假,且均采用如下定義方式:
[0016] exp= (V,A,M,R,L,F)
[0017] 其中,exp表示定義的表達式;(V,A,M,R,L,F(xiàn))表示表達式exp所包含的全部元素 集合;V為自定義值,為數(shù)值或者字符串;A為屬性名;M為算術(shù)運算符,算術(shù)運算符包括加 法運算符+、減法運算符_、乘法運算符X、除法運算符/ ;R為關(guān)系運算符,關(guān)系運算符包括 大于運算符〉、大于等于運算符彡、小于運算符 <、小于等于運算符 <、等于運算符=、不等 于運算符〈> ;L為邏輯運算符,邏輯運算符包括并運算符AncU或運算符Or、非運算符Not;F 為函數(shù)運算符;其中,V、A均稱為操作數(shù)元素,M、R、L、F均稱為操作符元素;
[0018] 步驟2,分解與轉(zhuǎn)換屬性值約束關(guān)系表達式
[0019] 依據(jù)屬性值約束關(guān)系表達式的定義方式,將屬性值約束關(guān)系表達式分解為條件表 達式expl與決策表達式exp2,并且將條件表達式、決策表達式分別轉(zhuǎn)換為一個符號順序表 形式進行表達;
[0020] 步驟3,解析表達式
[0021] 根據(jù)符號順序表分別解析計算條件表達式的值、決策表達式的值;
[0022] 步驟4,判斷屬性值約束
[0023] 依據(jù)條件表達式的值和決策表達式的值判斷屬性值是否滿足屬性值約束關(guān)系表 達式。
[0024] 優(yōu)選地,所述函數(shù)運算符的定義方式為:通過函數(shù)ID、函數(shù)名、參數(shù)個數(shù)、函數(shù)執(zhí) 行入口來定義所述函數(shù)運算符。
[0025] 優(yōu)選地,所述符號順序表是按照從左至右的順序依次取出屬性值約束關(guān)系表達式 的操作符元素和操作數(shù)元素加入順序表生成。
[0026] 優(yōu)選地,所述步驟3包括如下步驟:
[0027] 步驟3. 1 :初始化操作符棧OperatorStack和操作數(shù)棧OperandStack,并置為空;
[0028] 步驟3. 2 :遍歷符號順序表,判斷當前符號類型;
[0029] 步驟3. 3 :根據(jù)步驟3. 2的判斷結(jié)果:
[0030] -若當前符號為操作數(shù),則將該操作數(shù)壓入操作數(shù)棧OperandStack并進入步驟 3. 2讀取下一個符號;
[0031] _若當前符號為操作符,則執(zhí)行步驟3. 4 ;
[0032] 步驟3. 4 :若操作符棧OperatorStack為空,則將當前符號壓入操作符棧 OperatorStack;否則,讀取操作符棧OperatorStack的棧頂元素,與當前操作符進行優(yōu)先 級比較:
[0033]若當前操作符的優(yōu)先級高于棧頂元素,則將當前操作符壓入操作符棧 OperatorStack,并讀取下一個符號;
[0034] 若當前操作符優(yōu)先級低于棧頂元素,則操作符棧OperatorStack的棧頂元 素出棧,并依據(jù)棧頂元素,取出相應(yīng)的操作數(shù)進行計算,并將計算結(jié)果壓入操作數(shù)棧 OperandStack;
[0035] 若當前操作符優(yōu)先級等于棧頂元素,則操作符棧OperatorStack的棧頂元素出 棧,判斷出棧的操作符元素是否為函數(shù)運算符的函數(shù)名,若是,則根據(jù)函數(shù)運算符的參數(shù)個 數(shù)由操作數(shù)棧OperandStack進行出棧操作得到參數(shù),進行函數(shù)計算,并將計算結(jié)果壓入操 作數(shù)棧OperandStack;
[0036] 步驟3. 5 :重復(fù)執(zhí)行步驟3. 4,直到當前操作符的優(yōu)先級高于棧頂元素為止;
[0037] 步驟3. 6 :重復(fù)執(zhí)行執(zhí)行步驟3. 2至3. 5,直到符號順序表為空為止;
[0038] 步驟3. 7 :若操作符棧為空,則執(zhí)行步驟3. 8 ;否則,貝Ij令操作符棧OperatorStack 棧頂元素出棧,判斷出棧的操作符元素是否為函數(shù)運算符的函數(shù)名:
[0039] 若出棧的操作符元素是函數(shù)運算符的函數(shù)名,則根據(jù)函數(shù)運算符的參數(shù)個數(shù)由 操作數(shù)棧OperandStack進行出棧操作得到參數(shù),進行函數(shù)計算,并將計算結(jié)果壓入操作 數(shù)棧OperandStack;否則,則取出相應(yīng)的操作數(shù)進行計算,并將計算結(jié)果壓入操作數(shù)棧 OperandStack;
[0040] 重復(fù)執(zhí)行步驟3. 7,直到操作符棧為空;
[0041] 步驟3. 8 :若操作符棧OperatorStack為空且操作數(shù)棧OperandStack只有一個 元素,則將操作數(shù)棧OperandStack的棧頂元素作為計算結(jié)果,即屬性值約束關(guān)系表達式的 值;否則,則判定屬性值約束關(guān)系表達式不合法。
[0042] 優(yōu)選地,所述操作符優(yōu)先級的定義為:
[0043] 函數(shù)運算符的優(yōu)先級為第一優(yōu)選級;
[0044] 乘法運算符、除法運算符的優(yōu)先級為第二優(yōu)選級;
[0045] 加法運算符、減法運算符的優(yōu)先級為第三優(yōu)先級;
[00