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