diff --git a/Makefile b/Makefile
index 79b7304..e1ffdeb 100644
--- a/Makefile
+++ b/Makefile
@@ -104,7 +104,8 @@ gen-examples:
 
 gen-project: $(PYMODEL)
 	$(RUN) gen-project ${GEN_PARGS} -d $(DEST) $(SOURCE_SCHEMA_PATH) && mv $(DEST)/*.py $(PYMODEL)
-
+	# addition vs. template
+	$(RUN) gen-pydantic --pydantic_version 2 $(SOURCE_SCHEMA_PATH) > $(PYMODEL)/pid4cat_model_pydantic.py
 
 test: test-schema test-python test-examples
 
diff --git a/config.yaml b/config.yaml
index 56da66d..5091427 100644
--- a/config.yaml
+++ b/config.yaml
@@ -24,6 +24,9 @@ generator_args:
     mergeimports: true
   python:
     mergeimports: true
+  pydantic:
+    mergeimports: true
+    pydantic-version: 2
   prefixmap:
     mergeimports: true
   proto:
diff --git a/explore_pydantic.py b/explore_pydantic.py
new file mode 100644
index 0000000..de23daf
--- /dev/null
+++ b/explore_pydantic.py
@@ -0,0 +1,48 @@
+from linkml_runtime.dumpers import json_dumper, yaml_dumper
+from pid4cat_model.datamodel import pid4cat_model_pydantic as p4c
+
+p1_Agent = p4c.Agent(
+    name="Data Fuzzi",
+    contact_information=None,
+    person_orcid="0000-0000-0000-0000",
+    affiliation_ror=None,
+    role=p4c.PID4CatAgentRole.TRUSTEE,
+)
+
+p1_log = p4c.LogRecord(
+    datetime_log="2024-02-19T00:00:00Z",
+    has_agent=p1_Agent,
+    changed_field=p4c.ChangeLogField.STATUS,
+    description="as requested in issue #123",
+)
+
+p1_ressource_info = p4c.ResourceInfo(
+    label="Resource label",
+    description="Resource description",
+    resource_category=p4c.ResourceCategory.SAMPLE,
+    rdf_url="https://example.org/resource",
+    rdf_type="TURTLE",
+    schema_url="https://example.org/schema",
+    schema_type="XSD",
+)
+
+p1 = p4c.PID4CatRecord(
+    id="lik-123",
+    change_log=[p1_log],
+    landing_page_url="https://pid4cat.example.org/lik-123",
+    status=p4c.PID4CatStatus.REGISTERED,
+    pid_schema_version="0.1.0",
+    record_version="20240219v-0",
+    resource_info=p1_ressource_info,
+    related_identifiers=None,
+    dc_rights="CC0-1.0",
+    curation_contact="datafuzzi@example.org",
+)
+
+c = p4c.Container(contains_pids=[p1])
+
+print(p1)
+
+print(json_dumper.dumps(p1))
+
+print(yaml_dumper.dumps(c))
diff --git a/explore_python.py b/explore_python.py
new file mode 100644
index 0000000..db008b4
--- /dev/null
+++ b/explore_python.py
@@ -0,0 +1,34 @@
+from linkml_runtime.dumpers import json_dumper
+from pid4cat_model.datamodel import pid4cat_model as p4c
+
+
+p1_Agent = p4c.Agent(
+    person_orcid="0000-0000-0000-0000",
+    name="Data Fuzzi",
+    role="TRUSTEE",
+)
+
+p1_log = p4c.LogRecord(
+    datetime_log="2024-02-19T00:00:00Z",
+    has_agent=p1_Agent,
+    changed_field=p4c.ChangeLogField.STATUS,  # "STATUS",
+    description="as requested in issue #123",
+)
+
+p1 = p4c.PID4CatRecord(
+    id="lik-1",
+    change_log=p1_log,
+    landing_page_url="https://pid4cat.example.org/lik-1",
+    status=p4c.PID4CatStatus.REGISTERED,  # "REGISTERED",
+    record_version="20240219v-0",
+    resource_info={},
+    related_identifiers=None,
+    dc_rights="CC0-1.0",
+    curation_contact="datafuzzi@example.org",
+)
+
+print(p1)
+
+print(json_dumper.dumps(p1))
+
+c = p4c.Container(contains_pids=[p1])
diff --git a/project/excel/pid4cat_model.xlsx b/project/excel/pid4cat_model.xlsx
index aaf9012..b79a1ff 100644
Binary files a/project/excel/pid4cat_model.xlsx and b/project/excel/pid4cat_model.xlsx differ
diff --git a/project/graphql/pid4cat_model.graphql b/project/graphql/pid4cat_model.graphql
index 0882375..b6ce1bb 100644
--- a/project/graphql/pid4cat_model.graphql
+++ b/project/graphql/pid4cat_model.graphql
@@ -4,14 +4,19 @@ type Agent
     contactInformation: String
     personOrcid: String
     affiliationRor: String
-    role: PID4CatAgentRoles
+    role: PID4CatAgentRole
+  }
+
+type Container
+  {
+    containsPids: [PID4CatRecord]
   }
 
 type LogRecord
   {
     datetimeLog: String
-    agent: Agent
-    changedField: ChangeLogFields
+    hasAgent: Agent
+    changedField: ChangeLogField
     description: String
   }
 
@@ -20,26 +25,28 @@ type PID4CatRecord
     id: Uriorcurie!
     landingPageUrl: String
     status: PID4CatStatus
-    resourceInfo: [ResourceInfo]
-    relatedIdentifiers: [Uriorcurie]
+    recordVersion: String
+    pidSchemaVersion: String
     dcRights: String
     curationContact: String
+    resourceInfo: ResourceInfo
+    relatedIdentifiers: [Uriorcurie]
     changeLog: [LogRecord]!
   }
 
 type PID4CatRelation
   {
-    relationType: [RelationTypes]
+    relationType: [RelationType]
     relatedIdentifier: String
     datetimeLog: String
-    agent: Agent
+    hasAgent: Agent
   }
 
 type ResourceInfo
   {
     label: String
     description: String
-    resourceCategory: ResourceCategories
+    resourceCategory: ResourceCategory
     rdfUrl: String
     rdfType: String
     schemaUrl: String
diff --git a/project/jsonld/pid4cat_model.context.jsonld b/project/jsonld/pid4cat_model.context.jsonld
index 89b40da..c2220ee 100644
--- a/project/jsonld/pid4cat_model.context.jsonld
+++ b/project/jsonld/pid4cat_model.context.jsonld
@@ -1,7 +1,7 @@
 {
    "comments": {
       "description": "Auto generated by LinkML jsonld context generator",
-      "generation_date": "2023-12-07T18:08:50",
+      "generation_date": "2024-02-25T23:40:28",
       "source": "pid4cat_model.yaml"
    },
    "@context": {
@@ -16,10 +16,6 @@
       "affiliation_ror": {
          "@id": "schema:identifier"
       },
-      "agent": {
-         "@type": "@id",
-         "@id": "schema:Agent"
-      },
       "change_log": {
          "@type": "@id",
          "@id": "schema:identifier"
@@ -36,6 +32,9 @@
       "contact_information": {
          "@id": "schema:email"
       },
+      "contains_pids": {
+         "@type": "@id"
+      },
       "curation_contact": {
          "@id": "schema:email"
       },
@@ -48,6 +47,10 @@
       "description": {
          "@id": "schema:description"
       },
+      "has_agent": {
+         "@type": "@id",
+         "@id": "schema:Agent"
+      },
       "id": "@id",
       "label": {
          "@id": "schema:name"
@@ -61,12 +64,18 @@
       "person_orcid": {
          "@id": "schema:identifier"
       },
+      "pid_schema_version": {
+         "@id": "schema:identifier"
+      },
       "rdf_type": {
          "@id": "schema:additionalType"
       },
       "rdf_url": {
          "@id": "schema:additionalType"
       },
+      "record_version": {
+         "@id": "schema:identifier"
+      },
       "related_identifier": {
          "@id": "schema:identifier"
       },
diff --git a/project/jsonld/pid4cat_model.jsonld b/project/jsonld/pid4cat_model.jsonld
index 55922bd..e6459a2 100644
--- a/project/jsonld/pid4cat_model.jsonld
+++ b/project/jsonld/pid4cat_model.jsonld
@@ -1,11 +1,11 @@
 {
   "name": "pid4cat-model",
-  "description": "LinkML model for PIDs for resources in catalysis(PID4Cat). PID4Cat is handle system based persistent identifier (PID) for digital or physical resources used in the catalysis research process. The handle record is used to store metadata about the PID besides the obligatory redirect URL.\nThe model define here 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, e.g. sample or device.",
+  "description": "A LinkML model for PIDs for resources in catalysis (PID4Cat). PID4Cat is a handle system based persistent identifier (PID) for digital or physical resources used in the catalysis research process. The handle record is used to store metadata about the PID besides the obligatory landing page URL.\nThe 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.",
   "title": "pid4cat-model",
   "todos": [
     "Refine slots in slot_usage of class instead of globally in slot definitions",
-    "Decide about the name for our handle PIDs.",
-    "Check and add mappings to other ontologies. (classes, slots, enums)"
+    "Check and add mappings to other ontologies. (classes, slots, enums)",
+    "Add Enums for rdf_type, schema_type"
   ],
   "see_also": [
     "https://dalito.github.io/pid4cat-model"
@@ -355,8 +355,8 @@
   ],
   "enums": [
     {
-      "name": "ResourceCategories",
-      "definition_uri": "https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategories",
+      "name": "ResourceCategory",
+      "definition_uri": "https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategory",
       "description": "The category of the resource",
       "from_schema": "https://w3id.org/nfdi4cat/pid4cat-model",
       "permissible_values": [
@@ -366,15 +366,13 @@
           "meaning": "http://purl.org/dc/dcmitype/Collection"
         },
         {
-          "text": "CATALYST",
-          "description": "A physical entity meant to be applied as catalyst.",
-          "todos": [
-            "map this to an ontology"
-          ]
+          "text": "SAMPLE",
+          "description": "A representative part of an entity of interest on which observations may be made.",
+          "meaning": "http://www.w3.org/ns/sosa/Sample"
         },
         {
           "text": "MATERIAL",
-          "description": "A material used in the catalysis research process (except the catalyst itself).",
+          "description": "A material used in the research process (except samples).",
           "todos": [
             "map this to an ontology"
           ]
@@ -396,8 +394,8 @@
       ]
     },
     {
-      "name": "RelationTypes",
-      "definition_uri": "https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes",
+      "name": "RelationType",
+      "definition_uri": "https://w3id.org/nfdi4cat/pid4cat-model/RelationType",
       "description": "The type of the relation between the resources",
       "from_schema": "https://w3id.org/nfdi4cat/pid4cat-model",
       "permissible_values": [
@@ -518,6 +516,14 @@
           "text": "IS_SOURCE_OF",
           "description": "The resource is source of another resource."
         },
+        {
+          "text": "IS_COLLECTED_BY",
+          "description": "The resource is collected by another resource."
+        },
+        {
+          "text": "COLLECTS",
+          "description": "The resource collects another resource."
+        },
         {
           "text": "IS_REQUIRED_BY",
           "description": "The resource is required by another resource.",
@@ -563,8 +569,8 @@
       ]
     },
     {
-      "name": "PID4CatAgentRoles",
-      "definition_uri": "https://w3id.org/nfdi4cat/pid4cat-model/PID4CatAgentRoles",
+      "name": "PID4CatAgentRole",
+      "definition_uri": "https://w3id.org/nfdi4cat/pid4cat-model/PID4CatAgentRole",
       "description": "The role of an agent relative to the resource.",
       "from_schema": "https://w3id.org/nfdi4cat/pid4cat-model",
       "permissible_values": [
@@ -579,8 +585,8 @@
       ]
     },
     {
-      "name": "ChangeLogFields",
-      "definition_uri": "https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogFields",
+      "name": "ChangeLogField",
+      "definition_uri": "https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogField",
       "description": "The field of the PID4Catrecord that was changed.",
       "from_schema": "https://w3id.org/nfdi4cat/pid4cat-model",
       "permissible_values": [
@@ -656,13 +662,44 @@
       "range": "PID4CatStatus",
       "@type": "SlotDefinition"
     },
+    {
+      "name": "pid_schema_version",
+      "definition_uri": "https://w3id.org/nfdi4cat/pid4cat-model/pid_schema_version",
+      "description": "The version of the PID4Cat schema used for the PID4CatRecord.",
+      "from_schema": "https://w3id.org/nfdi4cat/pid4cat-model",
+      "mappings": [
+        "http://schema.org/identifier"
+      ],
+      "slot_uri": "http://schema.org/identifier",
+      "owner": "PID4CatRecord",
+      "domain_of": [
+        "PID4CatRecord"
+      ],
+      "range": "string",
+      "@type": "SlotDefinition"
+    },
+    {
+      "name": "record_version",
+      "definition_uri": "https://w3id.org/nfdi4cat/pid4cat-model/record_version",
+      "description": "Date-based version string of the PID4CatRecord (e.g. 20240219v0, 20240219v1, ...). The version should be incremented with every change of the PID4CatRecord.",
+      "from_schema": "https://w3id.org/nfdi4cat/pid4cat-model",
+      "mappings": [
+        "http://schema.org/identifier"
+      ],
+      "slot_uri": "http://schema.org/identifier",
+      "owner": "PID4CatRecord",
+      "domain_of": [
+        "PID4CatRecord"
+      ],
+      "range": "string",
+      "@type": "SlotDefinition"
+    },
     {
       "name": "resource_info",
       "definition_uri": "https://w3id.org/nfdi4cat/pid4cat-model/resource_info",
       "description": "Information about the resource.",
       "from_schema": "https://w3id.org/nfdi4cat/pid4cat-model",
       "slot_uri": "https://w3id.org/nfdi4cat/pid4cat-model/resource_info",
-      "multivalued": true,
       "owner": "PID4CatRecord",
       "domain_of": [
         "PID4CatRecord"
@@ -753,7 +790,7 @@
       "domain_of": [
         "PID4CatRelation"
       ],
-      "range": "RelationTypes",
+      "range": "RelationType",
       "@type": "SlotDefinition"
     },
     {
@@ -790,8 +827,8 @@
       "@type": "SlotDefinition"
     },
     {
-      "name": "agent",
-      "definition_uri": "https://w3id.org/nfdi4cat/pid4cat-model/agent",
+      "name": "has_agent",
+      "definition_uri": "https://w3id.org/nfdi4cat/pid4cat-model/has_agent",
       "description": "The person who registered the resource",
       "from_schema": "https://w3id.org/nfdi4cat/pid4cat-model",
       "mappings": [
@@ -853,13 +890,13 @@
       "domain_of": [
         "ResourceInfo"
       ],
-      "range": "ResourceCategories",
+      "range": "ResourceCategory",
       "@type": "SlotDefinition"
     },
     {
       "name": "rdf_url",
       "definition_uri": "https://w3id.org/nfdi4cat/pid4cat-model/rdf_url",
-      "description": "The URI of the rdf represenation of the resource. ",
+      "description": "The URI of the rdf represenation of the resource.",
       "from_schema": "https://w3id.org/nfdi4cat/pid4cat-model",
       "mappings": [
         "http://schema.org/additionalType"
@@ -891,7 +928,7 @@
     {
       "name": "schema_url",
       "definition_uri": "https://w3id.org/nfdi4cat/pid4cat-model/schema_url",
-      "description": "The URI of the schema used to describe the resource.  Same property as in DataCite:schemeURI.",
+      "description": "The URI of the schema used to describe the resource. Same property as in DataCite:schemeURI.",
       "from_schema": "https://w3id.org/nfdi4cat/pid4cat-model",
       "mappings": [
         "http://schema.org/additionalType"
@@ -933,7 +970,7 @@
       "domain_of": [
         "LogRecord"
       ],
-      "range": "ChangeLogFields",
+      "range": "ChangeLogField",
       "@type": "SlotDefinition"
     },
     {
@@ -1013,7 +1050,23 @@
       "domain_of": [
         "Agent"
       ],
-      "range": "PID4CatAgentRoles",
+      "range": "PID4CatAgentRole",
+      "@type": "SlotDefinition"
+    },
+    {
+      "name": "container__contains_pids",
+      "description": "The PID4CatRecords contained in the container.",
+      "from_schema": "https://w3id.org/nfdi4cat/pid4cat-model",
+      "slot_uri": "https://w3id.org/nfdi4cat/pid4cat-model/contains_pids",
+      "multivalued": true,
+      "alias": "contains_pids",
+      "owner": "Container",
+      "domain_of": [
+        "Container"
+      ],
+      "range": "PID4CatRecord",
+      "inlined": true,
+      "inlined_as_list": true,
       "@type": "SlotDefinition"
     },
     {
@@ -1049,10 +1102,12 @@
         "id",
         "landing_page_url",
         "status",
-        "resource_info",
-        "related_identifiers",
+        "record_version",
+        "pid_schema_version",
         "dc_rights",
         "PID4CatRecord_curation_contact",
+        "resource_info",
+        "related_identifiers",
         "change_log"
       ],
       "slot_usage": {},
@@ -1068,7 +1123,7 @@
         "relation_type",
         "related_identifier",
         "datetime_log",
-        "agent"
+        "has_agent"
       ],
       "slot_usage": {},
       "class_uri": "https://w3id.org/nfdi4cat/pid4cat-model/PID4CatRelation",
@@ -1099,7 +1154,7 @@
       "from_schema": "https://w3id.org/nfdi4cat/pid4cat-model",
       "slots": [
         "datetime_log",
-        "agent",
+        "has_agent",
         "changed_field",
         "description"
       ],
@@ -1110,7 +1165,7 @@
     {
       "name": "Agent",
       "definition_uri": "https://w3id.org/nfdi4cat/pid4cat-model/Agent",
-      "description": "Person who plays a role relative to sample collection or curation.",
+      "description": "Person who plays a role relative to PID creation or curation.",
       "from_schema": "https://w3id.org/nfdi4cat/pid4cat-model",
       "slots": [
         "name",
@@ -1122,13 +1177,36 @@
       "slot_usage": {},
       "class_uri": "https://w3id.org/nfdi4cat/pid4cat-model/Agent",
       "@type": "ClassDefinition"
+    },
+    {
+      "name": "Container",
+      "definition_uri": "https://w3id.org/nfdi4cat/pid4cat-model/Container",
+      "description": "A container for all PID4Cat instances.",
+      "from_schema": "https://w3id.org/nfdi4cat/pid4cat-model",
+      "slots": [
+        "container__contains_pids"
+      ],
+      "slot_usage": {},
+      "attributes": [
+        {
+          "name": "contains_pids",
+          "description": "The PID4CatRecords contained in the container.",
+          "multivalued": true,
+          "range": "PID4CatRecord",
+          "inlined_as_list": true,
+          "@type": "SlotDefinition"
+        }
+      ],
+      "class_uri": "https://w3id.org/nfdi4cat/pid4cat-model/Container",
+      "tree_root": true,
+      "@type": "ClassDefinition"
     }
   ],
   "metamodel_version": "1.7.0",
   "source_file": "pid4cat_model.yaml",
-  "source_file_date": "2023-12-07T17:44:32",
-  "source_file_size": 12073,
-  "generation_date": "2023-12-07T18:08:51",
+  "source_file_date": "2024-02-25T18:17:54",
+  "source_file_size": 12852,
+  "generation_date": "2024-02-25T23:40:29",
   "@type": "SchemaDefinition",
   "@context": [
     "project/jsonld/pid4cat_model.context.jsonld",
diff --git a/project/jsonschema/pid4cat_model.schema.json b/project/jsonschema/pid4cat_model.schema.json
index 39e573d..2770f5e 100644
--- a/project/jsonschema/pid4cat_model.schema.json
+++ b/project/jsonschema/pid4cat_model.schema.json
@@ -2,7 +2,7 @@
     "$defs": {
         "Agent": {
             "additionalProperties": false,
-            "description": "Person who plays a role relative to sample collection or curation.",
+            "description": "Person who plays a role relative to PID creation or curation.",
             "properties": {
                 "affiliation_ror": {
                     "description": "The ROR of the affiliation",
@@ -21,14 +21,14 @@
                     "type": "string"
                 },
                 "role": {
-                    "$ref": "#/$defs/PID4CatAgentRoles",
+                    "$ref": "#/$defs/PID4CatAgentRole",
                     "description": "The role of the agent relative to the resource"
                 }
             },
             "title": "Agent",
             "type": "object"
         },
-        "ChangeLogFields": {
+        "ChangeLogField": {
             "description": "The field of the PID4Catrecord that was changed.",
             "enum": [
                 "STATUS",
@@ -37,19 +37,30 @@
                 "CONTACT",
                 "RIGHTS"
             ],
-            "title": "ChangeLogFields",
+            "title": "ChangeLogField",
             "type": "string"
         },
+        "Container": {
+            "additionalProperties": false,
+            "description": "A container for all PID4Cat instances.",
+            "properties": {
+                "contains_pids": {
+                    "description": "The PID4CatRecords contained in the container.",
+                    "items": {
+                        "$ref": "#/$defs/PID4CatRecord"
+                    },
+                    "type": "array"
+                }
+            },
+            "title": "Container",
+            "type": "object"
+        },
         "LogRecord": {
             "additionalProperties": false,
             "description": "A log record for changes made on a PID4CatRecord starting from registration.",
             "properties": {
-                "agent": {
-                    "$ref": "#/$defs/Agent",
-                    "description": "The person who registered the resource"
-                },
                 "changed_field": {
-                    "$ref": "#/$defs/ChangeLogFields",
+                    "$ref": "#/$defs/ChangeLogField",
                     "description": "The field that was changed"
                 },
                 "datetime_log": {
@@ -59,18 +70,22 @@
                 "description": {
                     "description": "A human-readable description for a thing",
                     "type": "string"
+                },
+                "has_agent": {
+                    "$ref": "#/$defs/Agent",
+                    "description": "The person who registered the resource"
                 }
             },
             "title": "LogRecord",
             "type": "object"
         },
-        "PID4CatAgentRoles": {
+        "PID4CatAgentRole": {
             "description": "The role of an agent relative to the resource.",
             "enum": [
                 "TRUSTEE",
                 "OWNER"
             ],
-            "title": "PID4CatAgentRoles",
+            "title": "PID4CatAgentRole",
             "type": "string"
         },
         "PID4CatRecord": {
@@ -101,6 +116,14 @@
                     "description": "The URL of the landing page for the resource",
                     "type": "string"
                 },
+                "pid_schema_version": {
+                    "description": "The version of the PID4Cat schema used for the PID4CatRecord.",
+                    "type": "string"
+                },
+                "record_version": {
+                    "description": "Date-based version string of the PID4CatRecord (e.g. 20240219v0, 20240219v1, ...). The version should be incremented with every change of the PID4CatRecord.",
+                    "type": "string"
+                },
                 "related_identifiers": {
                     "description": "Alternate identifiers for the resource",
                     "items": {
@@ -109,11 +132,8 @@
                     "type": "array"
                 },
                 "resource_info": {
-                    "description": "Information about the resource.",
-                    "items": {
-                        "$ref": "#/$defs/ResourceInfo"
-                    },
-                    "type": "array"
+                    "$ref": "#/$defs/ResourceInfo",
+                    "description": "Information about the resource."
                 },
                 "status": {
                     "$ref": "#/$defs/PID4CatStatus",
@@ -131,14 +151,14 @@
             "additionalProperties": false,
             "description": "A relation between PID4CatRecords or between a PID4CatRecord and other resources with a PID.",
             "properties": {
-                "agent": {
-                    "$ref": "#/$defs/Agent",
-                    "description": "The person who registered the resource"
-                },
                 "datetime_log": {
                     "description": "The date and time of a log record",
                     "type": "string"
                 },
+                "has_agent": {
+                    "$ref": "#/$defs/Agent",
+                    "description": "The person who registered the resource"
+                },
                 "related_identifier": {
                     "description": "Related identifiers for the resource",
                     "type": "string"
@@ -146,7 +166,7 @@
                 "relation_type": {
                     "description": "Relation type between the resources",
                     "items": {
-                        "$ref": "#/$defs/RelationTypes"
+                        "$ref": "#/$defs/RelationType"
                     },
                     "type": "array"
                 }
@@ -165,7 +185,7 @@
             "title": "PID4CatStatus",
             "type": "string"
         },
-        "RelationTypes": {
+        "RelationType": {
             "description": "The type of the relation between the resources",
             "enum": [
                 "IS_CITED_BY",
@@ -196,24 +216,26 @@
                 "IS_IDENTICAL_TO",
                 "IS_DERIVED_FROM",
                 "IS_SOURCE_OF",
+                "IS_COLLECTED_BY",
+                "COLLECTS",
                 "IS_REQUIRED_BY",
                 "REQUIRES",
                 "IS_OBSOLETED_BY",
                 "OBSOLETES"
             ],
-            "title": "RelationTypes",
+            "title": "RelationType",
             "type": "string"
         },
-        "ResourceCategories": {
+        "ResourceCategory": {
             "description": "The category of the resource",
             "enum": [
                 "COLLECTION",
-                "CATALYST",
+                "SAMPLE",
                 "MATERIAL",
                 "DEVICE",
                 "DATAOBJECT"
             ],
-            "title": "ResourceCategories",
+            "title": "ResourceCategory",
             "type": "string"
         },
         "ResourceInfo": {
@@ -233,11 +255,11 @@
                     "type": "string"
                 },
                 "rdf_url": {
-                    "description": "The URI of the rdf represenation of the resource. ",
+                    "description": "The URI of the rdf represenation of the resource.",
                     "type": "string"
                 },
                 "resource_category": {
-                    "$ref": "#/$defs/ResourceCategories",
+                    "$ref": "#/$defs/ResourceCategory",
                     "description": "The category of the resource"
                 },
                 "schema_type": {
@@ -245,7 +267,7 @@
                     "type": "string"
                 },
                 "schema_url": {
-                    "description": "The URI of the schema used to describe the resource.  Same property as in DataCite:schemeURI.",
+                    "description": "The URI of the schema used to describe the resource. Same property as in DataCite:schemeURI.",
                     "type": "string"
                 }
             },
@@ -256,7 +278,17 @@
     "$id": "https://w3id.org/nfdi4cat/pid4cat-model",
     "$schema": "http://json-schema.org/draft-07/schema#",
     "additionalProperties": true,
+    "description": "A container for all PID4Cat instances.",
     "metamodel_version": "1.7.0",
+    "properties": {
+        "contains_pids": {
+            "description": "The PID4CatRecords contained in the container.",
+            "items": {
+                "$ref": "#/$defs/PID4CatRecord"
+            },
+            "type": "array"
+        }
+    },
     "title": "pid4cat-model",
     "type": "object",
     "version": null
diff --git a/project/owl/pid4cat_model.owl.ttl b/project/owl/pid4cat_model.owl.ttl
index eb2b9d8..c95d44e 100644
--- a/project/owl/pid4cat_model.owl.ttl
+++ b/project/owl/pid4cat_model.owl.ttl
@@ -7,234 +7,273 @@
 @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
 @prefix sh: <http://www.w3.org/ns/shacl#> .
 @prefix skos: <http://www.w3.org/2004/02/skos/core#> .
+@prefix sosa: <http://www.w3.org/ns/sosa/> .
 @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
 
-pid4cat_model:PID4CatRecord a owl:Class,
+pid4cat_model:Container a owl:Class,
         linkml:ClassDefinition ;
-    rdfs:label "PID4CatRecord" ;
+    rdfs:label "Container" ;
     rdfs:subClassOf [ a owl:Restriction ;
-            owl:allValuesFrom pid4cat_model:ResourceInfo ;
-            owl:onProperty pid4cat_model:resource_info ],
+            owl:allValuesFrom pid4cat_model:PID4CatRecord ;
+            owl:onProperty pid4cat_model:contains_pids ],
         [ a owl:Restriction ;
+            owl:minCardinality 0 ;
+            owl:onProperty pid4cat_model:contains_pids ] ;
+    skos:definition "A container for all PID4Cat instances." ;
+    skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
+
+pid4cat_model:PID4CatRelation a owl:Class,
+        linkml:ClassDefinition ;
+    rdfs:label "PID4CatRelation" ;
+    rdfs:subClassOf [ a owl:Restriction ;
             owl:maxCardinality 1 ;
-            owl:onProperty pid4cat_model:dc_rights ],
+            owl:onProperty pid4cat_model:has_agent ],
         [ a owl:Restriction ;
-            owl:allValuesFrom linkml:Uriorcurie ;
-            owl:onProperty pid4cat_model:id ],
+            owl:minCardinality 0 ;
+            owl:onProperty pid4cat_model:related_identifier ],
         [ a owl:Restriction ;
             owl:minCardinality 0 ;
-            owl:onProperty pid4cat_model:resource_info ],
+            owl:onProperty pid4cat_model:has_agent ],
         [ a owl:Restriction ;
-            owl:allValuesFrom pid4cat_model:PID4CatStatus ;
-            owl:onProperty pid4cat_model:status ],
+            owl:maxCardinality 1 ;
+            owl:onProperty pid4cat_model:related_identifier ],
         [ a owl:Restriction ;
-            owl:minCardinality 1 ;
-            owl:onProperty pid4cat_model:id ],
+            owl:allValuesFrom linkml:String ;
+            owl:onProperty pid4cat_model:related_identifier ],
+        [ a owl:Restriction ;
+            owl:minCardinality 0 ;
+            owl:onProperty pid4cat_model:datetime_log ],
+        [ a owl:Restriction ;
+            owl:allValuesFrom linkml:String ;
+            owl:onProperty pid4cat_model:datetime_log ],
         [ a owl:Restriction ;
             owl:maxCardinality 1 ;
-            owl:onProperty pid4cat_model:curation_contact ],
+            owl:onProperty pid4cat_model:datetime_log ],
+        [ a owl:Restriction ;
+            owl:allValuesFrom pid4cat_model:RelationType ;
+            owl:onProperty pid4cat_model:relation_type ],
+        [ a owl:Restriction ;
+            owl:allValuesFrom pid4cat_model:Agent ;
+            owl:onProperty pid4cat_model:has_agent ],
         [ a owl:Restriction ;
             owl:minCardinality 0 ;
-            owl:onProperty pid4cat_model:related_identifiers ],
+            owl:onProperty pid4cat_model:relation_type ] ;
+    skos:definition "A relation between PID4CatRecords or between a PID4CatRecord and other resources with a PID." ;
+    skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
+
+pid4cat_model:PID4CatRecord a owl:Class,
+        linkml:ClassDefinition ;
+    rdfs:label "PID4CatRecord" ;
+    rdfs:subClassOf [ a owl:Restriction ;
+            owl:minCardinality 0 ;
+            owl:onProperty pid4cat_model:record_version ],
         [ a owl:Restriction ;
             owl:allValuesFrom linkml:String ;
             owl:onProperty pid4cat_model:landing_page_url ],
         [ a owl:Restriction ;
             owl:maxCardinality 1 ;
-            owl:onProperty pid4cat_model:status ],
+            owl:onProperty pid4cat_model:landing_page_url ],
         [ a owl:Restriction ;
-            owl:allValuesFrom pid4cat_model:LogRecord ;
+            owl:maxCardinality 1 ;
+            owl:onProperty pid4cat_model:record_version ],
+        [ a owl:Restriction ;
+            owl:maxCardinality 1 ;
+            owl:onProperty pid4cat_model:resource_info ],
+        [ a owl:Restriction ;
+            owl:maxCardinality 1 ;
+            owl:onProperty pid4cat_model:id ],
+        [ a owl:Restriction ;
+            owl:minCardinality 1 ;
             owl:onProperty pid4cat_model:change_log ],
+        [ a owl:Restriction ;
+            owl:maxCardinality 1 ;
+            owl:onProperty pid4cat_model:curation_contact ],
+        [ a owl:Restriction ;
+            owl:minCardinality 0 ;
+            owl:onProperty pid4cat_model:pid_schema_version ],
         [ a owl:Restriction ;
             owl:minCardinality 0 ;
             owl:onProperty pid4cat_model:landing_page_url ],
+        [ a owl:Restriction ;
+            owl:maxCardinality 1 ;
+            owl:onProperty pid4cat_model:status ],
         [ a owl:Restriction ;
             owl:minCardinality 0 ;
             owl:onProperty pid4cat_model:status ],
         [ a owl:Restriction ;
-            owl:allValuesFrom linkml:Uriorcurie ;
-            owl:onProperty pid4cat_model:related_identifiers ],
+            owl:maxCardinality 1 ;
+            owl:onProperty pid4cat_model:dc_rights ],
+        [ a owl:Restriction ;
+            owl:allValuesFrom pid4cat_model:LogRecord ;
+            owl:onProperty pid4cat_model:change_log ],
+        [ a owl:Restriction ;
+            owl:allValuesFrom linkml:String ;
+            owl:onProperty pid4cat_model:record_version ],
+        [ a owl:Restriction ;
+            owl:maxCardinality 1 ;
+            owl:onProperty pid4cat_model:pid_schema_version ],
         [ a owl:Restriction ;
             owl:minCardinality 0 ;
-            owl:onProperty pid4cat_model:dc_rights ],
+            owl:onProperty pid4cat_model:curation_contact ],
         [ a owl:Restriction ;
             owl:allValuesFrom [ a rdfs:Datatype ;
                     owl:onDatatype xsd:string ;
                     owl:withRestrictions ( [ xsd:pattern "^\\S+@[\\S+\\.]+\\S+" ] ) ] ;
             owl:onProperty pid4cat_model:curation_contact ],
-        [ a owl:Restriction ;
-            owl:maxCardinality 1 ;
-            owl:onProperty pid4cat_model:id ],
-        [ a owl:Restriction ;
-            owl:maxCardinality 1 ;
-            owl:onProperty pid4cat_model:landing_page_url ],
         [ a owl:Restriction ;
             owl:allValuesFrom linkml:String ;
-            owl:onProperty pid4cat_model:dc_rights ],
+            owl:onProperty pid4cat_model:pid_schema_version ],
         [ a owl:Restriction ;
-            owl:minCardinality 0 ;
-            owl:onProperty pid4cat_model:curation_contact ],
+            owl:allValuesFrom pid4cat_model:PID4CatStatus ;
+            owl:onProperty pid4cat_model:status ],
         [ a owl:Restriction ;
             owl:minCardinality 1 ;
-            owl:onProperty pid4cat_model:change_log ] ;
-    skos:definition "Represents a PID4CatRecord" ;
-    skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
-
-pid4cat_model:PID4CatRelation a owl:Class,
-        linkml:ClassDefinition ;
-    rdfs:label "PID4CatRelation" ;
-    rdfs:subClassOf [ a owl:Restriction ;
+            owl:onProperty pid4cat_model:id ],
+        [ a owl:Restriction ;
             owl:minCardinality 0 ;
-            owl:onProperty pid4cat_model:relation_type ],
+            owl:onProperty pid4cat_model:dc_rights ],
         [ a owl:Restriction ;
-            owl:allValuesFrom pid4cat_model:RelationTypes ;
-            owl:onProperty pid4cat_model:relation_type ],
+            owl:allValuesFrom pid4cat_model:ResourceInfo ;
+            owl:onProperty pid4cat_model:resource_info ],
         [ a owl:Restriction ;
-            owl:minCardinality 0 ;
-            owl:onProperty pid4cat_model:agent ],
+            owl:allValuesFrom linkml:Uriorcurie ;
+            owl:onProperty pid4cat_model:id ],
         [ a owl:Restriction ;
-            owl:allValuesFrom linkml:String ;
-            owl:onProperty pid4cat_model:datetime_log ],
+            owl:allValuesFrom linkml:Uriorcurie ;
+            owl:onProperty pid4cat_model:related_identifiers ],
         [ a owl:Restriction ;
             owl:allValuesFrom linkml:String ;
-            owl:onProperty pid4cat_model:related_identifier ],
-        [ a owl:Restriction ;
-            owl:maxCardinality 1 ;
-            owl:onProperty pid4cat_model:datetime_log ],
+            owl:onProperty pid4cat_model:dc_rights ],
         [ a owl:Restriction ;
             owl:minCardinality 0 ;
-            owl:onProperty pid4cat_model:datetime_log ],
-        [ a owl:Restriction ;
-            owl:allValuesFrom pid4cat_model:Agent ;
-            owl:onProperty pid4cat_model:agent ],
-        [ a owl:Restriction ;
-            owl:maxCardinality 1 ;
-            owl:onProperty pid4cat_model:related_identifier ],
+            owl:onProperty pid4cat_model:related_identifiers ],
         [ a owl:Restriction ;
             owl:minCardinality 0 ;
-            owl:onProperty pid4cat_model:related_identifier ],
-        [ a owl:Restriction ;
-            owl:maxCardinality 1 ;
-            owl:onProperty pid4cat_model:agent ] ;
-    skos:definition "A relation between PID4CatRecords or between a PID4CatRecord and other resources with a PID." ;
+            owl:onProperty pid4cat_model:resource_info ] ;
+    skos:definition "Represents a PID4CatRecord" ;
     skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
 
 dcmitype:Collection a owl:Class,
-        pid4cat_model:ResourceCategories ;
+        pid4cat_model:ResourceCategory ;
     rdfs:label "COLLECTION" ;
-    rdfs:subClassOf pid4cat_model:ResourceCategories .
+    rdfs:subClassOf pid4cat_model:ResourceCategory .
 
 dct:hasPart a owl:Class,
-        pid4cat_model:RelationTypes ;
+        pid4cat_model:RelationType ;
     rdfs:label "HAS_PART" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
 dct:hasVersion a owl:Class,
-        pid4cat_model:RelationTypes ;
+        pid4cat_model:RelationType ;
     rdfs:label "HAS_VERSION" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
 dct:isPartOf a owl:Class,
-        pid4cat_model:RelationTypes ;
+        pid4cat_model:RelationType ;
     rdfs:label "IS_PART_OF" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
 dct:isReferencedBy a owl:Class,
-        pid4cat_model:RelationTypes ;
+        pid4cat_model:RelationType ;
     rdfs:label "IS_REFERENCED_BY" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
 dct:isRequiredBy a owl:Class,
-        pid4cat_model:RelationTypes ;
+        pid4cat_model:RelationType ;
     rdfs:label "IS_REQUIRED_BY" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
 dct:isVersionOf a owl:Class,
-        pid4cat_model:RelationTypes ;
+        pid4cat_model:RelationType ;
     rdfs:label "IS_VERSION_OF" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
 dct:requires a owl:Class,
-        pid4cat_model:RelationTypes ;
+        pid4cat_model:RelationType ;
     rdfs:label "REQUIRES" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
+
+sosa:Sample a owl:Class,
+        pid4cat_model:ResourceCategory ;
+    rdfs:label "SAMPLE" ;
+    rdfs:subClassOf pid4cat_model:ResourceCategory .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogFields#CONTACT> a owl:Class,
-        pid4cat_model:ChangeLogFields ;
+<https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogField#CONTACT> a owl:Class,
+        pid4cat_model:ChangeLogField ;
     rdfs:label "CONTACT" ;
-    rdfs:subClassOf pid4cat_model:ChangeLogFields .
+    rdfs:subClassOf pid4cat_model:ChangeLogField .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogFields#RELATED_IDS> a owl:Class,
-        pid4cat_model:ChangeLogFields ;
+<https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogField#RELATED_IDS> a owl:Class,
+        pid4cat_model:ChangeLogField ;
     rdfs:label "RELATED_IDS" ;
-    rdfs:subClassOf pid4cat_model:ChangeLogFields .
+    rdfs:subClassOf pid4cat_model:ChangeLogField .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogFields#RESOURCE_INFO> a owl:Class,
-        pid4cat_model:ChangeLogFields ;
+<https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogField#RESOURCE_INFO> a owl:Class,
+        pid4cat_model:ChangeLogField ;
     rdfs:label "RESOURCE_INFO" ;
-    rdfs:subClassOf pid4cat_model:ChangeLogFields .
+    rdfs:subClassOf pid4cat_model:ChangeLogField .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogFields#RIGHTS> a owl:Class,
-        pid4cat_model:ChangeLogFields ;
+<https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogField#RIGHTS> a owl:Class,
+        pid4cat_model:ChangeLogField ;
     rdfs:label "RIGHTS" ;
-    rdfs:subClassOf pid4cat_model:ChangeLogFields .
+    rdfs:subClassOf pid4cat_model:ChangeLogField .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogFields#STATUS> a owl:Class,
-        pid4cat_model:ChangeLogFields ;
+<https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogField#STATUS> a owl:Class,
+        pid4cat_model:ChangeLogField ;
     rdfs:label "STATUS" ;
-    rdfs:subClassOf pid4cat_model:ChangeLogFields .
+    rdfs:subClassOf pid4cat_model:ChangeLogField .
 
 pid4cat_model:LogRecord a owl:Class,
         linkml:ClassDefinition ;
     rdfs:label "LogRecord" ;
     rdfs:subClassOf [ a owl:Restriction ;
-            owl:allValuesFrom linkml:String ;
+            owl:maxCardinality 1 ;
+            owl:onProperty pid4cat_model:changed_field ],
+        [ a owl:Restriction ;
+            owl:minCardinality 0 ;
             owl:onProperty pid4cat_model:datetime_log ],
         [ a owl:Restriction ;
-            owl:allValuesFrom pid4cat_model:Agent ;
-            owl:onProperty pid4cat_model:agent ],
+            owl:allValuesFrom pid4cat_model:ChangeLogField ;
+            owl:onProperty pid4cat_model:changed_field ],
         [ a owl:Restriction ;
-            owl:minCardinality 0 ;
+            owl:maxCardinality 1 ;
             owl:onProperty pid4cat_model:datetime_log ],
         [ a owl:Restriction ;
-            owl:minCardinality 0 ;
-            owl:onProperty pid4cat_model:agent ],
+            owl:allValuesFrom linkml:String ;
+            owl:onProperty pid4cat_model:description ],
         [ a owl:Restriction ;
             owl:minCardinality 0 ;
             owl:onProperty pid4cat_model:description ],
         [ a owl:Restriction ;
             owl:maxCardinality 1 ;
-            owl:onProperty pid4cat_model:agent ],
-        [ a owl:Restriction ;
-            owl:allValuesFrom linkml:String ;
             owl:onProperty pid4cat_model:description ],
         [ a owl:Restriction ;
             owl:maxCardinality 1 ;
-            owl:onProperty pid4cat_model:datetime_log ],
+            owl:onProperty pid4cat_model:has_agent ],
         [ a owl:Restriction ;
-            owl:allValuesFrom pid4cat_model:ChangeLogFields ;
-            owl:onProperty pid4cat_model:changed_field ],
+            owl:minCardinality 0 ;
+            owl:onProperty pid4cat_model:has_agent ],
         [ a owl:Restriction ;
             owl:minCardinality 0 ;
             owl:onProperty pid4cat_model:changed_field ],
         [ a owl:Restriction ;
-            owl:maxCardinality 1 ;
-            owl:onProperty pid4cat_model:changed_field ],
+            owl:allValuesFrom pid4cat_model:Agent ;
+            owl:onProperty pid4cat_model:has_agent ],
         [ a owl:Restriction ;
-            owl:maxCardinality 1 ;
-            owl:onProperty pid4cat_model:description ] ;
+            owl:allValuesFrom linkml:String ;
+            owl:onProperty pid4cat_model:datetime_log ] ;
     skos:definition "A log record for changes made on a PID4CatRecord starting from registration." ;
     skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/PID4CatAgentRoles#OWNER> a owl:Class,
-        pid4cat_model:PID4CatAgentRoles ;
+<https://w3id.org/nfdi4cat/pid4cat-model/PID4CatAgentRole#OWNER> a owl:Class,
+        pid4cat_model:PID4CatAgentRole ;
     rdfs:label "OWNER" ;
-    rdfs:subClassOf pid4cat_model:PID4CatAgentRoles .
+    rdfs:subClassOf pid4cat_model:PID4CatAgentRole .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/PID4CatAgentRoles#TRUSTEE> a owl:Class,
-        pid4cat_model:PID4CatAgentRoles ;
+<https://w3id.org/nfdi4cat/pid4cat-model/PID4CatAgentRole#TRUSTEE> a owl:Class,
+        pid4cat_model:PID4CatAgentRole ;
     rdfs:label "TRUSTEE" ;
-    rdfs:subClassOf pid4cat_model:PID4CatAgentRoles .
+    rdfs:subClassOf pid4cat_model:PID4CatAgentRole .
 
 <https://w3id.org/nfdi4cat/pid4cat-model/PID4CatStatus#DEPRECATED> a owl:Class,
         pid4cat_model:PID4CatStatus ;
@@ -256,214 +295,219 @@ pid4cat_model:LogRecord a owl:Class,
     rdfs:label "SUBMITTED" ;
     rdfs:subClassOf pid4cat_model:PID4CatStatus .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#CITES> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#CITES> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "CITES" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
+
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#COLLECTS> a owl:Class,
+        pid4cat_model:RelationType ;
+    rdfs:label "COLLECTS" ;
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#COMPILES> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#COMPILES> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "COMPILES" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#CONTINUES> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#CONTINUES> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "CONTINUES" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#DESCRIBES> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#DESCRIBES> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "DESCRIBES" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#DOCUMENTS> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#DOCUMENTS> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "DOCUMENTS" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#HAS_METADATA> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#HAS_METADATA> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "HAS_METADATA" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_CITED_BY> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_CITED_BY> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "IS_CITED_BY" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_COMPILED_BY> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_COLLECTED_BY> a owl:Class,
+        pid4cat_model:RelationType ;
+    rdfs:label "IS_COLLECTED_BY" ;
+    rdfs:subClassOf pid4cat_model:RelationType .
+
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_COMPILED_BY> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "IS_COMPILED_BY" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_CONTINUED_BY> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_CONTINUED_BY> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "IS_CONTINUED_BY" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_DERIVED_FROM> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_DERIVED_FROM> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "IS_DERIVED_FROM" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_DESCRIBED_BY> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_DESCRIBED_BY> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "IS_DESCRIBED_BY" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_DOCUMENTED_BY> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_DOCUMENTED_BY> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "IS_DOCUMENTED_BY" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_IDENTICAL_TO> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_IDENTICAL_TO> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "IS_IDENTICAL_TO" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_METADATA_FOR> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_METADATA_FOR> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "IS_METADATA_FOR" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_NEW_VERSION_OF> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_NEW_VERSION_OF> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "IS_NEW_VERSION_OF" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_OBSOLETED_BY> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_OBSOLETED_BY> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "IS_OBSOLETED_BY" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_ORIGINAL_FORM_OF> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_ORIGINAL_FORM_OF> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "IS_ORIGINAL_FORM_OF" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_PREVIOUS_VERSION_OF> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_PREVIOUS_VERSION_OF> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "IS_PREVIOUS_VERSION_OF" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_PUBLISHED_IN> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_PUBLISHED_IN> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "IS_PUBLISHED_IN" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_SOURCE_OF> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_SOURCE_OF> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "IS_SOURCE_OF" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_SUPPLEMENTED_BY> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_SUPPLEMENTED_BY> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "IS_SUPPLEMENTED_BY" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_SUPPLEMENT_TO> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_SUPPLEMENT_TO> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "IS_SUPPLEMENT_TO" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_VARIANT_FORM_OF> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_VARIANT_FORM_OF> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "IS_VARIANT_FORM_OF" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#OBSOLETES> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#OBSOLETES> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "OBSOLETES" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#REFERENCES> a owl:Class,
-        pid4cat_model:RelationTypes ;
+<https://w3id.org/nfdi4cat/pid4cat-model/RelationType#REFERENCES> a owl:Class,
+        pid4cat_model:RelationType ;
     rdfs:label "REFERENCES" ;
-    rdfs:subClassOf pid4cat_model:RelationTypes .
-
-<https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategories#CATALYST> a owl:Class,
-        pid4cat_model:ResourceCategories ;
-    rdfs:label "CATALYST" ;
-    rdfs:subClassOf pid4cat_model:ResourceCategories .
+    rdfs:subClassOf pid4cat_model:RelationType .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategories#DATAOBJECT> a owl:Class,
-        pid4cat_model:ResourceCategories ;
+<https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategory#DATAOBJECT> a owl:Class,
+        pid4cat_model:ResourceCategory ;
     rdfs:label "DATAOBJECT" ;
-    rdfs:subClassOf pid4cat_model:ResourceCategories .
+    rdfs:subClassOf pid4cat_model:ResourceCategory .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategories#DEVICE> a owl:Class,
-        pid4cat_model:ResourceCategories ;
+<https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategory#DEVICE> a owl:Class,
+        pid4cat_model:ResourceCategory ;
     rdfs:label "DEVICE" ;
-    rdfs:subClassOf pid4cat_model:ResourceCategories .
+    rdfs:subClassOf pid4cat_model:ResourceCategory .
 
-<https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategories#MATERIAL> a owl:Class,
-        pid4cat_model:ResourceCategories ;
+<https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategory#MATERIAL> a owl:Class,
+        pid4cat_model:ResourceCategory ;
     rdfs:label "MATERIAL" ;
-    rdfs:subClassOf pid4cat_model:ResourceCategories .
+    rdfs:subClassOf pid4cat_model:ResourceCategory .
 
 pid4cat_model:ResourceInfo a owl:Class,
         linkml:ClassDefinition ;
     rdfs:label "ResourceInfo" ;
     rdfs:subClassOf [ a owl:Restriction ;
-            owl:minCardinality 0 ;
-            owl:onProperty pid4cat_model:schema_url ],
+            owl:maxCardinality 1 ;
+            owl:onProperty pid4cat_model:schema_type ],
+        [ a owl:Restriction ;
+            owl:maxCardinality 1 ;
+            owl:onProperty pid4cat_model:description ],
         [ a owl:Restriction ;
             owl:allValuesFrom linkml:String ;
             owl:onProperty pid4cat_model:rdf_type ],
         [ a owl:Restriction ;
-            owl:allValuesFrom linkml:String ;
+            owl:maxCardinality 1 ;
             owl:onProperty pid4cat_model:label ],
         [ a owl:Restriction ;
             owl:allValuesFrom linkml:String ;
-            owl:onProperty pid4cat_model:schema_url ],
-        [ a owl:Restriction ;
-            owl:minCardinality 0 ;
-            owl:onProperty pid4cat_model:rdf_url ],
+            owl:onProperty pid4cat_model:schema_type ],
         [ a owl:Restriction ;
-            owl:allValuesFrom pid4cat_model:ResourceCategories ;
+            owl:maxCardinality 1 ;
             owl:onProperty pid4cat_model:resource_category ],
         [ a owl:Restriction ;
             owl:maxCardinality 1 ;
-            owl:onProperty pid4cat_model:rdf_type ],
+            owl:onProperty pid4cat_model:rdf_url ],
         [ a owl:Restriction ;
-            owl:maxCardinality 1 ;
+            owl:minCardinality 0 ;
             owl:onProperty pid4cat_model:rdf_url ],
         [ a owl:Restriction ;
             owl:minCardinality 0 ;
-            owl:onProperty pid4cat_model:label ],
+            owl:onProperty pid4cat_model:schema_type ],
         [ a owl:Restriction ;
             owl:maxCardinality 1 ;
+            owl:onProperty pid4cat_model:schema_url ],
+        [ a owl:Restriction ;
+            owl:allValuesFrom pid4cat_model:ResourceCategory ;
             owl:onProperty pid4cat_model:resource_category ],
         [ a owl:Restriction ;
-            owl:maxCardinality 1 ;
-            owl:onProperty pid4cat_model:schema_url ],
+            owl:minCardinality 0 ;
+            owl:onProperty pid4cat_model:resource_category ],
         [ a owl:Restriction ;
             owl:allValuesFrom linkml:String ;
             owl:onProperty pid4cat_model:description ],
         [ a owl:Restriction ;
-            owl:maxCardinality 1 ;
+            owl:minCardinality 0 ;
+            owl:onProperty pid4cat_model:schema_url ],
+        [ a owl:Restriction ;
+            owl:minCardinality 0 ;
             owl:onProperty pid4cat_model:label ],
         [ a owl:Restriction ;
             owl:maxCardinality 1 ;
-            owl:onProperty pid4cat_model:description ],
-        [ a owl:Restriction ;
-            owl:minCardinality 0 ;
-            owl:onProperty pid4cat_model:resource_category ],
+            owl:onProperty pid4cat_model:rdf_type ],
         [ a owl:Restriction ;
             owl:allValuesFrom linkml:String ;
-            owl:onProperty pid4cat_model:schema_type ],
+            owl:onProperty pid4cat_model:schema_url ],
         [ a owl:Restriction ;
             owl:minCardinality 0 ;
             owl:onProperty pid4cat_model:description ],
-        [ a owl:Restriction ;
-            owl:maxCardinality 1 ;
-            owl:onProperty pid4cat_model:schema_type ],
         [ a owl:Restriction ;
             owl:allValuesFrom linkml:String ;
             owl:onProperty pid4cat_model:rdf_url ],
         [ a owl:Restriction ;
-            owl:minCardinality 0 ;
-            owl:onProperty pid4cat_model:schema_type ],
+            owl:allValuesFrom linkml:String ;
+            owl:onProperty pid4cat_model:label ],
         [ a owl:Restriction ;
             owl:minCardinality 0 ;
             owl:onProperty pid4cat_model:rdf_type ] ;
@@ -477,6 +521,12 @@ pid4cat_model:change_log a owl:ObjectProperty,
     skos:definition "Change log of PID4Cat record" ;
     skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
 
+pid4cat_model:contains_pids a owl:ObjectProperty,
+        linkml:SlotDefinition ;
+    rdfs:label "contains_pids" ;
+    skos:definition "The PID4CatRecords contained in the container." ;
+    skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
+
 pid4cat_model:related_identifiers a owl:ObjectProperty,
         linkml:SlotDefinition ;
     rdfs:label "related_identifiers" ;
@@ -487,44 +537,34 @@ pid4cat_model:related_identifiers a owl:ObjectProperty,
 pid4cat_model:relation_type a owl:ObjectProperty,
         linkml:SlotDefinition ;
     rdfs:label "relation_type" ;
-    rdfs:range pid4cat_model:RelationTypes ;
+    rdfs:range pid4cat_model:RelationType ;
     skos:definition "Relation type between the resources" ;
     skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
 
-pid4cat_model:resource_info a owl:ObjectProperty,
-        linkml:SlotDefinition ;
-    rdfs:label "resource_info" ;
-    rdfs:range pid4cat_model:ResourceInfo ;
-    skos:definition "Information about the resource." ;
-    skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
-
 pid4cat_model:Agent a owl:Class,
         linkml:ClassDefinition ;
     rdfs:label "Agent" ;
     rdfs:subClassOf [ a owl:Restriction ;
-            owl:maxCardinality 1 ;
-            owl:onProperty pid4cat_model:name ],
-        [ a owl:Restriction ;
             owl:maxCardinality 1 ;
             owl:onProperty pid4cat_model:affiliation_ror ],
         [ a owl:Restriction ;
-            owl:maxCardinality 1 ;
+            owl:minCardinality 0 ;
             owl:onProperty pid4cat_model:contact_information ],
+        [ a owl:Restriction ;
+            owl:maxCardinality 1 ;
+            owl:onProperty pid4cat_model:person_orcid ],
         [ a owl:Restriction ;
             owl:allValuesFrom linkml:String ;
             owl:onProperty pid4cat_model:affiliation_ror ],
-        [ a owl:Restriction ;
-            owl:allValuesFrom pid4cat_model:PID4CatAgentRoles ;
-            owl:onProperty pid4cat_model:role ],
         [ a owl:Restriction ;
             owl:allValuesFrom linkml:String ;
-            owl:onProperty pid4cat_model:person_orcid ],
+            owl:onProperty pid4cat_model:contact_information ],
         [ a owl:Restriction ;
-            owl:minCardinality 0 ;
+            owl:allValuesFrom pid4cat_model:PID4CatAgentRole ;
             owl:onProperty pid4cat_model:role ],
         [ a owl:Restriction ;
-            owl:allValuesFrom linkml:String ;
-            owl:onProperty pid4cat_model:name ],
+            owl:maxCardinality 1 ;
+            owl:onProperty pid4cat_model:role ],
         [ a owl:Restriction ;
             owl:minCardinality 0 ;
             owl:onProperty pid4cat_model:affiliation_ror ],
@@ -533,20 +573,23 @@ pid4cat_model:Agent a owl:Class,
             owl:onProperty pid4cat_model:name ],
         [ a owl:Restriction ;
             owl:maxCardinality 1 ;
-            owl:onProperty pid4cat_model:person_orcid ],
-        [ a owl:Restriction ;
-            owl:allValuesFrom linkml:String ;
             owl:onProperty pid4cat_model:contact_information ],
         [ a owl:Restriction ;
             owl:maxCardinality 1 ;
-            owl:onProperty pid4cat_model:role ],
+            owl:onProperty pid4cat_model:name ],
         [ a owl:Restriction ;
             owl:minCardinality 0 ;
             owl:onProperty pid4cat_model:person_orcid ],
+        [ a owl:Restriction ;
+            owl:allValuesFrom linkml:String ;
+            owl:onProperty pid4cat_model:name ],
         [ a owl:Restriction ;
             owl:minCardinality 0 ;
-            owl:onProperty pid4cat_model:contact_information ] ;
-    skos:definition "Person who plays a role relative to sample collection or curation." ;
+            owl:onProperty pid4cat_model:role ],
+        [ a owl:Restriction ;
+            owl:allValuesFrom linkml:String ;
+            owl:onProperty pid4cat_model:person_orcid ] ;
+    skos:definition "Person who plays a role relative to PID creation or curation." ;
     skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
 
 pid4cat_model:affiliation_ror a owl:ObjectProperty,
@@ -558,7 +601,7 @@ pid4cat_model:affiliation_ror a owl:ObjectProperty,
 pid4cat_model:changed_field a owl:ObjectProperty,
         linkml:SlotDefinition ;
     rdfs:label "changed_field" ;
-    rdfs:range pid4cat_model:ChangeLogFields ;
+    rdfs:range pid4cat_model:ChangeLogField ;
     skos:definition "The field that was changed" ;
     skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
 
@@ -612,6 +655,12 @@ pid4cat_model:person_orcid a owl:ObjectProperty,
     skos:definition "The ORCID of the person" ;
     skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
 
+pid4cat_model:pid_schema_version a owl:ObjectProperty,
+        linkml:SlotDefinition ;
+    rdfs:label "pid_schema_version" ;
+    skos:definition "The version of the PID4Cat schema used for the PID4CatRecord." ;
+    skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
+
 pid4cat_model:rdf_type a owl:ObjectProperty,
         linkml:SlotDefinition ;
     rdfs:label "rdf_type" ;
@@ -621,7 +670,13 @@ pid4cat_model:rdf_type a owl:ObjectProperty,
 pid4cat_model:rdf_url a owl:ObjectProperty,
         linkml:SlotDefinition ;
     rdfs:label "rdf_url" ;
-    skos:definition "The URI of the rdf represenation of the resource. " ;
+    skos:definition "The URI of the rdf represenation of the resource." ;
+    skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
+
+pid4cat_model:record_version a owl:ObjectProperty,
+        linkml:SlotDefinition ;
+    rdfs:label "record_version" ;
+    skos:definition "Date-based version string of the PID4CatRecord (e.g. 20240219v0, 20240219v1, ...). The version should be incremented with every change of the PID4CatRecord." ;
     skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
 
 pid4cat_model:related_identifier a owl:ObjectProperty,
@@ -633,14 +688,21 @@ pid4cat_model:related_identifier a owl:ObjectProperty,
 pid4cat_model:resource_category a owl:ObjectProperty,
         linkml:SlotDefinition ;
     rdfs:label "resource_category" ;
-    rdfs:range pid4cat_model:ResourceCategories ;
+    rdfs:range pid4cat_model:ResourceCategory ;
     skos:definition "The category of the resource" ;
     skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
 
+pid4cat_model:resource_info a owl:ObjectProperty,
+        linkml:SlotDefinition ;
+    rdfs:label "resource_info" ;
+    rdfs:range pid4cat_model:ResourceInfo ;
+    skos:definition "Information about the resource." ;
+    skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
+
 pid4cat_model:role a owl:ObjectProperty,
         linkml:SlotDefinition ;
     rdfs:label "role" ;
-    rdfs:range pid4cat_model:PID4CatAgentRoles ;
+    rdfs:range pid4cat_model:PID4CatAgentRole ;
     skos:definition "The role of the agent relative to the resource" ;
     skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
 
@@ -653,7 +715,7 @@ pid4cat_model:schema_type a owl:ObjectProperty,
 pid4cat_model:schema_url a owl:ObjectProperty,
         linkml:SlotDefinition ;
     rdfs:label "schema_url" ;
-    skos:definition "The URI of the schema used to describe the resource.  Same property as in DataCite:schemeURI." ;
+    skos:definition "The URI of the schema used to describe the resource. Same property as in DataCite:schemeURI." ;
     skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
 
 pid4cat_model:status a owl:ObjectProperty,
@@ -663,18 +725,11 @@ pid4cat_model:status a owl:ObjectProperty,
     skos:definition "The status of the PID4CatRecord." ;
     skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
 
-pid4cat_model:PID4CatAgentRoles a owl:Class,
+pid4cat_model:PID4CatAgentRole a owl:Class,
         linkml:EnumDefinition ;
-    owl:unionOf ( <https://w3id.org/nfdi4cat/pid4cat-model/PID4CatAgentRoles#TRUSTEE> <https://w3id.org/nfdi4cat/pid4cat-model/PID4CatAgentRoles#OWNER> ) ;
-    linkml:permissible_values <https://w3id.org/nfdi4cat/pid4cat-model/PID4CatAgentRoles#OWNER>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/PID4CatAgentRoles#TRUSTEE> .
-
-pid4cat_model:agent a owl:ObjectProperty,
-        linkml:SlotDefinition ;
-    rdfs:label "agent" ;
-    rdfs:range pid4cat_model:Agent ;
-    skos:definition "The person who registered the resource" ;
-    skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
+    owl:unionOf ( <https://w3id.org/nfdi4cat/pid4cat-model/PID4CatAgentRole#TRUSTEE> <https://w3id.org/nfdi4cat/pid4cat-model/PID4CatAgentRole#OWNER> ) ;
+    linkml:permissible_values <https://w3id.org/nfdi4cat/pid4cat-model/PID4CatAgentRole#OWNER>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/PID4CatAgentRole#TRUSTEE> .
 
 pid4cat_model:datetime_log a owl:ObjectProperty,
         linkml:SlotDefinition ;
@@ -688,6 +743,13 @@ pid4cat_model:description a owl:ObjectProperty,
     skos:definition "A human-readable description for a thing" ;
     skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
 
+pid4cat_model:has_agent a owl:ObjectProperty,
+        linkml:SlotDefinition ;
+    rdfs:label "has_agent" ;
+    rdfs:range pid4cat_model:Agent ;
+    skos:definition "The person who registered the resource" ;
+    skos:inScheme <https://w3id.org/nfdi4cat/pid4cat-model> .
+
 pid4cat_model:PID4CatStatus a owl:Class,
         linkml:EnumDefinition ;
     owl:unionOf ( <https://w3id.org/nfdi4cat/pid4cat-model/PID4CatStatus#SUBMITTED> <https://w3id.org/nfdi4cat/pid4cat-model/PID4CatStatus#REGISTERED> <https://w3id.org/nfdi4cat/pid4cat-model/PID4CatStatus#OBSOLETED> <https://w3id.org/nfdi4cat/pid4cat-model/PID4CatStatus#DEPRECATED> ) ;
@@ -696,35 +758,35 @@ pid4cat_model:PID4CatStatus a owl:Class,
         <https://w3id.org/nfdi4cat/pid4cat-model/PID4CatStatus#REGISTERED>,
         <https://w3id.org/nfdi4cat/pid4cat-model/PID4CatStatus#SUBMITTED> .
 
-pid4cat_model:ChangeLogFields a owl:Class,
+pid4cat_model:ChangeLogField a owl:Class,
         linkml:EnumDefinition ;
-    owl:unionOf ( <https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogFields#STATUS> <https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogFields#RESOURCE_INFO> <https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogFields#RELATED_IDS> <https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogFields#CONTACT> <https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogFields#RIGHTS> ) ;
-    linkml:permissible_values <https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogFields#CONTACT>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogFields#RELATED_IDS>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogFields#RESOURCE_INFO>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogFields#RIGHTS>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogFields#STATUS> .
-
-pid4cat_model:ResourceCategories a owl:Class,
+    owl:unionOf ( <https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogField#STATUS> <https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogField#RESOURCE_INFO> <https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogField#RELATED_IDS> <https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogField#CONTACT> <https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogField#RIGHTS> ) ;
+    linkml:permissible_values <https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogField#CONTACT>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogField#RELATED_IDS>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogField#RESOURCE_INFO>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogField#RIGHTS>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/ChangeLogField#STATUS> .
+
+pid4cat_model:ResourceCategory a owl:Class,
         linkml:EnumDefinition ;
-    owl:unionOf ( dcmitype:Collection <https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategories#CATALYST> <https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategories#MATERIAL> <https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategories#DEVICE> <https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategories#DATAOBJECT> ) ;
+    owl:unionOf ( dcmitype:Collection sosa:Sample <https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategory#MATERIAL> <https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategory#DEVICE> <https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategory#DATAOBJECT> ) ;
     linkml:permissible_values dcmitype:Collection,
-        <https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategories#CATALYST>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategories#DATAOBJECT>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategories#DEVICE>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategories#MATERIAL> .
+        sosa:Sample,
+        <https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategory#DATAOBJECT>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategory#DEVICE>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/ResourceCategory#MATERIAL> .
 
 <https://w3id.org/nfdi4cat/pid4cat-model> a owl:Ontology ;
     rdfs:label "pid4cat-model" ;
     dct:license "MIT" ;
     dct:title "pid4cat-model" ;
     rdfs:seeAlso <https://dalito.github.io/pid4cat-model> ;
-    skos:definition """LinkML model for PIDs for resources in catalysis(PID4Cat). PID4Cat is handle system based persistent identifier (PID) for digital or physical resources used in the catalysis research process. The handle record is used to store metadata about the PID besides the obligatory redirect URL.
-The model define here 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, e.g. sample or device.""" .
+    skos:definition """A LinkML model for PIDs for resources in catalysis (PID4Cat). PID4Cat is a handle system based persistent identifier (PID) for digital or physical resources used in the catalysis research process. The handle record is used to store metadata about the PID besides the obligatory landing page URL.
+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.""" .
 
-pid4cat_model:RelationTypes a owl:Class,
+pid4cat_model:RelationType a owl:Class,
         linkml:EnumDefinition ;
-    owl:unionOf ( <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_CITED_BY> <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#CITES> <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_SUPPLEMENT_TO> <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_SUPPLEMENTED_BY> <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_CONTINUED_BY> <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#CONTINUES> <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#HAS_METADATA> <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_METADATA_FOR> dct:hasVersion dct:isVersionOf <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_NEW_VERSION_OF> <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_PREVIOUS_VERSION_OF> dct:isPartOf dct:hasPart <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_DESCRIBED_BY> <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#DESCRIBES> <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_PUBLISHED_IN> dct:isReferencedBy <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#REFERENCES> <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_DOCUMENTED_BY> <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#DOCUMENTS> <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_COMPILED_BY> <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#COMPILES> <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_VARIANT_FORM_OF> <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_ORIGINAL_FORM_OF> <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_IDENTICAL_TO> <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_DERIVED_FROM> <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_SOURCE_OF> dct:isRequiredBy dct:requires <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_OBSOLETED_BY> <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#OBSOLETES> ) ;
+    owl:unionOf ( <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_CITED_BY> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#CITES> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_SUPPLEMENT_TO> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_SUPPLEMENTED_BY> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_CONTINUED_BY> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#CONTINUES> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#HAS_METADATA> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_METADATA_FOR> dct:hasVersion dct:isVersionOf <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_NEW_VERSION_OF> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_PREVIOUS_VERSION_OF> dct:isPartOf dct:hasPart <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_DESCRIBED_BY> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#DESCRIBES> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_PUBLISHED_IN> dct:isReferencedBy <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#REFERENCES> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_DOCUMENTED_BY> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#DOCUMENTS> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_COMPILED_BY> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#COMPILES> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_VARIANT_FORM_OF> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_ORIGINAL_FORM_OF> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_IDENTICAL_TO> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_DERIVED_FROM> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_SOURCE_OF> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_COLLECTED_BY> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#COLLECTS> dct:isRequiredBy dct:requires <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_OBSOLETED_BY> <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#OBSOLETES> ) ;
     linkml:permissible_values dct:hasPart,
         dct:hasVersion,
         dct:isPartOf,
@@ -732,29 +794,31 @@ pid4cat_model:RelationTypes a owl:Class,
         dct:isRequiredBy,
         dct:isVersionOf,
         dct:requires,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#CITES>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#COMPILES>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#CONTINUES>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#DESCRIBES>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#DOCUMENTS>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#HAS_METADATA>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_CITED_BY>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_COMPILED_BY>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_CONTINUED_BY>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_DERIVED_FROM>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_DESCRIBED_BY>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_DOCUMENTED_BY>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_IDENTICAL_TO>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_METADATA_FOR>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_NEW_VERSION_OF>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_OBSOLETED_BY>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_ORIGINAL_FORM_OF>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_PREVIOUS_VERSION_OF>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_PUBLISHED_IN>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_SOURCE_OF>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_SUPPLEMENTED_BY>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_SUPPLEMENT_TO>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#IS_VARIANT_FORM_OF>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#OBSOLETES>,
-        <https://w3id.org/nfdi4cat/pid4cat-model/RelationTypes#REFERENCES> .
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#CITES>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#COLLECTS>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#COMPILES>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#CONTINUES>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#DESCRIBES>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#DOCUMENTS>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#HAS_METADATA>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_CITED_BY>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_COLLECTED_BY>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_COMPILED_BY>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_CONTINUED_BY>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_DERIVED_FROM>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_DESCRIBED_BY>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_DOCUMENTED_BY>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_IDENTICAL_TO>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_METADATA_FOR>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_NEW_VERSION_OF>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_OBSOLETED_BY>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_ORIGINAL_FORM_OF>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_PREVIOUS_VERSION_OF>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_PUBLISHED_IN>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_SOURCE_OF>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_SUPPLEMENTED_BY>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_SUPPLEMENT_TO>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#IS_VARIANT_FORM_OF>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#OBSOLETES>,
+        <https://w3id.org/nfdi4cat/pid4cat-model/RelationType#REFERENCES> .
 
diff --git a/project/protobuf/pid4cat_model.proto b/project/protobuf/pid4cat_model.proto
index 5b122db..2a2102e 100644
--- a/project/protobuf/pid4cat_model.proto
+++ b/project/protobuf/pid4cat_model.proto
@@ -1,18 +1,23 @@
-// Person who plays a role relative to sample collection or curation.
+// Person who plays a role relative to PID creation or curation.
 message Agent
  {
   string name = 0
   string contactInformation = 0
   string personOrcid = 0
   string affiliationRor = 0
-  pID4CatAgentRoles role = 0
+  pID4CatAgentRole role = 0
+ }
+// A container for all PID4Cat instances.
+message Container
+ {
+ repeated  pID4CatRecord containsPids = 0
  }
 // A log record for changes made on a PID4CatRecord starting from registration.
 message LogRecord
  {
   string datetimeLog = 0
-  agent agent = 0
-  changeLogFields changedField = 0
+  agent hasAgent = 0
+  changeLogField changedField = 0
   string description = 0
  }
 // Represents a PID4CatRecord
@@ -21,26 +26,28 @@ message PID4CatRecord
   uriorcurie id = 0
   string landingPageUrl = 10
   pID4CatStatus status = 0
- repeated  resourceInfo resourceInfo = 0
- repeated  uriorcurie relatedIdentifiers = 0
+  string recordVersion = 0
+  string pidSchemaVersion = 0
   string dcRights = 0
   string curationContact = 0
+  resourceInfo resourceInfo = 0
+ repeated  uriorcurie relatedIdentifiers = 0
  repeated  logRecord changeLog = 0
  }
 // A relation between PID4CatRecords or between a PID4CatRecord and other resources with a PID.
 message PID4CatRelation
  {
- repeated  relationTypes relationType = 0
+ repeated  relationType relationType = 0
   string relatedIdentifier = 0
   string datetimeLog = 0
-  agent agent = 0
+  agent hasAgent = 0
  }
 // Data object to hold information about the resource and its representation.
 message ResourceInfo
  {
   string label = 0
   string description = 0
-  resourceCategories resourceCategory = 0
+  resourceCategory resourceCategory = 0
   string rdfUrl = 0
   string rdfType = 0
   string schemaUrl = 0
diff --git a/project/shacl/pid4cat_model.shacl.ttl b/project/shacl/pid4cat_model.shacl.ttl
index fa7bf3b..72f0578 100644
--- a/project/shacl/pid4cat_model.shacl.ttl
+++ b/project/shacl/pid4cat_model.shacl.ttl
@@ -4,84 +4,56 @@
 @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
 @prefix schema1: <http://schema.org/> .
 @prefix sh: <http://www.w3.org/ns/shacl#> .
+@prefix sosa: <http://www.w3.org/ns/sosa/> .
 @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
 
-pid4cat_model:PID4CatRecord a sh:NodeShape ;
+pid4cat_model:Container a sh:NodeShape ;
     sh:closed true ;
-    sh:description "Represents a PID4CatRecord" ;
+    sh:description "A container for all PID4Cat instances." ;
     sh:ignoredProperties ( rdf:type ) ;
-    sh:property [ sh:datatype xsd:string ;
-            sh:description "The email address of a person or institution responsible for curation of the resource." ;
-            sh:maxCount 1 ;
-            sh:order 6 ;
-            sh:path schema1:email ;
-            sh:pattern "^\\S+@[\\S+\\.]+\\S+" ],
-        [ sh:class pid4cat_model:ResourceInfo ;
-            sh:description "Information about the resource." ;
-            sh:nodeKind sh:BlankNode ;
-            sh:order 3 ;
-            sh:path pid4cat_model:resource_info ],
-        [ sh:datatype xsd:string ;
-            sh:description "The license for the metadata contained in the PID4Cat record." ;
-            sh:maxCount 1 ;
-            sh:order 5 ;
-            sh:path schema1:license ],
-        [ sh:class pid4cat_model:LogRecord ;
-            sh:description "Change log of PID4Cat record" ;
-            sh:minCount 1 ;
-            sh:nodeKind sh:BlankNode ;
-            sh:order 7 ;
-            sh:path schema1:identifier ],
-        [ sh:description "Alternate identifiers for the resource" ;
-            sh:order 4 ;
-            sh:path schema1:identifier ],
-        [ sh:datatype xsd:string ;
-            sh:description "The URL of the landing page for the resource" ;
-            sh:maxCount 1 ;
-            sh:order 1 ;
-            sh:path schema1:url ],
-        [ sh:description "A unique identifier for a thing" ;
-            sh:maxCount 1 ;
+    sh:property [ sh:class pid4cat_model:PID4CatRecord ;
+            sh:description "The PID4CatRecords contained in the container." ;
+            sh:nodeKind sh:IRI ;
             sh:order 0 ;
-            sh:path schema1:identifier ],
-        [ sh:description "The status of the PID4CatRecord." ;
-            sh:in ( "SUBMITTED" "REGISTERED" "OBSOLETED" "DEPRECATED" ) ;
-            sh:maxCount 1 ;
-            sh:order 2 ;
-            sh:path pid4cat_model:status ] ;
-    sh:targetClass pid4cat_model:PID4CatRecord .
+            sh:path pid4cat_model:contains_pids ] ;
+    sh:targetClass pid4cat_model:Container .
 
 pid4cat_model:PID4CatRelation a sh:NodeShape ;
     sh:closed true ;
     sh:description "A relation between PID4CatRecords or between a PID4CatRecord and other resources with a PID." ;
     sh:ignoredProperties ( rdf:type ) ;
-    sh:property [ sh:datatype xsd:string ;
-            sh:description "The date and time of a log record" ;
-            sh:maxCount 1 ;
-            sh:order 2 ;
-            sh:path schema1:DateTime ],
-        [ sh:class pid4cat_model:Agent ;
+    sh:property [ sh:class pid4cat_model:Agent ;
             sh:description "The person who registered the resource" ;
             sh:maxCount 1 ;
             sh:nodeKind sh:BlankNode ;
             sh:order 3 ;
             sh:path schema1:Agent ],
+        [ sh:datatype xsd:string ;
+            sh:description "Related identifiers for the resource" ;
+            sh:maxCount 1 ;
+            sh:order 1 ;
+            sh:path schema1:identifier ],
         [ sh:description "Relation type between the resources" ;
-            sh:in ( "IS_CITED_BY" "CITES" "IS_SUPPLEMENT_TO" "IS_SUPPLEMENTED_BY" "IS_CONTINUED_BY" "CONTINUES" "HAS_METADATA" "IS_METADATA_FOR" dct:hasVersion dct:isVersionOf "IS_NEW_VERSION_OF" "IS_PREVIOUS_VERSION_OF" dct:isPartOf dct:hasPart "IS_DESCRIBED_BY" "DESCRIBES" "IS_PUBLISHED_IN" dct:isReferencedBy "REFERENCES" "IS_DOCUMENTED_BY" "DOCUMENTS" "IS_COMPILED_BY" "COMPILES" "IS_VARIANT_FORM_OF" "IS_ORIGINAL_FORM_OF" "IS_IDENTICAL_TO" "IS_DERIVED_FROM" "IS_SOURCE_OF" dct:isRequiredBy dct:requires "IS_OBSOLETED_BY" "OBSOLETES" ) ;
+            sh:in ( "IS_CITED_BY" "CITES" "IS_SUPPLEMENT_TO" "IS_SUPPLEMENTED_BY" "IS_CONTINUED_BY" "CONTINUES" "HAS_METADATA" "IS_METADATA_FOR" dct:hasVersion dct:isVersionOf "IS_NEW_VERSION_OF" "IS_PREVIOUS_VERSION_OF" dct:isPartOf dct:hasPart "IS_DESCRIBED_BY" "DESCRIBES" "IS_PUBLISHED_IN" dct:isReferencedBy "REFERENCES" "IS_DOCUMENTED_BY" "DOCUMENTS" "IS_COMPILED_BY" "COMPILES" "IS_VARIANT_FORM_OF" "IS_ORIGINAL_FORM_OF" "IS_IDENTICAL_TO" "IS_DERIVED_FROM" "IS_SOURCE_OF" "IS_COLLECTED_BY" "COLLECTS" dct:isRequiredBy dct:requires "IS_OBSOLETED_BY" "OBSOLETES" ) ;
             sh:order 0 ;
             sh:path schema1:identifier ],
         [ sh:datatype xsd:string ;
-            sh:description "Related identifiers for the resource" ;
+            sh:description "The date and time of a log record" ;
             sh:maxCount 1 ;
-            sh:order 1 ;
-            sh:path schema1:identifier ] ;
+            sh:order 2 ;
+            sh:path schema1:DateTime ] ;
     sh:targetClass pid4cat_model:PID4CatRelation .
 
 pid4cat_model:LogRecord a sh:NodeShape ;
     sh:closed true ;
     sh:description "A log record for changes made on a PID4CatRecord starting from registration." ;
     sh:ignoredProperties ( rdf:type ) ;
-    sh:property [ sh:datatype xsd:string ;
+    sh:property [ sh:description "The field that was changed" ;
+            sh:in ( "STATUS" "RESOURCE_INFO" "RELATED_IDS" "CONTACT" "RIGHTS" ) ;
+            sh:maxCount 1 ;
+            sh:order 2 ;
+            sh:path schema1:identifier ],
+        [ sh:datatype xsd:string ;
             sh:description "The date and time of a log record" ;
             sh:maxCount 1 ;
             sh:order 0 ;
@@ -96,42 +68,88 @@ pid4cat_model:LogRecord a sh:NodeShape ;
             sh:description "A human-readable description for a thing" ;
             sh:maxCount 1 ;
             sh:order 3 ;
-            sh:path schema1:description ],
-        [ sh:description "The field that was changed" ;
-            sh:in ( "STATUS" "RESOURCE_INFO" "RELATED_IDS" "CONTACT" "RIGHTS" ) ;
-            sh:maxCount 1 ;
-            sh:order 2 ;
-            sh:path schema1:identifier ] ;
+            sh:path schema1:description ] ;
     sh:targetClass pid4cat_model:LogRecord .
 
-pid4cat_model:ResourceInfo a sh:NodeShape ;
+pid4cat_model:PID4CatRecord a sh:NodeShape ;
     sh:closed true ;
-    sh:description "Data object to hold information about the resource and its representation." ;
+    sh:description "Represents a PID4CatRecord" ;
     sh:ignoredProperties ( rdf:type ) ;
     sh:property [ sh:datatype xsd:string ;
-            sh:description "The format of the rdf representation of the resource (xml, turlte, json-ld, ...)." ;
+            sh:description "The version of the PID4Cat schema used for the PID4CatRecord." ;
             sh:maxCount 1 ;
             sh:order 4 ;
-            sh:path schema1:additionalType ],
-        [ sh:description "The category of the resource" ;
-            sh:in ( dcmitype:Collection "CATALYST" "MATERIAL" "DEVICE" "DATAOBJECT" ) ;
+            sh:path schema1:identifier ],
+        [ sh:datatype xsd:string ;
+            sh:description "The URL of the landing page for the resource" ;
             sh:maxCount 1 ;
-            sh:order 2 ;
-            sh:path schema1:additionalType ],
+            sh:order 1 ;
+            sh:path schema1:url ],
+        [ sh:class pid4cat_model:ResourceInfo ;
+            sh:description "Information about the resource." ;
+            sh:maxCount 1 ;
+            sh:nodeKind sh:BlankNode ;
+            sh:order 7 ;
+            sh:path pid4cat_model:resource_info ],
         [ sh:datatype xsd:string ;
-            sh:description "The URI of the schema used to describe the resource.  Same property as in DataCite:schemeURI." ;
+            sh:description "The license for the metadata contained in the PID4Cat record." ;
             sh:maxCount 1 ;
             sh:order 5 ;
-            sh:path schema1:additionalType ],
+            sh:path schema1:license ],
+        [ sh:description "Alternate identifiers for the resource" ;
+            sh:order 8 ;
+            sh:path schema1:identifier ],
+        [ sh:description "A unique identifier for a thing" ;
+            sh:maxCount 1 ;
+            sh:order 0 ;
+            sh:path schema1:identifier ],
+        [ sh:description "The status of the PID4CatRecord." ;
+            sh:in ( "SUBMITTED" "REGISTERED" "OBSOLETED" "DEPRECATED" ) ;
+            sh:maxCount 1 ;
+            sh:order 2 ;
+            sh:path pid4cat_model:status ],
         [ sh:datatype xsd:string ;
+            sh:description "The email address of a person or institution responsible for curation of the resource." ;
+            sh:maxCount 1 ;
+            sh:order 6 ;
+            sh:path schema1:email ;
+            sh:pattern "^\\S+@[\\S+\\.]+\\S+" ],
+        [ sh:class pid4cat_model:LogRecord ;
+            sh:description "Change log of PID4Cat record" ;
+            sh:minCount 1 ;
+            sh:nodeKind sh:BlankNode ;
+            sh:order 9 ;
+            sh:path schema1:identifier ],
+        [ sh:datatype xsd:string ;
+            sh:description "Date-based version string of the PID4CatRecord (e.g. 20240219v0, 20240219v1, ...). The version should be incremented with every change of the PID4CatRecord." ;
+            sh:maxCount 1 ;
+            sh:order 3 ;
+            sh:path schema1:identifier ] ;
+    sh:targetClass pid4cat_model:PID4CatRecord .
+
+pid4cat_model:ResourceInfo a sh:NodeShape ;
+    sh:closed true ;
+    sh:description "Data object to hold information about the resource and its representation." ;
+    sh:ignoredProperties ( rdf:type ) ;
+    sh:property [ sh:datatype xsd:string ;
             sh:description "The type of the scheme used to describe the resource. Examples: XSD, DDT, Turtle Same property as in DataCite:schemeType." ;
             sh:maxCount 1 ;
             sh:order 6 ;
             sh:path schema1:additionalType ],
         [ sh:datatype xsd:string ;
-            sh:description "The URI of the rdf represenation of the resource. " ;
+            sh:description "The format of the rdf representation of the resource (xml, turlte, json-ld, ...)." ;
             sh:maxCount 1 ;
-            sh:order 3 ;
+            sh:order 4 ;
+            sh:path schema1:additionalType ],
+        [ sh:datatype xsd:string ;
+            sh:description "A human-readable name for a thing" ;
+            sh:maxCount 1 ;
+            sh:order 0 ;
+            sh:path schema1:name ],
+        [ sh:description "The category of the resource" ;
+            sh:in ( dcmitype:Collection sosa:Sample "MATERIAL" "DEVICE" "DATAOBJECT" ) ;
+            sh:maxCount 1 ;
+            sh:order 2 ;
             sh:path schema1:additionalType ],
         [ sh:datatype xsd:string ;
             sh:description "A human-readable description for a thing" ;
@@ -139,40 +157,45 @@ pid4cat_model:ResourceInfo a sh:NodeShape ;
             sh:order 1 ;
             sh:path schema1:description ],
         [ sh:datatype xsd:string ;
-            sh:description "A human-readable name for a thing" ;
+            sh:description "The URI of the schema used to describe the resource. Same property as in DataCite:schemeURI." ;
             sh:maxCount 1 ;
-            sh:order 0 ;
-            sh:path schema1:name ] ;
+            sh:order 5 ;
+            sh:path schema1:additionalType ],
+        [ sh:datatype xsd:string ;
+            sh:description "The URI of the rdf represenation of the resource." ;
+            sh:maxCount 1 ;
+            sh:order 3 ;
+            sh:path schema1:additionalType ] ;
     sh:targetClass pid4cat_model:ResourceInfo .
 
 pid4cat_model:Agent a sh:NodeShape ;
     sh:closed true ;
-    sh:description "Person who plays a role relative to sample collection or curation." ;
+    sh:description "Person who plays a role relative to PID creation or curation." ;
     sh:ignoredProperties ( rdf:type ) ;
     sh:property [ sh:datatype xsd:string ;
-            sh:description "The name of the agent" ;
-            sh:maxCount 1 ;
-            sh:order 0 ;
-            sh:path schema1:name ],
-        [ sh:datatype xsd:string ;
-            sh:description "The ROR of the affiliation" ;
+            sh:description "Identification of the agent that registered the PID, with contact information. Should include person name and affiliation, or position name and affiliation, or just organization name. e-mail address is preferred contact information." ;
             sh:maxCount 1 ;
-            sh:order 3 ;
-            sh:path schema1:identifier ],
+            sh:order 1 ;
+            sh:path schema1:email ],
         [ sh:description "The role of the agent relative to the resource" ;
             sh:in ( "TRUSTEE" "OWNER" ) ;
             sh:maxCount 1 ;
             sh:order 4 ;
             sh:path schema1:identifier ],
         [ sh:datatype xsd:string ;
-            sh:description "Identification of the agent that registered the PID, with contact information. Should include person name and affiliation, or position name and affiliation, or just organization name. e-mail address is preferred contact information." ;
+            sh:description "The name of the agent" ;
             sh:maxCount 1 ;
-            sh:order 1 ;
-            sh:path schema1:email ],
+            sh:order 0 ;
+            sh:path schema1:name ],
         [ sh:datatype xsd:string ;
             sh:description "The ORCID of the person" ;
             sh:maxCount 1 ;
             sh:order 2 ;
+            sh:path schema1:identifier ],
+        [ sh:datatype xsd:string ;
+            sh:description "The ROR of the affiliation" ;
+            sh:maxCount 1 ;
+            sh:order 3 ;
             sh:path schema1:identifier ] ;
     sh:targetClass pid4cat_model:Agent .
 
diff --git a/project/shex/pid4cat_model.shex b/project/shex/pid4cat_model.shex
index d1a99e5..3c29f7d 100644
--- a/project/shex/pid4cat_model.shex
+++ b/project/shex/pid4cat_model.shex
@@ -48,16 +48,22 @@ linkml:Sparqlpath xsd:string
           schema1:email @linkml:String ? ;
           schema1:identifier @linkml:String ? ;
           schema1:identifier @linkml:String ? ;
-          schema1:identifier @<PID4CatAgentRoles> ?
+          schema1:identifier @<PID4CatAgentRole> ?
        ) ;
        rdf:type [ <Agent> ] ?
     )
 }
 
+<Container> CLOSED {
+    (  $<Container_tes> <contains_pids> @<PID4CatRecord> * ;
+       rdf:type [ <Container> ] ?
+    )
+}
+
 <LogRecord> CLOSED {
     (  $<LogRecord_tes> (  schema1:DateTime @linkml:String ? ;
           schema1:Agent @<Agent> ? ;
-          schema1:identifier @<ChangeLogFields> ? ;
+          schema1:identifier @<ChangeLogField> ? ;
           schema1:description @linkml:String ?
        ) ;
        rdf:type [ <LogRecord> ] ?
@@ -67,10 +73,12 @@ linkml:Sparqlpath xsd:string
 <PID4CatRecord> CLOSED {
     (  $<PID4CatRecord_tes> (  schema1:url @linkml:String ? ;
           <status> @<PID4CatStatus> ? ;
-          <resource_info> @<ResourceInfo> * ;
-          schema1:identifier @linkml:Uriorcurie * ;
+          schema1:identifier @linkml:String ? ;
+          schema1:identifier @linkml:String ? ;
           schema1:license @linkml:String ? ;
           schema1:email @linkml:String ? ;
+          <resource_info> @<ResourceInfo> ? ;
+          schema1:identifier @linkml:Uriorcurie * ;
           schema1:identifier @<LogRecord> +
        ) ;
        rdf:type [ <PID4CatRecord> ]
@@ -78,7 +86,7 @@ linkml:Sparqlpath xsd:string
 }
 
 <PID4CatRelation> CLOSED {
-    (  $<PID4CatRelation_tes> (  schema1:identifier @<RelationTypes> * ;
+    (  $<PID4CatRelation_tes> (  schema1:identifier @<RelationType> * ;
           schema1:identifier @linkml:String ? ;
           schema1:DateTime @linkml:String ? ;
           schema1:Agent @<Agent> ?
@@ -90,7 +98,7 @@ linkml:Sparqlpath xsd:string
 <ResourceInfo> CLOSED {
     (  $<ResourceInfo_tes> (  schema1:name @linkml:String ? ;
           schema1:description @linkml:String ? ;
-          schema1:additionalType @<ResourceCategories> ? ;
+          schema1:additionalType @<ResourceCategory> ? ;
           schema1:additionalType @linkml:String ? ;
           schema1:additionalType @linkml:String ? ;
           schema1:additionalType @linkml:String ? ;
diff --git a/project/sqlschema/pid4cat_model.sql b/project/sqlschema/pid4cat_model.sql
index a9050e7..abceacf 100644
--- a/project/sqlschema/pid4cat_model.sql
+++ b/project/sqlschema/pid4cat_model.sql
@@ -9,12 +9,20 @@ CREATE TABLE "Agent" (
 	PRIMARY KEY (name, contact_information, person_orcid, affiliation_ror, role)
 );
 
+CREATE TABLE "Container" (
+	contains_pids TEXT, 
+	PRIMARY KEY (contains_pids)
+);
+
 CREATE TABLE "PID4CatRecord" (
 	id TEXT NOT NULL, 
 	landing_page_url TEXT, 
 	status VARCHAR(10), 
+	record_version TEXT, 
+	pid_schema_version TEXT, 
 	dc_rights TEXT, 
 	curation_contact TEXT, 
+	resource_info TEXT, 
 	PRIMARY KEY (id)
 );
 
@@ -22,18 +30,8 @@ CREATE TABLE "PID4CatRelation" (
 	relation_type VARCHAR(22), 
 	related_identifier TEXT, 
 	datetime_log TEXT, 
-	agent TEXT, 
-	PRIMARY KEY (relation_type, related_identifier, datetime_log, agent)
-);
-
-CREATE TABLE "LogRecord" (
-	datetime_log TEXT, 
-	agent TEXT, 
-	changed_field VARCHAR(13), 
-	description TEXT, 
-	"PID4CatRecord_id" TEXT, 
-	PRIMARY KEY (datetime_log, agent, changed_field, description, "PID4CatRecord_id"), 
-	FOREIGN KEY("PID4CatRecord_id") REFERENCES "PID4CatRecord" (id)
+	has_agent TEXT, 
+	PRIMARY KEY (relation_type, related_identifier, datetime_log, has_agent)
 );
 
 CREATE TABLE "ResourceInfo" (
@@ -44,8 +42,16 @@ CREATE TABLE "ResourceInfo" (
 	rdf_type TEXT, 
 	schema_url TEXT, 
 	schema_type TEXT, 
+	PRIMARY KEY (label, description, resource_category, rdf_url, rdf_type, schema_url, schema_type)
+);
+
+CREATE TABLE "LogRecord" (
+	datetime_log TEXT, 
+	has_agent TEXT, 
+	changed_field VARCHAR(13), 
+	description TEXT, 
 	"PID4CatRecord_id" TEXT, 
-	PRIMARY KEY (label, description, resource_category, rdf_url, rdf_type, schema_url, schema_type, "PID4CatRecord_id"), 
+	PRIMARY KEY (datetime_log, has_agent, changed_field, description, "PID4CatRecord_id"), 
 	FOREIGN KEY("PID4CatRecord_id") REFERENCES "PID4CatRecord" (id)
 );
 
diff --git a/pyproject.toml b/pyproject.toml
index 9f6c3d0..63beeab 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -5,7 +5,7 @@ description = "LinkML model for handle-based PIDs for resources in catalysis (PI
 authors = ["David Linke <david.linke@catalysis.de>"]
 license = "MIT"
 readme = "README.md"
-include = ["README.md", "src/pid4cat_model/schema", "project"]
+include = ["README.md", "src/pid4cat_model/schema",  "project"]
 
 [tool.poetry.dependencies]
 python = "^3.9"
@@ -27,4 +27,4 @@ requires = ["poetry-core>=1.0.0", "poetry-dynamic-versioning"]
 build-backend = "poetry_dynamic_versioning.backend"
 
 [tool.poetry.extras]
-docs = ["linkml", "mkdocs-material"]
\ No newline at end of file
+docs = ["linkml", "mkdocs-material"]
diff --git a/src/data/examples/PID4CatRecord-001.yaml b/src/data/examples/PID4CatRecord-001.yaml
index 166e4c5..ef1689a 100644
--- a/src/data/examples/PID4CatRecord-001.yaml
+++ b/src/data/examples/PID4CatRecord-001.yaml
@@ -1,7 +1,26 @@
 # Example data object
 ---
-entries:
-  - id: example:PID4CatRecord001
-    name: foo bar
-    primary_email: foo.bar@example.com
-    age_in_years: 33
+contains_pids:
+- id: lik-123
+  landing_page_url: https://pid4cat.example.org/lik-123
+  status: REGISTERED
+  pid_schema_version: 0.1.0
+  record_version: 20240219v-0
+  resource_info:
+    label: Resource label
+    description: Resource description
+    resource_category: SAMPLE
+    rdf_url: https://example.org/resource
+    rdf_type: TURTLE
+    schema_url: https://example.org/schema
+    schema_type: XSD
+  dc_rights: CC0-1.0
+  curation_contact: datafuzzi@example.org
+  change_log:
+  - datetime_log: '2024-02-19T00:00:00Z'
+    has_agent:
+      name: Data Fuzzi
+      person_orcid: 0000-0000-0000-0000
+      role: TRUSTEE
+    changed_field: STATUS
+    description: 'as requested in issue #123'
diff --git a/src/pid4cat_model/datamodel/pid4cat_model.py b/src/pid4cat_model/datamodel/pid4cat_model.py
index 7ae11b3..7838a05 100644
--- a/src/pid4cat_model/datamodel/pid4cat_model.py
+++ b/src/pid4cat_model/datamodel/pid4cat_model.py
@@ -1,10 +1,10 @@
 # Auto generated from pid4cat_model.yaml by pythongen.py version: 0.0.1
-# Generation date: 2023-12-07T18:08:57
+# Generation date: 2024-02-25T23:40:32
 # Schema: pid4cat-model
 #
 # id: https://w3id.org/nfdi4cat/pid4cat-model
-# description: LinkML model for PIDs for resources in catalysis(PID4Cat). PID4Cat is handle system based persistent identifier (PID) for digital or physical resources used in the catalysis research process. The handle record is used to store metadata about the PID besides the obligatory redirect URL.
-#   The model define here 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, e.g. sample or device.
+# description: A LinkML model for PIDs for resources in catalysis (PID4Cat). PID4Cat is a handle system based persistent identifier (PID) for digital or physical resources used in the catalysis research process. The handle record is used to store metadata about the PID besides the obligatory landing page URL.
+#   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.
 # license: MIT
 
 import dataclasses
@@ -64,10 +64,12 @@ class PID4CatRecord(YAMLRoot):
     change_log: Union[Union[dict, "LogRecord"], List[Union[dict, "LogRecord"]]] = None
     landing_page_url: Optional[str] = None
     status: Optional[Union[str, "PID4CatStatus"]] = None
-    resource_info: Optional[Union[Union[dict, "ResourceInfo"], List[Union[dict, "ResourceInfo"]]]] = empty_list()
-    related_identifiers: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = empty_list()
+    record_version: Optional[str] = None
+    pid_schema_version: Optional[str] = None
     dc_rights: Optional[str] = None
     curation_contact: Optional[str] = None
+    resource_info: Optional[Union[dict, "ResourceInfo"]] = None
+    related_identifiers: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = empty_list()
 
     def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
         if self._is_empty(self.id):
@@ -87,13 +89,11 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
         if self.status is not None and not isinstance(self.status, PID4CatStatus):
             self.status = PID4CatStatus(self.status)
 
-        if not isinstance(self.resource_info, list):
-            self.resource_info = [self.resource_info] if self.resource_info is not None else []
-        self.resource_info = [v if isinstance(v, ResourceInfo) else ResourceInfo(**as_dict(v)) for v in self.resource_info]
+        if self.record_version is not None and not isinstance(self.record_version, str):
+            self.record_version = str(self.record_version)
 
-        if not isinstance(self.related_identifiers, list):
-            self.related_identifiers = [self.related_identifiers] if self.related_identifiers is not None else []
-        self.related_identifiers = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.related_identifiers]
+        if self.pid_schema_version is not None and not isinstance(self.pid_schema_version, str):
+            self.pid_schema_version = str(self.pid_schema_version)
 
         if self.dc_rights is not None and not isinstance(self.dc_rights, str):
             self.dc_rights = str(self.dc_rights)
@@ -101,6 +101,13 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
         if self.curation_contact is not None and not isinstance(self.curation_contact, str):
             self.curation_contact = str(self.curation_contact)
 
+        if self.resource_info is not None and not isinstance(self.resource_info, ResourceInfo):
+            self.resource_info = ResourceInfo(**as_dict(self.resource_info))
+
+        if not isinstance(self.related_identifiers, list):
+            self.related_identifiers = [self.related_identifiers] if self.related_identifiers is not None else []
+        self.related_identifiers = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.related_identifiers]
+
         super().__post_init__(**kwargs)
 
 
@@ -116,15 +123,15 @@ class PID4CatRelation(YAMLRoot):
     class_name: ClassVar[str] = "PID4CatRelation"
     class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.PID4CatRelation
 
-    relation_type: Optional[Union[Union[str, "RelationTypes"], List[Union[str, "RelationTypes"]]]] = empty_list()
+    relation_type: Optional[Union[Union[str, "RelationType"], List[Union[str, "RelationType"]]]] = empty_list()
     related_identifier: Optional[str] = None
     datetime_log: Optional[str] = None
-    agent: Optional[Union[dict, "Agent"]] = None
+    has_agent: Optional[Union[dict, "Agent"]] = None
 
     def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
         if not isinstance(self.relation_type, list):
             self.relation_type = [self.relation_type] if self.relation_type is not None else []
-        self.relation_type = [v if isinstance(v, RelationTypes) else RelationTypes(v) for v in self.relation_type]
+        self.relation_type = [v if isinstance(v, RelationType) else RelationType(v) for v in self.relation_type]
 
         if self.related_identifier is not None and not isinstance(self.related_identifier, str):
             self.related_identifier = str(self.related_identifier)
@@ -132,8 +139,8 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
         if self.datetime_log is not None and not isinstance(self.datetime_log, str):
             self.datetime_log = str(self.datetime_log)
 
-        if self.agent is not None and not isinstance(self.agent, Agent):
-            self.agent = Agent(**as_dict(self.agent))
+        if self.has_agent is not None and not isinstance(self.has_agent, Agent):
+            self.has_agent = Agent(**as_dict(self.has_agent))
 
         super().__post_init__(**kwargs)
 
@@ -152,7 +159,7 @@ class ResourceInfo(YAMLRoot):
 
     label: Optional[str] = None
     description: Optional[str] = None
-    resource_category: Optional[Union[str, "ResourceCategories"]] = None
+    resource_category: Optional[Union[str, "ResourceCategory"]] = None
     rdf_url: Optional[str] = None
     rdf_type: Optional[str] = None
     schema_url: Optional[str] = None
@@ -165,8 +172,8 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
         if self.description is not None and not isinstance(self.description, str):
             self.description = str(self.description)
 
-        if self.resource_category is not None and not isinstance(self.resource_category, ResourceCategories):
-            self.resource_category = ResourceCategories(self.resource_category)
+        if self.resource_category is not None and not isinstance(self.resource_category, ResourceCategory):
+            self.resource_category = ResourceCategory(self.resource_category)
 
         if self.rdf_url is not None and not isinstance(self.rdf_url, str):
             self.rdf_url = str(self.rdf_url)
@@ -196,19 +203,19 @@ class LogRecord(YAMLRoot):
     class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.LogRecord
 
     datetime_log: Optional[str] = None
-    agent: Optional[Union[dict, "Agent"]] = None
-    changed_field: Optional[Union[str, "ChangeLogFields"]] = None
+    has_agent: Optional[Union[dict, "Agent"]] = None
+    changed_field: Optional[Union[str, "ChangeLogField"]] = None
     description: Optional[str] = None
 
     def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
         if self.datetime_log is not None and not isinstance(self.datetime_log, str):
             self.datetime_log = str(self.datetime_log)
 
-        if self.agent is not None and not isinstance(self.agent, Agent):
-            self.agent = Agent(**as_dict(self.agent))
+        if self.has_agent is not None and not isinstance(self.has_agent, Agent):
+            self.has_agent = Agent(**as_dict(self.has_agent))
 
-        if self.changed_field is not None and not isinstance(self.changed_field, ChangeLogFields):
-            self.changed_field = ChangeLogFields(self.changed_field)
+        if self.changed_field is not None and not isinstance(self.changed_field, ChangeLogField):
+            self.changed_field = ChangeLogField(self.changed_field)
 
         if self.description is not None and not isinstance(self.description, str):
             self.description = str(self.description)
@@ -219,7 +226,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
 @dataclass
 class Agent(YAMLRoot):
     """
-    Person who plays a role relative to sample collection or curation.
+    Person who plays a role relative to PID creation or curation.
     """
     _inherited_slots: ClassVar[List[str]] = []
 
@@ -232,7 +239,7 @@ class Agent(YAMLRoot):
     contact_information: Optional[str] = None
     person_orcid: Optional[str] = None
     affiliation_ror: Optional[str] = None
-    role: Optional[Union[str, "PID4CatAgentRoles"]] = None
+    role: Optional[Union[str, "PID4CatAgentRole"]] = None
 
     def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
         if self.name is not None and not isinstance(self.name, str):
@@ -247,14 +254,34 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
         if self.affiliation_ror is not None and not isinstance(self.affiliation_ror, str):
             self.affiliation_ror = str(self.affiliation_ror)
 
-        if self.role is not None and not isinstance(self.role, PID4CatAgentRoles):
-            self.role = PID4CatAgentRoles(self.role)
+        if self.role is not None and not isinstance(self.role, PID4CatAgentRole):
+            self.role = PID4CatAgentRole(self.role)
+
+        super().__post_init__(**kwargs)
+
+
+@dataclass
+class Container(YAMLRoot):
+    """
+    A container for all PID4Cat instances.
+    """
+    _inherited_slots: ClassVar[List[str]] = []
+
+    class_class_uri: ClassVar[URIRef] = PID4CAT_MODEL["Container"]
+    class_class_curie: ClassVar[str] = "pid4cat_model:Container"
+    class_name: ClassVar[str] = "Container"
+    class_model_uri: ClassVar[URIRef] = PID4CAT_MODEL.Container
+
+    contains_pids: Optional[Union[Dict[Union[str, PID4CatRecordId], Union[dict, PID4CatRecord]], List[Union[dict, PID4CatRecord]]]] = empty_dict()
+
+    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
+        self._normalize_inlined_as_list(slot_name="contains_pids", slot_type=PID4CatRecord, key_name="id", keyed=True)
 
         super().__post_init__(**kwargs)
 
 
 # Enumerations
-class ResourceCategories(EnumDefinitionImpl):
+class ResourceCategory(EnumDefinitionImpl):
     """
     The category of the resource
     """
@@ -262,12 +289,13 @@ class ResourceCategories(EnumDefinitionImpl):
         text="COLLECTION",
         description="A collection is described as a group; its parts may also be separately described.",
         meaning=None)
-    CATALYST = PermissibleValue(
-        text="CATALYST",
-        description="A physical entity meant to be applied as catalyst.")
+    SAMPLE = PermissibleValue(
+        text="SAMPLE",
+        description="A representative part of an entity of interest on which observations may be made.",
+        meaning=None)
     MATERIAL = PermissibleValue(
         text="MATERIAL",
-        description="A material used in the catalysis research process (except the catalyst itself).")
+        description="A material used in the research process (except samples).")
     DEVICE = PermissibleValue(
         text="DEVICE",
         description="A device used in the catalysis research process.")
@@ -276,11 +304,11 @@ class ResourceCategories(EnumDefinitionImpl):
         description="A data object might be a data file, a data set, a data collection, or a data service.")
 
     _defn = EnumDefinition(
-        name="ResourceCategories",
+        name="ResourceCategory",
         description="The category of the resource",
     )
 
-class RelationTypes(EnumDefinitionImpl):
+class RelationType(EnumDefinitionImpl):
     """
     The type of the relation between the resources
     """
@@ -373,6 +401,12 @@ class RelationTypes(EnumDefinitionImpl):
     IS_SOURCE_OF = PermissibleValue(
         text="IS_SOURCE_OF",
         description="The resource is source of another resource.")
+    IS_COLLECTED_BY = PermissibleValue(
+        text="IS_COLLECTED_BY",
+        description="The resource is collected by another resource.")
+    COLLECTS = PermissibleValue(
+        text="COLLECTS",
+        description="The resource collects another resource.")
     IS_REQUIRED_BY = PermissibleValue(
         text="IS_REQUIRED_BY",
         description="The resource is required by another resource.",
@@ -389,7 +423,7 @@ class RelationTypes(EnumDefinitionImpl):
         description="The resource or PID4Cat obsoletes another resource or PID4Cat.")
 
     _defn = EnumDefinition(
-        name="RelationTypes",
+        name="RelationType",
         description="The type of the relation between the resources",
     )
 
@@ -415,7 +449,7 @@ class PID4CatStatus(EnumDefinitionImpl):
         description="The status of the PID4CatRecord.",
     )
 
-class PID4CatAgentRoles(EnumDefinitionImpl):
+class PID4CatAgentRole(EnumDefinitionImpl):
     """
     The role of an agent relative to the resource.
     """
@@ -427,11 +461,11 @@ class PID4CatAgentRoles(EnumDefinitionImpl):
         description="The agent is the owner of the resource.")
 
     _defn = EnumDefinition(
-        name="PID4CatAgentRoles",
+        name="PID4CatAgentRole",
         description="The role of an agent relative to the resource.",
     )
 
-class ChangeLogFields(EnumDefinitionImpl):
+class ChangeLogField(EnumDefinitionImpl):
     """
     The field of the PID4Catrecord that was changed.
     """
@@ -452,7 +486,7 @@ class ChangeLogFields(EnumDefinitionImpl):
         description="The rights of the PID4CatRecord were changed.")
 
     _defn = EnumDefinition(
-        name="ChangeLogFields",
+        name="ChangeLogField",
         description="The field of the PID4Catrecord that was changed.",
     )
 
@@ -469,8 +503,14 @@ class slots:
 slots.status = Slot(uri=PID4CAT_MODEL.status, name="status", curie=PID4CAT_MODEL.curie('status'),
                    model_uri=PID4CAT_MODEL.status, domain=None, range=Optional[Union[str, "PID4CatStatus"]])
 
+slots.pid_schema_version = Slot(uri=SCHEMA.identifier, name="pid_schema_version", curie=SCHEMA.curie('identifier'),
+                   model_uri=PID4CAT_MODEL.pid_schema_version, domain=None, range=Optional[str])
+
+slots.record_version = Slot(uri=SCHEMA.identifier, name="record_version", curie=SCHEMA.curie('identifier'),
+                   model_uri=PID4CAT_MODEL.record_version, domain=None, range=Optional[str])
+
 slots.resource_info = Slot(uri=PID4CAT_MODEL.resource_info, name="resource_info", curie=PID4CAT_MODEL.curie('resource_info'),
-                   model_uri=PID4CAT_MODEL.resource_info, domain=None, range=Optional[Union[Union[dict, ResourceInfo], List[Union[dict, ResourceInfo]]]])
+                   model_uri=PID4CAT_MODEL.resource_info, domain=None, range=Optional[Union[dict, ResourceInfo]])
 
 slots.related_identifiers = Slot(uri=SCHEMA.identifier, name="related_identifiers", curie=SCHEMA.curie('identifier'),
                    model_uri=PID4CAT_MODEL.related_identifiers, domain=None, range=Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]])
@@ -485,7 +525,7 @@ class slots:
                    model_uri=PID4CAT_MODEL.change_log, domain=None, range=Union[Union[dict, LogRecord], List[Union[dict, LogRecord]]])
 
 slots.relation_type = Slot(uri=SCHEMA.identifier, name="relation_type", curie=SCHEMA.curie('identifier'),
-                   model_uri=PID4CAT_MODEL.relation_type, domain=None, range=Optional[Union[Union[str, "RelationTypes"], List[Union[str, "RelationTypes"]]]])
+                   model_uri=PID4CAT_MODEL.relation_type, domain=None, range=Optional[Union[Union[str, "RelationType"], List[Union[str, "RelationType"]]]])
 
 slots.related_identifier = Slot(uri=SCHEMA.identifier, name="related_identifier", curie=SCHEMA.curie('identifier'),
                    model_uri=PID4CAT_MODEL.related_identifier, domain=None, range=Optional[str])
@@ -493,8 +533,8 @@ class slots:
 slots.datetime_log = Slot(uri=SCHEMA.DateTime, name="datetime_log", curie=SCHEMA.curie('DateTime'),
                    model_uri=PID4CAT_MODEL.datetime_log, domain=None, range=Optional[str])
 
-slots.agent = Slot(uri=SCHEMA.Agent, name="agent", curie=SCHEMA.curie('Agent'),
-                   model_uri=PID4CAT_MODEL.agent, domain=None, range=Optional[Union[dict, Agent]])
+slots.has_agent = Slot(uri=SCHEMA.Agent, name="has_agent", curie=SCHEMA.curie('Agent'),
+                   model_uri=PID4CAT_MODEL.has_agent, domain=None, range=Optional[Union[dict, Agent]])
 
 slots.label = Slot(uri=SCHEMA.name, name="label", curie=SCHEMA.curie('name'),
                    model_uri=PID4CAT_MODEL.label, domain=None, range=Optional[str])
@@ -503,7 +543,7 @@ class slots:
                    model_uri=PID4CAT_MODEL.description, domain=None, range=Optional[str])
 
 slots.resource_category = Slot(uri=SCHEMA.additionalType, name="resource_category", curie=SCHEMA.curie('additionalType'),
-                   model_uri=PID4CAT_MODEL.resource_category, domain=None, range=Optional[Union[str, "ResourceCategories"]])
+                   model_uri=PID4CAT_MODEL.resource_category, domain=None, range=Optional[Union[str, "ResourceCategory"]])
 
 slots.rdf_url = Slot(uri=SCHEMA.additionalType, name="rdf_url", curie=SCHEMA.curie('additionalType'),
                    model_uri=PID4CAT_MODEL.rdf_url, domain=None, range=Optional[str])
@@ -518,7 +558,7 @@ class slots:
                    model_uri=PID4CAT_MODEL.schema_type, domain=None, range=Optional[str])
 
 slots.changed_field = Slot(uri=SCHEMA.identifier, name="changed_field", curie=SCHEMA.curie('identifier'),
-                   model_uri=PID4CAT_MODEL.changed_field, domain=None, range=Optional[Union[str, "ChangeLogFields"]])
+                   model_uri=PID4CAT_MODEL.changed_field, domain=None, range=Optional[Union[str, "ChangeLogField"]])
 
 slots.name = Slot(uri=SCHEMA.name, name="name", curie=SCHEMA.curie('name'),
                    model_uri=PID4CAT_MODEL.name, domain=None, range=Optional[str])
@@ -533,7 +573,10 @@ class slots:
                    model_uri=PID4CAT_MODEL.affiliation_ror, domain=None, range=Optional[str])
 
 slots.role = Slot(uri=SCHEMA.identifier, name="role", curie=SCHEMA.curie('identifier'),
-                   model_uri=PID4CAT_MODEL.role, domain=None, range=Optional[Union[str, "PID4CatAgentRoles"]])
+                   model_uri=PID4CAT_MODEL.role, domain=None, range=Optional[Union[str, "PID4CatAgentRole"]])
+
+slots.container__contains_pids = Slot(uri=PID4CAT_MODEL.contains_pids, name="container__contains_pids", curie=PID4CAT_MODEL.curie('contains_pids'),
+                   model_uri=PID4CAT_MODEL.container__contains_pids, domain=None, range=Optional[Union[Dict[Union[str, PID4CatRecordId], Union[dict, PID4CatRecord]], List[Union[dict, PID4CatRecord]]]])
 
 slots.PID4CatRecord_curation_contact = Slot(uri=SCHEMA.email, name="PID4CatRecord_curation_contact", curie=SCHEMA.curie('email'),
                    model_uri=PID4CAT_MODEL.PID4CatRecord_curation_contact, domain=PID4CatRecord, range=Optional[str],
diff --git a/src/pid4cat_model/datamodel/pid4cat_model_pydantic.py b/src/pid4cat_model/datamodel/pid4cat_model_pydantic.py
new file mode 100644
index 0000000..a525179
--- /dev/null
+++ b/src/pid4cat_model/datamodel/pid4cat_model_pydantic.py
@@ -0,0 +1,236 @@
+from __future__ import annotations
+from datetime import datetime, date
+from enum import Enum
+from typing import List, Dict, Optional, Any, Union
+from pydantic import BaseModel as BaseModel, ConfigDict, Field
+import sys
+if sys.version_info >= (3, 8):
+    from typing import Literal
+else:
+    from typing_extensions import Literal
+
+
+metamodel_version = "None"
+version = "None"
+
+class ConfiguredBaseModel(BaseModel):
+    model_config = ConfigDict(
+        validate_assignment=True,
+        validate_default=True,
+        extra='forbid',
+        arbitrary_types_allowed=True,
+        use_enum_values = True)
+
+
+class ResourceCategory(str, Enum):
+    """
+    The category of the resource
+    """
+    # A collection is described as a group; its parts may also be separately described.
+    COLLECTION = "COLLECTION"
+    # A representative part of an entity of interest on which observations may be made.
+    SAMPLE = "SAMPLE"
+    # A material used in the research process (except samples).
+    MATERIAL = "MATERIAL"
+    # A device used in the catalysis research process.
+    DEVICE = "DEVICE"
+    # A data object might be a data file, a data set, a data collection, or a data service.
+    DATAOBJECT = "DATAOBJECT"
+    
+    
+
+class RelationType(str, Enum):
+    """
+    The type of the relation between the resources
+    """
+    # The resource is cited by another resource.
+    IS_CITED_BY = "IS_CITED_BY"
+    # The resource cites another resource.
+    CITES = "CITES"
+    # The resource is supplemented by another resource.
+    IS_SUPPLEMENT_TO = "IS_SUPPLEMENT_TO"
+    # The resource supplements another resource.
+    IS_SUPPLEMENTED_BY = "IS_SUPPLEMENTED_BY"
+    # The resource is continued by another resource.
+    IS_CONTINUED_BY = "IS_CONTINUED_BY"
+    # The resource continues another resource.
+    CONTINUES = "CONTINUES"
+    # The resource has metadata.
+    HAS_METADATA = "HAS_METADATA"
+    # The resource is metadata for.
+    IS_METADATA_FOR = "IS_METADATA_FOR"
+    # The resource has a version.
+    HAS_VERSION = "HAS_VERSION"
+    # The resource is a version of.
+    IS_VERSION_OF = "IS_VERSION_OF"
+    # The resource is a new version of.
+    IS_NEW_VERSION_OF = "IS_NEW_VERSION_OF"
+    # The resource is a previous version of.
+    IS_PREVIOUS_VERSION_OF = "IS_PREVIOUS_VERSION_OF"
+    # The resource is part of another resource.
+    IS_PART_OF = "IS_PART_OF"
+    # The resource has part another resource.
+    HAS_PART = "HAS_PART"
+    # The resource is documented by another resource.
+    IS_DESCRIBED_BY = "IS_DESCRIBED_BY"
+    # The resource documents another resource.
+    DESCRIBES = "DESCRIBES"
+    # The resource is published in another resource.
+    IS_PUBLISHED_IN = "IS_PUBLISHED_IN"
+    # The resource is referenced by another resource.
+    IS_REFERENCED_BY = "IS_REFERENCED_BY"
+    # The resource references another resource.
+    REFERENCES = "REFERENCES"
+    # The resource is documented by another resource.
+    IS_DOCUMENTED_BY = "IS_DOCUMENTED_BY"
+    # The resource documents another resource.
+    DOCUMENTS = "DOCUMENTS"
+    # The resource is compiled by another resource.
+    IS_COMPILED_BY = "IS_COMPILED_BY"
+    # The resource compiles another resource.
+    COMPILES = "COMPILES"
+    # The resource is variant form of another resource.
+    IS_VARIANT_FORM_OF = "IS_VARIANT_FORM_OF"
+    # The resource is original form of another resource.
+    IS_ORIGINAL_FORM_OF = "IS_ORIGINAL_FORM_OF"
+    # The resource is identical to another resource.
+    IS_IDENTICAL_TO = "IS_IDENTICAL_TO"
+    # The resource is derived from another resource.
+    IS_DERIVED_FROM = "IS_DERIVED_FROM"
+    # The resource is source of another resource.
+    IS_SOURCE_OF = "IS_SOURCE_OF"
+    # The resource is collected by another resource.
+    IS_COLLECTED_BY = "IS_COLLECTED_BY"
+    # The resource collects another resource.
+    COLLECTS = "COLLECTS"
+    # The resource is required by another resource.
+    IS_REQUIRED_BY = "IS_REQUIRED_BY"
+    # The resource requires another resource.
+    REQUIRES = "REQUIRES"
+    # The resource or PID4Cat is obsoleted by another resource or PID4Cat.
+    IS_OBSOLETED_BY = "IS_OBSOLETED_BY"
+    # The resource or PID4Cat obsoletes another resource or PID4Cat.
+    OBSOLETES = "OBSOLETES"
+    
+    
+
+class PID4CatStatus(str, Enum):
+    """
+    The status of the PID4CatRecord.
+    """
+    # The PID4CatRecord is reserved but the resource is not yet linked.
+    SUBMITTED = "SUBMITTED"
+    # The PID4CatRecord links to a concrete ressource.
+    REGISTERED = "REGISTERED"
+    # The PID4CatRecord is obsolete, e.g. because the resource is referenced by another PID4Cat.
+    OBSOLETED = "OBSOLETED"
+    # The PID4CatRecord is deprecated, e.g. because the resource can no longer be found.
+    DEPRECATED = "DEPRECATED"
+    
+    
+
+class PID4CatAgentRole(str, Enum):
+    """
+    The role of an agent relative to the resource.
+    """
+    # The agent is the trustee of the resource.
+    TRUSTEE = "TRUSTEE"
+    # The agent is the owner of the resource.
+    OWNER = "OWNER"
+    
+    
+
+class ChangeLogField(str, Enum):
+    """
+    The field of the PID4Catrecord that was changed.
+    """
+    # The status of the PID4CatRecord was changed.
+    STATUS = "STATUS"
+    # The resource info of the PID4CatRecord was changed.
+    RESOURCE_INFO = "RESOURCE_INFO"
+    # The related identifiers of the PID4CatRecord were changed.
+    RELATED_IDS = "RELATED_IDS"
+    # The contact information of the PID4CatRecord was changed.
+    CONTACT = "CONTACT"
+    # The rights of the PID4CatRecord were changed.
+    RIGHTS = "RIGHTS"
+    
+    
+
+class PID4CatRecord(ConfiguredBaseModel):
+    """
+    Represents a PID4CatRecord
+    """
+    id: str = Field(..., description="""A unique identifier for a thing""")
+    landing_page_url: Optional[str] = Field(None, description="""The URL of the landing page for the resource""")
+    status: Optional[PID4CatStatus] = Field(None, description="""The status of the PID4CatRecord.""")
+    record_version: Optional[str] = Field(None, description="""Date-based version string of the PID4CatRecord (e.g. 20240219v0, 20240219v1, ...). The version should be incremented with every change of the PID4CatRecord.""")
+    pid_schema_version: Optional[str] = Field(None, description="""The version of the PID4Cat schema used for the PID4CatRecord.""")
+    dc_rights: Optional[str] = Field(None, description="""The license for the metadata contained in the PID4Cat record.""")
+    curation_contact: Optional[str] = Field(None, description="""The email address of a person or institution responsible for curation of the resource.""")
+    resource_info: Optional[ResourceInfo] = Field(None, description="""Information about the resource.""")
+    related_identifiers: Optional[List[str]] = Field(default_factory=list, description="""Alternate identifiers for the resource""")
+    change_log: List[LogRecord] = Field(default_factory=list, description="""Change log of PID4Cat record""")
+    
+
+class PID4CatRelation(ConfiguredBaseModel):
+    """
+    A relation between PID4CatRecords or between a PID4CatRecord and other resources with a PID.
+    """
+    relation_type: Optional[List[RelationType]] = Field(default_factory=list, description="""Relation type between the resources""")
+    related_identifier: Optional[str] = Field(None, description="""Related identifiers for the resource""")
+    datetime_log: Optional[str] = Field(None, description="""The date and time of a log record""")
+    has_agent: Optional[Agent] = Field(None, description="""The person who registered the resource""")
+    
+
+class ResourceInfo(ConfiguredBaseModel):
+    """
+    Data object to hold information about the resource and its representation.
+    """
+    label: Optional[str] = Field(None, description="""A human-readable name for a thing""")
+    description: Optional[str] = Field(None, description="""A human-readable description for a thing""")
+    resource_category: Optional[ResourceCategory] = Field(None, description="""The category of the resource""")
+    rdf_url: Optional[str] = Field(None, description="""The URI of the rdf represenation of the resource.""")
+    rdf_type: Optional[str] = Field(None, description="""The format of the rdf representation of the resource (xml, turlte, json-ld, ...).""")
+    schema_url: Optional[str] = Field(None, description="""The URI of the schema used to describe the resource. Same property as in DataCite:schemeURI.""")
+    schema_type: Optional[str] = Field(None, description="""The type of the scheme used to describe the resource. Examples: XSD, DDT, Turtle Same property as in DataCite:schemeType.""")
+    
+
+class LogRecord(ConfiguredBaseModel):
+    """
+    A log record for changes made on a PID4CatRecord starting from registration.
+    """
+    datetime_log: Optional[str] = Field(None, description="""The date and time of a log record""")
+    has_agent: Optional[Agent] = Field(None, description="""The person who registered the resource""")
+    changed_field: Optional[ChangeLogField] = Field(None, description="""The field that was changed""")
+    description: Optional[str] = Field(None, description="""A human-readable description for a thing""")
+    
+
+class Agent(ConfiguredBaseModel):
+    """
+    Person who plays a role relative to PID creation or curation.
+    """
+    name: Optional[str] = Field(None, description="""The name of the agent""")
+    contact_information: Optional[str] = Field(None, description="""Identification of the agent that registered the PID, with contact information. Should include person name and affiliation, or position name and affiliation, or just organization name. e-mail address is preferred contact information.""")
+    person_orcid: Optional[str] = Field(None, description="""The ORCID of the person""")
+    affiliation_ror: Optional[str] = Field(None, description="""The ROR of the affiliation""")
+    role: Optional[PID4CatAgentRole] = Field(None, description="""The role of the agent relative to the resource""")
+    
+
+class Container(ConfiguredBaseModel):
+    """
+    A container for all PID4Cat instances.
+    """
+    contains_pids: Optional[List[PID4CatRecord]] = Field(default_factory=list, description="""The PID4CatRecords contained in the container.""")
+    
+
+
+# Model rebuild
+# see https://pydantic-docs.helpmanual.io/usage/models/#rebuilding-a-model
+PID4CatRecord.model_rebuild()
+PID4CatRelation.model_rebuild()
+ResourceInfo.model_rebuild()
+LogRecord.model_rebuild()
+Agent.model_rebuild()
+Container.model_rebuild()
+
diff --git a/src/pid4cat_model/schema/pid4cat_model.yaml b/src/pid4cat_model/schema/pid4cat_model.yaml
index 53a3f01..6a2e1f7 100644
--- a/src/pid4cat_model/schema/pid4cat_model.yaml
+++ b/src/pid4cat_model/schema/pid4cat_model.yaml
@@ -15,6 +15,7 @@ description: >-
 todos:
   - Refine slots in slot_usage of class instead of globally in slot definitions
   - Check and add mappings to other ontologies. (classes, slots, enums)
+  - Add Enums for rdf_type, schema_type
 
 license: MIT
 see_also:
@@ -46,10 +47,11 @@ classes:
       - landing_page_url
       - status
       - record_version
-      - resource_info
-      - related_identifiers
+      - pid_schema_version
       - dc_rights
       - curation_contact
+      - resource_info
+      - related_identifiers
       - change_log
     slot_usage:
       curation_contact:
@@ -99,7 +101,7 @@ classes:
       A container for all PID4Cat instances.
     tree_root: true
     attributes:
-      has_pids:
+      contains_pids:
         multivalued: true
         inlined_as_list: true
         range: PID4CatRecord
@@ -122,6 +124,9 @@ slots:
     range: PID4CatStatus
     description: >-
       The status of the PID4CatRecord.
+  pid_schema_version:
+    slot_uri: schema:identifier
+    description: The version of the PID4Cat schema used for the PID4CatRecord.
   record_version:
     slot_uri: schema:identifier
     description: >-
@@ -129,7 +134,6 @@ slots:
       The version should be incremented with every change of the PID4CatRecord.
   resource_info:
     range: ResourceInfo
-    multivalued: true
     description: Information about the resource.
   related_identifiers:
     slot_uri: schema:identifier
@@ -152,7 +156,7 @@ slots:
   # Slots for PID4CatRelation
   relation_type:
     slot_uri: schema:identifier
-    range: RelationTypes
+    range: RelationType
     multivalued: true
     description: Relation type between the resources
   related_identifier:
@@ -175,7 +179,7 @@ slots:
     description: A human-readable description for a thing
   resource_category:
     slot_uri: schema:additionalType
-    range: ResourceCategories
+    range: ResourceCategory
     description: The category of the resource
   rdf_url:
     slot_uri: schema:additionalType
@@ -200,7 +204,7 @@ slots:
   # Slots for LogRecord
   changed_field:
     slot_uri: schema:identifier
-    range: ChangeLogFields
+    range: ChangeLogField
     description: The field that was changed
 
   # Slots for Agent
@@ -221,12 +225,12 @@ slots:
     description: The ROR of the affiliation
   role:
     slot_uri: schema:identifier
-    range: PID4CatAgentRoles
+    range: PID4CatAgentRole
     description: The role of the agent relative to the resource
 
-enums:
+enums:  # Enumerations use singular form for names
 
-  ResourceCategories:
+  ResourceCategory:
     description: >-
       The category of the resource
     permissible_values:
@@ -252,7 +256,7 @@ enums:
         todos:
           - map this to an ontology
 
-  RelationTypes:
+  RelationType:
     description: >-
       The type of the relation between the resources
     permissible_values:
@@ -353,7 +357,7 @@ enums:
       DEPRECATED:
         description: The PID4CatRecord is deprecated, e.g. because the resource can no longer be found.
 
-  PID4CatAgentRoles:
+  PID4CatAgentRole:
     description: >-
       The role of an agent relative to the resource.
     permissible_values:
@@ -362,7 +366,7 @@ enums:
       OWNER:
         description: The agent is the owner of the resource.
 
-  ChangeLogFields:
+  ChangeLogField:
     description: >-
       The field of the PID4Catrecord that was changed.
     permissible_values:
diff --git a/tests/test_data.py b/tests/test_data.py
index cb03df2..e535bfb 100644
--- a/tests/test_data.py
+++ b/tests/test_data.py
@@ -4,12 +4,12 @@
 import unittest
 
 from linkml_runtime.loaders import yaml_loader
-from pid4cat_model.datamodel.pid4cat_model import PID4CatRecordCollection
+from pid4cat_model.datamodel.pid4cat_model import Container
 
-ROOT = os.path.join(os.path.dirname(__file__), '..')
+ROOT = os.path.join(os.path.dirname(__file__), "..")
 DATA_DIR = os.path.join(ROOT, "src", "data", "examples")
 
-EXAMPLE_FILES = glob.glob(os.path.join(DATA_DIR, '*.yaml'))
+EXAMPLE_FILES = glob.glob(os.path.join(DATA_DIR, "*.yaml"))
 
 
 class TestData(unittest.TestCase):
@@ -18,5 +18,5 @@ class TestData(unittest.TestCase):
     def test_data(self):
         """Data test."""
         for path in EXAMPLE_FILES:
-            obj = yaml_loader.load(path, target_class=PID4CatRecordCollection)
+            obj = yaml_loader.load(path, target_class=Container)
             assert obj