gpt4 book ai didi

sparql - 查找包含集合中所有值的列表?

转载 作者:行者123 更新时间:2023-12-04 14:10:45 25 4
gpt4 key购买 nike

如何在 SPARQL 中找到包含一组项目的列表?假设我有这些数据:

<http://foo.org/test> <http://foo.org/name> ( "new" "fangled" "thing" )  . 
<http://foo.org/test2> <http://foo.org/name> ( "new" "york" "city" ) .

如何找到列表中同时包含“new”和“york”的项目?
以下 SPARQL 不起作用,因为 过滤器 适用于 的每个绑定(bind)?t ,而不是所有的集合。

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT ?s ?p WHERE {
?s <http://foo.org/name>/rdf:rest*/rdf:first ?t
FILTER( ?t = "new" && ?t = "york")
}

最佳答案

查找具有多个必需值的列表

如果您要查找包含所有值的列表,则需要使用更复杂的查询。此查询查找所有 ?s 具有 的值?列表 value,然后过滤掉那些没有不在列表中的单词。单词列表使用 指定。值 堵塞。

prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

select ?s {
?s <http://foo.org/name> ?list .
filter not exists { #-- It's not the case
values ?word { "new" "york" } #-- that any of the words
filter not exists { #-- are not
?list rdf:rest*/rdf:first ?word #-- in the list.
}
}
}

--------------------------
| s |
==========================
| <http://foo.org/test2> |
--------------------------

在列表中查找替代字符串

另一方面,如果您只是尝试搜索多个选项中的一个,那么您使用的是正确的属性路径,但您使用了错误的过滤器表达式。您希望字符串等于"new" “约克”。没有字符串等于"new" “约克”。你只需要做 过滤器(?t = "新"|| ?t = "约克") 或者更好的是使用 in : 过滤器(?t in ("new", "york")) .这是一个带有结果的完整示例:

prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

select ?s ?t {
?s <http://foo.org/name>/rdf:rest*/rdf:first ?t .
filter(?t in ("new","york"))
}

-----------------------------------
| s | t |
===================================
| <http://foo.org/test2> | "new" |
| <http://foo.org/test2> | "york" |
| <http://foo.org/test> | "new" |
-----------------------------------

关于sparql - 查找包含集合中所有值的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35027230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com