我正在尝试实现一个SPARQL查询,该查询从我的RDF数据中的对象获取子字符串。
使用以下查询,我在?Substring
列中得到一个空结果。我在?subject
,?predicate
和?object
列中获得了有效输出,但?Substring
列未生成输出。
SELECT * WHERE
{
?S ?P ?O .
BIND(SUBSTR(?O, 2, 3) AS ?Substring)
}
答案 0 :(得分:3)
?O
中的值是否实际上是字符串文字?如果没有,那么SUBSTR()
将不会执行任何操作,因为只有defined才能处理文字。如果值是URI /空节点,那么您总是会得到一个空列,并且您的查询按原样编写。
您可以使用STR()
函数转换为字符串,这可能会导致您开始获得非空结果,如下所示:
SELECT * WHERE
{
?S ?P ?O .
BIND(SUBSTR(STR(?O), 2, 3) AS ?Substring)
}
通常在SPARQL中,如果从表达式求值创建的列对于给定行为空,则表示该表达式计算为该行的错误。如果你仍然得到空的结果,那么你需要更仔细地观察你的表达式,找出问题所在。
在您的情况下,另一种可能性是指定的字符范围无效,请注意SPARQL SUBSTR()
函数采用起始索引和长度,因此您在此处要求从索引2开始的3个字符。如果您来自像Java这样的语言,其中最后一个参数是结束索引,你想要得到索引2和3之间的子串,那么你实际需要的是以下内容:
BIND(SUBSTR(STR(?O), 2, 1)
即。从索引2开始的1个字符