Импорт данных из DBPedia в GraphDB - PullRequest
0 голосов
/ 02 ноября 2018

В основном я ищу использование запроса конструкции SPARQL для извлечения данных из DBPEdia в локальную версию GraphDB. Запрос конструкции должен быть в состоянии отобразить как можно больше связей и данных, связанных с музыкой. Я пробовал запускать запросы конструирования в GraphDB Workbench, но я не совсем уверен, как это сделать.

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

Любой совет по этому поводу был бы очень признателен. Спасибо, что нашли время помочь.

1 Ответ

0 голосов
/ 05 ноября 2018

GraphDB поддерживает импорт данных, уже преобразованных в формат данных RDF. Самый простой способ импортировать данные из внешней конечной точки, такой как DBPedia, - использовать федерацию SPARQL. Вот пример запроса, который берет данные из удаленной конечной точки и импортирует их в текущий выбранный репозиторий GraphDB:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
INSERT {
    ?s ?p ?o2
}
WHERE {
    # Execute the query against DBPedia's endpoint
    SERVICE <http://dbpedia.org/sparql> {
        SELECT ?s ?p ?o2
        {
            # Select all triples for Madonna
            ?s ?p ?o
            FILTER (?s =  <http://dbpedia.org/resource/Madonna_(entertainer)>)


            # Hacky function to rewrite all Literals of type rdf:langStrings without a language tag
            BIND (
                IF ( 
                    (isLiteral(?o) && datatype(?o) = rdf:langString && lang(?o) = ""), 
                    (STRDT(STR(?o), xsd:string)),
                    ?o
                )
                AS ?o2
            )
        }
    }
}

К сожалению, DBPedia и базовый механизм базы данных печально известны тем, что не строго соблюдают спецификации SPARQL 1.1 и RDF 1.1. Служба возвращает литералы RDF типа rdf: langString без правильного языкового тега:

...
  <result>
   <binding name="s"><uri>http://dbpedia.org/resource/Madonna_(entertainer)</uri></binding>
   <binding name="p"><uri>http://dbpedia.org/property/d</uri></binding>
   <binding name="o"><literal datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString">Q1744</literal></binding>
  </result>
...

Единственный способ преодолеть это - добавить дополнительный фильтр, который переписывает их на лету.

...