【问题标题】:How to Sparql queries如何 Sparql 查询
【发布时间】:2014-05-30 00:59:10
【问题描述】:

请帮忙。

到目前为止,我知道如何将 Jena 与 ARQ(命令行)一起使用,加载 xml 文件将查询写入 query.rq 文件并使用以下命令运行查询:

【问题讨论】:

  • 你在这个问题上问了很多,但不清楚你需要什么。您可以利用 Jena 对 service 关键字的支持来查询外部端点,或者您可以下载一些 LinkedMDB 数据(如果可以下载)并在本地查询。如果你不想,你不必在这里使用 Fuseki。您可以编写一些 Java 代码来执行 SPARQL 查询,也可以将数据加载到 Fuseki 实例中并以这种方式进行查询,或者您可以使用 Jena 捆绑的命令行工具。

标签: xml rdf sparql jena linkedmdb


【解决方案1】:

LinkedMDB 使用D2R Serverhttp://data.linkedmdb.org/sparql 处公开一个只读SPARQL Endpoint

如果符合,则可以使用 Jena 查询端点:

final String service = "http://data.linkedmdb.org/sparql";
final Query query = QueryFactory.create("SELECT * WHERE { ?s ?p ?o } LIMIT 1");
final QueryExecution exec = QueryExecutionFactory.createServiceRequest(service, query);
final ResultSet resultSet = exec.execSelect();
ResultSetFormatter.out(resultSet);

这有效并提供类似于以下的输出:

------------------------------------------------------------------------------------------------------------------------------------------------------------
| s                                                               | p                                            | o                                       |
============================================================================================================================================================
| <http://data.linkedmdb.org/resource/film_distribution_medium/1> | <http://www.w3.org/2000/01/rdf-schema#label> | "Theatrical (Film Distribution Medium)" |
------------------------------------------------------------------------------------------------------------------------------------------------------------

如果您想提取数据并将其存储在其他模型中,那么Federated Query 将是一种合适的方式:

final Model localModel = ModelFactory.createDefaultModel();

final Query query = QueryFactory.create(
    "CONSTRUCT { ?s ?p ?o } WHERE {\n"+
    "  SERVICE <http://data.linkedmdb.org/sparql> { SELECT * { ?s ?p ?o . } LIMIT 1 } \n"+
    "}"
);

final QueryExecution exec = QueryExecutionFactory.create(query, localModel);
exec.execConstruct(localModel);
localModel.write(System.out, "N3");

正如此输出所示,我们在构造查询期间构建的三元组存储在本地模型中。

<http://data.linkedmdb.org/resource/film_distribution_medium/1>
        <http://www.w3.org/2000/01/rdf-schema#label>
                "Theatrical (Film Distribution Medium)" .

如果您希望将 Fuseki 用作数据存储,而不是本地模型,则可以使用 any number of methods 从 Java 访问 Fuseki。您只需适当调整查询的结构即可。

例如,为了修改您自己的 fuseki 数据,您需要使用文档中的 UpdateRemote.execute 执行更新查询,并且该查询需要包含联合查询 (SERVICE),根据第二个例子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-09
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多