ORDINA BLOGT

De USP's van REST en Linked Data

REST en Linked Data zijn dé best practices voor het publiceren en ontsluiten van open data. Wat hebben deze principes, standaarden en technieken wat andere niet hebben?

  • 28 januari 2014

In onze verappte hyperconnectieve wereld vindt gegevensuitwisseling plaats op grotere schaal en met minder ruimte voor wederzijdse afstemming dan vroeger. Dit geldt met name voor het publiceren en ontsluiten van open data. REST principes en Linked Data technieken bieden de hiervoor benodigde los gekoppelde interoperabiliteit.

Met REST kun je schaalbare en flexibele API’s realiseren door het gebruik van standaard HTTP functies en het HATEOAS principe. Linked Data technieken faciliteren naast API's ook filetransfer en embedded publicatie en ontsluiting. Met de RDF standaard en door publicatie van vocabulaires wordt op een flexibele manier syntactische en semantische compatibiliteit geborgd.

Daarnaast gebruiken zowel REST en Linked Data URI’s als unieke identificatiecodes voor personen, producten, aanvragen, dossiers etc. Via het globale DNS mechanisme is zo op een doeltreffende manier het eenduidige wereldwijde auteursrecht belegd voor het toekennen van deze unieke codes (n.l. bij de eigenaar van het betreffende internetdomein). 

REST

Het centrale concept in REST is een resource, een virtueel of fysiek bestand op een server met informatie over één of meerdere personen, producten, aanvragen, dossiers etc. Afschriften van deze informatie (z.g. representations) worden uitgewisseld tussen server en client. Dit gebeurt altijd met standaard HTTP aanvragen zoals "get" en "post" en dus niet via customized webservices met telkens andere functionaliteit. Nuttig voor de schaalbaarheid.

Een representation bevat alle informatie die een client nodig heeft om het (client)applicatieproces naar een volgende status te sturen. Dit doet de client door één van de hyperlinks (URI’s) te kiezen die in een representatie zitten en die te volgen (d.w.z. de volgende representatie aan te vragen). De client hoeft dus niet a-priori op de hoogte te zijn van de mogelijke statussen van de resources op de server. Dit principe heet Hypertext As The Engine Of Application State (HATEOAS).

Dat, samen met het stateless karakter van REST interacties (de server houdt niet bij wat de client doet), maakt REST processen uitermate loosely coupled. De server kan levenscycli van resources aanpassen zonder dat de client daar last van heeft, en wijzigingen in het clientproces zijn transparant voor de server. Hoge mate van flexibiliteit dus.

Met een REST aanpak kun je niet alleen gegevens opvragen, maar ook wegschrijven. Ook dat gebeurt op een flexibele manier. Je doet daarvoor geen update maar een "post" = "op de bus doen". Vervolgens kan een onafhankelijk serverproces de brievenbus legen en verwerken.

REST koppeling

Als je op REST gebaseerde interacties ("RESTful" webservices of API’s) vergelijkt met SOAP, dan hoef je bij REST dus geen namen, functionaliteiten en parameters te kennen. Bovendien zorgen de REST principes voor minimale pre- en postcondities. Het enige wat je moet weten is wat de resources zijn en welke URI’s ernaar verwijzen.

Vergelijk webservices met webpagina’s. En zie de aanroep van zo’n webservice vanuit de ontsluitende applicatie als een webbrowser. Met SOAP heb je dan voor elke webpagina een andere browser nodig. Met REST bouw je webpagina’s die allemaal met dezelfde browser ontsloten kunnen worden.

RESTful webservices en API’s zijn simpel zelf te bouwen. Maar je kunt ook een software development kit (SDK) gebruiken zoals OData van Microsoft of GData van Google.

Linked Data

REST richt zich dus op de interactie tussen producent en afnemer van open data, Linked Data op de uitgewisselde datastructuren. Linked Data gaat daarbij in meer detail dan REST: niet alleen objecten (resources) krijgen een URI (dus personen, producten, aanvragen, dossiers etc.), maar ook de beschrijving van eigenschappen van objecten.

De RDF standaard beschrijft het meta datamodel van Linked Data en hoe dat werkt met objecten, eigenschappen, relaties daartussen en URI’s. Het begrip triple staat daarin centraal: een elementaire datastructuur opgebouwd uit een object, een eigenschap en de waarde van die eigenschap. Zoals "deze blog"/"heeft als onderwerp"/"open data". Op deze manier zijn data en metadata op een flexibele manier gekoppeld. Je kunt zo alle datastructuren als een verzameling triples weergeven.

Triples kun je makkelijk opslaan in speciaal daarvoor ontworpen databases (triple stores). Het is voor de uitwisseling van RDF data verder niet van belang of de gegevens uit een triple store komen of uit een relationele database (of ergens anders vandaan).

Wel van belang is dat triples in platte tekst omgezet moeten worden om ze in bestanden of berichten uit te kunnen wisselen. Dat kan met één van de RDF "serialization" standaarden (N3, turtle, JSON-LD, RDF/XML, …). Dit soort serialisaties wordt overigens ook gebruikt voor REST representaties.

Ook annotaties die met μF, Microdata of RDFa in (X)HTML als "embedded" data op een webpagina zijn opgenomen kun je zien als Linked Data. Met tools als GRDDL kun je die embedded data van de pagina halen en omzetten naar een "nette" RDF serialisatie.

Behalve via een webpagina of een bestand kun je Linked Data ook uitwisselen via een API. Een van de belangrijkste Linked Data standaarden is de SPARQL API. Dit is een RDF zoektaal die op SQL lijkt.

