gpt4 book ai didi

python - 如何在 python rdflib 中运行 IN 和 NOT IN SPARQL 语句以删除两个图的交集

转载 作者:太空狗 更新时间:2023-10-29 22:27:49 28 4
gpt4 key购买 nike

我正在尝试在 SPARQL 的 python 实现(现在在 rdfextras 中),但似乎无法识别语法。

让我们考虑两组(A 和 B)。我想输出 Set A 中的内容,删除 Set B 中的内容。

SELECT ?title WHERE {
some logic defining ?item and ?SetB
FILTER (?item NOT IN ?SetB)
}

也许这个特殊的东西是在 SPARQL 1.1 中添加的并且 rdfextra 不支持,在这种情况下我希望有一个解决方法(或者如何在不使用 NOT IN 关键字)

最佳答案

我试过类似的查询,也得到了解析异常。我经历了rdflib's SPARQL parser代码,它似乎不存在处理 INNOT IN 的规则。我假设此功能未实现。

无论如何,我不确定您是否正确使用它。查看 SPARQL 1.1 spec 中的 NOT IN 定义... 它定义了要用于表达式列表的 IN 运算符。因此,你会这样做:

FILTER (?item NOT IN (?SetB))

而且我不完全确定您是否可以在右侧使用变量,因为规范中的所有示例都使用术语。 编辑:请参阅 RobV 消息,可以在 RLH 中使用变量

一个查询的解决方法

一种可能对您有用的解决方案是使用 OPTIONALbound(两者都在 rdflib 中受支持)。像...

SELECT ?title WHERE {
some logic defining ?item
OPTIONAL {
some logic defining ?SetB
}
FILTER (bound(?SetB) && ?setB != ?item)
}

在不了解您的查询的更多信息的情况下,我无法为这种情况提供更好的建议。

两个查询的解决方法

使用 rdlib 解决此问题的最简单方法是使用过滤器和两个查询,第一个查询检索 ?SetB 的所有可能值。您动态创建的第二个查询中的 Ant过滤器:

SELECT ?title WHERE {
some logic defining ?item
FILTER (?item != <setb_val1> && ?item != <setb_val2> &&
... && ?item != <setb_val2>)
}

关于python - 如何在 python rdflib 中运行 IN 和 NOT IN SPARQL 语句以删除两个图的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5779971/

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