Dit project is een startpunt voor een hands-on training voor software developers die met Linked Data, RDF, SPARQL en SHACL willen werken in TypeScript.
Linked Data is een manier om data op het web te publiceren en te koppelen zodat datasets van verschillende bronnen elkaar kunnen versterken.
De vier klassieke principes van Tim Berners-Lee:
- Gebruik URI's als identifiers voor dingen.
- Gebruik HTTP URI's zodat mensen/machines ze kunnen opvragen.
- Lever bruikbare standaardinformatie terug (RDF, SPARQL).
- Link naar andere URI's om extra context te bieden.
Praktisch betekent dit: je modelleert data als een graaf, met expliciete relaties tussen resources, in plaats van alleen losse tabellen of JSON-documenten.
RDF (Resource Description Framework) is het datamodel achter Linked Data.
De kern bestaat uit triples:
- Subject: het ding waarover je iets zegt
- Predicate: de eigenschap/relatie
- Object: de waarde of verwijzing naar een ander ding
Voorbeelden:
<https://example.org/alice> <http://xmlns.com/foaf/0.1/name> "Alice"<https://example.org/alice> <https://example.org/knows> <https://example.org/bob>
Als je triples samenneemt, krijg je een graaf.
RDF kun je op meerdere manieren serialiseren:
- Turtle (
.ttl): compact en leesbaar voor mensen - JSON-LD (
.jsonld): JSON-vorm, geschikt voor web/API's - N-Triples (
.nt): line-based, simpel en strikt - N-Quads (
.nq): zoals N-Triples, maar met graph/context - RDF/XML (
.rdf/.xml): oudere XML-representatie
In deze cursus gebruiken we vooral Turtle en JSON-LD.
- RDF: basismodel voor statements (triples).
- RDFS: voegt schema-concepten toe zoals
rdfs:Class,rdfs:subClassOf,rdfs:label. - OWL: rijkere ontologie-taal voor formele constraints en inferentie (bijv. equivalentie, cardinaliteit, complexe klassen).
Vuistregel:
- RDF = data beschrijven
- RDFS = basale semantiek/schema
- OWL = geavanceerde semantiek/logica
SHACL (Shapes Constraint Language) gebruik je om RDF-data te valideren tegen regels (shapes).
Voorbeelden van regels:
ex:Personmoet minimaal 1rdfs:labelhebben- een property moet een datatype
xsd:datehebben - een property mag maximaal 1 keer voorkomen
SHACL is vooral nuttig voor kwaliteitsbewaking in pipelines en data contracts tussen teams.
SPARQL is de querytaal voor RDF, vergelijkbaar met SQL voor relationele data.
Je gebruikt het voor:
SELECT: data ophalenCONSTRUCT: nieuwe RDF-grafen opbouwenASK: true/false vragenDESCRIBE: beschrijvingen opvragen
SPARQL werkt op grafpatronen (triple patterns) met variabelen zoals ?s ?p ?o.
Veel JS libraries volgen de RDF/JS specificatie.
Belangrijke concepten:
Term: basisinterface voor RDF-termen.NamedNode: IRI node, bv.https://example.org/alice.BlankNode: anonieme node zonder globale IRI.Literal: waarde-node, eventueel met datatype/language.DefaultGraph: de default graph.Quad: (subject,predicate,object,graph), uitbreiding van triple.
In code werk je meestal met Quad objecten en stores/datasets.
Een RDF/JS dataset is een set van quads met operaties zoals:
- toevoegen/verwijderen van quads
- filteren/matchen op patroon
- itereren over resultaten
In dit skeleton gebruiken we de n3.Store als praktische RDF/JS-compatible dataset/store.
src/lib/loadRdf.ts: RDF uit textfiles inladen naar dataset/storesrc/lib/datasetQueries.ts: basale dataset queries (matchen op predicate)src/lib/sparql.ts: SPARQL viafetchen via Comunicasrc/lib/shacl.ts: SHACL-validatie metshacl-enginesrc/scripts/*.ts: losse trainingsscripts voor cursistendata/: voorbeelddata en shapes
npm installnpm run run:loadLeerdoel:
- meerdere serialisaties inlezen (
.ttl,.jsonld) - quads verzamelen in één dataset/store
npm run run:datasetLeerdoel:
- quads inspecteren
- pattern matching op predicate (
rdfs:label)
npm run run:sparqlLeerdoel:
- query via plain HTTP/fetch
- query via Comunica query engine
npm run run:shaclLeerdoel:
- shapes laden
- data valideren
- rapport interpreteren
npm run run:shacl-debugLeerdoel:
- validatiefouten herkennen en duiden
- foutieve data verbeteren op basis van SHACL feedback
npm run run:sparql-localLeerdoel:
- SPARQL draaien op een in-memory dataset
- queryresultaten interpreteren zonder remote endpoint
- Theorie (45 min)
- Linked Data, RDF, serialisaties, RDFS/OWL, SHACL, SPARQL
- RDF/JS fundamentals (30 min)
- Terms, Quads, Dataset API
- Hands-on deel 1 (45 min)
- bestanden laden en dataset-querying
- Hands-on deel 2 (45 min)
- SPARQL naar endpoint + eenvoudige lokale scenario's
- Hands-on deel 3 (30 min)
- SHACL validatie en debugging van datakwaliteit
- Afsluiting (15 min)
- vervolgstappen en production patterns
- Voeg een eigen vocab/namespace toe
- Schrijf een
CONSTRUCTquery - Maak expres foutieve data en laat SHACL failures zien
- Voeg named graphs toe en query per graph
- Exporteer dataset naar Turtle of N-Quads
Zie docs/EXERCISES.md voor opdrachten met challenges en verwachte uitkomsten. Zie docs/SOLUTIONS.md voor voorbeeld-uitwerkingen.