費(fèi)越峰 閆紅漫 張弘 莫宇
摘 要:針對(duì)現(xiàn)在電力信息系統(tǒng)中CIM版本更新以及私有拓展導(dǎo)致的模型不一致的問題,提出一個(gè)基于Java基礎(chǔ)包的公共信息模型本體的解析算法以及特定要求下的校驗(yàn)方法,其中包括解析CIM模型,并重構(gòu)成Java模型并且完成電力系統(tǒng)所需要的功能校驗(yàn),實(shí)驗(yàn)結(jié)果證明整個(gè)解析以及模型重構(gòu)過(guò)程能準(zhǔn)確而快速得完成,校驗(yàn)過(guò)程能準(zhǔn)確得將模型中的不匹配信息提取并反饋給用戶。
關(guān)鍵詞:本體模型解析;模型重構(gòu);全模型構(gòu)建;RDF解析;功能校驗(yàn)
中圖分類號(hào):TP391.9
0 引言
標(biāo)準(zhǔn)開放的電力系統(tǒng)信息模型是實(shí)現(xiàn)應(yīng)用集成的基礎(chǔ)。IEC61968/IEC61970標(biāo)準(zhǔn)中的公共信息模型(CIM)不僅描述了不同電力應(yīng)用之間需要交換信息的語(yǔ)義,還為數(shù)據(jù)交換和利用提供了最大的靈活性和可擴(kuò)展性[1]。隨著城市配電網(wǎng)規(guī)模的擴(kuò)大,電力企業(yè)應(yīng)用增加,應(yīng)用系統(tǒng)間存在大量信息交換,如何實(shí)現(xiàn)業(yè)務(wù)信息的無(wú)縫集成,即已成為電力企業(yè)信息化過(guò)程中的熱點(diǎn)問題。然而在實(shí)際應(yīng)用中,可能遇到以下2個(gè)問題:一是公共信息模型(CIM)隨著應(yīng)用的需求不斷進(jìn)化,版本更新頻繁,各廠家的產(chǎn)品在版本上不易保持同步,造成模型語(yǔ)義的差異;二是不同應(yīng)用或不同企業(yè)之間可能需要根據(jù)內(nèi)部需求,對(duì)CIM進(jìn)行相應(yīng)的擴(kuò)展,那么私有擴(kuò)展模型可能導(dǎo)致應(yīng)用間的語(yǔ)義難以辨識(shí)。這2個(gè)問題可歸結(jié)為信息模型不匹配,及模型語(yǔ)義缺乏一致性[2]。要實(shí)現(xiàn)各個(gè)組件或產(chǎn)品間的信息共享或者交互,模型的一致性是重要的前提,模型的版本或者模型定義不同可能會(huì)帶來(lái)數(shù)據(jù)交互失敗以及信息提取錯(cuò)誤等問題,因此進(jìn)行公共信息模型的校驗(yàn)是比較必要的[1]-[2]。
目前國(guó)內(nèi)外正在使用的重點(diǎn)常見本體解析工具包可給出如下闡釋描述。
1) Jena解析工具包。時(shí)下,國(guó)外公司通過(guò)OWL解析包Jena制作了一個(gè)用于CIM模型解析以及校驗(yàn)的工具,可以完成特定版本CIM模型的解析和校驗(yàn)。但是由于CIM模型更新快速,以致于由Jena構(gòu)建的解析工具整體滯后CIM的更新速度,即使得最新的CIM模型有效實(shí)現(xiàn)優(yōu)質(zhì)解析及校驗(yàn),已有研究指出該解析校驗(yàn)工具在電力系統(tǒng)的使用將存在重大的局限性[3]。
2) Protégé OWL API工具包。 Protégé是一種樹形式的本體編輯方式,能夠允許本體模型操作人員在創(chuàng)建或解析相應(yīng)視圖時(shí)維護(hù)概念、關(guān)系與屬性的樹狀層次結(jié)構(gòu),通過(guò)本體模型的樹狀層次結(jié)構(gòu)對(duì)本體模型所包含的信息進(jìn)行解析。只是這種方式要更加側(cè)重于如下人群,也就是:對(duì)于本體模型的結(jié)構(gòu)以及語(yǔ)義具有清晰理解的專業(yè)人員適宜使用。
為了能夠更好地核心切合電力系統(tǒng)的CIM模型,并且在解析以及校驗(yàn)過(guò)程中能清晰地跟蹤各函數(shù)及對(duì)象所處理的具體工作,以便于在后期出現(xiàn)解析錯(cuò)誤或者問題時(shí)能輕松地展開問題追蹤,并且做出決定性的精準(zhǔn)修改。本文為此而提出一種不依賴于OWL解析包Jena的解析以及校驗(yàn)方法,采用Java基礎(chǔ)工具包對(duì)構(gòu)建完成的CIM模型進(jìn)行解析,并且根據(jù)電力系統(tǒng)的需求,針對(duì)性地設(shè)計(jì)4個(gè)校驗(yàn)函數(shù)達(dá)成校驗(yàn)?zāi)康摹T诮馕黾靶r?yàn)過(guò)程中出現(xiàn)問題可以追蹤到出現(xiàn)錯(cuò)誤的步驟,高效調(diào)整后即可使用,可以方便得進(jìn)行錯(cuò)誤修改。另外,校驗(yàn)函數(shù)之間相互獨(dú)立,若電力系統(tǒng)有進(jìn)一步的校驗(yàn)需求,則可以編寫定制函數(shù)加入到校驗(yàn)系統(tǒng)中即可使用。
1 工具及相關(guān)技術(shù)
1.1 DOM4J
DOM4J是一個(gè)Java的XML API,是JDOM的升級(jí)品,設(shè)計(jì)上可用于XML文件的讀取。DOM4J是一個(gè)十分優(yōu)秀的Java XML API,功能強(qiáng)大、且易于使用。不僅如此,在性能上已然超過(guò)SUN公司官方的DOM技術(shù),同時(shí)更是一款開放源代碼的軟件。本文主要運(yùn)用DOM4J對(duì)于XML文件呈現(xiàn)的高超處理能力,來(lái)對(duì)OWL構(gòu)建的CIM模型進(jìn)行解析處理。
1.2 OWL
網(wǎng)絡(luò)本體語(yǔ)言(Web Ontology Language)源起于W3C的開發(fā)設(shè)計(jì),可用于對(duì)本體進(jìn)行語(yǔ)義描述。進(jìn)一步地,OWL有3種表達(dá)能力遞增的子語(yǔ)言[4]。
OWL DL(Description Logic,描述邏輯)將可判定推理能力和較強(qiáng)表達(dá)能力作為首要目標(biāo)。OWL DL提供了描述邏輯的推理功能,描述邏輯是OWL的形式化基礎(chǔ)。本文研究解析的CIM模型即是通過(guò)OWL DL定義實(shí)現(xiàn)構(gòu)建的。
2 本體模型的解析
2.1分類處理
對(duì)構(gòu)建的CIM模型采用信息提取技術(shù),并將得到的模型信息進(jìn)行分類處理,通過(guò)研究將得到的子節(jié)點(diǎn)信息分為五大類,具體則為類、包、屬性、實(shí)例、自己數(shù)據(jù)類型。為了方便之后的解析以及Java模型構(gòu)建,將分類后的節(jié)點(diǎn)存儲(chǔ)于對(duì)應(yīng)的列表中。
對(duì)獲取得到的信息展開遍歷解析工作,本文通過(guò)對(duì)CIM模型構(gòu)建2層XML樹,并通過(guò)遍歷生成樹的方式對(duì)根節(jié)點(diǎn)下的各信息進(jìn)行提取,將獲取的信息通過(guò)Type屬性實(shí)施重點(diǎn)分類處理,構(gòu)建生成Class、Individual、Property、Package、Datatype五個(gè)列表。
2.2實(shí)例建模
獲取子節(jié)點(diǎn)之后再次采用DOM4J的XML樹遍歷功能,對(duì)子節(jié)點(diǎn)下的各條信息進(jìn)行遍歷,分別提取出相應(yīng)的信息。從上文中給出的示例可以得到Class的模型中包括的信息如圖1所示。
由圖1可知,其中的IsDefinedBy標(biāo)注類屬于哪個(gè)包,SubclassOf標(biāo)注該類的父類。
由于OWL語(yǔ)法和Java不同,需要用Java對(duì)CIM模型設(shè)計(jì)提供更多處理則必須對(duì)解析得到的信息再以Java語(yǔ)法進(jìn)行重新建模。但由于在Java中類僅支持單繼承,而OWL卻支持多繼承,因此就要將類的繼承經(jīng)由適當(dāng)轉(zhuǎn)換以滿足下文處理的需求,同時(shí)還要對(duì)CIM模型的信息含量不會(huì)產(chǎn)生影響[5-8]。
由于下文校驗(yàn)中需要對(duì)類的存在性以及類中各屬性的基數(shù)、屬性值進(jìn)行校驗(yàn),為此本文將采用將多個(gè)父類重構(gòu)一個(gè)新類,以涵蓋多個(gè)父類所有的信息。這種處理不會(huì)波及下文中的校驗(yàn)過(guò)程,也能有效實(shí)現(xiàn)對(duì)于多繼承到單繼承的轉(zhuǎn)換。因?yàn)榇颂巸H在該類處理過(guò)程中對(duì)于多父類進(jìn)行重新構(gòu)建,并不影響原始信息[9-10],對(duì)于其他類處理時(shí)的父類查找以及信息集成也不會(huì)不產(chǎn)生任何作用效果。
2.3 構(gòu)建整體模型
1)同上節(jié)中的方法,可以得到Package的Java模型,從其IsDefinedBy屬性可知上一層定義的包名,如此縱向迭代即可獲得模型中定義的包結(jié)構(gòu)。得出Java中的以“.”連接的包名結(jié)構(gòu)。
2)解析重構(gòu)生成的模型存放于List中,通過(guò)迭代列表對(duì)比URI的方式查找需要的類。
3)通過(guò)類模型中的SubclassOf屬性獲取對(duì)應(yīng)類的所有父類,通過(guò)前述提及的構(gòu)建方法,將同一個(gè)類的多個(gè)父類合并成一個(gè)新類,只用于該類的繼承,其余類之間的關(guān)系與構(gòu)成的新類無(wú)關(guān)??v向迭代以生成所有類的繼承關(guān)系。具體合并方式如圖2所示。
4)在解析過(guò)程中通過(guò)Type的標(biāo)注就會(huì)發(fā)現(xiàn)屬性可以分為5類,分別為Property、DatatypeProperty、FunctionalProperty、ObjectProperty和InverseFunctionalProperty。其中,DatatypeProperty為數(shù)據(jù)屬性,約束該屬性值的數(shù)據(jù)類型。
5)OWL中類的對(duì)象屬性(ObjectPorperty)可認(rèn)定為是該類的父類,因此解析類的對(duì)象屬性需要該類的所有父類,縱向迭代即可獲取所有對(duì)象屬性約束。在OWL中,對(duì)象屬性分為2種,一種被存在量詞所約束,另一種被全稱量詞所約束。OWL API中,有2個(gè)不同的類型與之相對(duì)應(yīng),分別為OWLObjectAllValuesFrom和OWLObjectSomeValuesFrom。
6)遍歷實(shí)例列表,獲取每個(gè)實(shí)例的Type屬性值,實(shí)例模型中的Type標(biāo)注的是該實(shí)例所屬的類名。將獲取到的屬性值與類列表中的Name屬性值提供對(duì)照比較,找到對(duì)應(yīng)的類,建立起類與實(shí)例的關(guān)系。
通過(guò)以上步驟可以得到轉(zhuǎn)變完成以后以Java語(yǔ)法整體構(gòu)建實(shí)現(xiàn)的CIM模型,如圖3所示。
3 待校驗(yàn)RDF文檔解析
CIM/XML是將CIM語(yǔ)義信息模型及其擴(kuò)展映射為包含電力系統(tǒng)模型信息的CIM/RDF應(yīng)用,因此必須遵守CIM語(yǔ)義及其自己的約束機(jī)制 [1] 。如前所述,CIM版本的快速更新以及各廠家根據(jù)各自的需求對(duì)CIM模型的私有擴(kuò)展即使得CIM/XML和OWL構(gòu)建的CIM模型表現(xiàn)出一定差別,因此為了更好地創(chuàng)建提供信息交互以及文件信息的讀取,則需要對(duì)CIM/XML文件引入正確性校驗(yàn)環(huán)節(jié),如存在不符合當(dāng)前CIM模型的信息需在有效更正后方能正確地進(jìn)行信息交互。
4 文件校驗(yàn)
本文中設(shè)計(jì)提出的公共信息模型的校驗(yàn)總共劃定為4個(gè)校驗(yàn)方法,分別為類的存在性校驗(yàn)、屬性存在性校驗(yàn)、屬性基數(shù)校驗(yàn)以及屬性值類型校驗(yàn)。下面對(duì)這4種校驗(yàn)的具體方法展開詳細(xì)剖析與論述。
4.1 類存在校驗(yàn)
由于版本更新以及各廠商對(duì)于私有功能的拓展,可能會(huì)發(fā)生更改類名或者添加部分特殊需要的類以適用特定的場(chǎng)景等事件,此時(shí)在CIM/XML中就可能出現(xiàn)CIM語(yǔ)義信息模型定義中根本不存在的類,這就使得需要對(duì)類的存在性進(jìn)行校驗(yàn),以確保在信息交互的時(shí)候每個(gè)類都能在CIM中找到與之對(duì)應(yīng)的模型,高效實(shí)現(xiàn)信息加載和讀取。
4.2 屬性存在校驗(yàn)
每個(gè)子節(jié)點(diǎn)下面有若干屬于該子節(jié)點(diǎn)的屬性,在CIM/XML文檔中為子節(jié)點(diǎn)更下一層的子節(jié)點(diǎn),依然采用DOM4J中設(shè)計(jì)研發(fā)的XML樹的遍歷函數(shù)對(duì)其進(jìn)行遍歷解析,可以得到每一條屬性信息。子節(jié)點(diǎn)下的屬性值包括其父類的屬性,需要通過(guò)一個(gè)類名找到所有與其相關(guān)的父類,并且得到父類的所有屬性,用于屬性存在性校驗(yàn)。
4.3 屬性基數(shù)校驗(yàn)
網(wǎng)絡(luò)本體語(yǔ)言中對(duì)于屬性基數(shù)的約束有2類。一類為屬性基數(shù)約束,在屬性中通過(guò)maxCardinality或者minCardinality進(jìn)行約束,另一類則通過(guò)FunctionalProperty以及InverseFunctionalProperty進(jìn)行全局屬性約束。
具體過(guò)程中,分別對(duì)以上2類約束研究采用了遍歷校驗(yàn),通過(guò)獲取CIM模型的節(jié)點(diǎn)信息,對(duì)以上4個(gè)關(guān)鍵字設(shè)置了比對(duì)查找,若存在相應(yīng)屬性條,則進(jìn)行屬性基數(shù)校驗(yàn)。若對(duì)應(yīng)節(jié)點(diǎn)下的相應(yīng)屬性基數(shù)不符合CIM模型的約束,則生成一則屬性基數(shù)錯(cuò)誤信息。
4.4 屬性值校驗(yàn)
在OWL中,屬性值分為Integer、String、Float等幾類,研究中對(duì)于CIM/XML中屬性值的校驗(yàn)主要分為2部分,一為屬性值類型校驗(yàn),確保屬性的屬性值滿足信息模型中的約束條件;另一為屬性值域校驗(yàn),使得屬性的值域滿足信息模型中的約束?;诖?,兩者相應(yīng)的設(shè)計(jì)論述可分做如下呈現(xiàn)
4.4.1屬性值類型校驗(yàn)
CIM/XML模型中對(duì)于屬性值類型的約束只有Integer、String、Float三類,因此需要區(qū)分屬性值的類型后再與模型中的約束值配置指定比對(duì),若兩者相符則通過(guò)校驗(yàn),否則添加一則“屬性值類型錯(cuò)誤”信息。
屬性值的結(jié)構(gòu)比較復(fù)雜和隨機(jī),若設(shè)計(jì)匹配算法不僅繁瑣,也容易忽略細(xì)節(jié)因素,導(dǎo)致校驗(yàn)存在漏洞,為了更方便、也更準(zhǔn)確地實(shí)現(xiàn)了結(jié)構(gòu)比對(duì),本文選用正則表達(dá)式對(duì)屬性值進(jìn)行文本轉(zhuǎn)換校驗(yàn)。
正則表達(dá)式又稱規(guī)則表達(dá)式,是計(jì)算機(jī)學(xué)科的一個(gè)基本概念。正則表通??捎脕?lái)檢索、替換那些符合某個(gè)模式的文本。研究中需用到的正則符號(hào)則如表1所示:
采用Java語(yǔ)言中String類的matches方法即可將獲取到的屬性值上述正則表達(dá)式展開設(shè)計(jì)比對(duì),若符合正則表達(dá)式內(nèi)置規(guī)定的結(jié)構(gòu),則返回1,否則返回0。通過(guò)返回值即可判斷屬性值是否為數(shù)據(jù)類型:若返回為1,則為數(shù)據(jù)類型;否則即為String類型。通過(guò)String類的indexof方法獲取屬性值中小數(shù)點(diǎn)的位置,若小數(shù)點(diǎn)的位置大于0,即為float類型,否則可判定為integer類型。
4.4.2屬性值域校驗(yàn)
在OWL中對(duì)于屬性值的約束主要有3個(gè),分別為:owl:AllValuesFrom、owl:SomeValuesFrom、owl:HasValue。
對(duì)所獲取的CIM模型進(jìn)行信息提取,通過(guò)上述3個(gè)關(guān)鍵字比對(duì),查看CIM模型是否存在屬性值域約束,若存在相應(yīng)約束,則對(duì)CIM/XML中的對(duì)應(yīng)屬性進(jìn)行相應(yīng)校驗(yàn);若屬性值域不滿足模型中的約束條件,則添加一條“屬性值域錯(cuò)誤”信息。
5 測(cè)試
本文選用CIM_2009模型進(jìn)行解析,通過(guò)解析程序能兩項(xiàng)生成設(shè)計(jì)預(yù)期的各個(gè)信息列表,根據(jù)上文信息實(shí)現(xiàn)模型重構(gòu)之后存入對(duì)應(yīng)列表執(zhí)行校驗(yàn)操作。
為了方便測(cè)試以及利于解析結(jié)果的完整查看,本文在測(cè)試環(huán)節(jié)中將解析得到的各個(gè)信息列表存入數(shù)據(jù)庫(kù)。運(yùn)行解析完成后生成的數(shù)據(jù)表如圖4所示。
從以上數(shù)據(jù)表中可以看到整個(gè)模型中總共解析生成994個(gè)類,4169個(gè)屬性,639個(gè)實(shí)例,73個(gè)數(shù)據(jù)包和107個(gè)數(shù)據(jù)類型。根據(jù)解析所得的各個(gè)信息繼續(xù)推進(jìn)模型的校驗(yàn)工作。
校驗(yàn)工作的完整步驟流程則如下所示:
1)將待校驗(yàn)的RDF文檔導(dǎo)入程序后即選擇了比對(duì)操作,比對(duì)之后出現(xiàn)2個(gè)類不存在錯(cuò)誤信息,在CIM_2009模型中沒有定義Feeder類,而RDF文檔中存在Feeder的實(shí)例對(duì)象,如需進(jìn)行信息交互必須將RDF統(tǒng)一成CIM模型所約束的模型實(shí)例。校驗(yàn)結(jié)果中存在2個(gè)Feeder實(shí)例,具體信息如圖5所示。
2)對(duì)于屬性存在性校驗(yàn)中,RDF文檔中的多個(gè)實(shí)例存在Equipment.curAssetModel屬性,而在CIM模型中未曾定義該屬性,因此所有包含此屬性的類實(shí)例都出現(xiàn)在“屬性不存在錯(cuò)誤”信息列表中。由執(zhí)行結(jié)果中截取一個(gè)結(jié)果實(shí)例即如圖6所示。
3)在屬性存在性校驗(yàn)中,還有另外一種情況就是當(dāng)前實(shí)例所屬的類以及其所有的父類都不存在該實(shí)例中設(shè)計(jì)出現(xiàn)的屬性,這也可歸結(jié)為是一種屬性的非法使用。在本文所用的測(cè)試算例中多次中出現(xiàn)了
Equipment.EquipmentContainer屬性,而其所有的父類都不存在該屬性,因此生成了一條“屬性不存在錯(cuò)誤”信息。從執(zhí)行結(jié)果中截取一個(gè)實(shí)例效果如圖7所示。
4)屬性基數(shù)以及屬性值類型均能順利通過(guò)校驗(yàn)。
通過(guò)上述校驗(yàn)步驟能快速發(fā)現(xiàn)待校驗(yàn)RDF文檔中出現(xiàn)的不符合CIM模型約束的信息,而當(dāng)于其他實(shí)例應(yīng)用發(fā)生信息交互時(shí)就需要進(jìn)行更正以確保交互的正確性。
6 結(jié)束語(yǔ)
通過(guò)本文的方法對(duì)OWL構(gòu)建的CIM模型進(jìn)行解析以及校驗(yàn),在一定程度上能夠改善RDF文檔的規(guī)范有序,從而確保在CIM快速更新以及私有拓展普遍的電網(wǎng)系統(tǒng)中能夠有效實(shí)現(xiàn)信息交互與文件信息加載。
本文只通過(guò)Java基礎(chǔ)工具包進(jìn)行模型解析,不采用集成工具使得整個(gè)系統(tǒng)的后期拓展成為可能,在CIM模型更新后即能在最小改動(dòng)之下最為高效地展現(xiàn)新模型的解析及校驗(yàn)工作的良好成果。
在特定場(chǎng)景的需求下,需要特殊的校驗(yàn)條件或者增加其他校驗(yàn)約束也能通過(guò)添加方法快速實(shí)現(xiàn)。對(duì)于整個(gè)校驗(yàn)過(guò)程能清楚展現(xiàn),對(duì)于校驗(yàn)出現(xiàn)的錯(cuò)誤信息也能更為直觀地跟蹤具體出現(xiàn)錯(cuò)誤信息的環(huán)節(jié)。
參考文獻(xiàn)
[1]曹哲,劉東,包海龍. 基于本體的公共信息模型更新與擴(kuò)展分析[J].電力系統(tǒng)自動(dòng)化,2013,37(11):71-75.
[2]于洋,劉東,陸一鳴,等. 基于本體的IEC61968標(biāo)準(zhǔn)信息模型一致性校驗(yàn)[J].電力系統(tǒng)自動(dòng)化,2012,36(14):46-51.
[3]趙會(huì)群,張?jiān)娰?,趙俊寶,等,本體解析的應(yīng)用研究[J].計(jì)算機(jī)時(shí)代,2012(7):20-22.
[4]倪歡,許卓明. OWL本體查詢技術(shù)研究[J].河海大學(xué)學(xué)報(bào)(自然科學(xué)版),2006,34(3):333-336.
[5]蔚曉娟,冉靜,李愛華,等. 基于DOM的XML解析與應(yīng)用[J].計(jì)算機(jī)技術(shù)與發(fā)展,2007,17(4):86-88,139.
[6]王梅.網(wǎng)絡(luò)本體語(yǔ)言(OWL)的標(biāo)準(zhǔn)體系解析[J].圖書情報(bào)工作,2005,49(7):20-24.
[7] 張屹峰. DOM4j解析技術(shù)探究[J].現(xiàn)代計(jì)算機(jī)(專業(yè)版),2011(17):39-42.
[8]陳飛飛. 基于DOM4J的XML文檔解析技術(shù)研究與應(yīng)用[J].軟件導(dǎo)刊,2016,15(3):36-37.
[9]LIU Hongxing, YANG Qing. Semantic analysis approach for construction of OWL ontology[J].Journal of Southeast University,2006,22(3):365-369.
[10]SIRIN E,PARSIA B,GRAU B C,et al.Pellet:A practical OWL-DL reasoner[J]. Journal of Web Semantics-Science,Services and Agents on the World Wide Web,2007,5(2):51-53.