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

可以在SPARQL属性路径中将变量用作整数吗?,sparql,semantic-web,linked-data,propertypath,Sparql,Semantic Web,Linked Data,Propertypath,我目前正在尝试创建指向数据类型值的指针,因为它们不能直接链接。但是,我希望能够从SPARQL环境中评估指针,这是在所需值是有序rdf的一部分的情况下特别提出的:为我列出一些问题。我的方法是在SPARQL查询中使用属性路径,在该查询中,我可以使用指针所附加到的有序列表的已定义个体、属性和索引 给出以下示例数据以及ttl排序列表的缩写语法: ex:myObject ex:somePropery ("1" "2" "3") . ex:myPointer ex:lookAtIndividual ex

我目前正在尝试创建指向数据类型值的指针,因为它们不能直接链接。但是,我希望能够从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执行此查询,它会显示一条错误消息,即在预期的
时发现了
?索引。我还尝试通过
BIND(?index-1 AS?I)
在SPARQL查询中绑定索引,但同样没有成功。如果指向的值未存储在列表中,则不带属性路径的查询可以正常工作


通常是否可以使用SPARQL查询中通过datatype属性连接的值作为属性路径的路径长度

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

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

如果您碰巧使用了一个SPARQL引擎来实现它,那么您必须直接与开发人员联系,询问他们是否可以扩展该机制以允许在此位置使用变量(错误消息向我表明,目前不可能)


顺便说一句:有一个正在发生的事情。它才刚刚开始,但摆在桌面上的一个建议是

即使在属性路径草案中,也不允许使用最小/最大长度变量不可能,没有标准SPARQL。Virtuoso支持它,例如
:p{1,3}
,但我不知道有任何系统也允许变量。您必须了解,这将使查询优化几乎不可能,我也看不到任何真实的用例。