我编写了一个 SELECT
语句,该语句返回来自 fuseki-server
的所有数据。我的问题是如何获得包含 o
列下方所有可用名称的列表(请参阅附图)?
例如,我需要一个包含以下项目的数组:
[Pavel Ionut、Cirstea Aurel、Test1]
这是我的 SELECT
语句,应将其更改为仅返回 name
属性...但我之前没有使用过 SPARQL
任何解决方案都会对我有很大帮助。
QueryExecution qe = QueryExecutionFactory.sparqlService(
"http://localhost:3030/Date/query", "SELECT * WHERE {?s ?p ?o}");
ResultSet results = qe.execSelect();
ResultSetFormatter.out(System.out, results);
qe.close();
System.out.println(results);
最佳答案
要从所有现有 s-p-o 三元组返回对象集,请使用以下 SPARQL 查询:
SELECT DISTINCT ?o WHERE { ?s ?p ?o . }
要仅获取名称,请尝试:
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT DISTINCT ?n WHERE { ?s dc:name ?n . }
或者只是:
SELECT DISTINCT ?n WHERE { ?s <http://purl.org/dc/elements/1.1/name> ?n . }
该规范包含一些很好的示例:
要使用 Java 中的 Apache Jena Fuseki 迭代上述查询的结果集,这可能有效:
while (results.hasNext()) {
QuerySolution querySolution = results.next();
RDFNode node = querySolution.get("n");
String name = node.asLiteral().getString();
System.out.println(name);
}
关于Java SPARQL 选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43573824/