我需要在OWL语法中定义我的本体中的类之间的关系。 我该怎么办?
答案 0 :(得分:2)
首先,请注意,您可以使用两种XML语法(除了其他几种非XML语法)来编写OWL。您的代码段采用RDF / XML语法。另一种语法是OWL / XML。 OWL Primer包含两种语法的示例。
您的摘录说:
<#net>
标识了一个类。<#Node>
标识的内容属于“hasPart”关系。前两个事情是有道理的,但最后一个事实并非如此。我猜你真正想说的是:
<#Node>
也标识了一个类。<#hasPart>
标识连接两个类的个人的属性(owl:ObjectProperty
)。#net
)。#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出现的上下文总是清楚地表明该术语的含义。