#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>
. Как глава запроса узнает, куда поместить промежуточную переменную?