我有以下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 .
}
此查询是否会导致编码错误?
答案 0 :(得分:1)
不,我不明白为什么它应该给你一个错误或产生错误的结果。请确保始终使用正确的案例(uni:Course
与uni: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
,而联接则不会产生结果,因为它们不是完全相同的术语