Используемая вами функция - SPARQL 1.1, поэтому она не поддерживалась в более ранних версиях ARQ. Единственный способ написать запрос, близкий к тому, что вы делаете, - это выполнить одно из следующих действий.
Объединение путей разной длины
PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT *
WHERE
{
{ ?x owl:sameAs ?y }
UNION
{ ?s owl:sameAs [ owl:sameAs ?y ] . }
UNION
{ ?s owl:sameAs [ owl:sameAs [ owl:sameAs ?y ] ] . }
# Repeat the above pattern up to whatever limit you want
}
Использовать код на стороне клиента
Выполните начальный запрос следующим образом:
PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT * WHERE { ?x owl:sameAs ?y }
Составьте список ?y
значений, затем для каждого значения выдайте запрос вида:
PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT * WHERE { <constant> owl:sameAs ?y }
Где вы подставляете <constant>
одно из значений из списка каждый раз, а затем добавляете новые значения ?y
в список.
Единственное, с чем вам следует быть осторожным при таком подходе, это отслеживать значения, для которых вы уже выполнили второй запрос, чтобы сохранить повторяющиеся запросы.