在Web本体语言(owl)中创建类之间的关系

时间:2012-10-13 07:38:01

标签: rdf taxonomy ontology owl rdfs

我需要在OWL语法中定义我的本体中的类之间的关系。 我该怎么办?

2 个答案:

答案 0 :(得分:2)

首先,请注意,您可以使用两种XML语法(除了其他几种非XML语法)来编写OWL。您的代码段采用RDF / XML语法。另一种语法是OWL / XML。 OWL Primer包含两种语法的示例。

您的摘录说:

  • URI <#net>标识了一个类。
  • 此类的标签为“network”(字符串)。
  • 此类与URI <#Node>标识的内容属于“hasPart”关系。

前两个事情是有道理的,但最后一个事实并非如此。我猜你真正想说的是:

  • URI <#Node>也标识了一个类。
  • URI <#hasPart>标识连接两个类的个人的属性(owl:ObjectProperty)。
  • hasPart属性的主题是网络(换句话说,hasPart的域名为#net)。
  • hasPart属性的对象是节点(换句话说,hasPart的范围是#node)。

查看OWL Primer中的示例应该会让您有一个体面的想法,如何写下这些东西。但是请注意,手动编写RDF / XML语法是单调乏味且容易出错的。您可能希望使用像TopBraid Composer这样的OWL编辑器或像OWL-API这样的编程库来创建OWL文件。如果你真的想亲自编写它们,我建议使用Turtle语法(同样,Primer也有例子),因为它更具可读性,并且让你在学习SPARQL(OWL和RDF的查询语言)方面有了先机。

答案 1 :(得分: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>

或者您可以使用“punning”,即使用类作为实例,例如:

<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出现的上下文总是清楚地表明该术语的含义。