Sparql结果重复个体

时间:2017-06-02 16:47:22

标签: sparql protege

我尝试启动SPARQL查询,但输出显示重复的个人。 这很奇怪,因为使用Snap SPARQL查询一切都很好但是SPARQL查询有重复:enter image description here

我无法使用DISTINCT,因为我要启动的真实查询是:

PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX re: <http://www.semanticweb.org/buzzo/ontologies/2017/renewable_energy#>
SELECT ?individual (SUM(?result) AS ?totalDim)
WHERE {

?individual rdf:type owl:NamedIndividual .
?individual rdf:type re:Fotovoltaico .
?pannello re:èPannelloDi ?individual .
?pannello re:haDimensione ?dim .
?dim re:lunghezza ?lun .
?dim re:larghezza ?larg .
BIND((?lun*?larg) AS ?result) .
}
GROUP BY ?individual

我解释一下:此查询采用所有光伏面板尺寸(?larg *?lun),为每个尺寸制作产品,并将属于其工厂的每个面板的结果相加。 DISTINCT在进程结束时运行,因此该查询总结了许多重复的维度。有一种方法可以在SUM之前应用DISTINCT吗?

例如:i&#39; 3面板尺寸为20x20,因此产品为20 * 20 = 400。 3面板* 400 = 1200表示结果。 但是,如果我重复,例如每个面板有5个重复,则查询结果为: 3个面板* 5个重复= 15 * 400 = 6000 这是我的问题。

我正在使用Protege。

1 个答案:

答案 0 :(得分:3)

与SQL类似,可以使用解决方案修饰符DISTINCT,请参阅the specs

PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX re: <http://www.semanticweb.org/buzzo/ontologies/2017/renewable_energy#>
SELECT  DISTINCT ?individual 
WHERE {

?individual rdf:type owl:NamedIndividual .
?individual rdf:type re:Fotovoltaico .

}
ORDER BY ?individual

由于查询完全不同而更新

您可以在执行聚合功能之前删除重复项,方法是再次使用DISTINCT内的SUM

PREFIX  re:   <http://www.semanticweb.org/buzzo/ontologies/2017/renewable_energy#>
PREFIX  owl:  <http://www.w3.org/2002/07/owl#>
PREFIX  rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT  ?individual (SUM(DISTINCT ?result) AS ?totalDim)
WHERE
  { ?individual  rdf:type      owl:NamedIndividual ;
              rdf:type         re:Fotovoltaico .
    ?pannello  re:èPannelloDi  ?individual ;
              re:haDimensione  ?dim .
    ?dim      re:lunghezza     ?lun ;
              re:larghezza     ?larg
    BIND(( ?lun * ?larg ) AS ?result)
  }
GROUP BY ?individual