Deze tutorial gaat over het gebruik van gestructureerde gegevens van Wikimedia's Wikidata-project op je eigen MediaWiki-website. Het betreft niet een implementatie via de Wikibase-client, maar in een alternatieve opzet met de algemene External Data-extensie.
Over het Wikimedia Wikidata-project
Wikidata is technisch gebaseerd op de standaard MediaWiki-software, uitgebreid met de Wikibase-software (server + client) om de semantische triplets op te slaan en te benaderen. Wikidata groeit snel en wordt 's werelds grootste gratis en open semantische triplestore op internet. Dat is het goede nieuws. De tegenvaller is dat het gebruik van Wikidata voor andere wiki's dan Wikipedia niet ondersteund wordt door de Wikibase software. Daar zijn technische redenen voor, maar toch is het teleurstellend.
Over Semantic MediaWiki
De "andere" Semantische gegevensdatabase voor MediaWiki is Semantic MediaWiki (SMW). Het is een stabiele, goed onderhouden en wijdverbreide extensie voor MediaWiki, voornamelijk gebruikt voor wiki-installaties buiten de projecten van de Wikimedia Foundation.
Hoewel het wenselijk is om SMW te laten interlinken met Wikibase, is dit nog niet gebeurd. Er is dus geen manier om Wikidata-info toe te voegen aan uw Semantic MediaWiki-database. "Linked Open Data" blijft voorlopig nog een visie, en nog geen realiteit.
Stel je voor hoe cool het zou zijn als je gegevens uit Wikidata zou kunnen gebruiken in je eigen Infobox-sjablonen! je kunt dan bijvoorbeeld automatisch locatiegegevens, adresgegevens, postcodes, e-mail, geboortedatum, enz. enz. enz. aan je wiki toevoegen, zonder dat u deze informatie zelf hoeft in te voeren!
De Wikidata API gebruiken voor gegevensextractie
MediaWiki is open software die is ontwikkeld met het principe "informatie is om te delen" in gedachten. Voor dat doel hebben alle MediaWiki-projecten ook een API beschikbaar. Hetzelfde geldt voor het Wikidata-project: naast de standaard, menselijk leesbare "Linked Data Interface" heeft een zeer functionele en goed gedocumenteerde API.
Voorbeeld op basis van de External Data-extensie gegevens voor het importeren van informatie
Ik zal je een vrij eenvoudig voorbeeld geven van een project dat we (WikiWerkers) hebben gerealiseerd voor de TheaterEncyclopedie, bedoeld om locatie-informatie over theaters in Nederland uit Wikidata te halen. De TheaterEncyclopedie is een Semantic MediaWiki-project, waarin ook de External Data-extensie is geïmplementeerd.
Onderstaand voorbeeld is een live voorbeeld van een pagina over Het Muziektheater, Amsterdam op de TheaterEncyclopedie.nl
De animatie toont een infobox met informatie die lokaal is ingevoerd, evenals een vervolgkeuzelijst met informatie die is geïmporteerd uit Wikidata. Sommige informatie, zoals de afbeelding, is overgebracht in de lokale Infobox.
Momenteel wordt de geïmporteerde informatie niet opgeslagen in de Semantische Database van de TheaterEncyclopedie, wat natuurlijk een volgende stap zou kunnen zijn. Voorlopig wordt het alleen gebruikt voor redacteuren om informatie toe te voegen, te vergelijken en te controleren.
Procedure, technische implementatie
De procedure om de gegevens te importeren bestaat uit 3 stappen:
- Voer het Wikidata-referentienummer (Q-nummer) in de Theater Infobox op de TheaterEncyclopedie in
- Relevante informatie via de Wikidata API opvragen
- Geef de opgehaalde gegevens weer in een tabel
Laten we het ophalen van de informatie via de API wat beter bekijken, want dat is waar het om draait. In feite wordt de Wikidata-API drie keer bevraagd:
- De eerste keer voor de gewenste informatie over de entiteit, die is opgeslagen in semantische triplets ('claims')
- Dan voor de gewenste informatie of 'eigenschappen' van de entiteit zelf
- En last but not least een API-aanroep voor gerelateerde informatie, die eerder werd opgehaald in de eerste zoekopdracht. In dit geval de (voor de mens leesbare) naam van de stad.
De MediaWiki-extensie "External Data" ondersteunt API-aanroepen in b.v. XML- of JSON-indelingen evenals filtering van de opgehaalde gegevens met behulp van XPATH.
De technische implementatie van deze drie stappen is hieronder uitgewerkt (zie ook de - wat beperkte - documentatie of bekijk de volledige broncode, die vrij beschikbaar is via deze link).
Stap 1 - Opvragen van gegevens ('claims') van het specifieke referentienummer (Q-nummer=Q1325514):
https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q1325514&props=claims&languages=nl&format=xml
Klik op de link voor de uitvoer van het voorbeeld: link
De gegevens die uit de API worden opgehaald, worden vervolgens gefilterd en geselecteerde informatie wordt geïmporteerd:
- Afbeelding:
//mainsnak[@property="P18"]/datavalue/@value
- Postcode=
//mainsnak[@property="P281"]/datavalue/@value
, - Openingsdatum:
//mainsnak[@property="P1619"]/datavalue/value/@time
, - Geo-locatie, breedtegraad:
//mainsnak[@property="P625"]/datavalue/value/@latitude
, - Geo-locatie lengtegraad:
//mainsnak[@property="P625"]/datavalue/value/@longitude
, - MediaWiki Commons categorie=
//mainsnak[@property="P373"]/datavalue/@value
, - Gelegen in=
//mainsnak[@property="P131"]/datavalue/value/@id
Stap 2: Query voor de url ('props=sitelinks') naar de website en Wikipedia-pagina gerelateerd aan het referentienummer (Q-nummer):
https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q1325514&props=sitelinks&languages=nl&format=json
Klik op de link voor de uitvoer van het voorbeeld: link
De gegevens die uit de API worden opgehaald, worden vervolgens gefilterd en geselecteerde informatie wordt geïmporteerd::
- Website: website (van het betreffende theater)
- Wikipedia-paginatitel: titel (van den NL Wikipedia-pagina)
Stap 3: Secundaire zoekopdracht voor gegevens ('claims') over de locatie waarnaar wordt verwezen ('stad') met referentienummer Q9899) vanaf de eerste zoekopdracht:
https://www.wikidata.org/w/api.php?action=wbsearchentities&search=Q9899&language=nl&format=xml
Klik op de link voor de uitvoer van het voorbeeld: link
Gefilterde en geïmporteerde info:
- Naam van de locatie:
//entity/@label
De op basis van de bovenstaande API-aanroepen verzamelde informatie kan vervolgens worden weergegeven in de tabel (zie voorbeeld-animatie) en kan worden gebruikt voor het ophalen van de afbeelding uit Wikimedia Commons project. Alle gegevensverwerking wordt ondersteund door de MediaWiki-extensie External Data en is opgenomen in een Sjabloon. De enige benodigde input voor dit sjabloon is dus het Wikidata referentienummer (het Q-nummer). De werking van deze procedure blijkt in de praktijk stabiel en betrouwbaar te werken.
Enkele aanvullende gedachten
Op het eerste gezicht lijkt deze methode misschien wat inefficiënt: het referentienummer (Q-nummer) wordt handmatig toegevoegd en het opvragen gebeurt pagina per pagina in plaats van een enkele massa-import of synchronisatie.
Natuurlijk kan dit worden geautomatiseerd, maar als we deze methode nader bekijken, heeft het zeker een belangrijk voordeel met betrekking tot informatiekwaliteitscontrole. Het koppelen van open data aan je wiki roept altijd vragen op over hoe je de kwaliteit kunt controleren; u wilt geen fouten massaal importeren!!
Ik zal je een voorbeeld geven, hoe informatie kan worden toegevoegd aan de semantische database van een wiki, terwijl je de informatiekwaliteit onder controle houdt.
Strategie voor het opslaan van de informatie in de Semantische database
- Als er geen lokale waarde is ingevoerd in de TheaterEncyclopedie, gebruik dan de geïmporteerde waarde
- Als een lokale waarde is ingevoerd, slaat u de lokaal ingevoerde waarde op en geeft u deze weer
-- Signaal als de lokaal ingevoerde waarde afwijkt van de geïmporteerde waarde uit Wikidata (bijv. rode kleur)
-- Als er geen waarde beschikbaar is in Wikidata, geef dan een link weer om Wikidata bij te werken
Conclusie
Zolang er geen speciale MediaWiki-extensie bestaat om Wikidata-informatie naar Semantic MediaWiki te leiden, biedt de multifunctionele External Data-extensie een geweldige manier om deze truc voor je uit te voeren.
Het laat je informatie uit Wikidata gebruiken binnen je wiki, terwijl je ook controle houdt over de informatiekwaliteit.
Hulp bij het ontwikkelen van Wikidata-koppelingen
WikiWerkers zijn bedreven in het ontwikkelen koppelingen met Wikidata voor standaard en semantische wiki’s. Zij helpen graag en zijn flexibel in te zetten op uw wiki-project. Stuur ons een bericht en maak vrijblijven kennis in een audio- of videoconferentie. WikiWerkers zijn ook bereikbaar via Discord-chat.