-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathshacl.ttl
More file actions
1892 lines (1832 loc) · 95.3 KB
/
Copy pathshacl.ttl
File metadata and controls
1892 lines (1832 loc) · 95.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix schema: <https://schema.org/> .
@prefix dcat: <http://www.w3.org/ns/dcat#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix dc: <http://purl.org/dc/terms/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix nde-dataset: <https://def.nde.nl/dataset#> .
@prefix nde-probe: <https://def.nde.nl/probe#> .
@prefix nde: <https://def.nde.nl#> .
@prefix vcard: <http://www.w3.org/2006/vcard/ns#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
##
## Schema.org
##
#
# Class shapes
#
nde-dataset:DatacatalogShape
a sh:NodeShape ;
sh:targetSubjectsOf schema:dataset ;
sh:class schema:DataCatalog ;
rdfs:label "Datacatalogus"@nl, "Data catalog"@en ;
sh:description "Een datacatalogus bestaat uit een set van datasetbeschrijvingen"@nl, "A data catalog consists of a set of dataset descriptions"@en ;
nde:futureChange [
nde:version "2.0" ;
sh:nodeKind sh:IRI ;
] ;
sh:property
[
sh:path schema:name ;
sh:minCount 1 ;
sh:severity sh:Violation ;
sh:or (
[ sh:datatype xsd:string ]
[ sh:datatype rdf:langString ]
) ;
sh:description "Naam van de datacatalogus"@nl, "Name of the data catalog"@en ;
sh:message "Voeg een titel toe"@nl, "Add a title"@en ;
] ,
nde-dataset:SchemaNameUniqueLangProperty,
nde-dataset:SchemaNameLangStringProperty,
nde-dataset:SchemaDescriptionPropertyShouldExist,
# The datacatalog describes itself, not the datasets it lists, so it carries its own
# wording rather than reusing nde-dataset:SchemaDescriptionProperty, which is written
# for datasets. Mirrors dcat:CatalogShape, which already describes its own dc:description.
[
sh:path schema:description ;
sh:or (
[ sh:datatype xsd:string ]
[ sh:datatype rdf:langString ]
) ;
sh:description """Een beschrijving van de inhoud van de datacatalogus.
Deze is bij voorkeur minimaal drie zinnen en maximaal één alinea lang (2000 karakters).
De vindbaarheid van de datacatalogus wordt onder andere bepaald door de kwaliteit van de beschrijving.
Denk hierbij aan verschillende gebruikers, vakgenoten maar ook anderen,
waarvoor de tekst begrijpelijk moet zijn."""@nl,
"""A description of the contents of the data catalog.
Preferably at least three sentences and at most one paragraph (2,000 characters).
The discoverability of the data catalog depends in part on the quality of the description.
Consider different audiences – both domain experts and others –
for whom the text should be understandable."""@en ;
] ,
nde-dataset:SchemaDescriptionUniqueLangProperty,
nde-dataset:SchemaDescriptionLangStringProperty,
[
sh:path schema:publisher ;
sh:minCount 1 ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:description "Uitgever van de datacatalogus"@nl, "Publisher of the data catalog"@en ;
sh:message "Voeg een uitgever toe"@nl, "Add a publisher"@en ;
sh:or (
[ sh:class schema:Organization ]
[ sh:class schema:Person ]
) ;
] ,
[
sh:path schema:publisher ;
sh:maxCount 1 ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Gebruik maximaal één uitgever"@nl, "Use at most one publisher"@en ;
] ,
[
sh:path schema:dataset ;
sh:class schema:Dataset ;
sh:minCount 1 ;
sh:description "Dataset(s) in de datacatalogus"@nl, "Dataset(s) in the data catalog"@en ;
sh:message "Voeg minimaal één datasetbeschrijving toe aan de datacatalogus"@nl, "Add at least one dataset description to the data catalog"@en ;
sh:severity sh:Warning ;
]
.
nde-dataset:DatasetShape
a sh:NodeShape ;
sh:targetClass schema:Dataset ;
sh:nodeKind sh:IRI ;
sh:pattern "^https?://" ;
sh:description "Een datasetbeschrijving bestaat uit elementen die de dataset beschrijven"@nl, "A dataset description consists of elements that describe the dataset"@en ;
sh:message "Gebruik een web-URI die begint met http:// of https://"@nl, "Use a web URI starting with http:// or https://"@en ;
sh:property
# Required properties
[
sh:path schema:name ;
sh:minCount 1 ;
sh:severity sh:Violation ;
sh:or (
[ sh:datatype xsd:string ]
[ sh:datatype rdf:langString ]
) ;
sh:description "De naam van de dataset."@nl, "A name given to the dataset."@en ;
sh:message "Voeg een titel toe"@nl, "Add a title"@en ;
] ,
nde-dataset:SchemaNameUniqueLangProperty,
nde-dataset:SchemaNameLangStringProperty,
nde-dataset:SchemaDescriptionProperty,
nde-dataset:SchemaDescriptionUniqueLangProperty,
nde-dataset:SchemaDescriptionLangStringProperty,
nde-dataset:SchemaDescriptionPropertyShouldExist,
[
sh:path schema:publisher ;
sh:minCount 1 ;
sh:description "De organisatie of persoon die verantwoordelijk is voor de publicatie van de dataset."@nl, "An entity (organisation or person) responsible for making the Dataset available."@en ;
sh:message "Voeg een uitgever toe"@nl, "Add a publisher"@en ;
sh:or (
[ sh:class schema:Organization ]
[ sh:class schema:Person ]
) ;
] ,
[
sh:path schema:publisher ;
sh:maxCount 1 ;
sh:message "Gebruik maximaal één uitgever"@nl, "Use at most one publisher"@en ;
] ,
[
sh:path schema:license ;
sh:minCount 1 ;
sh:severity sh:Violation ;
sh:description """Licentie die van toepassing is op de dataset. Deze licentie wordt overgenomen door alle distributies die geen eigen licentie hebben."""@nl, """License applicable to the dataset. This license is inherited by all distributions that do not specify their own license. Publishers MUST make known under which <a href="https://www.w3.org/TR/dwbp/#licenses">license</a> the dataset may be used.
This license specifies the conditions under which the metadata records in the dataset may be accessed and reused. It does not cover the heritage objects (either physical or digital) that the metadata describes. Access conditions for these objects should be specified in their own descriptions within the dataset.
The DERA requires metadata to be published openly, so this value SHOULD be an open license that allows consumers to reuse the data, such as `https://creativecommons.org/publicdomain/zero/1.0/` (CC0), `https://creativecommons.org/licenses/by/4.0/` (CC BY 4.0), or `https://creativecommons.org/licenses/by-sa/4.0/` (CC BY-SA 4.0). Adopting a non-open license will severely limit reuse and does not comply with the DERA principles.
The value MUST be the canonical URI of a license. For example, use `https://creativecommons.org/publicdomain/zero/1.0/` instead of `https://creativecommons.org/publicdomain/zero/1.0/deed.nl`."""@en ;
sh:message "Voeg een licentie toe"@nl, "Add a license"@en ;
] ,
[
sh:path schema:license ;
sh:nodeKind sh:IRIOrLiteral ;
nde:futureChange [
nde:version "2.0" ;
sh:nodeKind sh:IRI ;
] ;
sh:severity sh:Warning ;
sh:message "Gebruik een waarde van type URI (RDF-resource), geen tekst"@nl, "Use a value of type URI (RDF resource), not text"@en ;
] ,
[
sh:path schema:license ;
sh:maxCount 1 ;
sh:severity sh:Warning ;
sh:message "Gebruik maximaal één licentie"@nl, "Use at most one license"@en ;
] ,
[
sh:path schema:license ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:in (
<https://creativecommons.org/publicdomain/zero/1.0/>
<https://creativecommons.org/publicdomain/mark/1.0/>
<https://creativecommons.org/licenses/by/4.0/>
<https://creativecommons.org/licenses/by-sa/4.0/>
<https://creativecommons.org/licenses/by-nc/4.0/>
<https://creativecommons.org/licenses/by-nc-sa/4.0/>
<https://creativecommons.org/licenses/by-nd/4.0/>
<https://creativecommons.org/licenses/by-nc-nd/4.0/>
) ;
sh:message "Gebruik een van de Creative Commons-licenties, zoals https://creativecommons.org/publicdomain/zero/1.0/ (CC0) of https://creativecommons.org/licenses/by/4.0/ (CC BY 4.0)"@nl, "Use one of the Creative Commons licenses, such as https://creativecommons.org/publicdomain/zero/1.0/ (CC0) or https://creativecommons.org/licenses/by/4.0/ (CC BY 4.0)"@en ;
] ,
[
sh:path schema:license ;
sh:node nde-dataset:LicenseCreativeCommonsHttpsShape ;
sh:severity sh:Warning ;
sh:message "Gebruik https:// (niet http://) in de Creative Commons-licentie-URL"@nl, "Use https:// (not http://) in the Creative Commons license URL"@en ;
] ,
[
sh:path schema:license ;
sh:node nde-dataset:LicenseCreativeCommonsTrailingSlashShape ;
sh:severity sh:Warning ;
sh:message "Eindig de Creative Commons-licentie-URI met een slash"@nl, "End the Creative Commons license URI with a slash"@en ;
] ,
[
sh:path schema:license ;
sh:node nde-dataset:LicenseNotOpenDefinitionShape ;
sh:severity sh:Warning ;
sh:message "Gebruik de Creative Commons-URI zelf, geen opendefinition.org-alias"@nl, "Use the Creative Commons URI directly, not an opendefinition.org alias"@en ;
] ,
[
sh:path schema:license ;
sh:node nde-dataset:LicenseOpenDataCommonsShape ;
sh:severity sh:Warning ;
sh:message "Gebruik de officiële Open Data Commons-licentie-URI met versienummer, bijv. http://opendatacommons.org/licenses/odbl/1.0/"@nl, "Use an official Open Data Commons licence URI with a version number, such as http://opendatacommons.org/licenses/odbl/1.0/"@en ;
] ,
# Recommended properties
[
sh:path schema:distribution ;
sh:class schema:DataDownload ;
sh:minCount 1 ;
sh:severity sh:Info ;
sh:description "Distributies waarmee de dataset kan worden opgehaald, bijvoorbeeld als download of via een API."@nl, "Distributions through which the dataset can be retrieved, such as as a download or via an API."@en ;
] ,
[
sh:path schema:creator ;
sh:minCount 1 ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:or (
[ sh:class schema:Organization ]
[ sh:class schema:Person ]
) ;
sh:description "De organisatie of persoon die verantwoordelijk is voor het creëren van de beschreven dataset."@nl, "An entity (organisation or person) responsible for producing the dataset."@en ;
sh:message "Voeg een maker toe"@nl, "Add a creator"@en ;
] ,
[
sh:path schema:datePublished ;
sh:minCount 1 ;
sh:maxCount 1 ;
sh:severity sh:Info ;
sh:description "De datum van formele uitgifte (bijvoorbeeld publicatie) van de dataset."@nl, "The date of formal issuance (such as publication) of the dataset."@en ;
sh:message "Vul de publicatiedatum in"@nl, "Enter the publication date"@en ;
] ,
[
sh:path schema:datePublished ;
sh:or (
[ sh:datatype schema:Date ]
[ sh:datatype schema:DateTime ]
[ sh:datatype xsd:dateTime ]
[ sh:datatype xsd:date ]
) ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Gebruik een waarde van type xsd:date, xsd:dateTime, schema:Date of schema:DateTime"@nl, "Use a value of type xsd:date, xsd:dateTime, schema:Date or schema:DateTime"@en ;
] ,
[
sh:path schema:datePublished ;
sh:pattern "^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2}.*)?$" ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Gebruik een ISO 8601-datum, bijv. 2026-04-14 of 2026-04-14T10:30:00"@nl, "Use an ISO 8601 date, such as 2026-04-14 or 2026-04-14T10:30:00"@en ;
] ,
[
sh:path schema:dateCreated ;
sh:minCount 1 ;
sh:maxCount 1 ;
sh:severity sh:Info ;
sh:description "De datum waarop de dataset is aangemaakt."@nl, "The date on which the dataset was created."@en ;
sh:message "Vul de aanmaakdatum in"@nl, "Enter the creation date"@en ;
] ,
[
sh:path schema:dateCreated ;
sh:or (
[ sh:datatype schema:Date ]
[ sh:datatype schema:DateTime ]
[ sh:datatype xsd:dateTime ]
[ sh:datatype xsd:date ]
) ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Gebruik een waarde van type xsd:date, xsd:dateTime, schema:Date of schema:DateTime"@nl, "Use a value of type xsd:date, xsd:dateTime, schema:Date or schema:DateTime"@en ;
] ,
[
sh:path schema:dateCreated ;
sh:pattern "^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2}.*)?$" ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Gebruik een ISO 8601-datum, bijv. 2026-04-14 of 2026-04-14T10:30:00"@nl, "Use an ISO 8601 date, such as 2026-04-14 or 2026-04-14T10:30:00"@en ;
] ,
[
sh:path schema:dateModified ;
sh:minCount 1 ;
sh:maxCount 1 ;
sh:severity sh:Info ;
sh:description "De meest recente datum waarop de dataset is gewijzigd of aangepast."@nl, "The most recent date on which the dataset was changed or modified."@en ;
sh:message "Vul de wijzigingsdatum in"@nl, "Enter the last modified date"@en ;
] ,
[
sh:path schema:dateModified ;
sh:or (
[ sh:datatype schema:Date ]
[ sh:datatype schema:DateTime ]
[ sh:datatype xsd:dateTime ]
[ sh:datatype xsd:date ]
) ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Gebruik een waarde van type xsd:date, xsd:dateTime, schema:Date of schema:DateTime"@nl, "Use a value of type xsd:date, xsd:dateTime, schema:Date or schema:DateTime"@en ;
] ,
[
sh:path schema:dateModified ;
sh:pattern "^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2}.*)?$" ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Gebruik een ISO 8601-datum, bijv. 2026-04-14 of 2026-04-14T10:30:00"@nl, "Use an ISO 8601 date, such as 2026-04-14 or 2026-04-14T10:30:00"@en ;
] ,
[
a sh:PropertyShape ;
sh:path schema:version ;
sh:minCount 0 ;
sh:maxCount 1 ;
sh:description "Versieaanduiding van de dataset, bijvoorbeeld een semantisch versienummer of een datum."@nl, "Version identifier of the dataset, such as a semantic version number or a date."@en ;
sh:message "Voeg een versie toe (bijv. 1.0 of 2.1) als je met meerdere versies van een datasetbeschrijving werkt"@nl, "Add a version (such as 1.0 or 2.1) if you work with multiple versions of the dataset description"@en ;
] ,
[
a sh:PropertyShape ;
sh:path schema:inLanguage ;
nde:futureChange [
nde:version "2.0" ;
sh:pattern "^[a-zA-Z]{2,3}(-[a-zA-Z0-9]+)*$" ;
] ;
sh:minCount 0 ;
sh:description """De natuurlijke taal van de tekstuele waardes in de dataset – dus van de metadata-records zelf (titels, omschrijvingen enzovoort). Gebruik een BCP 47-taalcode, bijv. `nl` of `en`."""@nl, """The natural language of the textual values within the dataset – that is, of the metadata records themselves (titles, descriptions, and so on). Use a BCP 47 language code, such as `nl` or `en`."""@en ;
] ,
[
a sh:PropertyShape ;
sh:path schema:mainEntityOfPage ;
sh:minCount 0 ;
sh:nodeKind sh:IRI ;
sh:description """Een webpagina die toegang biedt tot de dataset, zijn distributies of aanvullende informatie. Niet nodig als de URI van de dataset zelf al naar een HTML-pagina leidt. De menselijk leesbare beschrijving MOET consistent zijn met en minstens alle details (zoals distributies) uit de RDF-datasetbeschrijving bevatten."""@nl, """A web page that provides access to the Dataset, its Distributions and/or additional information. Not needed when the dataset URI itself resolves to an HTML page. The human-readable description MUST be consistent with and include at least all details (such as distributions) from the RDF dataset description."""@en ;
sh:message "Gebruik een waarde van type URI (RDF-resource), geen tekst"@nl, "Use a value of type URI (RDF resource), not text"@en ;
] ,
[
sh:path schema:mainEntityOfPage ;
sh:pattern "^https://" ;
sh:message "Gebruik een web-URL die begint met https://"@nl, "Use a web URL starting with https://"@en ;
] ,
[
a sh:PropertyShape ;
sh:path schema:isBasedOn ;
sh:minCount 0 ;
sh:description "De URI van een dataset waarop deze dataset is gebaseerd (voorheen schema:isBasedOnUrl)."@nl, "The URI of a dataset this dataset is based on (previously schema:isBasedOnUrl)."@en ;
] ,
[
a sh:PropertyShape ;
sh:path schema:citation ;
sh:minCount 0 ;
sh:description "Een citaat of verwijzing voor de dataset."@nl, "A citation or reference for the dataset."@en ;
] ,
[
sh:path schema:genre ;
sh:maxCount 0 ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:description """`schema:genre` is verouderd. Gebruik `schema:about` met een URI (bijv. uit AAT of GTAA via het Termennetwerk) voor zowel onderwerp als materiaaltype."""@nl,
"""`schema:genre` is deprecated. Use `schema:about` with a URI (e.g. from AAT or GTAA via the Network of Terms) for both subject and material type."""@en ;
sh:message "schema:genre is verouderd; gebruik schema:about met een URI (bijvoorbeeld uit het Termennetwerk)"@nl, "schema:genre is deprecated; use schema:about with a URI (for example from the Network of Terms)"@en ;
] ,
[
sh:path schema:about ;
sh:minCount 1 ;
sh:severity sh:Info ;
sh:description """Het onderwerp of de onderwerpen van de dataset, waaronder zowel inhoudelijke thema’s (zoals ‘Wederopbouw’ of ‘Koloniale geschiedenis’) als materiaaltypen (zoals ‘Foto’s’ of ‘Bouwtekeningen’). Gebruik een URI uit een gecontroleerd vocabulaire (bijv. AAT, GTAA of Brinkman via het <a href="https://termennetwerk.netwerkdigitaalerfgoed.nl/">Termennetwerk</a>)."""@nl, """The subject matter of the dataset, covering both topical themes (such as ‘post-war reconstruction’ or ‘colonial history’) and material types (such as ‘photographs’ or ‘architectural drawings’). Use a URI from a controlled vocabulary (e.g. AAT, GTAA, or Brinkman via the <a href="https://termennetwerk.netwerkdigitaalerfgoed.nl/en">Network of Terms</a>)."""@en ;
sh:message "Voeg een URI toe die het onderwerp of materiaaltype van de dataset beschrijft (bijv. uit het Termennetwerk)"@nl, "Add a URI describing the dataset’s subject matter or material type (for example from the Network of Terms)"@en ;
] ,
[
sh:path schema:about ;
sh:nodeKind sh:IRI ;
sh:message "Gebruik een waarde van type URI (RDF-resource), geen tekst"@nl, "Use a value of type URI (RDF resource), not text"@en ;
] ,
[
sh:path schema:about ;
sh:pattern "^https?://" ;
sh:message "Gebruik een web-URI die begint met http:// of https://"@nl, "Use a web URI starting with http:// or https://"@en ;
] ,
[
sh:path schema:spatialCoverage ;
sh:minCount 1 ;
sh:severity sh:Info ;
sh:description """Het geografische gebied waarop de gegevens in de dataset betrekking hebben. Gebruik een URI uit een gecontroleerd vocabulaire zoals <a href="https://www.geonames.org/">GeoNames</a> via het <a href="https://termennetwerk.netwerkdigitaalerfgoed.nl/">Termennetwerk</a>. Geef alleen het meest specifieke (laagste) niveau op, bijvoorbeeld de URI voor Roermond en niet die voor Limburg of Nederland. Bredere gebieden kunnen worden afgeleid op basis van de hiërarchische relaties van de term."""@nl,
"""The geographical area to which the data in the dataset pertains. Use a URI from a controlled vocabulary such as <a href="https://www.geonames.org/">GeoNames</a> via the <a href="https://termennetwerk.netwerkdigitaalerfgoed.nl/en">Network of Terms</a>. Provide only the most specific (lowest) level, for example the URI for Roermond and not the one for Limburg or the Netherlands. Broader areas can be derived from the term’s hierarchical relations."""@en ;
sh:message "Voeg een gebiedsaanduiding toe (bijv. een URI uit GeoNames)"@nl, "Add spatial coverage (such as a GeoNames URI)"@en ;
] ,
[
sh:path schema:spatialCoverage ;
sh:nodeKind sh:IRI ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:description "De gebiedsaanduiding moet een HTTP(S)-URI zijn, bijvoorbeeld van <a href=\"https://www.geonames.org/\">GeoNames</a>."@nl, "Spatial coverage must be an HTTP(S) URI, such as from <a href=\"https://www.geonames.org/\">GeoNames</a>."@en ;
sh:message "Gebruik een waarde van type URI (RDF-resource), geen tekst"@nl, "Use a value of type URI (RDF resource), not text"@en ;
] ,
[
sh:path schema:spatialCoverage ;
sh:pattern "^https?://" ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Gebruik een web-URI die begint met http:// of https://"@nl, "Use a web URI starting with http:// or https://"@en ;
] ,
[
sh:path schema:temporalCoverage ;
sh:minCount 1 ;
sh:severity sh:Info ;
sh:description "De tijdsperiode waar de dataset betrekking op heeft. De waarde moet een ISO 8601-datum of -tijdsinterval zijn (bijv. ‘2011’, ‘2011/2012’, ‘1889-06/07’ voor een verkorte notatie, ‘-0431/-0404’ of ‘-13000/-10000’ voor v.Chr.-dateringen, of ‘1440/..’ voor een open einde), of een HTTP(S)-URI."@nl, "The time period to which the dataset pertains. The value must be an ISO 8601 date or time interval (such as ‘2011’, ‘2011/2012’, ‘1889-06/07’ for shortened notation, ‘-0431/-0404’ or ‘-13000/-10000’ for BCE dates, or ‘1440/..’ for an open-ended range), or an HTTP(S) URI."@en ;
sh:message "Voeg een tijdsaanduiding toe"@nl, "Add temporal coverage"@en ;
] ,
[
sh:path schema:temporalCoverage ;
sh:or (
[ sh:nodeKind sh:IRI ; sh:pattern "^https?://" ]
[ sh:pattern "^(-?\\d{4,}(-\\d{2}(-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?)?)?)?|\\.\\.)(/(-?\\d{4,}(-\\d{2}(-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?)?)?)?|\\d{2}(-\\d{2})?|\\.\\.))?$" ]
) ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Gebruik een ISO 8601-datum of -tijdsinterval (bijv. ‘2011/2012’, ‘-0431/-0404’ voor v.Chr., of ‘1440/..’) of een web-URI"@nl, "Use an ISO 8601 date or time interval (such as ‘2011/2012’, ‘-0431/-0404’ for BCE, or ‘1440/..’) or a web URI"@en ;
] ,
[
a sh:PropertyShape ;
sh:path schema:hasPart ;
sh:minCount 0 ;
sh:description "Verwijst naar een dataset die onderdeel is van deze dataset en ook als afzonderlijke dataset beschikbaar is."@nl, "Indicates a dataset that is part of this dataset and also available as a separate dataset."@en ;
] ,
[
a sh:PropertyShape ;
sh:path schema:includedInDataCatalog ;
sh:nodeKind sh:IRI ;
sh:minCount 0 ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:description "De HTTP IRI(s) van de datacatalogus of -catalogi waartoe de dataset behoort."@nl, "The HTTP IRI(s) of the data catalog(s) that the dataset belongs to."@en ;
sh:message "Gebruik een waarde van type URI (RDF-resource), geen tekst"@nl, "Use a value of type URI (RDF resource), not text"@en ;
] ,
[
sh:path schema:includedInDataCatalog ;
sh:pattern "^https?://" ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Gebruik een web-URI die begint met http:// of https://"@nl, "Use a web URI starting with http:// or https://"@en ;
] ,
nde-dataset:AccrualPeriodicityProperty ,
nde-dataset:AccessRightsProperty
.
nde-dataset:DistributionShape
a sh:NodeShape ;
sh:targetObjectsOf schema:distribution ;
# A distribution must declare either its media type or a link to API usage documentation.
# This is a node-level constraint (it spans two properties), so it hangs off the NodeShape
# rather than off a PropertyShape, which would be ill-formed without an sh:path.
sh:or (
[ sh:property [
sh:minCount 1 ;
sh:path schema:encodingFormat ;
] ]
[ sh:property [
sh:minCount 1 ;
sh:path schema:usageInfo ;
] ]
) ;
sh:message "Geef in schema:encodingFormat het MIME-type van de dataset op (bijv. application/n-triples) of in schema:usageInfo het API-protocol (bijv. https://www.w3.org/TR/sparql11-protocol/)"@nl, "Specify the dataset format in schema:encodingFormat (such as application/n-triples) or the API protocol in schema:usageInfo (such as https://www.w3.org/TR/sparql11-protocol/)"@en ;
sh:property
# Required properties
[
sh:path schema:contentUrl ;
sh:minCount 1 ;
sh:maxCount 1 ;
sh:severity sh:Violation ;
sh:description """De URL die rechtstreeks toegang biedt tot de distributie zelf: het databestand of het endpoint van de web-API.
Gebruik `schema:documentation` als er daarnaast een documentatiepagina is die de distributie beschrijft of ontsluit (zoals een SPARQL-UI of een downloadlandingspagina)."""@nl,
"""The URL that provides direct access to the distribution itself: the data file or the web API endpoint.
Use `schema:documentation` if there is also a documentation page that describes or provides access to the distribution (such as a SPARQL UI or a download landing page)."""@en ;
sh:message "Voeg de URL toe waar de distributie rechtstreeks toegankelijk is"@nl, "Add the URL where the distribution can be directly accessed"@en ;
] ,
[
sh:path schema:contentUrl ;
sh:or (
[ sh:nodeKind sh:IRI ] # schema.org’s JSON-LD context coerces contentUrl to @id, so values land as IRIs
[ sh:datatype xsd:anyURI ] # xsd:anyURI literal accepted for Turtle / custom-context submissions
) ;
sh:pattern "^https://" ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:nodeKind sh:IRI ;
sh:severity sh:Violation ;
] ;
sh:message "Gebruik een geldige HTTPS-URL voor de distributie"@nl, "Use a valid HTTPS URL for the distribution"@en ;
] ,
[
sh:path schema:encodingFormat ;
sh:pattern "^[a-zA-Z]+/[a-zA-Z0-9][a-zA-Z0-9!#$&\\-^_.+]*$" ;
nde:futureChange [
nde:version "2.0" ;
sh:maxCount 1 ;
] ;
sh:description """Het mediatype van het downloadbare bestand. Gebruik een waarde uit de IANA media types-lijst. De waarde geeft het mediatype aan van de response van schema:contentUrl wanneer er geen Accept-header wordt meegestuurd. Bij gecomprimeerde distributies moet het compressieformaat (bijv. zip, gzip) worden toegevoegd (bijv. text/turtle+gzip)."""@nl, """The media type of the downloadable file. Use a value from the IANA media types list. The value should indicate the media type of the response of schema:contentUrl when no Accept header is included in the request. When the distribution is compressed, the compression format (such as `zip`, `gzip`) must be included (such as `text/turtle+gzip`)."""@en ;
sh:message "Vul een geldig MIME-type in, bijv. application/n-triples"@nl, "Enter a valid MIME type, such as application/n-triples"@en ;
] ,
[
sh:path schema:encodingFormat ;
sh:not [ sh:pattern "application/sparql-" ] ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Verwijder het SPARQL MIME-type uit schema:encodingFormat; SPARQL-endpoints worden gedeclareerd via schema:usageInfo"@nl, "Remove the SPARQL MIME type from schema:encodingFormat; SPARQL endpoints are declared via schema:usageInfo"@en ;
] ,
# A bare compression container (zip/gzip) names how the bytes are packed
# but not the media type of the file(s) inside, so consumers cannot know
# how to parse the download. The inner format need not be RDF (it may be
# CSV, XML, etc.). Declare the packaged media type together with the
# compression as a suffix, e.g. application/rdf+xml+zip or text/csv+gzip.
[
sh:path schema:encodingFormat ;
sh:not [ sh:in (
"application/zip"
"application/x-zip-compressed"
"application/gzip"
"application/x-gzip"
) ] ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Een kaal compressietype (zoals application/zip of application/gzip) geeft niet aan welk mediatype de ingepakte bestanden hebben. Declareer het werkelijke mediatype met een compressiesuffix, bijvoorbeeld application/rdf+xml+zip of text/csv+gzip"@nl, "A bare compression type (such as application/zip or application/gzip) does not indicate the media type of the packaged file(s). Declare the actual media type with a compression suffix, such as application/rdf+xml+zip or text/csv+gzip"@en ;
] ,
# Media types with an x- prefix (e.g. application/x-zip-compressed) are
# not registered with IANA; the x- convention was deprecated by RFC 6648.
# Use the registered type so consumers recognise it.
[
sh:path schema:encodingFormat ;
sh:not [ sh:pattern "^[a-zA-Z]+/x-" ] ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Gebruik een geregistreerd IANA-mediatype. Mediatypes met het voorvoegsel x- (zoals application/x-zip-compressed) zijn niet geregistreerd bij IANA; gebruik het geregistreerde type, bijvoorbeeld application/zip"@nl, "Use a registered IANA media type. Media types with the x- prefix (such as application/x-zip-compressed) are not registered with IANA; use the registered type, such as application/zip"@en ;
] ,
# Recommended properties
[
sh:path schema:description ;
sh:or (
[ sh:datatype xsd:string ]
[ sh:datatype rdf:langString ]
);
sh:description "Beschrijving van de distributie"@nl, "Distribution description"@en ;
sh:message "Gebruik een waarde van type xsd:string of rdf:langString"@nl, "Use a value of type xsd:string or rdf:langString"@en ;
] ,
nde-dataset:SchemaDescriptionUniqueLangProperty,
[
a sh:PropertyShape ;
sh:path schema:datePublished ;
sh:minCount 0 ;
sh:maxCount 1 ;
sh:description "De datum van formele uitgifte (bijvoorbeeld publicatie) van de distributie."@nl, "The date of formal issuance (such as publication) of the distribution."@en ;
] ,
[
sh:path schema:dateModified ;
sh:minCount 0 ;
sh:maxCount 1 ;
sh:description "De meest recente datum waarop de distributie is gewijzigd of aangepast."@nl, "The most recent date on which the distribution was changed or modified."@en ;
] ,
[
sh:path schema:datePublished ;
sh:or (
[ sh:datatype schema:Date ]
[ sh:datatype schema:DateTime ]
[ sh:datatype xsd:dateTime ]
[ sh:datatype xsd:date ]
) ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Gebruik een waarde van type xsd:date, xsd:dateTime, schema:Date of schema:DateTime"@nl, "Use a value of type xsd:date, xsd:dateTime, schema:Date or schema:DateTime"@en ;
] ,
[
sh:path schema:dateModified ;
sh:or (
[ sh:datatype schema:Date ]
[ sh:datatype schema:DateTime ]
[ sh:datatype xsd:dateTime ]
[ sh:datatype xsd:date ]
) ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Gebruik een waarde van type xsd:date, xsd:dateTime, schema:Date of schema:DateTime"@nl, "Use a value of type xsd:date, xsd:dateTime, schema:Date or schema:DateTime"@en ;
] ,
[
sh:path schema:datePublished ;
sh:pattern "^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2}.*)?$" ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Gebruik een ISO 8601-datum, bijv. 2026-04-14 of 2026-04-14T10:30:00"@nl, "Use an ISO 8601 date, such as 2026-04-14 or 2026-04-14T10:30:00"@en ;
] ,
[
sh:path schema:dateModified ;
sh:pattern "^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2}.*)?$" ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Gebruik een ISO 8601-datum, bijv. 2026-04-14 of 2026-04-14T10:30:00"@nl, "Use an ISO 8601 date, such as 2026-04-14 or 2026-04-14T10:30:00"@en ;
] ,
[
sh:path schema:inLanguage ;
nde:futureChange [
nde:version "2.0" ;
sh:pattern "^[a-zA-Z]{2,3}(-[a-zA-Z0-9]+)*$" ;
] ;
sh:minCount 0 ;
sh:description "Taal of talen waarin de distributie beschikbaar is. Gebruik een BCP 47-taalcode, bijv. `nl`."@nl, "Language or languages in which the distribution is available. Use a BCP 47 language code, such as `nl`."@en ;
sh:message "Gebruik een BCP 47-taalcode, bijv. nl of en"@nl, "Use a BCP 47 language code, such as nl or en"@en ;
] ,
[
sh:path schema:license ;
sh:nodeKind sh:IRIOrLiteral ;
sh:minCount 0 ;
nde:futureChange [
nde:version "2.0" ;
sh:nodeKind sh:IRI ;
] ;
sh:description """Licentie die van toepassing is op deze distributie en die de licentie van de bovenliggende dataset overschrijft. Optioneel; gebruik dit alleen wanneer de distributie een andere licentie heeft dan de dataset."""@nl,
"""License applicable to this distribution, overriding the parent dataset's license. Optional; only set this when the distribution carries a different license from the dataset."""@en ;
sh:message "Gebruik een waarde van type URI (RDF-resource), geen tekst"@nl, "Use a value of type URI (RDF resource), not text"@en ;
] ,
[
sh:path schema:license ;
sh:maxCount 1 ;
sh:severity sh:Warning ;
sh:message "Gebruik maximaal één licentie"@nl, "Use at most one license"@en ;
] ,
[
a sh:PropertyShape ;
sh:path schema:contentSize ;
sh:minCount 0 ;
sh:maxCount 1 ;
sh:description "Bestandsgrootte van de distributie in bytes."@nl, "Distribution file size in bytes."@en ;
] ,
[
a sh:PropertyShape ;
sh:path schema:usageInfo ;
sh:nodeKind sh:IRI ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:minCount 0 ;
sh:description """Een link naar de documentatie: voor downloads het applicatieprofiel, vocabulaire of ontologie; voor web-API’s (zoals SPARQL of OAI-PMH) de protocolspecificatie.
Hiermee kunnen gebruikers een volledige dump onderscheiden van een API die maar een deel van de data ontsluit."""@nl,
"""A link to the documentation: for downloads, the application profile, vocabulary or ontology; for web APIs (such as SPARQL or OAI-PMH), the protocol specification.
It lets consumers tell a full data dump from an API that exposes only part of the data."""@en ;
sh:message "Gebruik een waarde van type URI (RDF-resource), geen tekst"@nl, "Use a value of type URI (RDF resource), not text"@en ;
] ,
[
sh:path schema:usageInfo ;
sh:pattern "^https?://" ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Gebruik een web URI die begint met http:// of https://"@nl, "Use a web URI starting with http:// or https://"@en ;
] ,
[
a sh:PropertyShape ;
sh:path schema:documentation ;
sh:minCount 0 ;
sh:nodeKind sh:IRI ;
sh:name "Documentation"@en ;
sh:description """Een documentatiepagina die deze distributie beschrijft of ontsluit, zoals een SPARQL-UI of een downloadlandingspagina.
`schema:contentUrl` wijst naar de distributie zelf (het databestand of het API-endpoint)."""@nl,
"""A documentation page that describes or provides access to this distribution, such as a SPARQL UI or a download landing page.
`schema:contentUrl` points to the distribution itself (the data file or the API endpoint)."""@en ;
sh:message "Gebruik een waarde van type URI (RDF-resource), geen tekst"@nl, "Use a value of type URI (RDF resource), not text"@en ;
] ,
[
sh:path schema:documentation ;
sh:pattern "^https://" ;
sh:message "Gebruik een web-URL die begint met https://"@nl, "Use a web URL starting with https://"@en ;
] ,
[
sh:path schema:description ;
sh:minCount 1 ;
sh:severity sh:Info ;
sh:message "Voeg een beschrijving toe"@nl, "Add a description"@en ;
] ,
[
sh:path schema:contentUrl ;
nde-probe:probeReachable true ;
sh:severity sh:Warning ;
sh:message "De contentUrl is niet bereikbaar; de distributie kan niet worden opgehaald."@nl ,
"The contentUrl is not reachable; the distribution cannot be retrieved."@en ;
] ,
[
sh:path schema:contentUrl ;
nde-probe:probeFormatMatch true ;
sh:severity sh:Warning ;
sh:message "Het Content-Type van contentUrl komt niet overeen met het opgegeven schema:encodingFormat."@nl ,
"The Content-Type of contentUrl does not match the declared schema:encodingFormat."@en ;
] .
# SPARQL endpoints must declare the SPARQL protocol URI in schema:usageInfo so the
# Dataset Register can identify them as APIs. A SPARQL MIME type in schema:encodingFormat
# is not sufficient on its own. See [[#usage-information]].
nde-dataset:DistributionSparqlEncodingRequiresProtocolShape
a sh:NodeShape ;
sh:targetObjectsOf schema:distribution ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Voeg de SPARQL protocol-URI (https://www.w3.org/TR/sparql11-protocol/) toe aan schema:usageInfo voor SPARQL-endpoints"@nl, "Add the SPARQL protocol URI (https://www.w3.org/TR/sparql11-protocol/) to schema:usageInfo for SPARQL endpoints"@en ;
sh:sparql [
sh:select """
PREFIX schema: <https://schema.org/>
SELECT $this ?path
WHERE {
$this schema:encodingFormat ?format .
FILTER(CONTAINS(STR(?format), "application/sparql-"))
FILTER NOT EXISTS {
$this schema:usageInfo <https://www.w3.org/TR/sparql11-protocol/> .
}
BIND(schema:usageInfo AS ?path)
}
""" ;
] .
# DCAT mirror of the shape above: SPARQL endpoints must declare the SPARQL protocol URI
# in dct:conformsTo. A SPARQL MIME type in dcat:mediaType is not sufficient on its own.
# See [[#usage-information]].
dcat:DistributionSparqlMediaTypeRequiresProtocolShape
a sh:NodeShape ;
sh:targetObjectsOf dcat:distribution ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Voeg de SPARQL protocol-URI (https://www.w3.org/TR/sparql11-protocol/) toe aan dct:conformsTo voor SPARQL-endpoints"@nl, "Add the SPARQL protocol URI (https://www.w3.org/TR/sparql11-protocol/) to dct:conformsTo for SPARQL endpoints"@en ;
sh:sparql [
sh:select """
PREFIX dcat: <http://www.w3.org/ns/dcat#>
PREFIX dct: <http://purl.org/dc/terms/>
SELECT $this ?path
WHERE {
$this dcat:mediaType ?mediaType .
FILTER(CONTAINS(STR(?mediaType), "application/sparql-"))
FILTER NOT EXISTS {
$this dct:conformsTo <https://www.w3.org/TR/sparql11-protocol/> .
}
BIND(dct:conformsTo AS ?path)
}
""" ;
] .
nde-dataset:AgentShape
a sh:NodeShape ;
sh:targetObjectsOf schema:publisher, schema:creator ;
sh:nodeKind sh:IRI ;
sh:message "Gebruik een waarde van type URI (RDF-resource), geen tekst"@nl, "Use a value of type URI (RDF resource), not text"@en ;
sh:property
[
sh:path schema:name ;
sh:minCount 1 ;
sh:severity sh:Violation ;
sh:or (
[ sh:datatype xsd:string ]
[ sh:datatype rdf:langString ]
) ;
sh:description "De volledige naam van de uitgever of maker."@nl, "The full name of the publisher or creator."@en ;
sh:message "Vul een naam in voor de uitgever of maker"@nl, "Enter a name for the publisher or creator"@en ;
] ,
nde-dataset:SchemaNameUniqueLangProperty,
nde-dataset:SchemaNameLangStringProperty,
[
sh:path schema:alternateName ;
sh:or (
[ sh:datatype xsd:string ]
[ sh:datatype rdf:langString ]
) ;
sh:minCount 0 ;
sh:description "Alternatieve namen, zoals een afkorting waaronder de organisatie bekendstaat."@nl, "Alternative names such as an abbreviation that the organization is known under."@en ;
sh:message "Gebruik een waarde van type rdf:langString en geef de taal aan (bijv. nl of en)"@nl, "Use a value of type rdf:langString and specify the language (such as nl or en)"@en ;
] ,
[
sh:path schema:alternateName ;
sh:uniqueLang true ;
sh:severity sh:Warning ;
sh:message "Gebruik per taal maximaal één waarde"@nl, "Use at most one value per language"@en ;
] ,
[
sh:path schema:alternateName ;
sh:datatype rdf:langString ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Gebruik een waarde van type rdf:langString en geef de taal aan (bijv. nl of en)"@nl, "Use a value of type rdf:langString and specify the language (such as nl or en)"@en ;
] ,
[
sh:path schema:identifier ;
sh:minCount 0 ;
sh:or (
[ sh:datatype xsd:string ]
[ sh:class schema:PropertyValue ]
) ;
sh:severity sh:Warning ;
sh:description "Identificatie(s) van de organisatie, minimaal de <a href=\"https://www.nationaalarchief.nl/archiveren/kennisbank/isil-codes\">ISIL-code</a>."@nl, "Identifier(s) of the organization, at least its <a href=\"https://www.nationaalarchief.nl/archiveren/kennisbank/isil-codes\">ISIL code</a>."@en ;
sh:message "Gebruik een waarde van type xsd:string of schema:PropertyValue"@nl, "Use a value of type xsd:string or schema:PropertyValue"@en ;
] ,
[
sh:path schema:sameAs ;
sh:nodeKind sh:IRI ;
sh:minCount 0 ;
sh:severity sh:Info ;
sh:description "Verwijzingen naar de organisatie in andere databases."@nl, "Links to the organization in other databases."@en ;
sh:message "Gebruik een waarde van type URI (RDF-resource), geen tekst"@nl, "Use a value of type URI (RDF resource), not text"@en ;
] ,
[
sh:path schema:sameAs ;
sh:pattern "^https?://" ;
sh:severity sh:Info ;
sh:message "Gebruik een web-URI die begint met http:// of https://"@nl, "Use a web URI starting with http:// or https://"@en ;
] ,
# Metadata-only property shape so the UI can surface a description and
# the v2.0 "becomes required" annotation for the schema:contactPoint path
# emitted by OrganizationContactPointRequiredShape below (which is
# SPARQL-bound and therefore not indexed by sh:path).
[
sh:path schema:contactPoint ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:description "Contactinformatie waar eindgebruikers terecht kunnen met vragen over de dataset. Gebruik bij voorkeur de gegevens van de afdeling die de dataset of catalogus beheert, niet die van een individuele medewerker."@nl, "Contact information where end users can get in touch with questions about the dataset. Preferably use the details of the department that manages the dataset or catalogue, rather than an individual employee."@en ;
]
.
nde-dataset:AgentUriPatternShape
a sh:NodeShape ;
sh:targetObjectsOf schema:publisher, schema:creator ;
sh:pattern "^https?://" ;
sh:message "Gebruik een web-URI die begint met http:// of https://"@nl, "Use a web URI starting with http:// or https://"@en .
# Separate node shapes for Organization-specific constraints that must fire only on
# schema:Organization instances (not on Person publishers/creators). Each carries its own
# sh:severity and sh:message at node level, because shacl-engine's sparql validations
# plugin ignores these fields when set on the sh:sparql blank node itself.
nde-dataset:OrganizationContactPointRequiredShape
a sh:NodeShape ;
sh:targetObjectsOf schema:publisher, schema:creator ;
sh:severity sh:Warning ;
nde:futureChange [
nde:version "2.0" ;
sh:severity sh:Violation ;
] ;
sh:message "Voeg een contactpunt toe met naam en e-mailadres. Gebruik bij voorkeur de gegevens van de afdeling die de dataset of catalogus beheert"@nl,
"Add a contact point with a name and email address, preferably of the department that manages the dataset or catalogue"@en ;
sh:sparql [
sh:select """
PREFIX schema: <https://schema.org/>
SELECT $this ?path WHERE {
$this a schema:Organization .
FILTER NOT EXISTS { $this schema:contactPoint ?cp }
BIND(schema:contactPoint AS ?path)
}
""" ;
] .
nde-dataset:OrganizationIdentifierRequiredShape
a sh:NodeShape ;
sh:targetObjectsOf schema:publisher, schema:creator ;
sh:severity sh:Info ;
sh:message "Voeg een identificatie toe voor de organisatie, zoals een KvK-nummer of ISIL"@nl, "Add an identifier for the organisation, such as a Chamber of Commerce number or ISIL"@en ;
sh:sparql [
sh:select """
PREFIX schema: <https://schema.org/>
SELECT $this ?path WHERE {
$this a schema:Organization .
FILTER NOT EXISTS { $this schema:identifier ?id }
BIND(schema:identifier AS ?path)
}
""" ;
] .
# PropertyValue identifiers (schema:identifier values that are typed as
# schema:PropertyValue) carry their own internal structure that we want to
# validate. The filter $this a schema:PropertyValue ensures string identifiers
# are skipped – those are already covered by the property-level sh:or check.
nde-dataset:IdentifierPropertyIDRequiredShape
a sh:NodeShape ;
sh:targetObjectsOf schema:identifier ;
sh:severity sh:Warning ;
sh:message "Geef aan om welk type identifier het gaat (bijv. KvK of ISIL), naast de waarde"@nl, "Specify the type of identifier (such as ‘Chamber of Commerce’ or ‘ISIL’) in addition to the value"@en ;
sh:sparql [
sh:select """
PREFIX schema: <https://schema.org/>
SELECT $this ?path WHERE {
$this a schema:PropertyValue .
OPTIONAL { $this schema:propertyID ?pid }
FILTER (!bound(?pid) || !isURI(?pid))
BIND(schema:propertyID AS ?path)
}
""" ;
] .
nde-dataset:IdentifierValueRequiredShape
a sh:NodeShape ;
sh:targetObjectsOf schema:identifier ;
sh:severity sh:Warning ;
sh:message "Vul de waarde van de identifier in (bijv. een nummer of code)"@nl, "Enter the identifier value (such as a number or code)"@en ;
sh:sparql [
sh:select """
PREFIX schema: <https://schema.org/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT $this ?path WHERE {
$this a schema:PropertyValue .
OPTIONAL { $this schema:value ?v }
FILTER (!bound(?v) || !isLiteral(?v) || datatype(?v) != xsd:string)
BIND(schema:value AS ?path)
}
""" ;
] .
nde-dataset:IdentifierNameStringShape
a sh:NodeShape ;
sh:targetObjectsOf schema:identifier ;
sh:severity sh:Warning ;
sh:message "Gebruik een waarde van type rdf:langString en geef de taal aan (bijv. nl of en)"@nl, "Use a value of type rdf:langString and specify the language (such as nl or en)"@en ;
sh:sparql [
sh:select """
PREFIX schema: <https://schema.org/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT $this ?path WHERE {