forked from zbw/sparql-queries
-
Notifications
You must be signed in to change notification settings - Fork 0
/
indirect_mapping_via_wd.rq
51 lines (50 loc) · 2.03 KB
/
indirect_mapping_via_wd.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
# Indirect mapping from STW to another vocabulary via Wikidata, for now
# restricted to exact matches
#
PREFIX p: <http://www.wikidata.org/prop/>
PREFIX pq: <http://www.wikidata.org/prop/qualifier/>
PREFIX ps: <http://www.wikidata.org/prop/statement/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
#
select ?stw ?stwLabel (skos:exactMatch as ?rel) ?foreign ?foreignLabel
where {
# if no public foreign endpoint exists, use stw endpoint to make the query
# executable, gaining empty results
# TODO: derive ?foreignUriStub and ?foreignEndpoint from property definition
values ( ?foreignProp ?foreignUriStub ?foreignEndpoint ) {
# default for UNESCO thesaurus (with endpoint for label lookup)
##( wdt:P3916 "http://vocabularies.unesco.org/thesaurus/" <https://vocabularies.unesco.org/sparql> )
##( wdt:P2163 "http://id.worldcat.org/fast/" <http://zbw.eu/beta/sparql/stw/query> )
( wdt:P244 "https://id.loc.gov/authorities/" <http://zbw.eu/beta/sparql/stw/query> )
}
# get all wikidata linked to STW and the foreign vocabulary
service <https://query.wikidata.org/sparql> {
?wd p:P3911 ?statement .
?statement ps:P3911 ?stwId .
filter(isLiteral(?stwId))
# restrict stw id to exact matches
?statement pq:P4390 wd:Q39893449 .
#
# for now, we assume that the foreign vocabulary does not use mapping
# relation qualifiers, and presume exact matches
?wd ?foreignProp ?foreignId .
}
bind(uri(concat("http://zbw.eu/stw/descriptor/", $stwId)) as ?stw)
bind(uri(concat(?foreignUriStub, $foreignId)) as ?foreign)
#
# labels for foreign concepts
optional {
service ?foreignEndpoint {
?foreign skos:prefLabel ?foreignLabelLang .
filter(lang(?foreignLabelLang) = 'en')
bind(str(?foreignLabelLang) as ?foreignLabel)
}
}
# labels for STW concepts
?stw skos:prefLabel ?stwLabelLang .
filter(lang(?stwLabelLang) = 'en')
bind(str(?stwLabelLang) as ?stwLabel)
}
order by asc(?stwLabel)