代码之家  ›  专栏  ›  技术社区  ›  wst

从所有列和行中获得唯一值集的SPARQL

  •  0
  • wst  · 技术社区  · 5 年前

    我有一个返回多个列的查询,即:

    SELECT ?a ?b ?c
    WHERE { ... }
    

    每个列变量都是一个IRI。显然,这会为列值的每个组合返回唯一的行(请注意,值可能不是列的唯一值):

    <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>
    ...
    

    <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来实现这一点,或者我需要对结果进行后期处理以合并和去重这些值吗?秩序不重要。

    0 回复  |  直到 5 年前
        1
  •  3
  •   cygri    5 年前
    SELECT DISTINCT ?d {
        ...
        VALUES ?i { 1 2 3 }
        BIND (if(?i=1, ?a, if(?i=2, ?b, ?c)) AS ?d)
    }
    

    这是干什么的?

    1. 这个 VALUES ?i
    2. 这个 BIND 子句创建新变量 ?d ?a , ?b ?c ,取决于 ?我
    3. 这个 SELECT DISTINCT ?d 仅返回 ?丁 并删除重复项