0

我正在寻找如何通过模型的属性和对象的类从模型中获取所有语句的方法。

例如,我有属性:driverOf 和个人类型为 Bus 或 Truck。然后我想获取属性为 :driverOf 且对象为 instanceOf Bus 的所有语句。谢谢。

更新 1

实际上,我需要结果是一组语句(分别是 StmtIterator),因为在我的应用程序中我已经使用了语句对象。我认为最干净的解决方案是拥有 :driverOf 属性的子属性,例如 :driverOfBus 和 :driverOfTruck。但这会使我的应用程序更加复杂,所以我想找到一些简单的解决方法。

4

2 回答 2

1

我希望我理解正确:

说你有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)
}
于 2015-10-05T14:06:14.500 回答
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();
}
于 2015-09-21T00:57:31.187 回答