查询SPARQL中显式连接的示例

时间:2013-04-17 11:25:55

标签: sparql

我有以下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 .
}

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

2 个答案:

答案 0 :(得分:1)

不,我不明白为什么它应该给你一个错误或产生错误的结果。请确保始终使用正确的案例(uni:Courseuni:course),因为SPARQL区分大小写。

老实说,第一个版本似乎相当模糊,因为它使用FILTER而不需要它。也就是说,如果您愿意,可以进一步减少查询:

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

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

答案 1 :(得分:0)

对于您的示例是,查询是相同的,并且在联接中使用FILTER没有任何价值。


但是,你可能使用FILTER形式的原因是连接和=运算符之间的语义差异

联接要求变量的值与RDF术语完全相同,而=的值相等 - 表示相同值的RDF术语的值是多少?当一个/两个值可能具有文字值

时,这主要是一个问题

更容易看出你是否采用了一个具体的例子,假设?x=4?c = 4.0(这是你的查询的一个不好的例子,但说明了这一点)

?x = ?c会给true,而联接则不会产生结果,因为它们不是完全相同的术语