我有一些关于芝麻三叶草的资料。当我使用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
SPARQL查询返回结果的顺序是未定义的,任何SPARQL引擎都可以完全自由地以其认为合适的任何顺序返回结果。根据数据库实现以及它用于查询优化、序列化、索引、压缩等的技术,每次执行查询时,完全相同查询的结果的顺序可能不同。你知道吗
顺便说一句,以上是适用于任何SPARQL引擎的,而不仅仅是Sesame。即使您发现一个数据库似乎每次都以相同的顺序返回结果,这也不是您应该依赖的行为,因为它不能保证行为,而且每当该数据库发布新版本时,它可能会突然更改。你知道吗
但是,SPARQL有一个内置操作符来影响返回结果的顺序:
ORDER BY
。如果您希望执行一个查询并确定结果是按固定顺序返回的,则需要使用这个命令。你知道吗TL;DR:调整SPARQL查询,如下所示:
注意:这个特定的查询可能非常昂贵。您要求数据库中的所有三元组-即使您将最终结果限制为10个,也可能需要覆盖整个数据库的很大一部分才能正确排序结果。你知道吗
相关问题 更多 >
编程相关推荐