是否可以在 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。
我目前正在尝试创建指向数据类型值的指针,因为它们无法直接链接。但是,我希望能够从 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。