2

这个本体似乎并不完全符合我的想法:

@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 中,我不认为它是orCClass的子类。但是,以下工作:AClassBClass

.
.
.

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

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

  1. 不是[ ... ]自动类型owl:Class吗?
  2. 或者是两者的交集owl:Class使它如此?

谢谢

4

1 回答 1

1

在您的第一个片段中,很明显交集必须是 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 会进行一些这样的语法推断,以避免在每个无效本体上崩溃。

于 2021-05-06T19:24:12.033 回答