如何在OWL API中获取Dataype的EquivalentClass?

时间:2015-03-10 20:35:05

标签: owl-api

在OWL API中,我无法找到一种方法来检索定义有效值枚举的数据类型的等效类。当我手头有OWLDatatype时,如何获得一组允许的值?

[我尝试将RDF / XML粘贴为代码块,但它不起作用。我甚至看过降价帮助。请告诉我该怎么做。]

本体使用以下结构:

  • 的rdfs:数据类型
    • 猫头鹰:equivalentClass
      • 的rdfs:数据类型
        • 猫头鹰:oneOf
          • 的rdf:描述
            • rdf:type rdf:resource =" http://www.w3.org/1999/02/22-rdf-syntax-ns#List"

2 个答案:

答案 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。必须有更好的方法。