【发布时间】:2015-04-24 01:37:40
【问题描述】:
假设有两种类型的类,一种(A)由另一种(B)“isManagedBy”。下面的猫头鹰截图说明了这种情况。 A 类型有多个类(由其他类“管理”)和 B 的多个类。实际上,A 类型和 B 类型的类 bot 之间也存在层次结构。
<owl:ObjectProperty rdf:about="#isManagedBy"/>
<owl:Class rdf:about="#FunctionManagement">
<rdfs:subClassOf rdf:resource="..."/>
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="#isManagedBy"/>
<owl:someValuesFrom rdf:resource="#SymposiumPlanner2013"/>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:about="#SymposiumPlanner2013"/>
...
问题:在给定任意类 A 的情况下获取所有类型 B 的类。
想法:遍历 B 类型的所有类。对于每个 B 类,使用 Reasoner 的 isSatisfiable() 方法检查给定的 A 是否具有类 B 的 ObjectProperty“isManagedBy”(直接或继承)。
OWLObjectProperty objProp = df.getOWLObjectProperty(IRI.create("#isManagedBy"));
OWLClassExpression expression;
for (OWLClass B : SetOfAllBs) {
expression = df.getOWLObjectIntersectionOf(A, df.getOWLObjectSomeValuesFrom(objProp, B));
if (reasoner.isSatisfiable(expression)) {
// do something
}
}
不幸的是,推理器对所有类型 B 的类都返回可满足的结果。
问题:如何解决这个问题?
【问题讨论】:
-
这是什么意思:“有多个类型 A 的类(由其他类“管理”)和多个 B 类。”?你的意思是A和B类型的子类?还是A类和B类的个人?这很重要,因为稍后您会编写:Idea:遍历所有 B 类型的类。对于每个 B 类,使用 Reasoner 的方法检查给定的 A 是否具有类 B 的 ObjectProperty“isManagedBy”(直接或继承) isSatisfiable() 方法。 但是你的意思是什么? 类没有属性。属性与个人有关。你可能的意思是...
-
..."遍历 B 的子类并检查每个子类 Bi 是否是限制类 (isManagedBy some Ai) 的子类,其中 Ai 是 A 的子类目标是什么?
-
@Joshua:通过多个类(OWlClass),我的意思是不只有一个类“类型”A,如示例(#FunctionManagement)所示。还有其他的,比如说#FunctionManagement1、#FunctionManagement2、#FunctionManagement2。 B 类型也有多个类,而不仅仅是一个,如示例中的#SymposiumPlanner2013、#SymposiumPlanner2013b、#SymposiumPlanner2013c、#SymposiumPlanner2013d....此外,A 和 B 类型的类也具有层次结构。如示例所示,#FunctionManagement 是 A 类型的某个其他类的子类,例如 #FunctionManagementParent...
-
@Joshua:本体中只有类(OWLClass)和对象属性(OWLObjectProperty),没有别的(没有个体)……
-
@Joshua:术语“类型”可能有点误导,这并不意味着存在某种类型的类的实例。它只是意味着有两种“类型”,“集合”,无论是什么类。而类型类 A isManagedBy 类型类 B。
标签: rdf semantic-web owl owl-api reasoning