Извините за неукротимое название, я французский, и я не знал, как разоблачить мою проблему. Я думаю, что лучший способ объяснить это - пример.Sparql - Как построить RDF, выбрав MAX значения объектов, сгруппированных по свойствам?
У меня есть несколько наборов RDF, как это:
prefix p: <http://localhost/rdf/>
p:set p:hasTitle p:val1 .
p:set p:hasTitle p:val2 .
p:set p:hasAuthor p:val3 .
p:set p:hasAuthor p:val4 .
p:val1 p:hasValue "Harry Peter" .
p:val1 p:hasScore 0.30 .
p:val2 p:hasValue "Harry Potter" .
p:val2 p:hasScore 0.90 .
p:val3 p:hasValue "J. K. Rowling".
p:val3 p:hasScore 0.90 .
p:val4 p:hasValue "Joanne Rowling" .
p:val4 p:hasScore 0.50 .
Я хочу, чтобы построить другой граф с SPARQL запросом, только значение с лучшим счетом для каждого отдельного свойства. В этом примере, запрос должен вернуть это:
prefix p: <http://localhost/rdf/>
p:set p:hasTitle p:val2 .
p:set p:hasAuthor p:val3 .
p:val2 p:hasValue "Harry Potter" .
p:val2 p:hasScore 0.90 .
p:val3 p:hasValue "J. K. Rowling" .
p:val3 p:hasScore 0.90 .
Пока я пытался что-то вроде этого:
PREFIX p: <http://localhost/rdf/>
CONSTRUCT {
p:root p:hasSameAsSet ?saSet .
?saSet ?prop ?bestVal .
?bestVal ?p ?v
}
WHERE {
?s p:hasSameAsSet ?saSet .
?saSet ?prop ?val .
?bestVal ?p ?v .
?bestVal p:hasQualityScore ?m
{
SELECT (MAX(?score) AS ?m)
WHERE {
?val p:hasQualityScore ?score
} GROUP BY ?prop
}
}
Я открывать SPARQL и я знаю, что я пропускаю важные вещи. Надеюсь, кто-то может мне помочь, спасибо вам большое! Если мой вопрос не ясен, я могу попытаться объяснить его лучше. Не волнуйтесь за свои ответы, я лучше читаю, чем писать;)
Первый комментарий: сначала выполняются подвыборки, поэтому вам нужен тройной шаблон '? SaSet? Prop? Val .' внутри него. И вам нужно группировать «значение», чтобы вернуть его. Вам нужно вернуть '? Prop? Val' в подвыбор в дополнение к максимальному значению. – AKSW