2

我有以下 sparql 查询(来自本书,语义网入门):

select ?n
where
{
    ?x rdf:type uni:Course;
        uni:isTaughtBy :949352
    ?c uni:name ?n .
    FILTER(?c=?x) .
}

在这种情况下,我猜这段代码与以下代码相同:

Select ?n
Where
{
    ?x rdf:type uni:course;
        uni:isTaughtBy :949352 .
    ?x uni:name ?n .
}

此查询是否会导致编码错误?

4

2 回答 2

1

不,我不明白为什么它会给你一个错误或产生错误的结果。只需确保始终使用正确的大小写(uni:Coursevs. uni:course),因为 SPARQL 区分大小写。

老实说,第一个版本似乎相当晦涩,因为它使用了 aFILTER而不是真正需要它。也就是说,如果您愿意,您可以进一步缩小查询范围:

SELECT ?n
WHERE
{
    ?x rdf:type uni:Course;
       uni:isTaughtBy :949352;
       uni:name ?n .
}

但是,请记住,保存字符并不总能提高可读性。

于 2013-04-17T12:07:42.910 回答
0

FILTER对于您的示例,是的,查询是相同的,使用over 连接没有任何价值。


但是,您可能使用该表单的原因是连接和运算符FILTER之间的语义差异=

连接要求变量的值是完全相同的 RDF 项,而=值是否相等 - RDF 项的值是否代表相同的值?当一个/两个值可能具有文字值时,这主要是一个问题

?x=4如果你举一个具体的例子,假设和?c = 4.0(这对于你的查询来说是一个不好的例子,但说明了这一点),更容易看到

?x = ?c会给出true而加入不会给出任何结果,因为它们不是完全相同的术语

于 2013-04-17T18:57:11.847 回答