在SPARQL中使用关键字'Graph'获取远程图形 [英] Using the 'GRAPH' keyword in SPARQL to fetch remote graphs

查看:22
本文介绍了在SPARQL中使用关键字'Graph'获取远程图形的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望使用SPARQL完成一个相对基本的任务:给定一个FOAF图,我希望解析在其中找到的元素,获得它们的标记(如果它们存在),然后使用这些标记作为新的图,从中查找关于这些人的信息。

例如,您可以想象一个简单的用例,其中我想要运行一个SPARQL查询来列出我喜欢的所有食物(根据我的FOAF文件),以及我所有朋友喜欢的食物。

这是目前的情况。请注意,出于测试目的,目前我试图对下面的查询执行的所有操作都是通过?name3变量获取朋友的姓名。运行此查询不会返回?graph和?name3的任何结果,即使我知道rdfs:see还链接到一些有效的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 .   
    }       
}

将?图形的绑定馈送到一组LOAD语句中,然后运行原始查询。

注意:在某些系统中,例如4store您需要启用加载,默认情况下是不允许的,因此请检查您正在使用的存储的文档。

这篇关于在SPARQL中使用关键字&#39;Graph&#39;获取远程图形的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