我希望使用 SPARQL 来完成相对基本的任务:给定一个 FOAF 图,我想解析我在其中找到的元素,获取它们的标签(如果存在),然后将它们用作新图查找有关这些人的信息。
例如,您可以想象一个简单的用例,我想运行 SPARQL 查询来列出我所有最喜欢的食物(根据我的 FOAF 文件),以及我所有朋友最喜欢的食物。
这是目前的样子。请注意,出于测试目的,目前我尝试对下面的查询执行的操作是通过 ?name3 变量获取朋友的姓名。运行此查询不会返回 ?graph 和 ?name3 的任何结果,即使我知道 rdfs:seeAlso 链接到一些有效的 RDF 文件,其中至少两个应该具有 name 属性。感谢您提供的任何意见!
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?name1 ?name2 ?graph ?name3
FROM <my-rdf-file>
WHERE {
?person1 foaf:knows ?person2 .
?person1 foaf:name ?name1 .
?person2 foaf:name ?name2 .
OPTIONAL {
?person2 rdfs:seeAlso ?graph .
GRAPH ?graph {
?person3 foaf:name ?name3 .
}
}
}
GRAPH 不会隐式地将远程数据提取到存储中,这会带来太大的安全风险。可能在某些系统中您可以启用此功能,但它是非标准的。
然而,在 SPARQL 1.1 更新中,有一个关键字 LOAD,尽管它可以执行此操作,但您可以编写:
LOAD <uri>
这会将图表提取到存储中,因此您可以编写:
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT ?graph
FROM <my-rdf-file>
WHERE {
?person1 foaf:knows ?person2 .
?person1 foaf:name ?name1 .
?person2 foaf:name ?name2 .
OPTIONAL {
?person2 rdfs:seeAlso ?graph .
}
}
将 ?graph 的绑定输入到一组 LOAD 语句中,然后运行原始查询。
注意:在某些系统中,例如4store您需要启用LOAD,默认情况下不允许,因此请检查您所使用的商店的文档。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)