首页 > 解决方案 > 如何进行 SPARQL 查询来计算 OPTIONAL 子句中的唯一节点

问题描述

我想做一个 SPARQL 查询,计算包含和不包含 OPTIONAL 子句的唯一节点,如下所示:

SELECT (count(?o) AS ?numA) (count(DISTINCT ?o) AS ?numD) (count(?r) AS ?numO) ?UniqueCountOf_o_within_the_OPTIONAL_clause
WHERE {
  ?i ex:predicate ?o.
  OPTIONAL {
    ?o rdf:type ?r.
  }
}

可以正确获取 numA、numD 和 numO 的值,但我不知道在 OPTIONAL 子句中获取 ?o 的唯一计数。有什么方法可以进行查询,还是应该将其分成两个查询?

谢谢。

标签: sparql

解决方案


您可以将 OPTIONAL 子句中的 ?o 的值复制到新变量 ?o2 中,然后计算 ?o2 上不同值的数量。

SELECT (count(?o) AS ?numA) (count(DISTINCT ?o) AS ?numD) (count(?r) AS ?numO) (count(DISTINCT ?o2) AS ?numX) WHERE {
  ?i ex:predicate ?o.
  OPTIONAL {
    ?o rdf:type ?r.
    BIND (?o AS ?o2)
  }
}

推荐阅读