SPARQL-запрос к удаленной удаленной конечной точке RDFLib / Redland - PullRequest
8 голосов
/ 04 мая 2011

Я пытаюсь запросить удаленные конечные точки и получить сову: сопоставления sameAs, я пробовал и RDFLib, и Redland, но ни одна из них не сработала, возможно, я неправильно обращаюсь с пространствами имен.

Вот моя попытка в RDFLib:

    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

А вот и Редленд:

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

Не могли бы вы дать намек, что не так в любом из них? Еще одна трудность, с которой я столкнулся: возможно ли получить набор данных имени объекта? Например: если есть:

?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" в этом примере? Или любой другой набор данных, на который у меня есть такая же ссылка? (Или, возможно, я мог бы просто найти интересующие имена наборов данных в строке объекта), очень ОЧЕНЬ большое спасибо заранее

Ответы [ 4 ]

12 голосов
/ 05 мая 2011

Разные вещи:

Вы правы, вам нужно заключить любой URI в < >. Правильный запрос:

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

... посмотреть результаты здесь .

FROM не реализован в rdflib или redland, как вы думаете. Он не извлекает удаленные конечные точки SPARQL, а извлекает удаленные графы или графы с этим именем в локальном хранилище. В вашем случае вы хотите использовать SERVICE, посмотрите , как это работает здесь с Jena . К сожалению, ни rdflib, ни redland не реализуют предложение SERVICE для SPARQL, но есть обходные пути, чтобы разобраться с этим.

Одним из возможных решений является использование SPARQLWrapper для python . Это тривиально, здесь у вас есть код с этой библиотекой:

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 становится параметром вне запроса.

3 голосов
/ 06 мая 2011

Redland в настоящее время не поддерживает использование конечных точек SPARQL в FROM.Здесь вы используете имена графиков , которые вы загружаете в набор данных RDF.Также известен как контекст redland, когда вы загружаете тройку (s, p, o) + c с чем-то вроде model.context_add_statement(statement, context)

Rasqal GIT поддерживает синтаксический анализ SERVICE, но еще не выполняет его в запросе.

1 голос
/ 20 января 2012

Есть еще одно простое решение в записи блога по адресу http://terse -words.blogspot.com / 2012/01 / get-real-data-from-semantic-web.html , которое сохраняет код справедливо чистый. Он также использует SPARQLWrapper.

1 голос
/ 05 мая 2011

Вы также можете рассмотреть возможность использования Virtuoso с RedLand , поскольку он реализует параметр SPARQL-FED "Service" для удаленного выполнения запросов, как показано в этих онлайн-примерах

...