ПОСТРОИТЬ запрос, сохраняющий структуру списка

#sparql #rdf

#sparql #rdf

Вопрос:

У меня есть список из трех элементов, подобных этому:

 <Employee#1> <hasOrderedTasks> [ a rdf:List ; rdf:first <FirstTask> ;
                                 rdf:rest [ rdf:first <SecondTask> ;
                                 rdf:rest [ rdf:first <ThirdTask> ;
                                 rdf:rest rdf:nil ] ] ] .
  

Мой вопрос: как мне вернуть список (с его структурой), используя запрос типа CONSTRUCT ?
Обратите внимание, что список может содержать переменное количество элементов, и запрос должен быть обобщен на это.
Я мог бы использовать что-то вроде:

 CONSTRUCT {
 ?employee <hasOrderedTasks> ?list .
 ?list <hasElement> ?element 
 }
WHERE {
 ?employee <hasOrderedTasks> ?list .
 ?list rdf:rest*/rdf:first ?element .
 }
  

Однако это нарушило бы порядок моего списка. Я мог бы, конечно, использовать некоторую агрегацию в подзапросе для вычисления индекса элементов в списке, но даже это не позволило бы воссоздать мой список как есть.
Возможно, есть какая-то другая функция, которая может мне помочь? Или это просто невозможно в SPARQL?

Комментарии:

1. это не сработает, RDF — это просто набор троек. Вы должны сохранить порядок между элементами списка, то есть вы должны добавить тройки между элементами. Нравится <nextElement> как отношение. Таким образом, вам понадобится промежуточная переменная в вашем тройном шаблоне, основанном на пути к свойству

2. Спасибо. Я все еще не на 100% понимаю, как помогло бы добавление промежуточной переменной и <nextElement> . Как глава запроса узнает, куда поместить промежуточную переменную?