SPARQL字符串RANGE

时间:2013-08-01 06:21:36

标签: string selection sparql region

我试图通过使用索引号来提取字符串的一部分。 有了

"OEIUFHWOIEFWNFOPQWJFHQWOIHFEB..."

我需要来自5:10 (FHWOIE)的字符串我发现通过REGEX无法返回,因为它只返回布尔值而不返回组。但是,我没有设法通过位置找到字符串上的区域选择。现在我想知道是否有?

我发现部分可能通过......

BIND(REPLACE(?sequence, '^.{100}', "") AS ?sequencestrip1)

但不是

BIND(REPLACE(?sequence, '^.{?start}', "") AS ?sequencestrip1)

我认为这适用于任何有兴趣的人:

BIND(REPLACE(?sequence, "^.{"+str(?start)+"}", "") AS ?sequencestrip1)

当然要删除您感兴趣的区域

BIND(REPLACE(?region, ".{"+str(strlen(?region)-10)+"}$", "") AS ?upstream)

1 个答案:

答案 0 :(得分:5)

在第一个SPARQL Query Language for RDF中,这将是相当困难的,因为没有很多字符串操作函数。但是,在您的问题中,您使用replace中显示的SPARQL 1.1 Query Language。这对你有好处,因为除了replace之外,SPARQL 1.1还包含更多的字符串操作函数。其中之一substr完全符合您的需求。例如,这是一个查询,其中?string绑定到您提到的字符串,substr用于提取您正在查找的子字符串并将其绑定为?substring

select * where { 
  values ?string { "OEIUFHWOIEFWNFOPQWJFHQWOIHFEB..." }
  bind( substr( ?string, 5, 6 ) as ?substring )
}

结果是:

--------------------------------------------------
| string                             | substring |
==================================================
| "OEIUFHWOIEFWNFOPQWJFHQWOIHFEB..." | "FHWOIE"  |
--------------------------------------------------

请注意,substr的第二个参数是起始位置(第一个索引为1),第三个参数是子字符串的 length ,而不是最终位置。你想要一个子字符串FHWOIE,它有六个字符,第三个参数是6。