如何将输入变量传递给 R 中的 SPARQL 语句?
How to pass input variable to SPARQL statement in R?
我试图通过在 R 中使用 SPARQL 查询从数据集中获取一些数据,我需要将参数传递给查询:
var_1 <-'?birthday'
query <- 'PREFIX ex: <http://mypersonality.ddm.cs.umu.se/0.1/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX fn: <http://www.w3.org/2005/xpath-functions#>
PREFIX op: <http://environment.data.gov.au/def/op#>
SELECT ?userid ?birthday
WHERE {
?contributor ex:userid ?userid .
?contributor ex:birthday ?birthday .
}limit 30'
qd <- SPARQL::SPARQL(url=endpoint,query=query)$result
我有一个变量 var_1,我需要将它传递给查询而不是直接写入它 (?birthday)。
在这种情况下使用 sprintf
应该会有所帮助。
var_1 <-'?birthday'
query <- sprintf('PREFIX ex: <http://mypersonality.ddm.cs.umu.se/0.1/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX fn: <http://www.w3.org/2005/xpath-functions#>
PREFIX op: <http://environment.data.gov.au/def/op#>
SELECT ?userid %s
WHERE {
?contributor ex:userid ?userid .
?contributor ex:birthday ?birthday .
}limit 30',var_1)
您可能想尝试不同的类型而不是 %s
,具体取决于您的输入内容。尝试 运行 ?sprintf
,这应该可以解释不同类型的所有内容。
另注:
gsub
也可能是个好主意:
var_1 <-'?birthday'
query <- 'PREFIX ex: <http://mypersonality.ddm.cs.umu.se/0.1/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX fn: <http://www.w3.org/2005/xpath-functions#>
PREFIX op: <http://environment.data.gov.au/def/op#>
SELECT ?userid ?birthday
WHERE {
?contributor ex:userid ?userid .
?contributor ex:birthday ?birthday .
}limit 30'
query <- gsub("?birthday",var_1, query,fixed = TRUE)
它在查询中查找 ?birthday
引用并将其替换为变量 var_1
。 fixed 参数用于确保 ex:birthday
不会因为 ?
是正则表达式中的通配符而被替换。
我试图通过在 R 中使用 SPARQL 查询从数据集中获取一些数据,我需要将参数传递给查询:
var_1 <-'?birthday'
query <- 'PREFIX ex: <http://mypersonality.ddm.cs.umu.se/0.1/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX fn: <http://www.w3.org/2005/xpath-functions#>
PREFIX op: <http://environment.data.gov.au/def/op#>
SELECT ?userid ?birthday
WHERE {
?contributor ex:userid ?userid .
?contributor ex:birthday ?birthday .
}limit 30'
qd <- SPARQL::SPARQL(url=endpoint,query=query)$result
我有一个变量 var_1,我需要将它传递给查询而不是直接写入它 (?birthday)。
在这种情况下使用 sprintf
应该会有所帮助。
var_1 <-'?birthday'
query <- sprintf('PREFIX ex: <http://mypersonality.ddm.cs.umu.se/0.1/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX fn: <http://www.w3.org/2005/xpath-functions#>
PREFIX op: <http://environment.data.gov.au/def/op#>
SELECT ?userid %s
WHERE {
?contributor ex:userid ?userid .
?contributor ex:birthday ?birthday .
}limit 30',var_1)
您可能想尝试不同的类型而不是 %s
,具体取决于您的输入内容。尝试 运行 ?sprintf
,这应该可以解释不同类型的所有内容。
另注:
gsub
也可能是个好主意:
var_1 <-'?birthday'
query <- 'PREFIX ex: <http://mypersonality.ddm.cs.umu.se/0.1/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX fn: <http://www.w3.org/2005/xpath-functions#>
PREFIX op: <http://environment.data.gov.au/def/op#>
SELECT ?userid ?birthday
WHERE {
?contributor ex:userid ?userid .
?contributor ex:birthday ?birthday .
}limit 30'
query <- gsub("?birthday",var_1, query,fixed = TRUE)
它在查询中查找 ?birthday
引用并将其替换为变量 var_1
。 fixed 参数用于确保 ex:birthday
不会因为 ?
是正则表达式中的通配符而被替换。