Skip to content

Commit 08ad4f6

Browse files
Merge pull request #19 from nfdi4cat/fix_testdata_issues
Add product_identification_method and test fixtures
2 parents eea7999 + 9dba281 commit 08ad4f6

17 files changed

Lines changed: 476 additions & 58 deletions

docs/schema/coremeta4cat.yaml

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -715,9 +715,10 @@ slots:
715715
mappings:
716716
- VOC4CAT:0000187
717717
slot_uri: VOC4CAT:0000187
718-
owner: ThermalSynthesisMixin
718+
owner: Characterization
719719
domain_of:
720720
- ThermalSynthesisMixin
721+
- Characterization
721722
range: string
722723
multivalued: true
723724
flow_rate:
@@ -3716,6 +3717,27 @@ slots:
37163717
domain_of:
37173718
- FluidizedBedReactor
37183719
range: string
3720+
product_identification_method:
3721+
name: product_identification_method
3722+
definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/product_identification_method
3723+
description: 'The analytical method used to identify and/or quantify reaction
3724+
products.
3725+
3726+
Should reference a CharacterizationTechnique instance (e.g. GCMS, HPLC_MS).
3727+
3728+
The abstract stub ProductIdentificationMethod is retained for backward compatibility.'
3729+
from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/
3730+
mappings:
3731+
- coremeta4cat:product_identification_method
3732+
slot_uri: coremeta4cat:product_identification_method
3733+
owner: Reaction
3734+
domain_of:
3735+
- Reaction
3736+
range: ProductIdentificationMethod
3737+
required: true
3738+
multivalued: true
3739+
inlined: true
3740+
inlined_as_list: true
37193741
software_package:
37203742
name: software_package
37213743
definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/software_package
@@ -6975,23 +6997,6 @@ slots:
69756997
binds_value_of: id
69766998
description: Restricts the allowable defined terms to the QUDT Unit vocabulary.
69776999
recommended: true
6978-
product_identification_method:
6979-
name: product_identification_method
6980-
description: 'The analytical method used to identify and/or quantify reaction
6981-
products.
6982-
6983-
Should reference a CharacterizationTechnique instance (e.g. a GCMS or
6984-
6985-
HPLC_MS object from coremeta4cat_characterization_ap). The abstract stub
6986-
6987-
ProductIdentificationMethod is retained for backward compatibility.'
6988-
from_schema: https://w3id.org/nfdi4cat/coremeta4cat
6989-
slot_uri: coremeta4cat:product_identification_method
6990-
range: ProductIdentificationMethod
6991-
required: true
6992-
multivalued: true
6993-
inlined: true
6994-
inlined_as_list: true
69957000
CatalysisDataset_rdf_type:
69967001
name: CatalysisDataset_rdf_type
69977002
definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/rdf_type
@@ -7442,6 +7447,7 @@ slots:
74427447
inlined_as_list: true
74437448
Reaction_product_identification_method:
74447449
name: Reaction_product_identification_method
7450+
definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/product_identification_method
74457451
description: 'The analytical method used to identify and/or quantify reaction
74467452
products.
74477453

@@ -7450,7 +7456,9 @@ slots:
74507456
HPLC_MS object from coremeta4cat_characterization_ap). The abstract stub
74517457

74527458
ProductIdentificationMethod is retained for backward compatibility.'
7453-
from_schema: https://w3id.org/nfdi4cat/coremeta4cat
7459+
from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/
7460+
mappings:
7461+
- coremeta4cat:product_identification_method
74547462
is_a: product_identification_method
74557463
domain: Reaction
74567464
slot_uri: coremeta4cat:product_identification_method
@@ -7511,7 +7519,6 @@ slots:
75117519
usage_slot_name: realized_plan
75127520
range: SimulationMethod
75137521
required: true
7514-
multivalued: true
75157522
inlined: true
75167523
inlined_as_list: true
75177524
Simulation_carried_out_by:
@@ -12192,12 +12199,12 @@ classes:
1219212199
- ClassifierMixin_type
1219312200
- evaluated_activity
1219412201
- occurred_in
12202+
- Characterization_equipment
1219512203
- sample_state
1219612204
- sample_description
1219712205
- sample_preparation
1219812206
- sample_pretreatment
1219912207
- detector_type
12200-
- Characterization_equipment
1220112208
- Characterization_evaluated_entity
1220212209
- Characterization_realized_plan
1220312210
- Characterization_rdf_type
@@ -12935,10 +12942,10 @@ classes:
1293512942
- experiment_pressure
1293612943
- feed_composition_range
1293712944
- experiment_duration
12945+
- Reaction_product_identification_method
1293812946
- Reaction_rdf_type
1293912947
- Reaction_carried_out_by
1294012948
- Reaction_had_input_entity
12941-
- Reaction_product_identification_method
1294212949
slot_usage:
1294312950
rdf_type:
1294412951
name: rdf_type
@@ -12972,12 +12979,9 @@ classes:
1297212979
HPLC_MS object from coremeta4cat_characterization_ap). The abstract stub
1297312980

