Python 如何使用筛选器选择不匹配的数据

Python 如何使用筛选器选择不匹配的数据,python,select,sparql,rdflib,Python,Select,Sparql,Rdflib,我正在Python中使用rdflib,并运行sparqlselect查询以获取相关数据 使用下面描述的filter命令(如filter regex(?pname),“+samplePersonalisedExperties+”,“i”))为某些条件筛选数据非常容易,但是如果我必须选择不匹配的数据,那么我们需要如何使用filter?我尝试过使用下面的过滤器(?personuri!=''''“+imURI+'''),但这不起作用 exprtppl= GraphR.query(""" PREFIX

我正在Python中使用
rdflib
,并运行
sparqlselect
查询以获取相关数据

使用下面描述的
filter
命令(如
filter regex(?pname),“+samplePersonalisedExperties+”,“i”)
)为某些条件筛选数据非常容易,但是如果我必须选择不匹配的数据,那么我们需要如何使用
filter
?我尝试过使用下面的
过滤器(?personuri!=''''“+imURI+''')
,但这不起作用

exprtppl=  GraphR.query(""" 
PREFIX foaf: <http://xmlns.com/foaf/0.1/>         
PREFIX owl: <http://www.w3.org/2002/07/owl#>      
PREFIX dc: <http://purl.org/dc/elements/1.1/>         
PREFIX bibo: <http://purl.org/ontology/bibo/>

SELECT ?nname 
{ 
    ?puburi dc:title ?pname. 
    FILTER regex(?pname,'"""+samplepersnalisedexpertise+"""',"i")
    ?personuri foaf:publications ?puburi.
    ?personuri foaf:nick ?nname
    FILTER (?personuri != '"""+imURI+"""')

 }""")
exprtppl=GraphR.query(“”)
前缀foaf:
前缀owl:
前缀dc:
前缀bibo:
选择名称
{ 
?puburi dc:标题?pname。
过滤正则表达式(?pname,“”“+samplePersonalisedExperties+“”“,“i”)
?personuri foaf:出版物?puburi。
尼克?纳姆
过滤器(?personuri!='''''''imURI+''')
}""")

你们谁能帮忙解决这个问题吗。提前感谢。

您正在尝试与URI值进行比较,URI值不应该用引号括起来,而是用鱼钩括起来:

FILTER(?personuri != <"""+imURI+""">)
过滤器(?personuri!=)

顺便说一句,上面@morphyn给出的建议(使用
str()
函数)也可以,但效率较低。

您试图与URI值进行比较,URI值不应该用引号括起来,而是用鱼钩括起来:

FILTER(?personuri != <"""+imURI+""">)
过滤器(?personuri!=)

顺便说一句,上面@morphyn给出的建议(使用
str()
函数)也可以,但效率较低。

在我看来没有错。什么是
imURI
?就一根绳子?有没有办法在
rdflib
中使用准备好的语句
imURI
可能只是格式不好,它是否有
呢?顺便说一句,它是一个很好的地方,可以回答有关
SPARQL
的问题。imURI是一个变量,它的值在这里被用作变量,就像SamplePersonalisedExperties是一个变量一样。实际上,我们必须看看这是一种正确的比较方式。谢谢你对其他论坛的建议。是的,
=
是检查两个文本是否不相等的一种方法。还有
!样本(?term1,?term2)
。但我认为你的问题是因为你比较URI造成的。也许可以试试
过滤器(str(?personuri)!='“+imURI+”)
在我看来没有错。什么是
imURI
?就一根绳子?有没有办法在
rdflib
中使用准备好的语句
imURI
可能只是格式不好,它是否有
呢?顺便说一句,它是一个很好的地方,可以回答有关
SPARQL
的问题。imURI是一个变量,它的值在这里被用作变量,就像SamplePersonalisedExperties是一个变量一样。实际上,我们必须看看这是一种正确的比较方式。谢谢你对其他论坛的建议。是的,
=
是检查两个文本是否不相等的一种方法。还有
!样本(?term1,?term2)
。但我认为你的问题是因为你比较URI造成的。也许可以尝试
FILTER(str(?personuri)!='“+imURI+”)
Jeen,请你详细说明一下“效率较低”?效率较低是因为你在进行字符串转换,然后进行词法比较,而不是直接进行值比较。大多数TripleStore在URI值查找方面很好,但在字符串搜索方面相对较差。虽然一些SPARQL查询引擎可能足够聪明,可以看出您实际上只是在比较标识符,但并非所有的搜索引擎都可以。Jeen,请您详细说明一下“效率较低”这一点?效率较低,因为您正在进行字符串转换,然后进行词法比较,而不是直接进行值比较。大多数TripleStore在URI值查找方面很好,但在字符串搜索方面相对较差,虽然一些SPARQL查询引擎可能足够聪明,可以看出您实际上只是在比较标识符,但并非所有的搜索引擎都可以。