diff --git a/docs/Makefile b/docs/Makefile index f18b99146..a4b360272 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,3 +1,8 @@ ams-schema-spec.html: ams-schema-spec.bs bikeshed spec $< $@ - sed -i 's/ *$$//' $@ +# Clear training whitespace + sed -i.bak -e 's/ *$$//' $@ + rm $@.bak + +watch: + bikeshed watch ams-schema-spec.bs ams-schema-spec.html diff --git a/docs/ams-schema-spec.bs b/docs/ams-schema-spec.bs index a63f83895..013d5d9ff 100644 --- a/docs/ams-schema-spec.bs +++ b/docs/ams-schema-spec.bs @@ -15,14 +15,15 @@ Logo: https://api.data.amsterdam.nl/api/gemeente_Amsterdam_logo.svg Favicon: https://data.amsterdam.nl/favicon.png Boilerplate: copyright no, footer no Max ToC Depth: 2 -Text Macro: DCAT DCAT -Text Macro: DCATURL https://www.w3.org/TR/vocab-dcat-2/ +Text Macro: DCAT DCAT +Text Macro: DCATURL https://www.w3.org/TR/vocab-dcat-3/ Text Macro: BP
**Best Practice** Text Macro: BPE
Text Macro: CONST *constant* -Text Macro: HIDELINESEXAMPLE class="example hide-lines" onClick="this.classList.toggle('hide-lines');this.classList.toggle('unhide-lines');" -Text Macro: SYNCSCROLLA class="a" onscroll="let sibling =this.nextElementSibling; sibling.scrollTop=this.scrollTop;sibling.scrollLeft=this.scrollLeft;" -Text Macro: SYNCSCROLLB class="b" onscroll="let sibling =this.previousElementSibling; sibling.scrollTop=this.scrollTop;sibling.scrollLeft=this.scrollLeft;" +Text Macro: HIDELINESEXAMPLE
+Text Macro: COMPAREA
+Text Macro: COMPAREB
+Text Macro: END
Advisement: De meest recente aanpassing aan deze specificatie is:
[[#lastchange]] @@ -69,7 +70,7 @@ Een dataset wordt beschreven in één of meer JSON bestanden. Binnen deze bestanden bestaan de volgende niveaus: : [[#datasets| dataset]] :: Een samenhangende collectie van data met één beheerder of beherende instantie. - Zoals bedoeld in [[VOCAB-DCAT-2#dcat-scope|DCAT]]. + Zoals bedoeld in [[vocab-dcat-3#dcat-scope|DCAT]]. Op dit niveau wordt voornamelijk meta-informatie over de herkomst en aard van de data meegegeven, zoals de naam, beschrijving, licentie en publicatiedatum. Een dataset bevat minstens één tabel. : [[#tables|tabel]] @@ -96,13 +97,13 @@ Met een dataset wordt een dataset zoals gedefinieerd in [DCAT] bedoeld. [DCAT] d A collection of data, published or curated by a single agent or identifiable community. The notion of dataset in DCAT is broad and inclusive, with the intention of accommodating resource types arising from all communities. Data comes in many forms including numbers, text, pixels, imagery, sound and other multi-media, and potentially other types, - any of which might be collected into a dataset. (From [[VOCAB-DCAT-2#dcat-scope]]) + any of which might be collected into a dataset. (From [[vocab-dcat-3#dcat-scope]]) Verplichte attributen {#dataset-mandatory-fields} ------------------------------------------------------- Een dataset binnen Amsterdam Schema bestaat uit een JSON bestand met in ieder geval de volgende velden: -
id {{id-type|identifier}} Unieke identifier voor deze dataset. Moet voldoen aan [[#naamgeving]]. Conform \[DCAT § resource_identifier](https://www.w3.org/TR/vocab-dcat-2/#Property:resource_identifier). +
id {{id-type|identifier}} Unieke identifier voor deze dataset. Moet voldoen aan [[#naamgeving]]. Conform \[DCAT § resource_identifier](https://www.w3.org/TR/vocab-dcat-3/#Property:resource_identifier).
type {{schema-type}} Type van dit bestand, in dit geval `"dataset"`.
status string Publicatiestatus van de dataset @@ -154,7 +155,8 @@ Naast bovenstaande verplichte attributen mag een [=dataset=] ook de volgende eig
description string zie [[#omschrijving]] [DCAT § Property:resource_description]([DCATURL]#Property:resource_description)
provenance string zie [[#provenance]]
reasonsNonPublic array({{nonPubReason}}) - een of meer gronden voor het niet openbaar maken van data obv uitzonderingen in Hoofdstuk 5 van de [[Woo]]. (Vanaf 1 mei 2022 verplicht wanneer {{dataset/auth}} niet gelijk is aan `"OPENBAAR"`) zie [[#autorisatie]] + een of meer gronden voor het niet openbaar maken van data obv uitzonderingen in Hoofdstuk 5 van de [[Woo]]. + Verplicht wanneer {{dataset/auth}} niet gelijk is aan `"OPENBAAR"`) zie [[#autorisatie]]
version {{version-string}} Het versie nummer van deze dataset.
homepage {{uri-type|uri}} Homepage van de dataset
crs @@ -179,7 +181,7 @@ Het is mogelijk op dataset niveau extra eigenschappen met meta-gegevens mee te g Dit kan indien gewenst worden gebruikt om automatisch een [DCAT] catalogus te genereren. De volgende velden zijn toegestaan: -
language string Taal van de dataset volgens [ISO 639-1](http://id.loc.gov/vocabulary/iso639-1.html) of [ISO 639-2](http://id.loc.gov/vocabulary/iso639-2.html) Conform \[DCAT § resource_language](https://www.w3.org/TR/vocab-dcat-2/#Property:resource_language) +
language string Taal van de dataset volgens [ISO 639-1](http://id.loc.gov/vocabulary/iso639-1.html) of [ISO 639-2](http://id.loc.gov/vocabulary/iso639-2.html) Conform \[DCAT § resource_language](https://www.w3.org/TR/vocab-dcat-3/#Property:resource_language)
dateCreated {{date-time}} Datum van publicatie. Conform \[DCAT § resource_release_date]([DCATURL]#Property:resource_release_date)
dateModified {{date-time}} Meest recente datum waarop de dataset is aangepast. Conform \[DCAT § resource_update_date]([DCATURL]#Property:resource_update_date)
accrualPeriodicity string Frequentie waarmee de dataset gepubliceerd wordt. Conform \[DCAT § dataset_frequency]([DCATURL]#Property:dataset_frequency) @@ -244,7 +246,7 @@ Het pad gezien vanuit de locatie van het dataset bestand **zou** dus de volgende Advisement: Van deze bestandsnaam en padstructuur moet niet worden afgeweken behalve als daar een zwaarwegende reden voor is. -
+[HIDELINESEXAMPLE] Voorbeeld van een dataset met twee tabel referenties. Een `locaties` tabel in `./locaties/v1.0.0.json`.
@@ -254,7 +256,7 @@ Advisement: Van deze bestandsnaam en padstructuur moet niet worden afgeweken beh highlight: json line-highlight: 12-25 -
+[END] Publisherreferenties {#publisher-refs} ---------------------------------------------------------- @@ -305,7 +307,7 @@ Een tabel binnen Amsterdam Schema is een JSON object met i Advisement: Let op: Zie [[#naamgeving]] voor de eisen waaraan {{tabel/id}} moet voldoen. -
+[HIDELINESEXAMPLE] Voorbeeld van een minimale tabel definitie. De {{tabel/title}} en {{tabel/description}} velden zijn niet verplicht, maar het is best practice ze toe te voegen.
@@ -313,7 +315,7 @@ Advisement: Let op: Zie [[#naamgeving]] voor de eisen waaraan {{tabel/id}} moet
         highlight: json
         line-highlight: 0-7,25-27
     
-
+[END] Optionele attributen {#tabel-optional-fields} @@ -323,11 +325,11 @@ Een [=tabel=] mag daarnaast de volgende attributen bezitten:
title string zie [[#omschrijving]] Default: Gelijk aan {{tabel/id}}.
description string zie [[#omschrijving]]
shortname string Verkorte unieke naam van de tabel. zie [[#naamgeving]] -
derivedFrom array De datasets waar deze view op gebaseerd is. e.g. `:`. Dit attribuut is enkel noodzakelijk wanneer de dataset een view is. +
derivedFrom array De datasets waar deze view op gebaseerd is. e.g. `:`. Dit attribuut is enkel noodzakelijk wanneer de dataset een view is.
auth string | array geautoriseerde [=scope|scope(s)=]. Default: gelijk aan waarde in dataset/{{dataset/auth}}, zie [[#autorisatie]].
reasonsNonPublic array({{nonPubReason}}) een of meer gronden voor het niet openbaar maken van data obv uitzonderingen in Hoofdstuk 5 van de [[Woo]]. - (Vanaf 1 mei 2022 verplicht wanneer de dataset openbaar is maar het {{tabel/auth}} atribuut van de tabel niet gelijk is aan "OPENBAAR") zie [[#autorisatie]] + Verplicht wanneer de dataset openbaar is maar het {{tabel/auth}} attribuut van de tabel niet gelijk is aan "OPENBAAR". zie [[#autorisatie]]
provenance string zie [[#provenance]]
dateCreated {{date-time}} Datum van publicatie.
dateModified {{date-time}} Meest recente datum waarop de tabel is aangepast. @@ -393,7 +395,7 @@ Daarnaast mag een [=schema=] object de volgende attributen bezitten: Issue: Het identifier veld moet string zijn. De array optie wordt binnenkort verwijderd. -
+[HIDELINESEXAMPLE] Voorbeeld van een schema. Het {{display}} veld zorgt ervoor dat niet de "id" de maar de "naam" van een persoon als samenvattende titel wordt gebruikt. @@ -402,7 +404,7 @@ Issue: Het identifier veld moet string zijn. De array optie wordt binnenkort ver highlight: json line-highlight: 7-25 -
+[END] Temporaliteit {#temporaliteit} @@ -484,33 +486,33 @@ Het versie nummer bestaat uit 3 getallen gescheiden door punten `MAJOR.MINOR.PAT Zie [[#table-refs]] voor het toevoegen van verschillende versies van een tabel. -
+[HIDELINESEXAMPLE] Voorbeeld aan versie "1.2.1" van de personen tabel wordt een nieuw optioneel veld toegevoegd en aan een bestaand {{enum}} veld wordt een optie toegevoegd. Dit zijn backwards compatible veranderingen dus het minor versie nummer wordt opgehoogd en de nieuwe versie wordt "1.3.0". De nieuwe tabel wordt in een nieuw bestand `personen/v1.3.0.json` geplaatst.
-
+ [COMPAREA] `personen/v1.2.1.json`
                 path: examples/datasets/bekendeAmsterdammers/personen/v1.2.1.json
                 highlight: json
                 line-highlight: 5,28,31-34
             
-
-
+ [END] + [COMPAREB] `personen/v1.3.0.json`
                 path: examples/datasets/bekendeAmsterdammers/personen/v1.3.0.json
                 highlight: json
                 line-highlight: 5,28, 31-35,37-44
             
-
+ [END]
-
+[END] -
+[HIDELINESEXAMPLE] Nu wordt in de tabel uit het vorige voorbeeld een veld hernoemd, krijgt een string veld een maximale lengte, wordt uit een {{enum}} veld een optie verwijderd en wordt een optioneel veld verplicht gemaakt. @@ -518,52 +520,52 @@ Zie [[#table-refs]] voor het toevoegen van verschillende versies van een tabel. De nieuwe tabel wordt in een nieuw bestand `personen/v2.0.0.json` geplaatst.
-
+ [COMPAREA] `personen/v1.3.0.json`
                 path: examples/datasets/bekendeAmsterdammers/personen/v1.3.0.json
                 highlight: json
                 line-highlight: 5,10-13,19-23,31-35
             
-
-
+ [END] + [COMPAREB] `personen/v2.0.0.json`
                 path: examples/datasets/bekendeAmsterdammers/personen/v2.0.0.json
                 highlight: json
                 line-highlight: 5,10-14,20-25,33-40
             
-
+ [END]
-
+[END] -
+[HIDELINESEXAMPLE] Voorbeeld in versie 2.0.0" wordt een aantal metadata velden aangepast. Deze veranderingen passen de data structuur niet aan dus het patch nummer wordt opgehoogd en de nieuwe versie wordt "2.0.1". De nieuwe tabel wordt in een nieuw bestand `personen/v2.0.1.json` geplaatst het oude bestand mag e.v.t. verwijderd worden.
-
+ [COMPAREA] `personen/v2.0.0.json`
                 path: examples/datasets/bekendeAmsterdammers/personen/v2.0.0.json
                 highlight: json
                 line-highlight: 5-6,15,31,44
             
-
-
+ [END] + [COMPAREB] `personen/v2.0.1.json`
                 path: examples/datasets/bekendeAmsterdammers/personen/v2.0.1.json
                 highlight: json
                 line-highlight: 5-6,15,31,44
             
-
+ [END]
-
+[END] -
+[HIDELINESEXAMPLE] Om de nieuwe versie van de tabel aan de [=dataset=] toe te voegen, moet de [=tabel referentie=] in de dataset ook aangepast worden. De default versie van de tabel is nu "2.0.1". @@ -578,7 +580,7 @@ Zie [[#table-refs]] voor het toevoegen van verschillende versies van een tabel. line-highlight: 1,13-20,26
- +[END] Note: Deze semantic versioning standaard is geinspireerd door [[SCHEMVER inline]] wat weer is gebaseerd op [[SEMVER inline]]. @@ -646,9 +648,12 @@ Een [=veld=] definitie mag naast het [[#veld-mandatory-fields|verplichte attribu
auth string | array geautoriseerde [=scope|scope(s)=]. Default: gelijk aan waarde in tabel/{{tabel/auth}}, zie [[#autorisatie]]. Niet toegestaan in velden waarnaar wordt verwezen in {{schema/identifier}} of {{schema/display}}. +
filterAuth string | array + geautoriseerde [=scope|scope(s)=] die dit veld in zoekvragen mogen gebruiken. + De gebruiker moet daarnaast leestoegang hebben tot het veld via {{veld/auth}} of [[#profielen]].
reasonsNonPublic array({{nonPubReason}}) een of meer gronden voor het niet openbaar maken van data obv uitzonderingen in Hoofdstuk 5 van de [[Woo]]. - (Vanaf 1 mei 2022 verplicht wanneer de tabel openbaar is maar het {{veld/auth}} atribuut van het veld niet gelijk is aan "OPENBAAR") zie [[#autorisatie]] + Verplicht wanneer de tabel openbaar is maar het {{veld/auth}} attribuut van het veld niet gelijk is aan "OPENBAAR". zie [[#autorisatie]]
provenance string zie [[#provenance]]
shortname string zie [[#naamgeving]]
unit string | object De eenheid van de waarden in dit veld. zie [[#units]] @@ -1024,7 +1029,7 @@ Note: Elk veld is nullable tenzij het als `required` property is opgegeven, zie
Voorbeeld van een geometrie veld. -
+        
             path: examples/datasets/bekendeAmsterdammers/pleinen/v1.0.0.json
             highlight: json
             show: 28-32
@@ -1044,7 +1049,7 @@ Note: Elk veld is nullable tenzij het als `required` property is opgegeven, zie
     Note: Als een tabel een geometrie veld bevat, moet op dataset niveau het coordinaat
     referentie systeem worden aangegeven in het {{dataset/crs}} attribuut.
 
-    
+ [HIDELINESEXAMPLE] Voorbeeld van een tabel met meerdere geometrie velden. Het veld `"locatie"` is hier als primaire geometrie aangegeven in "{{mainGeometry}}".
@@ -1052,7 +1057,7 @@ Note: Elk veld is nullable tenzij het als `required` property is opgegeven, zie
             highlight: json
             line-highlight: 0-7,28-37
         
-
+ [END] ### object ### {#data-types-object} @@ -1394,6 +1399,22 @@ Publisher {#publishers} Een [=publisher=] definitie bevat een publisher object. Deze word onder andere gebruikt voor billing en tagging van resources die via het amsterdam schema worden aangevraagd. +
+ Voorbeeld van een publisher object. +
+    {
+      "id": "NOBODY",
+      "type": "publisher"
+      "name": "Datateam Nobody",
+      "shortname": "nobody",
+      "tags": {
+        "costcenter": "00000000.0000"
+        "team": "nobody",
+      },
+    }
+    
+
+ Verplichte attributen {#publisher-mandatory-fields} --------------------------------------------------------- Een publisher binnen Amsterdam Schema is een JSON object met in ieder geval de volgende attributen. @@ -1414,61 +1435,6 @@ Een publisher binnen Amsterdam Schema is een JSON object m
- - -Generieke attributen {#gen-attributes} -=================================================== -Deze attributen kunnen op elk niveau bestaan. - -Omschrijving {#omschrijving} ---------------------------------------------------- - -Op elk niveau kan een semantische omschrijving toegevoegd worden d.m.v. de attributen `title` en `description`. - -
title (string) Naam van dit item. -
description (string) Beschrijving van dit item, vrije tekst. Mag escape characters zoals newlines bevaten. -
- -De `title` kan bijvoorbeeld in frontendapplicaties worden gebruikt als label voor een invoerveld. -Het `description` veld is bedoeld voor bijvoorbeeld contextmenu's (mouseover) bij een invoerveld of voor informatievelden. - -
- `title` en `description` van een [=Dataset=]. -
-        path: examples/datasets/bekendeAmsterdammers/dataset.json
-        highlight: json
-        show: 4-5
-    
-
- -
- `title` en `description` van een [=Tabel=]. -
-        path: examples/datasets/bekendeAmsterdammers/locaties/v1.0.0.json
-        highlight: json
-        show: 4-5
-    
-
- -
- `title` en `description` in een [=Veld=]. -
-        path: examples/datasets/bekendeAmsterdammers/locaties/v1.0.0.json
-        highlight: json
-        show: 44-45
-    
-
- -Note: Als een [=veld=] geen {{veld/title}}-attibuut heeft, wordt de naam van het veld gebruikt. - Autorisatie {#autorisatie} ----------------------------------------------------- +====================================================== + +Confirm the [[Woo|Wet Open Overheid]] (Woo) zijn gegevens standaard openbaar. +Er zijn twee mechanismen om de toegang te beperken en authorisatie in te regelen: + +1. De `"auth"`-attributen in het Amsterdam-schema beperken de toegang. zie [[#auth]]. +2. De profielen geven grunulair toegang op basis van een gebruikersprofiel. zie [[#profielen]]. + +Beide mechanismen gebruiken doorvoor scopes om te koppelen met gebruikersgroepen in de bestaande architectuur. +Deze scopes worden bijvoorbeeld verkregen vanuit een bestaande OAuth-flow die een JSON Web Token (JWT) aanbiedt. + +Scopes {#scopes} +--------------- + +Een scope is een groep gebruikers (medewerkers) met gedeelde rechten. Een gebruiker kan meerdere scopes hebben. +Een scope is een string bestaande uit een reeks lower of uppercase letters eventueel gescheiden door een forward slash (`/`), +bijvoorbeeld `"BRP/RO"`. + +Auth-attributen {#auth} +--------------- Op zowel [=dataset=], [=tabel=] als [=veld=] niveau kan een `"auth"`-attribuut worden meegegeven om toegang tot een entitieit te beperken.
auth string | array geautoriseerde [=scope|scope(s)=]. +
reasonsNonPublic array({{nonPubReason}}) + een of meer gronden voor het niet openbaar maken van data obv uitzonderingen in Hoofdstuk 5 van de [[Woo]]. + Verplicht op het eerste niveau waar de `"auth"` niet gelijk is aan `"OPENBAAR"`.
Het `"auth"`-attribuut bevat één of meer scopes, die leesrechten hebben op de entiteit waarop `"auth"` is gedefinieerd. -Een scope is een groep gebruikers (medewerkers) met gedeelde rechten. Een gebruiker kan meerdere scopes hebben. -Een scope is een string bestaande uit een reeks lower of uppercase letters eventueel gescheiden door een forward slash (`/`). +### Meerdere scopes Als het `"auth"`-attribuut een array bevat is elke scope in de array afzonderlijk geautoriseerd. Dus een gebruiker heeft slechts één van de [=scopes=] in een array nodig voor toegang.
- Voorbeeld van een "auth" array op een veld. + Voorbeeld van een `"auth"` array op een veld. Zowel scope `"LEVEL/X"` als scope `"LEVEL/Y"` toegang tot het veld. Een gebruiker hoeft niet beide scopes te bezitten.
         "aantalDuivenOpDeDam": {
@@ -1507,15 +1494,18 @@ Dus een gebruiker heeft slechts één van de [=scopes=] in een array nodig voor
     
-Op dataset niveau is het {{dataset/auth}} attribuut verplicht. Bij een openbare [=dataset=] krijgt het {{dataset/auth}} attribuut -de waarde `"OPENBAAR"`. +### Meerdere niveau's + +Op dataset niveau is het {{dataset/auth}} attribuut verplicht. +Bij een openbare [=dataset=] krijgt het {{dataset/auth}} attribuut de waarde `"OPENBAAR"`. -Als een [=tabel=] geen `"auth"` attribuut heeft is de scope van de [=tabel=] gelijk aan die van de dataset. +Als een [=tabel=] geen `"auth"` attribuut heeft, is de scope van de [=tabel=] gelijk aan die van de dataset. -Als een [=veld=] geen `"auth"` attribuut heeft is de scope van het [=veld=] gelijk aan die van de tabel. +Als een [=veld=] geen `"auth"` attribuut heeft, is de scope van het [=veld=] gelijk aan die van de tabel. +Om toegang tot een veld te krijgen, moet de gebruiker op alle niveau's toegang krijgen; op veld-, tabel- en datasetniveau. -Op het eerste niveau waarop data niet openbaar wordt gemaakt moet met ingang van 1 mei 2022 een '"reasonsNonPublic"' attribuut bestaan. +Op het eerste niveau waarop data niet openbaar wordt gemaakt moet een `"reasonsNonPublic"`-attribuut bestaan. Dus als een dataset openbaar is, maar deze een tabel bevat waarop een {{tabel/auth}} attribuut met een andere waarde dan "OPENBAAR" bestaat. Moet in de betreffende tabel of tabellen een {{tabel/reasonsNonPublic}} attribuut bestaan. @@ -1523,70 +1513,263 @@ Moet in de betreffende tabel of tabellen een {{tabel/reasonsNonPublic}} attribuu In dit voorbeeld vindt autorisatie plaats op 3 niveaus. Scope `"LEVEL/A"` heeft dataset level autorisatie op gebieden, scope `"LEVEL/B"` heeft tabel level autorisatie op bouwblokken en scope `"LEVEL/C"` heeft autorisatie op veld beginGeldigheid. - * Een user met scope `"LEVEL/A"` mag alles uit de dataset gebieden zien, behalve tabel bouwblokken. - * Een user met scope `"LEVEL/B"` mag alle velden van tabel bouwblokken zien, behalve beginGeldigheid. - * Een user met scope `"LEVEL/C"` mag veld beginGeldigheid zien. + * Een user met scope `"LEVEL/A"` mag alles uit de dataset `gebieden` zien, behalve tabel `bouwblokken`. + * Een user met scope `"LEVEL/A"` en `"LEVEL/B"` mag alle velden van tabel `bouwblokken` zien, behalve `beginGeldigheid`. + * Een user met scope `"LEVEL/A"` en `"LEVEL/B"` en `"LEVEL/C"` mag het veld `beginGeldigheid` ook zien. -
+    
         {
             "type": "dataset",
             "id": "gebieden",
             "title": "gebieden",
             "auth": "LEVEL/A",
+            "reasonsNonPublic": [
+                "5.1 1b: Gevaar voor staatsveiligheid"
+            ],
             "status": "beschikbaar",
             "crs": "EPSG:28992",
             "tables": [
                 {
-                "id": "bouwblokken",
-                "mainGeometry": "geometrie",
-                "type": "table",
-                "version": "1.0.0",
-                "auth": "LEVEL/B",
-                "schema": {
-                    "$id": "https://github.com/Amsterdam/schemas/gebieden/bouwblokken.json",
-                    "$schema": "http://json-schema.org/draft-07/schema#",
-                    "type": "object",
-                    "additionalProperties": false,
-                    "identifier": ["id"],
-                    "required": ["schema", "id"],
-                    "display": "id",
-                    "properties": {
+                    "id": "bouwblokken",
+                    "mainGeometry": "geometrie",
+                    "type": "table",
+                    "version": "1.0.0",
+                    "auth": "LEVEL/B",
                     "schema": {
-                        "$ref": "https://schemas.data.amsterdam.nl/schema@v1.1.1#/definitions/schema"
-                    },
-                    "id": {
-                        "type": "string",
-                        "description": "Unieke identificatie voor dit object, inclusief volgnummer"
-                    },
-                    "beginGeldigheid": {
-                        "type": "string",
-                        "format": "date",
-                        "title": "Begin geldigheid",
-                        "description": "De datum waarop het object is gecreëerd.",
-                        "auth": "LEVEL/C"
-                    },
-                    "eindGeldigheid": {
-                        "type": "string",
-                        "format": "date",
-                        "title": "Eind geldigheid",
-                        "description": "De datum waarop het object is komen te vervallen.",
-                        "provenance": "eindgeldigheid"
-                    },
-                    "ligtInBuurt": {
-                        "type": "string",
-                        "relation": "gebieden:buurten",
-                        "provenance": "ligtinbuurt",
-                        "title": "Ligt in buurt",
-                        "description": "De buurt waar het bouwblok in ligt."
+                        "$id": "https://github.com/Amsterdam/schemas/gebieden/bouwblokken.json",
+                        "$schema": "http://json-schema.org/draft-07/schema#",
+                        "type": "object",
+                        "additionalProperties": false,
+                        "identifier": ["id"],
+                        "required": ["schema", "id"],
+                        "display": "id",
+                        "properties": {
+                            "schema": {
+                                "$ref": "https://schemas.data.amsterdam.nl/schema@v1.1.1#/definitions/schema"
+                            },
+                            "id": {
+                                "type": "string",
+                                "description": "Unieke identificatie voor dit object, inclusief volgnummer"
+                            },
+                            "beginGeldigheid": {
+                                "type": "string",
+                                "format": "date",
+                                "title": "Begin geldigheid",
+                                "description": "De datum waarop het object is gecreëerd.",
+                                "auth": "LEVEL/C"
+                            },
+                            "eindGeldigheid": {
+                                "type": "string",
+                                "format": "date",
+                                "title": "Eind geldigheid",
+                                "description": "De datum waarop het object is komen te vervallen.",
+                                "provenance": "eindgeldigheid"
+                            },
+                            "ligtInBuurt": {
+                                "type": "string",
+                                "relation": "gebieden:buurten",
+                                "provenance": "ligtinbuurt",
+                                "title": "Ligt in buurt",
+                                "description": "De buurt waar het bouwblok in ligt."
+                            }
+                        }
                     }
+                }
+            ]
+        }
+    
+ + +Profielen {#profielen} +--------------------------------------------------- + +Waar een `"auth"`-attribuut de toegang ontzegt, geeft een profiel gralunair toegang onder voorwaarden. +Een profiel wordt alleen toegepast als er geen authorisatie verkregen is via de `"auth"`-attributen. + +
+ Voorbeeld van een profiel, wat het functieprofiel "parkeerwachter" toegang geeft tot "parkeervakken". +
+        {
+            "id": "parkeerwachter",
+            "type": "profile",
+            "name": "Parkeerwacht toegang",
+            "scopes": ["FP/PARKEERWACHTER"],
+            "datasets": {
+                "parkeervakken": {
+                    "tables": {
+                        "parkeervakken": {
+                            "permissions": "read",
+                        }
                     }
                 }
+            }
+        }
+    
+
+ +Een profiel kan toegang geven op dataset-, tabel- en veldniveau. +Daarbij kan ook een zoekvraag (`"mandatoryFilterSets"`) verplicht zijn om toegang te krijgen. + +
+ Voorbeeld van een profiel wat slechts toegang geeft tot een paar velden, en een zoekvraag verplicht. +
+        {
+            "id": "parkeerwachter",
+            "type": "profile",
+            "name": "Parkeerwacht toegang beperkt",
+            "scopes": ["FP/PARKEERWACHTER-B"],
+            "datasets": {
+                "parkeervakken": {
+                    "tables": {
+                        "parkeervakken": {
+                            "fields": {
+                                "type": "read",
+                                "grootte": "read",
+                                "opmerking": "letters:10",
+                            },
+                            "mandatoryFilterSets": [
+                                ["id", "volgnummer"],
+                                ["buurtcode", "type"],
+                            ],
+                        }
+                    }
                 }
-            ]
+            }
         }
     
+Verplichte attributen {#publisher-mandatory-fields} +--------------------------------------------------------- +Een profiel binnen Amsterdam Schema is een JSON object met in ieder geval de volgende attributen. + + +
id {{id-type|identifier}} Identifier van de publisher. Moet globaal uniek zijn en gelijk aan de file waarin het publisher object is opgeslagen. +
type constante Type van dit bestand, in dit geval `"profile"`. +
name string Naam van het gebruikersprofiel. +
scopes {{resource-identifier}} De geautoriseerde [=scope|scope(s)=] die de gebruiker moet hebben om dit profiel te activeren. +
datasets object Mapping van alle datasets, waarbij iedere sleutel verwijst naar het `id` van een [=dataset=]. +
+ +Iedere *dataset* in een profiel kan de volgende waarden bevatten: + + +
permissions string De waarde `"read"` voor leestoegang. +
tables object Een mapping van tabellen, waarbij iedere sleutel verwijst naar het `id` van een [=tabel=]. +
+ +Iedere *tabel* in een profiel kan over de volgende waarden bevatten: + + +
permissions string De waarde `"read"` voor leestoegang. +
fields object Een mapping van velden, waarbij iedere sleutel verwijst naar het `id` van een [=veld=]. +
mandatoryFilterSets array Een array van tuples met verplichte zoekvelden. +
+ +Ieder *veld* in een profiel kan over de volgende waarden bevatten: + + +
permissions string Het toegangsniveau tot het veld. + Mogelijke waarden: `"read"` voor leestoegang, + `"letters:##"` geeft toegang tot de eerste aantal karakters van het veld. +
+ +### Verplichte zoekvragen + +De mandatoryFilterSets verplicht het gebruik van een zoekvraag om de tabel te raadplegen. +De waarde bevat een lijst van mogelijke toegestane vragen. +Operatoren zijn alleen toegestaan als deze letterlijk opgegeven worden, bijvoorbeeld `"regimes.aantal[gte]"`. + +
+ Voorbeeld van verplicht zoeken op id+volgnummer óf buurtcode+type. + In een REST API betekend dit bijvoorbeeld dat de resource alleen inzichtelijk is + met de zoekvraag `?id=...&volgnummer=...` óf `?buurtcode=...&type=...`. + +
+        "mandatoryFilterSets": [
+            ["id", "volgnummer"],
+            ["buurtcode", "type"]
+        ]
+    
+
+ +### Toegangsregels + +Een gebruiker heeft toegang tot een [=dataset=] indien deze: + +* Toegang krijgt via `"auth"` regel. +* Of een profiel heeft met `"permissions": "read"` op dataset niveau. + +Een gebruiker heeft toegang tot een [=tabel=] indien deze: + +* Toegang krijgt via `"auth"` regels op de tabel én dataset. +* Of volledige toegang heeft tot de dataset door middel van een profiel met `"permissions": "read"` op dataset niveau. +* Of een profiel heeft met `"permissions": "read"` op tabel niveau, én voldoet aan de [=mandatoryFilterSets=] indien deze aanwezig zijn. + Toegang tot het openen van dataset wordt daarmee impliciet verkregen. + +Een gebruiker heeft toegang tot een [=veld=] indien deze: + +* Toegang krijgt via `"auth"` regels op de dataset, tabel én het veld. +* Of volledige toegang heeft tot de dataset door middel van een profiel met `"permissions": "read"` op dataset niveau. +* Of volledige toegang heeft tot een tabel door middel van een profiel heeft met `"permissions": "read"` op het tabel niveau, waarbij de de [=mandatoryFilterSets=] voldaan zijn indien deze aanwezig zijn. +* Of een profiel heeft met `"permissions"` op het veld niveau, én voldoet aan de [=mandatoryFilterSets=] vam de tabel indien deze aanwezig zijn. + Toegang tot het openen van de dataset en tabel wordt daarmee impliciet verkregen. + + + +Generieke attributen {#gen-attributes} +=================================================== +Deze attributen kunnen op elk niveau bestaan. + +Omschrijving {#omschrijving} +--------------------------------------------------- + +Op elk niveau kan een semantische omschrijving toegevoegd worden d.m.v. de attributen `title` en `description`. + +
title (string) Naam van dit item. +
description (string) Beschrijving van dit item, vrije tekst. Mag escape characters zoals newlines bevaten. +
+ +De `title` kan bijvoorbeeld in frontendapplicaties worden gebruikt als label voor een invoerveld. +Het `description` veld is bedoeld voor bijvoorbeeld contextmenu's (mouseover) bij een invoerveld of voor informatievelden. + +
+ `title` en `description` van een [=Dataset=]. +
+        path: examples/datasets/bekendeAmsterdammers/dataset.json
+        highlight: json
+        show: 4-5
+    
+
+ +
+ `title` en `description` van een [=Tabel=]. +
+        path: examples/datasets/bekendeAmsterdammers/locaties/v1.0.0.json
+        highlight: json
+        show: 4-5
+    
+
+ +
+ `title` en `description` in een [=Veld=]. +
+        path: examples/datasets/bekendeAmsterdammers/locaties/v1.0.0.json
+        highlight: json
+        show: 44-45
+    
+
+ +Note: Als een [=veld=] geen {{veld/title}}-attibuut heeft, wordt de naam van het veld gebruikt. + Provenance {#provenance} ------------------------------------------------------ @@ -1667,23 +1850,23 @@ Attribuuttypen {#attr-types} Kijk voor de exacte definitie van een uitzondering in hoofdstuk 5 van de Woo.
Opties - * "5.1 1a: Gevaar voor eenheid van de Kroon", - * "5.1 1b: Gevaar voor staatsveiligheid", - * "5.1 1c: Vertrouwelijke of concurrentiegevoelige bedrijfs- en fabricagegegevens", - * "5.1 1d: Bevat persoonsgegevens", - * "5.1 1e: Bevat nationaal identificatienummer", - * "5.1 2a: Zwaarwegend belang: internationale betrekkingen", - * "5.1 2b: Zwaarwegende economische of financiële belangen van publiekrechtelijke lichamen (bevat geen mileu-informatie)", - * "5.1 2b: Zwaarwegende economische of financiële belangen van publiekrechtelijke lichamen (bevat mileu-informatie met betrekking op handelingen met een vertrouwelijk karakter)", - * "5.1 2c: Zwaarwegend belang: opsporing en vervolging van strafbare feiten", - * "5.1 2d: Zwaarwegend belang: inspectie, controle en toezicht door bestuursorganen", - * "5.1 2e: Zwaarwegend belang: eerbiediging van de persoonlijke levenssfeer", - * "5.1 2f: Zwaarwegend belang: vertrouwelijke of concurrentiegevoelige bedrijfs- en fabricagegegevens", - * "5.1 2g: Zwaarwegend belang: bescherming van het milieu waarop deze informatie betrekking heeft", - * "5.1 2h: Zwaarwegend belang: beveiliging van personen en bedrijven en het voorkomen van sabotage", - * "5.1 2i: Zwaarwegend belang: het goed functioneren van de Staat, andere publiekrechtelijke lichamen of bestuursorganen", - * "5.2 1: Bevat persoonlijke beleidsopvattingen (bevat geen milieu-informatie)", - * "5.2 4: Zwaarwegend belang: persoonlijke beleidsopvattingen (bevat milieu-informatie)", + * "5.1 1a: Gevaar voor eenheid van de Kroon" + * "5.1 1b: Gevaar voor staatsveiligheid" + * "5.1 1c: Vertrouwelijke of concurrentiegevoelige bedrijfs- en fabricagegegevens" + * "5.1 1d: Bevat persoonsgegevens" + * "5.1 1e: Bevat nationaal identificatienummer" + * "5.1 2a: Zwaarwegend belang: internationale betrekkingen" + * "5.1 2b: Zwaarwegende economische of financiële belangen van publiekrechtelijke lichamen (bevat geen mileu-informatie)" + * "5.1 2b: Zwaarwegende economische of financiële belangen van publiekrechtelijke lichamen (bevat mileu-informatie met betrekking op handelingen met een vertrouwelijk karakter)" + * "5.1 2c: Zwaarwegend belang: opsporing en vervolging van strafbare feiten" + * "5.1 2d: Zwaarwegend belang: inspectie, controle en toezicht door bestuursorganen" + * "5.1 2e: Zwaarwegend belang: eerbiediging van de persoonlijke levenssfeer" + * "5.1 2f: Zwaarwegend belang: vertrouwelijke of concurrentiegevoelige bedrijfs- en fabricagegegevens" + * "5.1 2g: Zwaarwegend belang: bescherming van het milieu waarop deze informatie betrekking heeft" + * "5.1 2h: Zwaarwegend belang: beveiliging van personen en bedrijven en het voorkomen van sabotage" + * "5.1 2i: Zwaarwegend belang: het goed functioneren van de Staat, andere publiekrechtelijke lichamen of bestuursorganen" + * "5.2 1: Bevat persoonlijke beleidsopvattingen (bevat geen milieu-informatie)" + * "5.2 4: Zwaarwegend belang: persoonlijke beleidsopvattingen (bevat milieu-informatie)" * "nader te bepalen"
De laatste optie ("nader te bepalen") is niet toegestaan wanneer {{dataset/status}}=`"beschikbaar"`. @@ -1718,14 +1901,22 @@ waarschuwingen of uitleg verschijnen dus niet in dit overzicht. -[2.2.0] dataclass atribuut toegevoegd (2023-01-12) {#lastchange} +[2.3.0] filterAuth attribuut toegevoegd (2025-01-12) {#lastchange} +------------------------------------------------ +> **Doelstelling**
+ Betere afscherming van velden bij speciale zoekacties. + +* Het {{veld/filterAuth}} attribuut is toegevoegd. +* De [[#profielen]] zijn gedocumenteerd. + +[2.2.0] dataclass attribuut toegevoegd (2023-01-12) {#20230112} ------------------------------------------------ > **Doelstelling**
- UItzonderingsgronden WOO in lijn gebracht met versie van WOO die nu van kracht is. + Uitzonderingsgronden WOO in lijn gebracht met versie van WOO die nu van kracht is. * Het {{tabel/dataclass}} attribuut is toegevoegd. -[2.1.5] dataclass atribuut toegevoegd (2023-01-10) {#20230110} +[2.1.5] dataclass attribuut toegevoegd (2023-01-10) {#20230110} ------------------------------------------------ > **Doelstelling**
Beschrijving en relatering van ongestructureerde data mogelijk maken. @@ -1857,10 +2048,10 @@ waarschuwingen of uitleg verschijnen dus niet in dit overzicht. float: right; background-repeat: no-repeat; background-size: contain; - background-image: url("[LOGO]"); + background-image: url("https://api.data.amsterdam.nl/api/gemeente_Amsterdam_logo.svg"); /* Using [LOGO] here fails on Bikeshed 4 */ } #toc::before { - content: "[TITLE]"; + content: "Amsterdam Schema Specificatie"; /* Using [TITLE] here fails on Bikeshed 4 */ background: rgb(0, 90, 156); color: var(--tocsidebar-bg); font-size: 18px; diff --git a/docs/ams-schema-spec.html b/docs/ams-schema-spec.html index d8d52a434..6cd0184a4 100644 --- a/docs/ams-schema-spec.html +++ b/docs/ams-schema-spec.html @@ -1238,14 +1238,15 @@ grid-column: 2; width: auto; margin-right: 1rem; + border-bottom: 3px solid transparent; + margin-bottom: -3px; } #toc .content:hover, #toc .content:focus { background: rgba(75%, 75%, 75%, .25); background: var(--a-hover-bg); - border-bottom: 3px solid #054572; - border-bottom: 3px solid var(--toclink-underline); - margin-bottom: -3px; + border-bottom-color: #054572; + border-bottom-color: var(--toclink-underline); } #toc li li li .content { margin-left: 1rem; @@ -1487,10 +1488,11 @@ } } - + - + + - - + - - - - - - + - -

Amsterdam Schema Specificatie

-

Living Standard,

+

Living Standard,

This version: @@ -2264,8 +2376,7 @@

Abstract

Het Amsterdam Schema is een op JSON Schema’s gebaseerde standaard (ondersteund door het Amsterdam Meta Schema) - - om datasets in een machineleesbaar format te beschrijven en op generieke wijze te verwerken en te ontsluiten.

+om datasets in een machineleesbaar format te beschrijven en op generieke wijze te verwerken en te ontsluiten.

-

De meest recente aanpassing aan deze specificatie is:
§ 9.1 [2.2.0] dataclass atribuut toegevoegd (2023-01-12)

+

De meest recente aanpassing aan deze specificatie is:
§ 10.1 [2.3.0] filterAuth attribuut toegevoegd (2025-01-12)

1. Introductie

Doelstelling
Alle data van gemeente Amsterdam binnen één machine verwerkbaar universeel format beschrijven, @@ -2358,7 +2477,7 @@

1.

Dit document legt uit hoe een dataset volgens de Amsterdam Schema-standaard beschreven wordt.

- Neem bijvoorbeeld een dataset over monumenten.
Van deze dataset kan worden vastgelegd: + Neem bijvoorbeeld een dataset over monumenten.
Van deze dataset kan worden vastgelegd:
  • dat het de object typen standbeelden en gebouwen heeft,

    @@ -2371,7 +2490,7 @@

    1. Note: Een actueel overzicht van gepubliceerde Amsterdam Schema’s is te vinden op GitHub.

    Note: Amsterdam Schema is gebaseerd op JSON Schema’s.

    1.1. Overzicht

    - Een dataset wordt beschreven in één of meer JSON bestanden. + Een dataset wordt beschreven in één of meer JSON bestanden.

    Binnen deze bestanden bestaan de volgende niveaus:

    dataset @@ -2387,32 +2506,32 @@

    Beschrijft de eigenschappen van rijen in een tabel, zoals de naam en het datatype van een eigenschap. Vergelijkbaar met de kolommen van een database.

    -

    Note: Binnen Amsterdam Schema wordt de Data Catalog Vocabulary (hierna DCAT) standaard gebruikt. DCAT is een naamgevingsstandaard voor het publiceren van datacatalogi op het web.

    +

    Note: Binnen Amsterdam Schema wordt de Data Catalog Vocabulary (hierna DCAT) standaard gebruikt. DCAT is een naamgevingsstandaard voor het publiceren van datacatalogi op het web.

    2. Dataset

    - Met een dataset wordt een dataset zoals gedefinieerd in DCAT bedoeld. DCAT definieert een dataset als volgt: + Met een dataset wordt een dataset zoals gedefinieerd in DCAT bedoeld. DCAT definieert een dataset als volgt:

    Dataset A collection of data, published or curated by a single agent or identifiable community. The notion of dataset in DCAT is broad and inclusive, with the intention of accommodating resource types arising from all communities. Data comes in many forms including numbers, text, pixels, imagery, sound and other multi-media, and potentially other types, -any of which might be collected into a dataset. (From Data Catalog Vocabulary (DCAT) - Version 2 § dcat-scope)

    +any of which might be collected into a dataset. (From Data Catalog Vocabulary (DCAT) - Version 3 § dcat-scope)

    2.1. Verplichte attributen

    - Een dataset binnen Amsterdam Schema bestaat uit een JSON bestand met in ieder geval de volgende velden: + Een dataset binnen Amsterdam Schema bestaat uit een JSON bestand met in ieder geval de volgende velden: - - - - - - - - -
    id - identifier - Unieke identifier voor deze dataset. Moet voldoen aan § 5 Naamgeving. Conform DCAT § resource_identifier. + id + identifier + Unieke identifier voor deze dataset. Moet voldoen aan § 5 Naamgeving. Conform DCAT § resource_identifier.
    type - schema-type - Type van dit bestand, in dit geval "dataset". + type + schema-type + Type van dit bestand, in dit geval "dataset".
    status - string + status + string - Publicatiestatus van de dataset + Publicatiestatus van de dataset
    Toegestane waarden
      @@ -2423,30 +2542,30 @@

    auth - string | array - geautoriseerde scope(s). Voor openbare data: "OPENBAAR". zie § 7.2 Autorisatie + auth + string | array + geautoriseerde scope(s). Voor openbare data: "OPENBAAR". zie § 7 Autorisatie
    authorizationGrantor - string - E-mailadres van de afdeling verantwoordelijk voor autorisatie op deze dataset. Dit is meestal de bronhouder. Aan dit adres worden authorisatie verzoeken gericht. + authorizationGrantor + string + E-mailadres van de afdeling verantwoordelijk voor autorisatie op deze dataset. Dit is meestal de bronhouder. Aan dit adres worden authorisatie verzoeken gericht.
    creator - string - Team, afdeling of organisatie die de data produceert, meestal de bronhouder. Wanneer data van meerdere bronhouders wordt gecomineerd, wordt hier de opdrachtgever bedoelt. + creator + string + Team, afdeling of organisatie die de data produceert, meestal de bronhouder. Wanneer data van meerdere bronhouders wordt gecomineerd, wordt hier de opdrachtgever bedoelt.
    owner - string - Juridisch eigenaar van de data. Bijvoorbeeld "Gemeente Amsterdam, Directie Wonen" of "Centraal Bureau voor de Statistiek" Default: "Gemeente Amsterdam" + owner + string + Juridisch eigenaar van de data. Bijvoorbeeld "Gemeente Amsterdam, Directie Wonen" of "Centraal Bureau voor de Statistiek" Default: "Gemeente Amsterdam"
    publisher - string | publisher-ref - Het team verantwoordelijk voor het technisch ontsluiten van de data. Meestal het datateam. Conform DCAT § resource_publisher + publisher + string | publisher-ref + Het team verantwoordelijk voor het technisch ontsluiten van de data. Meestal het datateam. Conform DCAT § resource_publisher
    tables - array + tables + array - Tabellen in deze dataset. Moet minimaal 1 element bevatten. + Tabellen in deze dataset. Moet minimaal 1 element bevatten.
    Valide elementen
      @@ -2462,7 +2581,7 @@

      Note: Als een dataset nog niet klaar is voor publicatie, zet de status dan op "niet_beschikbaar". Zo wordt de dataset nog niet zichtbaar in doelsystemen.

      Een minimale dataset definitie. De 'title' en 'description' velden zijn niet verplicht, - maar het is best practice ze toe te voegen. + maar het is best practice ze toe te voegen.
      {
         "id": "bekendeAmsterdammers",
         "type": "dataset",
      @@ -2484,47 +2603,46 @@ 

      }

      -

      Best Practice Zet bij datasets met meer dan één tabel alle tabellen in hun een eigen bestand en gebruik tabel referenties. Dit komt de leesbaarheid ten goede en maakt versioning mogelijk.
      -

      2.2. Optionele attributen

      - Naast bovenstaande verplichte attributen mag een dataset ook de volgende eigenschappen bevatten. + Naast bovenstaande verplichte attributen mag een dataset ook de volgende eigenschappen bevatten. - - - - - - - -
      contactPoint - contact - Contactgegevens van de persoon of afdeling verantwoordelijk voor eerstelijns ondersteuning bij deze dataset. Hier kunnen mensen met vragen over de dataset terecht. (Deze gegevens worden publiek zichtbaar.) Wanneer dit veld niet is gegeven, is impliciet de default waarde van toepassing. Default: {"name": "Datapunt", "email": "datapunt@amsterdam.nl"} + contactPoint + contact + Contactgegevens van de persoon of afdeling verantwoordelijk voor eerstelijns ondersteuning bij deze dataset. Hier kunnen mensen met vragen over de dataset terecht. (Deze gegevens worden publiek zichtbaar.) Wanneer dit veld niet is gegeven, is impliciet de default waarde van toepassing. Default: {"name": "Datapunt", "email": "datapunt@amsterdam.nl"}
      title - string - zie § 7.1 Omschrijving DCAT § Property:resource_title + title + string + zie § 8.1 Omschrijving DCAT § Property:resource_title
      description - string - zie § 7.1 Omschrijving DCAT § Property:resource_description + description + string + zie § 8.1 Omschrijving DCAT § Property:resource_description
      provenance - string - zie § 7.3 Provenance + provenance + string + zie § 8.2 Provenance
      reasonsNonPublic - array(nonPubReason) - een of meer gronden voor het niet openbaar maken van data obv uitzonderingen in Hoofdstuk 5 van de [Woo]. (Vanaf 1 mei 2022 verplicht wanneer auth niet gelijk is aan "OPENBAAR") zie § 7.2 Autorisatie + reasonsNonPublic + array(nonPubReason) + een of meer gronden voor het niet openbaar maken van data obv uitzonderingen in Hoofdstuk 5 van de [Woo]. + Verplicht wanneer auth niet gelijk is aan "OPENBAAR") zie § 7 Autorisatie
      version - version-string - Het versie nummer van deze dataset. + version + version-string + Het versie nummer van deze dataset.
      homepage - uri - Homepage van de dataset + homepage + uri + Homepage van de dataset
      crs - enum(string) + crs + enum(string) - Coordinate reference System + Coordinate reference System
      Opties
        @@ -2537,108 +2655,106 @@

      Dit veld is verplicht voor datasets waarvan één of meerdere tabellen één of meer § 4.3.6 geometrie velden bevatten en waarvan de crs niet al in de tabel of veld gedefinieerd is. - Zie SDOW best practices § CRS-background voor meer informatie. + Zie SDOW best practices § CRS-background voor meer informatie.
      -

      Best Practice Voeg altijd op zijn minst een title en description toe.
      -

      2.2.1. DCAT velden

      Het is mogelijk op dataset niveau extra eigenschappen met meta-gegevens mee te geven. -Dit kan indien gewenst worden gebruikt om automatisch een DCAT catalogus te genereren. -De volgende velden zijn toegestaan: +Dit kan indien gewenst worden gebruikt om automatisch een DCAT catalogus te genereren. +De volgende velden zijn toegestaan: - - - - - - - - - - - - - - -
      language - string - Taal van de dataset volgens ISO 639-1 of ISO 639-2 Conform DCAT § resource_language + language + string + Taal van de dataset volgens ISO 639-1 of ISO 639-2 Conform DCAT § resource_language
      dateCreated - date-time - Datum van publicatie. Conform DCAT § resource_release_date + dateCreated + date-time + Datum van publicatie. Conform DCAT § resource_release_date
      dateModified - date-time - Meest recente datum waarop de dataset is aangepast. Conform DCAT § resource_update_date + dateModified + date-time + Meest recente datum waarop de dataset is aangepast. Conform DCAT § resource_update_date
      accrualPeriodicity - string - Frequentie waarmee de dataset gepubliceerd wordt. Conform DCAT § dataset_frequency + accrualPeriodicity + string + Frequentie waarmee de dataset gepubliceerd wordt. Conform DCAT § dataset_frequency
      spatialDescription - string + spatialDescription + string
      spatialCoordinates - Geometry - Een GeoJSON geometry + spatialCoordinates + Geometry + Een GeoJSON geometry
      theme - array (string) - Array van themas Conform DCAT § resource_theme + theme + array (string) + Array van themas Conform DCAT § resource_theme
      hasBeginning - date-time + hasBeginning + date-time
      hasEnd - date-time + hasEnd + date-time
      objective - string + objective + string
      temporalUnit - string - Eenheid van temporaliteit Conform? DCAT § dataset_temporal_resolution + temporalUnit + string + Eenheid van temporaliteit Conform? DCAT § dataset_temporal_resolution
      spatial - string + spatial + string
      legalBasis - string + legalBasis + string
      keywords - array (string) - Array van keywords Conform DCAT § resource_keyword + keywords + array (string) + Array van keywords Conform DCAT § resource_keyword
      license - string - Licentie Conform DCAT § resource_license + license + string + Licentie Conform DCAT § resource_license
      -

      Note: De intentie is dat alle relevante DCAT velden te modelleren zijn. Wanneer velden ontbreken - die wel in de DCAT zijn opgenomen, zullen deze worden toegevoegd.

      +

      Note: De intentie is dat alle relevante DCAT velden te modelleren zijn. Wanneer velden ontbreken + die wel in de DCAT zijn opgenomen, zullen deze worden toegevoegd.

      Niet alle DCAT velden zijn gemodelleerd. Daarnaast zijn komt van sommige velden de naamgeving niet overeen met de DCAT spec.

      Sommige velden missen een beschrijving

      2.3. Tabelreferenties

      Tabelreferenties zijn verwijzingen naar JSON-bestanden waarin een tabel gedefinieerd wordt. Dit maakt het mogelijk om elke tabel in een dataset in een eigen bestand te definieeren. -Tabel referenties zijn gebaseerd op JSON Schema § ref. +Tabel referenties zijn gebaseerd op JSON Schema § ref.

      Een tabel referentie is een JSON object met in ieder geval de volgende attributen:

      - -
      id - identifier - Binnen deze dataset unieke identifier voor deze tabel. Zou gelijk moeten zijn aan tabel.id. Moet voldoen aan § 5 Naamgeving. + id + identifier + Binnen deze dataset unieke identifier voor deze tabel. Zou gelijk moeten zijn aan tabel.id. Moet voldoen aan § 5 Naamgeving.
      $ref - uri-reference + $ref + uri-reference URI-Reference naar JSON bestand met de tabel definitie zonder de bestandsextensie. - De reference is altijd relatief aan de locatie van het dataset bestand. + De reference is altijd relatief aan de locatie van het dataset bestand.

      Optioneel kan een object met actieve versies van de tabel worden meegegeven. Actieve versies zijn alle versies die actief worden onderhouden en ondersteund.

      -
      activeVersions - object + activeVersions + object - Dit object bevat elementen van de vorm: + Dit object bevat elementen van de vorm:
      "MAJOR.MINOR.PATCH": "path/to/tableVersion/file"
       

      activeVersions moet in iedergeval een element bevatten voor de versie waaraan wordt verwezen in het $ref veld.

      @@ -2654,47 +2770,47 @@

      Van deze bestandsnaam en padstructuur moet niet worden afgeweken behalve als daar een zwaarwegende reden voor is.

      - Voorbeeld van een dataset met twee tabel referenties. + Voorbeeld van een dataset met twee tabel referenties.

      Een locaties tabel in ./locaties/v1.0.0.json.
      En een personen tabel in ./personen/v2.0.1.json, waarvan ook de oudere versie 1.3.0 beschikbaar is.

      {  "id": "bekendeAmsterdammers",  "type": "dataset",  "title": "Bekende Amsterdammers",  "description": "Bekende historische personen die in Amsterdam hebben gewoond.\n (Een voorbeeld dataset)",  "status": "beschikbaar",  "owner": "Gemeente Amsterdam",  "publisher": "myDataTeam",  "creator": "myBronhouder",  "auth": "OPENBAAR",  "authorizationGrantor": "myDataTeam@amsterdam.nl",  "tables": [    {      "$ref": "personen/v2.0.1",      "id": "personen",      "activeVersions": {        "1.3.0": "personen/v1.3.0",        "2.0.1": "personen/v2.0.1"      }    },    {      "$ref": "locaties/v1.0.0",      "id": "locaties"    }  ]}

      2.4. Publisherreferenties

      Publisherreferenties zijn verwijzingen naar JSON-bestanden waarin een publisher gedefinieerd wordt. -Publisher referenties zijn gebaseerd op JSON Schema § ref. -

      Een publisher referentie is een JSON object met 1 attribuut:

      +Publisher referenties zijn gebaseerd op JSON Schema § ref. +

      Een publisher referentie is een JSON object met 1 attribuut:

      -
      $ref - uri-reference + $ref + uri-reference URI-Reference naar JSON bestand met de publisher definitie zonder de bestandsextensie. - De reference is altijd van de vorm publishers/<BESTANDSNAAM>. Bijvoorbeeld: publishers/SOEB + De reference is altijd van de vorm publishers/<BESTANDSNAAM>. Bijvoorbeeld: publishers/SOEB

      3. Tabel

      Een tabel definitie bevat het schema waaraan de er toe behorende datarijen moeten voldoen. Binnen het schema worden velden gedefinieerd die datarijen moeten of mogen bezitten. Daarnaast kan aan een tabel meta informatie en autorisatie instellingen worden meegegeven.

      3.1. Verplichte attributen

      - Een tabel binnen Amsterdam Schema is een JSON object met in ieder geval de volgende attributen. + Een tabel binnen Amsterdam Schema is een JSON object met in ieder geval de volgende attributen. - - - - - -
      id - identifier - Naam van de tabel. Unieke (binnen de parent dataset) identifier voor deze tabel. Moet voldoen aan § 5 Naamgeving. + id + identifier + Naam van de tabel. Unieke (binnen de parent dataset) identifier voor deze tabel. Moet voldoen aan § 5 Naamgeving.
      type - schema-type - Type van dit bestand, in dit geval "table". + type + schema-type + Type van dit bestand, in dit geval "table".
      version - version-string - Het versie nummer van deze tabel. Zie § 3.5 Versionering + version + version-string + Het versie nummer van deze tabel. Zie § 3.5 Versionering
      schema - object + schema + object - Het schema van objecten in de tabel. zie § 3.3 Schema + Het schema van objecten in de tabel. zie § 3.3 Schema
      Valide elementen
        @@ -2708,63 +2824,63 @@

        Let op: Zie § 5 Naamgeving voor de eisen waaraan id moet voldoen.

        Voorbeeld van een minimale tabel definitie. De title en description velden zijn niet verplicht, - maar het is best practice ze toe te voegen. + maar het is best practice ze toe te voegen.
        {  "id": "personen",  "type": "table",  "title": "Personen",  "description": "Bekende Amsterdamse personen",  "version": "1.0.0",  "schema": {    "$schema": "http://json-schema.org/draft-07/schema#",    "type": "object",    "required": [      "id",      "schema"    ],    "display": "naam",    "properties": {      "schema": {        "$ref": "https://schemas.data.amsterdam.nl/schema@v1.1.1#/definitions/schema"      },      "id": {        "type": "string",        "description": "Unieke aanduiding persoon"      },      "naam": {        "type": "string",        "description": "Volledige naam van de persoon"      }    }  }}

        3.2. Optionele attributen

        - Een tabel mag daarnaast de volgende attributen bezitten: + Een tabel mag daarnaast de volgende attributen bezitten: - - - - - - - - - - - - -
        title - string - zie § 7.1 Omschrijving Default: Gelijk aan id. + title + string + zie § 8.1 Omschrijving Default: Gelijk aan id.
        description - string - zie § 7.1 Omschrijving + description + string + zie § 8.1 Omschrijving
        shortname - string - Verkorte unieke naam van de tabel. zie § 5 Naamgeving + shortname + string + Verkorte unieke naam van de tabel. zie § 5 Naamgeving
        derivedFrom + derivedFrom array - De datasets waar deze view op gebaseerd is. e.g. <dataset>:<tabel>. Dit attribuut is enkel noodzakelijk wanneer de dataset een view is. + De datasets waar deze view op gebaseerd is. e.g. <dataset>:<tabel>. Dit attribuut is enkel noodzakelijk wanneer de dataset een view is.
        auth - string | array - geautoriseerde scope(s). Default: gelijk aan waarde in dataset/auth, zie § 7.2 Autorisatie. + auth + string | array + geautoriseerde scope(s). Default: gelijk aan waarde in dataset/auth, zie § 7 Autorisatie.
        reasonsNonPublic - array(nonPubReason) + reasonsNonPublic + array(nonPubReason) een of meer gronden voor het niet openbaar maken van data obv uitzonderingen in Hoofdstuk 5 van de [Woo]. - (Vanaf 1 mei 2022 verplicht wanneer de dataset openbaar is maar het auth atribuut van de tabel niet gelijk is aan "OPENBAAR") zie § 7.2 Autorisatie + Verplicht wanneer de dataset openbaar is maar het auth attribuut van de tabel niet gelijk is aan "OPENBAAR". zie § 7 Autorisatie
        provenance - string - zie § 7.3 Provenance + provenance + string + zie § 8.2 Provenance
        dateCreated - date-time - Datum van publicatie. + dateCreated + date-time + Datum van publicatie.
        dateModified - date-time - Meest recente datum waarop de tabel is aangepast. + dateModified + date-time + Meest recente datum waarop de tabel is aangepast.
        license - string - Licentie + license + string + Licentie
        temporal - temporal-object - Definieert tijdsafhankelijke geldigheid van objecten. zie § 3.4 Temporaliteit + temporal + temporal-object + Definieert tijdsafhankelijke geldigheid van objecten. zie § 3.4 Temporaliteit
        crs - enum(string) + crs + enum(string) - Coordinate reference System + Coordinate reference System
        Opties
          @@ -2777,12 +2893,12 @@

        Dit veld is verplicht voor tabellen waarin één of meer § 4.3.6 geometrie velden zitten en waarvoor niet op dataset-of veldniveau al een crs gedefinieerd is. - Zie SDOW best practices § CRS-background voor meer informatie. + Zie SDOW best practices § CRS-background voor meer informatie.
        dataclass - enum(string) + dataclass + enum(string) - Soort data in de tabel + Soort data in de tabel
        Opties
          @@ -2794,69 +2910,67 @@

          "event"

        - Default: "structured" + Default: "structured"
        -

        Best Practice Voeg altijd op zijn minst een title en description toe.
        -

        3.3. Schema

        Het schema object beschrijft de eigenschappen van rijen in de tabel.

        Een schema object moet in ieder geval de volgende attributen bezitten:

        - - - - - -
        $schema - string - constant "http://json-schema.org/draft-07/schema#" + $schema + string + constant "http://json-schema.org/draft-07/schema#"
        type - string - constant "object" + type + string + constant "object"
        required - array (string) - Namen van velden die niet null mogen bevatten. Bevat minstens "schema". + required + array (string) + Namen van velden die niet null mogen bevatten. Bevat minstens "schema".
        display - string + display + string De naam van het veld dat titel van objecten bevat. Voor afnemers die een samenvattende titel van een object willen tonen. Default: gelijk aan identifier. - Het veld dat hier genoemd wordt mag geen auth attribuut bevatten. + Het veld dat hier genoemd wordt mag geen auth attribuut bevatten.
        properties - object + properties + object Collectie van velden die rijen in de tabel mogen bezitten. Bevat daarnaast een 'schema.$ref' attribuut. - Veldnamen moeten beginnen met een kleine letter gevolgd door een alfanumerieke reeks en moeten voldoen aan § 5 Naamgeving. + Veldnamen moeten beginnen met een kleine letter gevolgd door een alfanumerieke reeks en moeten voldoen aan § 5 Naamgeving.
        properties.schema - §ref - constant {"$ref":"https://schemas.data.amsterdam.nl/schema@v1.2.0#/definitions/schema"} + properties.schema + §ref + constant {"$ref":"https://schemas.data.amsterdam.nl/schema@v1.2.0#/definitions/schema"}

        Daarnaast mag een schema object de volgende attributen bezitten:

        - - - -
        $id - string + $id + string
        additionalProperties - bool - constant false Geeft aan dat objecten extra velden mogen hebben. + additionalProperties + bool + constant false Geeft aan dat objecten extra velden mogen hebben.
        mainGeometry - string - De naam van het primaire geometrie veld. Default: "geometry" zie § 4.3.6 geometrie + mainGeometry + string + De naam van het primaire geometrie veld. Default: "geometry" zie § 4.3.6 geometrie
        identifier - string | array (string) + identifier + string | array (string) Naam van het veld dat de unieke identifier van een rij is, of een array van veldnamen die samen een unieke key vormen. Het veld of de velden waar hier naar verwezen wordt moeten van het type string of het type integer zijn. - en mogen geen auth attribuut bevatten. + en mogen geen auth attribuut bevatten.

        Het identifier veld moet string zijn. De array optie wordt binnenkort verwijderd.

        - Voorbeeld van een schema. + Voorbeeld van een schema.

        Het display veld zorgt ervoor dat niet de "id" de maar de "naam" van een persoon als samenvattende titel wordt gebruikt.

        {  "id": "personen",  "type": "table",  "title": "Personen",  "description": "Bekende Amsterdamse personen",  "version": "1.0.0",  "schema": {    "$schema": "http://json-schema.org/draft-07/schema#",    "type": "object",    "required": [      "id",      "schema"    ],    "display": "naam",    "properties": {      "schema": {        "$ref": "https://schemas.data.amsterdam.nl/schema@v1.1.1#/definitions/schema"      },      "id": {        "type": "string",        "description": "Unieke aanduiding persoon"      },      "naam": {        "type": "string",        "description": "Volledige naam van de persoon"      }    }  }}
        @@ -2867,14 +2981,14 @@

      identifier - string + identifier + string Naam van het veld dat de versie van een object identificeert. - De combinatie van dit veld en het veld waarnaar wordt verwezen in het identifier attribuut van schema moet uniek zijn voor elke regel in de tabel. + De combinatie van dit veld en het veld waarnaar wordt verwezen in het identifier attribuut van schema moet uniek zijn voor elke regel in de tabel.
      dimensions.geldigOp + dimensions.geldigOp array (string) - De namen van de velden die de geldigheid van een object begrenzen. Heeft 2 elementen. + De namen van de velden die de geldigheid van een object begrenzen. Heeft 2 elementen.

      Note: Momenteel wordt alleen de dimensie "geldigOp" ondersteund. In de toekomst kunnen hier andere dimensies zoals "inWerkingOp" en "beschikbaarOp" aan toegevoegd worden.

      @@ -2882,7 +2996,7 @@

      Als een tabel niet temporeel is kan het temporal object worden weggelaten.

      - Voorbeeld van een temporal object. + Voorbeeld van een temporal object.
      "temporal": {
           "identifier": "volgnummer",
           "dimensions": {
      @@ -2892,7 +3006,7 @@ 

      3.5. Versionering

      - Verschillende versies van een tabel worden van elkaar onderscheiden door middel van versienummers. + Verschillende versies van een tabel worden van elkaar onderscheiden door middel van versienummers.

      Een geversioneerde tabel moet in een eigen bestand staan. De bestandsnaam van de tabel zou gelijk moeten zijn aan het versienummer van de tabel voorafgegaan door 'v' met een '.json' extensie. Zie § 2.3 Tabelreferenties voor hoe in de dataset naar een tabel bestand moet worden verwezen.

      @@ -2933,7 +3047,7 @@

      Niet backwards compatible zijn alle andere aanpassingen.

      - Voorbeelden van niet backwards compatible aanpassingen: + Voorbeelden van niet backwards compatible aanpassingen:
      • een nieuw verplicht veld is toegevoegd

        @@ -2948,77 +3062,77 @@

        Zie § 2.3 Tabelreferenties voor het toevoegen van verschillende versies van een tabel.

        - Voorbeeld aan versie "1.2.1" van de personen tabel wordt een nieuw optioneel veld toegevoegd en aan een bestaand enum veld wordt een optie toegevoegd. + Voorbeeld aan versie "1.2.1" van de personen tabel wordt een nieuw optioneel veld toegevoegd en aan een bestaand enum veld wordt een optie toegevoegd.

        Dit zijn backwards compatible veranderingen dus het minor versie nummer wordt opgehoogd en de nieuwe versie wordt "1.3.0".

        De nieuwe tabel wordt in een nieuw bestand personen/v1.3.0.json geplaatst.

        - personen/v1.2.1.json + personen/v1.2.1.json
        {  "id": "personen",  "type": "table",  "title": "Personen",  "version": "1.2.1",  "description": "Bekende Amsterdamse personen",  "schema": {    "$schema": "http://json-schema.org/draft-07/schema#",    "type": "object",    "required": [      "id",      "schema"    ],    "display": "naam",    "properties": {      "schema": {        "$ref": "https://schemas.data.amsterdam.nl/schema@v1.1.1#/definitions/schema"      },      "id": {        "type": "string",        "description": "Unieke aanduiding persoon"      },      "naam": {        "type": "string",        "description": "Volledige naam van de persoon"      },      "beroep": {        "title": "beroep",        "description": "Reden, dat de persoon bekend is.",        "type": "string",        "enum": [          "voetballer",          "filosoof"        ]      }    }  }}
        - personen/v1.3.0.json + personen/v1.3.0.json
        {  "id": "personen",  "type": "table",  "title": "Personen",  "version": "1.3.0",  "description": "Bekende Amsterdamse personen",  "schema": {    "$schema": "http://json-schema.org/draft-07/schema#",    "type": "object",    "required": [      "id",      "schema"    ],    "display": "naam",    "properties": {      "schema": {        "$ref": "https://schemas.data.amsterdam.nl/schema@v1.1.1#/definitions/schema"      },      "id": {        "type": "string",        "description": "Unieke aanduiding persoon"      },      "naam": {        "type": "string",        "description": "Volledige naam van de persoon"      },      "beroep": {        "title": "Beroep",        "description": "Reden, dat de persoon bekend is.",        "type": "string",        "enum": [          "voetballer",          "filosoof",          "beide"        ]      },      "geassocieerdeLocaties": {        "shortname": "locaties",        "title": "Locaties geassocieerd met de Persoon",        "description": "Locaties geassocieerd met de persoon. \nBijvoorbeeld een voormalige woon of verblijfplaats.",        "type": "array",        "relation": "bekendeAmsterdammers:locaties",        "items": {          "type": "string"        }      }    }  }}
        Nu wordt in de tabel uit het vorige voorbeeld een veld hernoemd, krijgt een string veld een maximale lengte, - wordt uit een enum veld een optie verwijderd en wordt een optioneel veld verplicht gemaakt. + wordt uit een enum veld een optie verwijderd en wordt een optioneel veld verplicht gemaakt.

        Deze veranderingen zijn niet backwards compatible dus het major versie nummer wordt opgehoogd en de nieuwe versie wordt "2.0.0".

        De nieuwe tabel wordt in een nieuw bestand personen/v2.0.0.json geplaatst.

        - personen/v1.3.0.json + personen/v1.3.0.json
        {  "id": "personen",  "type": "table",  "title": "Personen",  "version": "1.3.0",  "description": "Bekende Amsterdamse personen",  "schema": {    "$schema": "http://json-schema.org/draft-07/schema#",    "type": "object",    "required": [      "id",      "schema"    ],    "display": "naam",    "properties": {      "schema": {        "$ref": "https://schemas.data.amsterdam.nl/schema@v1.1.1#/definitions/schema"      },      "id": {        "type": "string",        "description": "Unieke aanduiding persoon"      },      "naam": {        "type": "string",        "description": "Volledige naam van de persoon"      },      "beroep": {        "title": "Beroep",        "description": "Reden, dat de persoon bekend is.",        "type": "string",        "enum": [          "voetballer",          "filosoof",          "beide"        ]      },      "geassocieerdeLocaties": {        "shortname": "locaties",        "title": "Locaties geassocieerd met de Persoon",        "description": "Locaties geassocieerd met de persoon. \nBijvoorbeeld een voormalige woon of verblijfplaats.",        "type": "array",        "relation": "bekendeAmsterdammers:locaties",        "items": {          "type": "string"        }      }    }  }}
        - personen/v2.0.0.json + personen/v2.0.0.json
        {  "id": "personen",  "type": "table",  "title": "Personen",  "version": "2.0.0",  "description": "Bekende Amsterdamse personen",  "schema": {    "$schema": "http://json-schema.org/draft-07/schema#",    "type": "object",    "required": [      "id",      "schema",      "geassocieerdeLocaties"    ],    "display": "naam",    "properties": {      "schema": {        "$ref": "https://schemas.data.amsterdam.nl/schema@v1.1.1#/definitions/schema"      },      "id": {        "type": "string",        "description": "Unieke aanduiding persoon",        "maxLength": 25      },      "volledigeNaam": {        "type": "string",        "description": "Volledige naam van de persoon"      },      "beroep": {        "title": "Beroep",        "description": "Reden, dat de persoon bekend is.",        "type": "string",        "enum": [          "voetballer",          "filosoof",          "zanger",          "schilder",          "wiskundige",          "schrijver"        ]      },      "geassocieerdeLocaties": {        "shortname": "locaties",        "title": "Locaties geassocieerd met de Persoon",        "description": "Locaties geassocieerd met de persoon. \nBijvoorbeeld een voormalige woon of verblijfplaats.",        "type": "array",        "relation": "bekendeAmsterdammers:locaties",        "items": {          "type": "string"        }      }    }  }}
        - Voorbeeld in versie 2.0.0" wordt een aantal metadata velden aangepast. + Voorbeeld in versie 2.0.0" wordt een aantal metadata velden aangepast.

        Deze veranderingen passen de data structuur niet aan dus het patch nummer wordt opgehoogd en de nieuwe versie wordt "2.0.1".

        De nieuwe tabel wordt in een nieuw bestand personen/v2.0.1.json geplaatst het oude bestand mag e.v.t. verwijderd worden.

        - personen/v2.0.0.json + personen/v2.0.0.json
        {  "id": "personen",  "type": "table",  "title": "Personen",  "version": "2.0.0",  "description": "Bekende Amsterdamse personen",  "schema": {    "$schema": "http://json-schema.org/draft-07/schema#",    "type": "object",    "required": [      "id",      "schema",      "geassocieerdeLocaties"    ],    "display": "naam",    "properties": {      "schema": {        "$ref": "https://schemas.data.amsterdam.nl/schema@v1.1.1#/definitions/schema"      },      "id": {        "type": "string",        "description": "Unieke aanduiding persoon",        "maxLength": 25      },      "volledigeNaam": {        "type": "string",        "description": "Volledige naam van de persoon"      },      "beroep": {        "title": "Beroep",        "description": "Reden, dat de persoon bekend is.",        "type": "string",        "enum": [          "voetballer",          "filosoof",          "zanger",          "schilder",          "wiskundige",          "schrijver"        ]      },      "geassocieerdeLocaties": {        "shortname": "locaties",        "title": "Locaties geassocieerd met de Persoon",        "description": "Locaties geassocieerd met de persoon. \nBijvoorbeeld een voormalige woon of verblijfplaats.",        "type": "array",        "relation": "bekendeAmsterdammers:locaties",        "items": {          "type": "string"        }      }    }  }}
        - personen/v2.0.1.json + personen/v2.0.1.json
        {  "id": "personen",  "type": "table",  "title": "Personen",  "version": "2.0.1",  "description": "Bekende historische Amsterdammers",  "schema": {    "$schema": "http://json-schema.org/draft-07/schema#",    "type": "object",    "required": [      "id",      "schema",      "geassocieerdeLocaties"    ],    "display": "volledigeNaam",    "properties": {      "schema": {        "$ref": "https://schemas.data.amsterdam.nl/schema@v1.1.1#/definitions/schema"      },      "id": {        "type": "string",        "description": "Unieke aanduiding persoon",        "maxLength": 25      },      "volledigeNaam": {        "type": "string",        "description": "Volledige naam van de persoon"      },      "beroep": {        "title": "Beroep",        "description": "Primaire reden, dat de persoon bekend is.",        "type": "string",        "enum": [          "voetballer",          "filosoof",          "zanger",          "schilder",          "wiskundige",          "schrijver"        ]      },      "geassocieerdeLocaties": {        "shortname": "locaties",        "title": "Geassocieerde locaties",        "description": "Locaties geassocieerd met de persoon. \nBijvoorbeeld een voormalige woon of verblijfplaats.",        "type": "array",        "relation": "bekendeAmsterdammers:locaties",        "items": {          "type": "string"        }      }    }  }}
        Om de nieuwe versie van de tabel aan de dataset toe te voegen, moet de tabel referentie in de dataset ook aangepast worden. - De default versie van de tabel is nu "2.0.1". + De default versie van de tabel is nu "2.0.1".

        In dit geval staat de versie "1.3.0" ook in activeVersions zodat de oudere versie van de data ook beschikbaar blijft. Dit is optioneel.

        - personen/dataset.json + personen/dataset.json
        {  "id": "bekendeAmsterdammers",  "type": "dataset",  "title": "Bekende Amsterdammers",  "description": "Bekende historische personen die in Amsterdam hebben gewoond.\n (Een voorbeeld dataset)",  "status": "beschikbaar",  "owner": "Gemeente Amsterdam",  "publisher": "myDataTeam",  "creator": "myBronhouder",  "auth": "OPENBAAR",  "authorizationGrantor": "myDataTeam@amsterdam.nl",  "tables": [    {      "$ref": "personen/v2.0.1",      "id": "personen",      "activeVersions": {        "1.3.0": "personen/v1.3.0",        "2.0.1": "personen/v2.0.1"      }    },    {      "$ref": "locaties/v1.0.0",      "id": "locaties"    }  ]}

        Note: Deze semantic versioning standaard is geinspireerd door SchemaVer wat weer is gebaseerd op SemVer.

        4. Veld

        Een veld beschrijft een eigenschap die een rij in de tabel mag of moet (zie required) bezitten. -Een veld is een concrete JSON Schema-typedefinitie waaraan ook meta-informatie kan worden meegegeven. +Een veld is een concrete JSON Schema-typedefinitie waaraan ook meta-informatie kan worden meegegeven.

        Zie § 4.3 Data types voor een overzicht van modelleerbare typen en hoe deze binnen Amsterdam Schema uitgedrukt kunnen worden.

        Note: veld gebruikt een subset van [json-schema-validation]. Een aantal JSON Schema features waaronder union types wordt niet ondersteund.

        Let op: Zie § 5 Naamgeving voor de eisen waaraan de namen van velden moeten voldoen.

        4.1. Verplichte attributen

        - Een veld is een JSON object met in ieder geval één en niet meer dan één van de volgende twee attributen. + Een veld is een JSON object met in ieder geval één en niet meer dan één van de volgende twee attributen. - - - - - -
        type - string + type + string - Data type van het veld. Volgens JSON Schema § rfc.section.6.1.1. Zie § 4.3 Data types voor details. + Data type van het veld. Volgens JSON Schema § rfc.section.6.1.1. Zie § 4.3 Data types voor details.
        Toegestane waarden
          @@ -3039,10 +3153,10 @@

        $ref - enum(uri) + $ref + enum(uri) - URI van een GeoJSON geometry schema definitie. zie § 4.3.6 geometrie + URI van een GeoJSON geometry schema definitie. zie § 4.3.6 geometrie
        Opties
          @@ -3065,52 +3179,57 @@

          Note: Let op, een veld moet dus een type of een $ref attribuut hebben, beide is niet toegestaan.

          4.2. Toegestane attributen

          - Een veld definitie mag naast het verplichte attribuut optioneel de volgende meta-data attributen bevatten: + Een veld definitie mag naast het verplichte attribuut optioneel de volgende meta-data attributen bevatten: - + - - - - - - - - -
          title - string - zie § 7.1 Omschrijving Default: Gelijk aan de naam van het veld. + title + string + zie § 8.1 Omschrijving Default: Gelijk aan de naam van het veld. +
          description + string + zie § 8.1 Omschrijving
          description - string - zie § 7.1 Omschrijving + auth + string | array + geautoriseerde scope(s). Default: gelijk aan waarde in tabel/auth, zie § 7 Autorisatie. + Niet toegestaan in velden waarnaar wordt verwezen in identifier of display.
          auth - string | array - geautoriseerde scope(s). Default: gelijk aan waarde in tabel/auth, zie § 7.2 Autorisatie. - Niet toegestaan in velden waarnaar wordt verwezen in identifier of display. + filterAuth + string | array + geautoriseerde scope(s) die dit veld in zoekvragen mogen gebruiken. + De gebruiker moet daarnaast leestoegang hebben tot het veld via auth of § 7.3 Profielen.
          reasonsNonPublic - array(nonPubReason) + reasonsNonPublic + array(nonPubReason) een of meer gronden voor het niet openbaar maken van data obv uitzonderingen in Hoofdstuk 5 van de [Woo]. - (Vanaf 1 mei 2022 verplicht wanneer de tabel openbaar is maar het auth atribuut van het veld niet gelijk is aan "OPENBAAR") zie § 7.2 Autorisatie + Verplicht wanneer de tabel openbaar is maar het auth attribuut van het veld niet gelijk is aan "OPENBAAR". zie § 7 Autorisatie
          provenance - string - zie § 7.3 Provenance + provenance + string + zie § 8.2 Provenance
          shortname - string - zie § 5 Naamgeving + shortname + string + zie § 5 Naamgeving
          unit - string | object - De eenheid van de waarden in dit veld. zie § 4.5 Eenheden + unit + string | object + De eenheid van de waarden in dit veld. zie § 4.5 Eenheden
          relation - string - Beschrijft relaties tussen velden. zie § 4.4 Relaties + relation + string + Beschrijft relaties tussen velden. zie § 4.4 Relaties
          uri - uri-reference - Een verwijzing de definitie van de waarden in dit veld. + uri + uri-reference + Een verwijzing de definitie van de waarden in dit veld.
          crs - enum(string) + crs + enum(string) - Coordinate reference System + Coordinate reference System
          Opties
            @@ -3123,64 +3242,62 @@

          Dit veld is verplicht voor § 4.3.6 geometrie velden waarvoor niet op dataset-of tabelniveau al een crs gedefinieerd is. - Zie SDOW best practices § CRS-background voor meer informatie. + Zie SDOW best practices § CRS-background voor meer informatie.
          -

          Best Practice Voeg altijd op zijn minst een 'title' en 'description' toe.
          -

          Naast bovenstaande attributen mag een veld uitsluitend de volgende subset van attributen uit JSON Schema bevatten:

          - - - - - - - - - - - -
          $comment - string - Developer commentaar bij het veld. + $comment + string + Developer commentaar bij het veld.
          items - veld + items + veld JSON Schema van de elementen in de array. (verplicht voor array type) - In tegenstelling tot JSON Schema wordt een array hier niet ondersteund. Zie [#data-types-array]. + In tegenstelling tot JSON Schema wordt een array hier niet ondersteund. Zie [#data-types-array].
          maximum - number - Inclusieve maximum waarde (voor integer en number type) + maximum + number + Inclusieve maximum waarde (voor integer en number type)
          minimum - number - Inclusieve minimum waarde (voor integer en number type) + minimum + number + Inclusieve minimum waarde (voor integer en number type)
          exclusiveMaximum - integer - Exclusieve maximum waarde (voor integer en number type) + exclusiveMaximum + integer + Exclusieve maximum waarde (voor integer en number type)
          multipleOf - number - Waarde moet meervoud zijn van (voor integer en number type) + multipleOf + number + Waarde moet meervoud zijn van (voor integer en number type)
          minLength - integer - Mimimum lengte (voor string type) + minLength + integer + Mimimum lengte (voor string type)
          maxLength - integer - Maximum lengte (voor string type) + maxLength + integer + Maximum lengte (voor string type)
          contentEncoding - string - Encoding (voor string type) + contentEncoding + string + Encoding (voor string type)
          properties - object - Attributen van objecten (voor object type) + properties + object + Attributen van objecten (voor object type)
          enum - array - Lijst van maximaal 1024 toegestane waarden. + enum + array + Lijst van maximaal 1024 toegestane waarden.
          format - string/object + format + string/object - String formats (voor string type) Conform JSON Schema § rfc.section.7.3. + String formats (voor string type) Conform JSON Schema § rfc.section.7.3.
          Opties
            @@ -3217,7 +3334,7 @@

            Object format (voor object type): "json"

          - Voorbeeld van een veld. + Voorbeeld van een veld.
                  "type": "string",
                   "description": "Volledige naam van de persoon"
                 },
          @@ -3227,7 +3344,7 @@ 

          - Voorbeeld van een geometrie veld. + Voorbeeld van een geometrie veld.
          "locatie": {
               "title": "Locatie",
               "description": "Coordinaten van het middelpunt van het plein",
          @@ -3244,30 +3361,30 @@ 

        § 4.3.1 integer - § 4.3.5 tijd + § 4.3.1 integer + § 4.3.5 tijd
        § 4.3.2 number - § 4.3.6 geometrie + § 4.3.2 number + § 4.3.6 geometrie
        § 4.3.3 boolean - § 4.3.7 object + § 4.3.3 boolean + § 4.3.7 object
        § 4.3.4 string - § 4.3.8 array + § 4.3.4 string + § 4.3.8 array

        Note: UNION types worden niet ondersteund: een kolom kan niet meerdere typen waardes bevatten, behalve null. - De anyOf operater is dus niet toegestaan
        + De anyOf operater is dus niet toegestaan
        {"anyOf": [{ "type": "integer" }, { "type": "string"}]}

        Note: Elk veld is nullable tenzij het als required property is opgegeven, zie required.

        4.3.1. integer

        Een integer bevat de (decimale representatie van) een 64-bits signed integer. Een integer in Amsterdam Schema heeft dus een range van [-(2^63), (2^63)-1], maar gebruik van getallen buiten het bereik [-(2^53)+1, (2^53)-1] wordt in lijn met RFC7159 § section-6 afgeraden omdat dit door veelgebruikte doelsystemen ([IEEE754]) - niet wordt ondersteund. Als een maximum en/of minimum buiten de laatst genoemde range is ingesteld wordt een waarschuwing gegeven. + niet wordt ondersteund. Als een maximum en/of minimum buiten de laatst genoemde range is ingesteld wordt een waarschuwing gegeven.
        - Dit veld bevat een 64-bits signed integer, zoals een "BIGINT" in SQL. + Dit veld bevat een 64-bits signed integer, zoals een "BIGINT" in SQL.
        "aantalDuivenOpDeDam": {
             "title": "aantal duiven op de Dam",
             "description": "Het gemeten aantal duiven op de de Dam",
        @@ -3276,7 +3393,7 @@ 

        - Dit veld resulteert in een waarschuwing. + Dit veld resulteert in een waarschuwing.
        "zandkorrelsOpBlijburg": {
             "title": "zandkorrels op Blijburg",
             "description": "Het aantal aantal zandkorrels op het strand van Blijburg.",
        @@ -3288,7 +3405,7 @@ 

        maximum, minimum of exclusiveMaximum kan een native datatype met een geschikt bereik worden toegepast. Zo kan een integer met een exclusiveMaximum < 2^(N-1) en minimum >= 2^(N-1) altijd worden geinterpreteerd als een N-bits signed integer.

        - Dit veld kan veilig als 32 bit signed integer (zoals een SQL INTEGER) worden geinterpreteerd. (2147483648 = 2^(32-1)) + Dit veld kan veilig als 32 bit signed integer (zoals een SQL INTEGER) worden geinterpreteerd. (2147483648 = 2^(32-1))
        "hoogteTenOpzichteVanNormaalAmsterdamsPijl": {
             "title": "Hoogte ten opzichte van NAP",
             "shortname": "hoogteNAP"
        @@ -3302,7 +3419,7 @@ 

        minimum >= 0 en een exclusiveMaximum < 2^N kan altijd worden geinterpreteerd als een N-bits unsigned integer.

        - Dit veld kan veilig als 8 bit unsigned integer zoals een SQL TINYINT worden geinterpreteerd. + Dit veld kan veilig als 8 bit unsigned integer zoals een SQL TINYINT worden geinterpreteerd.
        "weeknummer": {
             "title": "weeknummer",
             "description": "weeknummer",
        @@ -3325,7 +3442,7 @@ 

        4.3.2. number

        Number wordt gebruikt voor velden met reële getallen. Als geen multipleOf attribuut is meegegeven moet een number veld worden geinterpreteerd als een 64bits floating-point getal (double) zoals een SQL DOUBLE. - Dit veld moet worden geinterpreteerd als een Double zoals een SQL DOUBLE. + Dit veld moet worden geinterpreteerd als een Double zoals een SQL DOUBLE.
        "gevelHoek": {
             "title": "gevel hoek",
             "description": "Hoek van de gevel met de verticaal in graden",
        @@ -3335,7 +3452,7 @@ 

        Wanneer aan een number veld een multipleOf attribuut is meegegeven moet dit veld worden geinterpreteerd als fixed-point type met schaal=log(multipleOf)/log(0.1) (zodat multipleOf=0.1^schaal).

        - Dit veld moet worden geinterpreteerd als een fixed-point type met schaal=2 zoals een SQL DECIMAL(10,2). + Dit veld moet worden geinterpreteerd als een fixed-point type met schaal=2 zoals een SQL DECIMAL(10,2).
        "gevelHoek": {
             "title": "gevel hoek",
             "description": "Hoek van de gevel met de verticaal in graden",
        @@ -3346,7 +3463,7 @@ 

        Als een maximum attribuut is meegegeven kan een native type met een geschikte precisie worden gebruikt. precisie = log(maximum + 1)/log(10) + schaal (zodat maximum=10^(precisie-schaal) -1).

        - Dit veld moet worden geinterpreteerd als een fixed-point type met schaal=2 en precisie>=4 zoals een SQL DECIMAL(4,2). + Dit veld moet worden geinterpreteerd als een fixed-point type met schaal=2 en precisie>=4 zoals een SQL DECIMAL(4,2).
        "gevelHoek": {
             "title": "gevel hoek",
             "description": "Hoek van de gevel met de verticaal in graden",
        @@ -3357,12 +3474,10 @@ 

        }

        -

        Best Practice Beperk numerieke velden altijd tot realistische waarden met maximum, minimum of exclusiveMaximum om fouten te voorkomen, en doelsystemen de juiste datatypen te laten gebruiken.
        -

        4.3.3. boolean

        - Een veld van het type "boolean" wordt gebruikt voor boolean, (true, false) waarden. + Een veld van het type "boolean" wordt gebruikt voor boolean, (true, false) waarden.
        "isGepubliceerd": {
             "title": "Is gepubliceerd",
             "description": "Dit artikel is gepubliceerd.",
        @@ -3371,7 +3486,7 @@ 

        4.3.4. string

        String velden worden gebruikt voor tekst, enums, tijd, datum en binary data. - Waarden in een string veld moeten standaard worden geinterpreteerd als van een string type zoals een SQL TEXT. + Waarden in een string veld moeten standaard worden geinterpreteerd als van een string type zoals een SQL TEXT.
        "beschrijving": {
             "title": "Beschrijving",
             "description": "Beschrijving van het pand.",
        @@ -3399,7 +3514,7 @@ 

        Wanneer in een text veld een beperkte set waarden is toegestaan door middel van het enum attribuut, zou het veld moeten worden geinterpreteerd als een enumerator type zoals een SQL ENUM.

        - Dit veld zou moeten worden geinterpreteerd als een enumerator zoals een SQL ENUM. + Dit veld zou moeten worden geinterpreteerd als een enumerator zoals een SQL ENUM.
        "beroep": {
             "title": "beroep",
             "description": "Beroep van de persoon.",
        @@ -3410,7 +3525,7 @@ 

        Een text veld met contentEncoding gelijk aan "base64" zou moeten worden geinterpreteerd als binary data.

        - Dit veld zou moeten worden geinterpreteerd als binary data, zoals een SQL VARBINARY. + Dit veld zou moeten worden geinterpreteerd als binary data, zoals een SQL VARBINARY.
        "hash": {
             "title": "hash",
             "description": "SHA512 hash",
        @@ -3422,7 +3537,7 @@ 

        Wanneer een maxLength attribuut is meegegeven aan een string veld zou het veld moeten worden geinterpreteerd als een fixed width binary type zoals een SQL BINARY, met maxLength=4*ceil(bytes/3).

        - Dit veld zou moeten worden geinterpreteerd als fixed length binary data, zoals een SQL BINARY. + Dit veld zou moeten worden geinterpreteerd als fixed length binary data, zoals een SQL BINARY.
        "hash": {
             "title": "hash",
             "description": "SHA512 hash",
        @@ -3433,11 +3548,11 @@ 

        4.3.5. tijd

        - Met het format attribuut kan een string veld worden geformatteerd als tijds of datum eenheid. Een string veld met een format gelijk aan "time", "date", "date-time" of "duration" zou moeten worden geinterpreteerd als een [ISO8601] conform Datum of tijd type zoals een SQL DATE, TIME of DATETIME. + Met het format attribuut kan een string veld worden geformatteerd als tijds of datum eenheid. Een string veld met een format gelijk aan "time", "date", "date-time" of "duration" zou moeten worden geinterpreteerd als een [ISO8601] conform Datum of tijd type zoals een SQL DATE, TIME of DATETIME.

        Note: De maximale precisie van de tijdseenheden is microseconde.

        Note: Bij een "date-time" wordt aangeraden om een tijdszone op te geven. Wanneer de tijdszone ontbreekt wordt een data-kwaliteit waarschuwing gegeven.

        - Dit veld zou moeten worden geinterpreteerd als een [ISO8601] Datum type in het format YYYY-MM-DD, zoals een SQL DATE. + Dit veld zou moeten worden geinterpreteerd als een [ISO8601] Datum type in het format YYYY-MM-DD, zoals een SQL DATE.
        "publicatieDatum": {
             "title": "publicatie datum",
             "description": "Datum van publicatie",
        @@ -3447,7 +3562,7 @@ 

        - Dit veld zou moeten worden geinterpreteerd als een [ISO8601] conform tijd type, zoals een SQL TIME. + Dit veld zou moeten worden geinterpreteerd als een [ISO8601] conform tijd type, zoals een SQL TIME.
        "publicatieTijd": {
             "title": "publicatie tijd",
             "description": "Tijd van publicatie",
        @@ -3457,7 +3572,7 @@ 

        - Dit veld zou moeten worden geinterpreteerd als een [ISO8601] conform datum-tijd type, zoals een SQL DATETIME. + Dit veld zou moeten worden geinterpreteerd als een [ISO8601] conform datum-tijd type, zoals een SQL DATETIME.
        "tijdEnDatumVanPublicatie": {
             "title": "Tijd en datum van publicatie",
             "description": "Tijd en datum van publicatie",
        @@ -3467,7 +3582,7 @@ 

        - Dit veld zou moeten worden geinterpreteerd als een [ISO8601] conform tijdsduur type, zoals een postgreSQL INTERVAL. + Dit veld zou moeten worden geinterpreteerd als een [ISO8601] conform tijdsduur type, zoals een postgreSQL INTERVAL.
        "duur": {
             "title": "Evenements duur",
             "description": "Tijdsduur dat het evenement open is voor publiek.",
        @@ -3479,9 +3594,9 @@ 

        4.3.6. geometrie

        Een geometrie veld wordt gedefinieerd als een verwijzing naar de relevante GeoJSON Schema definitie. Alle GeoJSON geometrie typen (Point, Polygon, Line String, Multi Point, Multi LineString, - en Multi Polygon) worden ondersteund. + en Multi Polygon) worden ondersteund.
        - Voorbeeld van een geometrie veld. + Voorbeeld van een geometrie veld.
              "lokatie": {
                 "title": "Lokatie",
                 "description": "Coordinaten van het middelpunt van het plein",
        @@ -3499,7 +3614,7 @@ 

        crs attribuut.

        Voorbeeld van een tabel met meerdere geometrie velden. Het veld "locatie" is hier als primaire geometrie - aangegeven in "mainGeometry". + aangegeven in "mainGeometry".
        {  "id": "pleinen",  "type": "table",  "title": "Pleinen",  "version": "1.0.0",  "description": "Pleinen van amsterdam. (Een voorbeeld tabel met geometrie velden)",  "mainGeometry": "lokatie",  "schema": {    "$schema": "http://json-schema.org/draft-07/schema#",    "type": "object",    "required": [      "id",      "schema"    ],    "display": "id",    "properties": {      "schema": {        "$ref": "https://schemas.data.amsterdam.nl/schema@v1.1.1#/definitions/schema"      },      "id": {        "type": "string",        "description": "Unieke aanduiding van het plein"      },      "naam": {        "type": "string",        "description": "Naam van het plein"      },      "lokatie": {        "title": "Lokatie",        "description": "Coordinaten van het middelpunt van het plein",        "$ref": "https://geojson.org/schema/Point.json"      },      "contour": {        "title": "Contour",        "description": "Polygoon van de contour van het plein.",        "$ref": "https://geojson.org/schema/Polygon.json"      }    }  }}

        4.3.7. object

        @@ -3507,11 +3622,11 @@

        format json mag willekeurige JSON-data bevatten. Alle overige objectenvelden moeten een attribuut properties bezitten waarin de structuur van de waarden in het veld wordt vastgelegd. - Het properties attribuut is een object met daarin de veld definities van de eigenschappen van de datawaarden. + Het properties attribuut is een object met daarin de veld definities van de eigenschappen van de datawaarden.

        Note: Het properties attribuut moet geen object of array velden bevatten. Geneste data is in een gestructureerd object veld niet toegestaan.

        - Een voorbeeld van een object veld. + Een voorbeeld van een object veld.
        "adres": {
             "title": "Adres",
             "description": "Het adres.",
        @@ -3552,13 +3667,13 @@ 

        object veld.

        4.3.8. array

        Een veld van type array kan meerdere elementen van hetzelfde type bevatten, met mogelijke duplicatie. - Een array veld moet een items attribuut hebben, dit moet een veld object zijn. + Een array veld moet een items attribuut hebben, dit moet een veld object zijn.

        Note: De optie van een items array uit de JSON Schema specificatie wordt niet ondersteund. Een array kan dus slechts één type waarde bevatten (geen UNION types).

        -

        Het items attribuut is een veld object, maar de meta-data attributen title, description, auth, provenance, shortname en relation hebben in items geen effect en zouden moeten worden weggelaten.

        +

        Het items attribuut is een veld object, maar de meta-data attributen title, description, auth, provenance, shortname en relation hebben in items geen effect en zouden moeten worden weggelaten.

        Note: Een array van arrays is niet toegestaan. Dus items mag zelf niet het type array hebben.

        - Een array van integers. + Een array van integers.
        "weeknummers": {
             "title": "weeknummers",
             "description": "Weeknummers.",
        @@ -3572,7 +3687,7 @@ 

        - Een array van objecten. + Een array van objecten.
        "metingen": {
             "title": "metingen",
             "description": "Uitgevoerde metingen.",
        @@ -3601,7 +3716,7 @@ 

        relation attribuut van een veld kunnen relaties tussen tabellen worden gedefinieerd. Dit kan zowel een relatie tussen tabellen in één dataset als tussen tabellen in verschillende datasets zijn. Met het relation-attribuut wordt verwezen naar het identifierveld van de andere tabel. -Dit is vergelijkbaar met een foreign key relatie in SQL. +Dit is vergelijkbaar met een foreign key relatie in SQL.

        Het attribuut relation moet altijd een string bevatten van de vorm "<dataset-id>:<tabel-id>". Van de waarden in een relation veld wordt verwacht dat ze gelijk zijn aan @@ -3613,7 +3728,7 @@

        Voorbeeld van een relatie veld voor een enkelvoudige relatie met de tabel "meetbouten" in de - dataset "meetbouten". + dataset "meetbouten".
        "hoortBijMeetbout": {
             "title": "hoort bij meetbout",
             "description": "De meetbout waarop de meting is gedaan."
        @@ -3628,7 +3743,7 @@ 

        properties bevatten, met namen en types die overeenkomen met de identifier en de temporal van het object waarnaar verwezen wordt.

        Voorbeeld van een relatie veld voor een enkelvoudige relatie met de temporele tabel "wijken" in de - dataset "gebieden". + dataset "gebieden".
        "ligtInWijk": {
             "title": "ligt in wijk",
             "description": "De wijk waar de buurt in ligt.",
        @@ -3648,7 +3763,7 @@ 

        Voor meervoudige (Many-To-Many) relaties wordt een array veld gebruikt met een relation attibuut.

        Voorbeeld van een relatieveld voor een meervoudige relatie met de tabel "referentiepunten" - in de dataset "meetbouten". + in de dataset "meetbouten".
        "refereertAanReferentiepunten": {
             "shortname": "referentiepunten",
             "title": "refereert aan referentiepunten",
        @@ -3663,7 +3778,7 @@ 

        Voorbeeld van een relatieveld voor een meervoudige relatie met een temporele tabel "panden" - in de dataset "bag". + in de dataset "bag".
        "ligtInPanden": {
             "title": "ligt in panden",
             "relation": "bag:panden",
        @@ -3700,46 +3815,44 @@ 

        4.5. - -
        type - string - de eenheidscodering + type + string + de eenheidscodering
        value - string - de eenheid + value + string + de eenheid
        "unit": {"type": "ucum", "value": "{EUR}/h"}
         

        Zo kunnen ook andere eenheidscoderingen gebruikt worden.

        "unit": {"type": "pint", "value": "meter"}
         
        -

        Best Practice Gebruik de UCUM-standaard om eenheden te coderen. Niet-standaard-coderingssystemen worden afgeraden.
        -

        5. Naamgeving

        De data die in Amsterdam Schema wordt beschreven wordt publiek ontsloten en heeft veel externe afnemers. Het is dus heel belangrijk dat naamgeving correct, helder en eenduidig is, ook voor mensen die niet dagelijks met deze gegevens werken. Amsterdam Schema is ontworpen om door automatische systemen verwerkt te kunnen worden, ook daarom is het belangrijk dat de naamgeving -aan een strak stramien voldoet. +aan een strak stramien voldoet.

        Namen van datasets, tabellen en velden moeten:

          -
        • 1. gebruik maken van camelCase. +
        • 1. gebruik maken van camelCase.
        • 2. geen afkortingen of afbrekingen bevatten. -
        • 3. bestaan uit zelfstandige naamwoorden (met uitzondering van de namen van relatievelden). -
        • 4. uniek zijn binnen hun scope. (respectievelijk: De hele catalogus, de dataset of de tabel) +
        • 3. bestaan uit zelfstandige naamwoorden (met uitzondering van de namen van relatievelden). +
        • 4. uniek zijn binnen hun scope. (respectievelijk: De hele catalogus, de dataset of de tabel)
        - De namen van tabellen (zoals gegeven in id) en velden worden onderdeel van de URI waarop deze entiteiten ontsloten worden, en moeten daarom aan extra eisen voldoen. -

        5. Namen van tabellen moeten in meervoudsvorm zijn, behalve als sprake is van een enkelvoudige entiteit. Conform REST-API Design Rules § api-54.

        -

        6. Namen van velden moeten geen herhaling van de tabel naam bevatten. (Dus niet container.containerNummmer, maar container.nummer.)

        + De namen van tabellen (zoals gegeven in id) en velden worden onderdeel van de URI waarop deze entiteiten ontsloten worden, en moeten daarom aan extra eisen voldoen. +

        5. Namen van tabellen moeten in meervoudsvorm zijn, behalve als sprake is van een enkelvoudige entiteit. Conform REST-API Design Rules § api-54.

        +

        6. Namen van velden moeten geen herhaling van de tabel naam bevatten. (Dus niet container.containerNummmer, maar container.nummer.)

        Note: Gebruik duidelijke en begrijpelijke namen voor zowel datasets, tabellen als velden. De data wordt onsloten op een publieke API, dus de naamgeving moet zonder veel uitleg duidelijk zijn voor externe afnemers.

        5.1. Shortname

        Te lange namen in het schema kunnen problemen geven bij het aanmaken van tabellen en kolommen op basis van het schema. -PostgreSQL staat bijvoorbeeld niet meer dan 63 tekens toe voor tabelnamen. +PostgreSQL staat bijvoorbeeld niet meer dan 63 tekens toe voor tabelnamen.

        Op zowel tabel als veld niveau is het mogelijk om een alternatieve verkorte naam op te geven met het attribuut shortname. Het shortname attribuut mag wel afkortingen bevatten (regel 2 geldt niet) maar moet verder aan dezelfde eisen voldoen als de naam die erdoor wordt afgekort.

        - Gebruik van shortname in een tabel. + Gebruik van shortname in een tabel.
        {
             "id": "maatschappelijkeActiviteiten",
             "shortname": "activiteiten",
        @@ -3749,7 +3862,7 @@ 

        - Gebruik van shortname in een veld. + Gebruik van shortname in een veld.
        "registratieTijdstipMaatschappelijkeActiviteit": {
             "shortname": "registratieTijdstip",
             "type": "string",
        @@ -3760,101 +3873,98 @@ 

        6. Publisher

        Een publisher definitie bevat een publisher object. Deze word onder andere gebruikt voor billing en tagging van resources die via het amsterdam schema worden aangevraagd.

        +
        + Voorbeeld van een publisher object. +
        {
        +  "id": "NOBODY",
        +  "type": "publisher"
        +  "name": "Datateam Nobody",
        +  "shortname": "nobody",
        +  "tags": {
        +    "costcenter": "00000000.0000"
        +    "team": "nobody",
        +  },
        +}
        +
        +

        6.1. Verplichte attributen

        - Een publisher binnen Amsterdam Schema is een JSON object met in ieder geval de volgende attributen. + Een publisher binnen Amsterdam Schema is een JSON object met in ieder geval de volgende attributen. - - - - -
        id - identifier - Identifier van de publisher. Moet globaal uniek zijn en gelijk aan de file waarin het publisher object is opgeslagen. + id + identifier + Identifier van de publisher. Moet globaal uniek zijn en gelijk aan de file waarin het publisher object is opgeslagen.
        type - constante - Type van dit bestand, in dit geval "publisher". + type + constante + Type van dit bestand, in dit geval "publisher".
        name - string - Naam van de publisher. + name + string + Naam van de publisher.
        shortname - resource-identifier - Verkorte naam van de publisher (voor resources). + shortname + resource-identifier + Verkorte naam van de publisher (voor resources).
        tags - object + tags + object - Labels met metagegevens die aan resources van deze publisher moeten worden gehangen. + Labels met metagegevens die aan resources van deze publisher moeten worden gehangen.
        Valide elementen - -
        costcenter - REQUIRED - string - Costcenter tag van de publisher + costcenter + REQUIRED + string + Costcenter tag van de publisher
        team + team - string - Team tag van de publisher + string + Team tag van de publisher
        -

        7. Generieke attributen

        - Deze attributen kunnen op elk niveau bestaan. -

        7.1. Omschrijving

        -

        Op elk niveau kan een semantische omschrijving toegevoegd worden d.m.v. de attributen title en description.

        +

        7. Autorisatie

        +

        Confirm the Wet Open Overheid (Woo) zijn gegevens standaard openbaar. +Er zijn twee mechanismen om de toegang te beperken en authorisatie in te regelen:

        +
          +
        1. +

          De "auth"-attributen in het Amsterdam-schema beperken de toegang. zie § 7.2 Auth-attributen.

          +
        2. +

          De profielen geven grunulair toegang op basis van een gebruikersprofiel. zie § 7.3 Profielen.

          +
        +

        Beide mechanismen gebruiken doorvoor scopes om te koppelen met gebruikersgroepen in de bestaande architectuur. +Deze scopes worden bijvoorbeeld verkregen vanuit een bestaande OAuth-flow die een JSON Web Token (JWT) aanbiedt.

        +

        7.1. Scopes

        +

        Een scope is een groep gebruikers (medewerkers) met gedeelde rechten. Een gebruiker kan meerdere scopes hebben. +Een scope is een string bestaande uit een reeks lower of uppercase letters eventueel gescheiden door een forward slash (/), +bijvoorbeeld "BRP/RO".

        +

        7.2. Auth-attributen

        +

        Op zowel dataset, tabel als veld niveau kan een "auth"-attribuut worden meegegeven om toegang tot een entitieit te beperken.

        - -
        title - (string) - Naam van dit item. -
        description - (string) - Beschrijving van dit item, vrije tekst. Mag escape characters zoals newlines bevaten. -
        -

        De title kan bijvoorbeeld in frontendapplicaties worden gebruikt als label voor een invoerveld. -Het description veld is bedoeld voor bijvoorbeeld contextmenu’s (mouseover) bij een invoerveld of voor informatievelden.

        -
        - title en description van een Dataset. -
          "title": "Bekende Amsterdammers",
        -  "description": "Bekende historische personen die in Amsterdam hebben gewoond.\n (Een voorbeeld dataset)",
        -
        -
        -
        - title en description van een Tabel. -
          "title": "Locaties",
        -  "description": "Adressen in Amsterdam geassocieerd met een bekende Amsterdammer. \nBijvoorbeeld een voormalige woon of verblijfplaats",
        -
        -
        -
        - title en description in een Veld. -
                  "Geboorteadres",
        -          "Werkplaats",
        -
        -
        -

        Note: Als een veld geen title-attibuut heeft, wordt de naam van het veld gebruikt.

        -

        7.2. Autorisatie

        -

        Op zowel dataset, tabel als veld niveau kan een "auth"-attribuut worden meegegeven om toegang tot een entitieit te beperken.

        - - + -
        auth + string | array + geautoriseerde scope(s).
        auth - string | array - geautoriseerde scope(s). + reasonsNonPublic + array(nonPubReason) + een of meer gronden voor het niet openbaar maken van data obv uitzonderingen in Hoofdstuk 5 van de [Woo]. + Verplicht op het eerste niveau waar de "auth" niet gelijk is aan "OPENBAAR".
        -

        Het "auth"-attribuut bevat één of meer scopes, die leesrechten hebben op de entiteit waarop "auth" is gedefinieerd. -Een scope is een groep gebruikers (medewerkers) met gedeelde rechten. Een gebruiker kan meerdere scopes hebben.

        -

        Een scope is een string bestaande uit een reeks lower of uppercase letters eventueel gescheiden door een forward slash (/).

        +

        Het "auth"-attribuut bevat één of meer scopes, die leesrechten hebben op de entiteit waarop "auth" is gedefinieerd.

        +

        7.2.1. Meerdere scopes

        Als het "auth"-attribuut een array bevat is elke scope in de array afzonderlijk geautoriseerd. -Dus een gebruiker heeft slechts één van de scopes in een array nodig voor toegang.

        +Dus een gebruiker heeft slechts één van de scopes in een array nodig voor toegang.

        - Voorbeeld van een "auth" array op een veld. - Zowel scope "LEVEL/X" als scope "LEVEL/Y" toegang tot het veld. Een gebruiker hoeft niet beide scopes te bezitten. + Voorbeeld van een "auth" array op een veld. + Zowel scope "LEVEL/X" als scope "LEVEL/Y" toegang tot het veld. Een gebruiker hoeft niet beide scopes te bezitten.
        "aantalDuivenOpDeDam": {
             "title": "aantal duiven op de Dam",
             "description": "Het gemeten aantal duiven op de de Dam",
        @@ -3863,70 +3973,265 @@ 

        auth attribuut verplicht. Bij een openbare dataset krijgt het auth attribuut -de waarde "OPENBAAR".

        -

        Als een tabel geen "auth" attribuut heeft is de scope van de tabel gelijk aan die van de dataset.

        -

        Als een veld geen "auth" attribuut heeft is de scope van het veld gelijk aan die van de tabel.

        -

        Op het eerste niveau waarop data niet openbaar wordt gemaakt moet met ingang van 1 mei 2022 een '"reasonsNonPublic"' attribuut bestaan. +

        7.2.2. Meerdere niveau’s

        +

        Op dataset niveau is het auth attribuut verplicht. +Bij een openbare dataset krijgt het auth attribuut de waarde "OPENBAAR".

        +

        Als een tabel geen "auth" attribuut heeft, is de scope van de tabel gelijk aan die van de dataset.

        +

        Als een veld geen "auth" attribuut heeft, is de scope van het veld gelijk aan die van de tabel.

        +

        Om toegang tot een veld te krijgen, moet de gebruiker op alle niveau’s toegang krijgen; op veld-, tabel- en datasetniveau.

        +

        Op het eerste niveau waarop data niet openbaar wordt gemaakt moet een "reasonsNonPublic"-attribuut bestaan. Dus als een dataset openbaar is, maar deze een tabel bevat waarop een auth attribuut met een andere waarde dan "OPENBAAR" bestaat. Moet in de betreffende tabel of tabellen een reasonsNonPublic attribuut bestaan.

        -
        - In dit voorbeeld vindt autorisatie plaats op 3 niveaus. -Scope "LEVEL/A" heeft dataset level autorisatie op gebieden, scope "LEVEL/B" heeft tabel level autorisatie op bouwblokken en scope "LEVEL/C" heeft autorisatie op veld beginGeldigheid. +
        + In dit voorbeeld vindt autorisatie plaats op 3 niveaus. +Scope "LEVEL/A" heeft dataset level autorisatie op gebieden, scope "LEVEL/B" heeft tabel level autorisatie op bouwblokken en scope "LEVEL/C" heeft autorisatie op veld beginGeldigheid.
        • -

          Een user met scope "LEVEL/A" mag alles uit de dataset gebieden zien, behalve tabel bouwblokken.

          +

          Een user met scope "LEVEL/A" mag alles uit de dataset gebieden zien, behalve tabel bouwblokken.

        • -

          Een user met scope "LEVEL/B" mag alle velden van tabel bouwblokken zien, behalve beginGeldigheid.

          +

          Een user met scope "LEVEL/A" en "LEVEL/B" mag alle velden van tabel bouwblokken zien, behalve beginGeldigheid.

        • -

          Een user met scope "LEVEL/C" mag veld beginGeldigheid zien.

          +

          Een user met scope "LEVEL/A" en "LEVEL/B" en "LEVEL/C" mag het veld beginGeldigheid ook zien.

        -
        {    "type": "dataset",    "id": "gebieden",    "title": "gebieden",    "auth": "LEVEL/A",    "status": "beschikbaar",    "crs": "EPSG:28992",    "tables": [        {        "id": "bouwblokken",        "mainGeometry": "geometrie",        "type": "table",        "version": "1.0.0",        "auth": "LEVEL/B",        "schema": {            "$id": "https://github.com/Amsterdam/schemas/gebieden/bouwblokken.json",            "$schema": "http://json-schema.org/draft-07/schema#",            "type": "object",            "additionalProperties": false,            "identifier": ["id"],            "required": ["schema", "id"],            "display": "id",            "properties": {            "schema": {                "$ref": "https://schemas.data.amsterdam.nl/schema@v1.1.1#/definitions/schema"            },            "id": {                "type": "string",                "description": "Unieke identificatie voor dit object, inclusief volgnummer"            },            "beginGeldigheid": {                "type": "string",                "format": "date",                "title": "Begin geldigheid",                "description": "De datum waarop het object is gecreëerd.",                "auth": "LEVEL/C"            },            "eindGeldigheid": {                "type": "string",                "format": "date",                "title": "Eind geldigheid",                "description": "De datum waarop het object is komen te vervallen.",                "provenance": "eindgeldigheid"            },            "ligtInBuurt": {                "type": "string",                "relation": "gebieden:buurten",                "provenance": "ligtinbuurt",                "title": "Ligt in buurt",                "description": "De buurt waar het bouwblok in ligt."            }            }        }        }    ]}
        +
        {    "type": "dataset",    "id": "gebieden",    "title": "gebieden",    "auth": "LEVEL/A",    "reasonsNonPublic": [        "5.1 1b: Gevaar voor staatsveiligheid"    ],    "status": "beschikbaar",    "crs": "EPSG:28992",    "tables": [        {            "id": "bouwblokken",            "mainGeometry": "geometrie",            "type": "table",            "version": "1.0.0",            "auth": "LEVEL/B",            "schema": {                "$id": "https://github.com/Amsterdam/schemas/gebieden/bouwblokken.json",                "$schema": "http://json-schema.org/draft-07/schema#",                "type": "object",                "additionalProperties": false,                "identifier": ["id"],                "required": ["schema", "id"],                "display": "id",                "properties": {                    "schema": {                        "$ref": "https://schemas.data.amsterdam.nl/schema@v1.1.1#/definitions/schema"                    },                    "id": {                        "type": "string",                        "description": "Unieke identificatie voor dit object, inclusief volgnummer"                    },                    "beginGeldigheid": {                        "type": "string",                        "format": "date",                        "title": "Begin geldigheid",                        "description": "De datum waarop het object is gecreëerd.",                        "auth": "LEVEL/C"                    },                    "eindGeldigheid": {                        "type": "string",                        "format": "date",                        "title": "Eind geldigheid",                        "description": "De datum waarop het object is komen te vervallen.",                        "provenance": "eindgeldigheid"                    },                    "ligtInBuurt": {                        "type": "string",                        "relation": "gebieden:buurten",                        "provenance": "ligtinbuurt",                        "title": "Ligt in buurt",                        "description": "De buurt waar het bouwblok in ligt."                    }                }            }        }    ]}
        +
        +

        7.3. Profielen

        +

        Waar een "auth"-attribuut de toegang ontzegt, geeft een profiel gralunair toegang onder voorwaarden. +Een profiel wordt alleen toegepast als er geen authorisatie verkregen is via de "auth"-attributen.

        +
        + Voorbeeld van een profiel, wat het functieprofiel "parkeerwachter" toegang geeft tot "parkeervakken". +
        {
        +    "id": "parkeerwachter",
        +    "type": "profile",
        +    "name": "Parkeerwacht toegang",
        +    "scopes": ["FP/PARKEERWACHTER"],
        +    "datasets": {
        +        "parkeervakken": {
        +            "tables": {
        +                "parkeervakken": {
        +                    "permissions": "read",
        +                }
        +            }
        +        }
        +    }
        +}
        +
        +
        +

        Een profiel kan toegang geven op dataset-, tabel- en veldniveau. +Daarbij kan ook een zoekvraag ("mandatoryFilterSets") verplicht zijn om toegang te krijgen.

        +
        + Voorbeeld van een profiel wat slechts toegang geeft tot een paar velden, en een zoekvraag verplicht. +
        {
        +    "id": "parkeerwachter",
        +    "type": "profile",
        +    "name": "Parkeerwacht toegang beperkt",
        +    "scopes": ["FP/PARKEERWACHTER-B"],
        +    "datasets": {
        +        "parkeervakken": {
        +            "tables": {
        +                "parkeervakken": {
        +                    "fields": {
        +                        "type": "read",
        +                        "grootte": "read",
        +                        "opmerking": "letters:10",
        +                    },
        +                    "mandatoryFilterSets": [
        +                        ["id", "volgnummer"],
        +                        ["buurtcode", "type"],
        +                    ],
        +                }
        +            }
        +        }
        +    }
        +}
        +
        +
        +

        7.4. Verplichte attributen

        + Een profiel binnen Amsterdam Schema is een JSON object met in ieder geval de volgende attributen. + + + + + + + +
        id + identifier + Identifier van de publisher. Moet globaal uniek zijn en gelijk aan de file waarin het publisher object is opgeslagen. +
        type + constante + Type van dit bestand, in dit geval "profile". +
        name + string + Naam van het gebruikersprofiel. +
        scopes + resource-identifier + De geautoriseerde scope(s) die de gebruiker moet hebben om dit profiel te activeren. +
        datasets + object + Mapping van alle datasets, waarbij iedere sleutel verwijst naar het id van een dataset. +
        +

        Iedere dataset in een profiel kan de volgende waarden bevatten:

        + + + + +
        permissions + string + De waarde "read" voor leestoegang. +
        tables + object + Een mapping van tabellen, waarbij iedere sleutel verwijst naar het id van een tabel. +
        +

        Iedere tabel in een profiel kan over de volgende waarden bevatten:

        + + + + + +
        permissions + string + De waarde "read" voor leestoegang. +
        fields + object + Een mapping van velden, waarbij iedere sleutel verwijst naar het id van een veld. +
        mandatoryFilterSets + array + Een array van tuples met verplichte zoekvelden. +
        +

        Ieder veld in een profiel kan over de volgende waarden bevatten:

        + + + +
        permissions + string + Het toegangsniveau tot het veld. + Mogelijke waarden: "read" voor leestoegang, "letters:##" geeft toegang tot de eerste aantal karakters van het veld. +
        +

        7.4.1. Verplichte zoekvragen

        +

        De mandatoryFilterSets verplicht het gebruik van een zoekvraag om de tabel te raadplegen. +De waarde bevat een lijst van mogelijke toegestane vragen. +Operatoren zijn alleen toegestaan als deze letterlijk opgegeven worden, bijvoorbeeld "regimes.aantal[gte]".

        +
        + Voorbeeld van verplicht zoeken op id+volgnummer óf buurtcode+type. + In een REST API betekend dit bijvoorbeeld dat de resource alleen inzichtelijk is + met de zoekvraag ?id=...&amp;volgnummer=... óf ?buurtcode=...&amp;type=.... +
        "mandatoryFilterSets": [
        +    ["id", "volgnummer"],
        +    ["buurtcode", "type"]
        +]
        +
        +
        +

        7.4.2. Toegangsregels

        +

        Een gebruiker heeft toegang tot een dataset indien deze:

        +
          +
        • +

          Toegang krijgt via "auth" regel.

          +
        • +

          Of een profiel heeft met "permissions": "read" op dataset niveau.

          +
        +

        Een gebruiker heeft toegang tot een tabel indien deze:

        +
          +
        • +

          Toegang krijgt via "auth" regels op de tabel én dataset.

          +
        • +

          Of volledige toegang heeft tot de dataset door middel van een profiel met "permissions": "read" op dataset niveau.

          +
        • +

          Of een profiel heeft met "permissions": "read" op tabel niveau, én voldoet aan de mandatoryFilterSets indien deze aanwezig zijn. +Toegang tot het openen van dataset wordt daarmee impliciet verkregen.

          +
        +

        Een gebruiker heeft toegang tot een veld indien deze:

        +
          +
        • +

          Toegang krijgt via "auth" regels op de dataset, tabel én het veld.

          +
        • +

          Of volledige toegang heeft tot de dataset door middel van een profiel met "permissions": "read" op dataset niveau.

          +
        • +

          Of volledige toegang heeft tot een tabel door middel van een profiel heeft met "permissions": "read" op het tabel niveau, waarbij de de mandatoryFilterSets voldaan zijn indien deze aanwezig zijn.

          +
        • +

          Of een profiel heeft met "permissions" op het veld niveau, én voldoet aan de mandatoryFilterSets vam de tabel indien deze aanwezig zijn. +Toegang tot het openen van de dataset en tabel wordt daarmee impliciet verkregen.

          +
        +

        8. Generieke attributen

        + Deze attributen kunnen op elk niveau bestaan. +

        8.1. Omschrijving

        +

        Op elk niveau kan een semantische omschrijving toegevoegd worden d.m.v. de attributen title en description.

        + + + + +
        title + (string) + Naam van dit item. +
        description + (string) + Beschrijving van dit item, vrije tekst. Mag escape characters zoals newlines bevaten. +
        +

        De title kan bijvoorbeeld in frontendapplicaties worden gebruikt als label voor een invoerveld. +Het description veld is bedoeld voor bijvoorbeeld contextmenu’s (mouseover) bij een invoerveld of voor informatievelden.

        +
        + title en description van een Dataset. +
          "title": "Bekende Amsterdammers",
        +  "description": "Bekende historische personen die in Amsterdam hebben gewoond.\n (Een voorbeeld dataset)",
        +
        +
        +
        + title en description van een Tabel. +
          "title": "Locaties",
        +  "description": "Adressen in Amsterdam geassocieerd met een bekende Amsterdammer. \nBijvoorbeeld een voormalige woon of verblijfplaats",
        +
        +
        +
        + title en description in een Veld. +
                  "Geboorteadres",
        +          "Werkplaats",
        +
        -

        7.3. Provenance

        +

        Note: Als een veld geen title-attibuut heeft, wordt de naam van het veld gebruikt.

        +

        8.2. Provenance

        Provenance als veld wordt gebruikt om programmatisch informatie op te slaan over de oorsprong van bepaalde data.

        In beperkte vorm kan provenance ook gebruikt worden om automatisch verwerking van brongegevens in andere formaten te bewerkstelligen.

        Provenance is beschikbaar op zowel dataset-, tabel- als veld-niveau. Het is een vrij veld maar door een object met 'type' te specificeren kunnen specifieke machine readable profielen geactiveerd worden t.b.v. automatische bronverwerking

        -

        7.3.1. Vrije invoer

        +

        8.2.1. Vrije invoer

        Dataset: "provenance": "Deze dataset wordt handmatig verwerkt door ..."

        Tabel: "provenance": "Deze tabel is gebaseerd op een CSV bestand aangeleverd door ..."

        Veld: "provenance": "Ontbrekende IDs zijn m.b.v TextEdit vervangen door UUID hashes van de naam in UTF-8."

        -

        7.3.2. Postgres

        +

        8.2.2. Postgres

        Dataset: "provenance": { "type": "postgres", "schema": "ruimte" }

        Tabel: "provenance": { "table": "verhardingen" }

        Veld: "provenance": { "field": "lengte_m", "type": "NUMERIC(10,2)"}

        -

        7.3.3. Shapefile

        +

        8.2.3. Shapefile

        Dataset: "provenance": { "type": "shapefile"}

        Tabel: "provenance": { "file": "asbestdaken_daken.zip" }

        Veld: "provenance": { "field": "perceel_id"}

        -

        8. Attribuuttypen

        +

        9. Attribuuttypen

        - - - - - - - - -
        identifier - string - Een unieke identifier in de vorm van één of meer letters, startend met een kleine letter en eventueel gevolgd door een cijferreeks. + identifier + string + Een unieke identifier in de vorm van één of meer letters, startend met een kleine letter en eventueel gevolgd door een cijferreeks.
        resource-identifier - string - Een unieke identifier in de vorm van één tot en met twaalf kleine letters. + resource-identifier + string + Een unieke identifier in de vorm van één tot en met twaalf kleine letters.
        date-time - (string) - Een als datetime geformatteerde string. Conform JSON Schema § rfc.section.7.3.1. + date-time + (string) + Een als datetime geformatteerde string. Conform JSON Schema § rfc.section.7.3.1.
        uri - (string) - Een als URI geformatteerde string. Conform JSON Schema § rfc.section.7.3.5. + uri + (string) + Een als URI geformatteerde string. Conform JSON Schema § rfc.section.7.3.5.
        uri-reference - (string) - Een als URI Reference geformatteerde string. Conform JSON Schema § rfc.section.7.3.5. + uri-reference + (string) + Een als URI Reference geformatteerde string. Conform JSON Schema § rfc.section.7.3.5.
        schema-type - (enum-string) + schema-type + (enum-string) - Het binnen Amsterdam Schema bekende JSON Schema type waaraan het object voldoet. + Het binnen Amsterdam Schema bekende JSON Schema type waaraan het object voldoet.
        Opties
          @@ -3939,10 +4244,10 @@

          8

        reden-niet-publiek - (enum-string) + reden-niet-publiek + (enum-string) - Grond voor het niet openbaar maken van data op basis van de uitzonderingen in Hoofdstuk 5 van de Wet Open Overheid (Woo). + Grond voor het niet openbaar maken van data op basis van de uitzonderingen in Hoofdstuk 5 van de Wet Open Overheid (Woo).

        Met "5.1 1a", wordt bedoeld Wet Open Overheid Artikel 5.1, eerste lid, onderdeel a. De beschrijvingen volgend op de wetsverwijzing zijn niet volledig en dienen slechts ter illustratie. Kijk voor de exacte definitie van een uitzondering in hoofdstuk 5 van de Woo.

        @@ -3950,47 +4255,47 @@

        8 Opties
        • -

          "5.1 1a: Gevaar voor eenheid van de Kroon",

          +

          "5.1 1a: Gevaar voor eenheid van de Kroon"

        • -

          "5.1 1b: Gevaar voor staatsveiligheid",

          +

          "5.1 1b: Gevaar voor staatsveiligheid"

        • -

          "5.1 1c: Vertrouwelijke of concurrentiegevoelige bedrijfs- en fabricagegegevens",

          +

          "5.1 1c: Vertrouwelijke of concurrentiegevoelige bedrijfs- en fabricagegegevens"

        • -

          "5.1 1d: Bevat persoonsgegevens",

          +

          "5.1 1d: Bevat persoonsgegevens"

        • -

          "5.1 1e: Bevat nationaal identificatienummer",

          +

          "5.1 1e: Bevat nationaal identificatienummer"

        • -

          "5.1 2a: Zwaarwegend belang: internationale betrekkingen",

          +

          "5.1 2a: Zwaarwegend belang: internationale betrekkingen"

        • -

          "5.1 2b: Zwaarwegende economische of financiële belangen van publiekrechtelijke lichamen (bevat geen mileu-informatie)",

          +

          "5.1 2b: Zwaarwegende economische of financiële belangen van publiekrechtelijke lichamen (bevat geen mileu-informatie)"

        • -

          "5.1 2b: Zwaarwegende economische of financiële belangen van publiekrechtelijke lichamen (bevat mileu-informatie met betrekking op handelingen met een vertrouwelijk karakter)",

          +

          "5.1 2b: Zwaarwegende economische of financiële belangen van publiekrechtelijke lichamen (bevat mileu-informatie met betrekking op handelingen met een vertrouwelijk karakter)"

        • -

          "5.1 2c: Zwaarwegend belang: opsporing en vervolging van strafbare feiten",

          +

          "5.1 2c: Zwaarwegend belang: opsporing en vervolging van strafbare feiten"

        • -

          "5.1 2d: Zwaarwegend belang: inspectie, controle en toezicht door bestuursorganen",

          +

          "5.1 2d: Zwaarwegend belang: inspectie, controle en toezicht door bestuursorganen"

        • -

          "5.1 2e: Zwaarwegend belang: eerbiediging van de persoonlijke levenssfeer",

          +

          "5.1 2e: Zwaarwegend belang: eerbiediging van de persoonlijke levenssfeer"

        • -

          "5.1 2f: Zwaarwegend belang: vertrouwelijke of concurrentiegevoelige bedrijfs- en fabricagegegevens",

          +

          "5.1 2f: Zwaarwegend belang: vertrouwelijke of concurrentiegevoelige bedrijfs- en fabricagegegevens"

        • -

          "5.1 2g: Zwaarwegend belang: bescherming van het milieu waarop deze informatie betrekking heeft",

          +

          "5.1 2g: Zwaarwegend belang: bescherming van het milieu waarop deze informatie betrekking heeft"

        • -

          "5.1 2h: Zwaarwegend belang: beveiliging van personen en bedrijven en het voorkomen van sabotage",

          +

          "5.1 2h: Zwaarwegend belang: beveiliging van personen en bedrijven en het voorkomen van sabotage"

        • -

          "5.1 2i: Zwaarwegend belang: het goed functioneren van de Staat, andere publiekrechtelijke lichamen of bestuursorganen",

          +

          "5.1 2i: Zwaarwegend belang: het goed functioneren van de Staat, andere publiekrechtelijke lichamen of bestuursorganen"

        • -

          "5.2 1: Bevat persoonlijke beleidsopvattingen (bevat geen milieu-informatie)",

          +

          "5.2 1: Bevat persoonlijke beleidsopvattingen (bevat geen milieu-informatie)"

        • -

          "5.2 4: Zwaarwegend belang: persoonlijke beleidsopvattingen (bevat milieu-informatie)",

          +

          "5.2 4: Zwaarwegend belang: persoonlijke beleidsopvattingen (bevat milieu-informatie)"

        • "nader te bepalen"

        - De laatste optie ("nader te bepalen") is niet toegestaan wanneer status="beschikbaar". + De laatste optie ("nader te bepalen") is niet toegestaan wanneer status="beschikbaar".

        version - (string) + version + (string) Version string van de vorm " @@ -4007,30 +4312,40 @@

        8

        contact - (object) + contact + (object) - Contactgegevens. Een object met de volgende optionele velden: + Contactgegevens. Een object met de volgende optionele velden:
        • -

          name (string) Naam van het contact

          +

          name (string) Naam van het contact

        • -

          email (string) Email adres van het contact

          +

          email (string) Email adres van het contact

        -

        9. Changelog

        +

        10. Changelog

        Dit is een chronologisch overzicht van aanpassingen aan de amsterdam-schema specificatie. Uitsluitend normatieve aanpassingen aan de specificatie worden vermeld. Aanpassingen aan voorbeelden, -waarschuwingen of uitleg verschijnen dus niet in dit overzicht. -

        9.1. [2.2.0] dataclass atribuut toegevoegd (2023-01-12)

        +waarschuwingen of uitleg verschijnen dus niet in dit overzicht. +

        10.1. [2.3.0] filterAuth attribuut toegevoegd (2025-01-12)

        -

        Doelstelling
        UItzonderingsgronden WOO in lijn gebracht met versie van WOO die nu van kracht is.

        +

        Doelstelling
        Betere afscherming van velden bij speciale zoekacties.

        +
        + +

        10.2. [2.2.0] dataclass attribuut toegevoegd (2023-01-12)

        +
        +

        Doelstelling
        Uitzonderingsgronden WOO in lijn gebracht met versie van WOO die nu van kracht is.

        -

        9.2. [2.1.5] dataclass atribuut toegevoegd (2023-01-10)

        +

        10.3. [2.1.5] dataclass attribuut toegevoegd (2023-01-10)

        Doelstelling
        Beschrijving en relatering van ongestructureerde data mogelijk maken.

        @@ -4040,7 +4355,7 @@

        9
      • Verwijzing Wet Open Overheid geupdate.

      -

      9.3. [2.1.4] Publishers zijn zelfstandige objecten geworden (2022-12-21)

      +

      10.4. [2.1.4] Publishers zijn zelfstandige objecten geworden (2022-12-21)

      Doelstelling
      Publishers zijn zelfstandige objecten geworden.

      @@ -4050,7 +4365,7 @@

      9
    • Het publisher object is toegevoegd.

      -

      9.4. [2.1.3] Auth attribuut verplicht op dataset niveau (2022-04-13)

      +

      10.5. [2.1.3] Auth attribuut verplicht op dataset niveau (2022-04-13)

      Doelstelling
      Alle datasets zijn openbaar tenzij obv de Wet Open Overheid. Maar om onbedoelde openbaarmaking te voorkomen, moet dit altijd expliciet @@ -4066,17 +4381,17 @@

      Het veld attribuut reasonsNonPublic is toegevoegd.

      -

      9.5. [2.1.2] Auth attribuut niet toegestaan bij identifier en display velden (2022-04-13)

      +

      10.6. [2.1.2] Auth attribuut niet toegestaan bij identifier en display velden (2022-04-13)

      Doelstelling
      De velden waar naar verwezen wordt in identifier en display moeten zichtbaar zijn voor iedereen -die toegang heeft tot de tabel. Deze velden mogen dus geen auth bevatten.

      +die toegang heeft tot de tabel. Deze velden mogen dus geen auth bevatten.

      • De velden waar naar verwezen wordt in de identifier en display attributen -mogen geen auth attribuut bevatten.

        +mogen geen auth attribuut bevatten.

      -

      9.6. [2.1.1] Crs attribuut verplicht bij geometrie velden (2022-03-23)

      +

      10.7. [2.1.1] Crs attribuut verplicht bij geometrie velden (2022-03-23)

      Doelstelling
      Het coordinaat referentie systeem van een dataset met geo data moet bekend zijn voor correct functioneren van doelsystemen.

      @@ -4085,7 +4400,7 @@

      crs veld is verplicht geworden wanneer één of meerdere tabellen een § 4.3.6 geometrie veld bevatten.

      -

      9.7. [2.1.0] Dataset contact gegevens (2022-03-17)

      +

      10.8. [2.1.0] Dataset contact gegevens (2022-03-17)

      Doelstelling
      Meerdere aanpassingen aan dataset velden voor contactgegevens. Met als doel om alle teams en organisaties die een rol hebben bij het ontsluiten van een dataset @@ -4113,16 +4428,16 @@

      attribute for dataset, in § 2.1
    • attribute for tabel, in § 3.2
    • attribute for veld, in § 4.2 -
    • definition of, in § 7.2 +
    • definition of, in § 7.2
    • authorizationGrantor, in § 2.1
    • camelCase, in § 5
    • $comment, in § 4.2 -
    • contact, in § 8 +
    • contact, in § 9
    • contactPoint
    • contentEncoding, in § 4.2 @@ -4137,6 +4452,7 @@

      dataclass, in § 3.2
    • dataset, in § 2.1 +
    • datasets, in § 7.4
    • dateCreated -
    • date-time, in § 8 +
    • date-time, in § 9
    • derivedFrom, in § 3.2
    • description @@ -4160,9 +4476,11 @@

      dimensions.geldigOp, in § 3.4
    • display, in § 3.3 -
    • email, in § 8 +
    • email, in § 9
    • enum, in § 4.2
    • exclusiveMaximum, in § 4.2 +
    • fields, in § 7.4 +
    • filterAuth, in § 4.2
    • format, in § 4.2
    • hasBeginning, in § 2.2.1
    • hasEnd, in § 2.2.1 @@ -4171,8 +4489,9 @@

      (typedef), in § 8 +
    • (typedef), in § 9
    • attribute for dataset, in § 2.1 +
    • attribute for profiel, in § 7.4
    • attribute for publisher, in § 6.1
    • attribute for tabel, in § 3.1
    • attribute for table-ref, in § 2.3 @@ -4183,7 +4502,7 @@

      attribute for schema, in § 3.3
    • attribute for temporal, in § 3.4 -
    • id-type, in § 8 +
    • id-type, in § 9
    • items, in § 4.2
    • keywords, in § 2.2.1
    • language, in § 2.2.1 @@ -4195,6 +4514,12 @@

      attribute for tabel, in § 3.2
    • mainGeometry, in § 3.3 +
    • + mandatoryFilterSets +
    • maximum, in § 4.2
    • maxLength, in § 4.2
    • minimum, in § 4.2 @@ -4203,16 +4528,25 @@

      attribute for contact, in § 8 +
    • attribute for contact, in § 9 +
    • attribute for profiel, in § 7.4
    • attribute for publisher, in § 6.1
    • noAbrev, in § 5 -
    • nonPubReason, in § 8 +
    • nonPubReason, in § 9
    • noRepeat, in § 5
    • nouns, in § 5
    • objective, in § 2.2.1
    • owner, in § 2.1 +
    • + permissions +
    • plural, in § 5 +
    • profiel, in § 7.4
    • properties
    • ref @@ -4250,8 +4585,8 @@

      relation, in § 4.2
    • required, in § 3.3 -
    • resource-identifier, in § 8 -
    • resource-identifier-type, in § 8 +
    • resource-identifier, in § 9 +
    • resource-identifier-type, in § 9
    • $schema, in § 3.3
    • schema @@ -4260,8 +4595,9 @@

      definition of, in § 3.3
    • schema-object, in § 3.3 -
    • schema-type, in § 8 -
    • scope, in § 7.2 +
    • schema-type, in § 9 +
    • scope, in § 7.1 +
    • scopes, in § 7.4
    • shortname -
    • uri-reference, in § 8 -
    • uri-type, in § 8 +
    • uri-reference, in § 9 +
    • uri-type, in § 9
    • value, in § 4.5
    • veld, in § 4.1
    • version -
    • version-string, in § 8 +
    • version-string, in § 9

      References

      Normative References

      @@ -4341,8 +4683,8 @@

      N
      SDOW best practices. URL: https://www.w3.org/TR/sdw-bp/
      [UCUM]
      The Unified Code for Units of Measure. URL: https://unitsofmeasure.org/ucum.html -
      [VOCAB-DCAT-2] -
      Riccardo Albertoni; et al. Data Catalog Vocabulary (DCAT) - Version 2. URL: https://w3c.github.io/dxwg/dcat/ +
      [VOCAB-DCAT-3] +
      Simon Cox; et al. Data Catalog Vocabulary (DCAT) - Version 3. URL: https://w3c.github.io/dxwg/dcat/

      Informative References

      @@ -4366,552 +4708,991 @@

      Het identifier veld moet string zijn. De array optie wordt binnenkort verwijderd.

    • Het is onduidelijk of unit in een array moet worden meegegeven in het items attribuut als veld.items.unit of in het hoofd object als veld.unit.

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + \ No newline at end of file + +// TODO: shared util +// Returns the root-level absolute position {left and top} of element. +function getBounds(el, relativeTo=document.body) { + const relativeRect = relativeTo.getBoundingClientRect(); + const elRect = el.getBoundingClientRect(); + const top = elRect.top - relativeRect.top; + const left = elRect.left - relativeRect.left; + return { + top, + left, + bottom: top + elRect.height, + right: left + elRect.width, + } +} + +function showRefHintListener(e) { + // If the target isn't in a link (or is a link), + // just ignore it. + let link = e.target.closest("a"); + if(!link) return; + + // If the target is in a ref-hint panel + // (aka a link in the already-open one), + // also just ignore it. + if(link.closest(".ref-hint")) return; + + // Otherwise, show the panel for the link. + showRefHint(link); +} + +function hideAllHintsListener(e) { + // If the click is inside a ref-hint panel, ignore it. + if(e.target.closest(".ref-hint")) return; + // Otherwise, close all the current panels. + hideAllRefHints(); +} + +document.addEventListener("DOMContentLoaded", () => { + document.body.addEventListener("mousedown", showRefHintListener); + document.body.addEventListener("focus", showRefHintListener); + + document.body.addEventListener("click", hideAllHintsListener); +}); + +window.addEventListener("resize", () => { + // Hide any open ref hint. + hideAllRefHints(); +}); +} +