SemanticXL

SemanticXL: handleiding

Een complete, stap-voor-stap gids. Je hoeft geen voorkennis te hebben van semantiek, ontologieën of architectuur: alles wordt hieronder uitgelegd, met de exacte knoppen en drie volledige voorbeelden van begin tot eind.

Wat is SemanticXL?

SemanticXL is één plek waarin je de kennis van een organisatie vastlegt én met elkaar verbindt: wetgeving, begrippen (de officiële betekenis van woorden), regels, requirements, processen, architectuur, informatiemodellen, data, tests en risico's. Normaal staat dit in losse tools (Word, Excel, Jira, modelleertools, datacatalogi). Daardoor weet niemand meer waar een definitie vandaan komt of wat een wijziging raakt.

In SemanticXL is alles een object met een betekenis, en objecten zijn met koppelingen aan elkaar verbonden. Zo ontstaat één doorzoekbaar, herleidbaar netwerk: van een wetsartikel tot de test die controleert of de software aan die wet voldoet.

Het mentale model

Drie begrippen die overal terugkomen:

Belangrijk: de waarde zit niet in de losse objecten, maar in de koppelingen. Leg ze daarom royaal — daardoor kun je later vragen beantwoorden als "welke tests raakt deze wetswijziging?".

Aan de slag: werkruimte & hub

De centrale startplek is de semantische repository (de "hub"). Die werkt altijd binnen een gekozen werkruimte.

  1. Open de hub. Heb je nog geen werkruimte gekozen, dan zie je de melding "Kies links een werkruimte om een onderdeel te openen." Kies een werkruimte in de kolom links; bovenaan de hub staat dan de naam van de werkruimte.
  2. Bovenaan, onder Waar je werkt, staan vijf tegels: Wetgeving, Begrippen, Processen, Architectuur en Applicaties. Elke tegel toont het aantal en de laatste wijziging. Een klik opent de editor.
  3. Daaronder staat Inzichten: de rapportages en analyses, in vijf groepen naar de vraag die je hebt. Werk, Kosten en levenscyclus, Kwaliteit, Impact en samenhang en Publiceren. Met de kop Inzichten klap je het blok in of uit.
  4. Onderaan staat Wat je nog meer hebt: de andere soorten, per laag (bijvoorbeeld Betekenis en gegevens, Risico en beheersing, Portfolio en kosten). Wat leeg is, staat onderaan zijn lijst. Met alleen met inhoud verberg je lege tegels.
  5. Exporteren, importeren en verwijderen per soort zit onder de knop met drie puntjes op de tegel: Exporteren als ZIP, Importeren uit ZIP (vraagt: OK is alles vervangen, Annuleren is toevoegen en bijwerken) en Alles verwijderen (vraagt twee keer om bevestiging). De hub legt dit één keer uit; daarna kun je die uitleg sluiten.
Inloggen: met e-mail en wachtwoord (met optionele 2FA), via GitHub, of met single sign-on van je organisatie (Microsoft Entra ID of een andere OpenID Connect-provider). De SSO-knop verschijnt automatisch op de loginpagina wanneer je beheerder dit heeft ingericht; MFA loopt dan via je organisatie. Toegang tot werkruimtes (lezer/bewerker/eigenaar) regel je daarna gewoon in SemanticXL.

De kolom links, zoeken en de werkbalken

Na het inloggen staat links op elk scherm dezelfde kolom. Zo vind je alles op dezelfde plek, in welke editor je ook zit.

Zoeken en navigeren: het opdrachtpalet (Ctrl+K). Druk Ctrl+K (op een Mac Cmd+K) of /. Er opent een zoekvenster voor de hele app: editors, rapportages, acties zoals Opslaan of Melding maken, en objecten uit de werkruimte. Kies met de pijltjes, open met Enter, sluit met Esc. Hetzelfde venster opent met het kleine zoekknopje naast Melden.

Melden. Rechtsonder staat een klein knopje Melden. Ligt er een knop van de pagina onder, dan schuift het zelf opzij. Zie Iets melden.

Werkbalken met Meer. De editors voor ArchiMate, BPMN en MIM hebben één werkbalk in dezelfde volgorde. Exporteren en Opslaan staan er met tekst; de rest staat onder Meer, in groepen zoals Controleren, Indeling en Bestand. Hetzelfde geldt voor de wetgevingseditor (Importeer wet en Nieuwe wet, de rest onder Meer) en voor de editor van applicaties, zaaktypen en bedrijfsregels (exporteren, importeren en controles onder Meer). De menu's werken met het toetsenbord: pijltjes, Home en End, en Esc brengt je terug naar de knop. De BPMN-editor heeft in de werkbalk ook ongedaan maken, opnieuw en zoom.

Objecten, relaties & traceerbaarheid

Koppelingen hebben een richting en een type. Een paar veelgebruikte:

KoppelingBetekenis
gebruikt definitie van (usesDefinition)object leunt op de betekenis van een begrip
valt onder kader (inScheme)begrip hoort bij een begrippenkader
realiseert (realizes)user story realiseert een requirement
test (tests)testcase toetst een requirement of user story
mitigeert (mitigeert)beheersmaatregel beheerst een risico
komt overeen met (exactMatch/closeMatch)begrip is (vrijwel) gelijk aan een ander begrip

Op het Dashboard en in Semantische dekking zie je hoeveel objecten gekoppeld zijn en hoeveel modelelementen herleidbaar zijn naar de betekenislaag. In de Objectenbibliotheek zie je per object een kennisgraaf: een klikbaar netwerk van alle relaties.

AI in SemanticXL

Op vier plekken kan een taalmodel een voorstel doen. Een mens beslist altijd: er wordt niets opgeslagen voordat jij het voorstel bekijkt en bevestigt.

WaarWat het doetWat naar het taalmodel gaat
BPMN: Schets uit teksteen eerste proces uit een beschrijvingalleen je tekst
ArchiMate: Schets uit teksteen eerste view uit een beschrijvingje tekst, en van de elementen die op je tekst lijken alleen het type en de naam
Wetgeving: Annoteer automatisch, knop Vraag AI om meerextra annotaties, zoals een meervoud of synoniemde artikeltekst, en van passende begrippen de naam, andere namen en definitie
Wetgeving: Maak begrip, knop Vraag AIterm en definitie zoeken in de wetde selectie, de tekst van het artikel en de begripsbepalingen van dezelfde wet
De knop AI-suggesties bij een wetsartikel (JAS-classificaties en definities) is ouder en gebruikt een ander taalmodel, met de instelling ANTHROPIC_API_KEY. Ook daar wordt niets vastgelegd zonder jouw vinkjes.

Stap voor stap: een begrip maken (NL-SBB)

Een begrip is de officiële betekenis van een term ("kindercentrum", "student"). Begrippen worden geordend in een begrippenkader (een verzameling samenhangende begrippen). SemanticXL volgt de overheidsstandaard NL-SBB / SKOS.

  1. Hub → tegel Begrippen. Je begint bij het startscherm met je begrippenkaders. Open je een begrip, dan heeft de editor links een boom en in het midden de details met vijf tabbladen: Algemeen, Betekenis, Relaties, Herkomst, Uitbreidingen.
  2. Maak eerst een kader: knop + Nieuw ▾ → Nieuw begrippenkader. Kies de taal en typ een naam (bv. "Wet kinderopvang"). Klik Opslaan.
  3. Maak een begrip: + Nieuw ▾ → Nieuw begrip (of klik met rechts op het kader → Nieuw sub-begrip, dan erft het automatisch het kader).
  4. Op tab Algemeen:
    • Labels: vul de prefLabel (voorkeursterm) in. Kies type preflabel en taal nl. Met + {label} in andere taal voeg je vertalingen of alternatieve termen (altLabel) toe.
    • Begrippenkader: kies in de dropdown het kader (dit legt de inScheme-koppeling — verplicht).
    • Optioneel: Notatie / code en de Begrippen-URI (wordt meestal automatisch gevuld).
  5. Op tab Betekenis: vul de Definitie in. Tip uit de editor: schrijf als "[Begrip] is een [hogere categorie] die/dat [onderscheidend kenmerk]…". Optioneel Toelichting, Scope-note, Voorbeeld.
  6. Op tab Herkomst: koppel de bron met + Documentverwijzing of Wet koppelen (JCI) (verwijst naar het wetsartikel op wetten.overheid.nl).
  7. Op tab Relaties leg je SKOS-relaties: + Semantische relatie (broader = bovenliggend, narrower = onderliggend, related), + Harmonisatie-relatie (exactMatch/closeMatch naar een ander begrip, ook via BegrippenXL zoeken), + Vervangingsrelatie (replaces/replacedBy). Elke knop opent een zoekvenster om het andere begrip te kiezen.
  8. Klik Opslaan (Ctrl-S). Klik Valideer voor een SHACL-controle tegen NL-SBB. De tabbladen tonen ook live meldingen, bijvoorbeeld "Ontbreekt: prefLabel @nl (verplicht NL-SBB)", "Geen begrippenkader (skos:inScheme verplicht)" of "Definitie ontbreekt". Los die op tot de melding weg is.
  9. Invullen gaat in reeksen. De opslaanknop krijgt een stip zodra er iets is gewijzigd, en bij wisselen of sluiten wordt gevraagd of dat werk weg mag. Na het aanmaken staat de cursor in de definitie; Ctrl+Enter bewaart en start meteen een volgend begrip in hetzelfde kader. Typ je een term die al bestaat, dan verschijnt daar een melding met een link naar dat begrip. Met Alt-↓ en Alt-↑ loop je door de boom, met / spring je naar zoeken en met ? (of het toetsenbordicoon) zie je alle sneltoetsen.
  10. Elk begrip heeft een eigenaar en een herijkingsdatum: tot wanneer die eigenaar zich aan de definitie verbindt. In het blok Beheer zet je met Nog actueel de datum vooruit, en met Vaststellen leg je vast wie het begrip heeft goedgekeurd. Dat laatste vraagt twee paar ogen: wie het laatst wijzigde kan niet zelf vaststellen. Onder Beheer staat het overzicht: wat is verlopen, wat verloopt binnenkort, wat is nog niet vastgesteld, wie heeft nog werk liggen. Teken je het vaststellingsproces zelf in BPMN, dan kies je dat model in dezelfde kopbalk en krijgt elk begrip die stappen als afvinklijst: in de volgorde van de pijlen, met de toelichting uit het model erbij. De laatste stap afvinken ís de vaststelling. In de bibliotheek zien lezers of een begrip is vastgesteld en tot wanneer het is bevestigd, en kunnen ze er een vraag over stellen.
  11. Wijzig je een definitie terwijl er zaaktypen, regels of datasets op het begrip steunen, dan laat de editor eerst zien wie dat raakt, met was en wordt naast elkaar, en vraagt een korte toelichting. Die komt als wijzigingsnotitie bij het begrip te staan.
  12. Met Tekst scannen plak je een beleidsstuk en zie je welke begrippen erin voorkomen en welke woorden opvallen maar nergens zijn gedefinieerd; met + maak je daar meteen een begrip van. Via Begrippen insluiten (/static/begrippen-insluiten.html) krijg je een knipsel waarmee je intranet of wiki de vastgestelde definitie toont op de plek waar de term staat.
  13. Naast de validatie staat Review: de inhoudelijke NL-SBB-review. Die kijkt naar de term zelf (lidwoord, hoofdletter, afkorting, leesteken, en of het een werkwoord of meervoud lijkt), naar de definitie (circulair, te kort, alleen een voorbeeld, vaag) en naar de regels die het SHACL-profiel niet toetst: topbegrip met een bovenliggend begrip, harmonisatierelatie binnen hetzelfde kader, dubbele code, verweesd begrip, twee begrippen met dezelfde definitie, ontbrekende bron. Terwijl je typt verschijnen dezelfde hints onder het term- en definitieveld. Er wordt niets gewijzigd; je krijgt een oordeel met een advies, en met Rapport (PDF) opent het reviewrapport als opgemaakte pagina met het printvenster erbij, zodat je het als PDF bewaart of meestuurt.
