Именованные графы и объединенные конечные точки SPARQL
Недавно я наткнулся на рабочий проект для расширений федерации SPARQL 1.1 и поинтересовался, возможно ли это уже с помощью именованных графов (чтобы не умалять полезности вышеупомянутого проекта).
Мое понимание именованных графиков немного туманное, за исключением того, что единственное, что я поразил, прочитав спецификации, - это правила слияния, а не слияния в отношении других графиков во время запроса. Поскольку это не полностью удовлетворяет мое понимание, мой вопрос заключается в следующем:
Учитывая следующий запрос:
SELECT ?something
FROM NAMED <http://www.vw.co.uk/models/used>
FROM NAMED <http://www.autotrader.co.uk/cars/used>
WHERE {
...
}
Разумно ли предположить, что обработчик запросов / конечная точка может или должен в контексте именованных графов делать следующее:
Проверьте, существует ли указанный граф локально
Если он не выполнит следующую операцию (в случае вышеупомянутого запроса я буду использовать второй граф)
GET / sparql /? Query=EncodedQuery HTTP/1.1 Хост: www.autotrader.co.uk Пользовательский агент: my-sparql-client/0.1
Где EncodedQuery включает только второй названный граф в FROM NAMED
пункт и WHERE
пункт изменен соответственно в отношении GRAPH
пункты (например, если GRAPH <http://www.vw.co.uk/models/used> {...}
используется).
Только если он не может выполнить вышеизложенное, выполните любое из следующих действий:
GET /cars/used HTTP/1.1
Host: www.autotrader.co.uk
или же
LOAD <http://www.autotrader.co.uk/cars/used>
- Вернуть соответствующие результаты поиска.
Очевидно, что могут быть некоторые дополнительные соображения вокруг OFFSET
и LIMIT
"s
Я также помню, как читал где-то давно в далекой галактике, что граф по умолчанию для любой конечной точки SPARQL должен быть именованным графом в соответствии со следующим соглашением:
Для: http://www.vw.co.uk/sparql/ должен быть именованный граф: http://www.vw.co.uk/ который представляет граф по умолчанию, и поэтому, согласно приведенной выше логике, он должен уже можно объединить конечные точки SPARQL, используя именованные графы.
Причина, по которой я спрашиваю, состоит в том, что я хочу начать продвижение федерации по доменам в приведенном выше примере, не ожидая появления стандарта, убедившись, что я не буду делать что-то нестандартное или несовместимое с чем-то другим в будущее.
1 ответ
Именованные графы и URL-адреса, используемые в федеративных запросах с использованием SERVICE или FROM, - это две разные вещи. Последние указывают на конечные точки SPARQL, именованные графы находятся в тройном хранилище и выполняют основную функцию разделения различных наборов данных. Это, в свою очередь, может быть полезно как для повышения производительности, так и для представления знаний, таких как то, что является источником набора утверждений.
Например, у вас может быть два источника данных, оба утверждают, что ?movie has-rating ?x
и вы можете захотеть узнать, какой источник указывает какой рейтинг, в этом случае вы можете использовать два именованных графика, связанных с двумя источниками (например, http://www.example.com/rotten-tomatoes
а также http://www.example.com/imdb
). Если вы храните оба набора данных в одном и том же тройном хранилище, вам нужно использовать NG, а удаленные конечные точки - это другое. Кроме того, именованные графы используются со словарями, такими как VoID, для описания целых наборов данных, что является еще одной причиной желания иметь их в вашем тройном хранилище.
Ваш механизм привязки NG к URL-адресам конечных точек может быть реализован как опция, но я не думаю, что было бы хорошо иметь его как обязательный, поскольку управление URL-адресами удаленных конечных точек и NG по отдельности может быть более полезным.
Более того, реальная проблема в федеративных запросах состоит в том, чтобы предлагать прозрачные для конечных точек запросы, делая механизм запросов достаточно умным, чтобы анализировать запрос и понимать, как его разбить и выполнять частичные запросы на правильных конечных точках. По этому вопросу проводится много исследований, одним из наиболее значительных результатов (насколько я знаю) является FedX, который был использован для реализации нескольких оптимизаций распределения запросов ( пример).
Последнее, что нужно добавить, я смутно помню соглашение, которое вы упоминаете о $url, $url/sparql. Есть несколько подходов (например, облако LOD). Тем не менее, в большинстве современных тройных хранилищ (например, Virtuoso) запросы, которые не указывают именованный граф (не используют GRAPH), работают не так, как в случае графа по умолчанию, они фактически запрашивают объединение всех именованные графы в магазине, что обычно гораздо полезнее (когда вы не знаете, где что-то указано, или хотите интегрировать кросс-графические данные).