2010-01-17 67 views
4

我想讓Pellet將屬性從類傳播到屬於這些類的個人。例如,如果我有屬性X的屬性A和屬性爲rdf:type =屬性A的屬性B,我希望個人B在運行推理器後擁有屬性X.我正在使用OWL 2 New Features頁面上引用的屬性鏈包含技術。如果我在屬性鏈中使用自己的自定義屬性,該技術完美工作,但如果我嘗試使用rdf:type本身,則此方法無效。這裏是我的RDF/XML的一些相關剪輯。rdf上的屬性鏈推理:類型

本體類(由耶拿產生;注意「傳播」屬性,因爲這是我試圖傳播到Person類的個人):

<rdf:Description rdf:about="http://family/person"> 
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Thing"/> 
    <owl:sameAs rdf:resource="http://family/person"/> 
    <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/> 
    <owl:equivalentClass rdf:resource="http://family/person"/> 
    <owl:disjointWith rdf:resource="http://www.w3.org/2002/07/owl#Nothing"/> 
    <j.1:spread rdf:resource="http://spread/specificSpread"/> 
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/> 
</rdf:Description> 

「傳播」屬性本身(書面手動我,不與耶拿產生自耶拿的API不支持對象屬性鏈):

<rdf:Description rdf:about="http://spread/generalSpread"> 
    <owl:propertyChainAxiom rdf:parseType="Collection"> 
     <owl:ObjectProperty rdf:about="http://www.w3.org/1999/02/22-rdf-syntax-ns#type"/> 
     <owl:ObjectProperty rdf:about="http://spread/generalSpread"/> 
    </owl:propertyChainAxiom> 
</rdf:Description> 

推理之前,人俄狄浦斯看起來是這樣的:

<rdf:Description rdf:about="http://family/Oedipus"> 
    <rdf:type rdf:resource="http://family/person"/> 
</rdf:Description> 

的想法是,推理之後,它會是這個樣子:

<rdf:Description rdf:about="http://family/Oedipus"> 
    <rdf:type rdf:resource="http://family/person"/> 
    <j.1:spread rdf:resource="http://spread/specificSpread"/> 
</rdf:Description> 

我有提到RDF一種感覺:類型爲RDF:資源可能是那裏的東西越來越扭曲,因爲我很確定這不是一種資源。但我不知道如何解決它。我跑了通過粒料的命令行lint程序以及和它似乎沒有與它的問題,只是它創造了RDF明確的條目:類型是這樣的:

<owl:ObjectProperty rdf:about="&rdf;type"/> 

看起來有點怪對我來說也可能暗示它不理解我對rdf:type的引用。

任何人都可以闡明可能發生的事情嗎?我真的很感謝任何人可以提供的幫助。

+0

完美的問題semanticoverflow.com – harschware 2011-03-10 22:33:16

+0

在我問這個問題的時候並不存在。 – 2011-03-11 01:52:50

+1

這只是一個只有3個月的寶貝,並不爲人所知:-)但是,我對這個問題的讀者發表了更多評論。和(+1)好問題。 – harschware 2011-03-11 03:08:11

回答

2

非常重要的編輯

它實際上原來,財產傳播OWL DL的領域內是可能的。例如,如果您希望將財產spread與價值simpleSpread(假設兩者都在你的RDF已經定義)傳播,你可能會做這樣的事情(在RDF/XML):

<rdf:Description rdf:about="http://family/person"> 
    <rdfs:subClassOf> 
     <owl:hasValue rdf:resource="http://spread/simpleSpread"/> 
     <owl:onProperty rdf:resource="http://spread/hasSpread"/> 
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Restriction"/> 
    </rdfs:subClassOf> 
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/> 
    </rdf:Description> 

不是那麼重要

好的,爲了使信息完整,我會在這裏發佈相關答案。這些東西來自與用戶郵件列表上的人交談。該線程已存檔,並以我的initial message開頭。按照線索詳細瞭解發生的事情。

基本上,OWL DL不允許在內置屬性和數據類型上「反射」。允許這可能會違反由OWL DL保證的多項式時間可判定性。爲了達到這個目的,你必須使用OWL Full的OWL RL profile,它將OWL中的所有內容都等同處理,從而允許使用超過rdf:type的推斷。

與此相關的主要問題是找到支持DL和RL的推理器(或reasoners的組合),因爲RL比DL更輕量且表達力更低(更不用說不保證在多項式時間內可以確定)。