У меня есть несколько именованных графов, хранящихся в Virtuoso, и я хочу найти тот, который соответствует наибольшему количеству терминов из предоставленного списка.
Мой запрос построен программно и выглядит так:
SELECT DISTINCT ?graph (count(DISTINCT ?match) as ?matches)
WHERE {
GRAPH ?graph {
{?match rdf:label "term 1"}
UNION {?match rdf:label "term 2"}
UNION {?match rdf:label "term 3"}
...
}
}
ORDER BY DESC(?matches)
Каждый термин становится еще одним предложением UNION.
Есть лучший способ сделать это? Запрос быстро становится длинным и уродливым, и Virtuoso жалуется, когда терминов слишком много.