什么时候在SPARQL中使用值不等于在查询本身中直接用URI替换变量?

什么时候在SPARQL中使用值不等于在查询本身中直接用URI替换变量?,sparql,rdf,jena,rdf4j,Sparql,Rdf,Jena,Rdf4j,在上的问题之后,我了解到在查询末尾使用VALUES子句在性能和查询优化方面并不总是等同于直接使用URI而不是查询字符串中的变量 Andy的评论说,“VALUES最后是“类似于设置变量”,但不一样。优化器试图将值推入,但这不可能在所有情况下都发生,因为它改变了语义。” 有人能解释一下在什么情况下这种情况不会发生吗?对于哪些查询结构,具体原因是什么?我需要了解在哪些情况下,这种技术(我高兴地使用了多年)是不可取的 请注意,我对SPARQL代数不太流利,所以请尝试使用简单的单词:-) (我知道这不是针

在上的问题之后,我了解到在查询末尾使用
VALUES
子句在性能和查询优化方面并不总是等同于直接使用URI而不是查询字符串中的变量

Andy的评论说,“
VALUES
最后是“类似于设置变量”,但不一样。优化器试图将值推入,但这不可能在所有情况下都发生,因为它改变了语义。”

有人能解释一下在什么情况下这种情况不会发生吗?对于哪些查询结构,具体原因是什么?我需要了解在哪些情况下,这种技术(我高兴地使用了多年)是不可取的

请注意,我对SPARQL代数不太流利,所以请尝试使用简单的单词:-)


(我知道这不是针对Jena或RDF4J的,但我用这两个标签来标记问题,因为我知道根据所使用的框架,这两个标签的优化可能会有所不同)。

我没有现成的具体示例,但通常,这是一个问题的结构是子选择和分组的图形模式,即组外的变量绑定不在范围内的任何模式。在这些情况下,查询计划器通常无法进行类似替换,这可能导致使用
值的版本与手动替换变量的版本之间的性能差异。除了Jeen的points、use In BOUND和EXIST(这是一种子查询)之外,还有其他值子句,AS(绑定和选择表达式),如果它是一个文本而不是一个URI,则为图形。双嵌套选项也可能很困难。还有一些关于自底向上语义的有趣示例:很高兴知道,谢谢。您/我们是否可以编译一个示例查询列表作为答案,说明最常见的情况(过滤器不存在、分组图模式、子查询、可选?)我没有现成的任何特定示例,但通常,这是一个问题的结构是子选择和分组的图形模式,即组外的变量绑定不在范围内的任何模式。在这些情况下,查询计划器通常无法进行类似替换,这可能导致使用
值的版本与手动替换变量的版本之间的性能差异。除了Jeen的points、use In BOUND和EXIST(这是一种子查询)之外,还有其他值子句,AS(绑定和选择表达式),如果它是一个文本而不是一个URI,则为图形。双嵌套选项也可能很困难。还有一些关于自底向上语义的有趣示例:很高兴知道,谢谢。您/我们是否可以编译一个示例查询列表作为答案,说明最常见的情况(过滤器不存在、分组图模式、子查询、可选?)