Создание дампа данных с помощью RDFib и добавление данных в график без итерации

Я проанализировал некоторые данные из DBpedia, используя RDFlib:

dbpediaSparqlEndpoint = 'http://dbpedia.org/sparql/'
sparql = SPARQLWrapper(dbpediaSparqlEndpoint)
dbpedia_query = 'PREFIX : <http://dbpedia.org/resource/> SELECT ?s ?p ?o WHERE {{?s ?p ?o FILTER (?s=:Benin)} UNION {?s ?p ?o . FILTER (?o=:Benin)}}'
dataGraph = Graph()

sparql.setQuery(dbpedia_query)
sparql.method = 'GET'
sparql.setReturnFormat(JSON)
output = sparql.query().convert()

Я хотел бы создать файл дампа, который затем можно использовать для загрузки в тройной магазин. Вот шаги, которые я думаю, что мне нужно предпринять сейчас:

  1. Добавьте выходные данные в график
  2. Используйте output.serialize(destination="dbpediaDump.txt", format='turtle') для создания дампа

Это самый эффективный подход? Кроме того, есть ли способ сразу добавить все данные из вывода на график вместо того, чтобы перебирать список и добавлять тройки одну за другой?


person kurious    schedule 07.02.2016    source источник
comment
Обратите внимание, что ограничения DBpedia со временем будут меняться. В качестве альтернативы пути LIMIT/OFFSET вы можете запустить свой собственный экземпляр DBpedia без средств защиты, реализованных на общедоступной конечной точке. Заявление об отказе от ответственности: я работаю в компании OpenLink Software; мы делаем Virtuoso, движок, на котором размещается DBpedia, и AMI, на который я указываю.   -  person TallTed    schedule 08.02.2016


Ответы (1)


Количество результатов DBpedia SPARQL ограничено, а это означает, что для получения всех запрошенных результатов часто необходимо повторить запрос с использованием ограничений OFFSET и LIMIT. Кроме того, доступность DBpedia не гарантируется, и необходимо учитывать ошибки.

Самый эффективный способ загрузить данные rdf в частную базу данных graph-db — это использовать такой сервис, как LinkedData.Center со следующей конфигурацией:

@PREFIX <http://linkeddata.center/kees/v1#> .

[]  a kees:SparqlIngestion
    kees:queryName <http://mydata.example.com/resource/Benin> ;
    kees:sparqlEndpoint <http://dbpedia.org/sparql>  ;
    kees:constructQuery """
        PREFIX : <http://dbpedia.org/resource/>
        CONSTRUCT {?s ?p ?o} 
        WHERE {{?s ?p ?o FILTER (?s=:Benin)} UNION {?s ?p ?o . FILTER (?o=:Benin)}}
    """ 
.

Полная документация по используемым API приема доступна здесь

отказ от ответственности: я стажер LinkedData.Center

person ffa    schedule 07.02.2016
comment
Я пытаюсь убедиться, что правильно вас понял. 1. Использование OFFSET и LIMIT влечет за собой выполнение запроса несколько раз, а затем объединение выходных данных каждого запроса. Это то, что вы имели в виду? 2. Существуют ли пороги, до которых DBpedia не ограничивает количество результатов? В моем запросе ожидается, что набор результатов будет ограничен. - person kurious; 08.02.2016
comment
Чтобы предотвратить недобросовестное использование, DBpedia имеет ограничение скорости на количество подключений в секунду, которое вы можете сделать, а также ограничения на набор результатов и время запроса (см. здесь). Таким образом, вы не можете получить более 2000 строк на запрос. Если вы ожидаете получить более 2 тыс. результатов, вам нужно выполнить запрос несколько раз, а затем объединить вывод, как вы говорите. - person ffa; 08.02.2016