rch*_*euk 3 performance rdf sparql
我刚开始使用 SPARQL,我正在尝试创建一个查询来检索所有信息,其中 id 具有多个预定义值之一?我有这样的事情:
SELECT *
WHERE {
?id ?property ?value .
?value a ?type .
?type rdfs:label ?type_value .
FILTER ( ?id IN (<id1>,<idi>,<idn> ) )
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,当 id 列表越来越大时,查询变得非常慢。我凭直觉认为有更好的方法来编写此查询,但我无法弄清楚如何创建此类查询。我在思考这样的事情:
SELECT *
WHERE {
<id_value> ?property ?value .
?value a ?type .
?type rdfs:label ?type_value .
}
Run Code Online (Sandbox Code Playgroud)
它仅检索多个 id 的所有值,最后消除了对结果的过滤,但我不知道如何编写查询,以便它返回 id_value 的所有值。当我为另一个 id_value 添加另一行时,它会过滤掉我期望的其他值,所以我认为我写错了。我怎样才能做到这一点?
使用values,你可以写:
SELECT * WHERE {
values ?id { <id1> <idi> <idn> }
?id ?property ?value .
?value a ?type .
?type rdfs:label ?type_value .
}
Run Code Online (Sandbox Code Playgroud)
SPARQL 1.1 说values:
数据可以直接写入图形模式或使用 VALUES 添加到查询中。VALUES 提供内联数据作为解决方案序列,这些数据通过连接操作与查询评估结果相结合。应用程序可以使用它来提供对查询结果的特定要求,也可以被 SPARQL 查询引擎实现使用,这些实现通过 SERVICE 关键字提供联合查询以将更受约束的查询发送到远程查询服务。
其中一个示例实际上与您已经获得的非常接近:
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX : <http://example.org/book/>
PREFIX ns: <http://example.org/ns#>
SELECT ?book ?title ?price
{
VALUES ?book { :book1 :book3 }
?book dc:title ?title ;
ns:price ?price .
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1082 次 |
| 最近记录: |