Упорядочить по результатам маскирования SPARQL

У меня есть длинный запрос в Sparql, и я хочу упорядочить результаты по числовому полю «настроение». Все работает нормально, если я включаю поле в SELECT и GROUPBY, иначе происходит сбой. Но я хотел бы отобразить запрос, не показывая поле «настроение», как в запросе SQL. Возможно ли это в SPARQL?

Запрос:

SELECT  ?Sentiment ?Restaurant ?Name ?Address ?Score ?City ?State (SAMPLE(?photo) as ?image) SAMPLE(?Text) as ?text) (SAMPLE(?Review) as ?review) (SAMPLE(?TStyle) as ?style) (SAMPLE(?TAmbiance) as   ?ambient) (SAMPLE(?TService) as ?service)
where { ?Restaurant :hasName ?Name;
                :Dish ?Dish;
                :Score ?Score;
                :hasAddress ?Address;
                :photo ?photo;
                :HasReview ?Review;
                :Parking ?Parking;
                :CreditCard ?CreditCard;
                :Delivery ?Delivery;
                :Kids ?Kids;
                   :hasTopic ?o;
                   :Sentiment ?Sentiment.
   ?Address :hasCity ?City;
            :hasState ?State;
            :Lat ?Lat;
            :Long ?Long.
   ?Review :Text ?Text.
   BIND (exists{?Restaurant :hasTopic :style} AS ?TStyle).              
   BIND (exists{?Restaurant :hasTopic :ambiance} AS ?TAmbiance).
   BIND (exists{?Restaurant :hasTopic :service} AS ?TService).

   FILTER(contains(str(?Text), "sushi"))
   } GROUP BY ?Restaurant ?Name ?Address ?Score ?City ?State ?Sentiment
   ORDER BY DESC((?Sentiment))

Как я мог сформировать запрос и упорядочить результаты, не показывая само поле «настроение» или улучшить запрос в целом?

Спасибо.


person terseason    schedule 19.12.2019    source источник
comment
почему тогда нельзя просто удалить ?Sentiment из части SELECT?   -  person UninformedUser    schedule 19.12.2019
comment
Тогда запрос не упорядочивает результаты должным образом.   -  person terseason    schedule 19.12.2019
comment
Какой у вас движок SPARQL? Это похоже на ошибку. Возможно, ошибка вызвана двойными круглыми скобками в вашем ORDER BY DESC((?Sentiment)), поэтому я бы попытался изменить это на ORDER BY DESC(?Sentiment) (и удалить ?Sentiment из SELECT).   -  person TallTed    schedule 19.12.2019
comment
Я использую Аллегограф. Да, я уже пытался выйти из скобок и выбрать, и порядок не правильный.   -  person terseason    schedule 19.12.2019
comment
Перед добавлением SAMPLE(?Text) as ?text) работает нормально. Проблема возникает при добавлении GROUPBY.   -  person terseason    schedule 19.12.2019
comment
Я согласен с @TallTed - это звучит как ошибка. Возможно, вам стоит обратиться к разработчикам Allegrograph.   -  person Jeen Broekstra    schedule 20.12.2019
comment
Я заметил, что вам не хватает открывающей скобки в SELECT... SAMPLE(?Text) as ?text) должно быть (SAMPLE(?Text) as ?text). Кроме того, вы сказали, что перед добавлением ?text все работало нормально, но затем вы сказали, что проблема возникла при добавлении GROUP BY (т.е. не при добавлении ?text) - поэтому, возможно, вам следует показать работающий запрос и измененный запрос, который не работает. , чтобы мы могли видеть, какие изменения вы вносите.   -  person TallTed    schedule 20.12.2019


Ответы (2)


Спасибо за отчет. Эта проблема ORDER BY может пойти не так, если переменная не проецируется, является известной проблемой AllegroGraph (bug25806), которая будет исправлена ​​в следующем выпуске 7.0.

person Willem Broekema    schedule 31.12.2019

Хотя я недостаточно знаю спецификации SPARQL, чтобы решить, имеет ли это когда-либо смысл вне обхода ошибки, вы всегда можете «замаскировать» результаты, обернув свой запрос как подзапрос SPARQL 1.1:

SELECT ?var1 ?var2 ... ?varn
{
 ...
}

"маскирование" ?varx становится

SELECT ?var1 ?var2 ... ?var(x-1) ?var(x+1) ... ?varn
{
 SELECT ?var1 ?var2 ... ... ?varn
 {
  ...
 }
}
person Konrad Höffner    schedule 27.12.2019