繁体   English   中英

课堂上的OWL交叉

[英]OWL Intersection on class level

我有这样的类层次结构:

Thing
  - ClassA
    -ClassC
    -ClassD
  - ClassB
    -ClassC
    -ClassE

C类是ClassA和ClassB的子类,而ClassD和ClassE只是ClassA或ClassB的子类

现在我想指定一个类,它等同于ClassA和ClassB的子类的交集。 以下不起作用:

NamedClass a owl:Class
NamedClass owl:equivalentClass (ClassA and ClassB)

原因是推理器使用这种规则来对个体进行分类,即我有一个类型为ClassA和ClassB的个体Ind1,它将被归类为NamedClass类型。 这不是(仅)我想要的。 我希望ClassC本身是NamedClass的子类。

我知道这是可以使用规则(例如SPIN)实现的,但它可以在没有规则的情况下完成吗?

让我们从初始层次结构开始,包括F,但在我们声明F等于A和B的交集之前:

在此输入图像描述

然后我们将(A和B)作为等价于F的类添加.Protégé足够聪明,可以在每个相交的类下呈现相等或交叉子类,所以我们在这里看到F出现在两个地方。

在此输入图像描述

推理者也可以确认这种关系。 在这里,我打开了Pellet,将F输入到DL查询中,并询问了子类。 果然,C是F的子类:

在此输入图像描述

这是您可以复制和粘贴的本体:

@prefix :      <http://stackoverflow.com/q/22221549/1281433/> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

:ontology a owl:Ontology .

:A a owl:Class .
:B a owl:Class .
:C a owl:Class ; rdfs:subClassOf  :A , :B .
:D a owl:Class ; rdfs:subClassOf  :A .
:E a owl:Class ; rdfs:subClassOf  :B .
:F a owl:Class ;
     owl:equivalentClass [ a owl:Class ;
                           owl:intersectionOf  ( :A :B ) ] .

是的,您可以定义一个类被定义为使用OWL的两个其他类的交集。 检查OWL 2 Primer

希望我帮忙!

PS如果您想对模型应用更高级的规则,我建议使用SWRL ,这是一个w3c推荐。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM