Различные механизмы запросов SPARQL дают разные результаты для запроса DESCRIBE.

Я попробовал один запрос SPARQL в двух разных движках:

  1. Protege 4.3 - вкладка запросов SPARQL
  2. Йена 2.11.0

Хотя запрос один и тот же, результаты, возвращаемые этими двумя инструментами, различаются.

Я попробовал запрос DESCRIBE следующим образом:

DESCRIBE ?x
WHERE { ?x :someproperty "somevalue"}

Результаты от протеже дают мне кортежи, которые принимают ?x как субъект/объект; в то время как те, что из Йены, рассматривают ?x только как тему.

Мои вопросы:

  1. Является ли синтаксис SPARQL единообразным?
  2. Если я хочу, чтобы DESCRIBE работало как в протеже, что мне делать в Йене?

person eastdog    schedule 22.01.2014    source источник
comment
См. также запрос SPARQL DESCRIBE.   -  person Joshua Taylor    schedule 22.01.2014


Ответы (1)


Чтобы ответить на ваш первый вопрос, да, синтаксис SPARQL един, поскольку вы использовали один и тот же запрос в обоих инструментах. Однако я думаю, что вы на самом деле спрашиваете, должны ли результаты для двух инструментов быть разными или нет? т.е. являются семантикой униформы SPARQL

В случае DESCRIBE тогда да, спецификация SPARQL явно разрешает различать результаты, т. е. нет, семантика SPARQL неоднородна, но это только в случае DESCRIBE.

См. раздел 16.4 DESCRIBE (информативный) спецификации SPARQL, в котором говорится следующее:

Шаблон запроса используется для создания набора результатов. Форма DESCRIBE берет каждый из ресурсов, указанных в решении, вместе с любыми ресурсами, непосредственно названными IRI, и собирает единый граф RDF, используя «описание», которое может быть получено из любой доступной информации, включая целевой набор данных RDF. Описание определяется службой запросов

Важной частью этого являются последние несколько предложений, в которых говорится, что описание определяется службой запросов. Это означает, что ответы и Протежа, и Джены верны, поскольку им разрешено выбирать, как формировать описание.

Изменение обработки Jena DESCRIBE

Чтобы ответить на вторую часть вашего вопроса, вы можете изменить способ обработки DESCRIBE запросов Jena, внедрив собственный DescribeHandler и связанный с ним DescribeHandlerFactory. Затем вам нужно зарегистрировать свою фабрику следующим образом:

DescribeHandlerRegistry.get().set(new YourDescribeHandlerFactory());
person RobV    schedule 22.01.2014