鑒于昨天的結論,今天在本體中補上了幾個子屬性關系、傳遞關系,想驗證一下Jena API的推理功能:
我在旅游本體中加入了一個新類“#旅游目的地”,我按照特色的不同建了五個子類“#避暑勝地”、“#另類生活勝地”、“#娛樂勝地”、“#攝影勝地”、“#歷史文化勝地”。在"#避暑勝地類"中添加了一個約束——屬性“#具有”allValuesFrom“#自然山水景點”,"#自然山水景點"是"#景點"類的一個子類,它有實例"#廬山煙雨朦朧".。這樣,通過說明“#旅游目的地”的一個實例“#江西”,具有地區“#廬山”,而“#廬山”具有景點“廬山煙雨朦朧”,而得到“#江西”具有“#廬山煙雨朦朧”,因為“#具有”是transitive屬性(具有景點和具有地區是具有的子屬性)。我想得到的推理結果是
1. “#江西" "#具有" "#廬山煙雨朦朧"
2.“#江西” rdf:type "#避暑勝地"。
這樣講比較混亂,下面是部分owl文件(可點擊這里下載完整文件):
這是避暑勝地的定義:
<owl:Class rdf:ID="避暑勝地">
<rdfs:subClassOf rdf:resource="#旅游目的地"/>
<rdfs:subClassOf>
<owl:Restriction>
<owl:hasValue>
<owl:Class rdf:ID="自然山水景點"/>
</owl:hasValue>
<owl:onProperty>
<owl:TransitiveProperty rdf:about="#具有"/>
</owl:onProperty>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
這是個體江西的數據:
<旅游目的地 rdf:ID="江西">
<具有地區>
<地區 rdf:ID="廬山">
<具有景點>
<自然山水景點 rdf:ID="廬山煙雨朦朧">
<景點簡介 rdf:datatype=" >幾千萬年前的地殼運動,造就了廬山疊障九層、崇嶺萬仞的赫赫氣勢,伴生出峰詭不窮、怪石不絕的剛陽之美。由于廬山高聳于江湖之間,雨量豐富,年降水量可達1950一2000毫米,故山中溫差大,云霧多,千姿百態,變幻無窮。到廬山旅游,不可不體味廬山的云霧之美!到此消暑,環境幽靜,煩熱頓消,成為全國著名的避暑勝地。這里空氣清新,森林、花鳥、溫泉和眾多的別墅群以及大量的歷史名人騷客留下許多壯美詩篇和名勝古跡、神仙洞府,形成廬山完善的休閑度假地形象。</景點簡介>
<景點位于 rdf:resource="#廬山"/>
<景點星級 rdf:datatype=" >4</景點星級>
</自然山水景點>
</具有景點>
<地區位于 rdf:resource="#江西"/>
</地區>
</具有地區>
</旅游目的地>
然后,我編了一小段代碼測試,我選擇的是OntModelSpec.OWL_DL_MEM_RULE_INF推理功能,結果發現并不能推出江西是個避暑勝地的結論,我反復檢查了我的本體,仍然找不出問題所在,是我的本體不完整,還是Jena推理功能的問題?我還是偏向于前面的原因,因為計算機本體中用Jena的確可以推出WhiteBozZX是個GamingComputer結論,但在那個例子中是用的InfModel。OntModel應該是比InfModel更強推理能力才是,為什么會推不出來呢?下面是推出的關于“江西”的結論:
江西 * :
- (http://www.owl-ontologies.com/unnamed.owl#江西 rdf:type http://www.owl-ontologies.com/unnamed.owl#旅游目的地)
- (http://www.owl-ontologies.com/unnamed.owl#江西 http://www.owl-ontologies.com/unnamed.owl#具有地區 http://www.owl-ontologies.com/unnamed.owl#廬山)
- (http://www.owl-ontologies.com/unnamed.owl#江西 rdf:type rdfs:Resource)
- (http://www.owl-ontologies.com/unnamed.owl#江西 owl:sameAs http://www.owl-ontologies.com/unnamed.owl#江西)
- (http://www.owl-ontologies.com/unnamed.owl#江西 rdf:type owl:Thing)
- (http://www.owl-ontologies.com/unnamed.owl#江西 http://www.owl-ontologies.com/unnamed.owl#具有 http://www.owl-ontologies.com/unnamed.owl#廬山)
- (http://www.owl-ontologies.com/unnamed.owl#江西 http://www.owl-ontologies.com/unnamed.owl#具有 http://www.owl-ontologies.com/unnamed.owl#廬山煙雨朦朧)
Failed to recognized 江西 correctly
可見,可以推出第一個結論:江西具有廬山煙雨朦朧(傳遞屬性),但無法推出江西是個避暑勝地的結果。原因還需進一步分析。
另外,有感于Jena推理功能的薄弱,我只有用*_RULE_INF才能推出第一個結論,而如果用其余幾個,只能得到子類、子屬性有關的推理,難道本體的推理只是這種程度,自然不能滿足實際應用的需要。還是考慮一下外掛推理機吧。
我在旅游本體中加入了一個新類“#旅游目的地”,我按照特色的不同建了五個子類“#避暑勝地”、“#另類生活勝地”、“#娛樂勝地”、“#攝影勝地”、“#歷史文化勝地”。在"#避暑勝地類"中添加了一個約束——屬性“#具有”allValuesFrom“#自然山水景點”,"#自然山水景點"是"#景點"類的一個子類,它有實例"#廬山煙雨朦朧".。這樣,通過說明“#旅游目的地”的一個實例“#江西”,具有地區“#廬山”,而“#廬山”具有景點“廬山煙雨朦朧”,而得到“#江西”具有“#廬山煙雨朦朧”,因為“#具有”是transitive屬性(具有景點和具有地區是具有的子屬性)。我想得到的推理結果是
1. “#江西" "#具有" "#廬山煙雨朦朧"
2.“#江西” rdf:type "#避暑勝地"。
這樣講比較混亂,下面是部分owl文件(可點擊這里下載完整文件):
這是避暑勝地的定義:
<owl:Class rdf:ID="避暑勝地">
<rdfs:subClassOf rdf:resource="#旅游目的地"/>
<rdfs:subClassOf>
<owl:Restriction>
<owl:hasValue>
<owl:Class rdf:ID="自然山水景點"/>
</owl:hasValue>
<owl:onProperty>
<owl:TransitiveProperty rdf:about="#具有"/>
</owl:onProperty>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
這是個體江西的數據:
<旅游目的地 rdf:ID="江西">
<具有地區>
<地區 rdf:ID="廬山">
<具有景點>
<自然山水景點 rdf:ID="廬山煙雨朦朧">
<景點簡介 rdf:datatype=" >幾千萬年前的地殼運動,造就了廬山疊障九層、崇嶺萬仞的赫赫氣勢,伴生出峰詭不窮、怪石不絕的剛陽之美。由于廬山高聳于江湖之間,雨量豐富,年降水量可達1950一2000毫米,故山中溫差大,云霧多,千姿百態,變幻無窮。到廬山旅游,不可不體味廬山的云霧之美!到此消暑,環境幽靜,煩熱頓消,成為全國著名的避暑勝地。這里空氣清新,森林、花鳥、溫泉和眾多的別墅群以及大量的歷史名人騷客留下許多壯美詩篇和名勝古跡、神仙洞府,形成廬山完善的休閑度假地形象。</景點簡介>
<景點位于 rdf:resource="#廬山"/>
<景點星級 rdf:datatype=" >4</景點星級>
</自然山水景點>
</具有景點>
<地區位于 rdf:resource="#江西"/>
</地區>
</具有地區>
</旅游目的地>
然后,我編了一小段代碼測試,我選擇的是OntModelSpec.OWL_DL_MEM_RULE_INF推理功能,結果發現并不能推出江西是個避暑勝地的結論,我反復檢查了我的本體,仍然找不出問題所在,是我的本體不完整,還是Jena推理功能的問題?我還是偏向于前面的原因,因為計算機本體中用Jena的確可以推出WhiteBozZX是個GamingComputer結論,但在那個例子中是用的InfModel。OntModel應該是比InfModel更強推理能力才是,為什么會推不出來呢?下面是推出的關于“江西”的結論:
江西 * :
- (http://www.owl-ontologies.com/unnamed.owl#江西 rdf:type http://www.owl-ontologies.com/unnamed.owl#旅游目的地)
- (http://www.owl-ontologies.com/unnamed.owl#江西 http://www.owl-ontologies.com/unnamed.owl#具有地區 http://www.owl-ontologies.com/unnamed.owl#廬山)
- (http://www.owl-ontologies.com/unnamed.owl#江西 rdf:type rdfs:Resource)
- (http://www.owl-ontologies.com/unnamed.owl#江西 owl:sameAs http://www.owl-ontologies.com/unnamed.owl#江西)
- (http://www.owl-ontologies.com/unnamed.owl#江西 rdf:type owl:Thing)
- (http://www.owl-ontologies.com/unnamed.owl#江西 http://www.owl-ontologies.com/unnamed.owl#具有 http://www.owl-ontologies.com/unnamed.owl#廬山)
- (http://www.owl-ontologies.com/unnamed.owl#江西 http://www.owl-ontologies.com/unnamed.owl#具有 http://www.owl-ontologies.com/unnamed.owl#廬山煙雨朦朧)
Failed to recognized 江西 correctly
可見,可以推出第一個結論:江西具有廬山煙雨朦朧(傳遞屬性),但無法推出江西是個避暑勝地的結果。原因還需進一步分析。
另外,有感于Jena推理功能的薄弱,我只有用*_RULE_INF才能推出第一個結論,而如果用其余幾個,只能得到子類、子屬性有關的推理,難道本體的推理只是這種程度,自然不能滿足實際應用的需要。還是考慮一下外掛推理機吧。