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

How Do I Get A Dataype's EquivalentClass in OWL API?

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

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

ontology 正在使用以下构造:

如果理解正确,你有一个特定的 class "c" 被定义为等同于 oneOf many individuals,那么我认为这是获得那些 "allowed values" 的一种方法:

    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);
    }

这是我想出的:

    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 的演员阵容。一定有更好的办法。