Hiërarchie via slepen: sleep in de boom een begrip op een ander; je kiest dan het relatietype (onderliggend / specialisatie van / onderdeel van / exemplaar van). Publiceren: met ⇅ Uitwisselen ▾ exporteer je naar Turtle, RDF/XML, CSV of ReSpec-documentatie (voor begrippenxl.nl).

Het startscherm: begin bij je begrippenkaders

Zolang je geen begrip kiest, toont het midden van de begrippeneditor al je begrippenkaders als kaarten, onder een groot zoekveld.

Een SKOS-bestand inlezen, ook een groot

Met Uitwisselen → NL-SBB / SKOS lees je begrippen in uit Turtle, RDF/XML of N-Triples. Een ingepakt bestand (.gz of .zip) mag ook. Grote bestanden zoals EuroVoc (bijna 500 MB, 30 talen) gaan zo:

  1. Kies het bestand. Je browser bekijkt het eerst zelf en telt de begrippen, de kaders en de labels per taal. Bij een zip met meer bestanden kies je er een.
  2. Kies de talen. Vink aan wat je nodig hebt, of gebruik Alleen Nederlands, Nederlands en Engels of Nederlands, Engels, Duits en Frans. Je keuze wordt onthouden. Waarden zonder taal (notaties, datums) komen altijd mee.
  3. Kies het begrippenkader: een nieuw kader of een bestaand. Heeft het bestand meer kaders, dan kies je hoe je ze inleest:
    • Eén kader met de indeling uit het bestand. Dit staat aan als het bestand een indeling heeft, zoals EuroVoc. De andere kaders worden groepen (collecties) in dat ene kader, en een groep kan weer groepen bevatten. Bij EuroVoc krijg je 21 domeinen, met daaronder 127 microthesauri, met daarin de begrippen. Het venster zegt wat het vond: hoeveel kaders, hoeveel daarvan deel zijn van een ander kader, en hoeveel domeinen.
    • Eén kader voor alles: de andere kaders vallen weg.
    • Elk ander kader als collectie: plat, zonder groepen in groepen.
    • Zoals in het bestand: elk kader blijft een eigen kader.
    Waarom groepen en geen kaders in een kader? De Nederlandse standaard NL-SBB kent geen kader in een kader. Een collectie in een collectie mag wel. Een begrip staat daarom in het ene kader en is lid van zijn groep. Van welk kader of domein een groep in het bestand deel was, blijft bewaard en komt terug bij een export.
  4. Klik Importeren. Je browser haalt de andere talen weg en pakt het bestand in. EuroVoc met vier talen wordt zo 8 MB in plaats van 493 MB.
  5. Je ziet de fasen: Voorscan, Lezen, Opslaan (zoveel van zoveel begrippen) en Index bijwerken. Met Afbreken stop je. Sluit je het venster, dan gaat de import door; open de begrippeneditor opnieuw om de stand te zien.
  6. Aan het eind zie je hoeveel begrippen nieuw zijn, hoeveel bijgewerkt en hoe lang het duurde.
  7. De groepen staan in de boom onder Collecties. Klap een groep open: eerst zie je de groepen erin, dan de begrippen. Het getal telt alle begrippen eronder, elk begrip een keer. Op het startscherm en in het woordenboek (tab Groepen) zie je dezelfde indeling.
Opnieuw inlezen maakt geen dubbelen: een begrip met dezelfde URI wordt bijgewerkt. Te groot? Een upload mag hooguit 64 MB zijn. Pak het bestand dan in als .gz of .zip, of kies minder talen; de melding in het venster zegt het ook.

Tekenfouten herstellen

Staat er in een begrip iets als vóór waar vóór hoort, of ’ in plaats van een aanhalingsteken? Dan is de tekst ooit met de verkeerde tekenset gelezen, meestal al in het bestand dat je hebt ingelezen. Zo herstel je het:

  1. Open de begrippeneditor en kies Toetsen → Tekenfouten herstellen.
  2. Je ziet eerst hoeveel objecten en velden het zijn, met voorbeelden: de tekst zoals hij nu is en zoals hij wordt. Er verandert dan nog niets.
  3. Klik Herstellen. Elk object krijgt een nieuwe versie; de oude tekst staat in de historie, dus je kunt terug.
Dit mag de eigenaar van de werkruimte of een beheerder. Het herstel kijkt naar alle soorten objecten in de werkruimte, niet alleen naar begrippen. Goede tekst zoals financiële blijft staan. Bij het inlezen van een SKOS-bestand gebeurt hetzelfde herstel al vanzelf. De inhoudelijke Review meldt tekenfouten als waarschuwing, en het woordenboek toont de goede tekst al voordat je herstelt.

Stap voor stap: wetgeving importeren & annoteren

Je haalt complete wetten op van wetten.overheid.nl en koppelt termen in de wettekst aan begrippen. Zo wordt zichtbaar welke begrippen uit welke wet komen.

  1. Hub → tegel Wetgeving. Klik Importeer wet in de werkbalk. Er opent een dialoog; typ in het zoekveld minstens 2 letters (bv. "kinderopvang"). De resultaten tonen titel + BWB-id. Klik een rij om de wet met al zijn artikelen op te halen. (Alternatief: "of importeer via een URL/ELI-URI" en plak een wetten.overheid.nl/BWBR…-link.) Een eigen wet maak je met Nieuwe wet.
  2. Open de wet en klik links in de boom een artikel aan. Het artikel licht op in de doorlopende tekst. Rechts staat alles over het gekozen artikel, met de hint "Selecteer een stuk tekst om er een begrip, regel, organisatie of ander object aan te koppelen."
  3. Selecteer met de muis een term in de tekst. Er verschijnt een werkbalkje:
    • Bestaand begrip: kies een begrip dat al in (een van) je werkruimtes bestaat. Dit legt de koppeling usesDefinition.
    • Uit BegrippenXL: haalt een begrip uit de landelijke BegrippenXL en zet het in een begrippenkader genoemd naar de wet.
    • Maak begrip: maakt een nieuw begrip met de term en de definitie uit de wet. Zie Maak begrip uit de wettekst.
    • Maak regel: maakt van de selectie een bedrijfsregel met bronverwijzing naar dit artikel.
    • Ander object en JAS-klasse: koppel de tekst aan een ander object (regel, organisatie-eenheid, artikel, applicatie en meer) of classificeer hem juridisch.
  4. Na het kiezen kun je een toelichting invullen. De term wordt gemarkeerd in de tekst (hover toont de definitie) en verschijnt in de lijst Annotaties bij het artikel.
  5. Veel artikelen? Laat de begrippen van de werkruimte zelf zoeken met Annoteer automatisch.
  6. Onder Meer staat de rest. Groep Analyse: Annoteer automatisch, Wijzigingen (de wetswijziging-radar: je opgeslagen tekst naast de actuele versie op wetten.overheid.nl), Dekking, Scenario's en Rapport. Groep Exporteren: RegelSpraak voor ALEF en Linked data (Turtle) voor wetten en annotaties.

Wetten vinden en lezen

Maak begrip uit de wettekst

Staat een begrip nog niet in de werkruimte? Maak het direct vanuit de wet. De term en de definitie komen uit de wettekst, en de geselecteerde tekst wordt meteen gemarkeerd als gebruik van het nieuwe begrip. Er wordt niets opgeslagen voordat je in het venster op Maak begrip drukt.

  1. Selecteer de hele begripsbepaling, bijvoorbeeld "watergang: oppervlaktewaterlichaam dat geen waterstaatswerk is;", of alleen de term. Selecteer je alleen de term, dan zoekt SemanticXL de definitie in hetzelfde artikel en daarna in de begripsbepalingen van dezelfde wet. Een meervoud vindt ook het enkelvoud: "waterschappen" wordt "waterschap".
  2. Kies Maak begrip in het werkbalkje. Het venster vult Term en Definitie in. Beide kun je aanpassen. Een zin met "wordt mede verstaan" komt in Toelichting (niet verplicht).
  3. Kies het Begrippenkader, of Zonder kader. Je keuze wordt per werkruimte onthouden. Kies je voor het eerst, dan staat het kader klaar dat naar de wet heet, als dat bestaat. Kies ook de Redactiestatus en eventueel een Breder begrip (niet verplicht) uit hetzelfde kader.
  4. Bestaat het begrip al? Heet er al een begrip zo (naam of synoniem, ook in een ander kader), dan zie je Dit begrip bestaat al met de definitie. Kies Koppel aan dit begrip om alleen de tekst te markeren. Of vink Toch een nieuw begrip maken aan als het een ander begrip met dezelfde naam is (een homoniem); leg in de toelichting uit waarin het verschilt.
  5. De bron staat eronder: het artikel waar de definitie staat, met de vindplaats op wetten.overheid.nl. Het begrip krijgt die bron volgens NL-SBB en een koppeling naar het artikel.
  6. Druk Maak begrip. Rechtsonder verschijnt een melding met de link Open in de begrippeneditor.

Geen definitie gevonden? Dan vult het venster alleen de term in en zegt dat de wet geen definitie geeft. Met Vraag AI zoekt een taalmodel term en definitie in de tekst van deze wet. Staat de definitie die het vindt niet letterlijk in de wet, dan zegt het venster dat. Je moet dan eerst "Ik heb de definitie gecontroleerd en neem hem over" aanvinken, en het begrip krijgt daar een notitie over. De knop Vraag AI verschijnt alleen als AI op de server is ingesteld; zie AI in SemanticXL.

Annoteer automatisch

Een wet met de hand koppelen aan alle begrippen van de werkruimte kost uren. Annoteer automatisch zoekt de begrippen in de wettekst en laat eerst zien wat het vond. Pas bij Opslaan wordt iets vastgelegd, en alleen wat aangevinkt staat.

  1. Start het voor de hele wet (knop in de kop van de open wet, of Meer → Annoteer automatisch) of voor één artikel (Annoteer dit artikel).
  2. SemanticXL zoekt de namen en synoniemen van de begrippen in de tekst: de langste term eerst, zonder op hoofdletters te letten, op hele woorden. Per artikel komt elk begrip hoogstens één keer, en er komen hoogstens zes annotaties per artikel. Wat al aan een artikel hangt, komt niet opnieuw.
  3. Het venster toont per artikel de voorstellen met de zin eromheen. Haal het vinkje weg als het begrip hier niet bedoeld is. Alles aan en Alles uit helpen bij een lange lijst.
  4. Druk Opslaan. Wat je zelf hebt uitgevinkt, wordt bewaard als afwijzing en komt bij een volgende ronde niet terug. Vink je alleen uit, dan heet de knop Afwijzing bewaren.

Naar ALEF: regels uitvoerbaar maken

ALEF (Agile Law Execution Factory, Belastingdienst, open source onder EUPL 1.2) maakt van RegelSpraak-specificaties automatisch een uitvoerbare rekenservice. SemanticXL en ALEF vullen elkaar aan: hier analyseer en annoteer je de wet met volledige traceability; in ALEF formaliseer en executeer je de regels. De knop Meer → RegelSpraak voor ALEF in de wetgevingseditor maakt de overdracht:

  1. Annoteer de wet en leg per bedrijfsregel waar mogelijk een formele expressie vast (regel-editor). Regels zonder expressie komen in de export als TODO.
  2. Klik RegelSpraak voor ALEF (met een wet geselecteerd: alleen die wet; anders werkruimte-breed). Je krijgt één bestand met drie delen: GegevensSpraak (objecttypen uit de gekoppelde begrippen + feittypen met rollen), RegelSpraak-regels (met geldigheid uit de consolidatie en bronverwijzing per artikel) en testscenario's uit de juridische scenario's als basis voor TestSpraak.
  3. Plak het bestand als vertrekpunt in een ALEF-project, vul kenmerken/attributen van de objecttypen aan en formaliseer de TODO-expressies. De // bron:-regels houden de herleidbaarheid naar het wetsartikel vast.

