如何获取指定个体的对象属性值?
How to get the object property values for the specified individual?
我有一个 ontology,使用 Protegé 4.3.0 创建,我会使用 OWL-API 来获取对象 属性 值(即一组 OWLNamedIndividual
个对象)用于指定的个体和对象 属性 表达式。
Set<OWLNamedIndividual> values = reasoner.getObjectPropertyValues(individual, hasPart).getFlattened();
不幸的是上面的指令return没有项目,因为在我的ontology个体之间的关联是通过hasPart
对象属性的一些子对象属性。
UPDATE:在过去的几个小时里,我找到了以下解决方案,以获得与指定的 OWLNamedIndividual
.[=17= 相关的子对象属性]
private Set<OWLObjectProperty> getRelatedSubObjectProperties(OWLNamedIndividual individual) {
HashSet<OWLObjectProperty> relatedObjectProperties = new HashSet<>();
HashSet<OWLObjectPropertyExpression> subProperties = new HashSet<>();
subProperties.addAll(hasPart.getSubProperties(ontology));
Set<OWLClass> types = reasoner.getTypes(individual, true).getFlattened();
for (OWLObjectPropertyExpression property : subProperties) {
Set<OWLClassExpression> domains = property.getDomains(ontology);
for (OWLClassExpression domain : domains) {
if (types.contains(domain.asOWLClass())) {
relatedObjectProperties.add(property.asOWLObjectProperty());
}
}
}
return relatedObjectProperties;
}
然后我将得到对象 属性 值如下:
for (OWLObjectProperty property : getRelatedSubObjectProperties(individual)) {
Set<OWLNamedIndividual> values = reasoner.getObjectPropertyValues(individual, property).getFlattened();
if (values != null) {
for (OWLNamedIndividual value : values) {
// a value associated to the individual
}
}
}
我该如何解决这个问题?
getObjectPropertyValues()
的文档未明确说明将考虑子属性,因此此处的行为可能取决于推理机。您使用的是哪个推理机?
一种解决方法是获取您正在使用的 属性 的所有子属性并遍历所有子属性,这样您将获得所有结果。
我有一个 ontology,使用 Protegé 4.3.0 创建,我会使用 OWL-API 来获取对象 属性 值(即一组 OWLNamedIndividual
个对象)用于指定的个体和对象 属性 表达式。
Set<OWLNamedIndividual> values = reasoner.getObjectPropertyValues(individual, hasPart).getFlattened();
不幸的是上面的指令return没有项目,因为在我的ontology个体之间的关联是通过hasPart
对象属性的一些子对象属性。
UPDATE:在过去的几个小时里,我找到了以下解决方案,以获得与指定的 OWLNamedIndividual
.[=17= 相关的子对象属性]
private Set<OWLObjectProperty> getRelatedSubObjectProperties(OWLNamedIndividual individual) {
HashSet<OWLObjectProperty> relatedObjectProperties = new HashSet<>();
HashSet<OWLObjectPropertyExpression> subProperties = new HashSet<>();
subProperties.addAll(hasPart.getSubProperties(ontology));
Set<OWLClass> types = reasoner.getTypes(individual, true).getFlattened();
for (OWLObjectPropertyExpression property : subProperties) {
Set<OWLClassExpression> domains = property.getDomains(ontology);
for (OWLClassExpression domain : domains) {
if (types.contains(domain.asOWLClass())) {
relatedObjectProperties.add(property.asOWLObjectProperty());
}
}
}
return relatedObjectProperties;
}
然后我将得到对象 属性 值如下:
for (OWLObjectProperty property : getRelatedSubObjectProperties(individual)) {
Set<OWLNamedIndividual> values = reasoner.getObjectPropertyValues(individual, property).getFlattened();
if (values != null) {
for (OWLNamedIndividual value : values) {
// a value associated to the individual
}
}
}
我该如何解决这个问题?
getObjectPropertyValues()
的文档未明确说明将考虑子属性,因此此处的行为可能取决于推理机。您使用的是哪个推理机?
一种解决方法是获取您正在使用的 属性 的所有子属性并遍历所有子属性,这样您将获得所有结果。