[英]SPARQL query for merging RDF Data Cubes
我正在從事一個存儲 2 個 RDF 數據立方體的項目:
圖: http://sda-research.ml/graph/climate
Dataset-climate
ds:obs5 a qb:Observation;
qb:dataSet ds:dataset-climate;
prop:city "Ha Noi"@en;
prop:cityid "hanoi";
prop:humidity 8.17E1;
prop:rainfall 2.1668E3;
prop:year "2016"^^xsd:int .
ds:obs6 a qb:Observation;
qb:dataSet ds:dataset-climate;
prop:city "Ha Noi"@en;
prop:cityid "hanoi";
prop:humidity 8.18E1;
prop:rainfall 2.6402E3;
prop:year "2017"^^xsd:int .
圖: http://sda-research.ml/graph/industry
Dataset-industry
ds:obs205 a qb:Observation;
qb:dataSet ds:dataset-industry;
prop:city "Hà Nội"@en;
prop:cityid "hanoi";
prop:industry 1.073E2;
prop:year "2016"^^xsd:int .
ds:obs206 a qb:Observation;
qb:dataSet ds:dataset-industry;
prop:city "Hà Nội"@en;
prop:cityid "hanoi";
prop:industry 1.07E2;
prop:year "2017"^^xsd:int .
現在我想合並 2 個 output 圖表,其中包含 2016-2017 年河內的濕度和行業價值。 在 GraphDB SPARQL Endpoint 上,我使用了以下查詢:
PREFIX qb: <http://purl.org/linked-data/cube#>
PREFIX prop: <http://www.sda-research.ml/dc/prop/>
select ?city ?year ?temperature ?industry
where{
{graph ?g {
?obs a qb:Observation.
?obs prop:cityid ?cityid filter regex(?cityid, 'hanoi').
?obs prop:city ?city.
?obs prop:year ?year filter(?year >= 2017 && ?year <= 2018 ).
?obs prop:temperature ?temperature.
}
}
UNION
{graph ?g {
?obs a qb:Observation.
?obs prop:cityid ?cityid filter regex(?cityid, 'hanoi').
?obs prop:city ?city.
?obs prop:year ?year filter(?year >= 2016 && ?year <= 2017).
?obs prop:industry ?industry.
}
}
}
預期 output:
city------year------humidity------industry---
Ha Noi-----2016-------8.17E1------ 1.073E2---
Ha Noi-----2017-------8.18E1-------1.07E2----
實際 output:
city------year------humidity------industry--
Ha Noi-----2016-------8.17E1--------null----
Ha Noi-----2017-------8.18E1--------null----
Ha Noi-----2016--------null--------1.073E2--
Ha Noi-----2017--------null--------1.07E2---
如何在使用 UNION 時刪除 null 值,或者您是否有任何查詢可以提供正確的預期結果?
在我們進入 SPARQL 本身之前,您的查詢存在幾個問題。
現在就 SPARQL 問題而言。
?cityid
和?city
,但?city
city 的值在命名圖之間拼寫不同,即"Hà Nội"@en
和"Ha Noi"@en
。?g
來表示您的命名圖。 這意味着 2/4 的結果是通過查看氣候圖獲得的,而后兩個結果是通過查看行業圖獲得的。 當您想到要從中提取來源的特定圖表時,您應該指定它。REGEX
。 不同的三元存儲實現查詢計划的方式不同,但這是一項代價高昂的操作,可能會顯着降低您的性能。 請參閱下文,了解如何使用values
關鍵字來處理此問題。現在這里是一個稍微修改過的查詢,它會產生你想要的結果:
PREFIX qb: <http://purl.org/linked-data/cube#>
PREFIX prop: <http://www.sda-research.ml/dc/prop/>
select ?cityid ?year ?humidity ?industry
where{
values ?cityid {'hanoi'}
graph <http://sda-research.ml/graph/climate> {
?obs1 a qb:Observation.
?obs1 prop:cityid ?cityid.
?obs1 prop:year ?year filter(?year >= 2016 && ?year <= 2017 ).
?obs1 prop:humidity ?humidity.
}
graph <http://sda-research.ml/graph/industry> {
?obs2 a qb:Observation.
?obs2 prop:cityid ?cityid.
?obs2 prop:year ?year filter(?year >= 2016 && ?year <= 2017).
?obs2 prop:industry ?industry.
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.