Zo blijft de rolverdeling zuiver: SemanticXL is de analyse- en traceability-laag (wat staat er, wat betekent het, wat raakt het), ALEF de executielaag (rekenen met de regels).

Stap voor stap: een informatiemodel maken (MIM, UML of ERD)

Een MIM-model (Metamodel Informatie Modellering, een overheidsstandaard) beschrijft welke gegevens je vastlegt: objecttypen (bv. "Kindercentrum"), hun attributen (bv. "naam", "KvK-nummer") en de relaties ertussen.

Datzelfde canvas tekent ook een UML-klassediagram en een ERD. Dat is geen tweede editor: een model draagt een notatie, en die bepaalt welke typen in het palet staan, welke symbolen de relaties krijgen en waarop gevalideerd wordt. Een klasse, een objecttype en een entiteit staan daardoor in dezelfde graaf en verwijzen naar hetzelfde begrip. Zie ook Drie notaties op een canvas.

  1. Hub → tegel Informatiemodellen (MIM · UML · ERD). Links staat de modelboom, zoals in het architectuurcanvas: elk model van de werkruimte is een wortel met een merkje MIM, UML of ERD. Het geopende model staat uitgeklapt; de andere staan ingeklapt en tonen bij openklappen hoeveel objecttypen, relaties en views erin zitten. Open dit model… of een dubbelklik opent een ander model; rechtermuisknop op een wortel geeft Model openen, Nieuw model, Model leegmaken (alleen het geopende model, vastleggen met Opslaan) en Model verwijderen. Klik de + in de kop "Modellen" voor een nieuw model: je kiest dan eerst de notatie en daarna de naam.
  2. Objecttype toevoegen: in het rechterpalet, sectie Elementen, klik Objecttype (status wordt "Plaats: … — klik op canvas") en klik dan op het canvas. Of sleep de knop naar het canvas. Andere elementen: Gegevensgroep, Datatype, Enumeratie, Codelist, Refer.lijst, Relatieklasse, Keuze, Constraint.
  3. Selecteer het element; de inspector linksonder toont Naam, URI / identificatie, Begrip, Beschrijving en Domein. Pas de naam aan.
  4. Attribuut toevoegen: in de inspector onder Attribuutsoorten klik + Attribuut toevoegen. Vul per rij in: naam, datatype (dropdown met CharacterString, Integer, Date… plus je eigen datatypes/codelijsten) en kardinaliteit (1..1, 1..*, 0..1, 0..*).
  5. Relatie tekenen: beweeg over een element; er verschijnen blauwe verbindingspunten op de zijden. Sleep van zo'n punt naar het doel-element. Kies in de popover het type: Relatiesoort, Generalisatie, Compositie of Externe koppeling. (Alleen geldige combinaties zijn mogelijk.)
  6. Begrip koppelen: bij het veld Begrip in de inspector klik Uit werkruimte… (begrip uit deze werkruimte) of Extern… (BegrippenXL). Zo krijgt een objecttype/attribuut zijn officiële betekenis.
  7. Opslaan: knop Opslaan (Ctrl+S). De status naast de knop toont "niet opgeslagen" of "opgeslagen".
Views & overzicht: grote modellen splits je in views (rechtsklik op de "Views"-sectie → + Nieuwe view…). De explorer groepeert per Domein en per type (Objecttypen, Datatypen, Enumeraties…), elk met een telling. Met Meer → Automatisch schikken schik je het canvas automatisch.

Drie notaties op een canvas: MIM, UML en ERD

Hetzelfde model, drie manieren om het op te schrijven. De notatie kies je bij het aanmaken; hij staat in de kopbalk, in de tabtitel en als merkje voor de modelnaam in de explorer.

NotatieWaarvoorElementenRelaties
MIM 1.2informatiemodellen die gepubliceerd worden Objecttype, Gegevensgroeptype, Datatype, Enumeratie, Codelijst, Referentielijst, Relatieklasse, Keuze, Constraint Relatiesoort, Generalisatie, Compositie, Externe koppeling
UML-klassediagramhet gesprek met ontwikkelaars Klasse, Abstracte klasse, Interface, Enumeratie, Datatype, Package, Notitie Associatie, Gerichte associatie, Aggregatie, Compositie, Generalisatie, Realisatie, Afhankelijkheid
ERDhet gesprek over opslag Entiteit, Zwakke entiteit, Koppelentiteit, View, Domein, Notitie Een op een, Een op veel, Veel op veel, Optioneel op veel, Identificerend, Niet-identificerend — getekend met kraaienpoten
  1. Sleutels in een ERD. Zet bij een attribuut Identificerend / primaire sleutel aan: het attribuut wordt onderstreept getekend. Vreemde sleutel (FK) zet er "(FK)" achter. Het is dezelfde vlag die MIM gebruikt voor een unieke aanduiding, zodat hetzelfde model in beide notaties hetzelfde zegt.
  2. Validatie volgt de notatie. De controle onder Meer heet naar de notatie van het model. Een ERD wordt niet langs de MIM-lat gelegd: daar geldt dat een entiteit zonder primaire sleutel een fout is, en dat een relatie zonder kardinaliteit en een veel-op-veel-relatie een waarschuwing opleveren (die laatste vraagt bij realisatie een koppelentiteit).
  3. Export loopt via de MIM-equivalenten: een klasse en een entiteit worden een objecttype, een koppelentiteit wordt een relatieklasse. Turtle, MIMFORMAT, JSON Schema, ReSpec en XMI blijven dus werken.
Een model zonder notatie is een MIM-model; bestaande modellen veranderen dus niet. Het voorbeeld Fietsenwinkel bevat alle drie: hetzelfde domein als informatiemodel, als klassediagram en als datamodel.

Stap voor stap: een ArchiMate-model maken

Met de Modeller teken je enterprise-architectuur (ArchiMate): business-, applicatie- en technologie-elementen en hun relaties, verdeeld over views.

  1. Hub → tegel Architectuur. Links staat de modelboom, zoals in Archi: elk ArchiMate-model van de werkruimte is een wortel. Het geopende model staat uitgeklapt met zijn lagen, relaties en views; de andere modellen staan ervoor of erna, ingeklapt, en tonen bij openklappen wat erin zit en hun views. Openklappen wisselt niet van model; een view aanklikken of Open dit model… wel. Rechtermuisknop op een wortel: Model openen, Nieuw model, Model leegmaken, Model verwijderen. Ook het hoofdmodel kan weg zodra er een ander model is: dat andere model wordt dan het hoofdmodel (bij meer kandidaten kies je welk). Het enige model in een werkruimte kun je alleen leegmaken. Klik + in de kop "Modellen" voor een nieuw model, of gebruik Meer → Importeren om een bestaand model in te laden (.archimate van Archi of .xml ArchiMate Open Exchange).
  2. Element plaatsen: klik in het rechterpalet op een element-type (gegroepeerd per laag: Business, Applicatie, Technologie…) en klik daarna op het canvas. Of sleep het palet-icoon naar het canvas.
  3. Relatie tekenen: kies in het palet onder Notatie een connector en sleep van bron- naar doel-element. Of sleep element A bovenop element B; er verschijnt een keuzemenu met alleen de geldige ArchiMate-relaties.
  4. View maken: in de boom onder Views klik + Nieuwe view… (leeg canvas).
  5. Begrip koppelen: selecteer een element; in de inspector staat sectie Begrip met Uit werkruimte… en Extern (BegrippenXL)…. Op het element verschijnt dan een klein begrip-badge.
  6. Opslaan: Opslaan in de werkbalk. Exporteren geeft .archimate, Open Exchange (.xml), SVG of ReSpec-documentatie; de OEFF-versie (3.2/4.0) volgt de keuze ArchiMate-versie onder Meer.

Viewschets uit tekst

Beschrijf een situatie in gewone taal en krijg een voorstel voor een nieuwe view. Elementen die al in het model staan, worden hergebruikt. Er wordt niets opgeslagen tot je het voorstel overneemt.

  1. Klik Schets uit tekst in de werkbalk. Het venster Viewschets uit tekst opent.
  2. Typ of plak een Beschrijving: een project, een werkwijze of een applicatielandschap. Wie doet wat, met welke systemen? Kies eventueel een viewpoint; dan kijkt de schets alleen naar de typen van dat viewpoint. Met Voorbeeld gebruiken zie je hoe een goede beschrijving eruitziet. Druk Maak voorstel (of Ctrl+Enter). Dat duurt meestal tien tot dertig seconden.
  3. Je ziet het voorstel als plaat. Elementen die al in het model staan, hebben een gewone rand (bestaand). Nieuwe elementen hebben een stippelrand en het merkje nieuw. Een relatie die SemanticXL heeft rechtgezet, is oranje.
  4. Daaronder staan de lijsten Elementen en Relaties. Vink uit wat niet in de view hoort. Is een nieuw element eigenlijk een element dat al bestaat? Kies Kies bestaand element en zoek het op. Het voorstel wordt dan opnieuw gecontroleerd.
  5. Lees de Aannames van het taalmodel en wat er is Rechtgezet door SemanticXL.
  6. Geef de view een naam en kies Overnemen als nieuwe view. Of kies Opnieuw, Tekst aanpassen of Verwerpen.

Opmaak en layout van een plaat

Een architectuurplaat is ook een communicatiemiddel; hoe hij eruitziet doet ertoe.

Een plattegrond of foto onder een view

Meer → Achtergrondafbeelding in de werkbalk van de modeller. Kies een afbeelding en die komt onder de actieve view te liggen: een plattegrond, luchtfoto, huisstijlplaat of schets om de architectuur bovenop te bouwen. De plaat hangt aan de view, niet aan het model - dezelfde elementen kunnen op de ene view op een plattegrond liggen en op de andere op wit.

Stap voor stap: een proces tekenen (BPMN)

In de BPMN-editor teken je werkprocessen volgens BPMN 2.0: wie doet wat, in welke volgorde, en met welke applicaties.

  1. Hub → tegel Processen, of Processen in de kolom links. Links staat de lijst Modellen met alle processen van de werkruimte. + Nieuw maakt een leeg proces, Import leest een of meer .bpmn-bestanden in.
  2. Kies bij Weergave hoe de lijst eruitziet: Alfabetisch, Gelaagd (onder de organisatie en processen waaraan een proces gekoppeld is) of Mappen (zie Mappen).
  3. Teken met het palet rechts op het doek: stappen, keuzes, gebeurtenissen en stromen. Klik een element aan om het in het zijpaneel links (de inspecteur) te bewerken.
  4. De werkbalk heeft ongedaan maken (Ctrl+Z), opnieuw (Ctrl+Y) en zoom, dan Applicaties, Schets uit tekst, Exporteren (BPMN XML, SVG, JPG, PDF, CSV en Excel) en Opslaan (Ctrl+S). Onder Meer staat onder andere BPMN-regels controleren.
  5. Samen werken. Hebben collega's hetzelfde proces open, dan zie je hun namen in de werkbalk en hun cursor met naam op het doek. Wat een collega tekent of koppelt, zie je meteen.

Applicaties op een processtap

Leg vast welke applicatie een stap ondersteunt, door hem erop te slepen.

  1. Klik Applicaties in de werkbalk. Het paneel toont de applicaties van de werkruimte, met levenscyclus en bij hoeveel stappen van dit proces ze al horen. Zoek op naam of code.
  2. Sleep een applicatie op een stap. De koppeling ligt meteen vast. Heb je meerdere stappen geselecteerd, dan komt de applicatie bij allemaal.
  3. Onder de stap staan labels met de applicaties. Klik een label om de applicatie te openen; het kruisje ontkoppelt, met Ongedaan maken in de melding. Ver uitgezoomd zie je alleen een telling, bijvoorbeeld "2 apps".
  4. In de inspecteur staat het blok Ondersteunende applicaties. Daar koppel je ook zonder slepen, met Applicatie koppelen en een zoekveld; dat werkt ook met het toetsenbord.
  5. Horen er applicaties bij de stap via de architectuur of via een functie, dan staan ze eronder als "Gevonden, nog niet vastgelegd:". Met Vastleggen maak je er een echte koppeling van.

