当前位置: 首页 > 知识库问答 >
问题:

使用rdf4j构造sparql查询

西门良才
2023-03-14

我正在尝试使用rdf4j文档构造SPARQL查询:html" target="_blank">https://rdf4j.org/documentation/tutorials/sparqlbuilder/

我是java的新手(和stackoverflow,如果写得不好,很抱歉),但我想我已经包含了正确的开始步骤。我用以下方式实例化了一个选择查询、前缀和变量:

    SelectQuery draftQuery = Queries.SELECT();

    Prefix default = SparqlBuilder.prefix("dc", Rdf.iri("url"));

    Variable draftCount = SparqlBuilder.var("draftCount");

URL已被右前缀替换

我试图编写的查询是:选择?在哪里{:team_1:draftCount?x},但是?x没有rdf:type,只是一个附加到:draftCount的值。我不知道如何在java中将其作为SPARQL查询编写,因为根据我在文档中的理解,包括产品是一本书的示例,该产品具有rdf:type“book”。我不想查询多个变量(例如:team_1?x?y),因为还有其他三元组附加到该团队,我想单独查询它们。我希望以后有另一个类似的SPARQL查询,但它是SELECT?其中{:team_1:completedCount?x},

如何编写此查询?这是我到目前为止所拥有的:

    draftQuery.prefix(default).select(draftCount)

共有1个答案

百里泓
2023-03-14

你有了一个好的开始,但是你混淆了变量和IRI::team_1: draftCount是查询中的IRI,而不是变量。只有<代码>?x是一个变量。因为您正在为您的IRs使用默认命名空间,所以只需为默认命名空间创建一个Prefix对象,如下所示:

Prefix defaultNs = SparqlBuilder.prefix(Rdf.iri("http://example.org/"));

然后您可以使用它来创建Iri对象,以便在查询中使用,如下所示:

Iri team1 = defaultNs.iri("team_1");

要使用SparqlBuilder添加非rdf:type的关系,请使用。具有方法。

将它们放在一起,生成这个SPARQL查询字符串:

PREFIX: <http://example.org/>
SELECT ?x WHERE { :team_1 :draftCount ?x}

您可以这样做:

Prefix defaultNs = SparqlBuilder.prefix(Rdf.iri("http://example.org/"));
Iri team_1 = defaultNs.iri("team_1"), draftCount = defaultNs.iri("draftCount");
Variable x = SparqlBuilder.var("x");
        
SelectQuery query = Queries.SELECT()
            .prefix(defaultNs)
            .select(x)
            .where(team_1.has(draftCount, x));

System.out.println(query.getQueryString());
 类似资料:
  • 我正在使用一个相当大的数据集(大约500Mio-Triples)存储在图形数据库免费并在我的本地开发人员机器上运行。 我想用RDF4J对数据集执行一些操作,并且必须或多或少地选择整个数据集。要进行测试,我只需选择所需的元组。代码在第一个一百万元组中运行良好,之后由于graphDB继续分配更多的RAM,速度变得非常慢。 是否有可能对非常大的数据集执行选择查询并批量获取它们? 基本上,我只想通过一些选

  • 我们使用RDF4J(以前的sesame)框架来运行sparql查询到远程GraphDB三重存储。 这可以通过rdf4j HTTPRepository接口成功地工作,该接口使用Graphdb服务器的URL和存储库ID,但在使用rdf4j SPARQLRepository接口时失败,该接口将Sparlqendpointurl作为参数。 在运行查询时,我们在查询验证中得到一个异常 “获取服务器协议失败;

  • 问题内容: 是否有一个库,可以像JPA中那样以编程方式构建SPARQL查询,或者可以像使用for SQL 一样构建查询? 问题答案: 您可以使用两种方法在Jena中以编程方式构建查询:语法或代数。耶拿维基上有一个介绍。 使用代数,您将执行以下操作: (摘自Wiki页面) 不是(也不是预期的),但是那是其中的一些方式。您而不是AND,而您想要进行OR等。痛点是我的经验中的表达式:您可能想从字符串中解

  • QueryBuilder 提供了一个简便,流畅的 SQL 查询构造器。在不影响代码可读性的前提下用来快速的建立 SQL 语句。 QueryBuilder 在功能上与 ORM 重合, 但是各有利弊。ORM 更适用于简单的 CRUD 操作,而 QueryBuilder 则更适用于复杂的查询,例如查询中包含子查询和多重联结。 使用方法: // User 包装了下面的查询结果 type User stru

  • 简介 在 Swoft 中,数据库查询构造器为创建和执行数据库查询提供了一个方便的接口,它可用于执行应用程序中大部分数据库操作,且可在所有支持的数据库系统上运行。 Swoft 的查询构造器使用 PDO 参数绑定来保护您的应用程序免受 SQL 注入攻击。因此没有必要清理作为绑定传递的字符串。 你可以使用 DB::table('table') 得到一个 Builder 对象,也可以使用 Builder:

  • 简介 Hyperf 的数据库查询构造器为创建和运行数据库查询提供了一个方便的接口。它可用于执行应用程序中大部分数据库操作,且可在所有支持的数据库系统上运行。 Hyperf 的查询构造器使用 PDO 参数绑定来保护您的应用程序免受 SQL 注入攻击。因此没有必要清理作为绑定传递的字符串。 这里只提供一部分常用的教程,具体教程可以到 Laravel 官网查看。 Laravel Query Builde