Можно ли использовать переменные как целые числа в путях свойств SPARQL? - PullRequest
1 голос
/ 17 октября 2019

В настоящее время я пытаюсь создать указатели на значения типов данных, поскольку они не могут быть связаны напрямую. Тем не менее, я хотел бы иметь возможность оценить указатели из среды SPARQL, которая возникла именно в том случае, если желаемое значение является частью упорядоченного rdf: перечислите несколько вопросов для меня. Мой подход состоит в том, чтобы использовать пути свойств в запросе SPARQL, в котором я могу использовать определенный индивид, свойство и индекс упорядоченного списка, который указатель прикрепил к нему.

Учитывая следующие примеры данных с укороченным синтаксисом упорядоченных списков по ttl:

 ex:myObject ex:somePropery ("1" "2" "3") .
 ex:myPointer ex:lookAtIndividual ex:myObject;
   ex:lookAtProperty ex:someProperty ;
   ex:lookAtIndex "3"^^xsd:integer .

Теперь я хотел бы создать запрос SPARQL, который - на основе указателя - возвращаетзначение по данному индексу. Насколько я понимаю, запрос может / должен выглядеть примерно так:

 SELECT ?value
 WHERE {
   ex:myPointer ex:lookAtIndividual ?individual ;
      ex:lookAtProperty ?prop ;
      ex:lookAtIndex ?index .
   ?individual ?prop/rdf:rest{?index-1}/rdf:first ?value .
}

Но если я попытаюсь выполнить этот запрос с TopBraid, он выдаст сообщение об ошибке, что ?index было найдено, когда <INTEGER> былоожидается. Я также попытался связать индекс в запросе SPARQL через BIND(?index-1 AS ?i), опять же безуспешно. Если указанное значение не сохраняется в списке, запрос без пути к свойствам работает нормально.

Можно ли вообще использовать значение, связанное через свойство типа данных в запросе SPARQL, в качестве длины пути для путей к свойствам?

1 Ответ

1 голос
/ 18 октября 2019

Этот синтаксис: rdf:rest{<number>} не является стандартным SPARQL. Поэтому, к сожалению, короткий ответ: нет, вы не можете использовать переменные в качестве целых чисел в путях свойств SPARQL, по той простой причине, что вы не можете использовать целые числа в путях свойств SPARQL вообще .

В более ранней версии стандарта SPARQL было предложено использовать этот вид синтаксиса, чтобы указать минимальную и максимальную длину пути свойства, например, rdf:rest{1, 3} будет соответствовать любым путям, используя rdf:restсвойства между длиной 1 и 3. Но это никогда не было полностью стандартизировано, и большинство движков SPARQL не реализуют его.

Если вам случится использовать механизм SPARQL, который реализует его , вам придется напрямую связаться с разработчиками, чтобы спросить, могут ли они расширить механизм, чтобы разрешить использование переменных вэта позиция (сообщение об ошибке подсказывает мне, что в настоящее время это просто невозможно).

В качестве отступления: существует инициатива сообщества SPARQL 1.2 . Это только начало, но одно из предложенных предложений - повторное введение этой конкретной функциональности в стандарт .

...