无法得到结果

时间:2014-04-02 07:39:39

标签: rdf sparql ontology

我正在尝试实现一个SPARQL查询,该查询从我的RDF数据中的对象获取子字符串。

使用以下查询,我在?Substring列中得到一个空结果。我在?subject?predicate?object列中获得了有效输出,但?Substring列未生成输出。

SELECT * WHERE
{
   ?S ?P ?O .
   BIND(SUBSTR(?O, 2, 3) AS ?Substring)
}

1 个答案:

答案 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个字符