我尝试启动SPARQL查询,但输出显示重复的个人。 这很奇怪,因为使用Snap SPARQL查询一切都很好但是SPARQL查询有重复:
我无法使用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。
答案 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