首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用rdf4j构造sparql查询

使用rdf4j构造sparql查询
EN

Stack Overflow用户
提问于 2021-04-06 11:09:12
回答 1查看 274关注 0票数 2

我试图使用rdf4j文档:https://rdf4j.org/documentation/tutorials/sparqlbuilder/构建一个SPARQL查询

我是java的新手(还有堆栈溢出,如果写得不好,很抱歉),但我想我已经包括了正确的开始步骤。我实例化了一个select查询、一个前缀和一个变量,方法如下:

代码语言:javascript
复制
    SelectQuery draftQuery = Queries.SELECT();

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

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

url已被正确的前缀替换

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

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

代码语言:javascript
复制
    draftQuery.prefix(default).select(draftCount)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-07 00:30:31

您取得了一个良好的开端,但是您将变量和IRIs混为一谈::team_1:draftCount是查询中的IRIs,而不是变量。只有?x是一个变量。由于您正在为您的IRs使用默认名称空间,所以只需为默认名称空间创建一个Prefix对象,如下所示:

代码语言:javascript
复制
Prefix defaultNs = SparqlBuilder.prefix(Rdf.iri("http://example.org/"));

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

代码语言:javascript
复制
Iri team1 = defaultNs.iri("team_1");

若要使用rdf:type方法添加SparqlBuilder以外的关系,请使用.has方法。

将所有这些放在一起,以生成这个SPARQL查询字符串:

代码语言:javascript
复制
PREFIX: <http://example.org/>
SELECT ?x WHERE { :team_1 :draftCount ?x}

你这样做:

代码语言:javascript
复制
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());
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66967498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档