蘋果的成長日記

          我還是個青蘋果呀!

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            57 隨筆 :: 0 文章 :: 74 評論 :: 0 Trackbacks
                   原文鏈接 

                   臨近期末,我有一門課程的期末項目是做一個教育領域的本體應用系統(tǒng),所以最近經(jīng)常思考本體在這樣一個系統(tǒng)中所起的作用,以及該如何實現(xiàn)。(本體是否只能在web環(huán)境下發(fā)揮作用,使用本體描述一個獨立系統(tǒng)的模型是否值得?)

          假設要做的是選課系統(tǒng),很容易看出系統(tǒng)里應該有這些對象:課程、學生、教師,它們之間互有聯(lián)系。現(xiàn)在的問題是,本體、Java類和數(shù)據(jù)庫各扮演怎樣的角色?我目前想到的方法有以下幾個:

          1. 在本體(owl)里建立這些類和關系,在Java里建立同樣的Bean類,運行時系統(tǒng)把本體里的individuals轉(zhuǎn)換為Java類的實例,也就是在內(nèi)存里得到一個Java實例的集合,選課的各種操作就是對這個集合的修改,退出系統(tǒng)時再進行反向轉(zhuǎn)換,把修改反映到本體里。在這樣的實現(xiàn)方法中,本體實際上扮演了數(shù)據(jù)庫的角色,所以當數(shù)據(jù)(individuals)很多的時候,效率會很成問題。(Protege的owl編輯工具提供了從本體生成EMF模型代碼的功能,雖然目前還是alpha版,這也許將成為同步兩種模型的不錯選擇。)

          2. 對上面的方法進行修改,讓本體不保存individuals,對Java實例集合的修改最終反映到關系數(shù)據(jù)庫里(利用hibernate不會很困難),運行時系統(tǒng)直接從數(shù)據(jù)庫里取得數(shù)據(jù)轉(zhuǎn)換為Java實例。這樣的實現(xiàn)可以解決效率問題,但和傳統(tǒng)應用區(qū)別不大,本體的作用幾乎為零。

          3. 另一種比較極端的做法是只用本體維護類和individuals,Java方面沒有任何與應用有關的模型,系統(tǒng)一開始把本體讀入內(nèi)存以rdf圖的方式存在,選課操作轉(zhuǎn)換為對此圖的修改(利用Jena等API)。這個方法存在兩個問題,一是效率,二是Java代碼的可讀性下降,這就相當于直接使用JDBC而不是hibernate對數(shù)據(jù)庫操作的區(qū)別。

          在solo項目里我使用的是第一種方式,各方面效果還可以接受,但本體的作用發(fā)揮得很不夠。這是很重要的方面,因為如果和傳統(tǒng)項目沒有區(qū)別,辛辛苦苦引入本體又是為了什么,特別是對本體推理的功能,我想最關鍵的問題還是要找出最適合應用的本體,定義本體的確是一門學問。

          Update:IBM Alphaworks也提供了一組本體工具(包括Orient、EODM和RStar),對EMF的支持應該不錯。今天初步試了一下Orient,它只支持RDF(S),而不支持OWL,所以無法滿足課程項目的要求,Orient的目前版本還有一些小bug,除已知的那些以外,我把.ontology文件輸出為ecore模型總是不成功,而輸出為rdf是可以的。

          Update:推薦一個關于本體和模型驅(qū)動的幻燈片,主要內(nèi)容是介紹應該如何利用UML的可視化編輯功能和元模型的擴展功能來構造本體,這里面介紹了相當多的相關概念(其中很多我甚至沒聽說過),以及它們出現(xiàn)的原因,比較有利于我們理清思路。

          posted on 2005-06-14 09:54 蘋果 閱讀(1038) 評論(0)  編輯  收藏 所屬分類: Jena/RDF/OWL/語義網(wǎng)
          主站蜘蛛池模板: 略阳县| 廊坊市| 佛教| 永吉县| 九龙城区| 南昌县| 门源| 临猗县| 开平市| 镇雄县| 宁夏| 杭锦旗| 潼南县| 丰都县| 蓬安县| 蒙自县| 郸城县| 贵溪市| 泊头市| 琼海市| 民权县| 东港市| 航空| 桂东县| 铁岭县| 乐昌市| 阿拉善盟| 楚雄市| 陵川县| 大足县| 马公市| 义马市| 城固县| 星座| 林甸县| 新安县| 郓城县| 永福县| 荔浦县| 英德市| 武陟县|