1297412981
ProductIdentificationMethod is retained for backward compatibility.'
12975-
from_schema: https://w3id.org/nfdi4cat/coremeta4cat
12976-
slot_uri: coremeta4cat:product_identification_method
1297712982
range: ProductIdentificationMethod
1297812983
required: true
1297912984
multivalued: true
12980-
inlined: true
1298112985
inlined_as_list: true
1298212986
class_uri: SIO:010345
1298312987
ProductIdentificationMethod:
@@ -13001,7 +13005,6 @@ classes:
1300113005
mappings:
1300213006
- OBI:0000272
1300313007
is_a: Plan
13004-
abstract: true
1300513008
slots:
1300613009
- title
1300713010
- description
@@ -13300,8 +13303,6 @@ classes:
1330013303
description: The SimulationMethod (protocol) realized in this Simulation.
1330113304
range: SimulationMethod
1330213305
required: true
13303-
multivalued: true
13304-
inlined_as_list: true
1330513306
carried_out_by:
1330613307
name: carried_out_by
1330713308
description: The simulation software used, provided as a Software agent instance.
@@ -17078,5 +17079,5 @@ metamodel_version: 1.7.0
1707817079
source_file: coremeta4cat.yaml
1707917080
source_file_date: '2026-03-09T16:14:14'
1708017081
source_file_size: 6730
17081-
generation_date: '2026-03-09T17:32:19'
17082+
generation_date: '2026-03-10T08:36:44'
1708217083

src/coremeta4cat/datamodel/coremeta4cat.py

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Auto generated from coremeta4cat.yaml by pythongen.py version: 0.0.1
2-
# Generation date: 2026-03-09T17:19:45
2+
# Generation date: 2026-03-10T09:36:20
33
# Schema: coremeta4cat-metadata
44
#
55
# id: https://w3id.org/nfdi4cat/coremeta4cat
@@ -1572,7 +1572,7 @@ class Simulation(DataGeneratingActivity):
15721572
id: Union[str, SimulationId] = None
15731573
software_package: Union[str, list[str]] = None
15741574
calculated_property: Union[Union[dict, "CalculatedProperty"], list[Union[dict, "CalculatedProperty"]]] = None
1575-
realized_plan: Union[Union[dict, "SimulationMethod"], list[Union[dict, "SimulationMethod"]]] = None
1575+
realized_plan: Union[dict, "SimulationMethod"] = None
15761576
rdf_type: Optional[Union[dict, "DefinedTerm"]] = None
15771577
carried_out_by: Optional[Union[dict[Union[str, AgenticEntityId], Union[dict, AgenticEntity]], list[Union[dict, AgenticEntity]]]] = empty_dict()
15781578
evaluated_entity: Optional[Union[dict[Union[str, EvaluatedEntityId], Union[dict, "EvaluatedEntity"]], list[Union[dict, "EvaluatedEntity"]]]] = empty_dict()
@@ -1597,9 +1597,8 @@ def __post_init__(self, *_: str, **kwargs: Any):
15971597

15981598
if self._is_empty(self.realized_plan):
15991599
self.MissingRequiredField("realized_plan")
1600-
if not isinstance(self.realized_plan, list):
1601-
self.realized_plan = [self.realized_plan] if self.realized_plan is not None else []
1602-
self.realized_plan = [v if isinstance(v, SimulationMethod) else SimulationMethod(**as_dict(v)) for v in self.realized_plan]
1600+
if not isinstance(self.realized_plan, SimulationMethod):
1601+
self.realized_plan = SimulationMethod(**as_dict(self.realized_plan))
16031602

16041603
if self.rdf_type is not None and not isinstance(self.rdf_type, DefinedTerm):
16051604
self.rdf_type = DefinedTerm(**as_dict(self.rdf_type))
@@ -2579,8 +2578,8 @@ class Reaction(EvaluatedActivity):
25792578
id: Union[str, ReactionId] = None
25802579
catalyst_quantity: Union[float, list[float]] = None
25812580
reactant: Union[str, list[str]] = None
2582-
carried_out_by: Union[dict[Union[str, ReactorDesignTypeId], Union[dict, ReactorDesignType]], list[Union[dict, ReactorDesignType]]] = empty_dict()
25832581
product_identification_method: Union[Union[dict, "ProductIdentificationMethod"], list[Union[dict, "ProductIdentificationMethod"]]] = None
2582+
carried_out_by: Union[dict[Union[str, ReactorDesignTypeId], Union[dict, ReactorDesignType]], list[Union[dict, ReactorDesignType]]] = empty_dict()
25842583
catalyst_type: Optional[Union[str, list[str]]] = empty_list()
25852584
reactor_temperature_range: Optional[Union[str, list[str]]] = empty_list()
25862585
atmosphere: Optional[Union[str, list[str]]] = empty_list()
@@ -2608,16 +2607,16 @@ def __post_init__(self, *_: str, **kwargs: Any):
26082607
self.reactant = [self.reactant] if self.reactant is not None else []
26092608
self.reactant = [v if isinstance(v, str) else str(v) for v in self.reactant]
26102609

