2015-09-20 6 views
0

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

Например, у меня есть свойство: driverOf и физическое лицо любого типа Bus или Truck. Затем я хочу получить все утверждения, где свойство: driverOf, а объект - экземплярOf Bus. Благодарю.

UPDATE 1

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

ответ

1

Вы можете использовать запрос 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(); 
} 
+0

Большое спасибо за Ваш ответ! Однако мне нужен результат, чтобы быть заявлениями ... См. Мое обновление. – user3024710

+0

Вы можете создавать заявления из результатов, предоставленных QuerySolution. 'Statement stmt = ResourceFactory.createStatement (soln.getResource (" x "), yourresource, soln.getResource (" y "));' – dziewxc

0

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

Скажем, у вас есть 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) 
}