SPARQL 用于所有列和行的唯一值集
SPARQL for unique set of values from all columns and rows
我有一个查询 returns 几列,即:
SELECT ?a ?b ?c
WHERE { ... }
每个列变量都是一个 IRI。显然,这 returns 列值的每个组合的唯一行(请注意,列值可能不是唯一的):
<urn:id:x:1> <urn:id:a:2> <urn:id:j:3>
<urn:id:x:1> <urn:id:a:2> <urn:id:j:4>
<urn:id:x:1> <urn:id:j:4> <urn:id:k:5>
<urn:id:y:2> <urn:id:j:4> <urn:id:k:6>
...
但是,我所需要的只是跨越所有行和列的唯一 IRI。即:
<urn:id:x:1>
<urn:id:a:2>
<urn:id:j:3>
<urn:id:j:4>
<urn:id:k:5>
<urn:id:y:2>
<urn:id:k:6>
...
是否可以使用 SPARQL 实现此目的,或者我是否需要 post 处理结果以合并和删除重复值?顺序并不重要。
SELECT DISTINCT ?d {
...
VALUES ?i { 1 2 3 }
BIND (if(?i=1, ?a, if(?i=2, ?b, ?c)) AS ?d)
}
这是做什么的?
VALUES
子句为每个解决方案创建三个副本,并用变量 ?i
对它们进行编号
BIND
子句创建一个新变量?d
,其值为?a
、?b
或?c
,取决于是否?i
在给定的解决方案中是 1、2 或 3
-
SELECT DISTINCT ?d
returns 仅 ?d
并删除重复项
我有一个查询 returns 几列,即:
SELECT ?a ?b ?c
WHERE { ... }
每个列变量都是一个 IRI。显然,这 returns 列值的每个组合的唯一行(请注意,列值可能不是唯一的):
<urn:id:x:1> <urn:id:a:2> <urn:id:j:3>
<urn:id:x:1> <urn:id:a:2> <urn:id:j:4>
<urn:id:x:1> <urn:id:j:4> <urn:id:k:5>
<urn:id:y:2> <urn:id:j:4> <urn:id:k:6>
...
但是,我所需要的只是跨越所有行和列的唯一 IRI。即:
<urn:id:x:1>
<urn:id:a:2>
<urn:id:j:3>
<urn:id:j:4>
<urn:id:k:5>
<urn:id:y:2>
<urn:id:k:6>
...
是否可以使用 SPARQL 实现此目的,或者我是否需要 post 处理结果以合并和删除重复值?顺序并不重要。
SELECT DISTINCT ?d {
...
VALUES ?i { 1 2 3 }
BIND (if(?i=1, ?a, if(?i=2, ?b, ?c)) AS ?d)
}
这是做什么的?
VALUES
子句为每个解决方案创建三个副本,并用变量?i
对它们进行编号
BIND
子句创建一个新变量?d
,其值为?a
、?b
或?c
,取决于是否?i
在给定的解决方案中是 1、2 或 3-
SELECT DISTINCT ?d
returns 仅?d
并删除重复项