高俊濤 侯 寧
(東北石油大學計算機與信息技術學院 大慶 163318)
現階段,各個油田企業布署和運行了大量信息系統,各個系統之間獨立開發與發布,形成眾多的信息孤島。由于缺少對數據資源的統一標準描述和信息服務,導致各系統間協同難、數據開發應用效率低,無法形成高效的公共數據服務產品[1]。
為屏蔽這些信息孤島,各個油田開始進行數據集成,將各個獨立開發的信息系統相互關聯起來,使得用戶可以透明的訪問這些數據。而數據集成中數據映射是重要的一個步驟[2]。目前許多數據集成的方法用于解決數據結構上的異構,卻沒有較好的解決數據語義上的異構,這一直以來也都是一個難點[3]。
文獻[4]提出了數據元在國內外標準化信息術語中的作用,說明了數據元在數據集成中的重要性。文獻[5]為了表達數據元的語義,用了語義樹,采取了數據元表達數據模型的語義。但是通過語義樹的方式過于復雜,提高了前期工作的門檻。文獻[6]以數據元為中介實現數據映射,采取數據元的方法對數據映射。
因此正文引出數據模型的映射,用數據元關鍵字的方式,用數據模型里的數據項與數據元與配對,然后對數據模型中數據項用數據元表達。通過關鍵字描述數據元的語義,避免構建語義樹、本體等帶來的麻煩,降低了前期工作的門檻和映射的復雜性。通過兩個模型中的數據項所配對的數據元的聯系,構建兩個數據模型中的數據項的匹配,從而構建兩個模型的映射,以更好地做數據服務。
基本的、不可分割的數據單元是數據元,它用屬性表達其標識、定義、允許值和表示[7]。
數據元語義可以看作由以下三個部分組成[8]。
對象詞:它具有清晰的概念,可以定義其屬性和行為,是對現實世界事物的抽象描述,可以作為面向對象編程中的對象來理解,在數據模型中類似于實體名稱。例如:尾管、生產井、水管、設備、管柱。
特性詞:特性詞表示對對象的一種性質描述,它在數據模型中類似于實體屬性,例如:長度、深度、外徑、內徑、尺寸、壓力、產量。
限定詞:它主要包含對象詞的限定詞和特性詞的限定詞,它是用來修飾對象詞和特性詞的,它可以有零個。如:懸掛、回接、下入、年。
設數據元關鍵字表為K:
其中pty 為特性詞,obj 為對象詞,Qobj 為對象詞的限定詞集合,Qpty 為特性詞的限定詞集合,C 為約束條件中的常數值集合。
進一步簡化:把C 中的常數值作為相應的限定詞,劃分到Qobj與Qpty中,得出:
通過以上三個部分實現對數據元語義的表達。表1展示了數據元語義的組成成分。

表1 數據元的組成成分
數據特征的抽象表示是數據模型,包含數據結構、數據約束和數據操作[9],因為數據操作是在數據庫上操作,所以這里不探討它。結合它的特征,用數據模型里的表和數據項表達數據模型。模型里表的表達基于數據項的表達。根據上述的表述,數據元作為數據的規范,可以用來描述數據項。
這里先構建數據項與數據元的配對表達數據項的語義。
目前有許多相似度算法,廣義上大體分成基于序列的相似度度量、基于集合的相似度度量[10]。編輯距離算法是基于序列的相似度度量,它具有可行性高效果好的優點[11],這里采用編輯距離算法度量數據項和數據元,它是基于字面進行相似度度量。
設編輯距離算法用dsim(x,y)表達,用來計算x轉變到y 的最低成本。字符串轉換通過以下方式實現,刪去、插入和替換字符串。例如,將x=“累積油產量”變為字符串y=“累積地層油產量”的代價是dsim(x,y)=2,需要執行的操作依次是在“累積”后面插入一個字符“地”,在“累積地”后面插入一個字符“層”。
編輯距離直觀上反映的是人們犯得一些編輯錯誤,比如插入了一個額外的字符(如“累積油產量”少寫了一個“產”字,變成了“累積油量”),或者兩個字符順序反了(如“累積油產量”錯寫成了“積累油產量”)等。編輯距離dsim(x,y)可用以下公式轉為相像度度量函數sim(x,y):
例如,“累積油產量”轉換為“累積地層油產量”的相似度度量結果為
下面以一個數據項“尾管懸掛下深”為例,與數據元字典里的數據元進行相似度度量,表2 中得到相像度較高的數據元配對結果。

