字符串上的SPARQL VALUES关键字?

时间:2015-12-18 19:01:46

标签: sparql

我正在http://lod.openlinksw.com/sparql执行以下查询。 我想在org-study-id谓词上使用SPARQL 1.1 VALUES关键字同时为所有研究提取三元组。当我在VALUES语句中显式声明#string类型时,此查询有效:

PREFIX ct: <http://bio2rdf.org/clinicaltrials_vocabulary:>
SELECT * 
WHERE {
  VALUES (?value) {("N01009"^^<http://www.w3.org/2001/XMLSchema#string>)
                   ("N01020"^^<http://www.w3.org/2001/XMLSchema#string>)}
 ?nctID ct:org-study-id ?value .
}

有没有办法可以通过省略#string类型规范来缩短VALUES列表?这段代码是我正在寻找的但是给出了语法错误:

VALUES (str(?value)) { ("N01009") ("N01020") }

谢谢!

1 个答案:

答案 0 :(得分:3)

在RDF 1.1中,“普通”字符串的类型为xsd:string,所以你可能只是这样做:

VALUES (?value) { ("N01009") ("N01020") }

因为只有一个值,所以你不需要列表,所以你可以这样做:

VALUES ?value { "N01009" "N01020" }

例如,使用Jena的ARQ,我们得到了这些结果:

select ?x (datatype(?x) as ?xd) {
  values ?x { "a" }
}
---------------------------------------------------
| x   | xd                                        |
===================================================
| "a" | <http://www.w3.org/2001/XMLSchema#string> |
---------------------------------------------------

但如果您需要对每个值应用某些函数(无论是字符串还是其他值),您可以使用 bind

values ?value_ { "N01009" "N01020" }
bind(str(?value_) as ?value)

例如:

select ?x {
  values ?x_ { "a" "b" "c" }
  bind(concat("[",?x_,"]") as ?x)
}
---------
| x     |
=========
| "[a]" |
| "[b]" |
| "[c]" |
---------