2611-
if self._is_empty(self.carried_out_by):
2612-
self.MissingRequiredField("carried_out_by")
2613-
self._normalize_inlined_as_list(slot_name="carried_out_by", slot_type=ReactorDesignType, key_name="id", keyed=True)
2614-
26152610
if self._is_empty(self.product_identification_method):
26162611
self.MissingRequiredField("product_identification_method")
26172612
if not isinstance(self.product_identification_method, list):
26182613
self.product_identification_method = [self.product_identification_method] if self.product_identification_method is not None else []
26192614
self.product_identification_method = [v if isinstance(v, ProductIdentificationMethod) else ProductIdentificationMethod(**as_dict(v)) for v in self.product_identification_method]
26202615

2616+
if self._is_empty(self.carried_out_by):
2617+
self.MissingRequiredField("carried_out_by")
2618+
self._normalize_inlined_as_list(slot_name="carried_out_by", slot_type=ReactorDesignType, key_name="id", keyed=True)
2619+
26212620
if not isinstance(self.catalyst_type, list):
26222621
self.catalyst_type = [self.catalyst_type] if self.catalyst_type is not None else []
26232622
self.catalyst_type = [v if isinstance(v, str) else str(v) for v in self.catalyst_type]
@@ -9221,6 +9220,9 @@ class slots:
92219220
slots.bubble_size_distribution = Slot(uri=COREMETA4CAT.bubble_size_distribution, name="bubble_size_distribution", curie=COREMETA4CAT.curie('bubble_size_distribution'),
92229221
model_uri=COREMETA4CAT.bubble_size_distribution, domain=None, range=Optional[str])
92239222

9223+
slots.product_identification_method = Slot(uri=COREMETA4CAT.product_identification_method, name="product_identification_method", curie=COREMETA4CAT.curie('product_identification_method'),
9224+
model_uri=COREMETA4CAT.product_identification_method, domain=None, range=Union[Union[dict, ProductIdentificationMethod], list[Union[dict, ProductIdentificationMethod]]])
9225+
92249226
slots.software_package = Slot(uri=COREMETA4CAT.software_package, name="software_package", curie=COREMETA4CAT.curie('software_package'),
92259227
model_uri=COREMETA4CAT.software_package, domain=None, range=Union[str, list[str]])
92269228

@@ -9854,9 +9856,6 @@ class slots:
98549856
slots.quantitativeAttribute__unit = Slot(uri=QUDT.unit, name="quantitativeAttribute__unit", curie=QUDT.curie('unit'),
98559857
model_uri=COREMETA4CAT.quantitativeAttribute__unit, domain=None, range=Optional[Union[str, DefinedTermId]])
98569858

9857-
slots.product_identification_method = Slot(uri=COREMETA4CAT.product_identification_method, name="product_identification_method", curie=COREMETA4CAT.curie('product_identification_method'),
9858-
model_uri=COREMETA4CAT.product_identification_method, domain=None, range=Union[Union[dict, ProductIdentificationMethod], list[Union[dict, ProductIdentificationMethod]]])
9859-
98609859
slots.CatalysisDataset_rdf_type = Slot(uri=RDF.type, name="CatalysisDataset_rdf_type", curie=RDF.curie('type'),
98619860
model_uri=COREMETA4CAT.CatalysisDataset_rdf_type, domain=CatalysisDataset, range=Optional[Union[dict, "DefinedTerm"]])
98629861

@@ -9921,7 +9920,7 @@ class slots:
99219920
model_uri=COREMETA4CAT.Simulation_rdf_type, domain=Simulation, range=Optional[Union[dict, "DefinedTerm"]])
99229921

99239922
slots.Simulation_realized_plan = Slot(uri=PROV.used, name="Simulation_realized_plan", curie=PROV.curie('used'),
9924-
model_uri=COREMETA4CAT.Simulation_realized_plan, domain=Simulation, range=Union[Union[dict, "SimulationMethod"], list[Union[dict, "SimulationMethod"]]])
9923+
model_uri=COREMETA4CAT.Simulation_realized_plan, domain=Simulation, range=Union[dict, "SimulationMethod"])
99259924

99269925
slots.Simulation_carried_out_by = Slot(uri=PROV.wasAssociatedWith, name="Simulation_carried_out_by", curie=PROV.curie('wasAssociatedWith'),
99279926
model_uri=COREMETA4CAT.Simulation_carried_out_by, domain=Simulation, range=Optional[Union[dict[Union[str, AgenticEntityId], Union[dict, AgenticEntity]], list[Union[dict, AgenticEntity]]]])

0 commit comments

Comments
 (0)