2009-05-29 67 views
2

我從我的OWL本體構建程序集,但是當解析本體時,它會在聲明類型並給出一些值的「數據類型屬性」處引發錯誤消息。我使用Protege v3.4寫了我的本體。OWL程序集生成問題(OWLGrinder)

例如,引發錯誤的數據類型屬性之一是「語言」,類型爲「字符串」,值爲「英語&波斯語」。參考文獻列表如下,由門生言:

<rdf:RDF xml:base="http://www.owl-ontologies.com/Ontology1243411901.owl" 
xmlns="http://www.owl-ontologies.com/Ontology1243411901.owl#" 
xmlns:owl="http://www.w3.org/2002/07/owl#" 
xmlns:protege="http://protege.stanford.edu/plugins/owl/protege#" 
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
xmlns:swrl="http://www.w3.org/2003/11/swrl#" 
xmlns:swrlb="http://www.w3.org/2003/11/swrlb#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
xmlns:xsp="http://www.owl-ontologies.com/2005/08/07/xsp.owl#"> 

與「語言」屬性如下所述:

<owl:DatatypeProperty rdf:ID="language"> 
     <rdfs:range> 
      <owl:DataRange> 
       <owl:oneOf rdf:parseType="Resource"> 
        <rdf:rest rdf:parseType="Resource"> 
         <rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/> 
         <rdf:first rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Farsi</rdf:first> 
        </rdf:rest> 
        <rdf:first rdf:datatype="http://www.w3.org/2001/XMLSchema#string">English</rdf:first> 
       </owl:oneOf> 
      </owl:DataRange> 
     </rdfs:range> 
     <rdfs:domain> 
      <owl:Class> 
       <owl:unionOf rdf:parseType="Collection"> 
        <owl:Class rdf:about="#Teacher"/> 
        <owl:Class rdf:about="#ClassOfCourse"/> 
        <owl:Class rdf:about="#LearningResource"/> 
        <owl:Class rdf:about="#Discussion"/> 
        <owl:Class rdf:about="#Student"/> 
       </owl:unionOf> 
      </owl:Class> 
     </rdfs:domain> 
    </owl:DatatypeProperty> 

我再補充一個本體論到OWLGrinder。生成時發生此錯誤:

Assembly generation failed. 
OWL property 'http://www.owl-ontologies.com/Ontology1243411901.owl#language' has a range declaration that points to _:bnode10579059 but its definition is missing. 
Are you missing an ontology which declares this class? 

每次按「生成」按鈕時,「_:bnode」前面的數字都會更改。 通過從「語言」屬性中刪除值,與下一個DataType屬性相關的另一個錯誤。這意味着每個定義的數據類型屬性(並指定了一些值)正在OWLGrinder中發生錯誤。

我想知道如果有人能指導我處理這個錯誤。

回答

1

當前ROWLEX OwlGrinder期望範圍是一個文字或一個常規的類。我建議創建一個'LanguageList'包裝類,其中包含您的枚舉內分配作爲範圍。我沒有測試這個,但我確實希望它能夠工作。

+0

非常感謝您的回答。問題通過爲每個數據類型範圍創建一個類來解決。 – Ehsan 2009-06-01 08:37:37

0

我已經在http://www.mygrid.org.uk/OWL/Validator中複製/粘貼了本體:它說這個本體(至少)不是OWL-lite本體。這對您的Protege配置可能是一個問題?

+0

您好Pierre,非常感謝您的回答。我在驗證器站點上粘貼了我的整個本體,並且該站點將其驗證爲OWL-DL。 OWLGrinder只與OWL-Lite一起工作嗎?是否有任何其他工具從本體論進行組裝? – Ehsan 2009-05-30 20:59:19

2

我對OWLGrinder不熟悉,但是可以嘗試聲明一個命名類,如ExpectedLanguages(給你的匿名節點一個URI),然後用它作爲你的language謂詞的範圍。一個縮寫的例子(Turtle格式):

:ExpectedLanguages 
    a owl:DataRange ; 
    owl:oneOf (
     "Farsi"^^xsd:string 
     "English"^^xsd:string 
    ); 
. 

:languages 
    rdfs:range :ExpectedLanguages ; 
. 

您使用OWL enumerated datatype的要求,你的代碼/解析器/推理是OWL-DL在最低標準。

_:bnodeXXX(空白節點/匿名節點)每次都有一個新ID的原因是因爲它是空白的。但是,爲了在內存中的RDF圖形(模型)中識別它,需要在加載每個匿名節點時生成一個ID,以便在分析模型時可以唯一標識每個節點(匿名或名稱)所以它的輸入和輸出參考可以被識別。

+0

非常感謝Phil M.先生,我從你的答案中學到很多東西。 該問題通過爲每個數據類型範圍創建一個類來解決。 – Ehsan 2009-06-01 08:31:38

1

Intellidimension提供了一個SDK,可以將OWL-Lite,OWL-Full或OWL-DL轉換爲.NET類。你可能想看看這個。

旁註
我想你混淆了域的語義在你的本體。看起來你試圖說「語言可能只存在於老師,課程,學習資源,討論,學生」上,實際上你說的是「如果語言被用來描述一個實例可以被推斷爲UnionOf Teacher ,課程課程,學習資源,討論和學生。「。這是對OWL語義的常見誤解,因爲它感覺像域應該限制屬性的使用,而實際上它並不是OWL的功能(模式/驗證)。 OWL僅用於描述應根據使用情況推斷的內容,並不規定使用情況。

Domain semantics described in OWL guide.

通過在語言屬性的域名通過unionOf你是說「正在使用該語言屬性描述什麼是老師,或者ClassOfCourse,或LearningResource,或討論,或學生」。我認爲這通常沒有意義。

UnionOf semantic described in OWL guide.

範圍的相似之處在於,如果你定義一個屬性的範圍是一個特定類型的比它可以推斷,由該屬性中提到的所有文字/資源是所定義的類型的與範圍聲明。

Range described in OWL guide.