【问题标题】:Unable to get the result无法得到结果
【发布时间】:2014-04-02 07:39:38
【问题描述】:

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

通过以下查询,我在?Substring 列中得到一个空结果。我在?subject、?predicate 和?object 列中得到有效输出,但?Substring 列不产生输出。

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

【问题讨论】:

    标签: rdf sparql ontology


    【解决方案1】:

    ?O 中的值实际上是字符串文字吗?如果不是,那么SUBSTR() 将不会做任何事情,因为只有defined 可以处理文字。如果值是 URIs/Blank Nodes,那么您总是会得到一个空列,而查询是按原样编写的。

    您可以使用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 个字符

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-09
      相关资源
      最近更新 更多