在OWL API中,我无法找到一种方法来检索定义有效值枚举的数据类型的等效类。当我手头有OWLDatatype时,如何获得一组允许的值?
[我尝试将RDF / XML粘贴为代码块,但它不起作用。我甚至看过降价帮助。请告诉我该怎么做。]
本体使用以下结构:
答案 0 :(得分:1)
如果理解正确,你有一个特定的类“c”被定义为等同于多个人,那么我认为这是获取这些“允许值”的一种方法:
Set<OWLClassAxiom> allAx=localOntology.getAxioms(c);
for(OWLClassAxiom ax: allAx){
if(ax.getAxiomType()==AxiomType.EQUIVALENT_CLASSES)
for(OWLClassExpression nce :ax.getNestedClassExpressions())
if(nce.getClassExpressionType()==ClassExpressionType.OBJECT_ONE_OF)
for(OWLNamedIndividual temp: nce.getIndividualsInSignature())
System.out.println(temp);
}
答案 1 :(得分:0)
这是我想出的:
for (OWLDatatype dt : o.getDatatypesInSignature(Imports.INCLUDED)) {
logger.info("found datatype {} labeled '{}'", dt, getOWLEntityLabel(dt));
Set<OWLDatatypeDefinitionAxiom> datatypeDefinitions = o.getDatatypeDefinitions(dt);
for (OWLDatatypeDefinitionAxiom definitionAxiom : datatypeDefinitions) {
logger.info("found datatype definition '{}'", definitionAxiom);
OWLDataRange dataRange = definitionAxiom.getDataRange();
if ( ! dataRange.isDatatype()) {
logger.info("looks like an enumeration");
OWLDataOneOf owlDataOneOf = (OWLDataOneOf) dataRange;
Set<OWLLiteral> values = owlDataOneOf.getValues();
for (OWLLiteral value : values) {
logger.info("Found literal value '{}'", value.getLiteral());
}
}
}
}
我真的不喜欢演员OWLDataOneOf
。必须有更好的方法。