2

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

4

2 回答 2

2

我同意 cygri 的观点,与#netlike #Nodethis 相关似乎没有意义,并且您可能希望所有的实例#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 出现的上下文总是清楚地表明该术语所指的内容。

于 2012-10-13T12:16:21.080 回答
2

首先,请注意有两种 XML 语法(除了其他几种非 XML 语法)可用于编写 OWL。您的代码片段采用 RDF/XML 语法。另一种语法是 OWL/XML。OWL Primer有两种语法的例子。

你的片段说:

  • URI<#net>标识一个类。
  • 此类具有标签“网络”(一个字符串)。
  • 此类与由 URI 标识的事物处于“hasPart”关系<#Node>

前两件事是有道理的,但最后一点是没有道理的。我想你真正想说的是:

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

查看 OWL Primer 中的示例应该会让您对如何写下这些内容有一个不错的想法。但还要注意,手工编写 RDF/XML 语法既乏味又容易出错。您可能希望使用 TopBraid Composer 之类的 OWL 编辑器或 OWL-API 之类的编程库来创建您的 OWL 文件。如果您真的想手动编写它们,我建议使用 Turtle 语法(同样,Primer 中有示例),因为它更具可读性,并且可以让您抢先学习 SPARQL,它是 OWL 和 RDF 的查询语言。

于 2012-10-13T09:06:00.667 回答