表2 數據項與數據元相像度結果[12]
從以上結果得知,匹配的數據元中“尾管懸掛下入深度”相似度較高,“下入深度”的縮寫是“下深”,確實能表達數據項“尾管懸掛下深”的語義。因此,數據項“尾管懸掛下深”與數據元“尾管懸掛下入深度”匹配。
通過以上相似度度量方法,可以得出與數據模型中數據項匹配的數據元。當匹配數據元不唯一時,按相似度進行排序,并進行人工確認。由于表名、業務域、主鍵字段名中隱含數據項的上下文語義信息,這些信息可以作為數據元關鍵匹配的依據。
在上文定義了模型之后,即通過數據元對源模型和目標模型都完成了數據項的語義表達后,就可以進行數據模型映射。在目標數據模型中指定一個目標數據表,從源數據模型找出與此表對應的多個源表,并建立從源表到目標表的各字段的對應關系。
不同的實體間的某屬性可以使用同個數據元表達,同實體中的屬性可以逐個與數據元配對,見圖1。

圖1 數據元與數據模型關系圖
針對目標表的每個數據項匹配如下:
DE1(key11,key12,…key1m)DE2(key21,key22,…key2n),keyij 是數據元DEi 的關鍵字。當相似度SIM12=1時,兩個數據項對應的數據元名稱相等。如果數據元名稱不相等,則按以下方法:
其中,DSIM(DE1,DE1)為雙方數據元名稱的編輯距離算法相像度。而KSIM是兩個數據元的關鍵字集合之間的項集相像度:KSIM=交集項個數/并集項個數,得出的結果是杰卡德系數,它是雙方集合A和B的交集元素在并集A和B中的比[13],用符號J(A,B)表示,用下面的公式表達:
通過不同的系數值選取和大量的實驗,確定系數WD 和WK 的值,其中系數WD 和WK 的和為1。WD、WK 分別為兩個相似度的權重,對系數WD 和WK 按照表的取值進行計算,發現表3 在A=0.3,b=0.7的時候效果最好。

表3 系數選取
為了構建兩個模型的映射,用數據元作為中介,用雙方數據元匹配。不能完全配對,但有較高相像度的,作為可能映射[14]。這里以數據元“尾管懸掛下入深度”為例,按照關鍵詞分類,對象詞是“尾管”,它的限定詞是“懸掛”,特性詞是“深度”,它的限定詞是“下入”[15],在表4 中得出數據元字典中匹配到的前幾個數據元以及相似度結果。

表4 數據元與數據元相像度結果
通過上表得出“試油”數據模型中數據元“尾管懸掛下入深度”與“試油試采”數據模型中數據元“尾管懸掛下入深度”相似度為1,直接匹配。因此,它們所對應的數據項“尾管懸掛下深”和“尾管懸掛下入深度”也能直接匹配。這兩個數據項所對應的表“地質設計鉆井及套管基礎數據表”和“套管基礎數據表”也匹配。
通過數據元、數據項和實體對兩個模型表達之后,為數據映射字典打下了基礎,基于XML 的映射字典的設計,用于表達兩個模型的映射聯系[16]。
1)xml:表示xml文件版本號和編碼。
2)MapDocument:表示映射字典的根節點,此節點有一個子節點Mapping表示映射關系[17]。
3)Mapping:表示映射關系節點,此節點有三個屬性,user表示公司,name 表示映射名稱,type 表示映射類型,主要根據平臺使用者進行劃分。此節點有三個子節點,DRDModel,RDLModel,Entities。
4)DRDModel:表示源數據模型。
5)RDLModel:表示目標數據模型。
6)Entities:表示實體,RDL_Entity 是它的一個子節點。
7)RDL_Entity:表示目標數據模型實體,name、code 是它的兩個屬性,分別表示實體名、實體代碼。Source,Row是它的兩個子節點。
8)Source:表示數據來源(源數據模型),此節點有一個子節點DM_Entity。
9)DM_Entity:表示源數據模型,有兩個屬性name表示實體名,code表示實體代碼[18]。
10)Row:表示行,Attribute是它的一個子節點。
11)Attribute:表示屬性,其中它有6 個屬性,RDL_name 表示目標數據模型屬性。RDL_code 表示目標數據模型屬性代碼,element_name 表示數據元名稱,element_code 表示數據元代碼,DM_name表示源數據模型屬性,DM_code表示源數據模型屬性代碼[19]。
映射字典結構如下所示。
<?xml version=“”encoding=“”?>
本文通過數據元來表達數據模型中的數據項,并通過關鍵詞來表達數據元的語義。利用編輯距離算法和杰卡德算法的思想,對數據項與數據元進行配對,對數據元與數據元之間的相像性進行配對,間接定位數據項的語義映射聯系,從而得出數據表的映射聯系。最終為表達異構模型的映射引出一個映射文件。將中國石油企業的數據元為試驗數據,對中石油數據模型中的數據項進行了標準化,以保證研究的實用性。