首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >远程远程终结点RDFLib / Redland上的SPARQL查询

远程远程终结点RDFLib / Redland上的SPARQL查询
EN

Stack Overflow用户
提问于 2011-05-05 02:17:17
回答 4查看 4.9K关注 0票数 9

我正在尝试查询远程端点并获取owl:与映射相同,我尝试了RDFLib和Redland,但都不适用于我,可能是我没有正确处理名称空间。

这是我在RDFLib中的尝试:

代码语言:javascript
复制
    import rdflib

    rdflib.plugin.register('sparql', rdflib.query.Processor, 'rdfextras.sparql.processor', 'Processor')
    rdflib.plugin.register('sparql', rdflib.query.Result, 'rdfextras.sparql.query', 'SPARQLQueryResult')

    g = rdflib.Graph()

    query = """
        SELECT *
        FROM <http://api.talis.com/stores/bbc-backstage/services/sparql>
        WHERE {
             ?s a http://purl.org/ontology/mo/MusicArtist;
                http://www.w3.org/2002/07/owl#sameAs ?o .
        }Limit 50
    """

    for row in g.query(query):
        print row

下面是Redland:

代码语言:javascript
复制
import RDF
model = RDF.Model()

query = """
    SELECT *
    FROM <http://api.talis.com/stores/bbc-backstage/services/sparql>
    WHERE {
         ?s a http://purl.org/ontology/mo/MusicArtist;
            http://www.w3.org/2002/07/owl#sameAs ?o .
    }Limit 50
"""

for statement in RDF.Query(query ,query_language="sparql").execute(model):
    print statement

你能给出一个提示吗?其中任何一个都有问题?我还有另一个困难:可以获得对象的数据集名称吗?例如:如果有:

代码语言:javascript
复制
?s = http://www.bbc.co.uk/music/artists/eb5c8564-927d-414d-b152-c7b48a2c9d8b#artist
predicate = http://www.w3.org/2002/07/owl#sameAs
?0 = http://dbpedia.org/resource/The_Boy_Least_Likely_To

我能得到这个例子中"Dbpedia“的名字吗?或任何其他与我有相同链接的数据集?(或者我可以在对象字符串中查找感兴趣的数据集名称),非常非常感谢您

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-05 16:12:34

各种各样的东西:

您是对的,您需要在< >中包含任何URI。正确的查询是:

代码语言:javascript
复制
SELECT ?s ?o WHERE {
         ?s a <http://purl.org/ontology/mo/MusicArtist>;
            <http://www.w3.org/2002/07/owl#sameAs> ?o .
    } limit 50

..。查看结果here

FROM并没有像你想象的那样在rdflib或redland中实现。它不获取远程SPARQL端点,而是获取远程图或本地存储中具有该名称的图。在您的例子中,您希望使用SERVICE,请参见how it works here with Jena。不幸的是,rdflib和redland都没有为SPARQL实现SERVICE子句,但是有解决方法可以解决这个问题。

一种可能的解决方案是使用SPARQLWrapper for python。它很简单,以下是库中代码:

代码语言:javascript
复制
from SPARQLWrapper import SPARQLWrapper, JSON

sparql = SPARQLWrapper("http://api.talis.com/stores/bbc-backstage/services/sparql")
sparql.setQuery("""
    SELECT ?s ?o
    WHERE {
         ?s a <http://purl.org/ontology/mo/MusicArtist>;
            <http://www.w3.org/2002/07/owl#sameAs> ?o .
    } limit 50
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()

for result in results["results"]["bindings"]:
    print result["s"]['value'], result["o"]['value']

如您所见,远程SPARQL端点成为查询外部的参数。

票数 13
EN

Stack Overflow用户

发布于 2011-05-06 04:48:16

Redland目前不支持在FROM中使用SPARQL端点。这里使用的是加载到RDF数据集中的图形名称。当您使用类似model.context_add_statement(statement, context)的内容加载一个三元组(s,p,o) +c时,也称为redland上下文

Rasqal GIT确实支持解析SERVICE,但还不能在查询中执行它。

票数 3
EN

Stack Overflow用户

发布于 2011-05-05 21:29:58

您还可以考虑使用Virtuoso with RedLand,因为它为远程查询执行实现了SPARQL-FED“服务”参数,如以下online examples所示

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5888020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档