我正在使用TopBraid Composer编写SPARQL查询。我查询了以下结果:
| Header | Total |
|-------- |------- |
| | |
| A | 5 |
| | |
| B | 6 |
| | |
| C | 7 |
| | |
| D | 8 |
现在我的谦虚问题是我们是否可以按照以下方式转换结果:
| Header | A | B | C | D |
|-------- |--- |--- |--- |--- |
| Total | 5 | 6 | 7 | 8 |
答案 0 :(得分:2)
是和否。您使用的第一个表示法对于理解SPARQL SELECT至关重要 - 每行代表一个单独的图形模式匹配数据,其中第一列显示绑定?标题,第二列显示绑定?Total,按照未说明的查询。例如。在其中一场比赛中,?标题必然是" A"并且?总数必然为" 5"。另一场比赛是?Header =" B"和?总计=" 6"等等(我建议在SPARQL上做一些功课)
由此,任何计算SPARQL查询的语言都会有一些迭代结果集的方法,你可以在显示时将它们放在倒置表中。
所以,不,SPARQL无法做到这一点(查看SPARQL图形模式匹配),但无论您使用何种语言都应该能够迭代结果集以获得您想要的内容。
答案 1 :(得分:0)
您可以使用过滤后的左外部联接查询来构建自己的转置表(又称为枢轴表)。
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