Rdf 无法得到结果

Rdf 无法得到结果,rdf,sparql,ontology,Rdf,Sparql,Ontology,我试图实现一个SPARQL查询,它从RDF数据中的一个对象获取子字符串 通过以下查询,我在?Substring列中得到一个空结果。我在?subject、?predicate和?object列中获得有效输出,但?Substring列不产生输出 SELECT * WHERE { ?S ?P ?O . BIND(SUBSTR(?O, 2, 3) AS ?Substring) } ?O中的值实际上是字符串文字吗?如果没有,那么就什么也不做,因为它只是处理文本。如果值是uri/Blank节点

我试图实现一个SPARQL查询,它从RDF数据中的一个对象获取子字符串

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

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

?O
中的值实际上是字符串文字吗?如果没有,那么就什么也不做,因为它只是处理文本。如果值是uri/Blank节点,那么您总是会得到一个空列,并按原样编写查询

您可以使用该函数转换为字符串,这可能会导致您开始获得非空结果,如下所示:

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)
i、 e.从索引2开始的1个字符