将多个SPARQL变量绑定为一个

Bon*_*lin 10 sparql

有没有办法做这样的事情:

BIND((?s1, ?s2, ?s3) AS ?s)
Run Code Online (Sandbox Code Playgroud)

这样查询?s将被分发到列表?

编辑

顺便说一下,似乎以下不起作用.难道我做错了什么?

SELECT *
WHERE
{
  VALUES (?s1 ?s2 ?s3) {(1 4 7) (2 5 8) (3 6 9)} .
  {
    {
      BIND(?s1 AS ?s)
    }
    union
    {
      BIND(?s2 AS ?s)
    }
    union
    {
      BIND(?s3 AS ?s)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Jos*_*lor 12

如果您具有要使用的具体值?s,则可以在SPARQL 1.1中使用VALUES.如果您没有具体值,那么如果您可以构造查询以便?s由子查询生成,则仍可以执行此操作.我将使用以下数据给出每个示例:

@prefix : <http://example.org/> .

:t :hasEss :s1, :s2, :s3  .
:s1 :value "larry" .
:s2 :value "curly" .
:s3 :value "moe" .
Run Code Online (Sandbox Code Playgroud)

运用 VALUES

VALUES 指定一个或多个变量的固定值.

prefix : <http://example.org/>

select * where { 
  values ?s { :s1 :s2 :s3 }
  ?s :value ?value
}

$ arq --data data.n3 --query values.query
-----------------
| s   | value   |
=================
| :s1 | "larry" |
| :s2 | "curly" |
| :s3 | "moe"   |
-----------------
Run Code Online (Sandbox Code Playgroud)

我们?s这里只使用一个(),但语法也支持更多,所以在将来,如果你需要它,你也可以做

values (?x ?y) { (:x1 :y1) (:x2 :y2) ... }
Run Code Online (Sandbox Code Playgroud)

使用子查询

您还可以编写一个查找值的子查询,?s然后superquery将使用这些结果.

prefix : <http://example.org/>

select * where { 
  { 
    select ?s where { 
      :t :hasEss ?s
    }
  }
  ?s :value ?value
}

$ arq --data data.n3 --query subquery.sparql
-----------------
| s   | value   |
=================
| :s3 | "moe"   |
| :s2 | "curly" |
| :s1 | "larry" |
-----------------
Run Code Online (Sandbox Code Playgroud)