2

私のオントロジーには、このデータ プロパティを持つ個人がいます。

hasName "somaName"^^string

ただし、クラス式を作成し、インスタンスを取得するために理由付けに送信すると、次のクエリで空のセットが取得されます。

OWLClassExpression x = schema.getFactory().getOWLDataHasValue(schema.getDataProperty("hasName"), schema.getFactory().getOWLLiteral("somaName"));
System.out.println(reasoner.getInstances(x, true));

getDataProperty は単なる小さなメソッドです。

public OWLDataProperty getDataProperty(String dataProperty){
        return factory.getOWLDataProperty("#"+dataProperty,pm);
    }
4

1 に答える 1

3

次のコード スニペットは機能します。コードと比較して、違いを確認してください。このタイプの構成をサポートする推論を使用する必要があります (Hermit はサポートしています)。

//Initiate everything
OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
String base = "http://www.example.org/";
OWLOntology ontology = manager.createOntology(IRI.create(base + "ontology.owl"));
OWLDataFactory factory = manager.getOWLDataFactory();
//Add the stuff to the ontology
OWLDataProperty hasName = factory.getOWLDataProperty(IRI.create(base + "hasName"));
OWLNamedIndividual john = factory.getOWLNamedIndividual(IRI.create(base + "john"));
OWLLiteral lit = factory.getOWLLiteral("John");
OWLDataPropertyAssertionAxiom ax = 
                  factory.getOWLDataPropertyAssertionAxiom(hasName, john, lit);
AddAxiom addAx = new AddAxiom(ontology, ax);
manager.applyChange(addAx);

//Init of the reasoner
//I use Hermit because it supports the construct of interest
OWLReasonerFactory reasonerFactory = new Reasoner.ReasonerFactory();
OWLReasoner reasoner = reasonerFactory.createReasoner(ontology);
reasoner.precomputeInferences();

//Prepare the expression for the query
OWLDataProperty p = factory.getOWLDataProperty(IRI.create(base + "hasName"));
OWLClassExpression ex = 
                factory.getOWLDataHasValue(p, factory.getOWLLiteral("John"));

//Print out the results, John is inside
Set<OWLNamedIndividual> result = reasoner.getInstances(ex, true).getFlattened();        
for (OWLNamedIndividual owlNamedIndividual : result) {
    System.out.println(owlNamedIndividual);
}
于 2013-04-17T14:46:37.380 に答える