Пути к свойствам SPARQL x / y + дают результат, отличный от x UNION x / y + - PullRequest
1 голос
/ 10 октября 2019

Спецификация путей свойств SPARQL 1.1 содержит:

elt1 / elt2 A sequence path of elt1, followed by elt2
elt*        A path of zero or more occurrences of elt.
elt+        A path of one or more occurrences of elt.

Я ожидаю, что elt1 / elt2* всегда совпадает с объединением elt1 и elt1 / elt2+.

Однако на практике это не так.

Этот запрос возвращает пустой результат

SELECT * FROM <http://www.snik.eu/ontology/bb>
{
 ?class rdfs:label ?label.
 FILTER(LANGMATCHES(LANG(?label),"en"))
 BIND(<http://www.snik.eu/ontology/bb/chapter10.4> as ?chapter)

 ?class meta:chapter/meta:subChapterOf* ?chapter.   
}

Этот запрос возвращает непустой результат

SELECT * FROM <http://www.snik.eu/ontology/bb>
{
 ?class rdfs:label ?label.
 FILTER(LANGMATCHES(LANG(?label),"en"))

 BIND(<http://www.snik.eu/ontology/bb/chapter10.4> as ?chapter)

 {?class meta:chapter ?chapter}
 UNION
 {?class meta:chapter/meta:subChapterOf+ ?chapter.}
}

Почему это так?

  1. Не верно ли мое предположение, что elt1/elt2* = elt1 UNION elt1/elt2+?
  2. Не правильно ли я перевел это предположение в запросы SPARQL? Или есть какая-то ошибка в запросе, которая не перехватывается анализатором запросов?
  3. Или это специфическая для реализации деталь конечной точки SPARQL? Я использую Virtuoso версию 07.20.3217 для Linux (x86_64-unknown-linux-gnu), Single Server Edition.

PS

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

Обновление

У нас есть другие похожие странные результаты в отношениипути собственности и предположим, что это как-то связано со старой версией конечной точки Virtuoso. К сожалению, мы не можем выполнить обновление до последней версии из-за некоторых приложений, использующих библиотеку PHP5.6 ODBC, поэтому сейчас мы попытаемся обойти эту проблему.

...