Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SPARQL中显式连接示例的探讨_Sparql - Fatal编程技术网

SPARQL中显式连接示例的探讨

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区分大小写 老实说,第一个

我有以下sparql查询(摘自《语义web入门》一书):

在本例中,我猜此代码与以下代码相同:

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 .
}