Rdf 在OWL Api 4中检索对象属性的超级属性

Rdf 在OWL Api 4中检索对象属性的超级属性,rdf,owl,protege,Rdf,Owl,Protege,我有一个对象属性汽车和它的子属性法拉利。我想得到超级财产,即汽车法拉利与猫头鹰api 4。我可以得到属性的子属性,但不能得到超级属性。是否缺少任何api?如果直接断言子属性关系,则可以使用该方法 例如: OWLOntology o = ... OWLObjectProperty p = ... o.getObjectSubPropertyAxiomsForSubProperty(p); 我可以通过以下方式做到这一点:- Set<OWLObjectProperty> props =

我有一个对象属性汽车和它的子属性法拉利。我想得到超级财产,即汽车法拉利与猫头鹰api 4。我可以得到属性的子属性,但不能得到超级属性。是否缺少任何api?

如果直接断言子属性关系,则可以使用该方法

例如:

OWLOntology o = ...
OWLObjectProperty p = ...
o.getObjectSubPropertyAxiomsForSubProperty(p);

我可以通过以下方式做到这一点:-

Set<OWLObjectProperty> props = ont.getObjectPropertiesInSignature();
            for (OWLObjectProperty p : props) {
                HashSet<OWLSubObjectPropertyOfAxiom> subPropertySet =   (HashSet)ont.getObjectSubPropertyAxiomsForSuperProperty(p);
                for (OWLSubObjectPropertyOfAxiom subPropAxiom : subPropertySet) {
                    OWLObjectPropertyExpression subObjectProperty = subPropAxiom.getSubProperty();
                    if (subObjectProperty.getNamedProperty().getIRI().equals(relationIRI)) {
                        d.setDerivedFrom(p.getIRI().getShortForm());

                    }
                }
            }
Set props=ont.getObjectPropertiesInSignature();
用于(OWLObjectProperty p:props){
HashSet subpertyset=(HashSet)ont.getObjectSubpertyAsiomForSuperProperty(p);
对于(OWLSubjectPropertyOfaxiom子对象:子对象集){
OWLObjectPropertyExpression subObjectProperty=subpaxiom.getSubperty();
if(subObjectProperty.getNamedProperty().getIRI().equals(relatiori)){
d、 setDerivedFrom(p.getIRI().getShortForm());
}
}
}
如果有更好的方法,请告诉我。

Iterator subItr=ont.getObjectSubpertyAxiomsForSubProperty(factory.getOWLObjectProperty(relationiI)).Iterator();
Iterator<OWLSubObjectPropertyOfAxiom> subItr = ont.getObjectSubPropertyAxiomsForSubProperty(factory.getOWLObjectProperty(relationIRI)).iterator();
            while (subItr.hasNext()) {
                OWLSubObjectPropertyOfAxiom subPropAxiom = subItr.next();
                d.setDerivedFrom(subPropAxiom.getSuperProperty().getNamedProperty().getIRI().getShortForm());
            }
while(subItr.hasNext()){ owlsubjectPropertyOfaxiom subpaxiom=subItr.next(); d、 SetDeriedFrom(subpaxiom.getSuperProperty().getNamedProperty().getIRI().getShortForm()); }

只是补充一下simon的答案……这对我来说很好……

记住,一个给定的属性可以有多个超级属性(这可能会影响您的用例,也可能不会影响您的用例).有效吗?你能展示获取子属性的代码吗?@JoshuaTaylor我发布的答案给了我立即的超级属性,这就是我要寻找的…但我不喜欢我迭代所有对象属性并检查其子属性是否与当前子属性匹配并得出give属性结论的方式作为超级属性。@Ignazio我已经发布了答案。。您可以检查该代码…请建议您是否有其他更好的方法…因为我不喜欢迭代所有对象属性的想法。Simon下面的答案利用了内部索引,所以它会更快。@Ignazio我不是在寻找属性的子属性……我是在寻找给定属性的超属性。是的-在Simon的回答中,方法引用说“bySubProperty”。结果公理将输入属性作为子属性。要获得超级属性,请遍历公理并收集每个公理的超级属性。我将扩展该示例。@Ignazio我正忙于编写其他代码…因此无法回复..感谢您的帮助..扩展代码作为完整答案发布。