当以编程方式查询Sesame时,如何获得一致的结果序列?

2024-05-14 07:37:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些关于芝麻三叶草的资料。当我使用GUI查询它时,无论我查询它多少次,返回的三元组序列都保持不变。当我以编程方式尝试同样的事情时,序列会不断变化(尽管结果是相同的)。有人能解释一下为什么会这样,我能做些什么来确保结果以相同的顺序返回?你知道吗

这是我的密码:

sesameSparqlEndpoint = 'http://my.ip.ad.here:8080/openrdf-sesame/repositories/rep_name'
sparql = SPARQLWrapper(sesameSparqlEndpoint)
queryStringDownload = 'SELECT * WHERE {?s ?p ?o} LIMIT 10 OFFSET 1000'
dataGraph = Graph()

sparql.setQuery(queryStringDownload)
sparql.method = 'GET'
sparql.setReturnFormat(JSON)
output = sparql.query().convert()
print output

Tags: 密码output顺序编程方式gui序列事情
1条回答
网友
1楼 · 发布于 2024-05-14 07:37:53

SPARQL查询返回结果的顺序是未定义的,任何SPARQL引擎都可以完全自由地以其认为合适的任何顺序返回结果。根据数据库实现以及它用于查询优化、序列化、索引、压缩等的技术,每次执行查询时,完全相同查询的结果的顺序可能不同。你知道吗

顺便说一句,以上是适用于任何SPARQL引擎的,而不仅仅是Sesame。即使您发现一个数据库似乎每次都以相同的顺序返回结果,这也不是您应该依赖的行为,因为它不能保证行为,而且每当该数据库发布新版本时,它可能会突然更改。你知道吗

但是,SPARQL有一个内置操作符来影响返回结果的顺序:ORDER BY。如果您希望执行一个查询并确定结果是按固定顺序返回的,则需要使用这个命令。你知道吗

TL;DR:调整SPARQL查询,如下所示:

SELECT * WHERE {?s ?p ?o} ORDER BY ?s LIMIT 10 OFFSET 1000

注意:这个特定的查询可能非常昂贵。您要求数据库中的所有三元组-即使您将最终结果限制为10个,也可能需要覆盖整个数据库的很大一部分才能正确排序结果。你知道吗

相关问题 更多 >

    热门问题