【发布时间】:2012-10-13 07:38:01
【问题描述】:
我需要在我的本体中用 OWL 语法定义类之间的关系。 我该怎么办?
【问题讨论】:
-
您的代码没有显示出来,我修正了格式。在 StackOverflow 上包含代码 sn-ps 的最简单方法是将每个代码行缩进四个空格。
标签: rdf taxonomy ontology owl rdfs
我需要在我的本体中用 OWL 语法定义类之间的关系。 我该怎么办?
【问题讨论】:
标签: rdf taxonomy ontology owl rdfs
首先,请注意有两种 XML 语法(除了几种其他非 XML 语法)可用于编写 OWL。您的 sn-p 采用 RDF/XML 语法。另一种语法是 OWL/XML。 OWL Primer 包含两种语法的示例。
你的 sn-p 说:
<#net> 标识一个类。<#Node> 标识的事物存在“hasPart”关系。前两件事是有道理的,但最后一点是没有意义的。我猜你真正想说的是:
<#Node> 还标识一个类。<#hasPart> 标识连接两个类别的个人的属性(owl:ObjectProperty)。#net)。#node)。查看 OWL Primer 中的示例应该会让您对如何写下这些内容有一个不错的想法。但还要注意,手工编写 RDF/XML 语法既乏味又容易出错。您可能想使用像 TopBraid Composer 这样的 OWL 编辑器,或像 OWL-API 这样的编程库来创建您的 OWL 文件。如果你真的想手工编写它们,我建议使用 Turtle 语法(同样,Primer 中有示例),因为它更具可读性,并且可以让你在学习 SPARQL(OWL 和 RDF 的查询语言)方面占得先机。
【讨论】:
我同意 cygri 的观点,像这样将 #net 与 #Node 关联起来似乎没有意义,并且您可能希望 #net 的所有实例都有一部分或部分是 @987654324 的实例@。为此,您可以编写:
<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 出现的上下文总是清楚地表明该术语的含义。
【讨论】: