forked from zbw/sparql-queries
-
Notifications
You must be signed in to change notification settings - Fork 0
/
stw_wikidata_wikipedia.rq
53 lines (53 loc) · 1.98 KB
/
stw_wikidata_wikipedia.rq
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# All STW descriptors mapped to Wikidata, with Wikipedia pages
#
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX schema: <http://schema.org/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
#
select distinct ?stw ?stwLabel ?wd ?wdLabel ?wikipediaEn ?wikipediaEnLabel ?wikipediaDe ?wikipediaDeLabel ?langTags
where {
service <https://query.wikidata.org/bigdata/namespace/wdq/sparql> {
# aggregate all language tags
select ?stwId ?wd ?wdLabel
(uri(max(?wpEn)) as ?wikipediaEn) (str(max(?wpEnName)) as ?wikipediaEnLabel)
(uri(max(?wpDe)) as ?wikipediaDe) (str(max(?wpDeName)) as ?wikipediaDeLabel)
(group_concat(distinct ?langTag;
separator = ' ') as ?langTags)
where {
select ?stwId ?wd ?wdLabel ?wpEn ?wpEnName ?wpDe ?wpDeName ?langTag
where {
# VALUES clause with language does not work as expected
#
# get all wikidata items and labels linked to STW
?wd wdt:P3911 ?stwId .
optional {
?wd rdfs:label ?label .
filter(lang(?label) = 'en')
bind(str(?label) as ?wdLabel)
}
# get all wikipedia site links
optional {
?wpPage schema:about ?wd ;
schema:name ?pageName ;
schema:inLanguage ?langTag .
filter (contains(str(?wpPage), 'wikipedia'))
}
# expose English and German Wikipedia pages
bind(if(?langTag = 'de', str(?wpPage), '') as ?wpDe)
bind(if(?langTag = 'de', ?pageName, '') as ?wpDeName)
bind(if(?langTag = 'en', str(?wpPage), '') as ?wpEn)
bind(if(?langTag = 'en', ?pageName, '') as ?wpEnName)
}
order by ?stwId ?langTag
}
group by ?stwId ?wd ?wdLabel
}
bind(uri(concat('http://zbw.eu/stw/descriptor/', ?stwId)) as ?stw)
#
# look up STW labels
?stw skos:prefLabel ?stwLabelLang .
filter(lang(?stwLabelLang) = 'en')
bind(str(?stwLabelLang) as ?stwLabel)
}
order by ?stwLabelLang