Vooraleer je terugdenkt aan je lessen Frans: geen nood, dit artikel gaat niet over de Franse taal. Het gaat wel over semantiek en hoe computers hier mee omgaan. “Fanfreluche est une poupée” of “Schanulleke is een pop” in het Nederlands is een zin die vaak gebruikt wordt om Frans aan te leren. Schanulleke is de pop van Wiske, een personage uit de stripboeken van Suske & Wiske. Het gaat hier dus om een simpel concept: Wiske heeft een pop en die pop heet Schanulleke. Tot zover in deze inleiding is de menselijke lezer mee. Ik kan je garanderen, voor een computer is dit een grotere uitdaging.
Dit artikel bevat af en toe codevoorbeelden: laat je niet afschrikken, deze zijn aanvullend op de tekst zelf. Het doel is niet om een “get started” te zijn voor linked data technologiën, maar eerder om de principes ervan uit te leggen.
Schanulleke of Fanfreluche?
Suske & Wiske is het product van de Belgische striptekenaar Willy Vandersteen. België is een meertalig land, dus de strip “Suske & Wiske” werd gepubliceerd zowel in het Nederlands als het Frans. Onafhankelijk van de taal, Schanulleke of Fanfreluche zijn beide een pop.
Schanulleke is een pop
01010011 01100011 01101000 01100001 01101110 01110101 01101100
01101100 01100101 01101011 01100101 00100000 01101001 01110011
00100000 01100101 01100101 01101110 00100000 01110000 01101111
01110000 00001010
Fanfreluche est une poupée
01000110 01100001 01101110 01100110 01110010 01100101 01101100
01110101 01100011 01101000 01100101 00100000 01100101 01110011
01110100 00100000 01110101 01101110 01100101 00100000 01110000
01101111 01110101 01110000 11000011 10101001 01100101
Voor de menselijke lezer gaat het duidelijk over hetzelfde concept, beschreven in twee talen. Een computer slaat dit binair op: binair gezien zijn deze twee zinnen verschillend. Deze zinnen zijn voor een computer twee verschillende concepten. Goed nieuws dus: wij mensen kunnen zaken onderscheiden van elkaar waar computers moeite mee hebben. Mensen kunnen met gemak redeneren, computers niet. Hoe maak je dan aan een computer wijs dat Schanulleke een pop is?
Toren van Babel
De zin “Fanfreluche est une poupée” kan opgedeeld worden in drie delen:
Schanulleke is een pop
Fanfreluche est une poupée
<https://www.wikidata.org/wiki/Q2731058> <https://www.wikidata.org/wiki/Property:P31> <https://www.wikidata.org/wiki/Q2918349> .
Drie URI’s vervangen de woorden: de triple is geboren! Een triple bestaat altijd uit 3 delen: een onderwerp, een predicaat & een voorwerp. Binnen linked data, is de triple de kleinst mogelijke eenheid.
Het handige aan deze URI’s is dat ze dezelfde vorm hebben als een URL: je kan er dus op doorklikken. De URI van Schanulleke verwijst naar een WikiData pagina. Die pagina bevat meer informatie over het concept “Schanulleke”: vertalingen, linken naar andere concepten, …
- Schanulleke = https://www.wikidata.org/wiki/Q2731058
- is = https://www.wikidata.org/wiki/Property:P31
- een pop = https://www.wikidata.org/wiki/Q2918349
Bovenstaande triple past moeilijk op een scherm. Om triples wat beter leesbaar te maken, worden de grootste delen afgekort. https://www.wikidata.org/wiki/ wordt afgekort tot wd.
@prefix wd: <https://www.wikidata.org/wiki/> .
@prefix wdt: <https://www.wikidata.org/wiki/Property:> .
wd:Q2731058 wdt:P31 wd:Q2918349 .
“wd:Q2731058 wdt:P31 wd:Q2918349” is dus een universelere representatie van “Fanfreluche est une poupée”. Dit haalt de complexiteit voor een computer sterk naar beneden.
1 + 1 is meer dan 2
Schanulleke is natuurlijk geen alleenstaand concept: Schanulleke is een pop uit het stripverhaal van Suske & Wiske. In taal zien deze twee feiten er zo uit:
- Schanulleke is een pop
- Schanulleke is van Wiske
Deze twee feiten over Schanulleke kunnen vertaald worden in twee triples. Schanulleke komt binnen deze feiten twee keer voor (Schanulleke) & komt dus ook twee keer voor binnen de triples (wd:Q2731058).
@prefix wd: <https://www.wikidata.org/wiki/> .
@prefix wdt: <https://www.wikidata.org/wiki/Property:> .
wd:Q2731058 wdt:P31 wd:Q2918349 .
wd:Q2731058 wdt:P127 wd:Q2667500 .
Deze twee feiten/triples vertellen ons meer dan ze elk apart vertellen:
- Schanulleke is een pop
- Schanulleke is van Wiske
- Wiske heeft een pop
Omdat het concept van Schanulleke hergebruikt wordt, kan er meer betekenis gehaald worden uit de twee triples: 1 + 1 is meer dan 2.
Wiki wade? WikiData!
De term is hier al een paar keer gevallen: WikiData. WikiData is een open en gratis kennisbank. De kennisbank bevat 15 miljard triples. De wereld is - gelukkig - veel groter dan enkel Suske & Wiske: maar een hele kleine subset van de 15 miljard hiervan gaat over Schanulleke.
WikiData is een project van de Wikimedia Foundation, dezelfde organisatie achter de Wikipedia. Net zoals bij Wikipedia kan iedereen informatie toevoegen, aanpassen of verwijderen. Is de WikiData kennisbank altijd 100% juist? Nee, uiteraard niet. Bevat WikiData opvallend veel data die een idee geeft van grootheden? Jazeker. WikiData is een dankbare kennisbank om te demonstreren: het bevat concepten die iedereen kent.
WikiData zijn eerste entititeit is wd:Q1, in mensentaal “het heelal”, gevolgd door wd:Q2, de aarde, en wd:Q3, het leven.
Sprinkel, sprankel, SPARQL
15 miljard triples is veel. Om te kunnen redeneren op al deze informatie is er een specifieke taal nodig: SPARQL. SPARQL laat toe om bepaalde triples te selecteren & de resultaten weer te geven in tabelvorm.
SELECT ?doll ?dollLabel
WHERE
{
?doll wdt:P31 wd:Q2918349 .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
} limit 100
Net als taal kan deze query ontleed worden:
?doll wdt:P31 wd:Q2918349
lijkt op een triple maar is het niet.?doll
is een placeholder. De query gaat op zoek naar x binnen de zin “x is een pop”.- Je ziet SERVICE staan: deze service vertaalt de URI’s naar een menselijk leesbare naam.
De query moet alle poppen uit WikiData ophalen. Het resultaat is een tabel met twee kolommen: doll
bevat de URI’s, dollLabel
bevat een leesbare naam. Test de query gerust uit op de query service van Wikidata: interactieve versie
De volgende query bouwt verder op de vorige query: er is een extra limitatie aan toegevoegd.
?doll wdt:P31 wd:Q2918349 .
gaat op zoek naar poppen?doll wdt:P127 wd:Q2667500 .
gaat op zoek naar eigendommen van Wiske
SELECT ?doll ?dollLabel
WHERE
{
?doll wdt:P31 wd:Q2918349 .
?doll wdt:P127 wd:Q2667500 .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
} limit 100
Beide limitaties tesamen zorgen er voor dat er enkel poppen worden weergegeven waarvan Wiske de eigenaar is. De interactieve versie is hier terug te vinden.
Linked data
WikiData stelt zijn data beschikbaar als linked data: het is mogelijk om met de juiste interfaces data uit WikiData te linken aan data uit andere kennisbanken. Bijvoorbeeld:
- De stad Gent heeft een WikiData URI wd:Q1296.
- Diezelfde stad Gent bestaat ook binnen OpenStreetMap: https://www.openstreetmap.org/relation/897671.
Beide URI’s beschrijven hetzelfde concept, elk binnen hun eigen kennisbank. WikiData slaat de link tussen deze twee synoniemen op:
@prefix wd: <https://www.wikidata.org/wiki/> .
@prefix wdt: <https://www.wikidata.org/wiki/Property:> .
wd:Q1296 wdt:P402 <https://www.openstreetmap.org/relation/897671> .
Dankzij deze link kan data uit WikiData gecombineerd worden met data uit OpenStreetMap. De dataset met 15 miljard triples kan dus nog verder uitgebreid worden met andere datasets. Met SPARQL kunnen deze bronnen aan elkaar gelinkt worden:
SELECT DISTINCT ?stadNaam ?bijnaam ?coordinates
WHERE {
hint:Query hint:optimizer "None" .
SERVICE <https://query.wikidata.org/sparql> {
SELECT ?stadNaam ?bijnaam (IRI(CONCAT("https://www.openstreetmap.org/relation/", STR(?osmId))) AS ?osm)
WHERE {
?stad wdt:P31 wd:Q493522 .
?stad wdt:P1705 ?stadNaam .
?stad wdt:P1449 ?bijnaam .
FILTER(lang(?bijnaam) = 'nl')
?stad wdt:P402 ?osmId .
} limit 50
}
?osm osmm:loc ?coordinates .
}
LIMIT 50
Stel, je wil voor alle Belgische steden hun bijnaam weergeven op een kaart, dan kan je bovenstaande query (openStreetMap query) gebruiken. De query combineert twee databronnen:
- WikiData weet welke bijnaam een stad heeft
- WikiData weet welke URI de steden hebben bij OpenStreetMap
- OpenStreetMap weet welke steden waar liggen op de kaart.
Beide gecombineerd geeft dit resultaat op een kaart:
Dit is de kracht van Linked Data: data wordt op de juiste manier gepubliceerd zodat het hergebruikt kan worden. Databronnen kunnen gecombineerd worden waardoor je complexe vragen in allerlei richtingen kan stellen aan één of meerdere databronnen tegelijkertijd.
Conclusie
Over één feit zijn we zeker: Schanulleke is een pop. Een computer kan je wijsmaken dat Schanulleke een pop is, mits het toepassen van een paar principes:
- Feiten kan je beschrijven met triples. Die triples bestaan uit URI’s. -Een verzameling van triples kan opgeslagen worden in een kennisbank als WikiData
- Vragen kan je stellen met SPARQL.
Kan je met enkel dit artikel volledig aan de slag met linked data? Vermoedelijk niet. Geeft het een indruk van linked data en de mogelijkheden die het opent? Hopelijk wel!
Referenties
- Dit artikel is gemaakt ter voorbereiding van een Nerdlab DataLab
- Een grote Linked Data bron - WikiData
- Nagelezen door Marnix Rummens