如何在SPARQL中转换查询结果

如何在SPARQL中转换查询结果,sparql,transpose,topbraid-composer,Sparql,Transpose,Topbraid Composer,我正在使用TopBraid Composer编写SPARQL查询。我查询了以下结果: | Header | Total | |-------- |------- | | | | | A | 5 | | | | | B | 6 | | | | | C | 7 |

我正在使用TopBraid Composer编写SPARQL查询。我查询了以下结果:

| Header    | Total     |
|--------   |-------    |
|           |           |
| A         | 5         |
|           |           |
| B         | 6         |
|           |           |
| C         | 7         |
|           |           |
| D         | 8         |
现在,我谦虚的问题是,我们是否可以以某种方式将结果转换为:

| Header    | A     | B     | C     | D     |
|--------   |---    |---    |---    |---    |
| Total     | 5     | 6     | 7     | 8     |

是和否。您使用的第一个符号对于理解SPARQL SELECT非常重要-每一行表示数据上单独的图形模式匹配,其中第一列显示?头的绑定,第二列显示?总计的绑定,根据您未声明的查询。例如,在其中一个匹配中,标题绑定到“A”,总计绑定到“5”。另一个匹配是?Header=“B”和?Total=“6”,等等(我建议在SPARQL上做一些家庭作业)

因此,任何计算SPARQL查询的语言都将有某种方法对结果集进行迭代,您可以将它们放在一个倒置的表中,如图所示


因此,不,SPARQL不能做到这一点(查看SPARQL图形模式匹配),但无论您使用何种语言,都应该能够在结果集上迭代以获得所需内容。

您可以使用过滤后的左外部联接查询来构建您自己的转置表(也称为透视表)

前缀wd:
前缀wdt:
前缀wikibase:
前缀p:
前缀ps:
前缀pq:
前缀rdfs:
前缀bd:
选择?项目?项目标签?标签中的登高?标签中的登高?标签中的登高?标签中的登高{
选择?项目?项目标签?标签中的登高?标签中的登高?标签中的登高?标签中的登高?标签中的登高{
服务wikibase:label{bd:serviceParam wikibase:language“[AUTO_language],de.”
?p项:P3?报表。
?声明ps:P3 wd:Q15。
?声明pq:P13 wd:Q17。
可选{项目wdt:P11?buendnis.FILTER(?buendnis in(wd:Q32))}
可选{项目wdt:P11?sdgKarte.FILTER(?sdgKarte in(wd:Q14))}
可选{项目wdt:P11?agora.FILTER(?agora in(wd:Q3))}
绑定(?buendnis as?enthalten_in1)。
绑定(?sdgKarte为?enthalten_in2)。
绑定(?agora as?enthalten_in3)。
#调试
#过滤器(?(wd:Q1中的项目))
} 
限额2000
}订购者?项目标签
PREFIX wd: <http://cocreate-cologne.wiki.opencura.com/entity/>
PREFIX wdt: <http://cocreate-cologne.wiki.opencura.com/prop/direct/>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX p: <http://cocreate-cologne.wiki.opencura.com/prop/>
PREFIX ps: <http://cocreate-cologne.wiki.opencura.com/prop/statement/>
PREFIX pq: <http://cocreate-cologne.wiki.opencura.com/prop/qualifier/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX bd: <http://www.bigdata.com/rdf#>

select ?item ?itemLabel ?enthalten_in1Label ?enthalten_in2Label ?enthalten_in3Label {
SELECT ?item ?itemLabel ?enthalten_in1Label ?enthalten_in2Label ?enthalten_in3Label  WHERE {
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],de". }
  
  ?item p:P3 ?statement.
  ?statement ps:P3 wd:Q15.
  ?statement pq:P13 wd:Q17.
  
  OPTIONAL { ?item wdt:P11 ?buendnis. FILTER (?buendnis in (wd:Q32)) }
  OPTIONAL { ?item wdt:P11 ?sdgKarte. FILTER (?sdgKarte in (wd:Q14)) }
  OPTIONAL { ?item wdt:P11 ?agora.    FILTER (?agora    in (wd:Q3))  }
  BIND(?buendnis as ?enthalten_in1).
  BIND(?sdgKarte as ?enthalten_in2).
  BIND(?agora as ?enthalten_in3).
  #debug
  #Filter (?item in (wd:Q1))

} 
LIMIT 2000
} ORDER BY ?itemLabel