Импортировать данные RDF в SQL? - PullRequest
6 голосов
/ 01 июля 2011

Мне вполне удобно использовать SQL, но я не могу понять время SPARQL. Для начала, я даже не понимаю, как посмотреть структуру данных (в MySQL я бы просто сделал describe <table name>), чтобы я мог запросить соответствующие поля.

Есть ли способ импортировать весь набор данных RDF в соответствующие таблицы в базе данных MySQL?

За исключением этого, есть ли способ SELECT * из всех таблиц (или любого другого эквивалентного дескриптора), чтобы я мог получить все выходные данные в csv (и взять их оттуда? )

У набора данных RDF, который я пытаюсь запросить, есть конечная точка SPARQL и даже руководство по Как использовать SPARQL , но мне трудно понять его.

Например:

PREFIX meannot: <http://rdf.myexperiment.org/ontologies/annotations/>
PREFIX sioc: <http://rdfs.org/sioc/ns#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX mebase: <http://rdf.myexperiment.org/ontologies/base/>
SELECT DISTINCT ?annotator_name
WHERE {
  ?comment mebase:annotates <http://www.myexperiment.org/workflows/52> .
  ?comment rdf:type meannot:Comment .
  ?comment mebase:has-annotator ?annotator
  ?annotator sioc:name ?annotator_name
}

имеет мало смысла для меня. Почему в конце некоторых утверждений WHERE есть период, а других нет? и что означает ?comment mebase:has-annotator ?annotator на простом английском языке? Выберите имя аннотаторов, где имя аннотаторов - это имя аннотаторов? да?

Я был бы благодарен за любые ресурсы, на которые вы могли бы указать мне.

Ответы [ 2 ]

18 голосов
/ 01 июля 2011

Несмотря на то, что SPARQL выглядит как SQL в своем синтаксисе, его функционирование на самом деле совсем другое, что является проблемой, с которой вы и многие другие сталкиваетесь, пытаясь изучить его.

Шаблон соответствия

SPARQL касается тройного сопоставления с шаблоном, а не выбора из таблиц, таких как SQL. Каждый набор из трех элементов в вашем примере представляет собой тройной шаблон. Так, например:

?comment rdf:type meannot:Comment .

Это говорит процессору SPARQL найти любую вещь, которая имеет rdf:type из meannot:Comment, то есть вещи, которые имеют тип комментария . В этом шаблоне ?comment - это переменная, которая действует как подстановочный знак, представьте себе это поле в SQL, которое можно выбрать

Если мы добавим дополнительный тройной шаблон, который использует переменную, мы просим процессор SPARQL найти все, что соответствует всем тройным шаблонам, поэтому:

?comment mebase:annotates <http://www.myexperiment.org/workflows/52> .
?comment rdf:type meannot:Comment .

Это находит вещи, которые являются комментариями к определенному элементу .
В терминах SQL это было бы похоже на запись SELECT commentID FROM COMMENTS WHERE itemID=1234, если это поможет вам понять это.

Когда мы начинаем добавлять дополнительные переменные, вы можете думать об этом, как о соединениях с другими таблицами:

?comment mebase:annotates <http://www.myexperiment.org/workflows/52> .
?comment rdf:type meannot:Comment .
?comment mebase:has-annotator ?annotator .

Это находит вещи, которые являются комментариями, и пользователи, которые сделали их для определенного элемента
Это было бы примерно эквивалентно SELECT commentID, userID FROM COMMENTS C INNER JOIN USERS U ON C.userID=U.userID WHERE itemID=1234 в SQL

Синтаксические заметки

Что касается синтаксиса, то . обозначает конец тройного паттерна.
Тот факт, что он опущен в вашем примере, на самом деле является ошибкой со стороны людей, которые публикуют руководство. Я работаю в одном из университетов, которые участвуют в проекте, поэтому я оставил коллеге записку с просьбой исправить это.

В примерах вы также можете увидеть использование ; в конце тройного шаблона. Это сокращение для повторения предмета, например

?comment mebase:annotates <http://www.myexperiment.org/workflows/52> ;
         rdf:type meannot:Comment .

Означает, что вам не нужно вводить ?comment снова для следующего шаблона.

Аналогично , используется для повторения предмета и предиката:

?comment rdf:type meannot:Comment , ex:Annotation .

будет означать, что ?comment и rdf:type повторяются, на простом английском языке выше будет вещи, которые имеют комментарий типа и аннотацию типа

Обнаружение структуры данных

RDF не хранится в таблицах, так как это модель данных без схемы, наиболее близкими к таблицам являются графы, которые являются просто способом логически сгруппировать наборы троек вместе.

Посмотрите на этот вопрос на поисковых запросах SPARQL , чтобы найти некоторые предложения по запросам.

Если вы просто хотите выбрать все, что можете сделать SELECT * WHERE { ?s ?p ?o } - учтите, что многие конечные точки наложат ограничение на количество результатов для одного запроса, поэтому даже если конечная точка имеет миллионы триплетов, вы можете получить только несколько Тысяча назад. Вы можете пролистывать результаты, используя LIMIT и OFFSET, например,

SELECT * WHERE { ?s ?p ?o } LIMIT 1000 OFFSET 0
SELECT * WHERE { ?s ?p ?o } LIMIT 1000 OFFSET 1000
SELECT * WHERE { ?s ?p ?o } LIMIT 1000 OFFSET 2000
# And so forth until you find no further results

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

Помещение RDF в таблицы SQL

Существуют системы, которые позволяют хранить RDF в базах данных на основе SQL, но берут его у кого-то, кто работал с большим разнообразием тройных хранилищ, это далеко не так эффективно, как при использовании собственного тройного хранилища.

Возможно, вас заинтересует R2RML , который представляет собой новый стандарт W3C (в настоящее время находится на ранней стадии разработки), который определяет стандартный способ отображения реляционных данных в RDF. Часть их документации может помочь вам лучше понять взаимосвязь между RDF / SPARQL и SQL

Обучение

Для более полного урока я ознакомлюсь с SPARQL на примере , который является одним из авторов спецификации SPARQL и настоятельно рекомендуется

3 голосов
/ 20 марта 2018

Вы можете использовать RDF2X для преобразования больших дампов RDF в MySQL, PostgreSQL или другую реляционную базу данных. Простая альтернатива для небольших наборов данных - rdf2rdb .

...