Чтобы понять различия, мы могли бы сначала обратиться к самой модели данных:
Реляционная модель
SQL
работает на реляционных базах данных. В общих чертах, реляционная модель - это способ моделирования ваших данных и их зависимостей в виде структурированных таблиц. Если мы хотим запросить информацию, которая построена из более чем одной таблицы, то мы выполняем так называемую операцию join
, которая извлекает связи между элементами в разных таблицах. Оператор join
часто использует ключи, которые являются общими для таблиц. Недостатком этой модели является то, что вам нужно выполнить множество таких операций join
, чтобы получить нужную информацию. В этом случае ответ становится очень медленным, а производительность значительно падает.
Модель графика
В отличие от этого, SparQL
- это язык запросов, имеющий SQL -подобный синтаксис, но работает с графическими данными. Модель данных графа не хранит данные в виде таблиц. Вместо этого он использует тройное хранилище (другой вариант - использовать граф свойств, но ваш вопрос относится к тройному хранилищу). RDF-тройки - это стандартный способ W3 C для описания операторов в модели данных графа. Он состоит из Subject
, Predicate
, Object
. Subject
- это сущность, к которой относится тройка, Predicate
- это тип отношений, а Object
- это сущность или свойство, к которому относится субъект. Субъект всегда имеет уникальный идентификатор (например, URI
), тогда как объект может быть литералом или другим объектом с URI.
Дальнейшее сравнение
Вы можно взглянуть на более подробное сравнение моделей в главе 2 (Варианты хранения связанных данных) книги: Графические базы данных, 2-е издание, Ян Робинсон, Джим Уэббер, Эмиль Эйфрем
Возвращаясь к вашим вопросам
Графики похожи на SQL Таблицы? Может ли одна тройка принадлежать более чем одному графику?
Нет, графики не являются SQL таблицами. И да, одна тройка может появиться на разных графиках (при условии, что тройка имеет одинаковые Предмет, Предикат и Объект). Однако, если вы используете разные онтологии, тройка появится в другом контексте.
Есть ли способ получить URI графа, которому принадлежит тройка? Есть ли способ получить URI каждого графа, хранящегося в репозитории GraphDB? Чтобы получить URI графика по умолчанию?
Запросы SparQL - это графовые шаблоны. Вам необходимо указать тип структуры, которую вы ищете.
Как прокомментировал UninformedUser:
Все тройки
select distinct ?g {graph ?g {?s ?p ?o}}
Все структуры, содержащие указанную c тройку
select distinct ?g {graph ?g {:s :p :o}}