Linked Data koppeling

Het coole van SPARQL is dat je gemakkelijk meerdere datasets kunt integreren. Je hoeft technisch maar met één SPARQL server (endpoint) te koppelen om geïntegreerde queries te kunnen doen over alle SPARQL datasets op het internet. Het nadeel is dat SPARQL voor app bouwers niet heel makkelijk is om mee te werken.

Een heel andere API voor Linked Data is het Linked Data Platform van het W3C (LDP). Dit is een recente standaard waarmee je Linked Data op een RESTful manier kunt opvragen en wegschrijven. Daardoor lijkt het overigens enigszins op OData en GData. Het verschil is dat het LDP geen SDK is maar de specificatie van het gedrag van de standaard RESTful Linked Data API. Verder missen OData en GData de syntactische en semantische flexibiliteit van RDF. Ze ontsluiten alleen enkelvoudige "silo" datasets. RDF is met zijn strakke gebruik van URI’s veel meer gericht op het linken en integreren van datasets.

Voor integratie van datasets is het - naast het kunnen linken - belangrijk om deze te kunnen repliceren en om de integriteit van links te bewaken. Hiervoor wordt nog gewerkt aan z.g. push notifications. Dat is een mechanisme om wijzigingen in open datasets proactief te melden bij afnemers.

Semantische interoperabiliteit

Door de ontleding van datastructuren in RDF triples worden dus alle gegevensbestanden syntactisch compatibel. De (meta)informatie die je bij het vertrippelen van relationele structuren kwijt zou raken voeg je met de RDF Schema taal (RDFS) weer toe. Aan dezelfde verzameling triples, dus zelfbeschrijvend en nog steeds syntactisch compatibel.

Semantische compatibiliteit wordt geborgd door in de triples gebruik te maken van standaard vocabulair voor het beschrijven van de eigenschappen van objecten in een triple. Doordat een eigenschap in een triple ook een eigen URI heeft, kun je daarmee verwijzen naar gepubliceerde wereldwijde standaard vocabulaires zoals Dublin Core en FOAF. Maximaal eenduidig over meerdere datasets heen; klinkt als semantisch interoperabel.

Daarnaast kunnen talen als SKOS en OWL een geheel aan relaties definiëren tussen de objecten van triples, inclusief beperkingen in het gebruik van eigenschappen en relaties. Dat noemen we een ontologie. Die talen worden daarom vaak niet vocabularies genoemd maar ontology languages. Ontologieën ondersteunen niet alleen het menselijk begrip van de betekenis "in" een dataset, maar ze zijn ook de basis voor reasoners en ontology matching systems. De eerstgenoemde tools kunnen zelf logische conclusies trekken uit een dataset; de tweede zoeken overeenkomsten tussen ontologieën, en kunnen zo verbanden leggen tussen de betekenissen van verschillende datasets.

Een belangrijk kenmerk van het RDF model is de flexibiliteit voor aanpassingen. Je kunt op elk gewenst moment wijzigingen of uitbreidingen aanbrengen aan inhoud, structuur of betekenis van een triple dataset, zonder dat de publicatie of ontsluiting van die dataset er technisch of functioneel voor moet worden aangepast. (Kom maar eens om een wijziging van een relationeel datamodel halverwege een project - waterval, agile of onder welke ontwikkelmethode dan ook). Andersom geldt dat je geen structurele conclusies kunt trekken uit het niet aanwezig zijn van objecten, kenmerken of relaties in een dataset. Die zouden best elders in een (nog toe te voegen of te koppelen) dataset kunnen zitten. Dit principe noemen we de Open World Assumption (OWA).

Een ander principe van RDF is "Anybody can say Anything about Anything" (AAA). URI’s zijn uniek en worden door unieke eigenaren gedefinieerd, maar iedereen kan zo’n URI kan gebruiken om er een willekeurige uitspraak in RDF over te publiceren. Heel flexibel. En heel goed opletten. Je (gelinkte) dataset is net zo betrouwbaar als je minst betrouwbare bron. In de praktijk wordt daarom vaak een bronreferentie vastgelegd bij triples (die dan ook wel "quads" worden genoemd).

Toekomst

Inmiddels is REST niet meer weg te denken in de webdevelopment wereld en de aandacht voor Linked Data bij innovators als BBC en NXP gaat volgens mij dit jaar brede navolging vinden bij mainstream adopters. Ook bij de overheid lijkt dat nu in een stroomversnelling te komen. Onder het motto "eenmalig registreren, meervoudig gebruiken" wordt op diverse terreinen m.b.v. van Linked Data technieken hard gewerkt aan het openstellen van economisch en bestuurlijk interessante datasets - zoals b.v. bij het stelsel van basisregistraties.

De voordelen van van deze best practices op het gebied van schaalbaarheid en flexibiliteit zullen ook buiten het open data domein nuttig gebruikt kunnen worden in de IT.

Vervang de interoperabiliteitsmechanismen "single view schema" door "vocabularies" + "RDF datamodel" en "surrogate keys" door "URIs" en je ziet wat Linked Data voor OLAP kan betekenen.

Hetzelfde gelt voor ketenintegratie. "vocabularies" + "RDF datamodel" kan prima "industry standard data models" vervangen. En "HTTP methods" + "HATEOAS" is het betere alternatief voor traditionele "interaction protocols".

Oude wijn in nieuwe zakken?

Jazeker. Maar dan zakken die een stuk simpeler, schaalbaarder en flexibeler zijn. En op de langere termijn dus goedkoper.

REST Linked Data innovation

< vorige blog