0

OWL API では、有効な値の列挙を定義するデータ型に相当するクラスを取得する方法が見つかりません。OWLDatatype が手元にある場合、許可された値のセットを取得するにはどうすればよいですか?

【ここにRDF/XMLをコードブロックとして貼り付けてみたのですがうまくいきません。マークダウンのヘルプも見ました。その方法を教えてください。】

オントロジーは次の構造を使用しています。

  • rdfs:データ型
    • owl:equivalentClass
      • rdfs:データ型
        • フクロウ:oneOf
          • rdf:説明
            • rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#List"
4

2 に答える 2

1

正しく理解していれば、特定のクラス "c" が oneOf 多くの個人と同等であると定義されている場合、これがそれらの "許可され​​た値" を取得する 1 つの方法だと思います。

    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 に答える