匿名类不是自动成为 owl:Class 类型的吗?

问题描述

这个本体似乎不太符合我的想法:

@prefix xsd:      <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf:      <http://www.w3.org/1999/02/22-rdf-Syntax-ns#> .
@prefix rdfs:     <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:      <http://www.w3.org/2002/07/owl#> .
@prefix :         <http://test/> .

:AClass a owl:Class .
:BClass a owl:Class .

# Class 1
:cclass owl:equivalentClass [
  owl:intersectionOf (
    :AClass
    :BClass
  )
] .

用隐士推理器将其加载到 protege 中,我不认为 cclassAClassBClass 的子类。然而,以下工作:

.
.
.

# Class 1
:cclass owl:equivalentClass [
  rdf:type owl:Class ;
  owl:intersectionOf (
    :AClass
    :BClass
  )
] .

很好奇为什么我需要添加 rdf:type owl:Class

  1. [ ... ] 不是自动属于 owl:Class 类型的吗?
  2. 或者是两个 owl:Class 的交集使它成为这样?

谢谢

解决方法

在您的第一个片段中,很明显交集必须是 OWL 类,因为它是 OWL 类的交集。因此,:CClass 也必须是 OWL 类。然而,这意味着一些基于术语定义方式的推理。 OWL 解析器不必应用推理,并且应该明确指向术语是 OWL 类、对象属性、数据类型属性、个体、本体、注释属性、数据类型还是某种其他类型的注释。在 owl:intersectionOf 公理的情况下,您可能声明的是数据类型,而不是 OWL 类。所以只有通过查看列表的内容,并找出其中的术语是如何声明的(即,:AClass:BClass),您才能最终推断出它们都是 OWL 类,因此交集是一个 OWL 类,因此它等价于一个 OWL 类,因此 :CClass 应该或可以作为一个 OWL 类出现在编辑器中。为了稳健起见,OWL 工具可以自由地进行这种推断,但 OWL 标准并未强制要求这样做。

编辑澄清:该标准定义了一种将 RDF 图映射到 OWL 的抽象语法的方法,其中使用 owl:intersectionOf 的构造可以映射到类定义或数据类型定义。标准建议区分这两种情况的唯一方法是明确添加 rdf:type owl:Classrdf:type rdfs:Datatype(参见 OWL 2 Web Ontology Language Mapping to RDF Graphs 的表 12 和表 13)。 OWL 解析器可能会超出标准推荐的范围并根据上下文推断出某些类型,但他们不必这样做。我知道 OWL API 做了一些这样的句法推断,以避免在每个无效本体上崩溃。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...