0

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

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

本体使用以下构造:

  • rdfs:数据类型
    • 猫头鹰:等效类
      • rdfs:数据类型
        • 猫头鹰:一个
          • rdf:描述
            • rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#List"
4

2 回答 2

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);
    }
于 2015-03-10T23:03:02.890 回答
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。一定会有更好的办法。

于 2015-03-11T16:50:22.013 回答