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

Rdf 在web本体语言(owl)中创建类之间的关系,rdf,taxonomy,ontology,owl,rdfs,Rdf,Taxonomy,Ontology,Owl,Rdfs,我需要用OWL语法在我的本体中定义类之间的关系。 我该怎么办?首先,请注意,有两个XML语法(除了其他几个非XML语法之外)可用于编写OWL。您的代码段采用RDF/XML语法。另一种语法是OWL/XML。有两种语法的例子 你的片段说: URI标识一个类 此类具有标签“网络”(字符串) 此类与URI标识的内容处于“hasPart”关系中 前两件事是有道理的,但最后一件事不是真的。我想你真正想说的是: URI还标识一个类 URI标识连接两个类的个体的属性(一个owl:ObjectPropert

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

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

你的片段说:

  • URI
    标识一个类
  • 此类具有标签“网络”(字符串)
  • 此类与URI
    标识的内容处于“hasPart”关系中
前两件事是有道理的,但最后一件事不是真的。我想你真正想说的是:

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

看看《猫头鹰入门》中的例子,你会对如何写下这些东西有一个不错的想法。但也要注意,手工编写RDF/XML语法既繁琐又容易出错。您可能希望使用像TopBraid Composer这样的OWL编辑器或像OWL-API这样的编程库来创建OWL文件。如果您真的想手工编写它们,我建议您使用Turtle语法(同样,初级读本中也有示例),因为它更具可读性,并且为您学习SPARQL(OWL和RDF的查询语言)提供了一个良好的开端。

首先,请注意,有两种XML语法(以及其他几种非XML语法)你可以用来写猫头鹰。您的代码段采用RDF/XML语法。另一种语法是OWL/XML。有两种语法的例子

你的片段说:

  • URI
    标识一个类
  • 此类具有标签“网络”(字符串)
  • 此类与URI
    标识的内容处于“hasPart”关系中
前两件事是有道理的,但最后一件事不是真的。我想你真正想说的是:

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

看看《猫头鹰入门》中的例子,你会对如何写下这些东西有一个不错的想法。但也要注意,手工编写RDF/XML语法既繁琐又容易出错。您可能希望使用像TopBraid Composer这样的OWL编辑器或像OWL-API这样的编程库来创建OWL文件。如果你真的想手工编写它们,我建议使用Turtle语法(同样,这本初级读物也有示例),因为它可读性更高,并且让你在学习SPARQL(OWL和RDF的查询语言)方面有了一个良好的开端。

我同意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>
或者您可以使用“双关”,即使用类作为实例,例如:

<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>


注意,在OWLDL中,所有实例都必须显式类型化。在这里,
#Node
被声明为
owl:Thing
的类和实例。这并不意味着
owl:Thing
可以包含类,而是意味着
#Node
引用两个不同的东西:一个类和一个实例。在OWL DL中,IRI出现的上下文总是清楚地表明该术语所指的内容。

我同意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>
或者您可以使用“双关”,即使用类作为实例,例如:

<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>


注意,在OWLDL中,所有实例都必须显式类型化。在这里,
#Node
被声明为
owl:Thing
的类和实例。这并不意味着
owl:Thing
可以包含类,而是意味着
#Node
引用两个不同的东西:一个类和一个实例。在OWL DL中,IRI出现的上下文总是清楚地表明该术语所指的内容。

您的代码没有出现,我修复了格式设置。在StackOverflow中包含代码段的最简单方法是将每行代码缩进四个空格。您的代码没有显示,我已修复了格式设置。在StackOverflow中包含代码片段的最简单方法是将每行代码缩进四个空格,因此,所有节点都可能包含与其他节点的双向关系。正如我从protege了解到的,我们可以定义不同类的个体之间的关系。我需要的是在任何级别定义类之间的关系,就像是层次结构中的默认关系。我想在owl,因此所有节点都可能包含与其他节点的双向关系。正如我从protege了解到的,我们可以定义不同类的个体之间的关系。我需要的是在任何级别定义类之间的关系,就像是层次结构中的默认关系一样。