如何进行SPARQL查询,对OPTIONAL子句中的唯一节点进行计数

如何进行SPARQL查询,对OPTIONAL子句中的唯一节点进行计数,sparql,Sparql,我想做一个SPARQL查询,计算可选子句内和不含可选子句的唯一节点,如下所示: 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和

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

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的唯一计数。有没有办法进行查询,或者我应该将其分为两个查询


谢谢。

您可以将可选子句中的?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)
  }
}

您已经在计算所有的计数值,那么“唯一的?o计数”是什么呢?你能举个例子吗?谢谢!实际上,我尝试了绑定,但当时失败了,现在它可以在ApacheJenaFuseki 3.14.0上运行。我不知道为什么。。。