Вложенный SPARQL-запрос - PullRequest
       97

Вложенный SPARQL-запрос

0 голосов
/ 13 апреля 2020

У меня есть следующая структура Объект, и у каждого Объекта есть несколько Дочерних объектов как Журнал изменений для Родительского объекта, и у каждого Журнала изменений есть Автор. enter image description here

Теперь у каждого журнала изменений есть статус и метка времени. Теперь я хотел бы написать запрос SPARQL, в котором мне нужно получить список объектов, в которых я являюсь автором и обладаю определенным статусом. скажите «быть утвержденным», и это должен быть последний список изменений.

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

select ?Object WHERE{  ?author myPrefix:userId "myuserid".             
      ?changelog myPrefix:hasApprover ?author .
      ?changelog myPrefix:timestamp ?dv
      FILTER( ?dv >= ?latestdate )
       {
            SELECT (max(?dv1) AS ?latestdate) WHERE { 
               ?Object myPrefix:hasChangeLog ?changelog .
               ?Object  myPrefix:hasChangeLog ?changelog1 .
               ?changelog1 myPrefix:timestamp ?dv1 .                    
            }

        }
       ?changelog myPrefix:status "To be approved" .
       ?Object  myPrefix:hasChangeLog ?changelog .}

Что я делаю неправильно, так это то, что он сравнивает его со всеми списками изменений объектов, а не с объектным сравнением. достичь этого?

1 Ответ

0 голосов
/ 28 апреля 2020

Согласно предложению UninformedUser:

select ?Object WHERE{  ?author myPrefix:userId "myuserid".             
  ?changelog myPrefix:hasApprover ?author .
  ?changelog myPrefix:timestamp ?dv
  FILTER( ?dv >= ?latestdate )
   {
        SELECT (max(?dv1) AS ?latestdate) WHERE { 
           ?Object  myPrefix:hasChangeLog ?changelog1 .
           ?changelog1 myPrefix:timestamp ?dv1 .                    
        }group by ?Object

    }
   ?changelog myPrefix:status "To be approved" .
   ?Object  myPrefix:hasChangeLog ?changelog .}
...