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.

meerdere triples maken linked data

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
Zowel in het Frans als in het Nederlands komen deze drie delen overeen: het zijn vertalingen. De drie delen kunnen beschreven worden met elk hun eigen Universal Resource Identifier (URI):

<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, …

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.

meerdere triples maken linked data

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

resultaat tabel

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.

resultaat

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:

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: bijnamen 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