是否可以在 SPARQL 属性 路径中将变量用作整数?

Is it possible to use variables as integers in SPARQL property paths?

我目前正在尝试创建指向数据类型值的指针,因为它们无法直接链接。但是,我希望能够从 SPARQL 环境中评估指针,这在所需值是有序 rdf:List 的一部分的情况下特别提出了一些问题。我的方法是在 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 查询——基于指针——returns给定索引处的值。据我了解,查询 could/should 看起来像这样:

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

但是,如果我尝试使用 TopBraid 执行此查询,它会显示一条错误消息,指出在预期 <INTEGER> 时已找到 ?index。我还尝试通过 BIND(?index-1 AS ?i) 在 SPARQL 查询中绑定索引,同样没有成功。如果指向的值未存储在列表中,则没有 属性 路径的查询可以正常工作。

通常是否可以在 SPARQL 查询中使用通过数据类型 属性 连接的值作为 属性 路径的路径长度?

此语法:rdf:rest{<number>} 不是标准的 SPARQL。很遗憾,简短的回答是:不,您不能在 SPARQL 属性 路径中将变量用作整数,原因很简单,您不能在 SPARQL 属性 路径中使用整数 完全

在 SPARQL 标准的早期草案中,有人提议使用这种语法来指定 属性 路径的最小和最大长度,例如rdf:rest{1, 3} 将匹配长度为 1 到 3 之间使用 rdf:rest 属性的任何路径。但这从未完全标准化,大多数 SPARQL 引擎都没有实现它。

如果您碰巧使用 实现它的 SPARQL 引擎,您将不得不直接与开发人员联系,询问他们是否可以扩展该机制以允许使用这个位置的变量(错误消息告诉我目前这是不可能的)。

顺便说一句:有一个 SPARQL 1.2 community initiative going on. It only just got started but one of the proposals on the table is re-introducing this particular piece of functionality to the standard