gpt4 book ai didi

sparql - sesame2 和 jena 的结果数量不同

转载 作者:行者123 更新时间:2023-12-02 20:11:35 24 4
gpt4 key购买 nike

我正在编写一些在 jena 和 sesame2 上运行的查询。它们中的大多数在 sesame2 下都能正常工作,除非我指定路径的深度。例如,如果我在 sesame 下运行此查询,它会给出 8 个结果,而 jena 会给出 217(正确的数字)。

PREFIX edge: <http://danielfrentz.com/edge#> 
PREFIX property: <http://danielfrentz.com/property#>
select distinct ?start ?reached where{
?start property:id \"v1\".
?start (edge:uses | edge:implements | edge:extends)+ ?reached.
filter(?start != ?reached)}

所以我的问题是,sesame2 对路径深度语法有不同的定义吗?还是有其他原因导致我可能得到不同的结果?

谢谢。

其他详细信息:

我正在使用 2.6.10 并尝试 2.7 beta。

我拥有的最小示例图如下(抱歉它太长了):

@prefix edge: <http://danielfrentz.com/edge#>.
@prefix edge: <http://danielfrentz.com/property#>.
<http://danielfrentz.com/v2> <http://danielfrentz.com/property#name> "Class3".
<http://danielfrentz.com/v2> <http://danielfrentz.com/property#abstract> "false".
<http://danielfrentz.com/v2> <http://danielfrentz.com/property#type> "class".
<http://danielfrentz.com/v2> <http://danielfrentz.com/property#namespace> "com.example".
<http://danielfrentz.com/v2> <http://danielfrentz.com/property#id> "v2".
<http://danielfrentz.com/v1> <http://danielfrentz.com/property#name> "Class2".
<http://danielfrentz.com/v1> <http://danielfrentz.com/property#abstract> "false".
<http://danielfrentz.com/v1> <http://danielfrentz.com/property#type> "class".
<http://danielfrentz.com/v1> <http://danielfrentz.com/property#namespace> "com.example".
<http://danielfrentz.com/v1> <http://danielfrentz.com/property#id> "v1".
<http://danielfrentz.com/v3> <http://danielfrentz.com/property#name> "Class4".
<http://danielfrentz.com/v3> <http://danielfrentz.com/property#abstract> "false".
<http://danielfrentz.com/v3> <http://danielfrentz.com/property#type> "class".
<http://danielfrentz.com/v3> <http://danielfrentz.com/property#namespace> "com.example".
<http://danielfrentz.com/v3> <http://danielfrentz.com/property#id> "v3".
<http://danielfrentz.com/v4> <http://danielfrentz.com/property#name> "AbstractClass1".
<http://danielfrentz.com/v4> <http://danielfrentz.com/property#abstract> "true".
<http://danielfrentz.com/v4> <http://danielfrentz.com/property#type> "class".
<http://danielfrentz.com/v4> <http://danielfrentz.com/property#namespace> "com.example".
<http://danielfrentz.com/v4> <http://danielfrentz.com/property#id> "v4".
<http://danielfrentz.com/v0> <http://danielfrentz.com/property#name> "Class1".
<http://danielfrentz.com/v0> <http://danielfrentz.com/property#abstract> "false".
<http://danielfrentz.com/v0> <http://danielfrentz.com/property#type> "class".
<http://danielfrentz.com/v0> <http://danielfrentz.com/property#namespace> "com.example".
<http://danielfrentz.com/v0> <http://danielfrentz.com/property#id> "v0".
<http://danielfrentz.com/v5> <http://danielfrentz.com/property#name> "Interface1".
<http://danielfrentz.com/v5> <http://danielfrentz.com/property#abstract> "true".
<http://danielfrentz.com/v5> <http://danielfrentz.com/property#type> "interface".
<http://danielfrentz.com/v5> <http://danielfrentz.com/property#namespace> "com.example".
<http://danielfrentz.com/v5> <http://danielfrentz.com/property#id> "v5".
<http://danielfrentz.com/v3> <http://danielfrentz.com/edge#extends> <http://danielfrentz.com/v4>.
<http://danielfrentz.com/v2> <http://danielfrentz.com/edge#uses> <http://danielfrentz.com/v3>.
<http://danielfrentz.com/v4> <http://danielfrentz.com/edge#uses> <http://danielfrentz.com/v2>.
<http://danielfrentz.com/v5> <http://danielfrentz.com/edge#uses> <http://danielfrentz.com/v0>.
<http://danielfrentz.com/v1> <http://danielfrentz.com/edge#implements> <http://danielfrentz.com/v5>.
<http://danielfrentz.com/v0> <http://danielfrentz.com/edge#uses> <http://danielfrentz.com/v1>.

查询是:

PREFIX edge: <http://danielfrentz.com/edge#>
PREFIX property: <http://danielfrentz.com/property#>
select distinct ?start ?reached where{
?start property:id \"v1\".
?start (edge:uses | edge:implements | edge:extends){1,3} ?reached.
FILTER (?start != ?reached)}

结果是:

start start=http://danielfrentz.com/v1
reached reached=http://danielfrentz.com/v5

应该有 2 个结果而不是 1 个。

我还应该补充一点,当我不使用属性路径(即我使用 + 而不是 {1,3})时,它会给出正确的结果数量。

最佳答案

您使用的路径长度下限和上限构造 ({1,3}) 不再是官方支持的 SPARQL 功能,它已从 SPARQL 规范中删除最近的更新之一。

Sesame 的 SPARQL 查询解析器仍然接受该构造。我在 Sesame 2.7.0-beta1 上测试了您的查询,您是对的,它不会产生预期的答案(而使用 +,它仍然是官方 SPARQL 功能,工作正常)。所以这是 Sesame 查询解析器中的一个错误。但是,鉴于 {1, 3} 构造不再是 SPARQL 的正式一部分,我不确定它是否会得到修复 - 更有可能的是,在下一个 Sesame 版本中,该构造将导致相反,语法错误。

关于sparql - sesame2 和 jena 的结果数量不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14431998/

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