pid4cat-model 0.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2816 @@
1
+ # Auto generated from pid4cat_model.yaml by pythongen.py version: 0.0.1
2
+ # Generation date: 2025-04-03T15:59:22
3
+ # Schema: pid4cat-model
4
+ #
5
+ # id: https://w3id.org/nfdi4cat/pid4cat-model
6
+ # description: A LinkML model for persistent identifiers for resources in catalysis (pid4cat). pid4cat are handle based persistent identifiers (PIDs) for digital or physical resources used in the catalysis research process. PID-related metadata besides the obligatory landing page URL are stored directly in the handle records.
7
+ # The model describes metadata for the PID itself and how to access the identified resource. It does not describe the resource itself with the exception of the resource category, which is a high-level description of what is identified by the pid4cat handle, e.g. a sample or a device.
8
+ # license: MIT
9
+
10
+ import dataclasses
11
+ import re
12
+ from dataclasses import dataclass
13
+ from typing import Any, ClassVar, Dict, List, Optional, Union
14
+
15
+ from jsonasobj2 import as_dict
16
+ from linkml_runtime.linkml_model.meta import EnumDefinition, PermissibleValue
17
+ from linkml_runtime.utils.curienamespace import CurieNamespace
18
+ from linkml_runtime.utils.dataclass_extensions_376 import (
19
+ dataclasses_init_fn_with_kwargs,
20
+ )
21
+ from linkml_runtime.utils.enumerations import EnumDefinitionImpl
22
+ from linkml_runtime.utils.metamodelcore import empty_dict, empty_list
23
+ from linkml_runtime.utils.slot import Slot
24
+ from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str
25
+ from rdflib import URIRef
26
+
27
+ from linkml_runtime.utils.metamodelcore import URI, XSDDateTime
28
+
29
+ metamodel_version = "1.7.0"
30
+ version = "0.0.0"
31
+
32
+ # Overwrite dataclasses _init_fn to add **kwargs in __init__
33
+ dataclasses._init_fn = dataclasses_init_fn_with_kwargs
34
+
35
+ # Namespaces
36
+ DATACITE = CurieNamespace("DataCite", "https://purl.org/spar/datacite/")
37
+ DCAT = CurieNamespace("dcat", "https://www.w3.org/ns/dcat#")
38
+ DCTERMS = CurieNamespace("dcterms", "https://purl.org/dc/terms/")
39
+ LINKML = CurieNamespace("linkml", "https://w3id.org/linkml/")
40
+ MEDIATYPE = CurieNamespace("mediatype", "https://www.iana.org/assignments/media-types/")
41
+ PID4CAT_MODEL = CurieNamespace(
42
+ "pid4cat_model", "https://w3id.org/nfdi4cat/pid4cat-model/"
43
+ )
44
+ PROV = CurieNamespace("prov", "https://www.w3.org/ns/prov#")
45
+ VOC4CAT = CurieNamespace("voc4cat", "https://w3id.org/nfdi4cat/voc4cat_")
46
+ DEFAULT_ = PID4CAT_MODEL
47
+
48
+
49
+ # Types
50
+
51
+
52
+ # Class references
53
+ class HandleAPIRecordHandle(extended_str):
54
+ pass
55
+
56
+
57
+ @dataclass(repr=False)
58
+ class HandleAPIRecord(YAMLRoot):
59
+ """
60
+ A class representing a handle record query response of the REST (json) API of a handle server.
61
+ """
62
+
63
+ _inherited_slots: ClassVar[List[str]] = []
64
+
65
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["HandleAPIRecord"]
66
+ class_class_curie: ClassVar[str] = "pid4cat_model:HandleAPIRecord"
67
+ class_name: ClassVar[str] = "HandleAPIRecord"
68
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.HandleAPIRecord
69
+
70
+ handle: Union[str, HandleAPIRecordHandle] = None
71
+ values: Union[Union[dict, "HandleRecord"], List[Union[dict, "HandleRecord"]]] = None
72
+ responseCode: Optional[int] = None
73
+
74
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
75
+ if self._is_empty(self.handle):
76
+ self.MissingRequiredField("handle")
77
+ if not isinstance(self.handle, HandleAPIRecordHandle):
78
+ self.handle = HandleAPIRecordHandle(self.handle)
79
+
80
+ if self._is_empty(self.values):
81
+ self.MissingRequiredField("values")
82
+ self._normalize_inlined_as_dict(
83
+ slot_name="values",
84
+ slot_type=HandleRecord,
85
+ key_name="timestamp",
86
+ keyed=False,
87
+ )
88
+
89
+ if self.responseCode is not None and not isinstance(self.responseCode, int):
90
+ self.responseCode = int(self.responseCode)
91
+
92
+ super().__post_init__(**kwargs)
93
+
94
+
95
+ @dataclass(repr=False)
96
+ class HandleRecord(YAMLRoot):
97
+ """
98
+ A base class for handle-data classes that represent a handle record in the same way as in the REST (json) API of a
99
+ handle server.
100
+ """
101
+
102
+ _inherited_slots: ClassVar[List[str]] = []
103
+
104
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["HandleRecord"]
105
+ class_class_curie: ClassVar[str] = "pid4cat_model:HandleRecord"
106
+ class_name: ClassVar[str] = "HandleRecord"
107
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.HandleRecord
108
+
109
+ timestamp: Union[str, XSDDateTime] = None
110
+ type: str = None
111
+ ttl: Optional[int] = 86400
112
+
113
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
114
+ if self._is_empty(self.timestamp):
115
+ self.MissingRequiredField("timestamp")
116
+ if not isinstance(self.timestamp, XSDDateTime):
117
+ self.timestamp = XSDDateTime(self.timestamp)
118
+
119
+ if self._is_empty(self.type):
120
+ self.MissingRequiredField("type")
121
+ self.type = str(self.class_name)
122
+
123
+ if self.ttl is not None and not isinstance(self.ttl, int):
124
+ self.ttl = int(self.ttl)
125
+
126
+ super().__post_init__(**kwargs)
127
+ if self._is_empty(self.type):
128
+ self.MissingRequiredField("type")
129
+ self.type = str(self.class_name)
130
+
131
+ def __new__(cls, *args, **kwargs):
132
+ type_designator = "type"
133
+ if type_designator not in kwargs:
134
+ return super().__new__(cls, *args, **kwargs)
135
+ else:
136
+ type_designator_value = kwargs[type_designator]
137
+ target_cls = cls._class_for("class_name", type_designator_value)
138
+
139
+ if target_cls is None:
140
+ raise ValueError(
141
+ f"Wrong type designator value: class {cls.__name__} "
142
+ f"has no subclass with ['class_name']='{kwargs[type_designator]}'"
143
+ )
144
+ return super().__new__(target_cls, *args, **kwargs)
145
+
146
+
147
+ @dataclass(repr=False)
148
+ class URL(HandleRecord):
149
+ """
150
+ The data element in the handle API for the landing page URL.
151
+ """
152
+
153
+ _inherited_slots: ClassVar[List[str]] = []
154
+
155
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["URL"]
156
+ class_class_curie: ClassVar[str] = "pid4cat_model:URL"
157
+ class_name: ClassVar[str] = "URL"
158
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.URL
159
+
160
+ timestamp: Union[str, XSDDateTime] = None
161
+ type: str = None
162
+ index: int = None
163
+ data: Union[dict, "HdlDataUrl"] = None
164
+
165
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
166
+ if self._is_empty(self.index):
167
+ self.MissingRequiredField("index")
168
+ if not isinstance(self.index, int):
169
+ self.index = int(self.index)
170
+
171
+ if self._is_empty(self.data):
172
+ self.MissingRequiredField("data")
173
+ if not isinstance(self.data, HdlDataUrl):
174
+ self.data = HdlDataUrl(**as_dict(self.data))
175
+
176
+ super().__post_init__(**kwargs)
177
+ if self._is_empty(self.type):
178
+ self.MissingRequiredField("type")
179
+ self.type = str(self.class_name)
180
+
181
+
182
+ @dataclass(repr=False)
183
+ class HdlDataUrl(YAMLRoot):
184
+ """
185
+ The data class for the redirect url.
186
+ """
187
+
188
+ _inherited_slots: ClassVar[List[str]] = []
189
+
190
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["HdlDataUrl"]
191
+ class_class_curie: ClassVar[str] = "pid4cat_model:HdlDataUrl"
192
+ class_name: ClassVar[str] = "HdlDataUrl"
193
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.HdlDataUrl
194
+
195
+ value: str = None
196
+ format: Optional[str] = "string"
197
+
198
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
199
+ if self._is_empty(self.value):
200
+ self.MissingRequiredField("value")
201
+ if not isinstance(self.value, str):
202
+ self.value = str(self.value)
203
+
204
+ if self.format is not None and not isinstance(self.format, str):
205
+ self.format = str(self.format)
206
+
207
+ super().__post_init__(**kwargs)
208
+
209
+
210
+ @dataclass(repr=False)
211
+ class EMAIL(HandleRecord):
212
+ """
213
+ The data element in the handle API for the contact email.
214
+ """
215
+
216
+ _inherited_slots: ClassVar[List[str]] = []
217
+
218
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["EMAIL"]
219
+ class_class_curie: ClassVar[str] = "pid4cat_model:EMAIL"
220
+ class_name: ClassVar[str] = "EMAIL"
221
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.EMAIL
222
+
223
+ timestamp: Union[str, XSDDateTime] = None
224
+ type: str = None
225
+ index: int = None
226
+ data: Union[dict, "HdlDataContact"] = None
227
+
228
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
229
+ if self._is_empty(self.index):
230
+ self.MissingRequiredField("index")
231
+ if not isinstance(self.index, int):
232
+ self.index = int(self.index)
233
+
234
+ if self._is_empty(self.data):
235
+ self.MissingRequiredField("data")
236
+ if not isinstance(self.data, HdlDataContact):
237
+ self.data = HdlDataContact(**as_dict(self.data))
238
+
239
+ super().__post_init__(**kwargs)
240
+ if self._is_empty(self.type):
241
+ self.MissingRequiredField("type")
242
+ self.type = str(self.class_name)
243
+
244
+
245
+ @dataclass(repr=False)
246
+ class HdlDataContact(YAMLRoot):
247
+ """
248
+ The data class for the handle-record contact email.
249
+ """
250
+
251
+ _inherited_slots: ClassVar[List[str]] = []
252
+
253
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["HdlDataContact"]
254
+ class_class_curie: ClassVar[str] = "pid4cat_model:HdlDataContact"
255
+ class_name: ClassVar[str] = "HdlDataContact"
256
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.HdlDataContact
257
+
258
+ value: str = None
259
+ format: Optional[str] = "string"
260
+
261
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
262
+ if self._is_empty(self.value):
263
+ self.MissingRequiredField("value")
264
+ if not isinstance(self.value, str):
265
+ self.value = str(self.value)
266
+
267
+ if self.format is not None and not isinstance(self.format, str):
268
+ self.format = str(self.format)
269
+
270
+ super().__post_init__(**kwargs)
271
+
272
+
273
+ @dataclass(repr=False)
274
+ class STATUS(HandleRecord):
275
+ """
276
+ The data element in the handle API for the PID status information.
277
+ """
278
+
279
+ _inherited_slots: ClassVar[List[str]] = []
280
+
281
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["STATUS"]
282
+ class_class_curie: ClassVar[str] = "pid4cat_model:STATUS"
283
+ class_name: ClassVar[str] = "STATUS"
284
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.STATUS
285
+
286
+ timestamp: Union[str, XSDDateTime] = None
287
+ type: str = None
288
+ index: int = None
289
+ data: Union[dict, "HdlDataStatus"] = None
290
+
291
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
292
+ if self._is_empty(self.index):
293
+ self.MissingRequiredField("index")
294
+ if not isinstance(self.index, int):
295
+ self.index = int(self.index)
296
+
297
+ if self._is_empty(self.data):
298
+ self.MissingRequiredField("data")
299
+ if not isinstance(self.data, HdlDataStatus):
300
+ self.data = HdlDataStatus(**as_dict(self.data))
301
+
302
+ super().__post_init__(**kwargs)
303
+ if self._is_empty(self.type):
304
+ self.MissingRequiredField("type")
305
+ self.type = str(self.class_name)
306
+
307
+
308
+ @dataclass(repr=False)
309
+ class HdlDataStatus(YAMLRoot):
310
+ """
311
+ The data class for the PID status information.
312
+ """
313
+
314
+ _inherited_slots: ClassVar[List[str]] = []
315
+
316
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["HdlDataStatus"]
317
+ class_class_curie: ClassVar[str] = "pid4cat_model:HdlDataStatus"
318
+ class_name: ClassVar[str] = "HdlDataStatus"
319
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.HdlDataStatus
320
+
321
+ value: Union[str, "Pid4CatStatus"] = None
322
+ format: Optional[str] = "string"
323
+
324
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
325
+ if self._is_empty(self.value):
326
+ self.MissingRequiredField("value")
327
+ if not isinstance(self.value, Pid4CatStatus):
328
+ self.value = Pid4CatStatus(self.value)
329
+
330
+ if self.format is not None and not isinstance(self.format, str):
331
+ self.format = str(self.format)
332
+
333
+ super().__post_init__(**kwargs)
334
+
335
+
336
+ @dataclass(repr=False)
337
+ class SCHEMAVER(HandleRecord):
338
+ """
339
+ The data element in the handle API for the schema version.
340
+ """
341
+
342
+ _inherited_slots: ClassVar[List[str]] = []
343
+
344
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["SCHEMAVER"]
345
+ class_class_curie: ClassVar[str] = "pid4cat_model:SCHEMAVER"
346
+ class_name: ClassVar[str] = "SCHEMA_VER"
347
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.SCHEMAVER
348
+
349
+ timestamp: Union[str, XSDDateTime] = None
350
+ type: str = None
351
+ index: int = None
352
+ data: Union[dict, "HdlDataSchemaVer"] = None
353
+
354
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
355
+ if self._is_empty(self.index):
356
+ self.MissingRequiredField("index")
357
+ if not isinstance(self.index, int):
358
+ self.index = int(self.index)
359
+
360
+ if self._is_empty(self.data):
361
+ self.MissingRequiredField("data")
362
+ if not isinstance(self.data, HdlDataSchemaVer):
363
+ self.data = HdlDataSchemaVer(**as_dict(self.data))
364
+
365
+ super().__post_init__(**kwargs)
366
+ if self._is_empty(self.type):
367
+ self.MissingRequiredField("type")
368
+ self.type = str(self.class_name)
369
+
370
+
371
+ @dataclass(repr=False)
372
+ class HdlDataSchemaVer(YAMLRoot):
373
+ """
374
+ The data class for the schema version.
375
+ """
376
+
377
+ _inherited_slots: ClassVar[List[str]] = []
378
+
379
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["HdlDataSchemaVer"]
380
+ class_class_curie: ClassVar[str] = "pid4cat_model:HdlDataSchemaVer"
381
+ class_name: ClassVar[str] = "HdlDataSchemaVer"
382
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.HdlDataSchemaVer
383
+
384
+ value: str = None
385
+ format: Optional[str] = "string"
386
+
387
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
388
+ if self._is_empty(self.value):
389
+ self.MissingRequiredField("value")
390
+ if not isinstance(self.value, str):
391
+ self.value = str(self.value)
392
+
393
+ if self.format is not None and not isinstance(self.format, str):
394
+ self.format = str(self.format)
395
+
396
+ super().__post_init__(**kwargs)
397
+
398
+
399
+ @dataclass(repr=False)
400
+ class METADATALICENSE(HandleRecord):
401
+ """
402
+ The data element in the handle API for the PID metadata license.
403
+ """
404
+
405
+ _inherited_slots: ClassVar[List[str]] = []
406
+
407
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["METADATALICENSE"]
408
+ class_class_curie: ClassVar[str] = "pid4cat_model:METADATALICENSE"
409
+ class_name: ClassVar[str] = "METADATA_LICENSE"
410
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.METADATALICENSE
411
+
412
+ timestamp: Union[str, XSDDateTime] = None
413
+ type: str = None
414
+ index: int = None
415
+ data: Union[dict, "HdlDataLicense"] = None
416
+
417
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
418
+ if self._is_empty(self.index):
419
+ self.MissingRequiredField("index")
420
+ if not isinstance(self.index, int):
421
+ self.index = int(self.index)
422
+
423
+ if self._is_empty(self.data):
424
+ self.MissingRequiredField("data")
425
+ if not isinstance(self.data, HdlDataLicense):
426
+ self.data = HdlDataLicense(**as_dict(self.data))
427
+
428
+ super().__post_init__(**kwargs)
429
+ if self._is_empty(self.type):
430
+ self.MissingRequiredField("type")
431
+ self.type = str(self.class_name)
432
+
433
+
434
+ @dataclass(repr=False)
435
+ class HdlDataLicense(YAMLRoot):
436
+ """
437
+ The data class for the PID metadata license.
438
+ """
439
+
440
+ _inherited_slots: ClassVar[List[str]] = []
441
+
442
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["HdlDataLicense"]
443
+ class_class_curie: ClassVar[str] = "pid4cat_model:HdlDataLicense"
444
+ class_name: ClassVar[str] = "HdlDataLicense"
445
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.HdlDataLicense
446
+
447
+ value: str = None
448
+ format: Optional[str] = "string"
449
+
450
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
451
+ if self._is_empty(self.value):
452
+ self.MissingRequiredField("value")
453
+ if not isinstance(self.value, str):
454
+ self.value = str(self.value)
455
+
456
+ if self.format is not None and not isinstance(self.format, str):
457
+ self.format = str(self.format)
458
+
459
+ super().__post_init__(**kwargs)
460
+
461
+
462
+ @dataclass(repr=False)
463
+ class RESOURCE(HandleRecord):
464
+ """
465
+ The data element in the handle API for the resource info.
466
+ """
467
+
468
+ _inherited_slots: ClassVar[List[str]] = []
469
+
470
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["RESOURCE"]
471
+ class_class_curie: ClassVar[str] = "pid4cat_model:RESOURCE"
472
+ class_name: ClassVar[str] = "RESOURCE"
473
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.RESOURCE
474
+
475
+ timestamp: Union[str, XSDDateTime] = None
476
+ type: str = None
477
+ index: int = None
478
+ data: Union[dict, "HdlDataResourceInfo"] = None
479
+
480
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
481
+ if self._is_empty(self.index):
482
+ self.MissingRequiredField("index")
483
+ if not isinstance(self.index, int):
484
+ self.index = int(self.index)
485
+
486
+ if self._is_empty(self.data):
487
+ self.MissingRequiredField("data")
488
+ if not isinstance(self.data, HdlDataResourceInfo):
489
+ self.data = HdlDataResourceInfo(**as_dict(self.data))
490
+
491
+ super().__post_init__(**kwargs)
492
+ if self._is_empty(self.type):
493
+ self.MissingRequiredField("type")
494
+ self.type = str(self.class_name)
495
+
496
+
497
+ @dataclass(repr=False)
498
+ class HdlDataResourceInfo(YAMLRoot):
499
+ """
500
+ The data class for the resource info.
501
+ """
502
+
503
+ _inherited_slots: ClassVar[List[str]] = []
504
+
505
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["HdlDataResourceInfo"]
506
+ class_class_curie: ClassVar[str] = "pid4cat_model:HdlDataResourceInfo"
507
+ class_name: ClassVar[str] = "HdlDataResourceInfo"
508
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.HdlDataResourceInfo
509
+
510
+ value: Union[dict, "ResourceInfo"] = None
511
+ format: Optional[str] = "string"
512
+
513
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
514
+ if self._is_empty(self.value):
515
+ self.MissingRequiredField("value")
516
+ if not isinstance(self.value, ResourceInfo):
517
+ self.value = ResourceInfo(**as_dict(self.value))
518
+
519
+ if self.format is not None and not isinstance(self.format, str):
520
+ self.format = str(self.format)
521
+
522
+ super().__post_init__(**kwargs)
523
+
524
+
525
+ @dataclass(repr=False)
526
+ class RELATED(HandleRecord):
527
+ """
528
+ The data element in the handle API for related identifiers.
529
+ """
530
+
531
+ _inherited_slots: ClassVar[List[str]] = []
532
+
533
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["RELATED"]
534
+ class_class_curie: ClassVar[str] = "pid4cat_model:RELATED"
535
+ class_name: ClassVar[str] = "RELATED"
536
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.RELATED
537
+
538
+ timestamp: Union[str, XSDDateTime] = None
539
+ type: str = None
540
+ index: int = None
541
+ data: Union[dict, "HdlDataRelated"] = None
542
+
543
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
544
+ if self._is_empty(self.index):
545
+ self.MissingRequiredField("index")
546
+ if not isinstance(self.index, int):
547
+ self.index = int(self.index)
548
+
549
+ if self._is_empty(self.data):
550
+ self.MissingRequiredField("data")
551
+ if not isinstance(self.data, HdlDataRelated):
552
+ self.data = HdlDataRelated(**as_dict(self.data))
553
+
554
+ super().__post_init__(**kwargs)
555
+ if self._is_empty(self.type):
556
+ self.MissingRequiredField("type")
557
+ self.type = str(self.class_name)
558
+
559
+
560
+ @dataclass(repr=False)
561
+ class HdlDataRelated(YAMLRoot):
562
+ """
563
+ The data class for related identifiers.
564
+ """
565
+
566
+ _inherited_slots: ClassVar[List[str]] = []
567
+
568
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["HdlDataRelated"]
569
+ class_class_curie: ClassVar[str] = "pid4cat_model:HdlDataRelated"
570
+ class_name: ClassVar[str] = "HdlDataRelated"
571
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.HdlDataRelated
572
+
573
+ format: Optional[str] = "string"
574
+ value: Optional[
575
+ Union[Union[dict, "Pid4CatRelation"], List[Union[dict, "Pid4CatRelation"]]]
576
+ ] = empty_list()
577
+
578
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
579
+ if self.format is not None and not isinstance(self.format, str):
580
+ self.format = str(self.format)
581
+
582
+ if not isinstance(self.value, list):
583
+ self.value = [self.value] if self.value is not None else []
584
+ self.value = [
585
+ v if isinstance(v, Pid4CatRelation) else Pid4CatRelation(**as_dict(v))
586
+ for v in self.value
587
+ ]
588
+
589
+ super().__post_init__(**kwargs)
590
+
591
+
592
+ @dataclass(repr=False)
593
+ class CHANGES(HandleRecord):
594
+ """
595
+ The data element in the handle API for the change log.
596
+ """
597
+
598
+ _inherited_slots: ClassVar[List[str]] = []
599
+
600
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["CHANGES"]
601
+ class_class_curie: ClassVar[str] = "pid4cat_model:CHANGES"
602
+ class_name: ClassVar[str] = "CHANGES"
603
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.CHANGES
604
+
605
+ timestamp: Union[str, XSDDateTime] = None
606
+ type: str = None
607
+ index: int = None
608
+ data: Union[dict, "HdlDataLog"] = None
609
+
610
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
611
+ if self._is_empty(self.index):
612
+ self.MissingRequiredField("index")
613
+ if not isinstance(self.index, int):
614
+ self.index = int(self.index)
615
+
616
+ if self._is_empty(self.data):
617
+ self.MissingRequiredField("data")
618
+ if not isinstance(self.data, HdlDataLog):
619
+ self.data = HdlDataLog(**as_dict(self.data))
620
+
621
+ super().__post_init__(**kwargs)
622
+ if self._is_empty(self.type):
623
+ self.MissingRequiredField("type")
624
+ self.type = str(self.class_name)
625
+
626
+
627
+ @dataclass(repr=False)
628
+ class HdlDataLog(YAMLRoot):
629
+ """
630
+ The data class for the change log.
631
+ """
632
+
633
+ _inherited_slots: ClassVar[List[str]] = []
634
+
635
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["HdlDataLog"]
636
+ class_class_curie: ClassVar[str] = "pid4cat_model:HdlDataLog"
637
+ class_name: ClassVar[str] = "HdlDataLog"
638
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.HdlDataLog
639
+
640
+ value: Union[Union[dict, "LogRecord"], List[Union[dict, "LogRecord"]]] = None
641
+ format: Optional[str] = "string"
642
+
643
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
644
+ if self._is_empty(self.value):
645
+ self.MissingRequiredField("value")
646
+ self._normalize_inlined_as_dict(
647
+ slot_name="value", slot_type=LogRecord, key_name="datetime_log", keyed=False
648
+ )
649
+
650
+ if self.format is not None and not isinstance(self.format, str):
651
+ self.format = str(self.format)
652
+
653
+ super().__post_init__(**kwargs)
654
+
655
+
656
+ @dataclass(repr=False)
657
+ class HandleRecordContainer(YAMLRoot):
658
+ """
659
+ A container for all HandleRecords.
660
+ """
661
+
662
+ _inherited_slots: ClassVar[List[str]] = []
663
+
664
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["HandleRecordContainer"]
665
+ class_class_curie: ClassVar[str] = "pid4cat_model:HandleRecordContainer"
666
+ class_name: ClassVar[str] = "HandleRecordContainer"
667
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.HandleRecordContainer
668
+
669
+ contains_pids: Optional[
670
+ Union[
671
+ Dict[Union[str, HandleAPIRecordHandle], Union[dict, HandleAPIRecord]],
672
+ List[Union[dict, HandleAPIRecord]],
673
+ ]
674
+ ] = empty_dict()
675
+
676
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
677
+ self._normalize_inlined_as_list(
678
+ slot_name="contains_pids",
679
+ slot_type=HandleAPIRecord,
680
+ key_name="handle",
681
+ keyed=True,
682
+ )
683
+
684
+ super().__post_init__(**kwargs)
685
+
686
+
687
+ @dataclass(repr=False)
688
+ class Pid4CatRelation(YAMLRoot):
689
+ """
690
+ Data class for a relation to another resource identified by a pid4cat handle or another PID type.
691
+ """
692
+
693
+ _inherited_slots: ClassVar[List[str]] = []
694
+
695
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["Pid4CatRelation"]
696
+ class_class_curie: ClassVar[str] = "pid4cat_model:Pid4CatRelation"
697
+ class_name: ClassVar[str] = "Pid4CatRelation"
698
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.Pid4CatRelation
699
+
700
+ relation_type: Optional[Union[str, "RelationType"]] = None
701
+ related_identifier: Optional[Union[dict, "RelatedIdentifier"]] = None
702
+ datetime_log: Optional[Union[str, XSDDateTime]] = None
703
+
704
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
705
+ if self.relation_type is not None and not isinstance(
706
+ self.relation_type, RelationType
707
+ ):
708
+ self.relation_type = RelationType(self.relation_type)
709
+
710
+ if self.related_identifier is not None and not isinstance(
711
+ self.related_identifier, RelatedIdentifier
712
+ ):
713
+ self.related_identifier = RelatedIdentifier(
714
+ **as_dict(self.related_identifier)
715
+ )
716
+
717
+ if self.datetime_log is not None and not isinstance(
718
+ self.datetime_log, XSDDateTime
719
+ ):
720
+ self.datetime_log = XSDDateTime(self.datetime_log)
721
+
722
+ super().__post_init__(**kwargs)
723
+
724
+
725
+ @dataclass(repr=False)
726
+ class ResourceInfo(YAMLRoot):
727
+ """
728
+ Data class to hold information about the resource and its representation.
729
+ """
730
+
731
+ _inherited_slots: ClassVar[List[str]] = []
732
+
733
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["ResourceInfo"]
734
+ class_class_curie: ClassVar[str] = "pid4cat_model:ResourceInfo"
735
+ class_name: ClassVar[str] = "ResourceInfo"
736
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.ResourceInfo
737
+
738
+ resource_category: Union[str, "ResourceCategory"] = None
739
+ representation_variants: Union[
740
+ Union[dict, "RepresentationVariant"], List[Union[dict, "RepresentationVariant"]]
741
+ ] = None
742
+ label: Optional[str] = None
743
+ description: Optional[str] = None
744
+
745
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
746
+ if self._is_empty(self.resource_category):
747
+ self.MissingRequiredField("resource_category")
748
+ if not isinstance(self.resource_category, ResourceCategory):
749
+ self.resource_category = ResourceCategory(self.resource_category)
750
+
751
+ if self._is_empty(self.representation_variants):
752
+ self.MissingRequiredField("representation_variants")
753
+ if not isinstance(self.representation_variants, list):
754
+ self.representation_variants = (
755
+ [self.representation_variants]
756
+ if self.representation_variants is not None
757
+ else []
758
+ )
759
+ self.representation_variants = [
760
+ v
761
+ if isinstance(v, RepresentationVariant)
762
+ else RepresentationVariant(**as_dict(v))
763
+ for v in self.representation_variants
764
+ ]
765
+
766
+ if self.label is not None and not isinstance(self.label, str):
767
+ self.label = str(self.label)
768
+
769
+ if self.description is not None and not isinstance(self.description, str):
770
+ self.description = str(self.description)
771
+
772
+ super().__post_init__(**kwargs)
773
+
774
+
775
+ @dataclass(repr=False)
776
+ class LogRecord(YAMLRoot):
777
+ """
778
+ Data class for a change log of modification made on a pid4cat handle record starting from its registration.
779
+ """
780
+
781
+ _inherited_slots: ClassVar[List[str]] = []
782
+
783
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["LogRecord"]
784
+ class_class_curie: ClassVar[str] = "pid4cat_model:LogRecord"
785
+ class_name: ClassVar[str] = "LogRecord"
786
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.LogRecord
787
+
788
+ datetime_log: Union[str, XSDDateTime] = None
789
+ has_agent: Union[dict, "Agent"] = None
790
+ changed_field: Union[str, "ChangeLogField"] = None
791
+ description: Optional[str] = None
792
+
793
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
794
+ if self._is_empty(self.datetime_log):
795
+ self.MissingRequiredField("datetime_log")
796
+ if not isinstance(self.datetime_log, XSDDateTime):
797
+ self.datetime_log = XSDDateTime(self.datetime_log)
798
+
799
+ if self._is_empty(self.has_agent):
800
+ self.MissingRequiredField("has_agent")
801
+ if not isinstance(self.has_agent, Agent):
802
+ self.has_agent = Agent(**as_dict(self.has_agent))
803
+
804
+ if self._is_empty(self.changed_field):
805
+ self.MissingRequiredField("changed_field")
806
+ if not isinstance(self.changed_field, ChangeLogField):
807
+ self.changed_field = ChangeLogField(self.changed_field)
808
+
809
+ if self.description is not None and not isinstance(self.description, str):
810
+ self.description = str(self.description)
811
+
812
+ super().__post_init__(**kwargs)
813
+
814
+
815
+ @dataclass(repr=False)
816
+ class Agent(YAMLRoot):
817
+ """
818
+ Data class for a person who plays a role relative to PID creation or curation.
819
+ """
820
+
821
+ _inherited_slots: ClassVar[List[str]] = []
822
+
823
+ class_class_uri: ClassVar[URIRef] = PROV["Agent"]
824
+ class_class_curie: ClassVar[str] = "prov:Agent"
825
+ class_name: ClassVar[str] = "Agent"
826
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.Agent
827
+
828
+ name: str = None
829
+ email_address: str = None
830
+ role: Union[str, "Pid4CatAgentRole"] = None
831
+ orcid: Optional[str] = None
832
+ affiliation_ror: Optional[Union[str, URI]] = None
833
+
834
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
835
+ if self._is_empty(self.name):
836
+ self.MissingRequiredField("name")
837
+ if not isinstance(self.name, str):
838
+ self.name = str(self.name)
839
+
840
+ if self._is_empty(self.email_address):
841
+ self.MissingRequiredField("email_address")
842
+ if not isinstance(self.email_address, str):
843
+ self.email_address = str(self.email_address)
844
+
845
+ if self._is_empty(self.role):
846
+ self.MissingRequiredField("role")
847
+ if not isinstance(self.role, Pid4CatAgentRole):
848
+ self.role = Pid4CatAgentRole(self.role)
849
+
850
+ if self.orcid is not None and not isinstance(self.orcid, str):
851
+ self.orcid = str(self.orcid)
852
+
853
+ if self.affiliation_ror is not None and not isinstance(
854
+ self.affiliation_ror, URI
855
+ ):
856
+ self.affiliation_ror = URI(self.affiliation_ror)
857
+
858
+ super().__post_init__(**kwargs)
859
+
860
+
861
+ @dataclass(repr=False)
862
+ class RepresentationVariant(YAMLRoot):
863
+ """
864
+ Data class for representations of the resource in other media types than text/html which is the default for
865
+ landing_page_url.
866
+ """
867
+
868
+ _inherited_slots: ClassVar[List[str]] = []
869
+
870
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["RepresentationVariant"]
871
+ class_class_curie: ClassVar[str] = "pid4cat_model:RepresentationVariant"
872
+ class_name: ClassVar[str] = "RepresentationVariant"
873
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.RepresentationVariant
874
+
875
+ variant_url: Optional[Union[str, URI]] = None
876
+ media_type: Optional[Union[str, "MediaTypesEnum"]] = None
877
+ encoding_format: Optional[str] = None
878
+ size: Optional[int] = None
879
+
880
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
881
+ if self.variant_url is not None and not isinstance(self.variant_url, URI):
882
+ self.variant_url = URI(self.variant_url)
883
+
884
+ if self.media_type is not None and not isinstance(
885
+ self.media_type, MediaTypesEnum
886
+ ):
887
+ self.media_type = MediaTypesEnum(self.media_type)
888
+
889
+ if self.encoding_format is not None and not isinstance(
890
+ self.encoding_format, str
891
+ ):
892
+ self.encoding_format = str(self.encoding_format)
893
+
894
+ if self.size is not None and not isinstance(self.size, int):
895
+ self.size = int(self.size)
896
+
897
+ super().__post_init__(**kwargs)
898
+
899
+
900
+ @dataclass(repr=False)
901
+ class RelatedIdentifier(YAMLRoot):
902
+ """
903
+ A base class for all types of related identifiers.
904
+ """
905
+
906
+ _inherited_slots: ClassVar[List[str]] = []
907
+
908
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["RelatedIdentifier"]
909
+ class_class_curie: ClassVar[str] = "pid4cat_model:RelatedIdentifier"
910
+ class_name: ClassVar[str] = "RelatedIdentifier"
911
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.RelatedIdentifier
912
+
913
+ type: str = None
914
+
915
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
916
+ if self._is_empty(self.type):
917
+ self.MissingRequiredField("type")
918
+ self.type = str(self.class_name)
919
+
920
+ super().__post_init__(**kwargs)
921
+ if self._is_empty(self.type):
922
+ self.MissingRequiredField("type")
923
+ self.type = str(self.class_name)
924
+
925
+ def __new__(cls, *args, **kwargs):
926
+ type_designator = "type"
927
+ if type_designator not in kwargs:
928
+ return super().__new__(cls, *args, **kwargs)
929
+ else:
930
+ type_designator_value = kwargs[type_designator]
931
+ target_cls = cls._class_for("class_name", type_designator_value)
932
+
933
+ if target_cls is None:
934
+ raise ValueError(
935
+ f"Wrong type designator value: class {cls.__name__} "
936
+ f"has no subclass with ['class_name']='{kwargs[type_designator]}'"
937
+ )
938
+ return super().__new__(target_cls, *args, **kwargs)
939
+
940
+
941
+ @dataclass(repr=False)
942
+ class PurlIdentifier(RelatedIdentifier):
943
+ """
944
+ A PURL (permanent uniform resource locator).
945
+ """
946
+
947
+ _inherited_slots: ClassVar[List[str]] = []
948
+
949
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["PurlIdentifier"]
950
+ class_class_curie: ClassVar[str] = "pid4cat_model:PurlIdentifier"
951
+ class_name: ClassVar[str] = "PurlIdentifier"
952
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.PurlIdentifier
953
+
954
+ type: str = None
955
+ resolving_url: Union[str, URI] = None
956
+
957
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
958
+ if self._is_empty(self.resolving_url):
959
+ self.MissingRequiredField("resolving_url")
960
+ if not isinstance(self.resolving_url, URI):
961
+ self.resolving_url = URI(self.resolving_url)
962
+
963
+ super().__post_init__(**kwargs)
964
+ if self._is_empty(self.type):
965
+ self.MissingRequiredField("type")
966
+ self.type = str(self.class_name)
967
+
968
+
969
+ @dataclass(repr=False)
970
+ class DoiIdentifier(RelatedIdentifier):
971
+ """
972
+ A digital object identifier (DOI).
973
+ """
974
+
975
+ _inherited_slots: ClassVar[List[str]] = []
976
+
977
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["DoiIdentifier"]
978
+ class_class_curie: ClassVar[str] = "pid4cat_model:DoiIdentifier"
979
+ class_name: ClassVar[str] = "DoiIdentifier"
980
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.DoiIdentifier
981
+
982
+ type: str = None
983
+ resolving_url: Union[str, URI] = None
984
+ identifier: Optional[str] = None
985
+
986
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
987
+ if self._is_empty(self.resolving_url):
988
+ self.MissingRequiredField("resolving_url")
989
+ if not isinstance(self.resolving_url, URI):
990
+ self.resolving_url = URI(self.resolving_url)
991
+
992
+ if self.identifier is not None and not isinstance(self.identifier, str):
993
+ self.identifier = str(self.identifier)
994
+
995
+ super().__post_init__(**kwargs)
996
+ if self._is_empty(self.type):
997
+ self.MissingRequiredField("type")
998
+ self.type = str(self.class_name)
999
+
1000
+
1001
+ @dataclass(repr=False)
1002
+ class HandleIdentifier(RelatedIdentifier):
1003
+ """
1004
+ A handle identifier.
1005
+ """
1006
+
1007
+ _inherited_slots: ClassVar[List[str]] = []
1008
+
1009
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["HandleIdentifier"]
1010
+ class_class_curie: ClassVar[str] = "pid4cat_model:HandleIdentifier"
1011
+ class_name: ClassVar[str] = "HandleIdentifier"
1012
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.HandleIdentifier
1013
+
1014
+ type: str = None
1015
+ resolving_url: Union[str, URI] = None
1016
+ identifier: Optional[str] = None
1017
+
1018
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
1019
+ if self._is_empty(self.resolving_url):
1020
+ self.MissingRequiredField("resolving_url")
1021
+ if not isinstance(self.resolving_url, URI):
1022
+ self.resolving_url = URI(self.resolving_url)
1023
+
1024
+ if self.identifier is not None and not isinstance(self.identifier, str):
1025
+ self.identifier = str(self.identifier)
1026
+
1027
+ super().__post_init__(**kwargs)
1028
+ if self._is_empty(self.type):
1029
+ self.MissingRequiredField("type")
1030
+ self.type = str(self.class_name)
1031
+
1032
+
1033
+ @dataclass(repr=False)
1034
+ class ArkIdentifier(RelatedIdentifier):
1035
+ """
1036
+ An ARK (Archival Resource Key).
1037
+ """
1038
+
1039
+ _inherited_slots: ClassVar[List[str]] = []
1040
+
1041
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["ArkIdentifier"]
1042
+ class_class_curie: ClassVar[str] = "pid4cat_model:ArkIdentifier"
1043
+ class_name: ClassVar[str] = "ArkIdentifier"
1044
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.ArkIdentifier
1045
+
1046
+ type: str = None
1047
+ resolving_url: Union[str, URI] = None
1048
+ identifier: Optional[str] = None
1049
+
1050
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
1051
+ if self._is_empty(self.resolving_url):
1052
+ self.MissingRequiredField("resolving_url")
1053
+ if not isinstance(self.resolving_url, URI):
1054
+ self.resolving_url = URI(self.resolving_url)
1055
+
1056
+ if self.identifier is not None and not isinstance(self.identifier, str):
1057
+ self.identifier = str(self.identifier)
1058
+
1059
+ super().__post_init__(**kwargs)
1060
+ if self._is_empty(self.type):
1061
+ self.MissingRequiredField("type")
1062
+ self.type = str(self.class_name)
1063
+
1064
+
1065
+ @dataclass(repr=False)
1066
+ class UrnIdentifier(RelatedIdentifier):
1067
+ """
1068
+ A URN (Uniform Resource Name).
1069
+ """
1070
+
1071
+ _inherited_slots: ClassVar[List[str]] = []
1072
+
1073
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["UrnIdentifier"]
1074
+ class_class_curie: ClassVar[str] = "pid4cat_model:UrnIdentifier"
1075
+ class_name: ClassVar[str] = "UrnIdentifier"
1076
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.UrnIdentifier
1077
+
1078
+ type: str = None
1079
+ identifier: str = None
1080
+
1081
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
1082
+ if self._is_empty(self.identifier):
1083
+ self.MissingRequiredField("identifier")
1084
+ if not isinstance(self.identifier, str):
1085
+ self.identifier = str(self.identifier)
1086
+
1087
+ super().__post_init__(**kwargs)
1088
+ if self._is_empty(self.type):
1089
+ self.MissingRequiredField("type")
1090
+ self.type = str(self.class_name)
1091
+
1092
+
1093
+ @dataclass(repr=False)
1094
+ class GtinIdentifier(RelatedIdentifier):
1095
+ """
1096
+ A Global Trade Item Number (GTIN) previously called European Article Number (EAN) often encoded as EAN13 barcode.
1097
+ The identifier is used to identify products. GTINs don't have a resolvable URL.
1098
+ """
1099
+
1100
+ _inherited_slots: ClassVar[List[str]] = []
1101
+
1102
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["GtinIdentifier"]
1103
+ class_class_curie: ClassVar[str] = "pid4cat_model:GtinIdentifier"
1104
+ class_name: ClassVar[str] = "GtinIdentifier"
1105
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.GtinIdentifier
1106
+
1107
+ type: str = None
1108
+ identifier: str = None
1109
+
1110
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
1111
+ if self._is_empty(self.identifier):
1112
+ self.MissingRequiredField("identifier")
1113
+ if not isinstance(self.identifier, str):
1114
+ self.identifier = str(self.identifier)
1115
+
1116
+ super().__post_init__(**kwargs)
1117
+ if self._is_empty(self.type):
1118
+ self.MissingRequiredField("type")
1119
+ self.type = str(self.class_name)
1120
+
1121
+
1122
+ @dataclass(repr=False)
1123
+ class ExampleIdentifier(RelatedIdentifier):
1124
+ """
1125
+ An example.org test identifier.
1126
+ """
1127
+
1128
+ _inherited_slots: ClassVar[List[str]] = []
1129
+
1130
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["ExampleIdentifier"]
1131
+ class_class_curie: ClassVar[str] = "pid4cat_model:ExampleIdentifier"
1132
+ class_name: ClassVar[str] = "ExampleIdentifier"
1133
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.ExampleIdentifier
1134
+
1135
+ type: str = None
1136
+ identifier: Optional[str] = None
1137
+ resolving_url: Optional[Union[str, URI]] = None
1138
+
1139
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
1140
+ if self.identifier is not None and not isinstance(self.identifier, str):
1141
+ self.identifier = str(self.identifier)
1142
+
1143
+ if self.resolving_url is not None and not isinstance(self.resolving_url, URI):
1144
+ self.resolving_url = URI(self.resolving_url)
1145
+
1146
+ super().__post_init__(**kwargs)
1147
+ if self._is_empty(self.type):
1148
+ self.MissingRequiredField("type")
1149
+ self.type = str(self.class_name)
1150
+
1151
+
1152
+ @dataclass(repr=False)
1153
+ class Pid4CatRecord(YAMLRoot):
1154
+ """
1155
+ A class representing pid4cat identifiers with its metadata as objects. This is a neutral object-oriented
1156
+ representation that does not mirror the record structure of the handle system but is provided as representation
1157
+ that is more convenient to use in programming languages.
1158
+ """
1159
+
1160
+ _inherited_slots: ClassVar[List[str]] = []
1161
+
1162
+ class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["Pid4CatRecord"]
1163
+ class_class_curie: ClassVar[str] = "pid4cat_model:Pid4CatRecord"
1164
+ class_name: ClassVar[str] = "Pid4CatRecord"
1165
+ class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.Pid4CatRecord
1166
+
1167
+ landing_page_url: str = None
1168
+ status: Union[str, "Pid4CatStatus"] = None
1169
+ schema_version: str = None
1170
+ metadata_license: str = None
1171
+ curation_contact: str = None
1172
+ resource_info: Union[dict, ResourceInfo] = None
1173
+ change_log: Union[Union[dict, LogRecord], List[Union[dict, LogRecord]]] = None
1174
+ related_identifiers: Optional[
1175
+ Union[Union[dict, Pid4CatRelation], List[Union[dict, Pid4CatRelation]]]
1176
+ ] = empty_list()
1177
+
1178
+ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
1179
+ if self._is_empty(self.landing_page_url):
1180
+ self.MissingRequiredField("landing_page_url")
1181
+ if not isinstance(self.landing_page_url, str):
1182
+ self.landing_page_url = str(self.landing_page_url)
1183
+
1184
+ if self._is_empty(self.status):
1185
+ self.MissingRequiredField("status")
1186
+ if not isinstance(self.status, Pid4CatStatus):
1187
+ self.status = Pid4CatStatus(self.status)
1188
+
1189
+ if self._is_empty(self.schema_version):
1190
+ self.MissingRequiredField("schema_version")
1191
+ if not isinstance(self.schema_version, str):
1192
+ self.schema_version = str(self.schema_version)
1193
+
1194
+ if self._is_empty(self.metadata_license):
1195
+ self.MissingRequiredField("metadata_license")
1196
+ if not isinstance(self.metadata_license, str):
1197
+ self.metadata_license = str(self.metadata_license)
1198
+
1199
+ if self._is_empty(self.curation_contact):
1200
+ self.MissingRequiredField("curation_contact")
1201
+ if not isinstance(self.curation_contact, str):
1202
+ self.curation_contact = str(self.curation_contact)
1203
+
1204
+ if self._is_empty(self.resource_info):
1205
+ self.MissingRequiredField("resource_info")
1206
+ if not isinstance(self.resource_info, ResourceInfo):
1207
+ self.resource_info = ResourceInfo(**as_dict(self.resource_info))
1208
+
1209
+ if self._is_empty(self.change_log):
1210
+ self.MissingRequiredField("change_log")
1211
+ self._normalize_inlined_as_dict(
1212
+ slot_name="change_log",
1213
+ slot_type=LogRecord,
1214
+ key_name="datetime_log",
1215
+ keyed=False,
1216
+ )
1217
+
1218
+ if not isinstance(self.related_identifiers, list):
1219
+ self.related_identifiers = (
1220
+ [self.related_identifiers]
1221
+ if self.related_identifiers is not None
1222
+ else []
1223
+ )
1224
+ self.related_identifiers = [
1225
+ v if isinstance(v, Pid4CatRelation) else Pid4CatRelation(**as_dict(v))
1226
+ for v in self.related_identifiers
1227
+ ]
1228
+
1229
+ super().__post_init__(**kwargs)
1230
+
1231
+
1232
+ # Enumerations
1233
+ class ResourceCategory(EnumDefinitionImpl):
1234
+ """
1235
+ The ResourceCategory expresses for which type of resource the PID is used, e.g. if the PID is for a sample or a
1236
+ device.
1237
+ """
1238
+
1239
+ COLLECTION = PermissibleValue(
1240
+ text="COLLECTION",
1241
+ description="A collection is a group of resources and/or other collections.",
1242
+ meaning=VOC4CAT["0005012"],
1243
+ )
1244
+ SAMPLE = PermissibleValue(
1245
+ text="SAMPLE",
1246
+ description="A representative part of a material of interest on which observations are made.",
1247
+ meaning=VOC4CAT["0005013"],
1248
+ )
1249
+ MATERIAL = PermissibleValue(
1250
+ text="MATERIAL",
1251
+ description="A material used in the research process (except samples).",
1252
+ meaning=VOC4CAT["0005014"],
1253
+ )
1254
+ DEVICE = PermissibleValue(
1255
+ text="DEVICE",
1256
+ description="A physical device used in a research or manufacturing process.",
1257
+ meaning=VOC4CAT["0005015"],
1258
+ )
1259
+ DATA_OBJECT = PermissibleValue(
1260
+ text="DATA_OBJECT",
1261
+ description="""A collection of data available for access or download. A data object might be a data file, a data set, a data collection.""",
1262
+ meaning=VOC4CAT["0005016"],
1263
+ )
1264
+ DATA_SERVICE = PermissibleValue(
1265
+ text="DATA_SERVICE",
1266
+ description="""An organized system of operations that provide data processing functions or access to datasets.""",
1267
+ meaning=VOC4CAT["0005017"],
1268
+ )
1269
+
1270
+ _defn = EnumDefinition(
1271
+ name="ResourceCategory",
1272
+ description="""The ResourceCategory expresses for which type of resource the PID is used, e.g. if the PID is for a sample or a device.""",
1273
+ )
1274
+
1275
+
1276
+ class RelationType(EnumDefinitionImpl):
1277
+ """
1278
+ The type of relation between two resources referenced by their PIDs.
1279
+ """
1280
+
1281
+ IS_CITED_BY = PermissibleValue(
1282
+ text="IS_CITED_BY",
1283
+ description="The resource is cited by another resource.",
1284
+ meaning=VOC4CAT["0005019"],
1285
+ )
1286
+ CITES = PermissibleValue(
1287
+ text="CITES",
1288
+ description="The resource cites another resource.",
1289
+ meaning=VOC4CAT["0005020"],
1290
+ )
1291
+ IS_SUPPLEMENT_TO = PermissibleValue(
1292
+ text="IS_SUPPLEMENT_TO",
1293
+ description="The resource is supplemented by another resource.",
1294
+ meaning=VOC4CAT["0005021"],
1295
+ )
1296
+ IS_SUPPLEMENTED_BY = PermissibleValue(
1297
+ text="IS_SUPPLEMENTED_BY",
1298
+ description="The resource supplements another resource.",
1299
+ meaning=VOC4CAT["0005022"],
1300
+ )
1301
+ IS_CONTINUED_BY = PermissibleValue(
1302
+ text="IS_CONTINUED_BY",
1303
+ description="The resource is continued by another resource.",
1304
+ meaning=VOC4CAT["0005023"],
1305
+ )
1306
+ CONTINUES = PermissibleValue(
1307
+ text="CONTINUES",
1308
+ description="The resource continues another resource.",
1309
+ meaning=VOC4CAT["0005024"],
1310
+ )
1311
+ HAS_METADATA = PermissibleValue(
1312
+ text="HAS_METADATA",
1313
+ description="The resource has metadata in another resource.",
1314
+ meaning=VOC4CAT["0005025"],
1315
+ )
1316
+ IS_METADATA_FOR = PermissibleValue(
1317
+ text="IS_METADATA_FOR",
1318
+ description="The resource is metadata for another resource.",
1319
+ meaning=VOC4CAT["0005026"],
1320
+ )
1321
+ HAS_VERSION = PermissibleValue(
1322
+ text="HAS_VERSION",
1323
+ description="The resource has a version.",
1324
+ meaning=VOC4CAT["0005027"],
1325
+ )
1326
+ IS_VERSION_OF = PermissibleValue(
1327
+ text="IS_VERSION_OF",
1328
+ description="""The resource is a version of another resource. This is useful to refer to an abstract resource that has different versions, for example, \"Python 3.12 is a version of Python\".""",
1329
+ meaning=VOC4CAT["0005028"],
1330
+ )
1331
+ IS_NEW_VERSION_OF = PermissibleValue(
1332
+ text="IS_NEW_VERSION_OF",
1333
+ description="The resource is a new version of another resource.",
1334
+ meaning=VOC4CAT["0005029"],
1335
+ )
1336
+ IS_PREVIOUS_VERSION_OF = PermissibleValue(
1337
+ text="IS_PREVIOUS_VERSION_OF",
1338
+ description="The resource is a previous version of another resource.",
1339
+ meaning=VOC4CAT["0005030"],
1340
+ )
1341
+ IS_PART_OF = PermissibleValue(
1342
+ text="IS_PART_OF",
1343
+ description="The resource is part of another resource.",
1344
+ meaning=VOC4CAT["0005031"],
1345
+ )
1346
+ HAS_PART = PermissibleValue(
1347
+ text="HAS_PART",
1348
+ description="The resource has part another resource.",
1349
+ meaning=VOC4CAT["0005032"],
1350
+ )
1351
+ IS_PUBLISHED_IN = PermissibleValue(
1352
+ text="IS_PUBLISHED_IN",
1353
+ description="The resource is published in another resource.",
1354
+ meaning=VOC4CAT["0005033"],
1355
+ )
1356
+ IS_REFERENCED_BY = PermissibleValue(
1357
+ text="IS_REFERENCED_BY",
1358
+ description="The resource is referenced by another resource.",
1359
+ meaning=VOC4CAT["0005034"],
1360
+ )
1361
+ REFERENCES = PermissibleValue(
1362
+ text="REFERENCES",
1363
+ description="The resource references another resource.",
1364
+ meaning=VOC4CAT["0005035"],
1365
+ )
1366
+ IS_DOCUMENTED_BY = PermissibleValue(
1367
+ text="IS_DOCUMENTED_BY",
1368
+ description="The resource is documented by another resource.",
1369
+ meaning=VOC4CAT["0005036"],
1370
+ )
1371
+ DOCUMENTS = PermissibleValue(
1372
+ text="DOCUMENTS",
1373
+ description="The resource documents another resource.",
1374
+ meaning=VOC4CAT["0005037"],
1375
+ )
1376
+ IS_COMPILED_BY = PermissibleValue(
1377
+ text="IS_COMPILED_BY",
1378
+ description="The resource is compiled by another resource.",
1379
+ meaning=VOC4CAT["0005038"],
1380
+ )
1381
+ COMPILES = PermissibleValue(
1382
+ text="COMPILES",
1383
+ description="The resource compiles another resource.",
1384
+ meaning=VOC4CAT["0005039"],
1385
+ )
1386
+ IS_VARIANT_FORM_OF = PermissibleValue(
1387
+ text="IS_VARIANT_FORM_OF",
1388
+ description="The resource is variant form of another resource.",
1389
+ meaning=VOC4CAT["0005040"],
1390
+ )
1391
+ IS_ORIGINAL_FORM_OF = PermissibleValue(
1392
+ text="IS_ORIGINAL_FORM_OF",
1393
+ description="The resource is original form of another resource.",
1394
+ meaning=VOC4CAT["0005041"],
1395
+ )
1396
+ IS_IDENTICAL_TO = PermissibleValue(
1397
+ text="IS_IDENTICAL_TO",
1398
+ description="The resource is identical to another resource.",
1399
+ meaning=VOC4CAT["0005042"],
1400
+ )
1401
+ IS_DERIVED_FROM = PermissibleValue(
1402
+ text="IS_DERIVED_FROM",
1403
+ description="The resource is derived from another resource.",
1404
+ meaning=VOC4CAT["0005043"],
1405
+ )
1406
+ IS_SOURCE_OF = PermissibleValue(
1407
+ text="IS_SOURCE_OF",
1408
+ description="The resource is source of another resource.",
1409
+ meaning=VOC4CAT["0005044"],
1410
+ )
1411
+ IS_COLLECTED_BY = PermissibleValue(
1412
+ text="IS_COLLECTED_BY",
1413
+ description="The resource is collected by another resource.",
1414
+ meaning=VOC4CAT["0005045"],
1415
+ )
1416
+ COLLECTS = PermissibleValue(
1417
+ text="COLLECTS",
1418
+ description="The resource collects another resource.",
1419
+ meaning=VOC4CAT["0005046"],
1420
+ )
1421
+ IS_REQUIRED_BY = PermissibleValue(
1422
+ text="IS_REQUIRED_BY",
1423
+ description="The resource is required by another resource.",
1424
+ meaning=VOC4CAT["0005047"],
1425
+ )
1426
+ REQUIRES = PermissibleValue(
1427
+ text="REQUIRES",
1428
+ description="The resource requires another resource.",
1429
+ meaning=VOC4CAT["0005048"],
1430
+ )
1431
+ IS_OBSOLETED_BY = PermissibleValue(
1432
+ text="IS_OBSOLETED_BY",
1433
+ description="The resource is obsoleted by another resource.",
1434
+ meaning=VOC4CAT["0005049"],
1435
+ )
1436
+ OBSOLETES = PermissibleValue(
1437
+ text="OBSOLETES",
1438
+ description="The resource obsoletes another resource.",
1439
+ meaning=VOC4CAT["0005050"],
1440
+ )
1441
+
1442
+ _defn = EnumDefinition(
1443
+ name="RelationType",
1444
+ description="The type of relation between two resources referenced by their PIDs.",
1445
+ )
1446
+
1447
+
1448
+ class Pid4CatStatus(EnumDefinitionImpl):
1449
+ """
1450
+ The usage status of the pid4cat record.
1451
+ """
1452
+
1453
+ SUBMITTED = PermissibleValue(
1454
+ text="SUBMITTED",
1455
+ description="The pid4cat handle is reserved but the resource is not yet linked.",
1456
+ meaning=VOC4CAT["0005052"],
1457
+ )
1458
+ REGISTERED = PermissibleValue(
1459
+ text="REGISTERED",
1460
+ description="The pid4cat handle is linked to a concrete resource.",
1461
+ meaning=VOC4CAT["0005053"],
1462
+ )
1463
+ OBSOLETED = PermissibleValue(
1464
+ text="OBSOLETED",
1465
+ description="The pid4cat handle is obsolete, e.g. because the resource is referenced by another pid4cat.",
1466
+ meaning=VOC4CAT["0005054"],
1467
+ )
1468
+ DEPRECATED = PermissibleValue(
1469
+ text="DEPRECATED",
1470
+ description="The pid4cat record is deprecated, e.g. because the resource can no longer be found.",
1471
+ meaning=VOC4CAT["0005055"],
1472
+ )
1473
+
1474
+ _defn = EnumDefinition(
1475
+ name="Pid4CatStatus",
1476
+ description="The usage status of the pid4cat record.",
1477
+ )
1478
+
1479
+
1480
+ class Pid4CatAgentRole(EnumDefinitionImpl):
1481
+ """
1482
+ The role of an agent relative to the resource.
1483
+ """
1484
+
1485
+ TRUSTEE = PermissibleValue(
1486
+ text="TRUSTEE", description="The agent is the trustee of the resource."
1487
+ )
1488
+ OWNER = PermissibleValue(
1489
+ text="OWNER", description="The agent is the owner of the resource."
1490
+ )
1491
+
1492
+ _defn = EnumDefinition(
1493
+ name="Pid4CatAgentRole",
1494
+ description="The role of an agent relative to the resource.",
1495
+ )
1496
+
1497
+
1498
+ class ChangeLogField(EnumDefinitionImpl):
1499
+ """
1500
+ The field of the pid4cat record that was changed.
1501
+ """
1502
+
1503
+ STATUS = PermissibleValue(
1504
+ text="STATUS", description="The status of the pid4cat record was changed."
1505
+ )
1506
+ LANDING_PAGE = PermissibleValue(
1507
+ text="LANDING_PAGE",
1508
+ description="The URL of the landing page in the pid4cat record was changed.",
1509
+ )
1510
+ RESOURCE_INFO = PermissibleValue(
1511
+ text="RESOURCE_INFO",
1512
+ description="The resource info of the pid4cat record was changed.",
1513
+ )
1514
+ RELATED_IDS = PermissibleValue(
1515
+ text="RELATED_IDS",
1516
+ description="The related identifiers of the pid4cat record were changed.",
1517
+ )
1518
+ CONTACT = PermissibleValue(
1519
+ text="CONTACT",
1520
+ description="The contact information of the pid4cat record was changed.",
1521
+ )
1522
+ LICENSE = PermissibleValue(
1523
+ text="LICENSE", description="The license of the pid4cat record was changed."
1524
+ )
1525
+ SCHEMA_VER = PermissibleValue(
1526
+ text="SCHEMA_VER",
1527
+ description="The pid4cat-model version of the pid4cat record was changed.",
1528
+ )
1529
+
1530
+ _defn = EnumDefinition(
1531
+ name="ChangeLogField",
1532
+ description="The field of the pid4cat record that was changed.",
1533
+ )
1534
+
1535
+
1536
+ class MediaTypesEnum(EnumDefinitionImpl):
1537
+ """
1538
+ IANA media types are used to specify the type of data.
1539
+ """
1540
+
1541
+ _defn = EnumDefinition(
1542
+ name="MediaTypesEnum",
1543
+ description="IANA media types are used to specify the type of data.",
1544
+ )
1545
+
1546
+ @classmethod
1547
+ def _addvals(cls):
1548
+ setattr(
1549
+ cls,
1550
+ "application/epub+zip",
1551
+ PermissibleValue(
1552
+ text="application/epub+zip",
1553
+ description="For data in Electronic Publication Format (EPUB).",
1554
+ meaning=MEDIATYPE["application/epub+zip"],
1555
+ ),
1556
+ )
1557
+ setattr(
1558
+ cls,
1559
+ "application/json",
1560
+ PermissibleValue(
1561
+ text="application/json",
1562
+ description="For data in JavaScript Object Notation (JSON).",
1563
+ meaning=MEDIATYPE["application/json"],
1564
+ ),
1565
+ )
1566
+ setattr(
1567
+ cls,
1568
+ "application/ld+json",
1569
+ PermissibleValue(
1570
+ text="application/ld+json",
1571
+ description="For data in Linked Data json (JSON-LD).",
1572
+ meaning=MEDIATYPE["application/ld+json"],
1573
+ ),
1574
+ )
1575
+ setattr(
1576
+ cls,
1577
+ "application/octet-stream",
1578
+ PermissibleValue(
1579
+ text="application/octet-stream",
1580
+ description="For binary data.",
1581
+ meaning=MEDIATYPE["application/octet-stream"],
1582
+ ),
1583
+ )
1584
+ setattr(
1585
+ cls,
1586
+ "application/pdf",
1587
+ PermissibleValue(
1588
+ text="application/pdf",
1589
+ description="For data in Portable Document Format (PDF).",
1590
+ meaning=MEDIATYPE["application/pdf"],
1591
+ ),
1592
+ )
1593
+ setattr(
1594
+ cls,
1595
+ "application/vnd.eln+zip",
1596
+ PermissibleValue(
1597
+ text="application/vnd.eln+zip",
1598
+ description="For data in ELN ZIP format.",
1599
+ meaning=MEDIATYPE["application/vnd.eln+zip"],
1600
+ ),
1601
+ )
1602
+ setattr(
1603
+ cls,
1604
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation",
1605
+ PermissibleValue(
1606
+ text="application/vnd.openxmlformats-officedocument.presentationml.presentation",
1607
+ description="For data in PowerPoint pptx format.",
1608
+ meaning=MEDIATYPE[
1609
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation"
1610
+ ],
1611
+ ),
1612
+ )
1613
+ setattr(
1614
+ cls,
1615
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
1616
+ PermissibleValue(
1617
+ text="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
1618
+ description="For data in Excel xlsx format.",
1619
+ meaning=MEDIATYPE[
1620
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
1621
+ ],
1622
+ ),
1623
+ )
1624
+ setattr(
1625
+ cls,
1626
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
1627
+ PermissibleValue(
1628
+ text="application/vnd.openxmlformats-officedocument.wordprocessingml.document",
1629
+ description="For data in Word docx format.",
1630
+ meaning=MEDIATYPE[
1631
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
1632
+ ],
1633
+ ),
1634
+ )
1635
+ setattr(
1636
+ cls,
1637
+ "application/xml",
1638
+ PermissibleValue(
1639
+ text="application/xml",
1640
+ description="For generic XML data.",
1641
+ meaning=MEDIATYPE["application/xml"],
1642
+ ),
1643
+ )
1644
+ setattr(
1645
+ cls,
1646
+ "application/yaml",
1647
+ PermissibleValue(
1648
+ text="application/yaml",
1649
+ description="For YAML data.",
1650
+ meaning=MEDIATYPE["application/yaml"],
1651
+ ),
1652
+ )
1653
+ setattr(
1654
+ cls,
1655
+ "application/zip",
1656
+ PermissibleValue(
1657
+ text="application/zip",
1658
+ description="For zip archives.",
1659
+ meaning=MEDIATYPE["application/zip"],
1660
+ ),
1661
+ )
1662
+ setattr(
1663
+ cls,
1664
+ "image/gif",
1665
+ PermissibleValue(
1666
+ text="image/gif",
1667
+ description="For GIF images.",
1668
+ meaning=MEDIATYPE["image/gif"],
1669
+ ),
1670
+ )
1671
+ setattr(
1672
+ cls,
1673
+ "image/jpeg",
1674
+ PermissibleValue(
1675
+ text="image/jpeg",
1676
+ description="For JPEG images.",
1677
+ meaning=MEDIATYPE["image/jpeg"],
1678
+ ),
1679
+ )
1680
+ setattr(
1681
+ cls,
1682
+ "image/png",
1683
+ PermissibleValue(
1684
+ text="image/png",
1685
+ description="For PNG images.",
1686
+ meaning=MEDIATYPE["image/png"],
1687
+ ),
1688
+ )
1689
+ setattr(
1690
+ cls,
1691
+ "image/svg+xml",
1692
+ PermissibleValue(
1693
+ text="image/svg+xml",
1694
+ description="For SVG images.",
1695
+ meaning=MEDIATYPE["image/svg+xml"],
1696
+ ),
1697
+ )
1698
+ setattr(
1699
+ cls,
1700
+ "image/tiff",
1701
+ PermissibleValue(
1702
+ text="image/tiff",
1703
+ description="For TIFF images.",
1704
+ meaning=MEDIATYPE["image/tiff"],
1705
+ ),
1706
+ )
1707
+ setattr(
1708
+ cls,
1709
+ "image/webp",
1710
+ PermissibleValue(
1711
+ text="image/webp",
1712
+ description="For WebP images.",
1713
+ meaning=MEDIATYPE["image/webp"],
1714
+ ),
1715
+ )
1716
+ setattr(
1717
+ cls,
1718
+ "text/csv",
1719
+ PermissibleValue(
1720
+ text="text/csv",
1721
+ description="For data in comma-separated values (CSV) format.",
1722
+ meaning=MEDIATYPE["text/csv"],
1723
+ ),
1724
+ )
1725
+ setattr(
1726
+ cls,
1727
+ "text/html",
1728
+ PermissibleValue(
1729
+ text="text/html",
1730
+ description="For html web pages.",
1731
+ meaning=MEDIATYPE["text/html"],
1732
+ ),
1733
+ )
1734
+ setattr(
1735
+ cls,
1736
+ "text/javascript",
1737
+ PermissibleValue(
1738
+ text="text/javascript",
1739
+ description="For JavaScript code.",
1740
+ meaning=MEDIATYPE["text/javascript"],
1741
+ ),
1742
+ )
1743
+ setattr(
1744
+ cls,
1745
+ "text/markdown",
1746
+ PermissibleValue(
1747
+ text="text/markdown",
1748
+ description="For data in markdown text format.",
1749
+ meaning=MEDIATYPE["text/markdown"],
1750
+ ),
1751
+ )
1752
+ setattr(
1753
+ cls,
1754
+ "text/plain",
1755
+ PermissibleValue(
1756
+ text="text/plain",
1757
+ description="For plain text data (default text media type).",
1758
+ meaning=MEDIATYPE["text/plain"],
1759
+ ),
1760
+ )
1761
+ setattr(
1762
+ cls,
1763
+ "text/tab-separated-values",
1764
+ PermissibleValue(
1765
+ text="text/tab-separated-values",
1766
+ description="For data in tab-separated values (TSV) format.",
1767
+ meaning=MEDIATYPE["text/tab-separated-values"],
1768
+ ),
1769
+ )
1770
+ setattr(
1771
+ cls,
1772
+ "text/turtle",
1773
+ PermissibleValue(
1774
+ text="text/turtle",
1775
+ description="For data in turtle format.",
1776
+ meaning=MEDIATYPE["text/turtle"],
1777
+ ),
1778
+ )
1779
+ setattr(
1780
+ cls,
1781
+ "text/xml",
1782
+ PermissibleValue(
1783
+ text="text/xml",
1784
+ description="For XML data.",
1785
+ meaning=MEDIATYPE["text/xml"],
1786
+ ),
1787
+ )
1788
+ setattr(
1789
+ cls,
1790
+ "video/mp4",
1791
+ PermissibleValue(
1792
+ text="video/mp4",
1793
+ description="For mp4 video files.",
1794
+ meaning=MEDIATYPE["video/mp4"],
1795
+ ),
1796
+ )
1797
+ setattr(
1798
+ cls,
1799
+ "video/webm",
1800
+ PermissibleValue(text="video/webm", description="For webm video files."),
1801
+ )
1802
+
1803
+
1804
+ # Slots
1805
+ class slots:
1806
+ pass
1807
+
1808
+
1809
+ slots.responseCode = Slot(
1810
+ uri=PID4CAT_MODEL.responseCode,
1811
+ name="responseCode",
1812
+ curie=PID4CAT_MODEL.curie("responseCode"),
1813
+ model_uri=PID4CAT_MODEL.responseCode,
1814
+ domain=None,
1815
+ range=Optional[int],
1816
+ )
1817
+
1818
+ slots.handle = Slot(
1819
+ uri=PID4CAT_MODEL.handle,
1820
+ name="handle",
1821
+ curie=PID4CAT_MODEL.curie("handle"),
1822
+ model_uri=PID4CAT_MODEL.handle,
1823
+ domain=None,
1824
+ range=URIRef,
1825
+ )
1826
+
1827
+ slots.values = Slot(
1828
+ uri=PID4CAT_MODEL.values,
1829
+ name="values",
1830
+ curie=PID4CAT_MODEL.curie("values"),
1831
+ model_uri=PID4CAT_MODEL.values,
1832
+ domain=None,
1833
+ range=Optional[Union[Union[dict, HandleRecord], List[Union[dict, HandleRecord]]]],
1834
+ )
1835
+
1836
+ slots.timestamp = Slot(
1837
+ uri=PID4CAT_MODEL.timestamp,
1838
+ name="timestamp",
1839
+ curie=PID4CAT_MODEL.curie("timestamp"),
1840
+ model_uri=PID4CAT_MODEL.timestamp,
1841
+ domain=None,
1842
+ range=Optional[Union[str, XSDDateTime]],
1843
+ )
1844
+
1845
+ slots.ttl = Slot(
1846
+ uri=PID4CAT_MODEL.ttl,
1847
+ name="ttl",
1848
+ curie=PID4CAT_MODEL.curie("ttl"),
1849
+ model_uri=PID4CAT_MODEL.ttl,
1850
+ domain=None,
1851
+ range=Optional[int],
1852
+ )
1853
+
1854
+ slots.type = Slot(
1855
+ uri=PID4CAT_MODEL.type,
1856
+ name="type",
1857
+ curie=PID4CAT_MODEL.curie("type"),
1858
+ model_uri=PID4CAT_MODEL.type,
1859
+ domain=None,
1860
+ range=Optional[str],
1861
+ )
1862
+
1863
+ slots.index = Slot(
1864
+ uri=PID4CAT_MODEL.index,
1865
+ name="index",
1866
+ curie=PID4CAT_MODEL.curie("index"),
1867
+ model_uri=PID4CAT_MODEL.index,
1868
+ domain=None,
1869
+ range=Optional[int],
1870
+ )
1871
+
1872
+ slots.data = Slot(
1873
+ uri=PID4CAT_MODEL.data,
1874
+ name="data",
1875
+ curie=PID4CAT_MODEL.curie("data"),
1876
+ model_uri=PID4CAT_MODEL.data,
1877
+ domain=None,
1878
+ range=Optional[str],
1879
+ )
1880
+
1881
+ slots.format = Slot(
1882
+ uri=PID4CAT_MODEL.format,
1883
+ name="format",
1884
+ curie=PID4CAT_MODEL.curie("format"),
1885
+ model_uri=PID4CAT_MODEL.format,
1886
+ domain=None,
1887
+ range=Optional[str],
1888
+ )
1889
+
1890
+ slots.value = Slot(
1891
+ uri=PID4CAT_MODEL.value,
1892
+ name="value",
1893
+ curie=PID4CAT_MODEL.curie("value"),
1894
+ model_uri=PID4CAT_MODEL.value,
1895
+ domain=None,
1896
+ range=Optional[str],
1897
+ )
1898
+
1899
+ slots.relation_type = Slot(
1900
+ uri=PID4CAT_MODEL.relation_type,
1901
+ name="relation_type",
1902
+ curie=PID4CAT_MODEL.curie("relation_type"),
1903
+ model_uri=PID4CAT_MODEL.relation_type,
1904
+ domain=None,
1905
+ range=Optional[Union[str, "RelationType"]],
1906
+ )
1907
+
1908
+ slots.related_identifier = Slot(
1909
+ uri=PID4CAT_MODEL.related_identifier,
1910
+ name="related_identifier",
1911
+ curie=PID4CAT_MODEL.curie("related_identifier"),
1912
+ model_uri=PID4CAT_MODEL.related_identifier,
1913
+ domain=None,
1914
+ range=Optional[Union[dict, RelatedIdentifier]],
1915
+ )
1916
+
1917
+ slots.datetime_log = Slot(
1918
+ uri=PID4CAT_MODEL.datetime_log,
1919
+ name="datetime_log",
1920
+ curie=PID4CAT_MODEL.curie("datetime_log"),
1921
+ model_uri=PID4CAT_MODEL.datetime_log,
1922
+ domain=None,
1923
+ range=Optional[Union[str, XSDDateTime]],
1924
+ )
1925
+
1926
+ slots.label = Slot(
1927
+ uri=PID4CAT_MODEL.label,
1928
+ name="label",
1929
+ curie=PID4CAT_MODEL.curie("label"),
1930
+ model_uri=PID4CAT_MODEL.label,
1931
+ domain=None,
1932
+ range=Optional[str],
1933
+ )
1934
+
1935
+ slots.description = Slot(
1936
+ uri=PID4CAT_MODEL.description,
1937
+ name="description",
1938
+ curie=PID4CAT_MODEL.curie("description"),
1939
+ model_uri=PID4CAT_MODEL.description,
1940
+ domain=None,
1941
+ range=Optional[str],
1942
+ )
1943
+
1944
+ slots.resource_category = Slot(
1945
+ uri=PID4CAT_MODEL.resource_category,
1946
+ name="resource_category",
1947
+ curie=PID4CAT_MODEL.curie("resource_category"),
1948
+ model_uri=PID4CAT_MODEL.resource_category,
1949
+ domain=None,
1950
+ range=Optional[Union[str, "ResourceCategory"]],
1951
+ )
1952
+
1953
+ slots.representation_variants = Slot(
1954
+ uri=PID4CAT_MODEL.representation_variants,
1955
+ name="representation_variants",
1956
+ curie=PID4CAT_MODEL.curie("representation_variants"),
1957
+ model_uri=PID4CAT_MODEL.representation_variants,
1958
+ domain=None,
1959
+ range=Optional[
1960
+ Union[
1961
+ Union[dict, RepresentationVariant], List[Union[dict, RepresentationVariant]]
1962
+ ]
1963
+ ],
1964
+ )
1965
+
1966
+ slots.changed_field = Slot(
1967
+ uri=PID4CAT_MODEL.changed_field,
1968
+ name="changed_field",
1969
+ curie=PID4CAT_MODEL.curie("changed_field"),
1970
+ model_uri=PID4CAT_MODEL.changed_field,
1971
+ domain=None,
1972
+ range=Optional[Union[str, "ChangeLogField"]],
1973
+ )
1974
+
1975
+ slots.has_agent = Slot(
1976
+ uri=PID4CAT_MODEL.has_agent,
1977
+ name="has_agent",
1978
+ curie=PID4CAT_MODEL.curie("has_agent"),
1979
+ model_uri=PID4CAT_MODEL.has_agent,
1980
+ domain=None,
1981
+ range=Optional[Union[dict, Agent]],
1982
+ )
1983
+
1984
+ slots.name = Slot(
1985
+ uri=PID4CAT_MODEL.name,
1986
+ name="name",
1987
+ curie=PID4CAT_MODEL.curie("name"),
1988
+ model_uri=PID4CAT_MODEL.name,
1989
+ domain=None,
1990
+ range=Optional[str],
1991
+ )
1992
+
1993
+ slots.email_address = Slot(
1994
+ uri=PID4CAT_MODEL.email_address,
1995
+ name="email_address",
1996
+ curie=PID4CAT_MODEL.curie("email_address"),
1997
+ model_uri=PID4CAT_MODEL.email_address,
1998
+ domain=None,
1999
+ range=Optional[str],
2000
+ )
2001
+
2002
+ slots.orcid = Slot(
2003
+ uri=PID4CAT_MODEL.orcid,
2004
+ name="orcid",
2005
+ curie=PID4CAT_MODEL.curie("orcid"),
2006
+ model_uri=PID4CAT_MODEL.orcid,
2007
+ domain=None,
2008
+ range=Optional[str],
2009
+ )
2010
+
2011
+ slots.affiliation_ror = Slot(
2012
+ uri=PID4CAT_MODEL.affiliation_ror,
2013
+ name="affiliation_ror",
2014
+ curie=PID4CAT_MODEL.curie("affiliation_ror"),
2015
+ model_uri=PID4CAT_MODEL.affiliation_ror,
2016
+ domain=None,
2017
+ range=Optional[Union[str, URI]],
2018
+ )
2019
+
2020
+ slots.role = Slot(
2021
+ uri=PID4CAT_MODEL.role,
2022
+ name="role",
2023
+ curie=PID4CAT_MODEL.curie("role"),
2024
+ model_uri=PID4CAT_MODEL.role,
2025
+ domain=None,
2026
+ range=Optional[Union[str, "Pid4CatAgentRole"]],
2027
+ )
2028
+
2029
+ slots.media_type = Slot(
2030
+ uri=PID4CAT_MODEL.media_type,
2031
+ name="media_type",
2032
+ curie=PID4CAT_MODEL.curie("media_type"),
2033
+ model_uri=PID4CAT_MODEL.media_type,
2034
+ domain=None,
2035
+ range=Optional[Union[str, "MediaTypesEnum"]],
2036
+ )
2037
+
2038
+ slots.encoding_format = Slot(
2039
+ uri=PID4CAT_MODEL.encoding_format,
2040
+ name="encoding_format",
2041
+ curie=PID4CAT_MODEL.curie("encoding_format"),
2042
+ model_uri=PID4CAT_MODEL.encoding_format,
2043
+ domain=None,
2044
+ range=Optional[str],
2045
+ )
2046
+
2047
+ slots.size = Slot(
2048
+ uri=PID4CAT_MODEL.size,
2049
+ name="size",
2050
+ curie=PID4CAT_MODEL.curie("size"),
2051
+ model_uri=PID4CAT_MODEL.size,
2052
+ domain=None,
2053
+ range=Optional[int],
2054
+ )
2055
+
2056
+ slots.variant_url = Slot(
2057
+ uri=PID4CAT_MODEL.variant_url,
2058
+ name="variant_url",
2059
+ curie=PID4CAT_MODEL.curie("variant_url"),
2060
+ model_uri=PID4CAT_MODEL.variant_url,
2061
+ domain=None,
2062
+ range=Optional[Union[str, URI]],
2063
+ )
2064
+
2065
+ slots.resolving_url = Slot(
2066
+ uri=PID4CAT_MODEL.resolving_url,
2067
+ name="resolving_url",
2068
+ curie=PID4CAT_MODEL.curie("resolving_url"),
2069
+ model_uri=PID4CAT_MODEL.resolving_url,
2070
+ domain=None,
2071
+ range=Optional[Union[str, URI]],
2072
+ )
2073
+
2074
+ slots.identifier = Slot(
2075
+ uri=PID4CAT_MODEL.identifier,
2076
+ name="identifier",
2077
+ curie=PID4CAT_MODEL.curie("identifier"),
2078
+ model_uri=PID4CAT_MODEL.identifier,
2079
+ domain=None,
2080
+ range=Optional[str],
2081
+ )
2082
+
2083
+ slots.landing_page_url = Slot(
2084
+ uri=PID4CAT_MODEL.landing_page_url,
2085
+ name="landing_page_url",
2086
+ curie=PID4CAT_MODEL.curie("landing_page_url"),
2087
+ model_uri=PID4CAT_MODEL.landing_page_url,
2088
+ domain=None,
2089
+ range=Optional[str],
2090
+ )
2091
+
2092
+ slots.status = Slot(
2093
+ uri=PID4CAT_MODEL.status,
2094
+ name="status",
2095
+ curie=PID4CAT_MODEL.curie("status"),
2096
+ model_uri=PID4CAT_MODEL.status,
2097
+ domain=None,
2098
+ range=Optional[Union[str, "Pid4CatStatus"]],
2099
+ )
2100
+
2101
+ slots.schema_version = Slot(
2102
+ uri=PID4CAT_MODEL.schema_version,
2103
+ name="schema_version",
2104
+ curie=PID4CAT_MODEL.curie("schema_version"),
2105
+ model_uri=PID4CAT_MODEL.schema_version,
2106
+ domain=None,
2107
+ range=Optional[str],
2108
+ )
2109
+
2110
+ slots.metadata_license = Slot(
2111
+ uri=PID4CAT_MODEL.metadata_license,
2112
+ name="metadata_license",
2113
+ curie=PID4CAT_MODEL.curie("metadata_license"),
2114
+ model_uri=PID4CAT_MODEL.metadata_license,
2115
+ domain=None,
2116
+ range=Optional[str],
2117
+ )
2118
+
2119
+ slots.curation_contact = Slot(
2120
+ uri=PID4CAT_MODEL.curation_contact,
2121
+ name="curation_contact",
2122
+ curie=PID4CAT_MODEL.curie("curation_contact"),
2123
+ model_uri=PID4CAT_MODEL.curation_contact,
2124
+ domain=None,
2125
+ range=Optional[str],
2126
+ )
2127
+
2128
+ slots.resource_info = Slot(
2129
+ uri=PID4CAT_MODEL.resource_info,
2130
+ name="resource_info",
2131
+ curie=PID4CAT_MODEL.curie("resource_info"),
2132
+ model_uri=PID4CAT_MODEL.resource_info,
2133
+ domain=None,
2134
+ range=Optional[Union[dict, ResourceInfo]],
2135
+ )
2136
+
2137
+ slots.related_identifiers = Slot(
2138
+ uri=PID4CAT_MODEL.related_identifiers,
2139
+ name="related_identifiers",
2140
+ curie=PID4CAT_MODEL.curie("related_identifiers"),
2141
+ model_uri=PID4CAT_MODEL.related_identifiers,
2142
+ domain=None,
2143
+ range=Optional[
2144
+ Union[Union[dict, Pid4CatRelation], List[Union[dict, Pid4CatRelation]]]
2145
+ ],
2146
+ )
2147
+
2148
+ slots.change_log = Slot(
2149
+ uri=PID4CAT_MODEL.change_log,
2150
+ name="change_log",
2151
+ curie=PID4CAT_MODEL.curie("change_log"),
2152
+ model_uri=PID4CAT_MODEL.change_log,
2153
+ domain=None,
2154
+ range=Optional[Union[dict, LogRecord]],
2155
+ )
2156
+
2157
+ slots.handleRecordContainer__contains_pids = Slot(
2158
+ uri=PID4CAT_MODEL.contains_pids,
2159
+ name="handleRecordContainer__contains_pids",
2160
+ curie=PID4CAT_MODEL.curie("contains_pids"),
2161
+ model_uri=PID4CAT_MODEL.handleRecordContainer__contains_pids,
2162
+ domain=None,
2163
+ range=Optional[
2164
+ Union[
2165
+ Dict[Union[str, HandleAPIRecordHandle], Union[dict, HandleAPIRecord]],
2166
+ List[Union[dict, HandleAPIRecord]],
2167
+ ]
2168
+ ],
2169
+ )
2170
+
2171
+ slots.relatedIdentifier__type = Slot(
2172
+ uri=PID4CAT_MODEL.type,
2173
+ name="relatedIdentifier__type",
2174
+ curie=PID4CAT_MODEL.curie("type"),
2175
+ model_uri=PID4CAT_MODEL.relatedIdentifier__type,
2176
+ domain=None,
2177
+ range=str,
2178
+ )
2179
+
2180
+ slots.HandleAPIRecord_handle = Slot(
2181
+ uri=PID4CAT_MODEL.handle,
2182
+ name="HandleAPIRecord_handle",
2183
+ curie=PID4CAT_MODEL.curie("handle"),
2184
+ model_uri=PID4CAT_MODEL.HandleAPIRecord_handle,
2185
+ domain=HandleAPIRecord,
2186
+ range=Union[str, HandleAPIRecordHandle],
2187
+ pattern=re.compile(r"^\d{2}\.T?\d{4,}\/.*$"),
2188
+ )
2189
+
2190
+ slots.HandleAPIRecord_values = Slot(
2191
+ uri=PID4CAT_MODEL.values,
2192
+ name="HandleAPIRecord_values",
2193
+ curie=PID4CAT_MODEL.curie("values"),
2194
+ model_uri=PID4CAT_MODEL.HandleAPIRecord_values,
2195
+ domain=HandleAPIRecord,
2196
+ range=Union[Union[dict, "HandleRecord"], List[Union[dict, "HandleRecord"]]],
2197
+ )
2198
+
2199
+ slots.HandleRecord_timestamp = Slot(
2200
+ uri=PID4CAT_MODEL.timestamp,
2201
+ name="HandleRecord_timestamp",
2202
+ curie=PID4CAT_MODEL.curie("timestamp"),
2203
+ model_uri=PID4CAT_MODEL.HandleRecord_timestamp,
2204
+ domain=HandleRecord,
2205
+ range=Union[str, XSDDateTime],
2206
+ )
2207
+
2208
+ slots.HandleRecord_ttl = Slot(
2209
+ uri=PID4CAT_MODEL.ttl,
2210
+ name="HandleRecord_ttl",
2211
+ curie=PID4CAT_MODEL.curie("ttl"),
2212
+ model_uri=PID4CAT_MODEL.HandleRecord_ttl,
2213
+ domain=HandleRecord,
2214
+ range=Optional[int],
2215
+ )
2216
+
2217
+ slots.HandleRecord_type = Slot(
2218
+ uri=PID4CAT_MODEL.type,
2219
+ name="HandleRecord_type",
2220
+ curie=PID4CAT_MODEL.curie("type"),
2221
+ model_uri=PID4CAT_MODEL.HandleRecord_type,
2222
+ domain=HandleRecord,
2223
+ range=str,
2224
+ )
2225
+
2226
+ slots.URL_index = Slot(
2227
+ uri=PID4CAT_MODEL.index,
2228
+ name="URL_index",
2229
+ curie=PID4CAT_MODEL.curie("index"),
2230
+ model_uri=PID4CAT_MODEL.URL_index,
2231
+ domain=URL,
2232
+ range=int,
2233
+ )
2234
+
2235
+ slots.URL_data = Slot(
2236
+ uri=PID4CAT_MODEL.data,
2237
+ name="URL_data",
2238
+ curie=PID4CAT_MODEL.curie("data"),
2239
+ model_uri=PID4CAT_MODEL.URL_data,
2240
+ domain=URL,
2241
+ range=Union[dict, "HdlDataUrl"],
2242
+ )
2243
+
2244
+ slots.HdlDataUrl_format = Slot(
2245
+ uri=PID4CAT_MODEL.format,
2246
+ name="HdlDataUrl_format",
2247
+ curie=PID4CAT_MODEL.curie("format"),
2248
+ model_uri=PID4CAT_MODEL.HdlDataUrl_format,
2249
+ domain=HdlDataUrl,
2250
+ range=Optional[str],
2251
+ )
2252
+
2253
+ slots.HdlDataUrl_value = Slot(
2254
+ uri=PID4CAT_MODEL.value,
2255
+ name="HdlDataUrl_value",
2256
+ curie=PID4CAT_MODEL.curie("value"),
2257
+ model_uri=PID4CAT_MODEL.HdlDataUrl_value,
2258
+ domain=HdlDataUrl,
2259
+ range=str,
2260
+ pattern=re.compile(r"^https?:\/\/.*$"),
2261
+ )
2262
+
2263
+ slots.EMAIL_index = Slot(
2264
+ uri=PID4CAT_MODEL.index,
2265
+ name="EMAIL_index",
2266
+ curie=PID4CAT_MODEL.curie("index"),
2267
+ model_uri=PID4CAT_MODEL.EMAIL_index,
2268
+ domain=EMAIL,
2269
+ range=int,
2270
+ )
2271
+
2272
+ slots.EMAIL_data = Slot(
2273
+ uri=PID4CAT_MODEL.data,
2274
+ name="EMAIL_data",
2275
+ curie=PID4CAT_MODEL.curie("data"),
2276
+ model_uri=PID4CAT_MODEL.EMAIL_data,
2277
+ domain=EMAIL,
2278
+ range=Union[dict, "HdlDataContact"],
2279
+ )
2280
+
2281
+ slots.HdlDataContact_format = Slot(
2282
+ uri=PID4CAT_MODEL.format,
2283
+ name="HdlDataContact_format",
2284
+ curie=PID4CAT_MODEL.curie("format"),
2285
+ model_uri=PID4CAT_MODEL.HdlDataContact_format,
2286
+ domain=HdlDataContact,
2287
+ range=Optional[str],
2288
+ )
2289
+
2290
+ slots.HdlDataContact_value = Slot(
2291
+ uri=PID4CAT_MODEL.value,
2292
+ name="HdlDataContact_value",
2293
+ curie=PID4CAT_MODEL.curie("value"),
2294
+ model_uri=PID4CAT_MODEL.HdlDataContact_value,
2295
+ domain=HdlDataContact,
2296
+ range=str,
2297
+ pattern=re.compile(r"^\S+@[\S+\.]+\S+"),
2298
+ )
2299
+
2300
+ slots.STATUS_index = Slot(
2301
+ uri=PID4CAT_MODEL.index,
2302
+ name="STATUS_index",
2303
+ curie=PID4CAT_MODEL.curie("index"),
2304
+ model_uri=PID4CAT_MODEL.STATUS_index,
2305
+ domain=STATUS,
2306
+ range=int,
2307
+ )
2308
+
2309
+ slots.STATUS_data = Slot(
2310
+ uri=PID4CAT_MODEL.data,
2311
+ name="STATUS_data",
2312
+ curie=PID4CAT_MODEL.curie("data"),
2313
+ model_uri=PID4CAT_MODEL.STATUS_data,
2314
+ domain=STATUS,
2315
+ range=Union[dict, "HdlDataStatus"],
2316
+ )
2317
+
2318
+ slots.HdlDataStatus_format = Slot(
2319
+ uri=PID4CAT_MODEL.format,
2320
+ name="HdlDataStatus_format",
2321
+ curie=PID4CAT_MODEL.curie("format"),
2322
+ model_uri=PID4CAT_MODEL.HdlDataStatus_format,
2323
+ domain=HdlDataStatus,
2324
+ range=Optional[str],
2325
+ )
2326
+
2327
+ slots.HdlDataStatus_value = Slot(
2328
+ uri=PID4CAT_MODEL.value,
2329
+ name="HdlDataStatus_value",
2330
+ curie=PID4CAT_MODEL.curie("value"),
2331
+ model_uri=PID4CAT_MODEL.HdlDataStatus_value,
2332
+ domain=HdlDataStatus,
2333
+ range=Union[str, "Pid4CatStatus"],
2334
+ )
2335
+
2336
+ slots.SCHEMA_VER_index = Slot(
2337
+ uri=PID4CAT_MODEL.index,
2338
+ name="SCHEMA_VER_index",
2339
+ curie=PID4CAT_MODEL.curie("index"),
2340
+ model_uri=PID4CAT_MODEL.SCHEMA_VER_index,
2341
+ domain=SCHEMAVER,
2342
+ range=int,
2343
+ )
2344
+
2345
+ slots.SCHEMA_VER_data = Slot(
2346
+ uri=PID4CAT_MODEL.data,
2347
+ name="SCHEMA_VER_data",
2348
+ curie=PID4CAT_MODEL.curie("data"),
2349
+ model_uri=PID4CAT_MODEL.SCHEMA_VER_data,
2350
+ domain=SCHEMAVER,
2351
+ range=Union[dict, "HdlDataSchemaVer"],
2352
+ )
2353
+
2354
+ slots.HdlDataSchemaVer_format = Slot(
2355
+ uri=PID4CAT_MODEL.format,
2356
+ name="HdlDataSchemaVer_format",
2357
+ curie=PID4CAT_MODEL.curie("format"),
2358
+ model_uri=PID4CAT_MODEL.HdlDataSchemaVer_format,
2359
+ domain=HdlDataSchemaVer,
2360
+ range=Optional[str],
2361
+ )
2362
+
2363
+ slots.HdlDataSchemaVer_value = Slot(
2364
+ uri=PID4CAT_MODEL.value,
2365
+ name="HdlDataSchemaVer_value",
2366
+ curie=PID4CAT_MODEL.curie("value"),
2367
+ model_uri=PID4CAT_MODEL.HdlDataSchemaVer_value,
2368
+ domain=HdlDataSchemaVer,
2369
+ range=str,
2370
+ pattern=re.compile(r"^v\d+\.\d+\.\d+$"),
2371
+ )
2372
+
2373
+ slots.METADATA_LICENSE_index = Slot(
2374
+ uri=PID4CAT_MODEL.index,
2375
+ name="METADATA_LICENSE_index",
2376
+ curie=PID4CAT_MODEL.curie("index"),
2377
+ model_uri=PID4CAT_MODEL.METADATA_LICENSE_index,
2378
+ domain=METADATALICENSE,
2379
+ range=int,
2380
+ )
2381
+
2382
+ slots.METADATA_LICENSE_data = Slot(
2383
+ uri=PID4CAT_MODEL.data,
2384
+ name="METADATA_LICENSE_data",
2385
+ curie=PID4CAT_MODEL.curie("data"),
2386
+ model_uri=PID4CAT_MODEL.METADATA_LICENSE_data,
2387
+ domain=METADATALICENSE,
2388
+ range=Union[dict, "HdlDataLicense"],
2389
+ )
2390
+
2391
+ slots.HdlDataLicense_format = Slot(
2392
+ uri=PID4CAT_MODEL.format,
2393
+ name="HdlDataLicense_format",
2394
+ curie=PID4CAT_MODEL.curie("format"),
2395
+ model_uri=PID4CAT_MODEL.HdlDataLicense_format,
2396
+ domain=HdlDataLicense,
2397
+ range=Optional[str],
2398
+ )
2399
+
2400
+ slots.HdlDataLicense_value = Slot(
2401
+ uri=PID4CAT_MODEL.value,
2402
+ name="HdlDataLicense_value",
2403
+ curie=PID4CAT_MODEL.curie("value"),
2404
+ model_uri=PID4CAT_MODEL.HdlDataLicense_value,
2405
+ domain=HdlDataLicense,
2406
+ range=str,
2407
+ )
2408
+
2409
+ slots.RESOURCE_index = Slot(
2410
+ uri=PID4CAT_MODEL.index,
2411
+ name="RESOURCE_index",
2412
+ curie=PID4CAT_MODEL.curie("index"),
2413
+ model_uri=PID4CAT_MODEL.RESOURCE_index,
2414
+ domain=RESOURCE,
2415
+ range=int,
2416
+ )
2417
+
2418
+ slots.RESOURCE_data = Slot(
2419
+ uri=PID4CAT_MODEL.data,
2420
+ name="RESOURCE_data",
2421
+ curie=PID4CAT_MODEL.curie("data"),
2422
+ model_uri=PID4CAT_MODEL.RESOURCE_data,
2423
+ domain=RESOURCE,
2424
+ range=Union[dict, "HdlDataResourceInfo"],
2425
+ )
2426
+
2427
+ slots.HdlDataResourceInfo_format = Slot(
2428
+ uri=PID4CAT_MODEL.format,
2429
+ name="HdlDataResourceInfo_format",
2430
+ curie=PID4CAT_MODEL.curie("format"),
2431
+ model_uri=PID4CAT_MODEL.HdlDataResourceInfo_format,
2432
+ domain=HdlDataResourceInfo,
2433
+ range=Optional[str],
2434
+ )
2435
+
2436
+ slots.HdlDataResourceInfo_value = Slot(
2437
+ uri=PID4CAT_MODEL.value,
2438
+ name="HdlDataResourceInfo_value",
2439
+ curie=PID4CAT_MODEL.curie("value"),
2440
+ model_uri=PID4CAT_MODEL.HdlDataResourceInfo_value,
2441
+ domain=HdlDataResourceInfo,
2442
+ range=Union[dict, "ResourceInfo"],
2443
+ )
2444
+
2445
+ slots.RELATED_index = Slot(
2446
+ uri=PID4CAT_MODEL.index,
2447
+ name="RELATED_index",
2448
+ curie=PID4CAT_MODEL.curie("index"),
2449
+ model_uri=PID4CAT_MODEL.RELATED_index,
2450
+ domain=RELATED,
2451
+ range=int,
2452
+ )
2453
+
2454
+ slots.RELATED_data = Slot(
2455
+ uri=PID4CAT_MODEL.data,
2456
+ name="RELATED_data",
2457
+ curie=PID4CAT_MODEL.curie("data"),
2458
+ model_uri=PID4CAT_MODEL.RELATED_data,
2459
+ domain=RELATED,
2460
+ range=Union[dict, "HdlDataRelated"],
2461
+ )
2462
+
2463
+ slots.HdlDataRelated_format = Slot(
2464
+ uri=PID4CAT_MODEL.format,
2465
+ name="HdlDataRelated_format",
2466
+ curie=PID4CAT_MODEL.curie("format"),
2467
+ model_uri=PID4CAT_MODEL.HdlDataRelated_format,
2468
+ domain=HdlDataRelated,
2469
+ range=Optional[str],
2470
+ )
2471
+
2472
+ slots.HdlDataRelated_value = Slot(
2473
+ uri=PID4CAT_MODEL.value,
2474
+ name="HdlDataRelated_value",
2475
+ curie=PID4CAT_MODEL.curie("value"),
2476
+ model_uri=PID4CAT_MODEL.HdlDataRelated_value,
2477
+ domain=HdlDataRelated,
2478
+ range=Optional[
2479
+ Union[Union[dict, "Pid4CatRelation"], List[Union[dict, "Pid4CatRelation"]]]
2480
+ ],
2481
+ )
2482
+
2483
+ slots.CHANGES_index = Slot(
2484
+ uri=PID4CAT_MODEL.index,
2485
+ name="CHANGES_index",
2486
+ curie=PID4CAT_MODEL.curie("index"),
2487
+ model_uri=PID4CAT_MODEL.CHANGES_index,
2488
+ domain=CHANGES,
2489
+ range=int,
2490
+ )
2491
+
2492
+ slots.CHANGES_data = Slot(
2493
+ uri=PID4CAT_MODEL.data,
2494
+ name="CHANGES_data",
2495
+ curie=PID4CAT_MODEL.curie("data"),
2496
+ model_uri=PID4CAT_MODEL.CHANGES_data,
2497
+ domain=CHANGES,
2498
+ range=Union[dict, "HdlDataLog"],
2499
+ )
2500
+
2501
+ slots.HdlDataLog_format = Slot(
2502
+ uri=PID4CAT_MODEL.format,
2503
+ name="HdlDataLog_format",
2504
+ curie=PID4CAT_MODEL.curie("format"),
2505
+ model_uri=PID4CAT_MODEL.HdlDataLog_format,
2506
+ domain=HdlDataLog,
2507
+ range=Optional[str],
2508
+ )
2509
+
2510
+ slots.HdlDataLog_value = Slot(
2511
+ uri=PID4CAT_MODEL.value,
2512
+ name="HdlDataLog_value",
2513
+ curie=PID4CAT_MODEL.curie("value"),
2514
+ model_uri=PID4CAT_MODEL.HdlDataLog_value,
2515
+ domain=HdlDataLog,
2516
+ range=Union[Union[dict, "LogRecord"], List[Union[dict, "LogRecord"]]],
2517
+ )
2518
+
2519
+ slots.ResourceInfo_resource_category = Slot(
2520
+ uri=PID4CAT_MODEL.resource_category,
2521
+ name="ResourceInfo_resource_category",
2522
+ curie=PID4CAT_MODEL.curie("resource_category"),
2523
+ model_uri=PID4CAT_MODEL.ResourceInfo_resource_category,
2524
+ domain=ResourceInfo,
2525
+ range=Union[str, "ResourceCategory"],
2526
+ )
2527
+
2528
+ slots.ResourceInfo_representation_variants = Slot(
2529
+ uri=PID4CAT_MODEL.representation_variants,
2530
+ name="ResourceInfo_representation_variants",
2531
+ curie=PID4CAT_MODEL.curie("representation_variants"),
2532
+ model_uri=PID4CAT_MODEL.ResourceInfo_representation_variants,
2533
+ domain=ResourceInfo,
2534
+ range=Union[
2535
+ Union[dict, "RepresentationVariant"], List[Union[dict, "RepresentationVariant"]]
2536
+ ],
2537
+ )
2538
+
2539
+ slots.LogRecord_datetime_log = Slot(
2540
+ uri=PID4CAT_MODEL.datetime_log,
2541
+ name="LogRecord_datetime_log",
2542
+ curie=PID4CAT_MODEL.curie("datetime_log"),
2543
+ model_uri=PID4CAT_MODEL.LogRecord_datetime_log,
2544
+ domain=LogRecord,
2545
+ range=Union[str, XSDDateTime],
2546
+ )
2547
+
2548
+ slots.LogRecord_has_agent = Slot(
2549
+ uri=PID4CAT_MODEL.has_agent,
2550
+ name="LogRecord_has_agent",
2551
+ curie=PID4CAT_MODEL.curie("has_agent"),
2552
+ model_uri=PID4CAT_MODEL.LogRecord_has_agent,
2553
+ domain=LogRecord,
2554
+ range=Union[dict, "Agent"],
2555
+ )
2556
+
2557
+ slots.LogRecord_changed_field = Slot(
2558
+ uri=PID4CAT_MODEL.changed_field,
2559
+ name="LogRecord_changed_field",
2560
+ curie=PID4CAT_MODEL.curie("changed_field"),
2561
+ model_uri=PID4CAT_MODEL.LogRecord_changed_field,
2562
+ domain=LogRecord,
2563
+ range=Union[str, "ChangeLogField"],
2564
+ )
2565
+
2566
+ slots.LogRecord_description = Slot(
2567
+ uri=PID4CAT_MODEL.description,
2568
+ name="LogRecord_description",
2569
+ curie=PID4CAT_MODEL.curie("description"),
2570
+ model_uri=PID4CAT_MODEL.LogRecord_description,
2571
+ domain=LogRecord,
2572
+ range=Optional[str],
2573
+ )
2574
+
2575
+ slots.Agent_name = Slot(
2576
+ uri=PID4CAT_MODEL.name,
2577
+ name="Agent_name",
2578
+ curie=PID4CAT_MODEL.curie("name"),
2579
+ model_uri=PID4CAT_MODEL.Agent_name,
2580
+ domain=Agent,
2581
+ range=str,
2582
+ )
2583
+
2584
+ slots.Agent_email_address = Slot(
2585
+ uri=PID4CAT_MODEL.email_address,
2586
+ name="Agent_email_address",
2587
+ curie=PID4CAT_MODEL.curie("email_address"),
2588
+ model_uri=PID4CAT_MODEL.Agent_email_address,
2589
+ domain=Agent,
2590
+ range=str,
2591
+ pattern=re.compile(r"^\S+@[\S+\.]+\S+"),
2592
+ )
2593
+
2594
+ slots.Agent_orcid = Slot(
2595
+ uri=PID4CAT_MODEL.orcid,
2596
+ name="Agent_orcid",
2597
+ curie=PID4CAT_MODEL.curie("orcid"),
2598
+ model_uri=PID4CAT_MODEL.Agent_orcid,
2599
+ domain=Agent,
2600
+ range=Optional[str],
2601
+ pattern=re.compile(r"^\d{4}-\d{4}-\d{4}-\d{3}[0-9X]$"),
2602
+ )
2603
+
2604
+ slots.Agent_affiliation_ror = Slot(
2605
+ uri=PID4CAT_MODEL.affiliation_ror,
2606
+ name="Agent_affiliation_ror",
2607
+ curie=PID4CAT_MODEL.curie("affiliation_ror"),
2608
+ model_uri=PID4CAT_MODEL.Agent_affiliation_ror,
2609
+ domain=Agent,
2610
+ range=Optional[Union[str, URI]],
2611
+ pattern=re.compile(r"^https:\/\/ror\.org\/0[a-hj-km-np-tv-z|0-9]{6}[0-9]{2}$"),
2612
+ )
2613
+
2614
+ slots.Agent_role = Slot(
2615
+ uri=PID4CAT_MODEL.role,
2616
+ name="Agent_role",
2617
+ curie=PID4CAT_MODEL.curie("role"),
2618
+ model_uri=PID4CAT_MODEL.Agent_role,
2619
+ domain=Agent,
2620
+ range=Union[str, "Pid4CatAgentRole"],
2621
+ )
2622
+
2623
+ slots.RepresentationVariant_media_type = Slot(
2624
+ uri=PID4CAT_MODEL.media_type,
2625
+ name="RepresentationVariant_media_type",
2626
+ curie=PID4CAT_MODEL.curie("media_type"),
2627
+ model_uri=PID4CAT_MODEL.RepresentationVariant_media_type,
2628
+ domain=RepresentationVariant,
2629
+ range=Optional[Union[str, "MediaTypesEnum"]],
2630
+ )
2631
+
2632
+ slots.PurlIdentifier_resolving_url = Slot(
2633
+ uri=PID4CAT_MODEL.resolving_url,
2634
+ name="PurlIdentifier_resolving_url",
2635
+ curie=PID4CAT_MODEL.curie("resolving_url"),
2636
+ model_uri=PID4CAT_MODEL.PurlIdentifier_resolving_url,
2637
+ domain=PurlIdentifier,
2638
+ range=Union[str, URI],
2639
+ pattern=re.compile(r"^https:\/\/(purl|pida|w3id)\.org\/.*$"),
2640
+ )
2641
+
2642
+ slots.DoiIdentifier_identifier = Slot(
2643
+ uri=PID4CAT_MODEL.identifier,
2644
+ name="DoiIdentifier_identifier",
2645
+ curie=PID4CAT_MODEL.curie("identifier"),
2646
+ model_uri=PID4CAT_MODEL.DoiIdentifier_identifier,
2647
+ domain=DoiIdentifier,
2648
+ range=Optional[str],
2649
+ pattern=re.compile(r"^10\.\d{4,}\/.*$"),
2650
+ )
2651
+
2652
+ slots.DoiIdentifier_resolving_url = Slot(
2653
+ uri=PID4CAT_MODEL.resolving_url,
2654
+ name="DoiIdentifier_resolving_url",
2655
+ curie=PID4CAT_MODEL.curie("resolving_url"),
2656
+ model_uri=PID4CAT_MODEL.DoiIdentifier_resolving_url,
2657
+ domain=DoiIdentifier,
2658
+ range=Union[str, URI],
2659
+ pattern=re.compile(r"^https:\/\/doi\.org\/10.*$"),
2660
+ )
2661
+
2662
+ slots.HandleIdentifier_identifier = Slot(
2663
+ uri=PID4CAT_MODEL.identifier,
2664
+ name="HandleIdentifier_identifier",
2665
+ curie=PID4CAT_MODEL.curie("identifier"),
2666
+ model_uri=PID4CAT_MODEL.HandleIdentifier_identifier,
2667
+ domain=HandleIdentifier,
2668
+ range=Optional[str],
2669
+ pattern=re.compile(r"^\d{2}\.T?\d{4,}\/.*$"),
2670
+ )
2671
+
2672
+ slots.HandleIdentifier_resolving_url = Slot(
2673
+ uri=PID4CAT_MODEL.resolving_url,
2674
+ name="HandleIdentifier_resolving_url",
2675
+ curie=PID4CAT_MODEL.curie("resolving_url"),
2676
+ model_uri=PID4CAT_MODEL.HandleIdentifier_resolving_url,
2677
+ domain=HandleIdentifier,
2678
+ range=Union[str, URI],
2679
+ pattern=re.compile(r"^https:\/\/hdl\.handle\.net\/\d{2}\.T?\d{4,}\/.*$"),
2680
+ )
2681
+
2682
+ slots.ArkIdentifier_identifier = Slot(
2683
+ uri=PID4CAT_MODEL.identifier,
2684
+ name="ArkIdentifier_identifier",
2685
+ curie=PID4CAT_MODEL.curie("identifier"),
2686
+ model_uri=PID4CAT_MODEL.ArkIdentifier_identifier,
2687
+ domain=ArkIdentifier,
2688
+ range=Optional[str],
2689
+ pattern=re.compile(r"^ark:\/\d{5}/.*$"),
2690
+ )
2691
+
2692
+ slots.ArkIdentifier_resolving_url = Slot(
2693
+ uri=PID4CAT_MODEL.resolving_url,
2694
+ name="ArkIdentifier_resolving_url",
2695
+ curie=PID4CAT_MODEL.curie("resolving_url"),
2696
+ model_uri=PID4CAT_MODEL.ArkIdentifier_resolving_url,
2697
+ domain=ArkIdentifier,
2698
+ range=Union[str, URI],
2699
+ pattern=re.compile(r"^https?:\/\/.*\/ark:\/\d{5}/.*$"),
2700
+ )
2701
+
2702
+ slots.UrnIdentifier_identifier = Slot(
2703
+ uri=PID4CAT_MODEL.identifier,
2704
+ name="UrnIdentifier_identifier",
2705
+ curie=PID4CAT_MODEL.curie("identifier"),
2706
+ model_uri=PID4CAT_MODEL.UrnIdentifier_identifier,
2707
+ domain=UrnIdentifier,
2708
+ range=str,
2709
+ pattern=re.compile(r"^urn:[a-zA-Z0-9][a-zA-Z0-9-]{0,31}:[^\s]*$"),
2710
+ )
2711
+
2712
+ slots.GtinIdentifier_identifier = Slot(
2713
+ uri=PID4CAT_MODEL.identifier,
2714
+ name="GtinIdentifier_identifier",
2715
+ curie=PID4CAT_MODEL.curie("identifier"),
2716
+ model_uri=PID4CAT_MODEL.GtinIdentifier_identifier,
2717
+ domain=GtinIdentifier,
2718
+ range=str,
2719
+ pattern=re.compile(r"^\d{13}$"),
2720
+ )
2721
+
2722
+ slots.ExampleIdentifier_identifier = Slot(
2723
+ uri=PID4CAT_MODEL.identifier,
2724
+ name="ExampleIdentifier_identifier",
2725
+ curie=PID4CAT_MODEL.curie("identifier"),
2726
+ model_uri=PID4CAT_MODEL.ExampleIdentifier_identifier,
2727
+ domain=ExampleIdentifier,
2728
+ range=Optional[str],
2729
+ pattern=re.compile(r"^ex:.*$"),
2730
+ )
2731
+
2732
+ slots.ExampleIdentifier_resolving_url = Slot(
2733
+ uri=PID4CAT_MODEL.resolving_url,
2734
+ name="ExampleIdentifier_resolving_url",
2735
+ curie=PID4CAT_MODEL.curie("resolving_url"),
2736
+ model_uri=PID4CAT_MODEL.ExampleIdentifier_resolving_url,
2737
+ domain=ExampleIdentifier,
2738
+ range=Optional[Union[str, URI]],
2739
+ pattern=re.compile(r"^https?:\/\/(.+\.)?example.(org|com)\/.*$"),
2740
+ )
2741
+
2742
+ slots.Pid4CatRecord_landing_page_url = Slot(
2743
+ uri=PID4CAT_MODEL.landing_page_url,
2744
+ name="Pid4CatRecord_landing_page_url",
2745
+ curie=PID4CAT_MODEL.curie("landing_page_url"),
2746
+ model_uri=PID4CAT_MODEL.Pid4CatRecord_landing_page_url,
2747
+ domain=Pid4CatRecord,
2748
+ range=str,
2749
+ pattern=re.compile(r"^https?:\/\/.*$"),
2750
+ )
2751
+
2752
+ slots.Pid4CatRecord_status = Slot(
2753
+ uri=PID4CAT_MODEL.status,
2754
+ name="Pid4CatRecord_status",
2755
+ curie=PID4CAT_MODEL.curie("status"),
2756
+ model_uri=PID4CAT_MODEL.Pid4CatRecord_status,
2757
+ domain=Pid4CatRecord,
2758
+ range=Union[str, "Pid4CatStatus"],
2759
+ )
2760
+
2761
+ slots.Pid4CatRecord_schema_version = Slot(
2762
+ uri=PID4CAT_MODEL.schema_version,
2763
+ name="Pid4CatRecord_schema_version",
2764
+ curie=PID4CAT_MODEL.curie("schema_version"),
2765
+ model_uri=PID4CAT_MODEL.Pid4CatRecord_schema_version,
2766
+ domain=Pid4CatRecord,
2767
+ range=str,
2768
+ )
2769
+
2770
+ slots.Pid4CatRecord_metadata_license = Slot(
2771
+ uri=PID4CAT_MODEL.metadata_license,
2772
+ name="Pid4CatRecord_metadata_license",
2773
+ curie=PID4CAT_MODEL.curie("metadata_license"),
2774
+ model_uri=PID4CAT_MODEL.Pid4CatRecord_metadata_license,
2775
+ domain=Pid4CatRecord,
2776
+ range=str,
2777
+ )
2778
+
2779
+ slots.Pid4CatRecord_curation_contact = Slot(
2780
+ uri=PID4CAT_MODEL.curation_contact,
2781
+ name="Pid4CatRecord_curation_contact",
2782
+ curie=PID4CAT_MODEL.curie("curation_contact"),
2783
+ model_uri=PID4CAT_MODEL.Pid4CatRecord_curation_contact,
2784
+ domain=Pid4CatRecord,
2785
+ range=str,
2786
+ pattern=re.compile(r"^\S+@[\S+\.]+\S+"),
2787
+ )
2788
+
2789
+ slots.Pid4CatRecord_resource_info = Slot(
2790
+ uri=PID4CAT_MODEL.resource_info,
2791
+ name="Pid4CatRecord_resource_info",
2792
+ curie=PID4CAT_MODEL.curie("resource_info"),
2793
+ model_uri=PID4CAT_MODEL.Pid4CatRecord_resource_info,
2794
+ domain=Pid4CatRecord,
2795
+ range=Union[dict, ResourceInfo],
2796
+ )
2797
+
2798
+ slots.Pid4CatRecord_related_identifiers = Slot(
2799
+ uri=PID4CAT_MODEL.related_identifiers,
2800
+ name="Pid4CatRecord_related_identifiers",
2801
+ curie=PID4CAT_MODEL.curie("related_identifiers"),
2802
+ model_uri=PID4CAT_MODEL.Pid4CatRecord_related_identifiers,
2803
+ domain=Pid4CatRecord,
2804
+ range=Optional[
2805
+ Union[Union[dict, Pid4CatRelation], List[Union[dict, Pid4CatRelation]]]
2806
+ ],
2807
+ )
2808
+
2809
+ slots.Pid4CatRecord_change_log = Slot(
2810
+ uri=PID4CAT_MODEL.change_log,
2811
+ name="Pid4CatRecord_change_log",
2812
+ curie=PID4CAT_MODEL.curie("change_log"),
2813
+ model_uri=PID4CAT_MODEL.Pid4CatRecord_change_log,
2814
+ domain=Pid4CatRecord,
2815
+ range=Union[Union[dict, LogRecord], List[Union[dict, LogRecord]]],
2816
+ )