如何将输入变量传递到R中的SPARQL语句?

时间:2018-10-19 06:42:29

标签: r sparql

我试图通过在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,我需要将其传递给查询,而不是直接写它(生日)。

1 个答案:

答案 0 :(得分:1)

在这种情况下,使用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。固定参数用于确保ex:birthday由于正则表达式中的通配符也未被替换。{p>