Closed acka47 closed 5 years ago
Es sind noch zwei Fragen offen, die wir bisher nur andiskutiert haben:
subject
stehen? Zu 1.) denke ich, dass alles einheitlich im spatial
-Feld sehen sollte und für 2.) halte ich nach wie vor den foaf:focus
-Ansatz am besten. Nehmen wir als Beispiel BT000122326.
Momentan sieht das JSON-LD so aus (Snippet):
{
"subject":[
{
"id":"http://purl.org/lobid/nwbib-spatial#n20",
"source":{
"id":"http://purl.org/lobid/nwbib-spatial",
"label":"Raumsystematik der Nordrhein-Westfälischen Bibliographie"
},
"notation":"20",
"label":"Ruhrgebiet"
},
{
"id":"http://purl.org/lobid/nwbib#s586040",
"source":{
"id":"http://purl.org/lobid/nwbib",
"label":"Sachsystematik der Nordrhein-Westfälischen Bibliographie"
},
"notation":"586040",
"label":"Zoologische Gärten"
}
],
"spatial":[
{
"id":"http://www.wikidata.org/entity/Q2100",
"label":"Duisburg",
"geo":{
"lat":51.432222222222,
"lon":6.7611111111111
},
"type":[
"http://www.wikidata.org/entity/Q1549591",
"http://www.wikidata.org/entity/Q262166",
"http://www.wikidata.org/entity/Q22865",
"http://www.wikidata.org/entity/Q253030",
"http://www.wikidata.org/entity/Q1187811",
"http://www.wikidata.org/entity/Q707813",
"http://www.wikidata.org/entity/Q42744322"
]
}
]
}
Mein Vorschlag ist folgender:
{
"subject":[
{
"id":"http://purl.org/lobid/nwbib#s586040",
"type":[
"Concept"
],
"source":{
"id":"http://purl.org/lobid/nwbib",
"label":"Sachsystematik der Nordrhein-Westfälischen Bibliographie"
},
"notation":"586040",
"label":"Zoologische Gärten"
}
],
"spatial":[
{
"id":"http://purl.org/lobid/nwbib-spatial#n20",
"type":[
"Concept"
],
"label":"Ruhrgebiet",
"source":{
"id":"http://purl.org/lobid/nwbib-spatial",
"label":"Raumsystematik der Nordrhein-Westfälischen Bibliographie"
},
"notation":"20",
"focus":{
"id":"http://www.wikidata.org/entity/Q151993",
"type":[
"https://www.wikidata.org/entity/Q245260"
]
}
},
{
"id":"http://purl.org/lobid/nwbib-spatial#Q2100",
"type":[
"Concept"
],
"label":"Duisburg",
"focus":{
"id":"http://www.wikidata.org/entity/Q2100",
"geo":{
"lat":51.432222222222,
"lon":6.7611111111111
},
"type":[
"http://www.wikidata.org/entity/Q1549591",
"http://www.wikidata.org/entity/Q262166",
"http://www.wikidata.org/entity/Q22865",
"http://www.wikidata.org/entity/Q253030",
"http://www.wikidata.org/entity/Q1187811",
"http://www.wikidata.org/entity/Q707813",
"http://www.wikidata.org/entity/Q42744322"
]
}
}
]
}
Die Änderungen sind zusammengefasst:
"type": "Concept"
und "focus"
zu den bestehenden Notationen und verschiebe sie von subject
in den spatial
Array.Concept
als type
~sowie die QID als notation
(bei letzterem bin ich nicht sicher, weil H.F. ja hier von "nicht notierten Einträgen" spricht)~focus
-Objekt und hänge dort die Wikidata-Klassen als type
anAußerdem:
"type": "Concept"
bei Sachnotationen.Dieses Ticket ist das aufwändigste und gleichzeitig das erst, das wir nun für den umstieg auf die neue NWBib-Raumsystematik behandeln müssen. Änderungen müssen auf zwei Ebenen stattfinden.
Im Geoindex:
In der Morph:
subject
in den spatial
Array.foaf:focus
http://purl.org/lobid/nwbib#s{notation}
) -> https://nwbib.de/subjects#N{notation}
und http://purl.org/lobid/nwbib-spatial#n{notation}
-> https://nwbib.de/spatial#N{notation}
)Mit @dr0i habe ich gerade besprochen, dass wir für den GO-Index wie folgt vorgehen:
spatial
-Objekte direkt aus dem Geoindex in die lobid-resources-Daten schreiben können.Hier ist schonmal ein Anfang, es fehlen noch die Daten für das foaf:focus
-Objekt:
curl -H "Accept: text/turtle" -G "https://query.wikidata.org/sparql" --data-urlencode query='
CONSTRUCT {
?lobidURI a skos:Concept ;
skos:inScheme <http://purl.org/lobid/nwbib-spatial> ;
skos:prefLabel ?wikidataUriLabel ;
skos:altLabel ?wikidataUriAltLabel ;
foaf:focus ?wikidataUri ;
skos:broaderLabel ?broaderLabel .
}
WHERE {
{
{ ?wikidataUri wdt:P131* wd:Q1198 . }
UNION
{ ?wikidataUri p:P131 [ ps:P131 wd:Q1198 ] . }
{ ?wikidataUri p:P31 [ ps:P31 wd:Q829277 ] . }
UNION
{ ?wikidataUri p:P31 [ ps:P31 wd:Q106658 ] . }
UNION
{ ?wikidataUri p:P31 [ ps:P31 wd:Q5283531 ] . }
UNION
{ ?wikidataUri p:P31 [ ps:P31 wd:Q262166 ] . }
UNION
{ ?wikidataUri p:P31 [ ps:P31 wd:Q22865 ] . }
UNION
{ ?wikidataUri p:P31 [ ps:P31 wd:Q253019 ]. }
UNION
{ ?wikidataUri p:P31 [ ps:P31 wd:Q2983893 ]. }
UNION
{ ?wikidataUri p:P31 [ ps:P31 wd:Q42744322 ]. }
UNION
{ ?wikidataUri p:P31 [ ps:P31 wd:Q134626 ]. }
UNION
{ ?wikidataUri p:P31 [ ps:P31 wd:Q448801 ]. }
UNION
{ ?wikidataUri p:P31 [ ps:P31 wd:Q1548518 ]. }
UNION
{ ?wikidataUri p:P31 [ ps:P31 wd:Q54935786 ]. }
UNION
{ ?wikidataUri p:P31 [ ps:P31 wd:Q1852178 ] . }
UNION
{ ?wikidataUri p:P31 [ ps:P31 wd:Q15632166 ] . }
UNION
{ ?wikidataUri p:P31 [ps:P31 wd:Q1780389 ] . }
# UNION
# { ?wikidataUri wdt:P31/wdt:P279* wd:Q4286337 . }
OPTIONAL { ?wikidataUri wdt:P131 ?broader . }
}
FILTER (?wikidataUri in (wd:Q365))
FILTER (?wikidataUri != wd:Q1787449 && ?wikidataUri != wd:Q16500124 && ?wikidataUri != wd:Q1465811 && ?wikidataUri != wd:Q1787449
&& ?wikidataUri != wd:Q16832627 && ?wikidataUri != wd:Q1113210 && ?wikidataUri != wd:Q19288281 && ?wikidataUri != wd:Q1662807
&& ?wikidataUri != wd:Q1351319 )
BIND (STRAFTER (STR(?wikidataUri),"entity/") AS ?QID)
BIND (URI(CONCAT ("https://nwbib.de/spatial#", ?QID)) AS ?lobidURI)
SERVICE wikibase:label { bd:serviceParam wikibase:language "de". }
}'
Ergebnis:
<https://nwbib.de/spatial#Q365> a skos:Concept ;
skos:inScheme <http://purl.org/lobid/nwbib-spatial> ;
skos:prefLabel "Köln"@de ;
skos:altLabel "Kölle"@de ;
foaf:focus wd:Q365 ;
skos:broaderLabel "Regierungsbezirk Köln"@de .
Ich habe die SPARQL CONSTRUCT Query jetzt erweitert und mit rapper und jsonld-cli ganz ansehnliches JSON-LD aus dem Ergebnis generiert. Leider gibt es einen Bug mit den CONSTRUCT queries in Wikidata (siehe https://phabricator.wikimedia.org/T211178), so dass ich nicht das komplette Verfahren für alle Daten umsetzen kann.
Wie auch immer, ich hoffe, dass die Ergebnisse für dich trotzdem nützlich sind, @dr0i. Vielleicht kannst du das Verfahren ja lokal mit einer RDF-Library auf das Geo-Wikidata-Subset anwenden.
Ich habe die Schritte im Wiki dokumentiert: https://github.com/hbz/nwbib/wiki/Geo-Index-mit-SPARQL-CONSTRUCT-generieren
Die Systematik-Tickets sind jetzt übrigens nur noch im entsprechenden Projekt-Board und sollten da rumgeschoben werden: https://github.com/orgs/hbz/projects/3
Eine offene Frage war noch, wie wir mit den Wikidata-Typen im focus
-Objekt umgehen. Im Standup haben wir heute beschlossen, eine Liste der wichtigsten Typen zu sammeln und nur diese zu ergänzen. (Am besten sollten die auch im Kontext ergänzt werden, damit die schöner aussehen.) Todo Adrian
Ich habe hier mal eine erste csv-Liste erstellt, inklusive Kürzel für den Kontext. Wir können das ja erstmal so machen, sollten uns aber eine systematischere Lösung überlegen. (z.B. sind die letzten vier alles Unterklassen von "Region")
qid, label, context
Q829277, Regierungsbezirk in Nordrhein-Westfalen, Regierungsbezrik
Q5283531, Landkreis in Preußen, LandkreisPreussen
Q106658, Landkreis in Deutschland, Landkreis
Q22865, kreisfreie Stadt in Deutschland, KreisfreieStadt
Q262166, Gemeinde in Deutschland, Gemeinde
Q253019, Ortsteil, Ortsteil
Q2983893, Stadtteil, Stadtteil
Q2740635, Stadtbezirk in Deutschland, Stadtbezirk
Q42744322, Stadtgemeinde Deutschlands, Stadtgemeinde
Q317669, Stadtbezirk von Düsseldorf, StadtbezirkDuesseldorf
Q1852178, Stadtteil von Düsseldorf, StadtteilDuesseldorf
Q13415859, Stadtbezirk in Wuppertal, StadtbezirkWuppertal
Q15632133, Stadtbezirk von Köln, StadtbezirkKoeln
Q15632166, Stadtteil von Köln, StadtteilKoeln
Q160742, Abtei, Abtei
Q353344, Grafschaft, Grafschaft
Q208500, Fürstentum, Fuerstentum
Q196068, Herrschaft, Herrschaft
Q897303, Kirchenkreis, Kirchenkreis
Q2072238, Erzdiözese, Erzdioezese
Q3146899, Diözese der katholischen Kirche, Dioezese
Q385337, Dekanat, Dekanat
Q46831, Gebirge, Gebirge
Q4421, Wald, Wald
Q8502, Berg, Berg
Q82794, Region, Region
Q1970725, Naturraum, Naturraum
Q819435, Bergbaurevier, Bergbaurevier
Q107425, Landschaft, Landschaft
Q1129474, Kulturlandschaft, Kulturlandschaft
@acka47 the updated data structure should be reflected in the new resources-staging, ready tomorrow at 8:00.
Oh, this didn't work out because the to be lookuped geo-index had got the alias suffix, thus named geo_nwbib-neu-staging
whilest there was only a geo_nwbib-neu
. As just discussed with @acka47: reviewing using the freshly built index resources-smalltest
resp. e.g. http://test.lobid.org/resources/search?q=nwbib would be sufficient.
I just reviewed it:
subject.id
is correctly set to https://nwbib.de/subjects#N{notation}
for Sachsystematiksubject.source.id
is correctly set to https://nwbib.de/subjects
for Sachsystematikspatial.id
used the old namespace (http://purl.org/lobid/nwbib-spatial#
) instead of the correct new one: https://nwbib.de/spatial#
spatial.source
object is missing. It should look like this:
"source": {
"id": "https://nwbib.de/spatial",
"label": "Raumsystematik der Nordrhein-Westfälischen Bibliographie"
}
For reference, here an update of https://github.com/hbz/nwbib/issues/468#issuecomment-466981344:
{
"subject":[
{
"id":"https://nwbib.de/subjects#N586040",
"type":[
"Concept"
],
"source":{
"id":"https://nwbib.de/subjects",
"label":"Sachsystematik der Nordrhein-Westfälischen Bibliographie"
},
"notation":"586040",
"label":"Zoologische Gärten"
}
],
"spatial":[
{
"id":"https://nwbib.de/spatial#N20",
"type":[
"Concept"
],
"label":"Ruhrgebiet",
"source":{
"id":"https://nwbib.de/spatial",
"label":"Raumsystematik der Nordrhein-Westfälischen Bibliographie"
},
"notation":"20",
"focus":{
"id":"http://www.wikidata.org/entity/Q151993",
"type":[
"https://www.wikidata.org/entity/Q245260"
]
}
},
{
"id":"https://nwbib.de/spatial#Q2100",
"type":[
"Concept"
],
"label":"Duisburg",
"source":{
"id":"https://nwbib.de/spatial",
"label":"Raumsystematik der Nordrhein-Westfälischen Bibliographie"
},
"focus":{
"id":"http://www.wikidata.org/entity/Q2100",
"geo":{
"lat":51.432222222222,
"lon":6.7611111111111
},
"type":[
"http://www.wikidata.org/entity/Q1549591",
"http://www.wikidata.org/entity/Q262166",
"http://www.wikidata.org/entity/Q22865",
"http://www.wikidata.org/entity/Q253030",
"http://www.wikidata.org/entity/Q1187811",
"http://www.wikidata.org/entity/Q707813",
"http://www.wikidata.org/entity/Q42744322"
]
}
}
]
}
Für das neue Katalogisierungsverfahren mit den URIs der SKOS-Objekte müssen wir ja die Geokoordinaten und Typen aus Wikidata ergänzen, weil sie nicht in der SKOS-Datei stehen werden. Dafür haben wir uns im Gespräch auf folgendes Verfahren geeinigt.
Da wir noch keine NWbib-property haben, anhand der sich alle relevanten Wikidata-Ressourcen filtern lassen, mssen wir erstmal mit der alten Abfrage arbeiten. Die entsprechende Abfrage für die CSV-Datei sieht wie folgt aus:
curl -H "Accept: text/csv" -G "https://query.wikidata.org/sparql" --data-urlencode query='SELECT DISTINCT
?item
?itemLabel
(GROUP_CONCAT(DISTINCT ?type;separator="; ") AS ?types)
?coordinates
WHERE {
{
{ ?item wdt:P131* wd:Q1198 . }
UNION
{ ?item p:P131 [ ps:P131 wd:Q1198 ] }
{ ?item p:P31 [ ps:P31 ?type ] . }
{ ?item wdt:P625 ?coordinates .}
{ ?item p:P31 [ ps:P31 wd:Q829277 ] . } # Regierungsbezirk in NRW
UNION
{ ?item p:P31 [ ps:P31 wd:Q106658 ] . } # Landkreis in Deutschland
UNION
{ ?item p:P31 [ ps:P31 wd:Q5283531 ] . } # Landkreis in Preußen
UNION
{ ?item p:P31 [ ps:P31 wd:Q262166 ] . } # Gemeinde in Deutschland
UNION
{ ?item p:P31 [ ps:P31 wd:Q22865 ] . } # kreisfreie Stadt in Deutschland
UNION
{ ?item p:P31 [ ps:P31 wd:Q253019 ]. } # Ortsteil
UNION
{ ?item p:P31 [ ps:P31 wd:Q2983893 ]. } # Stadtteil
UNION
{ ?item p:P31 [ ps:P31 wd:Q42744322 ]. } # Stadtgemeinde Deutschlands
UNION
{ ?item p:P31 [ ps:P31 wd:Q134626 ]. } # Kreisstadt
UNION
{ ?item p:P31 [ ps:P31 wd:Q448801 ]. } # Große Kreisstadt
UNION
{ ?item p:P31 [ ps:P31 wd:Q1548518 ]. } # Große kreisangehörige Stadt
UNION
{ ?item p:P31 [ ps:P31 wd:Q54935786 ]. } # Mittlere kreisangehörige Stadt
UNION
{ ?item p:P31 [ ps:P31 wd:Q1852178 ] . } # Stadteil von Düsseldorf
UNION
{ ?item p:P31 [ ps:P31 wd:Q15632166 ] . } # Stadtteil von Köln
UNION
{ ?item wdt:P31/wdt:P279* wd:Q3146899 } # Diözese der katholischen Kirche
UNION
{ ?item p:P361 [ps:P361 wd:Q1380992 ] } # Teil der ev. Kirche im Rheinland
UNION
{ ?item p:P361 [ ps:P361 wd:Q1381014 ] } # Teil der ev. Kirche Westfalen
UNION
{ ?item p:P31 [ps:P31 wd:Q1780389 ] } # Kommunalverband der besonderen Art (derzeit nur "Städteregion Aachen")
}
FILTER (?item != wd:Q1787449 && ?item != wd:Q16500124 && ?item != wd:Q1465811 && ?item != wd:Q1787449
&& ?item != wd:Q16832627 && ?item != wd:Q1113210 && ?item != wd:Q19288281 && ?item != wd:Q1662807
&& ?item != wd:Q1351319 ) # Herausfiltern von Altkreisen, die namensidentisch sind mit Neukreisen
SERVICE wikibase:label { bd:serviceParam wikibase:language "de" }
}
GROUP BY ?item ?itemLabel ?coordinates'
Passt das, @dr0i ?
Was noch fehlt, sind die WIkidata-Entitäten aus https://github.com/hbz/lobid-resources/blob/master/src/main/resources/string2wikidata.tsv. Ich habe leider noch keinen Weg gefunden, mit SPARQL eine Liste von URIs abzufragen. Folgende Ansätze laufen in ein Timeout:
curl -H "Accept: text/csv" -G "https://query.wikidata.org/sparql" --data-urlencode query='SELECT DISTINCT
?item
?itemLabel
(GROUP_CONCAT(DISTINCT ?type;separator=", ") AS ?types)
?coordinates
WHERE {
{
{ ?item p:P31 [ ps:P31 ?type ] . }
FILTER (?item = wd:Q1700 || ?item = wd:Q26271345 || ?item = wd:Q1746460 || ...)
OPTIONAL { ?item wdt:P625 ?coordinates .}
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "de" }
}
GROUP BY ?item ?itemLabel ?coordinates'
curl -H "Accept: text/csv" -G "https://query.wikidata.org/sparql" --data-urlencode query='SELECT DISTINCT
?item
?itemLabel
(GROUP_CONCAT(DISTINCT ?type;separator=", ") AS ?types)
?coordinates
WHERE {
{
{ ?item p:P31 [ ps:P31 ?type ] . }
FILTER (?item IN (wd:Q1700 || wd:Q26271345 || wd:Q1746460 || ...))
OPTIONAL { ?item wdt:P625 ?coordinates .}
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "de" }
}
GROUP BY ?item ?itemLabel ?coordinates'
@acka47 please have a look again, the red ticks in https://github.com/hbz/nwbib/issues/468#issuecomment-492972315 sollten erledigt sein. Versuche weywot5.hbz-nrw.de:9200/resources-smalltest/_search?q=HT017250960 .
Re. Sparql query für dieTSV-Liste: Dank @WikidataFacts@mastodon.social (siehe https://mastodon.social/@WikidataFacts/102106777513683776) habe ich jetzt eine einfache Lösung, die sich leicht erweitern lässt: die VALUES
Expression macht's. Hier die Query:
curl -H "Accept: text/csv" -G "https://query.wikidata.org/sparql" \--data-urlencode \
query='SELECT DISTINCT
?item
?itemLabel
(GROUP_CONCAT(DISTINCT ?type;separator=", ") AS ?types)
?coordinates
WHERE {
{
VALUES ?item {
wd:Q1700 wd:Q26271345 wd:Q1746460 wd:Q896058 wd:Q767106 wd:Q1432757
wd:Q1746460 wd:Q767106 wd:Q26271345 wd:Q1123895 wd:Q56033157 wd:Q56033167
wd:Q1184019 wd:Q767106 wd:Q109773 wd:Q464473 wd:Q876515 wd:Q2133651 wd:Q317108
wd:Q875161 wd:Q702826 wd:Q2548986 wd:Q30602340 wd:Q109773 wd:Q2011523
wd:Q56041996 wd:Q4219 wd:Q56042224 wd:Q31553414 wd:Q56042007 wd:Q778810
wd:Q56042004 wd:Q1487002 wd:Q56042224 wd:Q2147825 wd:Q1243986 wd:Q212520
wd:Q1243933 wd:Q47445689 wd:Q47454940 wd:Q884315 wd:Q981347 wd:Q47454950
wd:Q1749655 wd:Q981347 wd:Q1243933 wd:Q47444602 wd:Q1997843 wd:Q599193
wd:Q63191391 wd:Q993449 wd:Q1406857 wd:Q14212620 wd:Q2533842 wd:Q564155
wd:Q688373 wd:Q152432 wd:Q325202 wd:Q328928 wd:Q551530 wd:Q876552 wd:Q47443308
wd:Q553182 wd:Q1541708 wd:Q15130492 wd:Q316174 wd:Q736029 wd:Q457468 wd:Q881030
wd:Q3821487 wd:Q315663 wd:Q932656 wd:Q477038 wd:Q879507 wd:Q55890544 wd:Q315288
wd:Q3821213 wd:Q56005590 wd:Q825489 wd:Q56007789 wd:Q55721822 wd:Q1614442
wd:Q876546 wd:Q165763 wd:Q55986040 wd:Q3821604 wd:Q11026135 wd:Q628609
wd:Q328545 wd:Q55936383 wd:Q1452958 wd:Q1541799 wd:Q56008058 wd:Q1265044
wd:Q1020946 wd:Q55888099 wd:Q55984306 wd:Q544579 wd:Q3708105 wd:Q56372838
wd:Q56397821 wd:Q56099854 wd:Q56374605 wd:Q56398321 wd:Q56398551 wd:Q56373241
wd:Q56395271 wd:Q56398029 wd:Q56402341 wd:Q56374635 wd:Q56395213 wd:Q56395068
wd:Q56398420 wd:Q56099734 wd:Q56395189 wd:Q56373947 wd:Q56397874 wd:Q56373173
wd:Q56398251 wd:Q56373671 wd:Q56099483 wd:Q56397628 wd:Q56398585 wd:Q1573603
wd:Q1573603 wd:Q884493 wd:Q884493 wd:Q1490832 wd:Q1490832 wd:Q1761685 wd:Q1318888
wd:Q1503134 wd:Q883257 wd:Q769380 wd:Q769380 wd:Q769380 wd:Q11805 wd:Q11805
wd:Q11805 wd:Q11805 wd:Q1457938 wd:Q645030 } .
?item p:P31 [ ps:P31 ?type ] .
OPTIONAL { ?item wdt:P625 ?coordinates . }
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "de" }
}
GROUP BY ?item ?itemLabel ?coordinates'
Wo soll ich die ablegen, @dr0i ?
Cool :) Leg's hierhin: https://github.com/hbz/lobid-resources/tree/master/src/main/resources .
+1 for the smalltest index. It's time for @fsteeg to start working on #474
To be deployed on Monday (2019-06-03).
Deployed to production, closed.
Depends on #470.
Da die Lokalsysteme ja auch aktualisiert werden müssen, wird das Updateverfahren einige Wochen/Monate laufen während die Katalogisierung bereits auf die kontrollierten Werte umsteigt.
Sobald die Redaktionen anfangen, QIDs+label in anstatt GSW zu katalogisieren, müssen wir die Morph entsprechend anpassen, dass sowohl das alte Verfahren (bei GSW Lookup) und das neue Verfahren (Generierung des
spatial
-Eintrags auf Basis der kontrollierten Werte) funktionieren.:exclamation: Für beide Verfahren muss das bisherige Verfahren (über Morph und Geo-Index) angepasst werden, weil die Daten in eine andere JSON-LD-Struktur als bisher überführt werden. Es handelt sich hier sozusagen um einen lobid-NWBib-API-Break! :exclamation: