2015-05-17 1 views
0

Я пытаюсь выполнить этот запрос SPARQL в PROTEGE 2000, но функция MAX не работает. это как Макс() не принимает тип? cpt.SPARQL - Max() не работает

SELECT ?searcher (COUNT(?publication) AS ?cpt) 
WHERE {ont:GradeP ont:isFor ?searcher. 
    ?publication ont:isPublishedBy ?searcher.} 
GROUP BY ?searcher 
HAVING (MAX(?cpt)) 

вот исключение:

SparqlReasonerException: org.openrdf.query.QueryEvaluationException: Unsupported value expr type: class org.openrdf.query.algebra.Max 

Запрос работает без HAVING, поэтому я предполагаю, что нет никаких проблем с моей онтологии. Так может понравиться, кто-нибудь скажет мне, где это проблема. Благодаря!

+0

Не должно ли выражение, предоставленное для 'HAVING', вычислять логическое значение? Как вы думаете, что будет достигнуто, когда все, что вы предоставляете, - это числовое значение, возвращаемое с 'MAX'? –

+0

Кроме того, есть ли у вашего запроса некоторые переводы? В вашей первой строке вы используете переменную '? Chercheur', но в предложении' WHERE' вы используете '? Искатель'. –

+0

Это искатель, извините, я изменил это неправильно. вы правда о 'HAVING' не обращали внимания. – Calips

ответ

2

Я не уверен, почему вы используете group by здесь, но, возможно, у вас есть причина. Один из способов сделать это - использовать order by. Я привел пример по dbpedia.

select distinct ?x count(?y) as ?count 
where{ 
    ?x a dbpedia-owl:Person. 
    ?x dbpprop:author ?y 
} 
order by desc(?count) 
limit 1 

Результат here.

+0

Спасибо, что он работает! не смог заставить его работать без GROUP BY, я до сих пор не знаю почему. – Calips

+0

@Artemis Этот запрос не является законным SPARQL (даже если Virtuoso принимает его). Вы можете проверить с помощью проверки достоверности запроса sparql.org. Это должно быть '(count (? Y) as? Count)', –

+0

@JoshuaTaylor, так что вы только подразумеваете, что фигурные скобки отсутствуют или логика виновата? Веб-сайт был недоступен, поэтому я не мог проверить. – Artemis