Het is dezelfde koppeling als die van de koppelkiezer. Procesketen, brein en bibliotheek zien hem dus meteen. Met alleen leesrechten kun je kijken, maar niet koppelen.

Processchets uit tekst

Beschrijf een werkproces in gewone taal en krijg een voorstel voor een BPMN-proces. Er wordt niets opgeslagen tot je het voorstel overneemt.

  1. Klik Schets uit tekst in de werkbalk. Het venster Processchets uit tekst opent.
  2. Schrijf in de Beschrijving van het proces wie wat doet, en in welke volgorde. Voorbeeld gebruiken laat een voorbeeld zien. Druk Maak voorstel (of Ctrl+Enter). Dat duurt meestal tien tot dertig seconden.
  3. Je ziet het voorstel als plaat: lanes, stappen, keuzes en stromen. Daaronder de Aannames van het taalmodel, wat er is Rechtgezet door SemanticXL, en onder Gevonden in deze werkruimte de applicaties en begrippen die letterlijk in je tekst staan. Dat laatste zijn alleen suggesties; er wordt niets gekoppeld.
  4. Pas de naam aan en kies Overnemen als nieuw proces. Het proces komt in de werkruimte (in de gekozen map) en gaat open. Of kies Opnieuw, Tekst aanpassen of Verwerpen.

De server controleert en herstelt het voorstel voordat je het ziet: ontbrekende start of einde erbij, stromen naar niets eruit, elke stap bereikbaar. Hij tekent de BPMN zelf, met lanes als rijen. Een overgenomen proces draagt de herkomst ai-schets, en de aannames staan in de beschrijving. Invoegen in een bestaand proces kan niet: neem het over als nieuw proces en kopieer wat je nodig hebt. Je tekst gaat naar een taalmodel; zie AI in SemanticXL.

Mappen

Veel processen? Zet ze in mappen. Kies bij Weergave de optie Mappen. Heeft de werkruimte al mappen, dan begint de lijst daar vanzelf in.

Binnen een map staan mappen en processen op naam. Welke weergave je koos en welke mappen open staan, onthoudt je browser per werkruimte.

Stap voor stap: requirement, user story & test

