SPARQL中显式连接示例的探讨
我有以下sparql查询(摘自《语义web入门》一书): 在本例中,我猜此代码与以下代码相同:SPARQL中显式连接示例的探讨,sparql,Sparql,我有以下sparql查询(摘自《语义web入门》一书): 在本例中,我猜此代码与以下代码相同: Select ?n Where { ?x rdf:type uni:course; uni:isTaughtBy :949352 . ?x uni:name ?n . } 此查询是否导致编码错误?不,我不明白为什么它会给您一个错误或产生错误的结果。只要确保始终使用正确的大小写(uni:Coursevs.uni:Course),因为SPARQL区分大小写 老实说,第一个
Select ?n
Where
{
?x rdf:type uni:course;
uni:isTaughtBy :949352 .
?x uni:name ?n .
}
此查询是否导致编码错误?不,我不明白为什么它会给您一个错误或产生错误的结果。只要确保始终使用正确的大小写(
uni:Course
vs.uni:Course
),因为SPARQL区分大小写
老实说,第一个版本似乎相当模糊,因为它使用了一个过滤器
,而不需要它。也就是说,如果您愿意,您可以进一步精简您的查询:
SELECT ?n
WHERE
{
?x rdf:type uni:Course;
uni:isTaughtBy :949352;
uni:name ?n .
}
但是,请记住,保存字符并不总是能够提高可读性。对于您的示例,是的,查询是相同的,在联接上使用
过滤器没有任何价值
但是,您可能使用过滤器
表单的原因是联接和=
运算符之间的语义差异
联接要求变量的值与RDF项完全相同,而值相等-表示相同值的RDF项的值是否相同?当一个/两个值可能具有文字值时,这主要是一个问题
如果您举一个具体的例子,假设?x=4
和?c=4.0
(这对于您的查询来说是一个不好的例子,但说明了这一点),则更容易看出这一点
?x=?c
将给出true
,而连接不会给出结果,因为它们不是完全相同的术语乐于提供帮助。另一个改进:您可以尝试使用selectdistinct
获得一个没有可能重复的列表。另外,如果你发现我的答案有用,你可以考虑。
SELECT ?n
WHERE
{
?x rdf:type uni:Course;
uni:isTaughtBy :949352;
uni:name ?n .
}