2012-10-13 37 views

回答

2

首先,請注意,您可以使用兩種XML語法(除了其他幾種非XML語法)來編寫OWL。您的代碼片段採用RDF/XML語法。另一種語法是OWL/XML。 OWL Primer有兩種語法的例子。

您的片段說:

  • 的URI標識<#net>一類。
  • 該類有標籤「網絡」(一個字符串)。
  • 此類與URI <#Node>標識的內容具有「hasPart」關係。

前兩件事情是有道理的,但最後一件事情並不真實。我想你真正想說的是:

  • URI <#Node>也標識一個類。
  • URI <#hasPart>標識連接兩個類的個人(owl:ObjectProperty)的屬性。
  • hasPart屬性的主題是網絡(換句話說,hasPart的域是#net)。
  • hasPart屬性的對象是節點(換句話說,hasPart的範圍是#node)。

查看OWL入門的例子應該給你一個體面的想法如何寫下這些東西。但是請注意,手工編寫RDF/XML語法是很乏味和容易出錯的。您可能想要使用像TopBraid Composer這樣的OWL編輯器,或者像OWL-API這樣的編程庫來創建OWL文件。如果你真的想手動編寫它們,我推薦使用Turtle語法(再次,Primer有示例),因爲它更具可讀性,並且讓你在學習SPARQL(OWL和RDF的查詢語言)方面領先一步。

+0

我想在貓頭鷹中開發一個本體論,以便所有節點都可以包含與其他人的關係,這些關係可以是雙向的。根據我的理解,我們可以定義 不同類別的個人之間的關係。我需要定義關係的 在任何級別之間的類本身 之間的關係是層次結構中的默認關係。 – parsa

2

我同意cygri,有關#net#Node這樣似乎沒有任何意義,也許你會喜歡的#net所有實例都具有一個部分或者一些部件的#Node實例。要做到這一點,你可以寫:

<owl:Class rdf:ID="Node"/> 
<owl:Class rdf:ID="net"> 
    <rdfs:subClassOf> 
     <owl:Restriction> 
      <owl:onProperty rdf:resource="#hasPart"/> 
      <owl:someValuesFrom rdf:resource="#Node"/> 
     </owl/Restriction> 
    </rdfs:subClassOf> 
</owl:Class> 

你可能仍然想定義直接連接兩個類的屬性。例如:

<#Node> <#isSimilarTo> <#Vertice> . 

要在OWL做到這一點,你可以定義一個owl:AnnotationProperty

<owl:AnnotationProperty rdf:about="isSimilarTo"/> 
<owl:Class rdf:ID="Node"> 
    <isSimilarTo rdf:resource="#Vertice"/> 
</owl:Class> 

或者你可以使用「雙關語」,也就是使用一個類的實例,例如:

<owl:ObjectProperty rdf:about="isSimilarTo"/> 
<owl:Class rdf:ID="Node"> 
    <rdf:type rdf:resource="&owl;Thing"/> 
    <isSimilarTo> 
     <owl:Thing rdf:about="#Vertice"/> 
    </isSimilarTo> 
</owl:Class> 

請注意,在OWL DL中,必須顯式鍵入所有實例。這裏,#Node被聲明爲owl:Thing的類和實例。這並不意味着owl:Thing可以包含類,但它意味着#Node引用了兩個不同的東西:一個類和一個實例。在OWL DL中,IRI出現的上下文總是清楚說明該術語是指什麼。