0

我是 SPARQL 的新手,我有一个问题,我如何过滤对象的值与从不同对象收集的一组值不同的情况?我想将查询用作 SPARQL-SHACL 的一部分。

我可以毫无问题地访问我要检查的值,但是后来以某种方式检查了单个值,而不是它是否在值列表/值系列中

例子:

  • 我的变量 ?value 是 6
  • 我想检查 6 的 ?value 是否不等于对象 ?obj ?obj 的任何值对于不同的三元组(不同的主题)有单个值,例如 1 表示一种情况,2 表示另一种情况,3 表示其他情况。 ..

如果我做 FILTER (?value!=?obj) 我得到 6!=1 的所有情况,依此类推,我希望能够做 ?value NOT IN (?obj) 其中 ?obj 是一个列表 1、2、 3,.... 我假设在这种情况下,我只会得到一个结果,即 6 在列表中找不到。

所以也许有2个问题

  • 是否可以从 ?obj 构造一个列表作为查询的一部分,以便我最终可以使用 NOT IN?
  • 有没有其他方法可以解决这个问题?

提前致谢。

4

1 回答 1

0

非常感谢您的回答。我自己找到了一个解决方案,但如果有更有效的解决方案可用,我会很高兴知道它们。

SELECT  $this ?value (COUNT(?type) AS ?types) ?typesall
        WHERE {
    {
    SELECT $this (COUNT(?typeall) AS ?typesall)
    WHERE {
        ?nscpointsa ex:class.assend  $this .
        ?nscpointsa rdf:type ?typeall .
      }
    GROUP BY $this ?typesall
    }
    $this $PATH ?value .
    OPTIONAL {$this ex:class2.control ?contr}.
    $this ex:class3.control1 ?control1 .
    ?nscpoints ex:class.assend  $this .
    ?nscpoints rdf:type ?type .
    ?nscpoints ex:class.attr1 ?attr1 .  
    FILTER (bound(?contr) && ?control1=true && ?value!=?attr1) .
        }
  GROUP BY $this ?value ?types ?typesall
  HAVING(?types=?typesall)
于 2020-08-02T19:07:22.903 回答