VNG-Realisatie / ODS-Open-Raadsinformatie

Project repository tbv de ontwikkeling van de Open Raads- en Stateninformatie API specificatie
https://vng-realisatie.github.io/ODS-Open-Raadsinformatie/
9 stars 2 forks source link

Naar Linked Data: Invoegen van @context JSON-LD object #16

Open joepio opened 5 years ago

joepio commented 5 years ago

De huidige API specificatie is goed opweg om niet alleen een mooie REST API te worden, maar ook nog eens om een volwaardige Linked Data API te worden. Met een @context object (zie specificatie JSON-LD) kan dit realiteit worden.

Een @context JSON-LD object beschrijft de mapping tussen JSON keys en een URI. Hierdoor wordt het mogelijk om simpele, reguliere JSON namen te gebruiken, terwijl de semantische betekenis (en de daarbij RDF data) behouden blijft. Met andere woorden: door een @context beschrijving te hebben, kan je een gewone JSON API omzetten naar een RDF Linked Data API. Daarmee wordt het eenvoudig om de data op te slaan in triple stores en om het om te zetten naar formaten zoals Turtle, N-Triples, N-Quads of RDF-XML. Daarnaast maakt het de API nog iets makkelijker om te gebruiken: als een hergebruiker de JSON response wil gebruiken, kan hij de @context opvragen om de specificatie te bekijken.

Dit @context object kan in zijn volledigheid bij iedere respons worden bijgevoegd, maar dit zorgt voor een onnodig grote body. Gelukkig zijn er ook twee manieren om te linken naar een extern @context object, namelijk met een link in de body van de respons of met een speciale HTTP header. Ik zou willen aanbevelen om de eerste methode te gebruiken: een link in de body. Een respons komt er dan als volgt uit te zien:

{
    "@context": "https://vng.nl/ns/open-raadsinformatie/context.jsonld",
    "...": "..."
}

De link naar de @context resolved naar een bestand zoals het onderstaande:

{
    "@context": {
        "ori": "https://vng.nl/ns/open-raadsinformatie/",
        "naam": "ori:naam",
        "...": "..."
    }
}

Sub-issues:

joepio commented 3 years ago

Afgelopen jaar ben ik bezig geweest met een RDF + JSON compliant specificatie, genaamd JSON-AD (staat voor JSON-Atomic-Data). Deze is, net als JSON-LD, compatible met zowel linked data (RDF) als met standaard JSON. De standaard zelf is echter een stuk lichter en veel makkelijker om te parsen.

Voorbeeldje van van hoe JSON-AD zich verhoudt met JSON, RDF en JSON-LD is hier te zien.

Al met al is daarmee een alternatieve aanpak voor dit probleem ontstaan. In plaats van een @context object toe te voegen, kan je de keys vervangen met URLs.

Denk dat dit nu misschien wat te laat is om op te nemen, maar vond dit wel de juiste plek om deze overweging te delen!