我正在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") }
谢谢!
答案 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]" |
---------