Deze drie objecttypen vormen de keten van eis naar bewijs. Ze worden bewerkt in dezelfde generieke editor (lijst links, details rechts), die je opent via de bijbehorende hub-tegel.

  1. Hub → Requirements → + Nieuw ▾ → + Nieuw (leeg). Vul in: Naam, Status, Classificatie (bv. Wettelijk), Prioriteit (MoSCoW) (Must/Should/Could/Won't), Verificatie-methode, Acceptatiecriteria.
  2. Tab Relaties → + Voeg relatie toe. Er opent een koppel-venster: kies bovenaan het Relatie-type, kies het tabblad van het doel-type (bv. Wetsartikelen of Begrippen), zoek op naam (vink Alle werkruimtes aan om breder te zoeken) en klik Koppelen. Koppel de requirement aan het wetsartikel (grondslag) en aan het begrip.
  3. Hub → User Stories → + Nieuw. Schrijf in Als/wil/zodat-vorm + acceptatiecriteria. Tab Relaties → type realiseert → koppel aan de requirement.
  4. Hub → Testmanagement → + Nieuw. Vul teststappen in. Tab Relaties → type test → koppel aan de requirement of user story. Zet Laatste run op Pass als de test slaagt.
  5. Open de requirement: bovenaan toont een Coverage-blok twee tellers — Realizes: x/y US done en Tests: x/y pass (groen ≥80%). Tab Backlinks toont alles wat naar deze requirement verwijst.

Stap voor stap: risico, maatregel & toets (GRC)

  1. Hub → Risico's → + Nieuw. Vul Risicocategorie, Oorzaak/dreiging, Gevolg, en Kans × Impact in. De editor toont een 5×5 risicomatrix met je score gemarkeerd; kies een Risicostrategie (Mijden/Verminderen/Delen/Accepteren).
  2. Hub → Beheersmaatregelen → + Nieuw. Kies Type maatregel (Preventief/Detectief/…) en leg Opzet/Bestaan/Werking vast. Tab Relaties → type mitigeert → koppel aan het risico.
  3. Hub → Controletoetsen (KCM) → + Nieuw. Vul toetsmethode + uitkomst + bevinding in. Tab Relaties → koppel aan de beheersmaatregel.
  4. Op het Dashboard zie je nu de risicomatrix, de werking van beheersmaatregelen en de KCM-resultaten samen — de complete cyclus risico → maatregel → toets.

Stap voor stap: dataset & domeintabel

Een dataset beschrijft een gegevensverzameling volgens DCAT-AP-NL. Een domeintabel (codelijst) is een vaste lijst toegestane waarden (bv. "soort opvang: dagopvang / BSO").

  1. Hub → Datasets → + Nieuw. Vul de DCAT-velden: titel, thema, licentie, toegangsrechten, publisher, en voeg distributies toe.
  2. Een codelijst hoort bij een MIM-element. Open een Codelist of Referentielijst in het MIM-model en vul onder Codes de waarden in (+ Waarde toevoegen: code, naam, definitie).
  3. Koppel die waardelijst aan de dataset: bij het MIM-element, veld Gekoppelde dataset (DCAT) → Dataset zoeken & koppelen…. Daarna verschijnt op het element een blauwe DCAT-badge die naar de catalogus leidt.
  4. De dataset is nu zichtbaar in de Datacatalogus en exporteerbaar als TTL of publiceerbaar naar CKAN (data.overheid.nl).

Stap voor stap: beslismodel, kwaliteitsregels & datacontract

Een bedrijfsregel staat zelden alleen. Zij gebruikt begrippen, volgt uit een wetsartikel, en wacht soms op een andere regel. Die drie verbanden leg je al bij de regel vast; het beslismodel leest ze terug als een DMN 1.3 Decision Requirements Diagram. Er is dus geen tweede administratie: wat je op de plaat ziet, staat in de koppelingen.

Het beslismodel bekijken

  1. Hub → Bedrijfsregels → knop Beslismodel in de balk. Elke regel wordt een beslissing (rechthoek), elk begrip, domeintabel, dataset of feittype een inputdata (afgeronde vorm), en elke wet of organisatieonderdeel een kennisbron (golvende onderkant). Een regel met regeltype Bereken wordt een rekenmodule (afgeknipte hoeken): herbruikbare rekenlogica die andere regels aanroepen.
  2. De pijlen komen uit de koppelingen: usesDefinition en usesDomeintabel worden een informatievereiste, derivedFromBusinessRule ook, en derivedFromLaw of een koppeling naar een organisatieonderdeel wordt een gezagsvereiste (streepjeslijn).
  3. Met Rond beperk je de plaat tot de omgeving van één regel, met Stappen tot zover die omgeving reikt. De pijl wijst altijd naar de beslissing die iets nodig heeft. Klikken op een knoop brengt je naar dat object.
  4. ⤓ PNG geeft de plaat als afbeelding, voor een presentatie of een review.
Wijst een koppeling naar iets wat in deze werkruimte niet bestaat, dan verschijnt daar een melding over. Dat is met opzet: een plaat waar de helft van af is gevallen ziet er net zo compleet uit als een volledige. Zie je weinig op de plaat, kijk dan eerst naar die melding.

DMN uitwisselen

  1. Menu Meer → ⇧ DMN 1.3. Je krijgt de hele graaf met de vereisten, de beslistabellen en de plaat (DMNDI), leesbaar in Camunda Modeler, Signavio of een andere DMN-tool.
  2. Andersom: ⤓ DMN 1.3 leest een .dmn-bestand in. Beslissingen worden bedrijfsregels, hun vereisten worden koppelingen naar begrip, wet en regel. Wat niet thuis te brengen is gaat niet verloren maar blijft als losse naam staan en komt bij de volgende export weer mee. Een bestand dat uit SemanticXL komt werkt bestaande regels bij in plaats van er nieuwe naast te zetten.
Een business knowledge model uit DMN krijgt geen informationRequirement: dat verbiedt de specificatie. De invoer komt als formalParameter terug, met de herkomst in een eigen sxl:usesInput, zodat er bij het teruglezen niets verloren gaat.

Een validatieregel in Kwaliteitsregeltaal

Zet je bij een bedrijfsregel het regeltype op Validatie, dan verschijnt een veld voor de uitdrukking in de Kwaliteitsregeltaal van NORA. Rekenen mag: +, -, *, / en % tussen getallen. Een absolute waarde kent de taal niet, en die is ook niet nodig: een marge naar twee kanten zegt hetzelfde. Wat je typt wordt meteen gecontroleerd; klopt het niet, dan krijg je de plek waar het misgaat en niet alleen "ongeldig".

Wat je wilt zeggenHoe het eruitziet
Dit veld moet gevuld zijnHEEFT vormkoker
Binnen een bereiklengte >= 0.5 EN lengte <= 100
Alleen onder een voorwaardeALS status = "vastgesteld" DAN HEEFT hoogte
Geen dubbelenUNIEK code
Hooguit vijf procent afwijking(lengte - shapeLengte) / shapeLengte <= 0.05 EN (lengte - shapeLengte) / shapeLengte >= -0.05
Ruimtelijkgeometrie LIGT BINNEN gemeentegrens
  1. Kies het kwaliteitsaspect uit het NORA Raamwerk Gegevenskwaliteit: 32 attributen in 9 dimensies, van attribuut-compleetheid tot positionele-juistheid. Daaruit volgt straks de dimensie in het datacontract.
  2. Kies de ernst: fout is afkeuren, waarschuwing is onderzoeken, informatie is signaleren.
  3. Vul de meldingstekst in, met plaatshouders als {id} voor de waarden uit de rij. Dat is de zin die een beheerder straks te zien krijgt.
  4. Menu Meer → ⇧ Kwaliteitsregeltaal geeft een .krt-bestand. Regels zonder leesbare uitdrukking staan onderaan als commentaar, met de reden erbij: stil weglaten zou een bestand opleveren dat compleet lijkt.
  5. ⤓ Kwaliteitsregeltaal leest zo'n bestand weer in als validatieregels.

Veel regels? De boom links groepeert bedrijfsregels op het objecttype waarover ze gaan, met de telling erbij en de grootste groep boven. Klik een objecttype aan en de lijst toont alleen die regels; Alle zet het terug. Bij een set als de DAMO-kwaliteitsregels (631 regels over 43 objecttypen) is dat de ingang.

Had je al regels in een eigen notatie staan, bijvoorbeeld uit een spreadsheet? GET /api/session/<sid>/sem/krt/migratie is een proefdraai: per regel zie je of zij al KRT is, wat zij zou worden, of waarom het niet gaat. Er wordt niets geschreven tot je de POST doet.

Rekenen met datums

Een regel als "in de afgelopen twaalf maanden geëvalueerd" schrijf je in Kwaliteitsregeltaal met datums en tijdsduren. SemanticXL volgt daarin de specificatie van NORA.

WatZo schrijf je hetVoorbeeld
datumDD-MM-JJJJ31-01-2026
tijdUU:MM:SS14:30:00
datum met tijdJJJJ-MM-DD UU:MM:SS2026-01-31 14:30:00
tijdsduurISO 8601P30D (30 dagen), P12M (12 maanden), P1Y6M, P2W, PT2H
vandaag en nuVANDAAG, NUde dag en het tijdstip in Nederland
Wat je wilt zeggenHoe het eruitziet
In de afgelopen twaalf maanden geëvalueerdlaatsteEvaluatie >= VANDAAG - P12M
Minstens 18 jaar oudgeboortedatum + P18Y <= VANDAAG
In de laatste 30 dagen gewijzigdwijzigingsdatum >= VANDAAG - P30D
Minstens een week tussen start en eind(einddatum - startdatum) >= P7D

Meetresultaten en de norm

SemanticXL voert de regels niet zelf uit. De uitkomst hoort er wel bij: hoe scoorde deze regel vorige week? Het scherm Meetresultaten laat dat zien.

Het datacontract (ODCS)

Een dataset die aan een objecttype hangt, levert een datacontract volgens ODCS v3.1.0 (Bitol, Linux Foundation).

  1. Koppel de dataset aan het MIM-objecttype waar zij over gaat. De attributen worden de velden van het schema, met hun logische type en of ze verplicht zijn.
  2. Heeft een attribuut een begrip, dan komt de URI daarvan in het contract als authoritativeDefinitions van het type businessDefinition. Zo weet de afnemer niet alleen hoe het veld heet, maar ook wat het betekent.
  3. Validatieregels op datzelfde objecttype komen in het quality-blok, elk met de dimensie die uit het kwaliteitsaspect volgt.
  4. Menu Meer → ⇧ ODCS-datacontract geeft de YAML. Een bestaand contract lees je in met de import; velden en kwaliteitsregels worden dan voorstellen.

Het contract als pagina. Voor het gesprek met een afnemer is er de pagina Datacontract. Je vindt haar in de hub onder Inzichten, groep Publiceren, met een keuzelijst van de datasets. In de dataset-editor opent de knop Datacontract de pagina op de dataset die openstaat.

Een agent kan dit ook: via MCP stelt hij een validatieregel voor met regeltype, regelformulering (in KRT), kwaliteitsaspect en ernst. Een formulering die niet te lezen is, wordt geweigerd met de positie erbij, zodat er geen proza in een formeel veld belandt. Met toets_kwaliteitsregel kijkt hij een uitdrukking vooraf na zonder iets te schrijven: leest zij, waar zit de fout, en wat is de genormaliseerde tekst. Geeft hij de attributen van een objecttype mee, dan is een onbekend attribuut ook een fout. Met dien_meting_in levert hij meetresultaten aan (gecontroleerd, voldoet, voldoet niet, peildatum, bron en een notitie). Een meting voor een regel die niet bestaat of met tellingen die niet kloppen, wordt geweigerd, en elke meting komt in het auditspoor. Zie AI-agenten (MCP).

Stap voor stap: een applicatie (APM)

  1. Hub → Applicaties → + Nieuw. De code wordt alvast ingevuld met het eerstvolgende nummer. Vul Lifecycle-status (In gebruik / Uitfaseren / …), Bedrijfswaarde en Technische fit (Hoog/Middel/Laag), datums (Live, Einde support), Kosten en leverancier in.
  2. De lijst toont Code, Applicatie, Eigenaar, Lifecycle, Bedrijfswaarde, Tech. fit en BBN. Filteren kan op status en op eigenaar; het zoekveld kijkt ook naar de code en de eigenaar, en elke kolom is sorteerbaar.
  3. De velden staan in groepen: Kern, Waarde en fit, Eigenaarschap en beheer, Leverancier en contract, Levensloop, Kosten en Classificatie (BIO). Elke groep toont hoeveel er is ingevuld. Met ⤢ Groot invulscherm krijgt het formulier het hele scherm; met de pijlen (of Alt+← / Alt+→) loop je door de lijst, Esc brengt je terug.
  4. Tab Relaties → koppel de applicatie aan capabilities (realiseert), contracten en licenties.
  5. Met LCM-vragenlijst onderin het formulier leid je bedrijfswaarde en technische fit af in plaats van ze te schatten: elf criteria per as, elk 0, 1 of 2, gewogen opgeteld tot een score van maximaal 44 met de norm op 22. Vanaf de norm is het niveau Hoog; beide scores samen bepalen het kwadrant (Beheersen, Functioneel of Technisch vernieuwen, Vervangen). Zolang een as niet compleet is blijft de handmatige waarde staan. In bulk invullen kan via de CSV-export en -import in de rapportage.
  6. Onder Rapportages staat bovenaan het APM-dashboard: alles in een beeld, met filters op eigenaar, fase, hosting, leverancier, type, LCM-kwadrant en BBN die op elk blok doorwerken. Kerncijfers bovenin, dan applicaties per eigenaar (opgebouwd uit de lifecycle-fasen), het LCM-kwadrant met de kosten per vak, de BIV- en BBN-verdeling, de tien duurste applicaties, een kwartaaltijdlijn van aflopende support en contracten, de vulgraad van het register en een lijst aandachtspunten. De Print-knop geeft er een PDF van met de filters die op dat moment aan staan. Daarnaast vier overzichten: LCM-matrix (de TIME-portfolio: Invest/Migrate/Tolerate/Eliminate), Lifecycle-roadmap en BIV en BBN. Die laatste laat zien hoe de classificatie over de portfolio is verdeeld: eerst de dekking, dan de verdeling per as, het vastgelegde BBN naast het BBN dat uit de scores volgt, een kruistabel tegen de bedrijfswaarde, en aandachtspunten met de applicaties bij naam. Daarnaast LCM-vragenlijst: hoe ver de vragenlijst is ingevuld, hoe de portfolio over de kwadranten verdeelt, bij welke criteria zij het zwakst scoort en waar de vastgelegde waarde afwijkt van de afgeleide. Het Dashboard toont kosten en het TCO-overzicht.
  7. Sync ArchiMate houdt het portfolio en het architectuurmodel gelijk. Je kiest per keer welke kant leidend is (het APM of het model) en welk bereik: deze applicatie, de aangevinkte selectie of de hele portfolio. Je ziet eerst per veld wat er verandert; pas na Toepassen wordt er geschreven. Een applicatie zonder component in het model wordt bij de terugrichting overgeslagen, niet geraden.

Stap voor stap: zaaktype, bewaartermijn & documenttypen

Het zaaktype (werkproces) is het scharnier tussen wetgeving, uitvoering, systemen en archivering. Bewaartermijnen worden hier niet overgetypt maar afgeleid uit de selectielijst, met de herkomst erbij.

  1. Selectielijst kiezen. Hub → Zaaktypen → knop Selectielijst. De Selectielijst gemeenten 2020 komt met de applicatie mee (29 procestypen, 345 resultaten), dus dit werkt ook zonder internet. Wil je de actuele lijst? Klik Ophalen bij VNG-API.
  2. Zaaktype maken. + Nieuw → naam, doel (dat is straks ook je AVG-verwerkingsdoeleinde), proceseigenaar en doorlooptijd.
  3. Grondslag koppelen. Tab Relaties → derivedFromLaw naar het wetsartikel. Daarmee loopt de wetswijziging-radar mee: verandert het artikel, dan zie je welk proces dat raakt.
  4. Waarderen. Kies procestype en resultaat uit de keuzelijsten en klik Waardering afleiden. Waardering, archiefactietermijn, procestermijn en de selectielijstklasse worden gevuld, met een herkomstregel als "Selectielijst gemeenten 2020, procestype 9, resultaat 9.1". Afgeleide velden dragen het label afgeleid.
  5. Documenttypen. Maak informatieobjecttypen (Besluit, Aanvraag, …) met openbaarheid en het gewenste duurzame formaat, en koppel ze met levertOp aan het zaaktype.
  6. Overzicht. Knop Waarderingsoverzicht: dekkingsgraad, welke zaaktypen nog geen termijn of grondslag hebben, en hoeveel er afwijken van de lijst.
Blijvend bewaren levert géén archiefactietermijn op, en een vernietigingsdatum wordt alleen berekend als beide termijnen in jaren zijn uit te drukken. Bij "bestaansduur van het procesobject" blijft het veld leeg: die datum hoort bij het dossier, niet bij het type.

Stap voor stap: verwerkingsregister (AVG artikel 30)

De verwerking is een eigen object, geen veldenblok op het zaaktype: één proces kan meerdere verwerkingen kennen, en cameratoezicht hoort bij geen enkel proces.

  1. Afleiden. Open een zaaktype → knop AVG-verwerking. Doel, bewaartermijn (met herkomst), wettelijke grondslag en de systemen komen mee. De actie is idempotent: nog een keer klikken werkt bij, het maakt geen tweede verwerking.
  2. Aanvullen. Vul wat het systeem niet kan weten: categorieën betrokkenen, ontvangers, doorgifte buiten de EER en de beveiligingsmaatregelen.
  3. Gegevens als begrip. Koppel categorieën persoonsgegevens met verwerktGegeven aan een begrip in plaats van vrije tekst. Dan komt de definitie mee en zie je waar hetzelfde gegeven nog meer wordt verwerkt.
  4. Verantwoordelijke en FG. Knop Verwerkingsregister → Verantwoordelijke en FG. Die twee horen bovenaan het register (artikel 30 lid 1 onder a).
  5. Exporteren. In hetzelfde scherm: ⇧ Markdown (het register zoals de toezichthouder het wil zien) of ⇧ CSV.

Het systeem zet zelf een DPIA-signaal bij bijzondere persoonsgegevens, BSN, grootschaligheid, profilering, stelselmatige observatie of kwetsbare betrokkenen, met de reden erbij. Het signaleert; de FG beslist. Het overzicht benoemt per verwerking welke verplichte onderdelen nog ontbreken, in plaats van gaten stil te vullen.

Stap voor stap: BIV-classificatie & BBN (BIO)

De classificatie is mensenwerk, het niveau is rekenwerk.

  1. Scoren. Vul op het zaaktype de drie BIV-velden in: beschikbaarheid, integriteit, vertrouwelijkheid (Laag/Midden/Hoog). Dat is de uitkomst van je Business Impact Analyse.
  2. Afleiden. Knop BIO-classificatie → BBN afleiden. De hoogste score bepaalt BBN1, BBN2 of BBN3; raakt een gekoppelde AVG-verwerking bijzondere gegevens of het BSN, dan wordt het minimaal BBN2. De redenering staat in bbn_bron.
  3. Systemen erven. Applicaties krijgen automatisch het zwaarste niveau van de zaaktypen die erop draaien: informatie verhuist mee naar het systeem.

Het overzicht zet één combinatie bovenaan: een BBN3-systeem waarvan de support afloopt of dat wordt uitgefaseerd. Dat is precies de vraag die met losse spreadsheets blijft liggen, en het APM kent die lifecycle al.

Van begin tot eind, voorbeeld 1: van wet naar test

Dit is de "gouden draad": we maken de hele keten van een wettelijke eis tot de test die hem bewijst. Doel: aantoonbaar dat onze software voldoet aan de Wet kinderopvang.

  1. Wet ophalen. Hub → Wetgeving → Importeer wet → zoek "kinderopvang" → klik de rij. De wet + artikelen laden.
  2. Begrip maken. Hub → Begrippen → + Nieuw ▾ → Nieuw begrippenkader "Wet kinderopvang". Dan Nieuw begrip "kindercentrum": tab Algemeen prefLabel + kies het kader; tab Betekenis de definitie; tab Herkomst Wet koppelen. Opslaan + Valideer.
  3. Annoteren. Terug in Wetgeving: open het begripsbepalingen-artikel, selecteer het woord "kindercentrum" → Bestaand begrip → kies "kindercentrum". De term is nu gemarkeerd en gekoppeld.
  4. Requirement. Hub → Requirements → + Nieuw "Een kindercentrum moet geregistreerd zijn in het LRK", classificatie Wettelijk, MoSCoW Must. Tab Relaties → koppel aan het wetsartikel én aan het begrip "kindercentrum".
  5. User story. Hub → User Stories → "Als toezichthouder wil ik een kindercentrum kunnen registreren zodat toezicht mogelijk is". Relaties → realiseert → de requirement.
  6. Test. Hub → Testmanagement → testcase "Registratie kindercentrum slaagt". Relaties → test → de requirement. Zet Laatste run = Pass.
  7. Controleren. Open de requirement → het Coverage-blok toont Realizes + Tests op groen. Op het Dashboard stijgt "Requirements getest". In de Objectenbibliotheek zoek je "kindercentrum"; de kennisgraaf toont de hele keten: wet → begrip → requirement → user story → test.
Het resultaat: wijzigt straks de wet, dan laat Wijzigingen in de Wetgeving-module zien welke begrippen, requirements en tests geraakt worden. Zo is de hele keten traceerbaar, van begin tot eind.

Van begin tot eind, voorbeeld 2: codelijst als dataset

Doel: een waardelijst "soort opvang" vastleggen, betekenis geven en als open data publiceren.

  1. Codelijst in MIM. Hub → Informatiemodel → open je model → plaats een Codelist "Soort opvang" → inspector Codes → + Waarde toevoegen: DAG "Dagopvang", BSO "Buitenschoolse opvang".
  2. Betekenis. Bij het element, veld Begrip → Uit werkruimte… → koppel aan het begrip "opvangsoort" (maak het eerst in Begrippen als het nog niet bestaat).
  3. Dataset. Hub → Datasets → + Nieuw "Soort opvang (codelijst)": titel, thema, licentie (bv. CC-BY 4.0), toegang = publiek.
  4. Koppelen. Terug in MIM: element → Gekoppelde dataset (DCAT) → Dataset zoeken & koppelen… → kies de dataset. De blauwe DCAT-badge verschijnt op het element.
  5. Publiceren. Hub → Datacatalogus: de dataset staat er nu in. Met ↓ Harvest-feed download je de DCAT-AP-NL Turtle, of publiceer met ⤴ CKAN naar data.overheid.nl.

Van begin tot eind, voorbeeld 3: de GRC-cyclus

Doel: een privacyrisico beheersen en aantoonbaar toetsen.

  1. Hub → Risico's → "Datalek inschrijvingen": categorie Privacy, Kans = Mogelijk, Impact = Hoog → de matrix toont het brutorisico. Strategie = Verminderen.
  2. Hub → Beheersmaatregelen → "Toegangsbeheer + 2FA", type Preventief. Relaties → mitigeert → het risico.
  3. Hub → Controletoetsen (KCM) → "Kwartaaltoets toegang", uitkomst Effectief. Relaties → koppel aan de maatregel.
  4. Hub → Dashboard: de risicomatrix, "Risico's met maatregel", "Werking beheersmaatregelen" en de KCM-resultaten tonen samen dat de cyclus rond is.

Inzicht: Dashboard

Hub → Dashboard. Eén scherm met de gezondheid van de werkruimte: KPI-tegels (Semantische resources, Begrippen gevalideerd, Risico's met maatregel, Requirements getest, Getraceerd) en panelen: Risicomatrix, Status-verdeling, Dekking, Begrip-kwaliteit, Modellen (per model elementen + views), Begrippenkaders, Wetgeving, Financieel overzicht (TCO) en Resources per type. Zo zie je in één oogopslag wat compleet is en waar gaten zitten.

Inzicht: Semantische dekking

Hub → Semantische dekking. Meet hoeveel modelelementen (ArchiMate, MIM, BPMN) herleidbaar zijn naar een begrip of requirement, met een lijst ongedekte elementen om gericht te dichten. Hoge dekking = de modellen en de betekenislaag lopen synchroon.

Inzicht: de lenzen op je werkruimte

Naast het dashboard staan er op de hub zeven rapporten die dezelfde gegevens door een andere bril lezen. Geen van deze rapporten heeft een eigen administratie: ze lezen de koppelingen die er al liggen, dus wat je invult in de editors verschijnt hier vanzelf.

Delen: de wachtrij van voorstellen

Staat AI-assistenten (MCP) aan voor een werkruimte, dan komen voorstellen van agenten samen in de wachtrij (/wachtrij, ook te openen via Delen). Per voorstel staat er wat het is, uit welke bron het komt en namens wie het is gedaan. Je kiest wat je overneemt en wat je afwijst; overnemen zet het in het vastgestelde model, afwijzen haalt niets weg maar sluit het voorstel af als besluit. Een assistent kan nooit iets wijzigen of verwijderen, ook zijn eigen voorstel niet. Die volgorde is het punt: de machine stelt voor, een mens stelt vast — precies wat de AI-verordening sinds 2 augustus 2026 van een hoog-risicotoepassing verlangt.

Delen: de wachters

Een wachter is een vaste controle die zelf langs de werkruimte loopt en meldt wat er ontbreekt. Je start een ronde in de wachtrij met de knop Wachters laten rondgaan (of met POST /api/session/<sid>/wachters/ronde, bijvoorbeeld 's nachts vanuit een planner). Zes controles: bouwstenen die hun kavelcode dragen maar er niet aan hangen, lege kavels, bouwstenen zonder beschrijving, begrippen zonder definitie, regels die nergens naar wijzen (geen wet, geen begrip, geen bron), en voorstellen die langer dan veertien dagen op weging wachten.

Twee grenzen die erin zitten. Een wachter verzint niets: bij een begrip zonder definitie meldt hij dat, hij bedenkt er geen definitie bij, want dan zou er een afspraak in je architectuur staan die niemand heeft gemaakt. Voorstellen doet hij alleen waar het antwoord al in de werkruimte ligt, en dan gaat dat voorstel door dezelfde wachtrij als dat van een mens of een assistent, met bron en met zijn naam erbij. Waar assistenten niet mogen bouwen, stelt een wachter ook niets voor; kijken mag altijd, want kijken verandert niets. Hij draagt niets twee keer aan en niets wat al is afgewezen: een afwijzing is een besluit.

Delen: Datacatalogus

Hub → Datacatalogus. Doorzoek datasets over werkruimtes heen. Bovenaan een zoekveld; rechtsboven de tabs Toegankelijk / Publiek; links facetten op Thema, Organisatie en Toegang. Klik een dataset voor het detail (metadata + distributies; bij JSON-distributies toont bron bekijken de eerste 50 rijen). Exporteer de hele catalogus met ↓ Harvest-feed (TTL) of publiceer met ⤴ CKAN.

Delen: Objectenbibliotheek

De Objectenbibliotheek (knop Objectenbibliotheek op de startpagina, of /bibliotheek) is een publieke, alleen-lezen verkenner: geen account nodig. Zoek een object (zoekveld + soort-facet), klik het aan en bekijk: de URI (met TTL/JSON linked-data-links), de beschrijving, een plaatje/view (te vergroten en te downloaden als SVG/PNG), de interactieve kennisgraaf (Ster / Per soort / Stroom), annotaties, alle relaties als klikbare chips, "komt voor in" (views) en de geschiedenis. Ideaal om collega's of burgers mee te laten kijken zonder bewerkrechten.

Kennisgraaf in de ruimte. Op elke kaart staat de kennisgraaf van het object, sinds v1.158 in drie dimensies: het object in het midden, de buren eromheen in de ruimte, verder weg kleiner en bleker. Slepen draait, Ctrl+scroll zoomt, een klik opent de buur, een dubbelklik klapt de graaf daar een niveau verder uit. De standen Ster, Op soort (elke soort een eigen baan) en Stroom (inkomend erachter, uitgaand ervoor) blijven; de knop 2D geeft het platte plaatje. Vergroten en bewaren werken op beide.

Werkruimtes kiezen. In de linkerkolom, boven de filters, staat de lijst Werkruimtes: dezelfde kiezer als in het brein, met dezelfde bewaarde keuze. Zonder account zijn dat alle openbaar gedeelde werkruimtes, en die staan standaard allemaal aan; na inloggen komen je eigen werkruimtes erbij (met een slotje). Vink er een uit en zijn objecten verdwijnen uit de zoekresultaten.

Delen: Organisatiebrein

Kennis zit in de dingen, betekenis zit ertussen. Het Organisatiebrein (/brein, of de knop Als brein bekijken in de bibliotheek) toont dezelfde objecten als de Objectenbibliotheek, maar dan om de samenhang heen. Je staat steeds in één object: dat staat groot in het midden met zijn definitie, en eromheen hangen de buren.

Die buren staan niet op relatietype gegroepeerd maar op de vraag die ze beantwoorden: Wat betekent het? (kader, breder/smaller, bron), Waar wordt het gebruikt? (processen, applicaties, datasets, zaaktypen), Wie gaat erover? (eigenaar, vaststelling), Wat zegt de wet? (artikelen en grondslagen) en Waar hangt het verder mee samen? Links, onder de werkruimtes, staat per vraag een lens: uitzetten dooft die kant van het brein.

Het informatiemodel doet mee. Een attribuut met een eigen datatype wijst door naar dat element: cbsCode : CBSCode wordt een klikbare band waardelijst van cbsCode naar de enumeratie, en vanuit die waardelijst zie je waar zij gebruikt wordt. Een validatieregel wijst door naar de waardelijsten die zij toetst, afgeleid uit de attributen in haar uitdrukking in Kwaliteitsregeltaal. Zo loopt het pad van een objecttype via de regel naar de waardelijst, de domeintabel en de waarden die erin staan. Primitieve datatypen (Integer, CharacterString) blijven eigenschappen: die als buur tonen zou elk objecttype vullen met knopen die niets zeggen.

Filteren op werkruimte. Linksboven staat altijd de lijst Werkruimtes: standaard staat alles aan, want daar gaat het brein om. Vink een werkruimte uit en zijn objecten verdwijnen uit de plaat, de zoeksuggesties en de impactlijst. De keuze blijft bewaard in je browser. Filteren is een kijkvoorkeur en geen rechtenkwestie: zichtbaar is en blijft wat je mag zien (publiek gedeelde werkruimtes, plus je eigen werkruimtes zodra je bent ingelogd), en een object daarbuiten blijft onbereikbaar of je het nu aanvinkt of niet. Een werkruimte die alleen jij ziet, draagt een slotje.

Waar je het vindt. Op elke publieke pagina staat rechtsboven de knop Verkennen: één paneel met alle ingangen (organisatiebrein, objectenbibliotheek, datacatalogus, publieke werkruimtes, documentatie). In je eigen omgeving staat boven het canvas de keuze Repository / Bibliotheek / Brein: dezelfde werkruimte, drie manieren om ernaar te kijken. Diezelfde drie knoppen staan rechtsboven op elke pagina, ook zonder account (inlogpagina, productpagina, bibliotheek, brein, publieke werkruimtes): Bibliotheek en Brein zijn vrij te bekijken, Repository vraagt eerst om in te loggen en brengt je daarna op de bedoelde plek.

Delen: Woordenboek

Het Woordenboek (/woordenboek) beantwoordt één vraag: wat betekent dit woord? Het toont alleen begrippen, als trefwoorden zoals in een woordenboek. Het is voor iedereen: een inwoner die een brief krijgt, een jurist, een nieuwe collega. Je hebt geen account nodig; na inloggen komen je eigen werkruimtes erbij.

Vier manieren om naar dezelfde werkruimte te kijken. In de repository maak en beheer je begrippen, modellen en regels. De andere drie lezen alleen, en elk beantwoordt een andere vraag:

ObjectenbibliotheekOrganisatiebreinWoordenboek
VraagWat staat er allemaal?Hoe hangt het samen?Wat betekent dit woord?
Inhoudalle soorten objecten, met relaties en platenalle soorten, als netwerk, met impact en padalleen begrippen
Vormlijst en objectkaartéén object met zijn buren eromheentrefwoord met genummerde betekenissen
Handig voorarchitect, informatieanalistarchitect, beleidiedereen

Delen: AI-agenten (MCP)

Vraag een taalmodel wat een term betekent en je krijgt een aannemelijk antwoord dat nergens op steunt. Sluit het aan op je werkruimte en het haalt de vastgestelde definitie op, met de URI erbij en de datum van vaststelling. Vindt het niets, dan hoort het dat te zeggen; die instructie krijgt de agent bij het verbinden mee.

  1. Delen. Alleen werkruimtes die je publiek deelt komen naar buiten, en alleen om te lezen. Wat je niet deelt bestaat voor een agent niet.
  2. Aansluiten op je eigen werkruimtes (OAuth). Geef je AI-toepassing https://www.semanticxl.com/api/mcp/mijn. Je assistent stuurt je eenmalig naar een toestemmingsscherm in je browser; daar zie je wie er vraagt, wat hij mag en in hoeveel werkruimtes, en dan geef je toestemming. Daarna werkt hij met jouw rechten: wat jij niet mag zien, ziet je assistent ook niet, en verlies je ergens toegang, dan verliest hij die mee. Je hoeft niemand om een sleutel te vragen. Wat een assistent nooit krijgt is wijzigen of verwijderen: schrijven gaat alleen als voorstel. Bij je profiel staat onder Verbonden agenten welke programma's namens jou werken, met een knop om dat per programma in te trekken. Technisch is dit OAuth 2.1 met PKCE en dynamische registratie (RFC 7591), dus een MCP-client regelt het zelf; er is niets in te stellen.
  3. Aansluiten op wat publiek is (zonder account). Geef je AI-toepassing dit adres: https://www.semanticxl.com/api/mcp. In Claude gaat dat met claude mcp add --transport http semanticxl <adres>; in ChatGPT via Connectors in de ontwikkelaarsmodus. Er is geen account of installatie voor nodig. Open je het adres in een browser, dan zie je een beschrijving met de beschikbare gereedschappen.
  4. Wat de agent kan. Achttien gereedschappen. Lezen: een begrip zoeken, de volledige kaart van een begrip opvragen (definitie, toelichting, bronnen, relaties, vaststelling), een werkproces zoeken met bewaartermijn en herkomst, de wettelijke grondslag ophalen, de werkruimtes opsommen, de domeintabellen opsommen en de toegestane waarden in zo'n tabel opzoeken op code of omschrijving. Met een organisatietoken ook het applicatieportfolio, de bedrijfsregels, de overige registers en de impact van een wijziging. Schrijven bestaat alleen als voorstel doen, in elke notatie, en dat staat hieronder.
  5. Waardelijsten. Bij een domeinwaarde krijgt de agent de code, de omschrijving en tot wanneer die geldig is. Verlopen waarden blijven buiten beeld, met vermelding hoeveel er zijn weggelaten. De omvang van de lijst staat er altijd bij, zodat een agent de eerste waarden niet voor de hele lijst aanziet.
MCP (Model Context Protocol) is de standaard waarmee AI-toepassingen gereedschappen ophalen. Zonder aanmelding is het koppelvlak anoniem en alleen-lezen: het toont niet meer dan een bezoeker van de Objectenbibliotheek al ziet. Met OAuth of een organisatietoken komen daar de werkruimtes bij die jij mag zien, en in een werkruimte die daarvoor open staat mag een assistent voorstellen doen. Wijzigen of verwijderen kan een assistent nooit.

Agenten laten meebouwen. Bij Delen staat naast organisaties en publiek een derde keuze: AI-assistenten (MCP). Zet die aan en assistenten mogen in die werkruimte voorstellen doen in elke notatie: begrippen, capabilities, bedrijfsregels en requirements, ArchiMate-elementen en -relaties, MIM-objecttypen met attributen, BPMN-processen, domeintabellen met waarden, en de platen waarop dat samen staat. Modelvoorstellen landen in een eigen model "Voorstellen van agents" naast het vastgestelde model, zodat er nooit iets ongewogen in je eigen model komt; in de modelboom van het canvas neem je met de rechtermuisknop over wat je accepteert, in één keer of per element. Alle notaties bij elkaar staan in de wachtrij (/wachtrij, ook te openen vanuit Delen): daar weeg je een voorstel met zijn bron en namens wie het is gedaan, en gaat overnemen of afwijzen in één handeling. Afwijzen haalt niets weg: het voorstel verlaat de wachtrij en blijft als besluit terug te lezen. Een relatie gaat langs de relatiematrix van ArchiMate 4.0, en een weigering zegt wat er wél mag. Een bron is verplicht, de assistent zegt namens wie hij bouwt, en het voorstel komt binnen met status Concept. Iemand met de rol editor stelt vast. Wijzigen of verwijderen kan een assistent nooit, ook zijn eigen voorstel niet, en er is een bovengrens aan de wachtrij. Je hoeft dus niemand persoonlijk rechten te geven. Het recht staat in de werkruimte zelf en staat standaard uit; bij het inlezen van een werkruimte-zip staat het altijd uit, want rechten reizen niet mee met gegevens.

Samen bouwen. Op De Bouwplaats staat het stappenplan voor Claude Code en Codex naast elkaar, met voorbeeldvragen, en het plan om architecten met hun assistent te laten meebouwen aan de Referentiearchitectuur Agentische Overheid.

Rapport & export

Hub → Rapport bundelt de hele werkruimte tot één print-klaar PDF/HTML-document (samenvatting, status, governance & risico, dekking, begripskwaliteit, applicatieportfolio, modellen, begrippenkaders en wetgeving). Per objecttype exporteer/importeer je los via de tegel-acties (ZIP / ZIP). Begrippen exporteren ook naar Turtle/RDF-XML/CSV/ReSpec; wetgeving en datasets naar TTL. Een hele werkruimte exporteer je als werkruimte-<id>.zip en lees je op de startpagina weer in (kaart ZIP). Heet het bestand nog werkruimte-<id>.zip, dan vraagt de import of de werkruimte op dat id terug mag: dan blijven de verwijzingen tussen modellen (MIM naar architectuur, BPMN naar architectuur) en deeplinks kloppen. Dat kan alleen als dat id vrij is, dus de oude werkruimte eerst verwijderen; anders wordt het een nieuwe werkruimte met een nieuw id.

Uitwisselen: Catalogi API & MDTO

De zaaktypecatalogus is uitwisselbaar met een zaaksysteem via de VNG Catalogi API (ZTC). Wij beheren de catalogus, het zaaksysteem voert de zaken uit.

Signalen: de bel op je startpagina

Rechtsboven op de startpagina staat een bel met een teller. Die verzamelt vier dingen, en alleen uit werkruimtes waar je zelf toegang toe hebt:

Taken staan boven nieuws, en het meest verlopen bovenaan. Klik een regel om het object in het organisatiebrein te openen. Alles gezien zet de teller op nul; een openstaande herijking blijft wel staan, want die verdwijnt doordat je hem oppakt en niet doordat je ernaar keek. Er gaat geen mail uit: de bel is het kanaal.

Iets melden: bug, vraag of idee

Rechtsonder staat op elke pagina het kleine knopje Melden. Ligt er een knop van de pagina onder, dan schuift het zelf opzij. Kies het soort (bug, vraag, idee), geef een titel en beschrijf wat er speelt. Verder hoef je niets in te vullen: pagina, werkruimte, geselecteerde resource, versie, browser en de laatste tien JavaScript-fouten gaan automatisch mee, en onder Wat sturen we mee? zie je precies wat dat is.

Tegels per organisatie en per rol

Drieëndertig tegels zijn te veel voor één demo, en niet elke organisatie neemt alles af. Daarom staan er twee knoppen achter elkaar in de adminmodule (Organisaties → Tegels & rollen):

Zichtbaar is dus licentie × rolprofiel. Nog niets ingesteld betekent alles: een nieuwe klant die een leeg scherm krijgt is een ergere fout dan een demo die te vol staat.

Wie stelt wat in? De licentie wordt door SemanticXL gezet (Admin → Organisaties → Tegels & rollen); wat een organisatie heeft afgenomen is een afspraak met de leverancier en geen knop voor de klant. De rolprofielen richt de organisatie zelf in via Mijn organisatie (/organisatie, ook in het menu Verkennen): een eigenaar of beheerder van de organisatie kiest per lid een profiel en ziet daaronder ter informatie wat er is afgenomen.

Per werkruimte. Werk je in een werkruimte die met een organisatie is gedeeld, dan geldt de licentie van díe organisatie. Hoor je bij meer clubs, dan verandert dat niets aan wat je in die werkruimte ziet.

Dit gaat over zichtbaarheid, niet over rechten. Wat je mag blijft de werkruimterol (eigenaar, editor, bijdrager, lezer) en die verandert hier niet. Een verborgen tegel is geen afgeschermde tegel: wie de URL kent komt er nog steeds, mits hij toegang heeft tot de werkruimte. Gebruik dit om een scherm behapbaar te houden, niet om iets af te schermen.

Volledig ontwerp, inclusief wat er bewust niet gebeurt: docs/Tegels-En-Rollen.md.

Waarom geen RACI? RACI zit al in SemanticXL waar het thuishoort: per object, via de organisatie-eenheid naar processen, regels en risico’s. Menu-zichtbaarheid eruit afleiden werkt niet: een nieuwe begrippenbeheerder heeft nog geen enkele toewijzing en zou een leeg scherm krijgen, en het beeld zou verschuiven zodra iemand een toewijzing verplaatst. "Geïnformeerd" gaat ook over notificaties (de signalen-bel), niet over welke onderdelen je opent.

Federatie: werkruimtes koppelen

Grote organisaties werken met referentiewerkruimtes (centrale, deelbare kennisbronnen zoals een organisatiebreed begrippenkader of een wetgeving-bibliotheek) en teamwerkruimtes voor projecten. Federatie verbindt die twee zonder te kopiëren: teams linken rechtstreeks naar de centrale kennis, en de herkomst blijft zichtbaar.

  1. Referentie aanmerken: open in de kennisbank-werkruimte de hub → Federatie en zet het vinkje referentiewerkruimte (met een korte omschrijving). Alleen een editor/eigenaar kan dit.
  2. Abonneren: open in de team-werkruimte hetzelfde paneel en kies een referentie uit de lijst. Je ziet alleen referenties die al voor jou zichtbaar zijn (publiek of via je organisatie gedeeld) — abonneren geeft dus geen extra rechten, het is alleen ordening.
  3. Gericht koppelen: in elk koppel-venster verschijnt nu de optie Referenties: je doorzoekt je eigen werkruimte plus je abonnementen, zonder ruis van alle andere werkruimtes. Resultaten uit een referentie zijn herkenbaar aan het label van de referentie.
  4. Extern gebruik (voor de kennisbank-beheerder): knop Extern gebruik toont per geabonneerde werkruimte en per object hoeveel links naar jouw kennis wijzen — impact-inschatting én bestaansrecht in één overzicht. Werkruimtes waar je zelf geen toegang toe hebt verschijnen geanonimiseerd.
  5. Upstream-controle (voor het team): knop Upstream-controle beoordeelt al je uitgaande federatieve links: is het doel ongewijzigd, gewijzigd, vervallen of verdwenen? Bij verdwenen doelen biedt herstel via URI een reparatie: het object wordt teruggevonden op zijn blijvende URI (bijvoorbeeld na een her-import in de referentie).

In de traceerbaarheids-graaf verschijnen koppelingen naar andere werkruimtes als extern knooppunt met het werkruimte-label, zodat de herkomst van kennis altijd zichtbaar blijft. Het volledige ontwerp staat in docs/Federatie-Ontwerp.md; het ontwerp zelf is als semantisch model vastgelegd in de SemanticXL-werkruimte (usecases UC-14 t/m UC-20).

Publiceren naar een triplestore (TriplyDB)

Een werkruimte kan als linked data naar een externe triplestore, zodat de data daar met SPARQL, GraphQL en zoekindexen te bevragen is. Twee stappen:

  1. Verbinden — onder Mijn organisatie (/organisatie) vult een organisatiebeheerder het API-adres (bijvoorbeeld https://api.klant.triply.cc), het account en een API-token in. Let op het verschil: in https://api.klant.triply.cc is klant de naam van de instance; het account is de gebruiker of organisatie daarbinnen (bijvoorbeeld je eigen gebruikersnaam). Vul je het verkeerde in, dan noemt het scherm op welke accounts dit token wél mag gebruiken. Het token wordt eerst uitgeprobeerd en daarna versleuteld opgeslagen; het scherm toont daarna alleen de laatste vier tekens. Een adres dat naar een intern netwerk wijst wordt geweigerd.
  2. Publiceren — knop Naar triplestore in de balk boven de tegels. Kies de lagen en publiceer. Elke laag krijgt een eigen graaf (…/ws/<werkruimte>/sem), en er gaat een vijfde graaf …/meta mee met wat er is gepubliceerd, wanneer en met welke checksum.

Publiceren is spiegelen. De graaf van die laag wordt vervangen door wat er nu in de werkruimte staat; triples die in Triply met de hand aan diezelfde graaf zijn toegevoegd, gaan verloren. Verrijken doe je in een eigen graaf of in een dataset die de onze importeert.

Altijd privé. SemanticXL maakt de dataset privé aan en zet dat nooit om. Openbaar maken kan, maar bewust en in de beheerinterface van Triply. De URI's in de graaf zijn dezelfde als hier: de basis volgt de URI-strategie van de werkruimte.

Vijf lagen. De betekenislaag (begrippen, wetgeving, regels, datasets en de andere semantische soorten), ArchiMate, MIM/UML/ERD, BPMN en domeinwaarden. Het scherm biedt alleen aan wat de werkruimte werkelijk heeft: een vinkje voor een lege laag levert alleen een foutmelding op.

Wat er in de betekenislaag meegaat. Naast de objecten zelf ook hun eigenschappen: van een applicatie dus lifecyclestatus, bedrijfswaarde, technische fit, kosten, leverancier, hosting en eigenaar. Grote opgeslagen blobs (tabelrijen, annotaties, afbeeldingen) gaan niet als literal mee; die horen als structuur in de graaf of nergens.

Begrippen volledig naar NL-SBB. Naast de definitie en de SKOS-relaties gaan ook de synoniemen (skos:altLabel), verborgen labels, de labels en definities in andere talen (elk met hun taalcode) en de herkomst (dcterms:source) mee. Zonder die velden is een begrip in de triplestore een woord met een zin eronder.

Domeinwaarden als SKOS. Elke domeintabel wordt een skos:ConceptScheme en elke rij een skos:Concept met skos:notation (de code) en skos:prefLabel; de overige kolommen komen mee onder hun kolomnaam. Dat is de vorm waarin codelijsten overal worden gepubliceerd. Ze zitten in een eigen laag, want een werkruimte als Aquo heeft er duizenden en die wil je kunnen weglaten.

Grote grafen gaan in delen. De simpele upload van TriplyDB gaat tot 5 MB. Wat groter is, wordt op statement-grenzen opgeknipt en in stukken verstuurd; elk deel is op zichzelf leesbare RDF. De graaf wordt één keer vooraf geleegd, niet per deel, anders zou deel twee deel één wissen.

De vocabulaire. Voor MIM gebruiken we de termen van Geonovum (mim:Objecttype, mim:Attribuutsoort, mim:Relatiesoort). Voor ArchiMate bestaat geen normatieve RDF-vocabulaire van de Open Group en voor BPMN is een volledige ontologie zwaarder dan nodig; daarvoor is er een kleine SemanticXL-vocabulaire (https://www.semanticxl.com/ns/model#) met het type zoals de standaard het noemt, de laag, en de bron en het doel van een relatie. Een relatie staat er twee keer in: als rechtstreeks predicaat om mee te bevragen (sxlm:serving) en als eigen resource voor wie het type of de naam wil.

Twee URI's per object. De betekenislaag verwijst naar modelobjecten met urn:semanticxl:<soort>:<id>; dat is de sleutel waarop de grafen op elkaar aansluiten. Daarnaast krijgt elk object een http-URI onder de basis van de werkruimte, met owl:sameAs ertussen. Daardoor is in de triplestore te vragen: welke applicaties raken dit begrip, en welke wet ligt eronder. Die http-URI is ook dereferenceerbaar: vraag je hem op met Accept: text/turtle, dan krijg je de triples van dat object met zijn relaties; open je hem in een browser, dan kom je uit in het organisatiebrein. Zichtbaar is wat je mag zien, net als in de bibliotheek. Ontwerp en vervolgstappen: docs/Triply-Sync-Ontwerp.md.

Koppelen met andere systemen (API-token)

De publieke API en het MCP-koppelvlak tonen alleen wat publiek gedeeld is. Wil een ander systeem (TOPdesk, ServiceNow, een rapportagetool) ook bij gegevens die dat niet zijn, dan gebruik je een API-token op organisatieniveau.

  1. Token maken. Admin-paneel → Organisaties → knop API-tokens. Geef het een naam waaraan je later ziet waar het voor is, kies de geldigheid (standaard een jaar) en kopieer het geheim. Dat staat één keer in beeld: daarna bewaart de server alleen een hash.
  2. Reikwijdte. Het token geeft alleen-lezen toegang tot precies de werkruimtes die met die organisatie zijn gedeeld. Ontkoppel je een werkruimte, dan vervalt de toegang vanzelf; er is geen tweede rechtenlijst.
  3. Gebruiken. Altijd in de header, nooit in de URL: Authorization: Bearer sxl_…. Begin bij /api/data/werkruimtes voor de lijst met werkruimtes, en haal daarna op wat je nodig hebt.
  4. Applicatieportfolio. /api/data/session/<werkruimte>/apm geeft alle applicaties met hun eigenschappen en relaties; …/apm.csv geeft hetzelfde als CSV die direct in Excel opent. Eigen velden komen mee, ook als ze niet in de standaardkolommen staan.
  5. Intrekken. In hetzelfde scherm. Dat werkt onmiddellijk; de historie blijft staan, inclusief wanneer het token voor het laatst is gebruikt.
EndpointWat je krijgt
GET /api/data/werkruimtesde werkruimtes die dit token mag lezen, met hun titel
GET /api/data/session/{id}/apmalle applicaties met eigenschappen en relaties (JSON)
GET /api/data/session/{id}/apm.csvdezelfde portfolio als CSV (puntkomma + BOM, opent in Excel-NL)
GET /api/data/session/{id}/{soort}de ruwe objecten van een soort: begrip, zaaktype, dataset, contract…

Foutmeldingen: 401 geen of ongeldig token · 404 werkruimte bestaat niet of is niet gedeeld met deze organisatie · 429 te veel verzoeken (wacht de Retry-After af; de grens ligt op 600 per minuut per token).

Elk gebruik en elke weigering komt in de beveiligingslog terecht, met het token-id maar zonder het geheim. Een niet-gedeelde werkruimte geeft 404 in plaats van 403: anders zou het koppelvlak verraden welke werkruimtes er bestaan.
Voor de leverancier. Er is een kant-en-klare instructie zonder geheimen om door te sturen aan de partij die de gegevens gaat uitlezen: docs/API-Instructie-Leverancier.md. Daarin staan de endpoints, de betekenis van elk veld in de APM-export, de foutmeldingen en werkende voorbeelden in Python en PowerShell. Stuur het token zelf apart, via een kanaal waar het niet blijft staan.

Beveiligingslog naar een SIEM

Elke gebeurtenis rond toegang wordt weggeschreven als één JSON-regel: aanmelden (geslaagd, mislukt, geblokkeerd door de rate-limit, opgeschort account, tweede factor gevraagd), afmelden, registreren, een wachtwoord dat opnieuw is ingesteld, geweigerde toegang, een werkruimte die gedeeld of publiek wordt gezet, een gedownloade werkruimte-export en serverfouten.

Waar die regels heen gaan bepaalt de beheerder met SEMANTICXL_AUDIT_LOG: leeg is stdout (de containerlog), een pad schrijft naar een roterend bestand dat een agent kan volgen, en uit zet het af. De tijd staat in UTC en elk verzoek draagt een verzoek_id, overgenomen uit X-Request-Id als de proxy die meestuurt.

Wachtwoorden, tokens, cookies en modelinhoud staan niet in de log; het e-mailadres wel, want zonder wie is een reeks pogingen niet te onderzoeken. Dit staat naast de provenance in de werkruimte: die legt inhoudelijke wijzigingen vast, de beveiligingslog gaat over toegang.

Auditlog in de applicatie. Dezelfde regels, aangevuld met beheerhandelingen (gebruikers, rollen, toegang tot werkruimtes, instellingen, tokens, modellen importeren, leegmaken of verwijderen), bewaart SemanticXL ook zelf. Systeembeheerders zien ze onder Beheer → Auditlog (/auditlog): filteren op periode, gebeurtenis, ernst, gebruiker, werkruimte en vrije tekst, en het resultaat exporteren als CSV of JSON. De eigenaar van een werkruimte haalt in het infovenster van de werkruimte het auditlog en de wijzigingslog van die werkruimte op als CSV. De bewaartermijn is standaard 400 dagen (SEMANTICXL_AUDIT_BEWAAR_DAGEN).

URI-strategie

Elk object krijgt automatisch een unieke, blijvende webadres-naam (URI). Onder URI-strategie stel je de basis-URI en de identifier-vorm (leesbare slug of uuid) per type in — globaal, met optionele override per werkruimte. URI-migratie herschrijft bestaande URI's naar de actuele strategie (zelfde identifier, nieuwe basis).

Architectuur: de praatplaten

Hoe zit SemanticXL zelf in elkaar? Vier platen vertellen het verhaal: wie het platform raakt, hoe de binnenkant is opgebouwd, waarom vier modelleertalen op één kennislaag het verschil maken, en hoe een wijziging van dev-PC naar productie reist.

Plaat 1: systeemcontext

SemanticXL is één webapplicatie met vier gelijkwaardige modelleertalen op een gedeelde kennislaag. GitHub speelt drie rollen tegelijk: identity provider (OAuth-login), synchronisatiedoel voor CoArchi-repo's en het deploykanaal van de broncode zelf. Federatie laat werkruimtes elkaars begrippen refereren zonder kopiëren.

Diagram laden…

Plaat 2: de binnenkant, de runtime

Eén FastAPI-proces serveert alles: editors, JSON-API's en WebSockets. Twee bewuste keuzes bepalen het beeld: bestanden in plaats van een model-database (modellen zijn leesbare bestanden per werkruimte, met atomic writes en versie-snapshots; alleen identiteit/autorisatie zit in een database) en één worker (realtime-samenwerking leeft in het geheugen van één proces).

Diagram laden…

Plaat 3: de kennislaag, vier notaties in één werkruimte

De inhoudelijke kern: een klant, subsidie of vergunning is niet vier keer gemodelleerd maar één keer, met vier projecties (ArchiMate, NL-SBB, MIM, BPMN). Cross-model-links zijn eerste-klas data en elke resource heeft een canonieke, dereferenceerbare URI. Daarop bouwen de analysefuncties: wetswijziging-radar, semantische dekking, definitie-drift en de RegelSpraak-export naar ALEF.

Diagram laden…

Plaat 4: de ontwikkelstraat, van dev-PC via GitHub naar Hetzner

Drie stations: ontwikkelen (lokale dev-server met SQLite en dezelfde testsuite als CI), integreren (GitHub draait bij elke push de volledige suite, inclusief Playwright-e2e; GitHub is de enige route naar productie) en draaien (een Ubuntu-VM in de Hetzner-cloud met Coolify bouwt de image uit de Dockerfile en wisselt de container; Traefik regelt domein en certificaat). De enige stateful onderdelen zijn het datavolume met werkruimtes en MariaDB.

Diagram laden…

Referentie: relatietypen

De koppel-vensters tonen alleen de relatietypen die voor dat objecttype geldig zijn. De meest gebruikte:

Referentie: standaarden

SemanticXL bouwt op open standaarden, zodat je kennis herbruikbaar en uitwisselbaar blijft:

NL-SBB ↗ SKOS ↗ SBVR ↗ DMN 1.3 (DRD) ↗ Kwaliteitsregeltaal (NORA) ↗ Raamwerk Gegevenskwaliteit ↗ ODCS v3.1.0 ↗ W3C DQV ↗ OSLC-RM ↗ ArchiMate ↗ MIM ↗ UML 2.5 (klassediagram) ↗ XMI (UML) ↗ ERD (crow's foot) ↗ BPMN ↗ DCAT-AP-NL ↗ ELI ↗ RDF/Turtle ↗