我是SPARQL的新手,我正试图以SQL连接方式从三元组中获取一些结果。
e.g。我正在寻找某个图像所属的对象的ID,以及该对象的作者的ID,等等。
RDF关系定义如下:
<image> <isResourceOf> <object>
<person> <isAuthorOf> <object>
我试过了:
SELECT ?o ?a from <#ri>
WHERE {
{<myns:myImageID> <myns:isResourceOf> ?o}
UNION
{?a <myns:isAuthorOf> ?o}
}
但这会抓住所有作者,因为两个?o
变量没有绑定。
我如何才能匹配第一场比赛的作者?
由于
克
编辑:
更完整的例子:
PREFIX aic: <http://mydomain.org/definitions/1.0/fedora/3#>
SELECT *
WHERE {
<info:fedora/AICTEST:DOResImg-G38562> aic:isResourceOf ?o .
?a aic:isAuthorOf ?o .
}
没有结果。
SELECT *
WHERE {
<info:fedora/AICTEST:DOResImg-G38562> aic:isResourceOf ?o .
}
结果(CSV):
"o"
AICTEST:DOArtObj-1946.479
有了这个:
SELECT *
WHERE {
?a aic:isAuthorOf ?o .
}
结果:
"a","o"
info:fedora/AICTEST:DOAgent-35729,info:fedora/AICTEST:DOArtObj-1946.479
info:fedora/AICTEST:DOAgent-35729,AICTEST:DOObjSet-1946.494
答案 0 :(得分:3)
您在SQL中称为连接的内容只是表示为SPARQL中的基本图形模式列表。不需要UNION
:
SELECT ?o ?a
WHERE {
<myns:myImageId> <myns:isResourceOf> ?o .
?a <myns:isAuthorOf> ?o .
}
这就是它的全部。考虑SPARQL的方法是在数据上指定“图形模板”。与模板完全匹配的所有内容都是查询的结果。因此,上述查询将为您提供<myns:myImageId>
是(= ?o
)资源的所有内容,并为每个内容提供所有作者(?a
)。
答案 1 :(得分:2)
此问题重复http://answers.semanticweb.com//questions/23912/fetching-chained-relationships-with-sparql-mulgara
正如我在那里所说的那样,我强烈怀疑原始查询中的命名空间前缀定义有问题,并且可能在您的简化版本中也有问题,因为如果cURI不是角括号包装你会遇到错误
我建议你向我们提供完整的信息;否则,我们将无法提供有用的建议。
答案 2 :(得分:1)
我设法让正确的关系链起作用:
PREFIX aic: <http://mydomain.org/definitions/1.0/fedora/3#>
PREFIX fedora-rels-ext: <info:fedora/fedora-system:def/relations-external#>
SELECT ?o ?a ?p ?s
FROM <#ri>
WHERE {
<info:fedora/AICTEST:DOResImg-G38562> aic:isResourceOf ?o .
OPTIONAL {
?a aic:isAuthorOf ?o .
OPTIONAL {
?p aic:isBirthplaceOf ?a
} .
} .
OPTIONAL {
?o fedora-rels-ext:isPartOf ?s .
}
}
结果(CSV):
"o","a","p","s"
info:fedora/AICTEST:DOArtObj-1946.479,info:fedora/AICTEST:DOAgent-35729,info:fedora/AICTEST:DOPlace-Meissen,AICTEST:DOObjSet-1946.494