SPARQL 构造:隐式 subject/object 会影响结果吗?
SPARQL CONSTRUCT: does implicit subject/object influence the result?
我有一个像这样的 SPARQL 结构:
CONSTRUCT
{
?address
schema:addressLocality ?city;
schema:addressCountry ?country;
schema:streetAddress ?addressLine;
schema:postalCode ?zip;
schema:addressRegion ?region.
}
WHERE
{
?address
schema:addressLocality ?city;
schema:addressCountry ?country.
OPTIONAL { ?address schema:streetAddress ?addressLine }
OPTIONAL { ?address schema:postalCode ?zip }
OPTIONAL { ?address schema:addressRegion ?region }
}
与 CONSTRUCT 显式列出所有三元组模式相比,我通过这种方式得到的三元组更少,没有省略可选变量(即可能无界)的主题:
CONSTRUCT
{
?address
schema:addressLocality ?city;
schema:addressCountry ?country.
?address schema:streetAddress ?addressLine.
?address schema:postalCode ?zip.
?address schema:addressRegion ?region.
}
...
我假设这两种形式不会影响结果,但现在我收集到隐式主题语法实际上意味着类似于 "I want all the graph rooted on this subject or nothing at all for it"。是这样吗?这种行为是由 SPARQL 指定的,还是它在某些引擎中的实现方式(我在 Virtuoso 之上)?
不是最终答案,但至少是我目前学到的东西。正如上面的评论所说,SPARQL 应该 return 与两种形式相同。
我怀疑问题出在 Virtuoso doesn't trigger an error when the query execution times out 的事实,它反而默默地 returns 它在截止时间之前取得的结果。但我也不确定,因为我没有在响应中看到任何特殊的 HTTP header,正如他们在我提到的 link 中所建议的那样。
我有一个像这样的 SPARQL 结构:
CONSTRUCT
{
?address
schema:addressLocality ?city;
schema:addressCountry ?country;
schema:streetAddress ?addressLine;
schema:postalCode ?zip;
schema:addressRegion ?region.
}
WHERE
{
?address
schema:addressLocality ?city;
schema:addressCountry ?country.
OPTIONAL { ?address schema:streetAddress ?addressLine }
OPTIONAL { ?address schema:postalCode ?zip }
OPTIONAL { ?address schema:addressRegion ?region }
}
与 CONSTRUCT 显式列出所有三元组模式相比,我通过这种方式得到的三元组更少,没有省略可选变量(即可能无界)的主题:
CONSTRUCT
{
?address
schema:addressLocality ?city;
schema:addressCountry ?country.
?address schema:streetAddress ?addressLine.
?address schema:postalCode ?zip.
?address schema:addressRegion ?region.
}
...
我假设这两种形式不会影响结果,但现在我收集到隐式主题语法实际上意味着类似于 "I want all the graph rooted on this subject or nothing at all for it"。是这样吗?这种行为是由 SPARQL 指定的,还是它在某些引擎中的实现方式(我在 Virtuoso 之上)?
不是最终答案,但至少是我目前学到的东西。正如上面的评论所说,SPARQL 应该 return 与两种形式相同。
我怀疑问题出在 Virtuoso doesn't trigger an error when the query execution times out 的事实,它反而默默地 returns 它在截止时间之前取得的结果。但我也不确定,因为我没有在响应中看到任何特殊的 HTTP header,正如他们在我提到的 link 中所建议的那样。