Jena — поиск операторов по свойствам и классам объектов

Я ищу способ, как получить все утверждения из моей модели по ее свойству и по классу объекта.

Например, у меня есть свойство :driverOf и отдельные лица типа Bus или Truck. Затем я хочу получить все операторы, в которых свойство :driverOf и объект instanceOf Bus. Спасибо.

ОБНОВЛЕНИЕ 1

На самом деле мне нужно, чтобы результатом был набор операторов (соответственно StmtIterator), потому что в моем приложении я уже использую объекты операторов. Я думаю, что наиболее чистым решением было бы иметь подсвойства свойства :driverOf, что-то вроде :driverOfBus и :driverOfTruck. Но это сделало бы мое приложение более сложным, поэтому я хотел бы найти какой-нибудь простой обходной путь.


person user3024710    schedule 20.09.2015    source источник


Ответы (2)


Вы можете использовать sparql запрос. Вы должны заменить метки полными пространствами имен.

String queryString =
    "SELECT ?x WHERE { ?x driverOflabel ?y . {?y a Buslabel} UNION { ?y a Trucklabel} . }";

Query query = QueryFactory.create(queryString);
QueryExecution qexec = QueryExecutionFactory.create(query, YOURMODEL);
try {
    ResultSet results = qexec.execSelect();
    while(results.hasNext()) {
        QuerySolution soln = results.nextSolution();
        System.out.println(soln.toString());
    }
} finally {
    qexec.close();
}
person dziewxc    schedule 21.09.2015
comment
Большое спасибо за Ваш ответ! Однако мне нужно, чтобы результат был утверждениями... Пожалуйста, смотрите мое обновление. - person user3024710; 21.09.2015
comment
Вы можете создавать операторы из результатов, которые дает вам QuerySolution. Statement stmt = ResourceFactory.createStatement(soln.getResource("x"), yourresource, soln.getResource("y")); - person dziewxc; 21.09.2015

Надеюсь, я правильно понял это:

Скажем, у вас есть model m и namespace NAMESPACE

// Get the property and the subject
Property driverOf = m.getProperty(NAMESPACE + "driverOf");
Resource bus = m.getResource(NAMESPACE + "bus");

// Get all statements/triples of the form (****, driverOf, bus)
StmtIterator stmtIterator = m.listStatements(null, driverOf, bus);
while (stmtIterator.hasNext()){
    Statement s = stmtIterator.nextStatement();
    Resource busDriver = s.getObject();
    // do something to the busdriver (only nice things, everybody likes busdrivers)
}
person Laurens Koppenol    schedule 05.10.2015