【问题标题】:Java SPARQL Select queryJava SPARQL 选择查询
【发布时间】:2017-04-23 16:41:40
【问题描述】:

我写了一个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);

【问题讨论】:

  • 请从 SPARQL 教程开始。在您不了解 whyhow 的情况下,人们现在向您提供查询是没有意义的 - 下次您需要另一个查询并且必须再次在这里提问。 SPARQL 不难学

标签: java sparql rdf jena fuseki


【解决方案1】:

要从所有现有的 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 遍历每个名​​称吗?
  • @LauraCîrstea 我目前无法在代码中对此进行测试,但也许它可以工作。
【解决方案2】:

您需要确定您在查询中查询的内容。 您可以在这里找到更多详细信息:

exploratory SPARQL queries?

【讨论】:

  • 你能说得更清楚些吗?
  • 在这里你可以识别出你想要的相同的东西 SELECT ?s ?p ?o
  • 以后从哪里来:
  • SELECT ?s ?p ?o WHERE { ?Srule 答案:rule_s ?s。 ?Prule 答案:rule_p ?p。 ?Orule 答案:rule_o ?o。 }
  • “人员测试”必须由“s”定义“Pavel Ionut”等必须由“o”定义
猜你喜欢
  • 2017-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多