Несмотря на то, что 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 и настоятельно рекомендуется