From c685f015c89ed46d37169e703c37ce56d0e8fdfd Mon Sep 17 00:00:00 2001 From: HendrikBorgelt <84382772+HendrikBorgelt@users.noreply.github.com> Date: Tue, 14 Jul 2026 14:57:58 +0200 Subject: [PATCH 1/7] Add proper LinkML inheritance from chemdcat-ap and teach tooling to resolve it CatalyticReaction now specializes chemdcat-ap's ChemicalReaction instead of re-declaring EvaluatedActivity in parallel, and ChemicalReactor specializes Reactor instead of Device -- both previously asserted the same class_uri as their chemdcat-ap counterpart without an is_a relationship. The custom Excel/docs tooling (schema_to_excel.py, inbox_to_schema.py, generate_schema_docs.py) hand-rolls its own schema merge and previously only understood mixins, not is_a, so it was blind to inherited chemdcat-ap slots. Teaches it to climb is_a chains for slot resolution, mark inherited rows as read-only reference material in the Excel workbook, and skip non-owned slots in the inbox workflow's editability and deletion-detection checks so inherited fields don't trigger false "will be removed" warnings. --- scripts/generate_schema_docs.py | 167 +++++++++++++-- scripts/inbox_to_schema.py | 199 +++++++++++++----- scripts/schema_to_excel.py | 71 +++++-- .../schema/chemical_reaction_ap.yaml | 3 - tests/test_inbox_to_schema.py | 188 +++++++++++++++++ 5 files changed, 543 insertions(+), 85 deletions(-) diff --git a/scripts/generate_schema_docs.py b/scripts/generate_schema_docs.py index 2590c343c..3cfa4e6cd 100644 --- a/scripts/generate_schema_docs.py +++ b/scripts/generate_schema_docs.py @@ -7,7 +7,22 @@ # coremeta4cat.yaml is loaded FIRST so its generic stubs (range: Plan, range: AgenticEntity) # are overwritten by the specific ranges in the subprofile modules. -MODULE_FILES = [ +# +# EDITABLE_MODULE_FILES are the coremeta4cat-authored modules: everything a +# contributor can add/modify/delete via the Excel inbox workflow. This is the +# canonical, single source of truth for "editable" — also imported by +# inbox_to_schema.py for build_origin_index(), which must stay scoped to +# exactly these files. +# +# VENDORED_MODULE_FILES are the locally-vendored chemdcat-ap files. Classes/ +# slots defined here (e.g. ChemicalReaction, Reactor) are loaded so that +# is_a-inheritance resolution (get_all_class_slots, get_subclasses) can see +# them, but they are NOT editable via the Excel inbox workflow — contributors +# only ever see them as inherited, read-only reference rows. +# +# ALL_MODULE_FILES is what actually gets merged into the in-memory schema +# dict used for slot/class resolution and rendering. +EDITABLE_MODULE_FILES = [ "coremeta4cat.yaml", # load first: generic stubs get overwritten by subprofiles "coremeta4cat_common.yaml", "coremeta4cat_synthesis_ap.yaml", @@ -16,6 +31,15 @@ "coremeta4cat_simulation_ap.yaml", ] +VENDORED_MODULE_FILES = [ + "chem_dcat_ap.yaml", + "chemical_reaction_ap.yaml", + "chemical_entities_ap.yaml", + "material_entities_ap.yaml", +] + +ALL_MODULE_FILES = EDITABLE_MODULE_FILES + VENDORED_MODULE_FILES + # ───────────────────────────────────────────────────────────────────────────── # Schema loading & merging @@ -77,7 +101,7 @@ def merge_schemas(modules: List[dict]) -> dict: def load_merged_schema(schema_dir: str) -> dict: schema_dir_path = Path(schema_dir) modules = [] - for filename in MODULE_FILES: + for filename in ALL_MODULE_FILES: full_path = schema_dir_path / filename print(f" Loading: {full_path}") modules.append(load_yaml_file(str(full_path))) @@ -87,13 +111,49 @@ def load_merged_schema(schema_dir: str) -> dict: return merged +def build_origin_index(schema_dir) -> tuple[dict, dict]: + """ + Return (slot_origin, class_origin): maps each slot/class name to the + editable-module YAML file that defines it. + + Only scans EDITABLE_MODULE_FILES (never the vendored chemdcat-ap files), + so a name's presence here is exactly the "is this editable via the Excel + inbox workflow" predicate, used consistently by both schema_to_excel.py + (to render inherited/vendored rows as read-only) and inbox_to_schema.py + (to decide what can be modified or deleted). + """ + schema_dir_path = Path(schema_dir) + slot_origin: dict = {} + class_origin: dict = {} + + for fname in EDITABLE_MODULE_FILES: + fpath = schema_dir_path / fname + doc = load_yaml_file(str(fpath)) + for name in (doc.get("slots") or {}): + slot_origin[name] = fpath + for name in (doc.get("classes") or {}): + class_origin[name] = fpath + + return slot_origin, class_origin + + # ───────────────────────────────────────────────────────────────────────────── # Mixin-aware slot resolution # ───────────────────────────────────────────────────────────────────────────── def get_all_class_slots(schema: dict, class_name: str, _seen: Optional[Set[str]] = None) -> List[str]: - """Return all slots on a class including those contributed by mixins.""" + """Return all slots on a class, including those inherited via is_a and + those contributed by mixins. + + is_a resolution climbs into the merged schema (which now also includes + the vendored chemdcat-ap modules, see ALL_MODULE_FILES) and stops + silently at any class name not present there -- e.g. an external, + unvendored dcat-ap-plus root like EvaluatedActivity or Device. That + class is simply treated as an inheritance root with no further slots + to add, mirroring how an unknown mixin name already degrades + gracefully today. + """ if _seen is None: _seen = set() if class_name in _seen: @@ -101,6 +161,12 @@ def get_all_class_slots(schema: dict, class_name: str, _seen.add(class_name) class_def = schema.get("classes", {}).get(class_name, {}) own_slots = class_def.get("slots", []) or [] + + parent_name = class_def.get("is_a") + parent_slots: List[str] = [] + if parent_name and parent_name in schema.get("classes", {}): + parent_slots = get_all_class_slots(schema, parent_name, _seen.copy()) + mixin_names = class_def.get("mixins", []) or [] mixin_slots: List[str] = [] for mixin_name in mixin_names: @@ -108,32 +174,50 @@ def get_all_class_slots(schema: dict, class_name: str, if s not in mixin_slots: mixin_slots.append(s) combined = list(own_slots) + for s in parent_slots: + if s not in combined: + combined.append(s) for s in mixin_slots: if s not in combined: combined.append(s) return combined -def get_class_ranged_slot_usage(schema: dict, class_name: str) -> List[tuple]: +def get_class_ranged_slot_usage(schema: dict, class_name: str, + exclude: Optional[Set[str]] = None) -> List[tuple]: """ Return (slot_name, synthetic_slot_def) pairs for every slot_usage entry whose range points to a class defined in the merged schema. - These are the 'gateway' slots that expand into nested class/subclass docs: - Synthesis → realized_plan:PreparationMethod, had_input_entity:Precursor, had_output_entity:CatalystSample + These are the 'gateway' slots that expand into nested class/subclass docs + for slot_usage entries that narrow an inherited slot NOT otherwise reachable + via the class's own/inherited `slots:` lists (get_all_class_slots): + Synthesis → realized_plan:PreparationMethod, had_input_entity:Precursor, had_output_entity:CatalystSample Characterization → realized_plan:CharacterizationTechnique - Reaction → carried_out_by:ReactorDesignType, product_identification_method:ProductIdentificationMethod - Simulation → realized_plan:SimulationMethod + Simulation → realized_plan:SimulationMethod + + `exclude` should be the set of slot names already covered by + get_all_class_slots() for this class -- any slot_usage entry for a name + already in that set is skipped here, since it will already be rendered + (with the slot_usage-narrowed cardinality/range applied via + get_slot_cardinality/format_slot_markdown) as part of the regular slot + list. Without this check, a slot that is both explicitly listed in a + class's `slots:` and separately narrowed via `slot_usage` with a + class-valued range (e.g. Reaction's product_identification_method) would + be rendered twice under the same name. """ classes = schema.get("classes", {}) slots_dict = schema.get("slots", {}) class_def = classes.get(class_name, {}) slot_usage = class_def.get("slot_usage", {}) or {} + exclude = exclude or set() result = [] for su_name, su_def in slot_usage.items(): if not su_def: continue + if su_name in exclude: + continue rng = su_def.get("range") if not rng or rng not in classes: continue @@ -216,20 +300,49 @@ def get_slot_cardinality(schema: dict, class_name: str, def format_class_markdown(schema: dict, class_name: str, level: int = 3, processed_classes: Optional[Set[str]] = None, - parent_class: Optional[str] = None) -> str: + parent_class: Optional[str] = None, + rendered: Optional[dict] = None) -> str: + """Render a class as a
block. + + `rendered` is a page-wide (not per-branch) name -> anchor-id map, shared + across the whole recursive walk for one output page. A class that is + reached from multiple slots/paths (e.g. Temperature, Pressure, + ChemicalEntity -- common once CatalyticReaction inherits ChemicalReaction's + full slot set) is fully expanded only the first time; later occurrences + link back to that first rendering instead of re-expanding its entire slot + subtree again, which would otherwise multiply page size with every + additional path that reaches the same shared class. + """ if processed_classes is None: processed_classes = set() if class_name in processed_classes: return "" processed_classes.add(class_name) + if rendered is None: + rendered = {} class_def = schema.get("classes", {}).get(class_name, {}) description = class_def.get("description", "No description available") class_uri = class_def.get("class_uri", "") is_abstract = class_def.get("abstract", False) + if class_name in rendered: + anchor = rendered[class_name] + md = '
\n' + md += f'{snake_to_readable(class_name)}\n\n' + md += f"**Description:** {description}\n\n" + if class_uri: + md += f"**CURIE:** [`{class_uri}`]({expand_curie(schema, class_uri)})\n\n" + md += (f"*Full field list already shown [earlier on this page](#{anchor}) " + f"-- this class is reached from multiple fields.*\n\n") + md += "
\n\n" + return md + + anchor = f"schema-class-{class_name}" + rendered[class_name] = anchor + open_attr = " open" if level == 3 else "" - md = f'
\n' + md = f'
\n' md += f'{snake_to_readable(class_name)}\n\n' if is_abstract: md += "**Abstract Class**\n\n" @@ -244,7 +357,7 @@ def format_class_markdown(schema: dict, class_name: str, level: int = 3, for slot_name in slots: slot_details = get_slot_details(schema, slot_name) md += format_slot_markdown(schema, slot_name, slot_details, level + 2, - processed_classes.copy(), class_name) + processed_classes.copy(), class_name, rendered) md += (f"

\n str: + parent_class: Optional[str] = None, + rendered: Optional[dict] = None) -> str: if processed_classes is None: processed_classes = set() + if rendered is None: + rendered = {} description = slot_details.get("description", "No description available") range_type = slot_details.get("range", "string") @@ -285,14 +401,22 @@ def format_slot_markdown(schema: dict, slot_name: str, slot_details: dict, # If the range is a known schema class, expand it inline with all subclasses if is_class_in_schema(schema, range_type) and not is_mixin(schema, range_type): md += "**Data Type Class Details:**\n\n" - md += format_class_markdown(schema, range_type, level, processed_classes, None) - subclasses = get_subclasses(schema, range_type) + md += format_class_markdown(schema, range_type, level, processed_classes, None, rendered) + # Subclasses already fully rendered elsewhere on the page (tracked in + # `rendered`) are skipped here -- re-listing them adds an "already + # shown earlier" stub with nothing new to say. This matters for + # self-referential relations (e.g. has_reaction_step: range + # ChemicalReaction, whose only subclass is the page's own main class): + # without this filter every such slot would print a "Possible + # Subclasses" section whose sole entry immediately points back to the + # top of the page. + subclasses = [s for s in get_subclasses(schema, range_type) if s not in rendered] if subclasses: md += f"**Possible Subclasses / Enumerations of {snake_to_readable(range_type)}:**\n\n" for subclass in subclasses: if subclass not in processed_classes: md += format_class_markdown(schema, subclass, level + 1, - processed_classes, None) + processed_classes, None, rendered) md += (f"

\n YAML: # Schema index builders # ───────────────────────────────────────────────────────────────────────────── - -def build_origin_index(schema_dir: Path) -> tuple[dict[str, Path], dict[str, Path]]: - """ - Return (slot_origin, class_origin): maps each slot/class name to the YAML - file that defines it. Later modules override earlier ones. - """ - y = _make_yaml() - slot_origin: dict[str, Path] = {} - class_origin: dict[str, Path] = {} - - for fname in MODULE_FILES: - fpath = schema_dir / fname - if not fpath.exists(): - continue - with fpath.open(encoding="utf-8") as fh: - doc = y.load(fh) or {} - for name in (doc.get("slots") or {}): - slot_origin[name] = fpath - for name in (doc.get("classes") or {}): - class_origin[name] = fpath - - return slot_origin, class_origin +# build_origin_index() now lives in generate_schema_docs.py (imported above) +# so schema_to_excel.py can share the exact same editable/vendored predicate +# for rendering read-only rows. def build_label_index(schema: dict) -> tuple[dict[str, str], dict[str, str]]: @@ -310,6 +293,29 @@ def _label_to_class_name(label: str) -> str: return "".join(word.capitalize() for word in label.strip().split()) +def _collect_pending_class_names(rows: list[dict], label_to_class: dict[str, str]) -> set[str]: + """ + Pre-scan one sheet's rows for class-type rows that don't yet exist in the + schema, i.e. classes proposed as new in this same submission. Returns + their derived PascalCase names. + + A larger submission commonly adds a new slot AND the new class it points + to (or a new class AND its new parent class) in the same batch. Without + this pre-scan, validating each row only against the schema as it exists + *before* the batch means such forward references always fail, regardless + of row order. Treating these pending names as valid supports reviewing + and applying the whole multi-part change together. + """ + pending: set[str] = set() + for row in rows: + if row["type"] != "class": + continue + label = row["label"] + if label_to_class.get(label) is None: + pending.add(_label_to_class_name(label)) + return pending + + # ───────────────────────────────────────────────────────────────────────────── # Workbook loading + structural validation # ───────────────────────────────────────────────────────────────────────────── @@ -439,10 +445,12 @@ def parse_excel( # ───────────────────────────────────────────────────────────────────────────── -def _valid_range(range_val: str, schema: dict) -> bool: +def _valid_range(range_val: str, schema: dict, pending_class_names: set[str] | None = None) -> bool: if not range_val: return True - return range_val in PRIMITIVE_TYPES or range_val in schema.get("classes", {}) + if range_val in PRIMITIVE_TYPES or range_val in schema.get("classes", {}): + return True + return bool(pending_class_names) and range_val in pending_class_names def _range_hint(schema: dict) -> str: @@ -478,6 +486,10 @@ def plan_changes( changes: list[dict[str, Any]] = [] for sheet_title, rows in excel_data.items(): + # Classes proposed as new elsewhere in this same sheet -- lets a new + # slot/class reference another new class in the same submission + # (e.g. adding a slot together with the class it ranges over). + pending_class_names = _collect_pending_class_names(rows, label_to_class) schema_class = CLASS_MAP[sheet_title] # Collect all slot/class names the schema knows about for this class @@ -512,15 +524,28 @@ def plan_changes( # slot lives in that subclass's slot_usage, not in the # top-level class. Use the domain class as context so # _plan_slot_changes targets the right YAML node. - effective_class = ( - (label_to_class.get(domain) or domain) - if domain else schema_class - ) seen_slot_names.add(slot_name) - _plan_slot_changes( - row, slot_name, schema, sheet_title, effective_class, - slot_origin, class_origin, changes, reporter, - ) + if slot_name not in slot_origin: + # Inherited from a vendored chemdcat-ap module (e.g. + # ChemicalReaction's used_reactant) — visible for + # reference on the effective class, but not owned by + # any editable module. Never modifiable via the inbox + # workflow, regardless of what the row contains. + reporter.info( + sheet_title, f"slot '{label}'", + f"Skipped: `{slot_name}` is inherited from a chemdcat-ap " + f"base class and is not modifiable via the inbox workflow " + f"(edit the YAML directly).", + ) + else: + effective_class = ( + (label_to_class.get(domain) or domain) + if domain else schema_class + ) + _plan_slot_changes( + row, slot_name, schema, sheet_title, effective_class, + slot_origin, class_origin, changes, reporter, + ) elif domain: # ── Unknown label + non-empty domain ─────────────────── @@ -558,6 +583,7 @@ def plan_changes( row, sheet_title, schema_class, schema, class_origin, slot_origin, label_to_slot, label_to_class, changes, reporter, + pending_class_names, ) else: @@ -566,6 +592,7 @@ def plan_changes( row, sheet_title, schema_class, schema, class_origin, slot_origin, label_to_slot, label_to_class, changes, reporter, + pending_class_names, ) elif row_type == "class": @@ -584,17 +611,38 @@ def plan_changes( row, sheet_title, schema_class, schema, class_origin, label_to_class, changes, reporter, + pending_class_names, ) else: seen_class_names.add(class_name) - _plan_class_changes( - row, class_name, schema, sheet_title, - class_origin, changes, reporter, - ) + if class_name not in class_origin: + # Inherited from a vendored chemdcat-ap module (e.g. + # Catalyst, Reactor) — visible for reference, but not + # owned by any editable module and never modifiable + # via the inbox workflow. + reporter.info( + sheet_title, f"class '{label}'", + f"Skipped: `{class_name}` is a chemdcat-ap base class " + f"and is not modifiable via the inbox workflow " + f"(edit the YAML directly).", + ) + else: + _plan_class_changes( + row, class_name, schema, sheet_title, + class_origin, changes, reporter, + ) # ── detect deletions ─────────────────────────────────────────────── + # Only slots/classes owned by an editable module can ever be + # "deleted" via the inbox workflow. Names inherited from a vendored + # chemdcat-ap module (not in slot_origin/class_origin) are skipped + # here entirely — they were never addable/removable via Excel in the + # first place, so their absence from a contributor's workbook is not + # a deletion signal. for slot_name in schema_slot_names: + if slot_name not in slot_origin: + continue if slot_name not in seen_slot_names: reporter.warning( sheet_title, f"slot `{slot_name}`", @@ -611,11 +659,13 @@ def plan_changes( "name": slot_name, "schema_class": schema_class, "_target": class_origin.get( - schema_class, SCHEMA_DIR / MODULE_FILES[-1] + schema_class, SCHEMA_DIR / DEFAULT_NEW_ELEMENT_FILE ), }) for class_name in schema_class_names: + if class_name not in class_origin: + continue if class_name not in seen_class_names: reporter.warning( sheet_title, f"class `{class_name}`", @@ -630,7 +680,7 @@ def plan_changes( "name": class_name, "schema_class": schema_class, "_target": class_origin.get( - class_name, SCHEMA_DIR / MODULE_FILES[-1] + class_name, SCHEMA_DIR / DEFAULT_NEW_ELEMENT_FILE ), }) @@ -647,6 +697,23 @@ def _effective(slot_def: dict, su: dict, key: str, default: Any = None) -> Any: return slot_def.get(key, default) +def _slot_owner_classes(schema: dict, slot_name: str) -> list[str]: + """ + Return every class that directly references slot_name, via its own + slots: list or a slot_usage entry. Used to warn when an edit to a slot + that has no existing slot_usage override for the row's class would fall + through to the slot's single, global definition -- silently changing it + for every other class that also uses it, not just the one being edited. + """ + owners: list[str] = [] + for cname, cdef in schema.get("classes", {}).items(): + if not isinstance(cdef, dict): + continue + if slot_name in (cdef.get("slots") or []) or slot_name in (cdef.get("slot_usage") or {}): + owners.append(cname) + return owners + + def _plan_slot_changes( row: dict, slot_name: str, @@ -660,10 +727,12 @@ def _plan_slot_changes( ) -> None: slot_def = get_slot_details(schema, slot_name) class_def = schema.get("classes", {}).get(schema_class, {}) + has_su_override = slot_name in (class_def.get("slot_usage") or {}) su = (class_def.get("slot_usage") or {}).get(slot_name) or {} target_su = class_origin.get(schema_class) target_slot = slot_origin.get(slot_name) + changes_before = len(changes) # -- M/R/O -- new_mro = row["mro"] @@ -760,6 +829,23 @@ def _plan_slot_changes( "_target_slot": target_slot, }) + # -- warn if this edit falls through to the slot's single global + # definition, shared by more than one class --------------------------- + if len(changes) > changes_before and not has_su_override: + owners = [c for c in _slot_owner_classes(schema, slot_name) if c != schema_class] + if owners: + owners_str = ", ".join(f"`{c}`" for c in sorted(owners)) + reporter.warning( + sheet, f"slot `{slot_name}`", + f"This edit changes `{slot_name}`'s single, global definition " + f"-- it is not scoped to `{schema_class}` alone. It will also " + f"change `{slot_name}` for: {owners_str}.", + hint="If you only meant to change it for this class, a " + "maintainer needs to add a slot_usage override for " + f"`{slot_name}` on `{schema_class}` first, rather than " + "editing the global slot.", + ) + def _plan_class_changes( row: dict, @@ -799,18 +885,22 @@ def _plan_new_slot( label_to_class: dict[str, str], changes: list, reporter: Reporter, + pending_class_names: set[str] | None = None, ) -> None: label = row["label"] domain = row["domain"] slot_name = _label_to_slot_name(label) + pending_class_names = pending_class_names or set() # Resolve the class that will own the new slot: # • empty domain → the sheet's top-level data class (schema_class) # • non-empty domain → the named subclass (e.g. ElectrochemicalReactor), # added to that class exactly like the top-level case. + # The domain may also be a class proposed as new + # elsewhere in this same submission (pending_class_names). if domain: owner_class = label_to_class.get(domain) or domain - if owner_class not in schema.get("classes", {}): + if owner_class not in schema.get("classes", {}) and owner_class not in pending_class_names: reporter.error( sheet, f"new slot '{label}'", f"The domain `{domain}` is not a recognised class. " @@ -845,7 +935,7 @@ def _plan_new_slot( # Range validation range_val = row["range"] or DEFAULT_RANGE - if not _valid_range(range_val, schema): + if not _valid_range(range_val, schema, pending_class_names): reporter.error( sheet, f"new slot '{label}'", f"Unknown range `{range_val}` for new slot.", @@ -853,7 +943,7 @@ def _plan_new_slot( ) return - target = class_origin.get(owner_class, SCHEMA_DIR / MODULE_FILES[-1]) + target = class_origin.get(owner_class, SCHEMA_DIR / DEFAULT_NEW_ELEMENT_FILE) reporter.info( sheet, f"new slot `{slot_name}`", f"Will add `{slot_name}` to `{owner_class}`.", @@ -883,10 +973,12 @@ def _plan_new_class( label_to_class: dict[str, str], changes: list, reporter: Reporter, + pending_class_names: set[str] | None = None, ) -> None: label = row["label"] domain = row["domain"] class_name = _label_to_class_name(label) + pending_class_names = pending_class_names or set() # Name conflict if class_name in schema.get("classes", {}): @@ -906,7 +998,12 @@ def _plan_new_class( ) return + # The parent may already exist, or be proposed as new elsewhere in this + # same submission (pending_class_names) -- e.g. "Chromatographic Methods" + # and "Gas Chromatography (GC)" added together, one as the other's parent. parent_name = label_to_class.get(domain) + if parent_name is None and _label_to_class_name(domain) in pending_class_names: + parent_name = _label_to_class_name(domain) if parent_name is None: reporter.error( sheet, f"new class '{label}'", @@ -916,7 +1013,7 @@ def _plan_new_class( ) return - target = class_origin.get(parent_name, SCHEMA_DIR / MODULE_FILES[-1]) + target = class_origin.get(parent_name, SCHEMA_DIR / DEFAULT_NEW_ELEMENT_FILE) reporter.info( sheet, f"new class `{class_name}`", f"Will add `{class_name}` as subclass of `{parent_name}`.", diff --git a/scripts/schema_to_excel.py b/scripts/schema_to_excel.py index 701a6ea99..bb6b1dd5c 100644 --- a/scripts/schema_to_excel.py +++ b/scripts/schema_to_excel.py @@ -47,6 +47,7 @@ sys.path.insert(0, str(_HERE)) from generate_schema_docs import ( # noqa: E402 + build_origin_index, get_all_class_slots, get_class_ranged_slot_usage, get_slot_details, @@ -77,6 +78,14 @@ FILL_CLASS = PatternFill("solid", fgColor="D9D9D9") FONT_CLASS = Font(bold=True, italic=True) +# Rows inherited from a vendored chemdcat-ap class (e.g. ChemicalReaction's +# used_reactant on CatalyticReaction) are shown for reference but are not +# editable via the Excel inbox workflow -- styled distinctly so contributors +# don't try to change them. +FILL_INHERITED = PatternFill("solid", fgColor="F2F2F2") +FONT_INHERITED = Font(italic=True, color="7F7F7F") +FONT_INHERITED_CLASS = Font(bold=True, italic=True, color="7F7F7F") + HEADERS = [ "label", "type", @@ -125,9 +134,16 @@ def _write_data_headers(ws) -> None: ws.freeze_panes = "A2" -def _append_row(ws, row_data: list, row_type: str, mro: str) -> None: +def _append_row(ws, row_data: list, row_type: str, mro: str, owned: bool = True) -> None: ws.append(row_data) - if row_type == "class": + if not owned: + # Inherited from a vendored chemdcat-ap class -- reference-only, + # not modifiable via the Excel inbox workflow. + for cell in ws[ws.max_row]: + cell.fill = FILL_INHERITED + cell.font = FONT_INHERITED_CLASS if row_type == "class" else FONT_INHERITED + cell.alignment = Alignment(wrap_text=True, vertical="top") + elif row_type == "class": for cell in ws[ws.max_row]: cell.fill = FILL_CLASS cell.font = FONT_CLASS @@ -189,7 +205,7 @@ def _blank(row: int) -> None: _section(r, "About this workbook"); r += 1 _row(r, "Project", "CoreMeta4Cat is a community-driven metadata initiative under NFDI4Cat that defines the minimum information required for reporting catalysis research data. It is built on the FAIR principles (Findable, Accessible, Interoperable, Reusable)."); r += 1 - _row(r, "Purpose", "This workbook is a structured reference overview of the CoreMeta4Cat vocabulary hierarchy, organised by data class. It is NOT a data entry form. Use it as a lookup reference when designing or annotating your own data sheets."); r += 1 + _row(r, "Purpose", "This workbook is both a structured reference of the CoreMeta4Cat vocabulary and the way to propose changes to it. Browse it as a lookup reference when designing or annotating your own data sheets -- or edit it and submit it as a pull request to propose new fields, classes, or corrections. See 'How to propose changes' below."); r += 1 _row(r, "Ground truth", "The LinkML schema files in src/coremeta4cat/schema/ are the authoritative source. This workbook is generated automatically from the schema via: just schema-to-excel"); r += 1 _row(r, "Source", "https://github.com/nfdi4cat/CoreMeta4Cat"); r += 1 _blank(r); r += 1 @@ -204,6 +220,15 @@ def _blank(row: int) -> None: _row(r, "Simulation", "Metadata fields for computational / theoretical catalysis studies."); r += 1 _blank(r); r += 1 + _section(r, "How to propose changes"); r += 1 + _row(r, "1. Edit", "Download this file, edit the Synthesis / Characterization / Reaction / Simulation sheets directly. Do not rename sheets or change column headers -- the automated check requires exact names."); r += 1 + _row(r, "2. Modify a field", "Edit an existing row's M/R/O, range, unit, uri, or description to propose a correction."); r += 1 + _row(r, "3. Add a field", "Add a new row: give it a label, set type to 'slot', and set domain to the class it belongs to (leave empty for a top-level field). You can add a new slot and the new class it points to in the same submission -- both rows will be validated together."); r += 1 + _row(r, "4. Submit", "Place the edited file at inbox/coremeta4cat_vocabulary.xlsx and open a pull request. An automated check validates the changes and reports any problems as a PR comment before a maintainer reviews it. See inbox/README.md for the full workflow."); r += 1 + _row(r, "Read-only rows", "Rows shown in grey italics (see Legend) are inherited from chemdcat-ap, the chemistry model CoreMeta4Cat builds on. They are shown for reference but cannot be added, changed, or removed through this workflow."); r += 1 + _row(r, "Shared fields", "Some fields (e.g. has_atmosphere) are defined once and reused across several classes -- editing one is a global change, not scoped to a single sheet section. The automated check will warn you and list every other class affected if this applies to your edit."); r += 1 + _blank(r); r += 1 + _section(r, "How to read the data sheets"); r += 1 _row(r, "label", "Human-readable name of the metadata field or class."); r += 1 _row(r, "type", "Whether this row is a 'slot' (a metadata field) or a 'class' (a structured sub-record type)."); r += 1 @@ -279,6 +304,8 @@ def _blank(row: int) -> None: "R", "Strongly encouraged. Omitting these fields significantly reduces the findability and reusability of the data."); r += 1 _color_row(r, "Optional (O)", FILL_O_LEGEND, FONT_WHITE, "O", "Useful additional context. Provide if available; not required for a valid record."); r += 1 + _color_row(r, "Inherited (read-only)", FILL_INHERITED, FONT_INHERITED, + "—", "Shown in grey italics: a field or class inherited from chemdcat-ap (the underlying chemistry data model CoreMeta4Cat is built on). These rows are for reference only — they cannot be added, changed, or removed via the Excel inbox workflow."); r += 1 _blank(r); r += 1 _section(r, "Column descriptions"); r += 1 @@ -307,7 +334,7 @@ def _blank(row: int) -> None: _section(r, "Notes"); r += 1 ws.row_dimensions[r].height = 32 nc = ws.cell(row=r, column=1, - value="This workbook is generated automatically from the LinkML schema. The schema is the authoritative source — do not edit this file manually. To regenerate: just schema-to-excel") + value="This workbook is generated automatically from the LinkML schema (just schema-to-excel), so the schema is always the ground truth. You can still edit a downloaded copy to propose changes -- see 'How to propose changes' on the Introduction sheet -- your edits just don't change the schema until they're submitted, validated, and merged.") nc.alignment = Alignment(horizontal="left", vertical="center", wrap_text=True) ws.merge_cells(start_row=r, start_column=1, end_row=r, end_column=3) @@ -383,21 +410,21 @@ def _collect_rows( uri = slot_def.get("slot_uri", "") desc = slot_def.get("description", "") label = snake_to_readable(slot_name) - rows.append((label, "slot", parent_label, mro, range_type, multivalued, inlined_as_list, unit, uri, desc)) + rows.append((label, "slot", parent_label, mro, range_type, multivalued, inlined_as_list, unit, uri, desc, slot_name)) if range_type and range_type in classes and not is_mixin(schema, range_type): class_def = classes[range_type] class_label = snake_to_readable(range_type) class_uri = class_def.get("class_uri", "") class_desc = class_def.get("description", "") - rows.append((class_label, "class", label, mro, "", "", "", "", class_uri, class_desc)) + rows.append((class_label, "class", label, mro, "", "", "", "", class_uri, class_desc, range_type)) _collect_rows(schema, range_type, class_label, context_class, seen, rows, depth + 1) for sub in get_subclasses(schema, range_type): sub_def = classes.get(sub, {}) sub_label = snake_to_readable(sub) sub_uri = sub_def.get("class_uri", "") sub_desc = sub_def.get("description", "") - rows.append((sub_label, "class", class_label, mro, "", "", "", "", sub_uri, sub_desc)) + rows.append((sub_label, "class", class_label, mro, "", "", "", "", sub_uri, sub_desc, sub)) _collect_rows(schema, sub, sub_label, context_class, seen | {range_type}, rows, depth + 2) for su_name, synthetic in get_class_ranged_slot_usage(schema, class_name): @@ -411,29 +438,43 @@ def _collect_rows( uri = synthetic.get("slot_uri", "") desc = synthetic.get("description", "") su_label = snake_to_readable(su_name) - rows.append((su_label, "slot", parent_label, mro, rng, multivalued, inlined_as_list, unit, uri, desc)) + rows.append((su_label, "slot", parent_label, mro, rng, multivalued, inlined_as_list, unit, uri, desc, su_name)) if rng and rng in classes and not is_mixin(schema, rng): class_def = classes[rng] class_label = snake_to_readable(rng) class_uri = class_def.get("class_uri", "") class_desc = class_def.get("description", "") - rows.append((class_label, "class", su_label, mro, "", "", "", "", class_uri, class_desc)) + rows.append((class_label, "class", su_label, mro, "", "", "", "", class_uri, class_desc, rng)) _collect_rows(schema, rng, class_label, class_name, seen, rows, depth + 1) for sub in get_subclasses(schema, rng): sub_def = classes.get(sub, {}) sub_label = snake_to_readable(sub) sub_uri = sub_def.get("class_uri", "") sub_desc = sub_def.get("description", "") - rows.append((sub_label, "class", class_label, mro, "", "", "", "", sub_uri, sub_desc)) + rows.append((sub_label, "class", class_label, mro, "", "", "", "", sub_uri, sub_desc, sub)) _collect_rows(schema, sub, sub_label, class_name, seen | {rng}, rows, depth + 2) -def build_sheet(wb: openpyxl.Workbook, schema: dict, sheet_title: str, class_name: str | None = None) -> None: +def build_sheet( + wb: openpyxl.Workbook, + schema: dict, + sheet_title: str, + class_name: str | None = None, + slot_origin: dict | None = None, + class_origin: dict | None = None, +) -> None: if class_name is None: class_name = CLASS_MAP.get(sheet_title, sheet_title) ws = wb.create_sheet(title=sheet_title) _write_data_headers(ws) + # Ownership checking is opt-in: callers that don't pass slot_origin/ + # class_origin (e.g. existing tests building a bare sheet) get today's + # exact appearance, with no row treated as "not owned." + check_ownership = slot_origin is not None or class_origin is not None + slot_origin = slot_origin or {} + class_origin = class_origin or {} + rows: list = [] _collect_rows(schema, class_name, "", class_name, set(), rows) @@ -443,7 +484,10 @@ def build_sheet(wb: openpyxl.Workbook, schema: dict, sheet_title: str, class_nam if key in seen_labels: continue seen_labels.add(key) - _append_row(ws, list(row), row[1], row[3]) + row_type, raw_name = row[1], row[10] + origin = slot_origin if row_type == "slot" else class_origin + owned = (raw_name in origin) if check_ownership else True + _append_row(ws, list(row[:10]), row_type, row[3], owned=owned) _auto_width(ws) @@ -455,6 +499,7 @@ def build_sheet(wb: openpyxl.Workbook, schema: dict, sheet_title: str, class_nam def main(schema_dir: str, output_path: str) -> None: print(f"\nLoading CoreMeta4Cat modules from: {schema_dir}") schema = load_merged_schema(schema_dir) + slot_origin, class_origin = build_origin_index(schema_dir) wb = openpyxl.Workbook() wb.remove(wb.active) @@ -470,7 +515,7 @@ def main(schema_dir: str, output_path: str) -> None: for sheet_title in ["Synthesis", "Characterization", "Reaction", "Simulation"]: print(f" Building sheet: {sheet_title}") - build_sheet(wb, schema, sheet_title) + build_sheet(wb, schema, sheet_title, slot_origin=slot_origin, class_origin=class_origin) out = Path(output_path) out.parent.mkdir(parents=True, exist_ok=True) diff --git a/src/coremeta4cat/schema/chemical_reaction_ap.yaml b/src/coremeta4cat/schema/chemical_reaction_ap.yaml index b3f77e75c..b8a85072b 100644 --- a/src/coremeta4cat/schema/chemical_reaction_ap.yaml +++ b/src/coremeta4cat/schema/chemical_reaction_ap.yaml @@ -137,8 +137,6 @@ classes: mixins: - ChemicalSubstanceMixin description: A chemical substance that is produced by a ChemicalReaction. - exact_mappings: - - VOC4CAT:0000194 close_mappings: - ENVO:2000000 @@ -152,7 +150,6 @@ classes: - has_molar_equivalent exact_mappings: - VOC4CAT:0000194 - - NCIT:C48810 close_mappings: - CHEBI:35223 diff --git a/tests/test_inbox_to_schema.py b/tests/test_inbox_to_schema.py index ee2bed4d2..c0418dfe2 100644 --- a/tests/test_inbox_to_schema.py +++ b/tests/test_inbox_to_schema.py @@ -282,3 +282,191 @@ def test_new_string_slot_writes_range_and_second_run_is_noop(tmp_path, monkeypat assert not slot_changes, ( f"second run was not idempotent for '{name}': {slot_changes}" ) + + +# ── inheritance-aware editability tests ────────────────────────────────────── +# +# CatalyticReaction is_a ChemicalReaction (chemdcat-ap): get_all_class_slots +# now returns chemdcat-ap-inherited slots (e.g. used_reactant, used_catalyst, +# has_reaction_step) alongside CatalyticReaction's own slots. These tests pin +# that inherited, vendored names are visible for reference but are never +# treated as deletable or editable via the inbox workflow -- regression guard +# for the false-positive deletion / silent-edit risk this introduced. + +def test_inherited_slot_absent_from_workbook_is_not_flagged_for_deletion(indexes): + """A workbook containing only CatalyticReaction's own (pre-inheritance) + slots -- i.e. missing every chemdcat-ap-inherited slot such as + used_reactant/used_catalyst/has_reaction_step -- must not propose deleting + any of those inherited slots or the vendored classes reachable through them + (Reactor, Catalyst, ChemicalProduct, ...). They were never addable/ + removable via Excel, so their absence is not a deletion signal.""" + schema = indexes[0] + own_only = [ + "catalyst_quantity", "catalyst_type", "catalyst_form", + "reaction_name", "reactor_temperature_range", "has_atmosphere", + "experiment_pressure", "feed_composition_range", + "has_experiment_duration", "product_identification_method", + ] + inherited = set(ib.get_all_class_slots(schema, "CatalyticReaction")) - set(own_only) + assert inherited, "precondition: CatalyticReaction must have inherited slots" + + excel = {"Reaction": [_slot_row(ib.snake_to_readable(n)) for n in own_only]} + changes, reporter = _plan(indexes, excel) + + deleted_names = {c["name"] for c in changes if c["type"] in ("slot_delete", "class_delete")} + assert not (deleted_names & inherited), ( + f"inherited names were incorrectly flagged for deletion: {deleted_names & inherited}" + ) + + +def test_inherited_slot_present_in_workbook_is_not_editable(indexes): + """A row for a known, inherited chemdcat-ap slot (e.g. 'used reactant') + that differs from the schema (different M/R/O, URI, description) must not + produce any change -- it is display-only, never modifiable via inbox.""" + schema, slot_origin = indexes[0], indexes[1] + assert "used_reactant" not in slot_origin, ( + "precondition: used_reactant must be a vendored (non-editable) slot" + ) + + row = _slot_row( + "used reactant", mro="M", uri="FAKE:000001", + description="a hijacked description", + ) + excel = {"Reaction": [row]} + changes, reporter = _plan(indexes, excel) + + assert not any(c.get("name") == "used_reactant" for c in changes) + assert not reporter.has_errors + + +def test_inherited_class_present_in_workbook_is_not_editable(indexes): + """A class row for a known, inherited chemdcat-ap class (e.g. 'Catalyst') + that differs from the schema must not produce any change.""" + schema, slot_origin, class_origin = indexes[0], indexes[1], indexes[2] + assert "Catalyst" not in class_origin, ( + "precondition: Catalyst must be a vendored (non-editable) class" + ) + + row = _slot_row("Catalyst", description="a hijacked description") + row["type"] = "class" + excel = {"Reaction": [row]} + changes, reporter = _plan(indexes, excel) + + assert not any(c.get("name") == "Catalyst" for c in changes) + assert not reporter.has_errors + + +def test_own_slot_absent_from_workbook_is_still_flagged_for_deletion(indexes): + """Regression guard for the fix itself: a genuinely owned/editable slot + that is missing from the workbook must still be detected as a deletion -- + the inheritance-awareness fix must not silently disable deletion detection + for editable slots too.""" + schema = indexes[0] + # A minimal, otherwise-complete-looking workbook missing one own slot. + own_minus_one = [ + "catalyst_type", "reactor_temperature_range", + "has_atmosphere", "experiment_pressure", "feed_composition_range", + "has_experiment_duration", "product_identification_method", + ] + excel = {"Reaction": [_slot_row(ib.snake_to_readable(n)) for n in own_minus_one]} + changes, reporter = _plan(indexes, excel) + + assert any( + c["type"] == "slot_delete" and c["name"] == "catalyst_quantity" + for c in changes + ) + + +# ── same-batch forward-reference tests ─────────────────────────────────────── +# +# A larger submission commonly adds a new slot AND the new class it ranges +# over (or a new class AND its new parent class) together. Without a +# same-batch pre-scan, this always failed: validation only ever saw the +# schema as it existed before the batch, so any forward reference to a class +# defined elsewhere in the same sheet looked "unknown" regardless of row +# order. These tests pin the fix. + +def test_new_slot_referencing_new_class_in_same_batch_resolves(indexes): + """A new slot whose range names a class that is ALSO new in this same + submission must resolve without error, not fail with 'unknown range'.""" + class_label = "QA Forward Ref Technique" + class_name = ib._label_to_class_name(class_label) + assert class_name not in indexes[0].get("classes", {}) + + class_row = _slot_row(class_label, domain="ProductIdentificationMethod") + class_row["type"] = "class" + slot_row = _slot_row("qa forward ref method", range_=class_name, mro="R") + + changes, reporter = _plan(indexes, {"Reaction": [slot_row, class_row]}) + + assert not reporter.has_errors, [d.message for d in reporter._diags if d.level == "error"] + assert any(c["type"] == "slot_add" and c["range"] == class_name for c in changes) + assert any(c["type"] == "class_add" and c["name"] == class_name for c in changes) + + +def test_new_class_with_new_parent_in_same_batch_resolves(indexes): + """A new class whose domain (parent) is ALSO new in this same submission + must resolve without error, not fail with 'domain not recognised'.""" + parent_label = "QA Forward Ref Parent" + child_label = "QA Forward Ref Child" + parent_name = ib._label_to_class_name(parent_label) + child_name = ib._label_to_class_name(child_label) + assert parent_name not in indexes[0].get("classes", {}) + + parent_row = _slot_row(parent_label, domain="ProductIdentificationMethod") + parent_row["type"] = "class" + child_row = _slot_row(child_label, domain=parent_label) + child_row["type"] = "class" + + changes, reporter = _plan(indexes, {"Reaction": [parent_row, child_row]}) + + assert not reporter.has_errors, [d.message for d in reporter._diags if d.level == "error"] + assert any(c["type"] == "class_add" and c["name"] == parent_name for c in changes) + assert any( + c["type"] == "class_add" and c["name"] == child_name and c["is_a"] == parent_name + for c in changes + ) + + +# ── shared/global-slot-change warning tests ────────────────────────────────── + +def test_shared_slot_edit_warns_about_other_owner_classes(indexes): + """Editing a field on a slot that has no existing slot_usage override and + is directly used by more than one class must warn, naming the other + classes it will also affect -- the edit changes the slot's single global + definition, not something scoped to the row's class.""" + schema = indexes[0] + owners = ib._slot_owner_classes(schema, "has_atmosphere") + assert len(owners) > 1, "precondition: has_atmosphere must be genuinely shared" + + excel = {"Reaction": [_slot_row("has atmosphere", uri="FAKE:000001")]} + _, reporter = _plan(indexes, excel) + + shared_warnings = [ + d for d in reporter._diags + if d.level == "warning" + and d.context == "slot `has_atmosphere`" + and "global definition" in d.message + ] + assert len(shared_warnings) == 1 + for other in owners: + if other != "CatalyticReaction": + assert other in shared_warnings[0].message + + +def test_non_shared_slot_edit_does_not_warn_about_sharing(indexes): + """Editing a slot used by only one class must not trigger the shared-slot + warning, even though other warnings (e.g. a range change) may still + legitimately fire.""" + schema = indexes[0] + owners = ib._slot_owner_classes(schema, "reactor_working_volume") + assert owners == ["CSTR"], "precondition: reactor_working_volume must be single-owner" + + excel = {"Reaction": [_slot_row("reactor working volume", uri="FAKE:000002", domain="CSTR")]} + _, reporter = _plan(indexes, excel) + + shared_warnings = [ + d for d in reporter._diags + if d.level == "warning" and "global definition" in d.message + ] + assert not shared_warnings From af16ff6b89bff427a67b28082094db77bce04839 Mon Sep 17 00:00:00 2001 From: HendrikBorgelt <84382772+HendrikBorgelt@users.noreply.github.com> Date: Tue, 14 Jul 2026 14:58:14 +0200 Subject: [PATCH 2/7] Fix modelling/mapping errors and schema quality issues Fixes cross-contaminated ontology mappings (Catalyst/ChemicalProduct exact_mappings pointing at each other's terms, an overly-specific Duration class_uri, a wrong lense_mode slot_uri, HeatingRate's class_uri), sweeps 295 slots for correct is_a relation-typing, fixes multivalued anti-patterns on booleans/counts/min-max pairs, and resolves the reactant/used_reactant overlap left over from the chemdcat-ap inheritance change. Also fixes a self-referential recursion bug in the sunburst chart generator and adds the new precipitating_concentration/precursor_quantity CURIE fixes. Test fixtures updated to match the corrected slot names/ranges. --- scripts/generate_charts.py | 48 ++++- src/coremeta4cat/schema/coremeta4cat.yaml | 23 ++- .../coremeta4cat_characterization_ap.yaml | 167 +++++++++++----- .../schema/coremeta4cat_common.yaml | 131 +++++++++++- .../schema/coremeta4cat_simulation_ap.yaml | 95 ++++++++- .../schema/coremeta4cat_synthesis_ap.yaml | 75 ++++++- tests/data/valid/CatalysisDataset-001.yaml | 70 ++++++- tests/data/valid/CatalysisDataset-002.yaml | 186 ++++++++++++++++-- tests/data/valid/Characterization-001.yaml | 1 + tests/data/valid/Characterization-002.yaml | 1 + tests/data/valid/Characterization-003.yaml | 1 + tests/data/valid/Characterization-004.yaml | 1 + tests/data/valid/Simulation-001.yaml | 1 + tests/data/valid/Simulation-002.yaml | 1 + tests/data/valid/Synthesis-001.yaml | 3 +- tests/data/valid/Synthesis-002.yaml | 1 + 16 files changed, 698 insertions(+), 107 deletions(-) diff --git a/scripts/generate_charts.py b/scripts/generate_charts.py index caa5f92c5..e7b4d4ded 100644 --- a/scripts/generate_charts.py +++ b/scripts/generate_charts.py @@ -97,6 +97,22 @@ def _add_node( hover.append(hover_text) +def _class_is_a_chain(schema: dict, class_name: str) -> set[str]: + """Return class_name plus every ancestor reachable via is_a. + + Climbs only within the locally merged/vendored schema; silently stops + at an external, unvendored ancestor (same convention as + get_all_class_slots in generate_schema_docs.py). + """ + classes = schema.get("classes", {}) + chain: set[str] = set() + current: Optional[str] = class_name + while current and current not in chain: + chain.add(current) + current = classes.get(current, {}).get("is_a") + return chain + + def _build_tree_for_class( schema: dict, class_name: str, @@ -110,15 +126,27 @@ def _build_tree_for_class( context_class: str, seen_classes: Optional[set] = None, depth: int = 0, + root_chain: Optional[frozenset[str]] = None, ) -> None: """ Recursively add schema slots (and their sub-classes) as sunburst nodes. Each slot becomes a node whose colour reflects its M/R/O status. If a slot's range is another schema class, that class's own slots are added as children, preserving the visual nesting of the original charts. + + `root_chain` is the chart's own root class plus its is_a ancestors + (computed once by the caller). A slot whose range is itself part of + that chain -- e.g. Reaction's has_reaction_step, range ChemicalReaction, + which is CatalyticReaction's own is_a parent -- is left as a leaf + instead of being fully re-expanded: its entire field set (used_reactor, + used_reactant, ...) is already shown once at the top of this same + chart, so expanding it again under the slot just duplicates the whole + chart inside one of its own wedges. """ if seen_classes is None: seen_classes = set() + if root_chain is None: + root_chain = frozenset(_class_is_a_chain(schema, class_name)) if class_name in seen_classes or depth > 6: return seen_classes = seen_classes | {class_name} @@ -137,15 +165,19 @@ def _build_tree_for_class( slot_id, slot_name.replace("_", " "), parent_id, color, f"{slot_name} ({mro})") - # If this slot points to a schema class, recurse into it - if range_type and range_type in classes and not is_mixin(schema, range_type): + # If this slot points to a schema class (and that class isn't + # already fully represented by this chart's own root), recurse into it + if (range_type and range_type in classes and not is_mixin(schema, range_type) + and range_type not in root_chain): _build_tree_for_class( schema, range_type, slot_id, ids, names, parents, colors, hover, - color_map, context_class, seen_classes, depth + 1, + color_map, context_class, seen_classes, depth + 1, root_chain, ) # Also expand any subclasses of the range class for sub in get_subclasses(schema, range_type): + if sub in root_chain: + continue sub_id = f"{slot_id}|{sub}" sub_color = color_map.get(mro, "#dddddd") _add_node(ids, names, parents, colors, hover, @@ -154,7 +186,7 @@ def _build_tree_for_class( _build_tree_for_class( schema, sub, sub_id, ids, names, parents, colors, hover, - color_map, context_class, seen_classes | {range_type}, depth + 2, + color_map, context_class, seen_classes | {range_type}, depth + 2, root_chain, ) # class-ranged slot_usage entries (gateway slots like realized_plan, had_input_entity) @@ -168,13 +200,15 @@ def _build_tree_for_class( _add_node(ids, names, parents, colors, hover, su_id, su_name.replace("_", " "), parent_id, color, f"{su_name} ({mro})") - if rng and rng in classes and not is_mixin(schema, rng): + if rng and rng in classes and not is_mixin(schema, rng) and rng not in root_chain: _build_tree_for_class( schema, rng, su_id, ids, names, parents, colors, hover, - color_map, class_name, seen_classes, depth + 1, + color_map, class_name, seen_classes, depth + 1, root_chain, ) for sub in get_subclasses(schema, rng): + if sub in root_chain: + continue sub_id = f"{su_id}|{sub}" sub_color = color_map.get(mro, "#dddddd") _add_node(ids, names, parents, colors, hover, @@ -183,7 +217,7 @@ def _build_tree_for_class( _build_tree_for_class( schema, sub, sub_id, ids, names, parents, colors, hover, - color_map, class_name, seen_classes | {rng}, depth + 2, + color_map, class_name, seen_classes | {rng}, depth + 2, root_chain, ) diff --git a/src/coremeta4cat/schema/coremeta4cat.yaml b/src/coremeta4cat/schema/coremeta4cat.yaml index 1b565b102..a7c2c4da0 100644 --- a/src/coremeta4cat/schema/coremeta4cat.yaml +++ b/src/coremeta4cat/schema/coremeta4cat.yaml @@ -18,24 +18,31 @@ description: |- rdf_type: CHMO:0000613 to classify the measurement type. - The four CoreMeta4Cat pillars are modelled as DCAT-AP-PLUS Activity subclasses, - following the same pattern as NMRSpectroscopy (is_a: DataGeneratingActivity): - - Synthesis --> is_a: DataGeneratingActivity + following the same pattern as NMRSpectroscopy (is_a: DataGeneratingActivity). + Synthesis, Characterization, and Simulation specialize CatalysisDataGeneratingActivity + (is_a: DataGeneratingActivity) rather than DataGeneratingActivity directly -- this + coremeta4cat-owned intermediate adds a type designator (activity_designator) so that + was_generated_by (typed CatalysisDataGeneratingActivity) can hold any of the three and + still resolve to the right concrete Python class when loaded. Likewise, is_about_activity + is typed CatalyticReaction directly (not the wider EvaluatedActivity) so it needs no + designator at all: + + Synthesis --> is_a: CatalysisDataGeneratingActivity Produces a catalyst (MaterialSample) as had_output_entity. The PreparationMethod (protocol) is linked via realized_plan. - Characterization --> is_a: DataGeneratingActivity + Characterization --> is_a: CatalysisDataGeneratingActivity Produces measurement data about a catalyst or reaction. The catalyst/sample is the evaluated_entity. The CharacterizationTechnique is linked via realized_plan. - Reaction --> is_a: EvaluatedActivity + Reaction --> is_a: CatalyticReaction (via ChemicalReaction, EvaluatedActivity) The catalytic process being studied, NOT a data-generating activity itself. Characterization datasets are about this. Analogous to the reaction being observed in a reaction monitoring dataset. - Simulation --> is_a: DataGeneratingActivity + Simulation --> is_a: CatalysisDataGeneratingActivity Generates computational data about a catalyst or reaction. The SimulationMethod (protocol) is linked via realized_plan. The simulation software is carried_out_by: Software. @@ -134,7 +141,7 @@ classes: description: |- The DataGeneratingActivity (Synthesis, Characterization, or Simulation) that produced this dataset. - range: DataGeneratingActivity + range: CatalysisDataGeneratingActivity recommended: true multivalued: true inlined_as_list: true @@ -142,7 +149,7 @@ classes: description: |- The catalytic Reaction that this dataset is about (e.g. a dataset of catalytic performance measurements is about the Reaction being studied). - range: EvaluatedActivity + range: CatalyticReaction recommended: true multivalued: true inlined_as_list: true diff --git a/src/coremeta4cat/schema/coremeta4cat_characterization_ap.yaml b/src/coremeta4cat/schema/coremeta4cat_characterization_ap.yaml index b35ceed74..74ea2a0bc 100644 --- a/src/coremeta4cat/schema/coremeta4cat_characterization_ap.yaml +++ b/src/coremeta4cat/schema/coremeta4cat_characterization_ap.yaml @@ -146,7 +146,7 @@ classes: # ==================== CHARACTERIZATION ACTIVITY ==================== Characterization: - is_a: DataGeneratingActivity + is_a: CatalysisDataGeneratingActivity class_uri: OBI:0000070 # planned process; specific technique via rdf_type description: |- A DataGeneratingActivity in which a catalyst sample or catalytic material @@ -186,6 +186,7 @@ classes: description: The CharacterizationTechnique (protocol) realized in this Characterization. range: CharacterizationTechnique required: true + inlined: true rdf_type: description: |- The type of characterization technique as an ontology term, e.g. @@ -195,7 +196,7 @@ classes: # ==================== CHARACTERIZATION TECHNIQUE (Plan) ==================== CharacterizationTechnique: - is_a: Plan + is_a: CatalysisPlan class_uri: OBI:0000272 # protocol abstract: true description: |- @@ -438,8 +439,7 @@ classes: class_uri: VOC4CAT:0000079 description: UV-Vis spectroscopy for electronic transitions, band gap, and concentration determination. slots: - - minimum_wavelength - - maximum_wavelength + - wavelength_range - path_length - solvent - has_concentration @@ -476,8 +476,7 @@ classes: description: Cyclic voltammetry for electrochemical activity, redox potential, and capacitance characterization. slots: - scan_rate - - minimum_potential - - maximum_potential + - scan_potential_range - step_size_potential - number_of_cycles @@ -539,8 +538,7 @@ classes: - carrier_gas - carrier_gas_purity - inlet_temperature - - minimum_oven_temperature - - maximum_oven_temperature + - oven_temperature_range - heating_ramp - has_heating_procedure - acquisition_mode @@ -594,18 +592,21 @@ slots: sample_description: description: Free-text description of the sample used in this characterization. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:sample_description multivalued: true sample_preparation: description: Sample preparation steps applied immediately before measurement. + is_a: has_qualitative_attribute range: string slot_uri: AFP:0001159 multivalued: true detector_type: description: Type of detector used in the measurement. + is_a: has_qualitative_attribute range: string slot_uri: AFR:0000317 multivalued: true @@ -614,12 +615,14 @@ slots: xray_source: description: X-ray source used (e.g. Cu K-alpha, Mo K-alpha, synchrotron). + is_a: has_qualitative_attribute range: string slot_uri: OBI:0001138 multivalued: true monochromator: description: Monochromator type or configuration used. + is_a: has_qualitative_attribute range: string slot_uri: CHMO:0002120 multivalued: true @@ -628,6 +631,7 @@ slots: has_energy_range: slot_uri: coremeta4cat:hasEnergyRange + is_a: has_quantitative_attribute range: QuantitativeRange description: |- Energy scan range (minimum -> maximum) as a QuantitativeRange. @@ -638,12 +642,14 @@ slots: gun_type: description: Type of electron gun (e.g. FEG, thermionic LaB6). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:gun_type multivalued: true acceleration_voltage: description: Acceleration voltage applied to the electron beam. + is_a: has_electric_potential range: ElectricPotential slot_uri: coremeta4cat:acceleration_voltage multivalued: true @@ -651,6 +657,7 @@ slots: magnification_setting: description: Magnification setting used for imaging. + is_a: has_quantitative_attribute range: float slot_uri: AFR:0002226 multivalued: true @@ -659,6 +666,7 @@ slots: has_temperature_range: slot_uri: coremeta4cat:hasTemperatureRange + is_a: has_quantitative_attribute range: QuantitativeRange description: |- Temperature programme range (start -> final temperature) as a QuantitativeRange. @@ -667,6 +675,7 @@ slots: initial_temperature: description: Initial temperature at the start of a thermal analysis run. + is_a: has_temperature range: Temperature slot_uri: NCIT:C164644 multivalued: true @@ -674,6 +683,7 @@ slots: final_temperature: description: Final temperature at the end of a thermal analysis run. + is_a: has_temperature range: Temperature slot_uri: NCIT:C164644 multivalued: true @@ -683,6 +693,7 @@ slots: has_mz_range: slot_uri: coremeta4cat:hasMzRange + is_a: has_quantitative_attribute range: QuantitativeRange description: |- Mass-to-charge ratio scan range (minimum -> maximum m/z) as a QuantitativeRange. @@ -693,6 +704,7 @@ slots: excitation_wavelength: description: Excitation wavelength used in photoluminescence measurement. + is_a: has_length range: LengthQuantity slot_uri: AFR:0002479 multivalued: true @@ -700,6 +712,7 @@ slots: emission_wavelength: description: Emission wavelength detected in photoluminescence measurement. + is_a: has_length range: LengthQuantity slot_uri: NCIT:C204101 multivalued: true @@ -707,6 +720,7 @@ slots: optical_filter: description: Optical filter used in the emission or excitation path. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:optical_filter multivalued: true @@ -715,30 +729,35 @@ slots: reference_electrode: description: Reference electrode used in electrochemical cell (e.g. Ag/AgCl, RHE). + is_a: has_qualitative_attribute range: string slot_uri: VOC4CAT:0007204 multivalued: true working_electrode: description: Working electrode used in electrochemical cell. + is_a: has_qualitative_attribute range: string slot_uri: VOC4CAT:0007202 multivalued: true counter_electrode: description: Counter electrode used in electrochemical cell. + is_a: has_qualitative_attribute range: string slot_uri: VOC4CAT:0007203 multivalued: true electrolyte_composition: description: Chemical composition of the electrolyte solution. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:electrolyte_composition multivalued: true electrolyte_concentration: description: Concentration of the electrolyte. + is_a: has_concentration range: Concentration slot_uri: coremeta4cat:electrolyte_concentration multivalued: true @@ -748,6 +767,7 @@ slots: has_two_theta_range: slot_uri: coremeta4cat:hasTwoThetaRange + is_a: has_quantitative_attribute range: QuantitativeRange description: |- 2theta diffraction scan range (minimum -> maximum 2theta angle) as a QuantitativeRange. @@ -756,6 +776,7 @@ slots: sample_spinning_speed: description: Sample spinning speed during XRD measurement. + is_a: has_angular_velocity range: AngularVelocity slot_uri: coremeta4cat:sample_spinning_speed multivalued: true @@ -765,30 +786,35 @@ slots: absorption_edge: description: X-ray absorption edge measured (e.g. K-edge, L3-edge). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:absorption_edge multivalued: true element_analyzed: description: Chemical element analysed (e.g. Fe, Cu, Pt). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:element_analyzed multivalued: true beamline_source: description: Synchrotron beamline or X-ray source identifier. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:beamline_source multivalued: true noise_of_measurement: description: Noise level of the XAS measurement (signal-to-noise ratio). + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:noise_of_measurement multivalued: true energy_resolution: description: Energy resolution of the spectrometer or monochromator. + is_a: has_energy range: EnergyQuantity slot_uri: AFR:0000950 multivalued: true @@ -798,6 +824,7 @@ slots: total_acquisition_time: description: Total time for XPS spectrum acquisition. + is_a: has_duration range: Duration slot_uri: coremeta4cat:total_acquisition_time multivalued: true @@ -805,6 +832,7 @@ slots: pass_energy: description: Analyser pass energy setting in XPS. + is_a: has_energy range: EnergyQuantity slot_uri: coremeta4cat:pass_energy multivalued: true @@ -812,6 +840,7 @@ slots: spot_size: description: X-ray spot size on the sample surface. + is_a: has_length range: LengthQuantity slot_uri: coremeta4cat:spot_size multivalued: true @@ -819,12 +848,13 @@ slots: lense_mode: description: Electron lens mode setting in XPS analyser. + is_a: has_qualitative_attribute range: string - slot_uri: VOC4CAT:0000108 multivalued: true charge_compensation: description: Charge compensation method applied during XPS measurement. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:charge_compensation multivalued: true @@ -833,6 +863,7 @@ slots: primary_energy: description: Primary electron beam energy for EDX excitation. + is_a: has_energy range: EnergyQuantity slot_uri: coremeta4cat:primary_energy multivalued: true @@ -840,6 +871,7 @@ slots: counting_time: description: X-ray counting time per point or spectrum. + is_a: has_duration range: Duration slot_uri: coremeta4cat:counting_time multivalued: true @@ -849,6 +881,7 @@ slots: has_wavenumber_range: slot_uri: coremeta4cat:hasWavenumberRange + is_a: has_quantitative_attribute range: QuantitativeRange description: |- Infrared wavenumber scan range (minimum -> maximum cm^-1) as a QuantitativeRange. @@ -857,12 +890,14 @@ slots: background_correction: description: Background correction method applied to IR spectra. + is_a: has_qualitative_attribute range: string slot_uri: AFP:0003721 multivalued: true adsorption_gas: description: Probe gas adsorbed during in-situ DRIFTS measurement. + is_a: had_input_entity range: ChemicalEntity slot_uri: coremeta4cat:adsorption_gas multivalued: true @@ -870,18 +905,21 @@ slots: diluting_reference: description: Reference material used to dilute the DRIFTS sample (e.g. KBr). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:diluting_reference multivalued: true ratio_reference_sample: description: Mass ratio of reference material to catalyst sample in DRIFTS cup. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:ratio_reference_sample multivalued: true background_correction_method: description: Specific background correction method used in DRIFTS. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:background_correction_method multivalued: true @@ -890,6 +928,7 @@ slots: excitation_laser_wavelength: description: Wavelength of excitation laser used in Raman spectroscopy. + is_a: has_length range: LengthQuantity slot_uri: AFR:0001594 multivalued: true @@ -897,6 +936,7 @@ slots: excitation_laser_power: description: Power of the excitation laser at the sample. + is_a: has_power range: PowerQuantity slot_uri: AFR:0001595 multivalued: true @@ -904,6 +944,7 @@ slots: filter_or_grating: description: Optical filter or grating used in Raman spectrometer. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:filter_or_grating multivalued: true @@ -912,12 +953,14 @@ slots: nucleus: description: NMR-active nucleus observed (e.g. 1H, 13C, 31P). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:nucleus multivalued: true irradiation_frequency: description: Irradiation frequency of the NMR spectrometer. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:irradiation_frequency multivalued: true @@ -926,12 +969,14 @@ slots: nmr_pulse_sequence: description: NMR pulse sequence used (e.g. zgpg30, dept). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:nmr_pulse_sequence multivalued: true nmr_sample_tube: description: NMR sample tube type (e.g. 5mm standard, Shigemi tube). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:nmr_sample_tube multivalued: true @@ -940,6 +985,7 @@ slots: image_resolution: description: Spatial resolution of SEM images. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:image_resolution multivalued: true @@ -948,6 +994,7 @@ slots: field_emitter: description: Type of field emitter used in FE-SEM instrument. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:field_emitter multivalued: true @@ -956,12 +1003,14 @@ slots: reducing_gas_composition: description: Composition of reducing gas used in TPR (e.g. 5% H2/Ar). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:reducing_gas_composition multivalued: true oxidizing_gas_composition: description: Composition of oxidising gas used in TPO (e.g. 5% O2/Ar). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:oxidizing_gas_composition multivalued: true @@ -970,12 +1019,14 @@ slots: adsorbate_gas: description: Adsorbate gas used in BET surface area measurement (e.g. N2, Ar). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:adsorbate_gas multivalued: true degassing_temperature: description: Temperature at which sample is degassed before BET measurement. + is_a: has_temperature range: Temperature slot_uri: coremeta4cat:degassing_temperature multivalued: true @@ -983,6 +1034,7 @@ slots: measurement_temperature: description: Temperature at which BET adsorption isotherm is measured (e.g. 77 K for N2). + is_a: has_temperature range: Temperature slot_uri: coremeta4cat:measurement_temperature multivalued: true @@ -990,6 +1042,7 @@ slots: pore_size_distribution_method: description: Method used for pore size distribution calculation (e.g. BJH, DFT, HK). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:pore_size_distribution_method multivalued: true @@ -998,12 +1051,14 @@ slots: elements_analyzed: description: List of elements analysed by combustion elemental analysis (e.g. C, H, N, S). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:elements_analyzed multivalued: true combustion_temperature: description: Combustion furnace temperature for elemental analysis. + is_a: has_temperature range: Temperature slot_uri: coremeta4cat:combustion_temperature multivalued: true @@ -1013,36 +1068,33 @@ slots: detection_limit: description: Detection limit of the analytical method. + is_a: has_quantitative_attribute range: float slot_uri: NCIT:C105701 multivalued: true matrix_effect_correction: description: Method used to correct for matrix effects in ICP-AES. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:matrix_effect_correction multivalued: true # ---- UV-Vis-specific ---- - minimum_wavelength: - description: Minimum wavelength of the UV-Vis scan range. - range: float - slot_uri: coremeta4cat:minimum_wavelength - multivalued: true - unit: - ucum_code: nm - - maximum_wavelength: - description: Maximum wavelength of the UV-Vis scan range. - range: float - slot_uri: coremeta4cat:maximum_wavelength + wavelength_range: + description: |- + Wavelength range of the UV-Vis scan, provided as a QuantitativeRange + with min_value and max_value (unit_code: "nm"). + is_a: has_quantitative_attribute + range: QuantitativeRange + slot_uri: coremeta4cat:wavelength_range multivalued: true - unit: - ucum_code: nm + inlined_as_list: true path_length: description: Optical path length of the measurement cell. + is_a: has_quantitative_attribute range: float slot_uri: AFQ:0000268 multivalued: true @@ -1053,12 +1105,14 @@ slots: emission_range: description: Wavelength range over which emission is detected. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:emission_range multivalued: true slit_width: description: Spectrometer entrance or exit slit width. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:slit_width multivalued: true @@ -1067,44 +1121,41 @@ slots: lifetime_fitting_model: description: Mathematical model used for fluorescence lifetime fitting (e.g. mono-exponential, bi-exponential). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:lifetime_fitting_model multivalued: true number_of_shots: description: Number of laser shots accumulated per measurement point. + is_a: has_quantitative_attribute range: integer slot_uri: coremeta4cat:number_of_shots - multivalued: true # ---- CyclicVoltammetry-specific ---- scan_rate: description: Potential scan rate in cyclic voltammetry. + is_a: has_quantitative_attribute range: float slot_uri: VOC4CAT:0007213 multivalued: true unit: ucum_code: mV/s - minimum_potential: - description: Lower potential limit in cyclic voltammetry. - range: float - slot_uri: coremeta4cat:minimum_potential - multivalued: true - unit: - ucum_code: V - - maximum_potential: - description: Upper potential limit in cyclic voltammetry. - range: float - slot_uri: coremeta4cat:maximum_potential + scan_potential_range: + description: |- + Potential window scanned in cyclic voltammetry, provided as a + QuantitativeRange with min_value and max_value (unit_code: "V"). + is_a: has_quantitative_attribute + range: QuantitativeRange + slot_uri: coremeta4cat:scan_potential_range multivalued: true - unit: - ucum_code: V + inlined_as_list: true step_size_potential: description: Potential step size in cyclic voltammetry. + is_a: has_quantitative_attribute range: float slot_uri: VOC4CAT:0007218 multivalued: true @@ -1115,12 +1166,14 @@ slots: electrode_configuration: description: Configuration of electrodes used in conductivity measurement (e.g. 2-probe, 4-probe). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:electrode_configuration multivalued: true ac_frequency: description: Frequency of AC signal applied in impedance or conductivity measurement. + is_a: has_quantitative_attribute range: float slot_uri: VOC4CAT:0007239 multivalued: true @@ -1129,12 +1182,14 @@ slots: ac_dc_mode: description: AC or DC measurement mode used in conductivity measurement. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:ac_dc_mode multivalued: true sample_geometry: description: Geometry of the sample used in conductivity measurement (e.g. pellet, thin film). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:sample_geometry multivalued: true @@ -1143,6 +1198,7 @@ slots: light_wavelength: description: Wavelength of the laser used in DLS measurement. + is_a: has_length range: LengthQuantity slot_uri: VOC4CAT:0000176 multivalued: true @@ -1150,6 +1206,7 @@ slots: scattering_angle: description: Scattering angle at which intensity is detected in DLS. + is_a: has_plane_angle range: PlaneAngle slot_uri: coremeta4cat:scattering_angle multivalued: true @@ -1157,12 +1214,14 @@ slots: refractive_index: description: Refractive index of the solvent used in DLS measurement. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:refractive_index multivalued: true measurement_duration: description: Duration of a single DLS acquisition. + is_a: has_duration range: Duration slot_uri: coremeta4cat:measurement_duration multivalued: true @@ -1172,6 +1231,7 @@ slots: spray_voltage: description: Spray voltage applied in electrospray ionisation. + is_a: has_electric_potential range: ElectricPotential slot_uri: CHMO:0002792 multivalued: true @@ -1179,6 +1239,7 @@ slots: capillary_temperature: description: Capillary or desolvation temperature in ESI source. + is_a: has_temperature range: Temperature slot_uri: coremeta4cat:capillary_temperature multivalued: true @@ -1186,6 +1247,7 @@ slots: solvent_composition: description: Solvent composition used for ESI spray solution. + is_a: has_qualitative_attribute range: string slot_uri: VOC4CAT:0007246 multivalued: true @@ -1194,33 +1256,32 @@ slots: carrier_gas_purity: description: Purity grade of the carrier gas used in GC. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:carrier_gas_purity multivalued: true inlet_temperature: description: GC inlet temperature. + is_a: has_temperature range: Temperature slot_uri: coremeta4cat:inlet_temperature multivalued: true inlined_as_list: true - minimum_oven_temperature: - description: Minimum oven temperature in GC temperature programme. - range: Temperature - slot_uri: coremeta4cat:minimum_oven_temperature - multivalued: true - inlined_as_list: true - - maximum_oven_temperature: - description: Maximum oven temperature in GC temperature programme. - range: Temperature - slot_uri: coremeta4cat:maximum_oven_temperature + oven_temperature_range: + description: |- + Oven temperature range in the GC temperature programme, provided as a + QuantitativeRange with min_value and max_value (unit_code: "Cel"). + is_a: has_quantitative_attribute + range: QuantitativeRange + slot_uri: coremeta4cat:oven_temperature_range multivalued: true inlined_as_list: true heating_ramp: description: Temperature ramp rate in GC oven programme. + is_a: has_heating_rate range: HeatingRate slot_uri: VOC4CAT:0008116 multivalued: true @@ -1228,12 +1289,14 @@ slots: acquisition_mode: description: Mass spectrometer acquisition mode (e.g. full scan, SIM, SRM). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:acquisition_mode multivalued: true solvent_delay: description: Solvent delay time before MS acquisition begins. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:solvent_delay multivalued: true @@ -1242,12 +1305,14 @@ slots: trace_ion_detection: description: Trace ion detection setting or threshold. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:trace_ion_detection multivalued: true split_ratio: description: Split ratio at the GC injector. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:split_ratio multivalued: true @@ -1256,6 +1321,7 @@ slots: eluent: description: Eluent or mobile phase used in chromatography. + is_a: carried_out_by range: ChemicalEntity slot_uri: AFRL:0000011 multivalued: true @@ -1263,18 +1329,21 @@ slots: calibration_standard: description: Calibration standard used for molecular weight or retention time calibration. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:calibration_standard multivalued: true gradient_program: description: Gradient elution programme used in HPLC-MS. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:gradient_program multivalued: true ionization_mode: description: Ionisation mode used in HPLC-MS (e.g. positive, negative, APCI, ESI). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:ionization_mode multivalued: true diff --git a/src/coremeta4cat/schema/coremeta4cat_common.yaml b/src/coremeta4cat/schema/coremeta4cat_common.yaml index e643dcd91..dc5df8c13 100644 --- a/src/coremeta4cat/schema/coremeta4cat_common.yaml +++ b/src/coremeta4cat/schema/coremeta4cat_common.yaml @@ -56,6 +56,45 @@ imports: classes: + CatalysisPlan: + is_a: Plan + abstract: true + description: |- + A CoreMeta4Cat specialization of DCAT-AP-PLUS's Plan that adds a + persistent identifier (id). Plan itself (external, dcat-ap-plus) only + lists title/description -- every CoreMeta4Cat protocol, technique, and + method class needs to be independently citable and cross-referenceable + (e.g. linked to from multiple Reaction/Characterization instances that + reuse the same protocol), so id is added once here rather than + repeated on each of PreparationMethod, CharacterizationTechnique, + SimulationMethod, and ProductIdentificationMethod individually. + slots: + - id + + CatalysisDataGeneratingActivity: + is_a: DataGeneratingActivity + abstract: true + description: |- + A CoreMeta4Cat specialization of DCAT-AP-PLUS's DataGeneratingActivity + that adds a type designator (activity_designator). Synthesis, + Characterization, and Simulation all specialize this class instead of + DataGeneratingActivity directly, so that when one of them is nested + inside CatalysisDataset.was_generated_by, the LinkML Python loader can + tell which concrete subclass a given entry is meant to be and keep its + subclass-specific fields (e.g. Characterization.realized_plan) rather + than falling back to DataGeneratingActivity's own generic slot + definitions. + + activity_designator is filled in automatically by LinkML when a class + is instantiated directly (e.g. loading a standalone Synthesis-NNN.yaml + file) -- it does not need to be set by hand there. It only needs to be + set explicitly in the source data when a Synthesis/Characterization/ + Simulation instance is nested inside another object's was_generated_by + list (e.g. in a combined CatalysisDataset file), so the loader knows + which of the three to construct. + slots: + - activity_designator + QuantitativeRange: class_uri: qudt:Quantity mixins: @@ -101,7 +140,7 @@ classes: Duration: is_a: QuantitativeAttribute - class_uri: VOC4CAT:0008120 + class_uri: qudt:Quantity description: A quantitative measure of elapsed time (duration of a process step). close_mappings: - PATO:0001309 @@ -115,8 +154,10 @@ classes: HeatingRate: is_a: QuantitativeAttribute - class_uri: VOC4CAT:0008116 + class_uri: qudt:Quantity description: Rate of temperature change per unit time during a thermal ramp. + exact_mappings: + - VOC4CAT:0008116 AngularVelocity: is_a: QuantitativeAttribute @@ -139,6 +180,16 @@ classes: close_mappings: - PATO:0001464 + ElectricCurrent: + is_a: QuantitativeAttribute + class_uri: qudt:Quantity + description: A quantitative measure of electric current (e.g. faradaic current in an electrochemical cell). + + Area: + is_a: QuantitativeAttribute + class_uri: qudt:Quantity + description: A quantitative measure of surface area (e.g. active electrode area). + PowerQuantity: is_a: QuantitativeAttribute class_uri: qudt:Quantity @@ -223,6 +274,19 @@ classes: slots: + # ---- Type designator (LinkML polymorphism support) ---- + + activity_designator: + slot_uri: rdf:type + range: string + designates_type: true + description: |- + Internal type designator for CatalysisDataGeneratingActivity subclasses + (Synthesis, Characterization, Simulation). Only needs to be set by hand + when nesting one of these inside another object's was_generated_by list + (e.g. in a combined CatalysisDataset file) -- LinkML fills it in + automatically when a class is instantiated directly. + # ---- Generic domain has_X slots ---- has_flow_rate: @@ -333,6 +397,7 @@ slots: has_calcination_temperature_range: slot_uri: coremeta4cat:hasCalcinationTemperatureRange + is_a: has_quantitative_attribute range: QuantitativeRange description: |- Temperature range of the calcination programme (initial -> final temperature), @@ -544,12 +609,13 @@ slots: number_of_cycles: description: Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles). + is_a: has_quantitative_attribute range: integer slot_uri: VOC4CAT:0008123 - multivalued: true carrier_gas: description: Carrier gas used in a process (e.g. in GC analysis or ALD deposition). + is_a: carried_out_by range: ChemicalEntity slot_uri: coremeta4cat:carrier_gas multivalued: true @@ -557,6 +623,7 @@ slots: dispersant: description: Dispersant used (e.g. in DLS measurement or flame spray pyrolysis). + is_a: carried_out_by range: ChemicalEntity slot_uri: coremeta4cat:dispersant multivalued: true @@ -567,6 +634,7 @@ slots: drying_device: description: Device used for drying (e.g. oven, rotary evaporator). + is_a: has_qualitative_attribute range: string slot_uri: VOC4CAT:0008122 multivalued: true @@ -576,24 +644,27 @@ slots: step_size: description: Step size for a scan (angle, wavelength, energy, or potential). + is_a: has_quantitative_attribute range: float slot_uri: AFR:0000950 multivalued: true resolution: description: Resolution of a measurement or detector. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:resolution multivalued: true number_of_scans: description: Number of scans or accumulations recorded. + is_a: has_quantitative_attribute range: integer slot_uri: coremeta4cat:number_of_scans - multivalued: true solvent: description: Solvent used in a process or sample preparation. + is_a: carried_out_by range: ChemicalEntity slot_uri: VOC4CAT:0007246 multivalued: true @@ -601,36 +672,42 @@ slots: external_standard: description: External standard used for quantification or calibration. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:external_standard multivalued: true internal_standard: description: Internal standard used for quantification or calibration. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:internal_standard multivalued: true calibration_method: description: Calibration method applied during a measurement. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:calibration_method multivalued: true column_type: description: Type of chromatographic column used. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:column_type multivalued: true filtration_device: description: Device used for filtration. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:filtration_device multivalued: true filter_type: description: Type of filter membrane or medium used. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:filter_type multivalued: true @@ -658,6 +735,11 @@ enums: electrocatalysis: description: Electrocatalysis — catalysis of electrochemical reactions. meaning: VOC4CAT:0000216 + photocatalysis: + description: |- + Photocatalysis — catalysis of a chemical reaction through the + absorption of sufficient light energy by a photocatalyst. + meaning: VOC4CAT:0000001 hybrid_catalysis: description: Hybrid catalysis — combination of two or more catalytic approaches. other: @@ -694,3 +776,44 @@ enums: description: Thin film deposited on a substrate. other: description: Other sample state. + + CatalystFormEnum: + description: |- + Enumeration of the physical form/presentation of a catalyst as loaded + into a reactor -- a separate axis from CatalysisResearchFieldEnum + (which describes the catalytic regime, e.g. heterogeneous/homogeneous). + permissible_values: + thin_film: + description: A catalyst introduced to the reaction chamber as a thin film on a substrate. + meaning: VOC4CAT:0000019 + bulk: + description: A catalyst that consists mainly of the active material throughout its volume. + meaning: VOC4CAT:0007015 + powdered: + description: A catalyst introduced to the reaction chamber as a loose powder. + meaning: VOC4CAT:0000017 + deposited_sample: + description: A thin film of the catalyst deposited on a substrate for characterization purposes. + meaning: VOC4CAT:0000038 + supported: + description: A catalyst where the active material is dispersed on a support material. + meaning: VOC4CAT:0007034 + other: + description: Other catalyst form not covered by the above terms. + + CellOperatingModeEnum: + description: |- + Enumeration of the functional mode of an electrochemical cell, based + on the direction of energy conversion. + permissible_values: + galvanic: + description: |- + An electrochemical cell that converts chemical energy into + electrical energy via a spontaneous reaction. + meaning: VOC4CAT:0007256 + electrolytic: + description: |- + An electrochemical cell that consumes electrical energy to drive + a non-spontaneous reaction. + other: + description: Other cell operating mode. diff --git a/src/coremeta4cat/schema/coremeta4cat_simulation_ap.yaml b/src/coremeta4cat/schema/coremeta4cat_simulation_ap.yaml index c22e29606..e9b3ff59e 100644 --- a/src/coremeta4cat/schema/coremeta4cat_simulation_ap.yaml +++ b/src/coremeta4cat/schema/coremeta4cat_simulation_ap.yaml @@ -89,7 +89,7 @@ classes: # ==================== SIMULATION (DataGeneratingActivity) ==================== Simulation: - is_a: DataGeneratingActivity + is_a: CatalysisDataGeneratingActivity class_uri: NCIT:C48936 # computer simulation description: |- A DataGeneratingActivity in which a catalyst, catalytic material, or @@ -117,6 +117,7 @@ classes: The SimulationMethod (protocol) realized in this Simulation. range: SimulationMethod required: true + inlined: true carried_out_by: description: |- The simulation software used, provided as a Software agent instance. @@ -135,7 +136,7 @@ classes: # ==================== SIMULATION METHODS (Plans) ==================== SimulationMethod: - is_a: Plan + is_a: CatalysisPlan class_uri: OBI:0000272 abstract: true description: |- @@ -410,6 +411,7 @@ slots: description: |- Software package or code used for the simulation (e.g. VASP, Quantum ESPRESSO, LAMMPS, CP2K, ORCA, Zacros). Include version number where possible. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:software_package required: true @@ -419,6 +421,7 @@ slots: description: |- A property computed by this Simulation, provided as a CalculatedProperty instance. Multiple properties may be computed in a single simulation run. + is_a: had_output_entity range: CalculatedProperty slot_uri: coremeta4cat:calculated_property required: true @@ -431,12 +434,14 @@ slots: description: |- Exchange-correlation functional used (e.g. PBE, PBEsol, RPBE, B3LYP, HSE06). The choice of functional directly affects accuracy. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:exchange_correlation_functional multivalued: true energy_cutoff: description: Plane-wave kinetic energy cutoff for the basis set expansion. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:energy_cutoff multivalued: true @@ -447,6 +452,7 @@ slots: description: |- Convergence thresholds applied during self-consistent field (SCF) and/or geometry optimisation (e.g. energy < 1e-5 eV, forces < 0.02 eV/A). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:convergence_criteria multivalued: true @@ -455,6 +461,7 @@ slots: description: |- Hubbard U correction parameters (DFT+U). Specify element, orbital, and U value (e.g. "Fe d: U=4.0 eV, J=0.0 eV"). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:dft_u_parameters multivalued: true @@ -463,12 +470,13 @@ slots: description: |- Whether spin polarization (collinear magnetism) is included in the DFT calculation. Set to true for systems containing magnetic elements. + is_a: has_qualitative_attribute range: boolean slot_uri: coremeta4cat:spin_polarization - multivalued: true total_energy_per_atom: description: Total DFT ground-state energy divided by number of atoms in the unit cell. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:total_energy_per_atom multivalued: true @@ -481,12 +489,14 @@ slots: description: |- Force field or interatomic potential used (e.g. ReaxFF, CHARMM, Tersoff, EAM). Include parametrisation source or reference. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:force_field multivalued: true simulation_timestep: description: Integration timestep used in molecular dynamics. + is_a: has_quantitative_attribute range: float slot_uri: APOLLO_SV:00000012 multivalued: true @@ -495,6 +505,7 @@ slots: simulation_time: description: Total simulated physical time of the MD trajectory. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:simulation_time multivalued: true @@ -505,15 +516,16 @@ slots: description: |- Statistical ensemble used in MD (e.g. NVE, NVT, NPT). Determines which thermodynamic quantities are conserved. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:ensemble_type multivalued: true number_of_atoms: description: Number of atoms in the simulation cell or supercell. + is_a: has_quantitative_attribute range: integer slot_uri: coremeta4cat:number_of_atoms - multivalued: true # ---- Microkinetics method slots ---- @@ -521,6 +533,7 @@ slots: description: |- Rate constants or Arrhenius parameters (pre-exponential factor and activation energy) for each elementary step in the reaction network. + is_a: has_qualitative_attribute range: string slot_uri: NCIT:C94967 multivalued: true @@ -529,18 +542,21 @@ slots: description: |- Numerical solver used for the microkinetic rate equations (e.g. LSODA, stiff ODE solver, steady-state Newton method). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:solver_type multivalued: true surface_coverage: description: Surface coverage of adsorbed species (fraction of surface sites occupied). + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:surface_coverage multivalued: true activation_energy: description: Activation energy for each elementary step in the reaction mechanism. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:activation_energy multivalued: true @@ -551,20 +567,22 @@ slots: interaction_potential: description: Interaction potential or Hamiltonian used to compute energies in MC moves. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:interaction_potential multivalued: true number_of_steps: description: Total number of Monte Carlo moves or trial configurations generated. + is_a: has_quantitative_attribute range: integer slot_uri: coremeta4cat:number_of_steps - multivalued: true lattice_size_type: description: |- Lattice geometry and dimensions used in lattice-based MC (e.g. "100x100 square lattice", "hexagonal 50x50"). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:lattice_size_type multivalued: true @@ -573,21 +591,22 @@ slots: description: |- Criterion for accepting or rejecting MC moves (e.g. Metropolis, Kawasaki, heat-bath algorithm). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:acceptance_criteria multivalued: true equilibration_steps: description: Number of MC steps used for equilibration before data collection begins. + is_a: has_quantitative_attribute range: integer slot_uri: coremeta4cat:equilibration_steps - multivalued: true sampling_interval: description: Interval between successive MC snapshots used for property averaging. + is_a: has_quantitative_attribute range: integer slot_uri: coremeta4cat:sampling_interval - multivalued: true # ---- MaterialDescriptorMixin slots ---- @@ -595,6 +614,7 @@ slots: description: |- Chemical composition of the simulated material (e.g. "Fe2O3", "Pt/CeO2"). Use empirical formula or SMILES for molecular systems. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:material_composition multivalued: true @@ -603,6 +623,7 @@ slots: description: |- Crystal structure of the simulated material, including space group and lattice parameters (e.g. "Fm-3m, a=3.92 A for Pt"). + is_a: has_qualitative_attribute range: string slot_uri: SIO:001100 multivalued: true @@ -613,6 +634,7 @@ slots: description: |- Monkhorst-Pack k-point mesh used for Brillouin zone sampling (e.g. "4x4x1" for a surface slab, "8x8x8" for a bulk cell). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:k_point_mesh multivalued: true @@ -621,6 +643,7 @@ slots: formation_energy: description: Formation energy per atom relative to elemental reference states. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:formation_energy multivalued: true @@ -631,6 +654,7 @@ slots: description: |- Elemental reference energies used to compute formation energies (e.g. DFT total energies of elemental ground-state structures). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:reference_energies multivalued: true @@ -639,6 +663,7 @@ slots: description: |- Distance above the convex hull of stable phases (thermodynamic stability metric). Zero for phases on the hull; positive values indicate metastability. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:energy_above_hull multivalued: true @@ -647,6 +672,7 @@ slots: phase_diagram_type: description: Type of phase diagram constructed (e.g. binary, ternary, quaternary). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:phase_diagram_type multivalued: true @@ -655,6 +681,7 @@ slots: description: |- List of stable competing phases used in convex hull construction (e.g. "Fe2O3, Fe3O4, FeO, Fe"). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:competing_phases multivalued: true @@ -665,18 +692,21 @@ slots: description: |- Components of the piezoelectric tensor e_ij (C/m2) or d_ij (pC/N), describing the coupling between stress and electric polarization. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:piezoelectric_tensor multivalued: true crystal_symmetry: description: Point group or space group symmetry of the crystal structure. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:crystal_symmetry multivalued: true strain_applied: description: Magnitude of applied strain in the piezoelectric calculation. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:strain_applied multivalued: true @@ -685,6 +715,7 @@ slots: description: |- Decomposition of the piezoelectric or dielectric response into ionic (nuclear) and electronic contributions. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:ionic_electronic_contributions multivalued: true @@ -695,12 +726,14 @@ slots: description: |- Full Voigt-notation elastic tensor C_ij (GPa) describing the linear elastic response of the material. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:elastic_tensor multivalued: true bulk_modulus: description: Bulk modulus (resistance to uniform compression). + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:bulk_modulus multivalued: true @@ -709,6 +742,7 @@ slots: shear_modulus: description: Shear modulus (resistance to shear deformation). + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:shear_modulus multivalued: true @@ -717,12 +751,14 @@ slots: poisson_ratio: description: Poisson's ratio (ratio of transverse to axial strain under uniaxial load). + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:poisson_ratio multivalued: true young_modulus: description: Young's modulus (stiffness under uniaxial tension or compression). + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:young_modulus multivalued: true @@ -735,6 +771,7 @@ slots: description: |- Cleavage energy per unit area required to create the surface from the bulk. A lower value indicates a more stable surface facet. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:surface_energy multivalued: true @@ -744,12 +781,14 @@ slots: miller_indices: description: |- Miller indices of the modelled surface facet (e.g. "(111)", "(110)", "(100)"). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:miller_indices multivalued: true slab_thickness: description: Thickness of the periodic slab model used to represent the surface. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:slab_thickness multivalued: true @@ -760,6 +799,7 @@ slots: description: |- Vacuum layer thickness added above the slab to prevent spurious periodic interactions between slab images. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:vacuum_spacing multivalued: true @@ -770,6 +810,7 @@ slots: description: |- Method used to terminate the slab and handle dangling bonds (e.g. H-passivation, OH-termination, dipole correction). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:surface_termination_method multivalued: true @@ -780,6 +821,7 @@ slots: description: |- Components of the static and/or high-frequency dielectric tensor epsilon_ij, computed from DFPT. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:dielectric_tensor multivalued: true @@ -788,6 +830,7 @@ slots: description: |- Born effective charge tensors Z*_ij for each atom, describing how the polarization changes with atomic displacements. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:born_effective_charges multivalued: true @@ -798,6 +841,7 @@ slots: description: |- Method used to compute the interatomic force constants (e.g. finite differences / supercell method, DFPT/linear response). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:force_constant_method multivalued: true @@ -806,12 +850,14 @@ slots: description: |- k/q-point mesh for phonon Brillouin zone sampling (e.g. "8x8x8"). Distinct from the electronic k-point mesh. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:kq_point_mesh multivalued: true smearing_parameter: description: Smearing or broadening parameter applied to the phonon density of states. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:smearing_parameter multivalued: true @@ -822,9 +868,9 @@ slots: description: |- Whether imaginary (soft) phonon modes are present in the dispersion. Imaginary modes indicate dynamical instability of the structure. + is_a: has_qualitative_attribute range: boolean slot_uri: coremeta4cat:imaginary_modes - multivalued: true # ---- EquationsOfState slots ---- @@ -832,18 +878,21 @@ slots: description: |- Parametric model used to fit the energy-volume curve (e.g. Birch-Murnaghan 3rd order, Vinet, Murnaghan). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:fit_method multivalued: true pressure_derivative: description: Pressure derivative of the bulk modulus B' (dimensionless). + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:pressure_derivative multivalued: true fit_residuals: description: Root-mean-square residuals of the energy-volume fit. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:fit_residuals multivalued: true @@ -852,6 +901,7 @@ slots: ph_range: description: pH range covered in the Pourbaix stability diagram (e.g. "0-14"). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:ph_range multivalued: true @@ -860,6 +910,7 @@ slots: description: |- Electrode potential range covered in the Pourbaix diagram (e.g. "-2 to +2 V vs SHE"). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:potential_range multivalued: true @@ -868,12 +919,14 @@ slots: description: |- Implicit solvation model used to account for aqueous environment (e.g. VASPsol, SCCS/Environ, COSMO). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:solvation_model multivalued: true ionic_strength: description: Ionic strength of the electrolyte solution modelled. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:ionic_strength multivalued: true @@ -886,12 +939,14 @@ slots: description: |- Crystallographic plane of the grain boundary, expressed using Miller indices (e.g. "Sigma5 (310)[001]"). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:grain_boundary_plane multivalued: true misorientation_angle: description: Misorientation angle between adjacent grains at the boundary. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:misorientation_angle multivalued: true @@ -900,6 +955,7 @@ slots: grain_boundary_energy: description: Excess energy per unit area of the grain boundary. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:grain_boundary_energy multivalued: true @@ -910,12 +966,14 @@ slots: description: |- Dimensions of the simulation cell used to model the grain boundary (e.g. "10x10x30 nm"). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:simulation_cell_size multivalued: true gb_excess_volume: description: Excess volume per unit area associated with the grain boundary. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:gb_excess_volume multivalued: true @@ -924,6 +982,7 @@ slots: description: |- Description of the structural units (repeating atomic motifs) that constitute the grain boundary structure. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:gb_structural_units multivalued: true @@ -932,6 +991,7 @@ slots: description: |- Data describing charge carrier or point defect segregation behaviour at the grain boundary (e.g. segregation energy per defect type). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:charge_defect_segregation multivalued: true @@ -942,6 +1002,7 @@ slots: description: |- Electronic smearing scheme and width used in the SCF calculation (e.g. Methfessel-Paxton order 1 with sigma=0.2 eV, Gaussian with sigma=0.05 eV). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:smearing_method multivalued: true @@ -950,20 +1011,22 @@ slots: description: |- Whether the electronic structure calculation is spin-polarized (accounts for spin-up and spin-down electrons separately). + is_a: has_qualitative_attribute range: boolean slot_uri: coremeta4cat:spin_polarized - multivalued: true band_path: description: |- High-symmetry k-path through the Brillouin zone used to plot the band structure (e.g. "Gamma-X-M-Gamma-R" for cubic, following SeeK-path convention). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:band_path multivalued: true fermi_energy: description: Fermi energy (chemical potential of electrons) in the calculated system. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:fermi_energy multivalued: true @@ -976,12 +1039,14 @@ slots: description: |- Crystallographic direction of the spontaneous electric polarization (e.g. "[001]" for tetragonal BaTiO_3). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:polarization_direction multivalued: true spontaneous_polarization: description: Magnitude of the spontaneous electric polarization. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:spontaneous_polarization multivalued: true @@ -992,12 +1057,14 @@ slots: description: |- Reference (paraelectric/centrosymmetric) structure used as the zero- polarization endpoint in the Berry-phase polarization calculation. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:reference_structure multivalued: true switching_barrier: description: Energy barrier for polarization switching between equivalent states. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:switching_barrier multivalued: true @@ -1006,6 +1073,7 @@ slots: coercive_field: description: Electric field required to reverse the polarization direction. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:coercive_field multivalued: true @@ -1014,6 +1082,7 @@ slots: temperature_dependence: description: Description of how the ferroelectric properties vary with temperature. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:temperature_dependence multivalued: true @@ -1024,6 +1093,7 @@ slots: description: |- Reference to the material or MaterialSample being characterised by this calculated band gap. + is_a: has_qualitative_attribute range: string slot_uri: VOC4CAT:0005056 multivalued: true @@ -1032,12 +1102,14 @@ slots: description: |- Model structure used in the band gap calculation (e.g. bulk unit cell, surface slab, defect supercell). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:structure_model multivalued: true smearing_broadening: description: Gaussian or Lorentzian broadening applied to the simulated spectrum. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:smearing_broadening multivalued: true @@ -1048,12 +1120,14 @@ slots: description: |- Band gap character: "direct" (VBM and CBM at same k-point) or "indirect" (VBM and CBM at different k-points). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:direct_indirect multivalued: true experimental_reference: description: Experimental band gap value used for benchmarking the calculation. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:experimental_reference multivalued: true @@ -1064,14 +1138,15 @@ slots: description: |- Whether a many-body GW correction or hybrid functional (e.g. HSE06) was applied to correct the DFT band gap underestimation. + is_a: has_qualitative_attribute range: boolean slot_uri: coremeta4cat:gw_hybrid_correction - multivalued: true excitonic_correction: description: |- Excitonic correction (from Bethe-Salpeter equation) applied to the optical band gap. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:excitonic_correction multivalued: true diff --git a/src/coremeta4cat/schema/coremeta4cat_synthesis_ap.yaml b/src/coremeta4cat/schema/coremeta4cat_synthesis_ap.yaml index 41e729203..407afdff6 100644 --- a/src/coremeta4cat/schema/coremeta4cat_synthesis_ap.yaml +++ b/src/coremeta4cat/schema/coremeta4cat_synthesis_ap.yaml @@ -86,7 +86,7 @@ classes: (CoPrecipitation, DepositionPrecipitation). slots: - precipitating_agent - - has_concentration + - precipitating_concentration - has_ph_value - has_mixing_speed - has_mixing_duration @@ -113,7 +113,7 @@ classes: # ==================== CORE SYNTHESIS CLASSES ==================== Synthesis: - is_a: DataGeneratingActivity + is_a: CatalysisDataGeneratingActivity class_uri: OBI:0000070 # planned process description: |- A DataGeneratingActivity in which a catalyst is prepared. @@ -154,6 +154,7 @@ classes: description: The PreparationMethod (protocol) realized in this Synthesis. range: PreparationMethod required: true + inlined: true storage_conditions: recommended: true carried_out_by: @@ -175,8 +176,6 @@ classes: slot_usage: precursor_quantity: required: true - - slot_uri: VOC4CAT:0008118 CatalystSample: is_a: MaterialSample class_uri: OBI:0000747 # specimen — reuses MaterialSample class_uri; specific catalyst type via rdf_type @@ -194,7 +193,7 @@ classes: # ==================== PREPARATION METHOD (Plan) ==================== PreparationMethod: - is_a: Plan + is_a: CatalysisPlan class_uri: VOC4CAT:0007016 # protocol abstract: true description: |- @@ -438,6 +437,7 @@ slots: nominal_composition: description: Nominal elemental or chemical composition of the catalyst (e.g. 5wt% Pt/Al2O3). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:nominal_composition multivalued: true @@ -446,18 +446,21 @@ slots: description: |- Key measured properties of the resulting catalyst (e.g. BET surface area, sieve fraction, molar ratio). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:catalyst_measured_properties multivalued: true storage_conditions: description: Conditions under which the catalyst is stored (e.g. inert atmosphere, 4°C). + is_a: has_qualitative_attribute range: string slot_uri: VOC4CAT:0008105 multivalued: true catalyst_support: description: Support material on which the active phase is deposited (e.g. Al2O3, SiO2). + is_a: has_qualitative_attribute range: string slot_uri: VOC4CAT:0008104 multivalued: true @@ -466,8 +469,9 @@ slots: precursor_quantity: description: Quantity of precursor used in synthesis. + is_a: has_mass range: Mass - slot_uri: coremeta4cat:precursor_quantity + slot_uri: VOC4CAT:0008118 multivalued: true inlined_as_list: true @@ -481,6 +485,7 @@ slots: impregnation_duration: description: Duration of the impregnation step. + is_a: has_duration range: Duration slot_uri: VOC4CAT:0008120 multivalued: true @@ -488,6 +493,7 @@ slots: impregnation_temperature: description: Temperature during the impregnation step. + is_a: has_temperature range: Temperature slot_uri: VOC4CAT:0008121 multivalued: true @@ -497,11 +503,20 @@ slots: precipitating_agent: description: Chemical agent used to induce precipitation (e.g. NaOH, NH3). + is_a: carried_out_by range: ChemicalEntity slot_uri: VOC4CAT:0008203 multivalued: true inlined_as_list: true + precipitating_concentration: + description: Concentration of the precipitating agent/solution used to induce precipitation. + is_a: has_concentration + range: Concentration + slot_uri: VOC4CAT:0008125 + multivalued: true + inlined_as_list: true + # ---- Wet-chemistry / precipitation has_X sub-slots ---- # (has_concentration and has_ph_value are inherited from chemical_entities_ap) @@ -537,18 +552,21 @@ slots: order_of_addition: description: Order in which reagents or components are combined. + is_a: has_qualitative_attribute range: string slot_uri: VOC4CAT:0008128 multivalued: true filtration: description: Filtration method used to separate the precipitate (e.g. vacuum filtration). + is_a: has_qualitative_attribute range: string slot_uri: VOC4CAT:0008129 multivalued: true purification: description: Purification method applied after synthesis (e.g. washing, dialysis). + is_a: has_qualitative_attribute range: string slot_uri: VOC4CAT:0008130 multivalued: true @@ -557,6 +575,7 @@ slots: deposition_temperature: description: Temperature during the deposition step. + is_a: has_temperature range: Temperature slot_uri: coremeta4cat:deposition_temperature multivalued: true @@ -564,6 +583,7 @@ slots: deposition_time: description: Duration of the deposition step. + is_a: has_duration range: Duration slot_uri: coremeta4cat:deposition_time multivalued: true @@ -573,6 +593,7 @@ slots: synthesis_temperature: description: Temperature applied during the synthesis step. + is_a: has_temperature range: Temperature slot_uri: VOC4CAT:0000051 multivalued: true @@ -580,6 +601,7 @@ slots: synthesis_duration: description: Total duration of the synthesis step. + is_a: has_duration range: Duration slot_uri: VOC4CAT:0000050 multivalued: true @@ -587,6 +609,7 @@ slots: synthesis_pressure: description: Pressure applied during synthesis (e.g. in autoclave or plasma reactor). + is_a: has_pressure range: Pressure slot_uri: VOC4CAT:0000053 multivalued: true @@ -596,18 +619,21 @@ slots: hydrolysis_ratio: description: Molar ratio of water to alkoxide precursor used in hydrolysis. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:hydrolysis_ratio multivalued: true drying: description: Drying method used for the gel (e.g. supercritical drying, freeze drying). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:drying multivalued: true surfactant_template: description: Surfactant or structure-directing agent used as a template. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:surfactant_template multivalued: true @@ -616,6 +642,7 @@ slots: filling_volume: description: Volume of solution relative to autoclave volume (filling degree). + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:filling_volume multivalued: true @@ -624,12 +651,14 @@ slots: stirrer_type: description: Type of stirrer used (e.g. magnetic, mechanical, none). + is_a: has_qualitative_attribute range: string slot_uri: VOC4CAT:0008113 multivalued: true cooling_rate: description: Rate at which the reactor is cooled after synthesis. + is_a: has_heating_rate range: HeatingRate slot_uri: coremeta4cat:cooling_rate multivalued: true @@ -639,12 +668,14 @@ slots: plasma_type: description: Type of plasma used (e.g. DBD, microwave, RF plasma). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:plasma_type multivalued: true power_input: description: Power input to the plasma reactor or other energy source. + is_a: has_power range: PowerQuantity slot_uri: coremeta4cat:power_input multivalued: true @@ -652,6 +683,7 @@ slots: exposure_time: description: Duration of plasma or other energy exposure. + is_a: has_duration range: Duration slot_uri: coremeta4cat:exposure_time multivalued: true @@ -661,24 +693,28 @@ slots: fuel: description: Organic fuel used in combustion synthesis (e.g. urea, glycine). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:fuel multivalued: true oxidizer: description: Oxidizer used in combustion synthesis (e.g. metal nitrates). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:oxidizer multivalued: true fuel_to_oxidizer_ratio: description: Molar ratio of fuel to oxidizer. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:fuel_to_oxidizer_ratio multivalued: true set_temperature: description: Target temperature set for the combustion reaction. + is_a: has_temperature range: Temperature slot_uri: coremeta4cat:set_temperature multivalued: true @@ -686,6 +722,7 @@ slots: post_treatment: description: Post-synthesis treatment applied to the combustion product. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:post_treatment multivalued: true @@ -694,12 +731,14 @@ slots: substrate: description: Substrate material on which the ALD film is deposited. + is_a: has_qualitative_attribute range: string slot_uri: VOC4CAT:0000024 multivalued: true pulse_time: description: Duration of the precursor pulse in each ALD cycle. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:pulse_time multivalued: true @@ -708,6 +747,7 @@ slots: purging_duration: description: Duration of the purge step between ALD pulses. + is_a: has_quantitative_attribute range: float slot_uri: VOC4CAT:0000112 multivalued: true @@ -718,6 +758,7 @@ slots: power: description: Microwave power applied. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:power multivalued: true @@ -726,6 +767,7 @@ slots: microwave_frequency: description: Frequency of microwave irradiation. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:microwave_frequency multivalued: true @@ -736,6 +778,7 @@ slots: sonication_power: description: Acoustic power applied during sonication. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:sonication_power multivalued: true @@ -744,6 +787,7 @@ slots: sonication_duration: description: Duration of ultrasonic irradiation. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:sonication_duration multivalued: true @@ -754,24 +798,28 @@ slots: flame_type: description: Type of flame used in FSP (e.g. methane/oxygen, H2/O2). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:flame_type multivalued: true inlet_system: description: Configuration of the precursor inlet system. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:inlet_system multivalued: true flame_ring: description: Configuration of the supporting flame ring. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:flame_ring multivalued: true capillary_pressure: description: Pressure applied at the capillary nozzle during FSP. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:capillary_pressure multivalued: true @@ -780,6 +828,7 @@ slots: fuel_dispersant_ratio: description: Volume ratio of fuel to dispersant used in FSP. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:fuel_dispersant_ratio multivalued: true @@ -788,6 +837,7 @@ slots: vessel_volume: description: Volume of the milling vessel. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:vessel_volume multivalued: true @@ -796,12 +846,14 @@ slots: size_and_material: description: Size and material of the milling vessel and components. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:size_and_material multivalued: true milling_speed: description: Rotational speed during milling. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:milling_speed multivalued: true @@ -810,6 +862,7 @@ slots: milling_duration: description: Total duration of the milling process. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:milling_duration multivalued: true @@ -818,12 +871,14 @@ slots: ball_material: description: Material of the milling balls (e.g. zirconia, stainless steel). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:ball_material multivalued: true ball_size: description: Diameter of the milling balls. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:ball_size multivalued: true @@ -832,6 +887,7 @@ slots: ball_to_powder_ratio: description: Mass ratio of milling balls to powder charge. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:ball_to_powder_ratio multivalued: true @@ -840,30 +896,35 @@ slots: reaction_vessel: description: Type of reaction vessel used (e.g. Schlenk flask, round-bottom flask). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:reaction_vessel multivalued: true mixing_device: description: Device used for mixing (e.g. magnetic stirrer, vortex mixer). + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:mixing_device multivalued: true crystallisation_solvents: description: Solvent(s) used for crystallisation. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:crystallisation_solvents multivalued: true precipitation_agent: description: Agent used to induce precipitation in molecular synthesis. + is_a: has_qualitative_attribute range: string slot_uri: VOC4CAT:0008203 multivalued: true crystallisation_duration: description: Duration of the crystallisation step. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:crystallisation_duration multivalued: true @@ -872,12 +933,14 @@ slots: purification_solvent: description: Solvent used for washing or recrystallisation during purification. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:purification_solvent multivalued: true temperature_ramp: description: Temperature ramp rate applied during drying or activation. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:temperature_ramp multivalued: true diff --git a/tests/data/valid/CatalysisDataset-001.yaml b/tests/data/valid/CatalysisDataset-001.yaml index e3eab3c34..7da61e127 100644 --- a/tests/data/valid/CatalysisDataset-001.yaml +++ b/tests/data/valid/CatalysisDataset-001.yaml @@ -11,10 +11,17 @@ # # JSON schema notes: # - title and description on CatalysisDataset must be arrays (DCAT multivalued). -# - DataGeneratingActivity.title in JSON schema is also an array (or null). -# - was_generated_by items must include at least title:[] to avoid a linkml_runtime -# loader bug where single-field JsonObj args cause DataGeneratingActivityId -# to receive a JsonObj instead of a string. +# - was_generated_by is typed CatalysisDataGeneratingActivity (Synthesis, +# Characterization, Simulation share this ancestor and each needs +# activity_designator set here so the LinkML loader knows which concrete +# class to construct -- see coremeta4cat_common.yaml. Not needed in the +# standalone Synthesis-001/Characterization-NNN.yaml files themselves. +# - was_generated_by items nested here are the full content of +# Synthesis-001.yaml / Characterization-001.yaml / Characterization-002.yaml, +# not stubs -- CatalysisDataGeneratingActivity's descendants (Synthesis, +# Characterization, Simulation) each have their own required fields, so a +# bare id+title stub no longer validates once was_generated_by is narrowed +# away from the generic external DataGeneratingActivity. id: "coremeta4cat:DS_001_MeOH_synthesis_CuZnO" title: @@ -23,14 +30,57 @@ description: - "Dataset covering preparation of Cu/ZnO/Al2O3 methanol synthesis catalyst by incipient wetness impregnation and catalytic performance in CO2 hydrogenation at 50 bar, 200-300 deg C." was_generated_by: - id: "coremeta4cat:SYNTH_001_Pt_Al2O3" - title: - - "incipient wetness impregnation of Cu/ZnO/Al2O3" + activity_designator: "Synthesis" + nominal_composition: + - "5 wt% Pt/Al2O3" + catalyst_measured_properties: + - "BET surface area: 185 m2/g, Pt particle size: 2.3 nm (TEM), Pt loading: 4.8 wt% (ICP-AES)" + storage_conditions: + - "stored in desiccator under argon atmosphere at room temperature" + catalyst_support: + - "gamma-Al2O3, Sasol Puralox, 200 m2/g" + solvent: + - id: "https://pubchem.ncbi.nlm.nih.gov/compound/962" + title: "deionized water" + has_sample_pretreatment: + - value: "reduction in H2 at 400 deg C for 2 hours prior to catalytic testing" + had_input_entity: + - id: "coremeta4cat:PREC_001_H2PtCl6" + title: "chloroplatinic acid hexahydrate" + precursor_quantity: + - value: 0.0485 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: https://qudt.org/vocab/unit/GM + realized_plan: + id: "coremeta4cat:SYNTH_001_impregnation_method" + title: "incipient wetness impregnation" + description: "incipient_wetness, 25 deg C, 12 h" - id: "coremeta4cat:CHAR_001_BET_CuZnO_Al2O3" - title: - - "BET surface area measurement of Cu/ZnO/Al2O3" + activity_designator: "Characterization" + carried_out_by: + - id: "coremeta4cat:DEV_001_Micromeritics_ASAP2020" + title: "Micromeritics ASAP 2020 surface area and porosimetry analyzer" + evaluated_entity: + - id: "coremeta4cat:CAT_001_CuZnO_Al2O3" + title: "Cu/ZnO/Al2O3 methanol synthesis catalyst" + description: "63 wt% CuO, 24 wt% ZnO, 13 wt% Al2O3 (calcined precursor)" + realized_plan: + id: "coremeta4cat:CHAR_001_BET_method" + title: "BET surface area measurement" + description: "N2 physisorption at 77 K, degassing at 300 deg C for 3 h under vacuum prior to measurement" - id: "coremeta4cat:CHAR_002_XRD_CuZnO_Al2O3" - title: - - "Powder XRD measurement of Cu/ZnO/Al2O3" + activity_designator: "Characterization" + carried_out_by: + - id: "coremeta4cat:DEV_002_Bruker_D8_Advance" + title: "Bruker D8 Advance diffractometer with Cu K-alpha radiation (1.5406 Ang)" + evaluated_entity: + - id: "coremeta4cat:CAT_001_CuZnO_Al2O3" + title: "Cu/ZnO/Al2O3 methanol synthesis catalyst" + description: "63 wt% CuO, 24 wt% ZnO, 13 wt% Al2O3 (calcined precursor)" + realized_plan: + id: "coremeta4cat:CHAR_002_XRD_method" + title: "powder X-ray diffraction" + description: "Cu K-alpha, 2theta range 5 to 80 deg, step size 0.02 deg, scan rate 1 deg/min, Rietveld refinement for phase quantification" is_about_entity: - id: "coremeta4cat:CAT_001_CuZnO_Al2O3" title: "Cu/ZnO/Al2O3 methanol synthesis catalyst" diff --git a/tests/data/valid/CatalysisDataset-002.yaml b/tests/data/valid/CatalysisDataset-002.yaml index 1913ba9d6..585d4df40 100644 --- a/tests/data/valid/CatalysisDataset-002.yaml +++ b/tests/data/valid/CatalysisDataset-002.yaml @@ -7,9 +7,18 @@ # # JSON schema notes (same as CatalysisDataset-001): # - title and description must be arrays (DCAT multivalued). -# - was_generated_by items must include at least title:[] to avoid linkml_runtime -# JsonObj loader bug (single-field objects passed as positional arg). -# - is_about_entity items inlined with title and description. +# - was_generated_by is typed CatalysisDataGeneratingActivity (Synthesis, +# Characterization, Simulation); each item needs activity_designator set +# here so the loader knows which concrete class to construct. +# - is_about_activity is typed CatalyticReaction directly (not the wider +# EvaluatedActivity), so no designator is needed there -- but it does mean +# the dry-methane-reforming CatalyticReaction (previously listed here as a +# was_generated_by stub, which was never correct -- a Reaction is not a +# DataGeneratingActivity) now lives under is_about_activity instead, with +# its full required fields (used_reactor, product_identification_method). +# - was_generated_by/is_about_activity items nested here are the full content +# of Synthesis-002.yaml / Characterization-003.yaml / Characterization-004.yaml / +# Simulation-002.yaml / CatalyticReaction-002.yaml, not stubs. id: "coremeta4cat:DS_002_DRM_NiO_CeO2" title: @@ -18,20 +27,173 @@ description: - "Dataset covering the full lifecycle of a 15 wt% NiO/CeO2 dry reforming catalyst: (1) co-precipitation synthesis with precipitation parameters and calcination protocol; (2) XPS surface composition and oxidation state analysis; (3) H2-TPR reducibility profiling; (4) catalytic performance in CH4+CO2 dry reforming at 600-800 deg C over 20 h; (5) ReaxFF molecular dynamics of the Ni/CeO2(111) interface at 800 deg C to rationalise metal-support interaction." was_generated_by: - id: "coremeta4cat:SYNTH_002_NiO_CeO2" - title: - - "co-precipitation synthesis of 15 wt% NiO/CeO2" + activity_designator: "Synthesis" + nominal_composition: + - "15 wt% NiO/CeO2" + catalyst_measured_properties: + - "BET surface area: 42 m2/g" + - "NiO crystallite size: 8.4 nm (Scherrer, XRD)" + - "Ni loading: 14.7 wt% (ICP-AES)" + - "reducibility onset: 280 deg C, completion at 600 deg C (H2-TPR)" + storage_conditions: + - "sealed glass vial in desiccator, ambient temperature, protected from moisture" + solvent: + - id: "https://pubchem.ncbi.nlm.nih.gov/compound/962" + title: "deionized water (18.2 MOhm cm, MilliQ)" + has_sample_pretreatment: + - value: "in situ reduction: 5 vol% H2/N2 at 700 deg C for 1 h (10 deg C/min ramp) before DRM tests" + had_input_entity: + - id: "coremeta4cat:PREC_004_Ni_NO3_6H2O" + title: "nickel(II) nitrate hexahydrate (Sigma-Aldrich, purity 99%)" + precursor_quantity: + - value: 8.72 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: https://qudt.org/vocab/unit/GM + - id: "coremeta4cat:PREC_005_Ce_NO3_6H2O" + title: "cerium(III) nitrate hexahydrate (Sigma-Aldrich, purity 99.5%)" + precursor_quantity: + - value: 13.03 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: https://qudt.org/vocab/unit/GM + - id: "coremeta4cat:PREC_006_Na2CO3" + title: "sodium carbonate precipitating agent (anhydrous, Sigma-Aldrich, purity 99.5%)" + precursor_quantity: + - value: 5.30 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: https://qudt.org/vocab/unit/GM + had_output_entity: + - id: "coremeta4cat:CAT_002_NiO_CeO2" + title: "NiO/CeO2 dry reforming catalyst (calcined precursor)" + description: "15 wt% NiO on CeO2 support, co-precipitated at pH 8.5, calcined 500 deg C / 4 h, sieved to 250-500 um" + realized_plan: + id: "coremeta4cat:SYNTH_002_coprecipitation_method" + title: "co-precipitation" + description: "aqueous solutions of Ni(NO3)2 (0.5 M) and Ce(NO3)3 (0.5 M) mixed in stoichiometric ratio; precipitant: 1 M Na2CO3 solution added dropwise at 2 mL/min; target pH 8.5 maintained by feedback addition; mixing: 600 rpm mechanical stirring at 60 deg C for 2 h; aging: 12 h at 60 deg C without stirring; filtration: vacuum filtration through Whatman grade 4 filter paper; washing: 5 successive deionized water washes until conductivity < 5 uS/cm (Na+ removal); drying: 120 deg C for 12 h in static air oven; calcination: 5 deg C/min ramp to 500 deg C, isothermal hold for 4 h in static air, natural cooling" - id: "coremeta4cat:CHAR_003_XPS_NiO_CeO2" - title: - - "XPS surface analysis of NiO/CeO2 (Ni 2p, Ce 3d, O 1s)" + activity_designator: "Characterization" + carried_out_by: + - id: "coremeta4cat:DEV_003_Thermo_KAlpha_XPS" + title: "Thermo Scientific K-Alpha+ XPS spectrometer" + - id: "coremeta4cat:DEV_004_AlKalpha_source" + title: "Al K-alpha monochromatic X-ray source (1486.6 eV, 72 W)" + sample_state: + - "powder" + sample_description: + - "NiO/CeO2 co-precipitated catalyst (SYNTH_002), calcined at 500 deg C, as-prepared (non-reduced), ca. 10 mg pressed into indium foil" + sample_preparation: + - "lightly pressed into indium foil to obtain flat surface; mounted on sample stub with copper tape; no Ar+ sputtering performed" + has_sample_pretreatment: + - value: "outgassed in XPS load-lock chamber at < 1e-7 mbar for 12 h before transfer to analysis chamber (< 5e-9 mbar)" + detector_type: + - "128-channel 2D delay-line detector (DLD)" + evaluated_entity: + - id: "coremeta4cat:CAT_002_NiO_CeO2" + title: "NiO/CeO2 dry reforming catalyst (calcined)" + description: "15 wt% NiO on CeO2 support, calcined at 500 deg C" + realized_plan: + id: "coremeta4cat:CHAR_003_XPS_method" + title: "X-ray photoelectron spectroscopy (XPS)" + description: "monochromatic Al K-alpha (1486.6 eV); base pressure 5e-9 mbar; survey scan: 0-1350 eV, 1.0 eV step, 50 ms dwell, 3 scans, pass energy 200 eV; high-resolution regions: Ni 2p3/2 (845-895 eV), Ce 3d (875-935 eV), O 1s (525-540 eV), C 1s (280-295 eV); step size 0.1 eV, 20 scans each, pass energy 50 eV; spot size 400 um; lens mode: large area XL; charge compensation: dual-beam flood gun (1 eV electrons + 10 eV Ar+); binding energy scale calibrated to C 1s adventitious carbon at 284.8 eV; Shirley background subtraction; peak fitting: Voigt profiles (CasaXPS v2.3.25); atomic concentrations from Scofield sensitivity factors corrected for transmission function" - id: "coremeta4cat:CHAR_004_TPR_NiO_CeO2" - title: - - "H2-TPR reducibility measurement of NiO/CeO2" + activity_designator: "Characterization" + carried_out_by: + - id: "coremeta4cat:DEV_005_Micromeritics_AutoChem" + title: "Micromeritics AutoChem II 2920 chemisorption analyzer" + sample_description: + - "NiO/CeO2 calcined at 500 deg C; 50 mg packed in quartz U-tube reactor (4 mm ID); quartz wool plugs above and below bed" + has_sample_pretreatment: + - value: "oxidative pretreatment: 10 vol% O2/Ar (50 mL/min) at 300 deg C for 30 min; cool to 50 deg C under Ar purge" + detector_type: + - "thermal conductivity detector (TCD), Ar carrier gas reference channel" + evaluated_entity: + - id: "coremeta4cat:CAT_002_NiO_CeO2" + title: "NiO/CeO2 dry reforming catalyst (calcined)" + description: "15 wt% NiO on CeO2, calcined at 500 deg C / 4 h" + realized_plan: + id: "coremeta4cat:CHAR_004_TPR_method" + title: "H2 temperature-programmed reduction (H2-TPR)" + description: "reducing gas: 5 vol% H2/Ar, total flow 50 mL/min (calibrated Brooks MFC); temperature programme: 50 deg C to 900 deg C at 10 deg C/min; isothermal hold: 30 min at 900 deg C; H2O trap: molecular sieve 3A between reactor outlet and TCD to prevent TCD signal interference; baseline: Ar flow for 30 min at 50 deg C before switching to H2/Ar; H2 consumption quantified by integration of TCD signal, calibrated against CuO reference standard (99.9%, 10 mg, single reduction peak at 310 deg C); NiO reduction: expected peaks at 280-350 deg C (NiO weakly interacting with CeO2) and 400-600 deg C (NiO strongly interacting); CeO2 surface reduction: 600-900 deg C" + - id: "coremeta4cat:SIM_002_MD_Ni_CeO2_111" + activity_designator: "Simulation" + software_package: + - "LAMMPS (29 Sep 2021 stable release, OpenMP build)" + - "OVITO 3.7.11 (structure analysis, RDF, CNA, cluster tracking)" + evaluated_entity: + - id: "coremeta4cat:SLAB_002_CeO2_111_Ni13" + title: "CeO2(111) surface slab with supported 13-atom Ni cluster" + description: "6-layer CeO2(111) p(4x4) slab (256 CeO2 formula units, 768 atoms total); bottom 3 layers fixed during MD; 13-atom cuboctahedral Ni cluster adsorbed on three-fold hollow O site; 20 Ang vacuum layer; 3D periodic boundary conditions" + realized_plan: + id: "coremeta4cat:SIM_002_MD_method" + title: "ReaxFF molecular dynamics (NVT, 800 deg C)" + description: "force field: ReaxFF C/H/Ni/O parametrisation (van Duin et al. 2012, DOI: 10.1021/jp210484t); ensemble: NVT with Nose-Hoover thermostat (tau = 100 fs) at 800 deg C (1073 K); integration timestep: 0.5 fs; total simulation time: 1 ns (2,000,000 steps); equilibration phase: 200 ps (400,000 steps) discarded; production phase: 800 ps (1,600,000 steps) used for analysis; sampling interval: every 1000 steps (0.5 ps); bond order cutoff: C-O 0.3, Ni-O 0.3 (fix reax/c/bonds); radial distribution functions computed with OVITO using 0.05 Ang bin width; common-neighbour analysis (CNA) to track Ni cluster crystallographic ordering" + calculated_property: + - value: "1.52 J/m2" + description: "CeO2(111) cleavage surface energy (clean slab without Ni cluster, computed from relaxed DFT-D3 reference at 0 K, used as force field validation benchmark)" + - value: "-1.83 eV/atom" + description: "time-averaged Ni-CeO2 adhesion energy per Ni atom (13-atom cluster) relative to bulk Ni cohesive energy and clean CeO2(111) slab; computed from 800 ps production trajectory" + - value: "3.8 Ang" + description: "first-shell Ni-O coordination distance at Ni cluster / CeO2 interface (peak of Ni-O radial distribution function, production trajectory average)" + - value: "0.42" + description: "fraction of Ni atoms in direct contact with CeO2 surface (Ni-O bond order > 0.3) averaged over production trajectory; measures cluster wetting / spreading" +is_about_activity: - id: "coremeta4cat:REAC_002_DRM_NiCeO2" title: - "dry methane reforming catalytic activity test (600-800 deg C, 20 h)" - - id: "coremeta4cat:SIM_002_MD_Ni_CeO2_111" - title: - - "ReaxFF MD simulation of Ni13 cluster on CeO2(111) at 800 deg C" + catalyst_quantity: + - value: 0.2 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: g + catalyst_type: + - "heterogeneous_catalysis" + catalyst_form: + - "supported" + used_catalyst: + - id: "coremeta4cat:CAT_002_NiCeO2" + title: "Ni/CeO2" + description: "Ni0 after in situ reduction of NiO/CeO2" + used_reactant: + - id: "https://pubchem.ncbi.nlm.nih.gov/compound/297" + title: "CH4 (99.995% purity, Linde)" + - id: "https://pubchem.ncbi.nlm.nih.gov/compound/280" + title: "CO2 (99.998% purity, Linde)" + - id: "https://pubchem.ncbi.nlm.nih.gov/compound/947" + title: "N2 balance (99.999% purity, internal standard for GC quantification)" + reactor_temperature_range: + - min_value: 600 + max_value: 800 + has_quantity_type: http://qudt.org/vocab/quantitykind/Temperature + unit: https://qudt.org/vocab/unit/DEG_C + experiment_pressure: + - value: 1.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/ATM + has_atmosphere: + - value: "CH4/CO2/N2 = 45:45:10 vol%, total flow 100 mL/min (STP), GHSV = 30000 mL/(g*h)" + feed_composition_range: + - description: "stoichiometric DRM: CH4/CO2 = 1:1 (molar)" + - description: "CO2-rich condition: CH4/CO2 = 1:1.5 to suppress carbon deposition" + has_experiment_duration: + value: 20.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Time + unit: https://qudt.org/vocab/unit/HR + used_reactor: + - id: "coremeta4cat:REACT_003_FixedBed_DRM" + title: "quartz fixed-bed plug-flow reactor (DRM)" + description: "quartz tube reactor, 8 mm inner diameter, 30 cm length; catalyst bed: 200 mg NiO/CeO2 (250-500 um sieve fraction) diluted 1:2 (mass) with inert SiC chips (500 um); thermocouple inserted into catalyst bed centre; backpressure regulator at outlet (1 bar); reactor surrounded by ceramic-fibre furnace with PID temperature controller; mass flow controllers (Brooks SLA5850) for CH4, CO2, N2" + had_input_entity: + - id: "coremeta4cat:FEED_004_CH4_DRM" + title: "methane feed (99.995%, Linde)" + description: "CH4 flow: 45 mL/min (STP); calibrated Brooks SLA5850 MFC" + - id: "coremeta4cat:FEED_005_CO2_DRM" + title: "CO2 feed (99.998%, Linde)" + description: "CO2 flow: 45 mL/min (STP); calibrated Brooks SLA5850 MFC" + - id: "coremeta4cat:FEED_006_N2_standard" + title: "N2 internal standard (99.999%, Linde)" + description: "N2 flow: 10 mL/min (STP); used as internal standard for GC molar balance" + product_identification_method: + - id: "coremeta4cat:REAC_002_GC_method" + title: "online dual-column gas chromatography (TCD)" + description: "Shimadzu GC-2014 with TCD detector (Ar carrier gas); column 1: HayeSep D (2 m x 1/8 in) for CO2, CH4 separation; column 2: Molecular Sieve 5A (2 m x 1/8 in) for CO, H2, N2, CH4 separation; 10-port Valco valve for column switching; oven temperature: 50 deg C isothermal; TCD temperature: 250 deg C; injection: automated gas sampling valve, 1 mL loop; analysis cycle: 10 min; calibration: certified gas standard (Air Liquide CRYSTAL mixture: H2 5%, CO 5%, CH4 5%, CO2 10%, N2 balance); CH4 conversion, CO2 conversion, H2/CO ratio, and carbon balance calculated from N2-normalised molar flows" is_about_entity: - id: "coremeta4cat:CAT_002_NiO_CeO2" title: "NiO/CeO2 dry reforming catalyst" diff --git a/tests/data/valid/Characterization-001.yaml b/tests/data/valid/Characterization-001.yaml index f5fc1d649..095fb69ec 100644 --- a/tests/data/valid/Characterization-001.yaml +++ b/tests/data/valid/Characterization-001.yaml @@ -16,5 +16,6 @@ evaluated_entity: title: "Cu/ZnO/Al2O3 methanol synthesis catalyst" description: "63 wt% CuO, 24 wt% ZnO, 13 wt% Al2O3 (calcined precursor)" realized_plan: + id: "coremeta4cat:CHAR_001_BET_method" title: "BET surface area measurement" description: "N2 physisorption at 77 K, degassing at 300 deg C for 3 h under vacuum prior to measurement" diff --git a/tests/data/valid/Characterization-002.yaml b/tests/data/valid/Characterization-002.yaml index 99f3387ab..c31de8584 100644 --- a/tests/data/valid/Characterization-002.yaml +++ b/tests/data/valid/Characterization-002.yaml @@ -16,5 +16,6 @@ evaluated_entity: title: "Cu/ZnO/Al2O3 methanol synthesis catalyst" description: "63 wt% CuO, 24 wt% ZnO, 13 wt% Al2O3 (calcined precursor)" realized_plan: + id: "coremeta4cat:CHAR_002_XRD_method" title: "powder X-ray diffraction" description: "Cu K-alpha, 2theta range 5 to 80 deg, step size 0.02 deg, scan rate 1 deg/min, Rietveld refinement for phase quantification" diff --git a/tests/data/valid/Characterization-003.yaml b/tests/data/valid/Characterization-003.yaml index 9c574a933..7881ec352 100644 --- a/tests/data/valid/Characterization-003.yaml +++ b/tests/data/valid/Characterization-003.yaml @@ -34,5 +34,6 @@ evaluated_entity: title: "NiO/CeO2 dry reforming catalyst (calcined)" description: "15 wt% NiO on CeO2 support, calcined at 500 deg C" realized_plan: + id: "coremeta4cat:CHAR_003_XPS_method" title: "X-ray photoelectron spectroscopy (XPS)" description: "monochromatic Al K-alpha (1486.6 eV); base pressure 5e-9 mbar; survey scan: 0-1350 eV, 1.0 eV step, 50 ms dwell, 3 scans, pass energy 200 eV; high-resolution regions: Ni 2p3/2 (845-895 eV), Ce 3d (875-935 eV), O 1s (525-540 eV), C 1s (280-295 eV); step size 0.1 eV, 20 scans each, pass energy 50 eV; spot size 400 um; lens mode: large area XL; charge compensation: dual-beam flood gun (1 eV electrons + 10 eV Ar+); binding energy scale calibrated to C 1s adventitious carbon at 284.8 eV; Shirley background subtraction; peak fitting: Voigt profiles (CasaXPS v2.3.25); atomic concentrations from Scofield sensitivity factors corrected for transmission function" diff --git a/tests/data/valid/Characterization-004.yaml b/tests/data/valid/Characterization-004.yaml index dd9167037..df192846d 100644 --- a/tests/data/valid/Characterization-004.yaml +++ b/tests/data/valid/Characterization-004.yaml @@ -27,5 +27,6 @@ evaluated_entity: title: "NiO/CeO2 dry reforming catalyst (calcined)" description: "15 wt% NiO on CeO2, calcined at 500 deg C / 4 h" realized_plan: + id: "coremeta4cat:CHAR_004_TPR_method" title: "H2 temperature-programmed reduction (H2-TPR)" description: "reducing gas: 5 vol% H2/Ar, total flow 50 mL/min (calibrated Brooks MFC); temperature programme: 50 deg C to 900 deg C at 10 deg C/min; isothermal hold: 30 min at 900 deg C; H2O trap: molecular sieve 3A between reactor outlet and TCD to prevent TCD signal interference; baseline: Ar flow for 30 min at 50 deg C before switching to H2/Ar; H2 consumption quantified by integration of TCD signal, calibrated against CuO reference standard (99.9%, 10 mg, single reduction peak at 310 deg C); NiO reduction: expected peaks at 280-350 deg C (NiO weakly interacting with CeO2) and 400-600 deg C (NiO strongly interacting); CeO2 surface reduction: 600-900 deg C" diff --git a/tests/data/valid/Simulation-001.yaml b/tests/data/valid/Simulation-001.yaml index f246e9d07..acfe84cc6 100644 --- a/tests/data/valid/Simulation-001.yaml +++ b/tests/data/valid/Simulation-001.yaml @@ -22,6 +22,7 @@ evaluated_entity: title: "Cu(111) surface slab model" description: "4-layer Cu(111) p(3x3) slab, bottom 2 layers fixed, 15 Ang vacuum" realized_plan: + id: "coremeta4cat:SIM_001_DFT_method" title: "periodic plane-wave DFT" description: "PBE functional, PAW pseudopotentials, 400 eV cutoff, 4x4x1 Monkhorst-Pack k-mesh, D3 dispersion correction, spin-unpolarized" calculated_property: diff --git a/tests/data/valid/Simulation-002.yaml b/tests/data/valid/Simulation-002.yaml index 91af1ed4a..ad769d39c 100644 --- a/tests/data/valid/Simulation-002.yaml +++ b/tests/data/valid/Simulation-002.yaml @@ -26,6 +26,7 @@ evaluated_entity: title: "CeO2(111) surface slab with supported 13-atom Ni cluster" description: "6-layer CeO2(111) p(4x4) slab (256 CeO2 formula units, 768 atoms total); bottom 3 layers fixed during MD; 13-atom cuboctahedral Ni cluster adsorbed on three-fold hollow O site; 20 Ang vacuum layer; 3D periodic boundary conditions" realized_plan: + id: "coremeta4cat:SIM_002_MD_method" title: "ReaxFF molecular dynamics (NVT, 800 deg C)" description: "force field: ReaxFF C/H/Ni/O parametrisation (van Duin et al. 2012, DOI: 10.1021/jp210484t); ensemble: NVT with Nose-Hoover thermostat (tau = 100 fs) at 800 deg C (1073 K); integration timestep: 0.5 fs; total simulation time: 1 ns (2,000,000 steps); equilibration phase: 200 ps (400,000 steps) discarded; production phase: 800 ps (1,600,000 steps) used for analysis; sampling interval: every 1000 steps (0.5 ps); bond order cutoff: C-O 0.3, Ni-O 0.3 (fix reax/c/bonds); radial distribution functions computed with OVITO using 0.05 Ang bin width; common-neighbour analysis (CNA) to track Ni cluster crystallographic ordering" calculated_property: diff --git a/tests/data/valid/Synthesis-001.yaml b/tests/data/valid/Synthesis-001.yaml index 4d43a0554..01f506995 100644 --- a/tests/data/valid/Synthesis-001.yaml +++ b/tests/data/valid/Synthesis-001.yaml @@ -4,7 +4,7 @@ # # NOTE: realized_plan range is PreparationMethod (abstract, no domain slots). # Domain synthesis parameters that live on coremeta4cat_common ARE accepted on Synthesis directly. -# realized_plan: title/description only — the loader cannot dispatch to Impregnation subclass. +# realized_plan: id/title/description only — the loader cannot dispatch to Impregnation subclass. id: "coremeta4cat:SYNTH_001_Pt_Al2O3" nominal_composition: @@ -29,5 +29,6 @@ had_input_entity: unit: https://qudt.org/vocab/unit/GM realized_plan: + id: "coremeta4cat:SYNTH_001_impregnation_method" title: "incipient wetness impregnation" description: "incipient_wetness, 25 deg C, 12 h" diff --git a/tests/data/valid/Synthesis-002.yaml b/tests/data/valid/Synthesis-002.yaml index 319ccc6f5..6a25fb75e 100644 --- a/tests/data/valid/Synthesis-002.yaml +++ b/tests/data/valid/Synthesis-002.yaml @@ -52,5 +52,6 @@ had_output_entity: title: "NiO/CeO2 dry reforming catalyst (calcined precursor)" description: "15 wt% NiO on CeO2 support, co-precipitated at pH 8.5, calcined 500 deg C / 4 h, sieved to 250-500 um" realized_plan: + id: "coremeta4cat:SYNTH_002_coprecipitation_method" title: "co-precipitation" description: "aqueous solutions of Ni(NO3)2 (0.5 M) and Ce(NO3)3 (0.5 M) mixed in stoichiometric ratio; precipitant: 1 M Na2CO3 solution added dropwise at 2 mL/min; target pH 8.5 maintained by feedback addition; mixing: 600 rpm mechanical stirring at 60 deg C for 2 h; aging: 12 h at 60 deg C without stirring; filtration: vacuum filtration through Whatman grade 4 filter paper; washing: 5 successive deionized water washes until conductivity < 5 uS/cm (Na+ removal); drying: 120 deg C for 12 h in static air oven; calcination: 5 deg C/min ramp to 500 deg C, isothermal hold for 4 h in static air, natural cooling" From 3138b63f0271e7b17b293b10b35b3f4dea0dd538 Mon Sep 17 00:00:00 2001 From: HendrikBorgelt <84382772+HendrikBorgelt@users.noreply.github.com> Date: Tue, 14 Jul 2026 14:58:40 +0200 Subject: [PATCH 3/7] Add catalysis-specific reactor slots and catalyst/reaction classification Adds operating-condition slots for each of the 8 ChemicalReactor subclasses (ElectrochemicalReactor, CSTR, PlugFlowReactor, Autoclave, SlurryReactor, Microreactor, FixedBedReactor, FluidizedBedReactor), and introduces catalyst_type (CatalysisResearchFieldEnum) + catalyst_form (CatalystFormEnum) as two independent slots on CatalyticReaction, replacing an earlier single overloaded field. Reaction type classification stays on rdf_type via the existing DCAT-AP-PLUS Pattern 3 convention (already used by Synthesis, Characterization, Simulation, and CatalysisDataset), rather than adding a dedicated slot. catalyst_type/catalyst_form and reaction rdf_type are both kept `recommended` rather than `required`: catalyst/reaction classification can be genuinely disputed or not yet covered by the controlled vocabulary for a novel case, and a mandatory field would force a premature or contested classification. See the rationale recorded directly on these slots below for the fuller argument, including why this two-slot design is kept instead of a CatalystType/ReactionType class hierarchy also explored elsewhere. --- .../schema/coremeta4cat_reaction_ap.yaml | 665 +++++++++++------- tests/data/valid/CatalyticReaction-001.yaml | 17 +- tests/data/valid/CatalyticReaction-002.yaml | 24 +- 3 files changed, 439 insertions(+), 267 deletions(-) diff --git a/src/coremeta4cat/schema/coremeta4cat_reaction_ap.yaml b/src/coremeta4cat/schema/coremeta4cat_reaction_ap.yaml index 76134afc5..7395bd661 100644 --- a/src/coremeta4cat/schema/coremeta4cat_reaction_ap.yaml +++ b/src/coremeta4cat/schema/coremeta4cat_reaction_ap.yaml @@ -11,11 +11,19 @@ description: |- - ProductIdentificationMethod — abstract stub; users point to a CharacterizationTechnique instance from coremeta4cat_characterization_ap - Alignment to DCAT-AP-PLUS: - Reaction --> is_a: EvaluatedActivity (the process being studied, - NOT the data-generating process) - Reactor --> is_a: Device (the AgenticEntity carrying out - the Reaction via carried_out_by) + Alignment to DCAT-AP-PLUS / chemdcat-ap: + Reaction --> is_a: ChemicalReaction (chemdcat-ap) --> is_a: EvaluatedActivity + CatalyticReaction specializes chemdcat-ap's generic + ChemicalReaction, inheriting its starting-material/ + reactant/product/catalyst/solvent/reactor/temperature/ + pressure/yield slots, and adds catalysis-specific + operating-condition slots on top (the process being + studied, NOT the data-generating process). + Reactor --> is_a: Reactor (chemdcat-ap) --> is_a: Device + ChemicalReactor specializes chemdcat-ap's generic + Reactor (the AgenticEntity carrying out the Reaction + via carried_out_by) with catalysis-specific reactor + vessel subclasses. The Reaction is NOT a DataGeneratingActivity. It is the catalytic process that a dataset is *about*, linked via is_about_activity on CatalysisDataset. @@ -58,16 +66,22 @@ default_range: string imports: - linkml:types - coremeta4cat_common # shared has_X sub-slots, atmosphere, enums +- chemical_reaction_ap # ChemicalReaction, Reactor (chemdcat-ap) — explicit + # even though already transitively reachable via + # coremeta4cat_common -> chem_dcat_ap -> chemical_reaction_ap -# ==================== REACTION (EvaluatedActivity) ==================== +# ==================== REACTION (ChemicalReaction specialization) ==================== classes: CatalyticReaction: - is_a: EvaluatedActivity - class_uri: SIO:010345 # chemical reaction + is_a: ChemicalReaction description: |- - An EvaluatedActivity representing the catalytic reaction being studied. + A ChemicalReaction (chemdcat-ap) specialization representing the + catalytic reaction being studied. Inherits the generic reaction slots + (starting materials, reactants, products, catalyst, solvent, reactor, + temperature, pressure, yield, reaction steps) from ChemicalReaction and + adds catalysis-specific operating-condition slots. Reaction is NOT a DataGeneratingActivity — it is the catalytic process being observed, not the process that generates the dataset. A CatalysisDataset @@ -78,15 +92,18 @@ classes: was_generated_by: Characterization (the measurement producing data) is_about_activity: Reaction (the catalytic process being monitored) - The reactor is linked via carried_out_by as a Reactor (Device). - Reactants are linked via had_input_entity. The type of catalytic reaction - (e.g. ammonia synthesis, CO oxidation) is expressed via rdf_type using a - voc4cat or ChemO term. + The reactor is linked via the inherited used_reactor slot (is_a: + carried_out_by), narrowed here to require a ChemicalReactor instance + rather than touching the generic carried_out_by relation directly. + Reactants are linked via the inherited used_reactant slot (range: + Reagent) -- CatalyticReaction does not declare its own reactant slot. + The type of catalytic reaction (e.g. ammonia synthesis, CO oxidation) + is expressed via rdf_type using a voc4cat or ChemO term. slots: - catalyst_quantity - - reactant - - has_catalyst_type - - has_reaction_type + - catalyst_type + - catalyst_form + - reaction_name - reactor_temperature_range - has_atmosphere - experiment_pressure @@ -98,23 +115,24 @@ classes: description: |- The type of catalytic reaction as an ontology term (e.g. VOC4CAT:0007010 for a specific reaction type, or a ChemO/RXNO term). + + This is the sole reaction-type classification mechanism (DCAT-AP-PLUS + Pattern 3) -- deliberately not duplicated by a dedicated has_reaction_type + slot + ReactionType class hierarchy (cf. PR #118, since superseded here). + Kept `recommended` rather than `required` for the same reason as + catalyst_type below: see nfdi4cat/CoreMeta4Cat#117 for the cardinality + discussion and nfdi4cat/CoreMeta4Cat#116 for the classification-mechanism + discussion. recommended: true - carried_out_by: + used_reactor: description: |- The reactor in which the Reaction takes place. - Must be a Reactor instance (a Device subclass specific to catalytic - reaction vessels, e.g. FixedBedReactor, CSTR, Autoclave). + Must be a ChemicalReactor instance (a Reactor subclass specific to + catalytic reaction vessels, e.g. FixedBedReactor, CSTR, Autoclave). range: ChemicalReactor required: true multivalued: true inlined_as_list: true - had_input_entity: - description: |- - The reactant chemicals or feeds entering the reactor. - range: EvaluatedEntity - recommended: true - multivalued: true - inlined_as_list: true product_identification_method: description: |- The analytical method used to identify and/or quantify reaction products. @@ -124,11 +142,18 @@ classes: required: true multivalued: true inlined_as_list: true + has_reaction_step: + description: |- + A step (part) of this CatalyticReaction that is itself a CatalyticReaction. + Narrowed from the inherited ChemicalReaction range so nested reaction + steps keep their catalysis-specific fields (catalyst_type, used_reactor, + product_identification_method, ...) when loaded. + range: CatalyticReaction # ==================== PRODUCT IDENTIFICATION METHOD ==================== ProductIdentificationMethod: - is_a: Plan + is_a: CatalysisPlan class_uri: OBI:0000272 description: |- Abstract Plan representing the method used to identify and quantify reaction @@ -136,29 +161,34 @@ classes: subclass from coremeta4cat_characterization_ap (e.g. GCMS, HPLC_MS, NMRSpectroscopy). This abstract class is retained for backward compatibility with the original - CoreMeta4Cat monolith. It is a subclass of Plan (prov:Plan / OBI:0000272) so that - it can participate in the realized_plan slot if needed. - - # ==================== REACTOR DESIGN TYPES (Devices) ==================== - # Reactor and its subclasses are Device subclasses (AgenticEntity). - # They are the physical reactor carried_out_by which a Reaction takes place. + CoreMeta4Cat monolith. It is a subclass of CatalysisPlan (which is itself a Plan, + prov:Plan / OBI:0000272) so that it can participate in the realized_plan slot, + and so it (and every other CoreMeta4Cat protocol/technique class) can carry a + persistent id. + + # ==================== REACTOR DESIGN TYPES (Reactor specializations) ==================== + # ChemicalReactor and its subclasses specialize chemdcat-ap's Reactor class + # (itself a Device/AgenticEntity subclass). They are the physical reactor + # in which a Reaction takes place, linked via used_reactor. # The reactor type is expressed both via the subclass and optionally via rdf_type. ChemicalReactor: - is_a: Device + is_a: Reactor class_uri: VOC4CAT:0007018 abstract: true description: |- - Abstract Device subclass representing a catalytic reactor vessel. + Abstract Reactor (chemdcat-ap) subclass representing a catalytic reactor + vessel. Reactor is more specific than the general Device (AgenticEntity): it restricts - carried_out_by on Reaction to dedicated reactor equipment. This semantic - distinction separates analytical instruments (Device) from reaction vessels - (Reactor) in the carried_out_by relationship. + the used_reactor relation (is_a: carried_out_by) on Reaction to dedicated + reactor equipment. This semantic distinction separates analytical + instruments (Device) from reaction vessels (Reactor). ChemicalReactor + further specializes chemdcat-ap's generic Reactor for catalysis use cases. Concrete subclasses (FixedBedReactor, CSTR, PlugFlowReactor, …) specify reactor geometry and operating mode. - Linked from Reaction via carried_out_by (restricted to range: Reactor). + Linked from Reaction via used_reactor (restricted to range: ChemicalReactor). ElectrochemicalReactor: is_a: ChemicalReactor @@ -167,11 +197,11 @@ classes: Electrochemical reactor used in electrocatalytic experiments, including H-cells, flow cells, and membrane electrode assemblies. slots: - - has_cathode - - has_anode - - has_cell_operating_mode - - has_active_area - - has_faradaic_current + - has_cathode + - has_anode + - cell_operating_mode + - has_active_area + - faradaic_current CSTR: is_a: ChemicalReactor @@ -180,10 +210,12 @@ classes: Continuous stirred tank reactor (CSTR) — a well-mixed, continuous-flow reactor operating at steady state. slots: - - has_stirring_speed - - has_volume - - has_stirrer_type - - has_stirrer_diameter + - stirring_rate + - residence_time + - reactor_working_volume + - reactor_diameter + - stirrer_diameter + - reactor_stirrer_type PlugFlowReactor: is_a: ChemicalReactor @@ -191,6 +223,13 @@ classes: description: |- Plug flow reactor (PFR) — a tubular reactor in which reactant composition varies along the axis with no axial mixing. + slots: + - tube_length + - tube_internal_diameter + - flow_direction + - number_of_tubes + - tube_material + - catalyst_particle_size Autoclave: is_a: ChemicalReactor @@ -198,6 +237,12 @@ classes: description: |- Autoclave reactor — a sealed pressure vessel for batch reactions at elevated temperature and/or pressure. + slots: + - agitation_type + - reaction_chamber_material + - vessel_internal_volume + - vessel_material + - batch_duration SlurryReactor: is_a: ChemicalReactor @@ -205,6 +250,12 @@ classes: description: |- Slurry reactor — a three-phase reactor in which catalyst particles are suspended in a liquid phase through which gas is bubbled. + slots: + - catalyst_particle_size + - gas_liquid_ratio + - agitation_sparging_rate + - impeller_type + - agitation_speed Microreactor: is_a: ChemicalReactor @@ -213,6 +264,10 @@ classes: Microreactor — a miniaturised flow reactor with characteristic dimensions in the sub-millimetre range, enabling precise thermal control and rapid screening. + slots: + - channel_material + - channel_dimensions + - number_of_channels FixedBedReactor: is_a: ChemicalReactor @@ -221,10 +276,11 @@ classes: Fixed bed reactor — a tubular reactor packed with a stationary catalyst bed. The most common reactor type in heterogeneous catalysis testing. slots: - - has_catalyst_particle_size - - has_catalyst_bed_volume - - has_catalyst_dilution_material - - has_catalyst_bed_height + - catalyst_particle_size + - catalyst_bed_diameter + - catalyst_bed_volume + - catalyst_dilution_material + - catalyst_bed_height FluidizedBedReactor: is_a: ChemicalReactor @@ -237,289 +293,390 @@ classes: - bed_expansion_height - bubble_size_distribution - # ==================== Catalyst TYPES (QualitativeAttribute) ==================== - # CatalystTypes and its subclasses are Material subclasses (QualitativeAttribute). +# ==================== SLOTS ==================== +# Shared has_X sub-slots (has_experiment_duration, …) and atmosphere +# are inherited from coremeta4cat_common and not redeclared here. - CatalystType: - is_a: QualitativeAttribute - class_uri: VOC4CAT:0007014 - description: |- - Type of catalyst used (e.g. heterogeneous, homogeneous, biocatalyst). - For heterogeneous catalysts, use voc4cat terms where available. +slots: - HeterogeneousCatalyst: - is_a: CatalystType - class_uri: VOC4CAT:0007003 - description: |- - A substance that increases the rate of a chemical reaction that is in a different phase than the reagents. + # ---- Reaction-level slots ---- - HomogeneousCatalyst: - is_a: CatalystType - class_uri: coremeta4cat:HomogeneousCatalyst - description: |- - A substance that increses the rate of a chemical reaction that is in the same phase as the reagents. + catalyst_quantity: + description: Mass of catalyst loaded into the reactor. + is_a: has_mass + range: Mass + slot_uri: coremeta4cat:catalyst_quantity + recommended: true + multivalued: true + inlined_as_list: true - BioCatalyst: - is_a: CatalystType - class_uri: coremeta4cat:BioCatalyst - description: |- - An enzyme or cell that catalyzes a biocatalytic reaction. Subclass of Catalyst (AgenticEntity). The physical form in which it is applied is described by an associated BiocatalystPreparation. + catalyst_type: + description: |- + The catalytic regime of the reaction (e.g. heterogeneous, homogeneous, + biocatalysis, electrocatalysis, photocatalysis). For the physical + form/presentation of the catalyst itself, use catalyst_form instead. + + Deliberately kept `recommended` rather than `required` (see nfdi4cat/ + CoreMeta4Cat#117): classification here can be genuinely disputed or + not yet covered by CatalysisResearchFieldEnum for a novel catalyst, + and forcing a value would push researchers into a premature or + contested classification rather than leaving the field unset until + consensus/vocabulary catches up. Open for discussion in a follow-up + issue if a different tradeoff is wanted. See also nfdi4cat/ + CoreMeta4Cat#116 on whether this two-slot design (catalyst_type + + catalyst_form) or PR #118's CatalystType class hierarchy should be + the long-term mechanism -- kept as two enums here because the + VOC4CAT terms show CatalystType conflates the regime axis + (Heterogeneous/Homogeneous/Bio/Electro/Photo) with the physical-form + axis (ThinFilm/Bulk/Powdered/DepositedSample/Supported -- identical + VOC4CAT ids to catalyst_form's permissible values), which are + independent and often both apply to the same catalyst at once. + range: CatalysisResearchFieldEnum + slot_uri: VOC4CAT:0007014 + recommended: true + multivalued: true - ElectroCatalyst: - is_a: CatalystType - class_uri: VOC4CAT:0000255 + catalyst_form: description: |- - The characteristics of a material or substance that determine how it interacts or responds to a magnetic field. + The physical form or presentation of the catalyst as loaded into the + reactor (e.g. thin film, bulk, powder, supported). A separate axis + from catalyst_type (the catalytic regime). + range: CatalystFormEnum + recommended: true + multivalued: true - ThinFilmCatalyst: - is_a: CatalystType - class_uri: VOC4CAT:0000019 + reaction_name: description: |- - A catalyst introduced to the reaction chamber in the form of a thin film. To form a thin film, a (powdered) catalyst is deposited on a substrate (e.g., glass or metal) using an appropriate deposition technique. + A name for the catalytic reaction which assigns the reactants and + (desired) products (e.g. "ammonia synthesis", "Fischer-Tropsch synthesis"). + is_a: has_qualitative_attribute + range: string + slot_uri: VOC4CAT:0007009 + recommended: true - BulkCatalyst: - is_a: CatalystType - class_uri: VOC4CAT:0007015 - description: |- - A catalyst that consists mainly of the active ingredient or phase. + # ---- OperationParameters slots (flattened onto Reaction) ---- - PowerderedCatalyst: - is_a: CatalystType - class_uri: VOC4CAT:0000017 + reactor_temperature_range: description: |- - A catalyst introduced to the reaction chamber in the form of a powder. + Temperature range in the reactor during the reaction, provided as a + QuantitativeRange with min_value and max_value (unit_code: "Cel"). + For a single set-point, set min_value equal to max_value. + is_a: has_quantitative_attribute + range: QuantitativeRange + slot_uri: VOC4CAT:0007032 + multivalued: true + inlined_as_list: true - DepositedSampleCatalyst: - is_a: CatalystType - class_uri: VOC4CAT:0000038 - description: |- - A thin film of the catalyst deposited on an appropriate for the application substrate. + experiment_pressure: + description: Total pressure in the reactor during the experiment. + is_a: has_pressure + range: Pressure + slot_uri: VOC4CAT:0000118 + multivalued: true + inlined_as_list: true - PhotoCatalyst: - is_a: CatalystType - class_uri: VOC4CAT:0000002 + feed_composition_range: description: |- - A material that absorbs photons (light) of appropriate energy and initiates or accelerates a photochemical reaction, while it regenerates itself after each reaction cycle. + Feed composition range studied, provided as a QuantitativeRange. + Express concentration bounds in an appropriate unit (e.g. "mol/L", "%" for + vol% or mol%). For fixed-composition experiments use reactant.has_concentration. + is_a: has_quantitative_attribute + range: QuantitativeRange + slot_uri: coremeta4cat:feed_composition_range + multivalued: true + inlined_as_list: true - SupportedCatalsyt: - is_a: CatalystType - class_uri: VOC4CAT:0007034 - description: |- - A catalyst where the active material is usually the minority phase and fixed on a high surface area, relatively inert solid. + # ---- ElectrochemicalReactor-specific slots ---- - # ==================== PerformanceDescriptors(MaterialEntity) ==================== - # PerformanceMeasures for a Reactor/Reactionand its slots are QuantitativeAttributes. + has_cathode: + description: |- + The electrode where reduction occurs in an electrochemical cell. It is + the negative electrode in an electrolytic cell, while it is the + positive electrode in a galvanic cell. + is_a: has_qualitative_attribute + range: string + slot_uri: VOC4CAT:0007254 + recommended: true - ReactorPerformanceMeasures: - is_a: QuantitativeAttribute - class_uri: VOC4CAT:005001 + has_anode: description: |- - A measure to quantify how fast and selective a chemical converison occurs in a reactor. A chemical conversion may include multiples reactions. - slots: - - has_yield - - has_conversion - - has_space_time_yield - - has_selectivity + The electrode where oxidation occurs in an electrochemical cell. It is + the positive electrode in an electrolytic cell, while it is the + negative electrode in a galvanic cell. + is_a: has_qualitative_attribute + range: string + slot_uri: VOC4CAT:0007255 + recommended: true - Conversion: - class_uri: VOC4CAT:0005004 - is_a: QuantitativeAttribute + cell_operating_mode: description: |- - A dimensionless physical quantity describing the fraction of a reactant that reacts in a chemical conversion. If a reactant is consumed completely its conversion is 1 (or 100 %). + The functional mode of an electrochemical cell based on the direction + of energy conversion. + range: CellOperatingModeEnum + slot_uri: coremeta4cat:cell_operating_mode + recommended: true - SpaceTimeYield: - class_uri: VOC4CAT:0005006 - is_a: QuantitativeAttribute + has_active_area: description: |- - A physical quantity that describes the amount of product produced per unit of time and unit of producing entity. The producing entity is for example the volume of a chemical reactor or in catalysis the mass or volume or moles of catalyst. Example unit: kg{product} / (hour * cubicmeter{catalyst}) + In contrast to substrate area, the actual area of a sample or + electrode which is active. + is_a: has_quantitative_attribute + range: Area + slot_uri: VOC4CAT:0007258 - Selectivity: - class_uri: VOC4CAT:0000125 - is_a: QuantitativeAttribute + faradaic_current: description: |- - A dimensionless physical quantity describing how effective a reactant is converted to the desired product in a chemical conversion. It is calculated as the ratio between the amount of the desired product and the amount of the desired product that could have been formed if all reactants were converted to the desired product. The selectivity is 1 (or 100 %) if no other than the desired product is formed. + The current that is flowing through an electrochemical cell and is + causing (or is caused by) chemical reactions. + is_a: has_quantitative_attribute + range: ElectricCurrent + slot_uri: VOC4CAT:0007259 + recommended: true - # ==================== ReactionType(QualitativeAttribute) ==================== - # ReactionTypes and its subclasses are QualitativeAttribute. + # ---- CSTR-specific slots ---- - ReactionType: - class_uri: VOC4CAT:0007010 - is_a: QualitativeAttribute + stirring_rate: description: |- - A group of chemical reactions with common conditions or reactants, e.g. Oxidation, Hydrogenation, Reduction, Cracking. + The rate at which the stirrer rotates, typically expressed in + revolutions per unit time (e.g. revolutions per minute). + is_a: has_angular_velocity + range: AngularVelocity + slot_uri: VOC4CAT:0008114 + recommended: true - Hydrogenation: - class_uri: VOC4CAT:0000260 - is_a: ReactionType + residence_time: description: |- - A chemical reaction of molecular hydrogen (H2) and another chemical species, typically facilitated by a catalyst. + The average time a unit of fluid spends inside the reactor before + exiting. + is_a: has_duration + range: Duration + recommended: true - Oxidation: - class_uri: VOC4CAT:0000097 - is_a: ReactionType + reactor_working_volume: description: |- - The loss of electrons or an increase in the oxidation state of a species. + Volume of the reaction chamber, calculated by its dimensions. Volume + of pipes and valves connected to the reactor is not included. + is_a: has_volume + range: Volume + slot_uri: VOC4CAT:0000153 + recommended: true - Dehydrogenation: - class_uri: VOC4CAT:0000297 - is_a: ReactionType - description: |- - A chemical reaction that involves the removal of two or more hydrogen atoms from a molecule. + reactor_diameter: + description: The internal diameter of the reactor vessel. + is_a: has_length + range: LengthQuantity - CarbonCouplingReaction: - class_uri: VOC4CAT:0000223 - is_a: ReactionType + stirrer_diameter: description: |- - A chemical reaction where a carbon-carbon bond is formed from two carbon-containing fragments. + The effective diameter of the stirrer. Typically expressed as the + distance across the rotating blade or mixing head from one tip to + the opposite tip. + is_a: has_length + range: LengthQuantity + slot_uri: VOC4CAT:0008115 - Hydrodeoxygenation: - class_uri: VOC4CAT:0000226 - is_a: ReactionType + reactor_stirrer_type: description: |- - A catalytic process in which oxygen is removed from oxygenated organic compounds using hydrogen. + The category of mechanical or magnetic agitation device used in the + reactor, such as a magnetic stirrer or an overhead mechanical (steel + shaft) stirrer. Distinct from the synthesis-context stirrer_type slot + (coremeta4cat_synthesis_ap), since reactor and synthesis-vessel stirring + may use different equipment. + is_a: has_qualitative_attribute + range: string + slot_uri: VOC4CAT:0008113 + + # ---- PlugFlowReactor-specific slots ---- + + tube_length: + description: The length of the tubular reaction chamber. + is_a: has_length + range: LengthQuantity + recommended: true + + tube_internal_diameter: + description: The internal diameter of the tubular reaction chamber. + is_a: has_length + range: LengthQuantity + recommended: true - OxygenEvolutionReaction: - class_uri: VOC4CAT:0000236 - is_a: ReactionType + flow_direction: description: |- - A chemical reaction of generating molecular oxygen in electrochemistry. + The direction of reactant flow through the tube (e.g. upflow, + downflow, horizontal). + is_a: has_qualitative_attribute + range: string + recommended: true + + number_of_tubes: + description: The number of parallel tubes in the reactor. + is_a: has_quantitative_attribute + range: integer + recommended: true + + tube_material: + description: Material used for the construction of the reactor tube(s). + is_a: has_qualitative_attribute + range: string + recommended: true + + # ---- Shared reactor-geometry slots (multiple reactor types) ---- - Carbonylation: - class_uri: VOC4CAT:0000247 - is_a: + catalyst_particle_size: description: |- - A chemical reaction in which a carbonyl group (C=O) is introduced into a molecule, typically through the addition of carbon monoxide (CO) to a substrate. + A measure of the characteristic linear dimension of a particle in a + sample, typically reported as diameter or sieve fraction range. + is_a: has_length + range: LengthQuantity + slot_uri: VOC4CAT:0008212 + recommended: true + + # ---- Autoclave-specific slots ---- - Hydroxylation: - class_uri: VOC4CAT:0000258 - is_a: ReactionType + agitation_type: description: |- - The addition of a hydroxyl group (-OH) to a molecule, typically by replacing a hydrogen atom. + The category of agitation used inside the autoclave (e.g. magnetic + stirring, mechanical overhead stirring, rocking, none). + is_a: has_qualitative_attribute + range: string + recommended: true - FischerTropschSynthesis: - class_uri: VOC4CAT:0000280 - is_a: ReactionType + reaction_chamber_material: description: |- - A catalytic chemical reaction in which a mixture of carbon monoxide (CO) and hydrogen (H2), is converted via a chain-growth mechanism into long-chain hydrocarbons (e.g., alkanes, alkenes or alcohols)—typically using iron or cobalt catalysts under moderate to high pressures and temperatures. + Material used for the construction of the inner reaction chamber + (the surface in direct contact with the reaction mixture). Distinct + from vessel_material, the material of the outer pressure vessel/shell. + is_a: has_qualitative_attribute + range: string + slot_uri: VOC4CAT:0000156 + recommended: true - # Further Subclasses for ReactionType-Classes + vessel_internal_volume: + description: The internal (working) volume of the autoclave vessel. + is_a: has_volume + range: Volume + recommended: true - CarbonDioxideHydrogenation: - class_uri: VOC4CAT:0000259 - is_a: Hydrogenation + vessel_material: description: |- - The reaction of carbon dioxide (CO2) with molecular hydrogen (H2) to produce value-added hydrocarbons or alcohols. + Material used for the construction of the outer autoclave vessel/ + pressure shell. Distinct from reaction_chamber_material, the material + of the inner reaction chamber lining. + is_a: has_qualitative_attribute + range: string + recommended: true - SelectiveOxidation: - class_uri: VOC4CAT:0000261 - is_a: Oxidation + batch_duration: description: |- - The targeted oxidation of a specific bond or functional group in a molecule leaving other sites unaffected, often directed by a catalyst. + The total duration of the batch reaction inside the autoclave, from + start to end of the reaction step. + is_a: has_duration + range: Duration + recommended: true - CarbonMonoxideOxidation: - class_uri: VOC4CAT:0000289 - is_a: Oxidation - description: |- - The reaction in which carbon monoxide (CO) is converted to carbon dioxide (CO2) through interaction with an oxidizing agent, typically oxygen (O2). + # ---- SlurryReactor-specific slots ---- - # ==================== ProductIdentificationMethod (Plan) ==================== - # Subclasses of ProductIdentificationMethod and its subclasses as DataGeneratingActivity. - LiquidPhaseAnalysis: - class_uri: VOC4CAT:0007813 - is_a: ProductIdentificationMethod + gas_liquid_ratio: description: |- - Analysis of the liquid sample from a catalytic test. + The volumetric ratio of gas to liquid phase in the slurry reactor. + is_a: has_quantitative_attribute + range: float + recommended: true - GasPhaseAnalysis: - class_uri: VOC4CAT:0007814 - is_a: ProductIdentificationMethod + agitation_sparging_rate: description: |- - Analysis of the liquid sample from a catalytic test. + The volumetric flow rate at which gas is sparged/bubbled through the + liquid phase, or the rate of mechanical agitation used to maintain + the slurry suspension. + is_a: has_flow_rate + range: VolumeFlowRate + recommended: true -# ==================== SLOTS ==================== -# Shared has_X sub-slots (has_experiment_duration, …) and atmosphere -# are inherited from coremeta4cat_common and not redeclared here. + impeller_type: + description: |- + The category of impeller used to agitate and suspend the slurry + (e.g. Rushton turbine, pitched blade, anchor). + is_a: has_qualitative_attribute + range: string + recommended: true -slots: + agitation_speed: + description: |- + The rotational speed of the agitator/impeller, typically expressed + in revolutions per unit time. + is_a: has_angular_velocity + range: AngularVelocity + recommended: true - # ---- Reaction-level slots ---- + # ---- Microreactor-specific slots ---- - catalyst_quantity: - description: Mass of catalyst loaded into the reactor. - range: Mass - slot_uri: coremeta4cat:catalyst_quantity - required: true - multivalued: true - inlined_as_list: true + channel_material: + description: Material used for the construction of the microreactor channels. + is_a: has_qualitative_attribute + range: string + recommended: true - reactant: + channel_dimensions: description: |- - Reactant(s) or feed chemicals used in the reaction. Provide a ChemicalEntity - instance with inchikey, smiles, or iupac_name. For feed mixtures, list each - component as a separate ChemicalEntity and record composition via has_concentration. - range: ChemicalEntity - slot_uri: VOC4CAT:0000101 - required: true + The characteristic dimensions (e.g. width, depth) of the microreactor + channels. + is_a: has_length + range: LengthQuantity multivalued: true inlined_as_list: true - - has_catalyst_type: - description: |- - Type of catalyst used (e.g. heterogeneous, homogeneous, biocatalyst). - For heterogeneous catalysts, use voc4cat terms where available. - range: CatalystType - slot_uri: VOC4CAT:0007014 recommended: true - multivalued: true - inlined_as_list: true - has_reaction_type: - description: |- - A group of chemical reactions with common conditions or reactants, e.g. Oxidation, Hydrogenation, Reduction, Cracking. - range: ReactionType - slot_uri: VOC4CAT:0007010 + number_of_channels: + description: The number of parallel channels in the microreactor. + is_a: has_quantitative_attribute + range: integer recommended: true - multivalued: true - # ---- OperationParameters slots (flattened onto Reaction) ---- + # ---- FixedBedReactor-specific slots ---- - reactor_temperature_range: + catalyst_bed_diameter: + description: The internal diameter of the packed catalyst bed section. + is_a: has_length + range: LengthQuantity + recommended: true + + catalyst_bed_volume: description: |- - Temperature range in the reactor during the reaction, provided as a - QuantitativeRange with min_value and max_value (unit_code: "Cel"). - For a single set-point, set min_value equal to max_value. - range: QuantitativeRange - slot_uri: VOC4CAT:0007032 - multivalued: true - inlined_as_list: true + The bulk volume taken up by the catalyst and potential diluent in a + fixed bed reactor. + is_a: has_volume + range: Volume + slot_uri: VOC4CAT:0007021 + recommended: true - experiment_pressure: - description: Total pressure in the reactor during the experiment. - range: Pressure - slot_uri: VOC4CAT:0000118 - multivalued: true - inlined_as_list: true + catalyst_dilution_material: + description: |- + An inert solid mixed with catalyst particles in a fixed bed to modify + bed properties (e.g. improve heat/mass transfer, dilute activity). + is_a: has_qualitative_attribute + range: string + slot_uri: VOC4CAT:0008218 - feed_composition_range: + catalyst_bed_height: description: |- - Feed composition range studied, provided as a QuantitativeRange. - Express concentration bounds in an appropriate unit (e.g. "mol/L", "%" for - vol% or mol%). For fixed-composition experiments use reactant.has_concentration. - range: QuantitativeRange - slot_uri: coremeta4cat:feed_composition_range - multivalued: true - inlined_as_list: true + The axial length of the packed catalyst section in a reactor, + measured along the direction of flow. + is_a: has_length + range: LengthQuantity + slot_uri: VOC4CAT:0008217 # ---- FluidizedBedReactor-specific slots ---- gas_distributor_type: description: Type or design of the gas distributor plate in a fluidized bed reactor. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:gas_distributor_type multivalued: true bed_expansion_height: description: Height of bed expansion above the settled bed height under operating conditions. + is_a: has_quantitative_attribute range: float slot_uri: coremeta4cat:bed_expansion_height multivalued: true @@ -528,6 +685,7 @@ slots: bubble_size_distribution: description: Description or characterization of bubble size distribution in the fluidized bed. + is_a: has_qualitative_attribute range: string slot_uri: coremeta4cat:bubble_size_distribution @@ -536,6 +694,7 @@ slots: The analytical method used to identify and/or quantify reaction products. Should reference a CharacterizationTechnique instance (e.g. GCMS, HPLC_MS). The abstract stub ProductIdentificationMethod is retained for backward compatibility. + is_a: realized_plan range: ProductIdentificationMethod slot_uri: coremeta4cat:product_identification_method required: true diff --git a/tests/data/valid/CatalyticReaction-001.yaml b/tests/data/valid/CatalyticReaction-001.yaml index 4675b8d94..89124888a 100644 --- a/tests/data/valid/CatalyticReaction-001.yaml +++ b/tests/data/valid/CatalyticReaction-001.yaml @@ -10,21 +10,23 @@ # the generated Python loader instantiates ProductIdentificationMethod directly. # See SCHEMA_REVIEW.md for the proposed fix. # -# NOTE (carried_out_by): keyed inline list; each item needs an id. -# The loader instantiates the abstract ReactorDesignType (not FixedBedReactor). +# NOTE (used_reactor): keyed inline list; each item needs an id. +# The loader instantiates the abstract ChemicalReactor (not FixedBedReactor). id: "coremeta4cat:REAC_001_CO2_hydrogenation" catalyst_quantity: - value: 0.5 has_quantity_type: http://qudt.org/vocab/quantitykind/Mass unit: https://qudt.org/vocab/unit/GM -reactant: +used_reactant: - id: "https://pubchem.ncbi.nlm.nih.gov/compound/280" title: "CO2 (99.998% purity, 20 vol% in H2)" - id: "https://pubchem.ncbi.nlm.nih.gov/compound/783" title: "H2 (99.999% purity)" -has_catalyst_type: - - value: "heterogeneous, supported metal oxide" +catalyst_type: + - "heterogeneous_catalysis" +catalyst_form: + - "supported" reactor_temperature_range: - min_value: 200 max_value: 300 @@ -38,7 +40,7 @@ has_atmosphere: - value: "H2/CO2 = 3:1 (molar), GHSV = 10000 mL/(g*h)" feed_composition_range: - description: "H2/CO2 = 3:1, CO2 concentration 20 vol%" -carried_out_by: +used_reactor: - id: "coremeta4cat:REACT_001_FixedBed" title: "stainless steel fixed-bed plug-flow reactor" description: "10 mm inner diameter, 30 cm length, 0.5 g catalyst diluted with SiC" @@ -47,5 +49,6 @@ had_input_entity: title: "CO2/H2 feed gas mixture" description: "H2/CO2 molar ratio 3:1, total flow 100 mL/min" product_identification_method: - - title: "online gas chromatography" + - id: "coremeta4cat:REAC_001_GC_method" + title: "online gas chromatography" description: "GC (Agilent 7890B) with TCD and FID detectors; columns: Molecular Sieve 5A and Poraplot Q; products: MeOH, CO, CH4, H2O quantified" diff --git a/tests/data/valid/CatalyticReaction-002.yaml b/tests/data/valid/CatalyticReaction-002.yaml index 530940bff..f6f4497e7 100644 --- a/tests/data/valid/CatalyticReaction-002.yaml +++ b/tests/data/valid/CatalyticReaction-002.yaml @@ -2,8 +2,8 @@ # Reaction-002 -- Dry methane reforming (DRM) over Ni/CeO2 in fixed-bed reactor # Target class: Reaction # -# NOTE (carried_out_by): range is ReactorDesignType (abstract: true) -> dangling $ref. -# Loader instantiates abstract ReactorDesignType. Each item needs an id. +# NOTE (used_reactor): range is ChemicalReactor (abstract: true) -> dangling $ref. +# Loader instantiates abstract ChemicalReactor. Each item needs an id. # NOTE (product_identification_method): same abstract stub limitation as Reaction-001. # # Demonstrates: @@ -12,15 +12,24 @@ # - feed_composition_range (two entries: stoichiometric + CO2-rich conditions) # - Detailed product_identification_method (online GC with two columns) # - FixedBedReactor with detailed description (quartz tube, dilution, thermocouple) +# - used_catalyst and used_reactant (both inherited from ChemicalReaction) for +# detailed catalyst/reactant identity, alongside catalyst_type/catalyst_form +# for the controlled-vocabulary regime/form id: "coremeta4cat:REAC_002_DRM_NiCeO2" catalyst_quantity: - value: 0.2 has_quantity_type: http://qudt.org/vocab/quantitykind/Mass unit: g -has_catalyst_type: - - value: "heterogeneous, supported metal (Ni0 after in situ reduction of NiO/CeO2)" -reactant: +catalyst_type: + - "heterogeneous_catalysis" +catalyst_form: + - "supported" +used_catalyst: + - id: "coremeta4cat:CAT_002_NiCeO2" + title: "Ni/CeO2" + description: "Ni0 after in situ reduction of NiO/CeO2" +used_reactant: - id: "https://pubchem.ncbi.nlm.nih.gov/compound/297" title: "CH4 (99.995% purity, Linde)" - id: "https://pubchem.ncbi.nlm.nih.gov/compound/280" @@ -45,7 +54,7 @@ has_experiment_duration: value: 20.0 has_quantity_type: http://qudt.org/vocab/quantitykind/Time unit: https://qudt.org/vocab/unit/HR -carried_out_by: +used_reactor: - id: "coremeta4cat:REACT_003_FixedBed_DRM" title: "quartz fixed-bed plug-flow reactor (DRM)" description: "quartz tube reactor, 8 mm inner diameter, 30 cm length; catalyst bed: 200 mg NiO/CeO2 (250-500 um sieve fraction) diluted 1:2 (mass) with inert SiC chips (500 um); thermocouple inserted into catalyst bed centre; backpressure regulator at outlet (1 bar); reactor surrounded by ceramic-fibre furnace with PID temperature controller; mass flow controllers (Brooks SLA5850) for CH4, CO2, N2" @@ -60,5 +69,6 @@ had_input_entity: title: "N2 internal standard (99.999%, Linde)" description: "N2 flow: 10 mL/min (STP); used as internal standard for GC molar balance" product_identification_method: - - title: "online dual-column gas chromatography (TCD)" + - id: "coremeta4cat:REAC_002_GC_method" + title: "online dual-column gas chromatography (TCD)" description: "Shimadzu GC-2014 with TCD detector (Ar carrier gas); column 1: HayeSep D (2 m x 1/8 in) for CO2, CH4 separation; column 2: Molecular Sieve 5A (2 m x 1/8 in) for CO, H2, N2, CH4 separation; 10-port Valco valve for column switching; oven temperature: 50 deg C isothermal; TCD temperature: 250 deg C; injection: automated gas sampling valve, 1 mL loop; analysis cycle: 10 min; calibration: certified gas standard (Air Liquide CRYSTAL mixture: H2 5%, CO 5%, CH4 5%, CO2 10%, N2 balance); CH4 conversion, CO2 conversion, H2/CO ratio, and carbon balance calculated from N2-normalised molar flows" From cba96754f2027baddb43cc4ff9b7c0dfbb150fe5 Mon Sep 17 00:00:00 2001 From: HendrikBorgelt <84382772+HendrikBorgelt@users.noreply.github.com> Date: Tue, 14 Jul 2026 14:58:57 +0200 Subject: [PATCH 4/7] Expand documentation Adds a dedicated catalysis-dataset.md page documenting the CatalysisDataset model and its rdf_type classification pattern. Rewrites the stale design-patterns.md content and adds a section on the new chemdcat-ap inheritance chain. Fixes the contributing.md gap around the Excel-inbox edit-and-PR workflow (previously undocumented, pushing contributors to GitHub issues only) and aligns inbox/README.md with it. --- docs/catalysis-dataset.md | 123 +++++++++++++++++++++++++++++++++ docs/contributing.md | 22 ++++-- docs/design-patterns.md | 139 +++++++++++++++++++++++++------------- docs/how-to-extend.md | 98 +++++++++++++-------------- docs/overview.md | 6 +- inbox/README.md | 42 +++++++----- mkdocs.yml | 2 + 7 files changed, 311 insertions(+), 121 deletions(-) create mode 100644 docs/catalysis-dataset.md diff --git a/docs/catalysis-dataset.md b/docs/catalysis-dataset.md new file mode 100644 index 000000000..19089eefe --- /dev/null +++ b/docs/catalysis-dataset.md @@ -0,0 +1,123 @@ +--- +title: CatalysisDataset +description: The entry-point class, its global classification enum, and how to combine multiple pillars into one dataset +--- + +# CatalysisDataset + +`CatalysisDataset` is the entry point for every CoreMeta4Cat record. It is a `dcat:Dataset` -- fully compatible with plain DCAT and DCAT-AP -- extended with a global classification field and four link slots that connect to the [four CoreMeta4Cat pillars](design-patterns.md#the-four-pillars): [Synthesis](synthesis.md), [Characterization](characterization.md), [Reaction](reaction.md), and [Simulation](simulation.md). + +This page is the reference for `CatalysisDataset` itself: its fields, the `CatalysisResearchFieldEnum` classification vocabulary, and a worked example of combining several pillars into a single dataset. For the conceptual background on *why* it's structured this way, see [Design Patterns: The entry point](design-patterns.md#the-entry-point-catalysisdataset) and [Pattern 1: Classification via rdf_type](design-patterns.md#pattern-1-classification-via-rdf_type). + +## Fields + +`CatalysisDataset` has four fields beyond the ones it inherits from `dcat:Dataset` (`id`, `title`, `description`, ...): + +| Field | Range | Cardinality | Purpose | +|---|---|---|---| +| `rdf_type` | `CatalysisResearchFieldEnum` (via `bindings`) | Recommended | **Layer 1** -- the coarsest possible classification: which field of catalysis this dataset belongs to. | +| `was_generated_by` | `DataGeneratingActivity` | Recommended, Multivalued | **Layer 2** -- the activity/activities that *produced* this dataset's data: `Synthesis`, `Characterization`, and/or `Simulation` instances. | +| `is_about_activity` | `EvaluatedActivity` | Recommended, Multivalued | **Layer 2** -- the catalytic `Reaction` this dataset is *about*, without having generated it. | +| `is_about_entity` | `EvaluatedEntity` | Recommended, Multivalued | **Layer 2** -- the catalyst sample or material this dataset concerns. | + +All four are Recommended, not Mandatory: a dataset can legitimately carry only a subset (e.g. a pure simulation dataset has no `is_about_entity`). + +## Layer 1: classifying the research field + +`rdf_type` on `CatalysisDataset` is not a free-form slot -- its value is constrained to `CatalysisResearchFieldEnum` via a [DCAT-AP-PLUS Pattern 3 `bindings` block](design-patterns.md#pattern-1-classification-via-rdf_type) rather than by adding a dedicated new slot. This keeps `CatalysisDataset` a drop-in `dcat:Dataset` (any DCAT-AP tool can still read `rdf_type`) while giving CoreMeta4Cat tooling a controlled, machine-actionable value to filter and facet on. + +```yaml +rdf_type: + id: VOC4CAT:0007001 + title: "heterogeneous catalysis" +``` + +**`CatalysisResearchFieldEnum` permissible values:** + +| Value | Voc4Cat term | Description | +|---|---|---| +| `heterogeneous_catalysis` | `VOC4CAT:0007001` | Catalyst and reactants are in different phases. | +| `homogeneous_catalysis` | `VOC4CAT:0000294` | Catalyst and reactants are in the same phase. | +| `biocatalysis` | `VOC4CAT:0000204` | Use of enzymes or whole cells as catalysts. | +| `electrocatalysis` | `VOC4CAT:0000216` | Catalysis of electrochemical reactions. | +| `photocatalysis` | `VOC4CAT:0000001` | Catalysis driven by absorption of light energy by a photocatalyst. | +| `hybrid_catalysis` | -- | Combination of two or more of the above approaches. | +| `other` | -- | Any catalysis research field not covered by the terms above. | + +This is a dataset-wide, single classification axis -- it says nothing about *how* a specific reaction was run. That's a separate, per-reaction concern: `CatalyticReaction.catalyst_type` uses the same `CatalysisResearchFieldEnum` values to record the catalytic regime of one particular reaction (see [Reaction: catalyst_type](reaction.md)), independent of whatever this dataset's own `rdf_type` says. A heterogeneous-catalysis dataset (`rdf_type`) can, for instance, still contain a reaction step run under homogeneous conditions as a control experiment (`catalyst_type`) -- the two fields are deliberately decoupled. + +## Layer 2: linking the pillars + +Layer 2 is where a `CatalysisDataset` actually points at the substance of the record. Three slots cover it, and all three are multivalued -- a single dataset can reference several activities of the same kind at once (e.g. two separate `Characterization` runs): + +- **`was_generated_by`** -- activities that *produced* this dataset's data. Only `Synthesis`, `Characterization`, and `Simulation` make sense here, since only they are `DataGeneratingActivity` subclasses. +- **`is_about_activity`** -- the catalytic process this dataset *describes*, without having generated it. `Reaction` (schema name `CatalyticReaction`) is not a `DataGeneratingActivity` -- see the [🔬 deep dive on this distinction](design-patterns.md#deep-dive-the-evaluatedactivity-distinction) -- so it is linked here instead of via `was_generated_by`. +- **`is_about_entity`** -- the catalyst sample or material the dataset concerns, independent of which activity produced or observed it. + +## Combining multiple pillars into one dataset + +A single `CatalysisDataset` is not limited to one pillar. The most common real-world case spans several: a catalyst is synthesized, then tested in a reaction, and both the catalyst itself and the reaction products are separately characterized afterwards. All of that can live in one dataset, because `was_generated_by` and `is_about_activity` are both multivalued. + +The example below reports the full lifecycle of a Ni/CeO2 catalyst used for dry methane reforming (DRM): synthesis, the catalytic reaction, characterization of the catalyst (post-synthesis XRD), and characterization of the reaction products (a dedicated GC-MS run, separate from the inline `product_identification_method` recorded on the `Reaction` itself). + +```yaml +id: "coremeta4cat:DATASET_001_NiCeO2_DRM" +type: CatalysisDataset + +# Layer 1 -- global classification +rdf_type: + id: VOC4CAT:0007001 + title: "heterogeneous catalysis" + +# Layer 2 -- three activities produced this dataset's data... +was_generated_by: + - id: "coremeta4cat:SYN_001_NiCeO2" + type: Synthesis + rdf_type: + id: VOC4CAT:0007016 + title: "impregnation" + nominal_composition: "10wt% Ni/CeO2" + had_output_entity: + - id: "coremeta4cat:CAT_002_NiCeO2" + type: CatalystSample + title: "Ni/CeO2" + + - id: "coremeta4cat:CHAR_001_NiCeO2_XRD" + type: Characterization + rdf_type: + id: CHMO:0000158 + title: "powder X-ray diffraction" + evaluated_entity: + id: "coremeta4cat:CAT_002_NiCeO2" # same catalyst sample as above + realized_plan: + type: PowderXRD + + - id: "coremeta4cat:CHAR_002_DRM_products_GCMS" + type: Characterization + rdf_type: + id: CHMO:0000497 + title: "gas chromatography-mass spectrometry" + evaluated_entity: + id: "coremeta4cat:REAC_002_DRM_NiCeO2" # evaluating the reaction's products + realized_plan: + type: GCMS + +# ...and one Reaction is what this dataset is about, not what generated it +is_about_activity: + - id: "coremeta4cat:REAC_002_DRM_NiCeO2" + type: CatalyticReaction + used_catalyst: + id: "coremeta4cat:CAT_002_NiCeO2" # same catalyst sample again + catalyst_type: + - "heterogeneous_catalysis" + +is_about_entity: + - id: "coremeta4cat:CAT_002_NiCeO2" +``` + +A few things worth noticing in this example: + +- The same `CatalystSample` (`CAT_002_NiCeO2`) is referenced from four places: the `Synthesis` that produced it (`had_output_entity`), the `Characterization` that measured it directly (`evaluated_entity`), the `Reaction` that consumed it (`used_catalyst`), and the dataset's own `is_about_entity`. This is what actually connects the four pillars into one coherent record -- shared identifiers, not schema-level nesting. +- The second `Characterization` (`CHAR_002_DRM_products_GCMS`) sets `evaluated_entity` to the *Reaction*, not the catalyst -- because what's being measured there is the reaction's product stream, not the catalyst material. `evaluated_entity` accepts any `EvaluatedEntity`, and a `CatalyticReaction`'s outputs qualify. +- `catalyst_type` on the `Reaction` and `rdf_type` on the `CatalysisDataset` both draw from `CatalysisResearchFieldEnum`, but independently -- see the note at the end of the Layer 1 section above. +- For a real submission, each of `SYN_001_NiCeO2`, `CHAR_001_NiCeO2_XRD`, `CHAR_002_DRM_products_GCMS`, and `REAC_002_DRM_NiCeO2` would carry their own full set of Mandatory/Recommended fields (method parameters, instrument settings, operating conditions, ...); this example only shows the fields relevant to how the four pillars connect. See [Synthesis](synthesis.md), [Characterization](characterization.md), and [Reaction](reaction.md) for the full field lists of each. diff --git a/docs/contributing.md b/docs/contributing.md index 86b872d2a..07c517cbd 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -27,14 +27,28 @@ Not sure whether a field exists, or how to annotate something? Use the [GitHub D --- -## Understanding the vocabulary workbook +## Propose changes via the vocabulary workbook (no coding required) -Download the [vocabulary reference workbook](assets/coremeta4cat_vocabulary.xlsx) for a structured overview of all fields, organised by data class and colour-coded by importance (Mandatory / Recommended / Optional). The workbook opens with an **Introduction** sheet and a **Legend** sheet explaining the colour coding and column meanings. +Download the [vocabulary reference workbook](assets/coremeta4cat_vocabulary.xlsx) — a structured overview of all fields, organised by data class and colour-coded by importance (Mandatory / Recommended / Optional). The **Introduction** and **Legend** sheets explain the colour coding, column meanings, and how to propose changes directly in the file. -The schema is the authoritative source — the workbook is generated from it automatically. +You can use it two ways: + +- **As a reference** — browse it to look up existing fields while designing or annotating your own data sheets. +- **To propose a change** — edit a downloaded copy (correct a description, adjust M/R/O, add a new field or class — you can add a new field and the new class it points to in the same submission) and submit it as a pull request: + + 1. Edit the `Synthesis`, `Characterization`, `Reaction`, or `Simulation` sheet directly. Don't rename sheets or change column headers. + 2. Place the edited file at `inbox/coremeta4cat_vocabulary.xlsx` in a new branch and open a pull request. + 3. An automated check validates the workbook and posts the results as a comment on your PR — including any errors to fix and warnings to review (e.g. if a field you changed is shared across multiple classes, it lists every other class your edit also affects). + 4. If validation passes, a maintainer reviews and merges; the schema updates automatically. + + See [`inbox/README.md`](https://github.com/nfdi4cat/CoreMeta4Cat/blob/main/inbox/README.md) in the repository for the full workflow. + +Rows shown in grey italics in the workbook are inherited from chemdcat-ap, the underlying chemistry model — they're shown for reference but can't be changed through this workflow; open an issue instead. + +The schema is the authoritative source — the workbook is generated from it automatically, so any of your edits are proposals until they're validated and merged, not immediate changes. --- ## Contribute code or schema changes -If you want to contribute a schema change yourself (add a class, slot, or enumeration), please first open an issue to discuss the change. Then follow the developer guidelines in [CONTRIBUTING.md](https://github.com/nfdi4cat/CoreMeta4Cat/blob/main/CONTRIBUTING.md) on GitHub. +If you want to edit the LinkML schema YAML directly (larger structural changes, new modules, etc.), please first open an issue to discuss the change. Then follow the developer guidelines in [CONTRIBUTING.md](https://github.com/nfdi4cat/CoreMeta4Cat/blob/main/CONTRIBUTING.md) on GitHub. diff --git a/docs/design-patterns.md b/docs/design-patterns.md index 347ff0db7..32ff80a9f 100644 --- a/docs/design-patterns.md +++ b/docs/design-patterns.md @@ -22,7 +22,7 @@ This page is written in three tiers. Most users only need the first two. |---|---|---| | **Overview** | Everyone — data providers, repository managers | [The entry point](#the-entry-point-catalysisdataset), [The four pillars](#the-four-pillars) | | **Pattern explanations** | Users who want to understand how to navigate or extend the schema | [Classification pattern](#pattern-1-classification-via-rdf_type), [Activity pattern](#pattern-2-activities-and-plans), [Mixin pattern](#pattern-3-mixin-classes) | -| **Technical depth** | Schema developers and DCAT-AP-PLUS integrators | [Sections marked with 🔬](#deep-dive-the-evaluated-activity-distinction) | +| **Technical depth** | Schema developers and DCAT-AP-PLUS integrators | [Sections marked with 🔬](#deep-dive-the-evaluatedactivity-distinction) | --- @@ -69,12 +69,12 @@ The key points here are: The four CoreMeta4Cat pillars — **Synthesis**, **Characterization**, **Reaction**, and **Simulation** — are the core of the metadata model. Each is a separate class, defined in its own subprofile module, and linked from the `CatalysisDataset` via the slots above. ``` -catcore.yaml (aggregator + CatalysisDataset) - ├── catcore_common.yaml (shared slots and enumerations) - ├── catcore_synthesis_ap.yaml (Synthesis + 12 preparation methods) - ├── catcore_characterization_ap.yaml (Characterization + 28 techniques) - ├── catcore_reaction_ap.yaml (Reaction + 8 reactor types) - └── catcore_simulation_ap.yaml (Simulation + 4 methods + 12 properties) +coremeta4cat.yaml (aggregator + CatalysisDataset) + ├── coremeta4cat_common.yaml (shared slots and enumerations) + ├── coremeta4cat_synthesis_ap.yaml (Synthesis + 12 preparation methods) + ├── coremeta4cat_characterization_ap.yaml (Characterization + 28 techniques) + ├── coremeta4cat_reaction_ap.yaml (Reaction + 8 reactor types) + └── coremeta4cat_simulation_ap.yaml (Simulation + 4 methods + 12 properties) ``` ### Synthesis @@ -138,15 +138,15 @@ catcore.yaml (aggregator + CatalysisDataset) ### Reaction -**What it is:** The catalytic reaction being studied. Unlike Synthesis and Characterization, Reaction is **not** a `DataGeneratingActivity`. It is the process being *observed*, not the process generating the dataset. +**What it is:** The catalytic reaction being studied. Unlike Synthesis and Characterization, Reaction is **not** a `DataGeneratingActivity`. It is the process being *observed*, not the process generating the dataset. In the schema it's named `CatalyticReaction`, and it specializes chemdcat-ap's generic `ChemicalReaction` -- see [Pattern 5: Specializing chemdcat-ap](#pattern-5-specializing-chemdcat-ap-inheritance) below for what that means in practice. **Key links:** -- `carried_out_by` → a `ReactorDesignType` (the physical reactor) -- `had_input_entity` → reactant feeds +- `used_reactor` (`is_a: carried_out_by`) → a `ChemicalReactor` (the physical reactor) +- `used_reactant` (`is_a: had_input_entity`) → the reactant feeds - `product_identification_method` → a `CharacterizationTechnique` used for product analysis -**Eight reactor design types** are defined: +**Eight reactor design types** are defined, all specializing chemdcat-ap's generic `Reactor` class via the abstract `ChemicalReactor`: `FixedBedReactor` · `CSTR` · `PlugFlowReactor` · `Autoclave` · `SlurryReactor` · `Microreactor` · `ElectrochemicalReactor` · `FluidizedBedReactor` @@ -184,7 +184,7 @@ Rather than defining a fixed class hierarchy for every type of catalysis or ever ```yaml rdf_type: - id: voc4cat:0007001 + id: VOC4CAT:0007001 title: "heterogeneous catalysis" ``` @@ -212,16 +212,7 @@ realized_plan: The `rdf_type` slot gives the machine-readable ontology term; the concrete subclass (`Impregnation`, `PowderXRD`, …) provides the structured parameter slots. Both are used together. -The allowed values for `rdf_type` on `CatalysisDataset` are defined in `CatalysisResearchFieldEnum`: - -| Value | Ontology term | Description | -|---|---|---| -| `heterogeneous_catalysis` | `voc4cat:0007001` | Catalyst and reactants in different phases | -| `homogeneous_catalysis` | `voc4cat:0000294` | Catalyst and reactants in the same phase | -| `electrocatalysis` | `voc4cat:0000216` | Catalysis of electrochemical reactions | -| `biocatalysis` | `voc4cat:0000204` | Enzyme or whole-cell catalysis | -| `hybrid_catalysis` | *(pending)* | Combination of two or more approaches | -| `other` | — | Fallback for unlisted fields | +The allowed values for `rdf_type` on `CatalysisDataset` are defined in `CatalysisResearchFieldEnum` -- see the [CatalysisDataset](catalysis-dataset.md) page for the full value table and a worked example combining multiple pillars into one dataset. --- @@ -269,7 +260,12 @@ realized_plan: calcination_gaseous_environment: "air" ``` -This separation means a single `PreparationMethod` record could in principle be shared across multiple `Synthesis` activities — a direct gain for reproducibility. +This separation means a single `PreparationMethod` record could in principle be shared across multiple `Synthesis` activities — a direct gain for reproducibility. That sharing depends on the Plan being independently identifiable, which is why `realized_plan.id` is populated above. + +`Plan` (external, DCAT-AP-PLUS) only carries `title`/`description` — no `id`. Rather than repeat an `id` slot on each of `PreparationMethod`, `CharacterizationTechnique`, `SimulationMethod`, and `ProductIdentificationMethod` individually, CoreMeta4Cat inserts one shared intermediate class, `CatalysisPlan` (`is_a: Plan`, abstract), that adds `id` once; all four then specialize `CatalysisPlan` instead of `Plan` directly. `realized_plan` itself needed `inlined: true` added explicitly on each of its class-level overrides (on `Synthesis`, `Characterization`, `Simulation`) once its range became identifier-bearing — LinkML's default for a single-valued, class-typed slot switches from "inline the whole object" to "reference by id" the moment the range class gains an identifier slot, unless told otherwise. + +!!! note "A LinkML JSON Schema quirk worth knowing" + Slots marked `recommended: true` (not `required: true`) still show up in the generated JSON Schema's `required` array — `gen-json-schema` has no native "recommended" tier to fall back to, so it folds recommended into required rather than dropping the distinction. In practice this means every Recommended field on a class needs a value for an instance to validate via `linkml-run-examples` (or any other JSON-Schema-based validator), not just Mandatory ones. --- @@ -302,22 +298,25 @@ In LinkML, a mixin class has no `class_uri` of its own and generates no independ --- -## Pattern 4: Shared slots in catcore_common +## Pattern 4: Shared slots in coremeta4cat_common !!! abstract "Pattern summary" - Slots referenced by two or more subprofiles are declared once in `catcore_common.yaml` and imported by all subprofiles. This keeps the schema DRY (Don't Repeat Yourself). + Slots referenced by two or more subprofiles are declared once in `coremeta4cat_common.yaml` and imported by all subprofiles. This keeps the schema DRY (Don't Repeat Yourself) -- but it also means editing one changes it everywhere it's used, not just in the context you had in mind. See the warning below. -Some slots appear in multiple pillars — for example, `temperature` is relevant to Synthesis (calcination), Characterization (temperature-programmed experiments), and Reaction (reactor temperature). These shared slots live in `catcore_common.yaml`: +Some slots appear in multiple pillars — for example, `has_atmosphere` is relevant to Synthesis (e.g. `MolecularSynthesis`), Characterization (e.g. `InfraredSpectroscopy`, `NMRSpectroscopy`), and Reaction (`CatalyticReaction`). These shared slots live in `coremeta4cat_common.yaml`: ``` -catcore_common.yaml — shared slots include: - atmosphere, temperature, flow_rate, heating_rate, - equipment, sample_mass, stirring_speed, stirring_duration, - drying_*, calcination_*, concentration, solvent, - experiment_duration, step_size, resolution, ... +coremeta4cat_common.yaml — shared slots include: + has_atmosphere, solvent, has_experiment_duration, + has_heating_rate, has_operation_mode, has_energy, + number_of_scans, resolution, step_size, carrier_gas, + has_sample_mass, has_calcination_*, has_drying_*, ... ``` -Slots that are exclusive to a single subprofile are declared in that subprofile file only. +Slots that are exclusive to a single subprofile are declared in that subprofile file only. Physical quantity slots that belong to chemdcat-ap's own material/chemistry model (e.g. `has_temperature`, `has_pressure`) live further down the import chain, in `material_entities_ap.yaml` — see [Pattern 5](#pattern-5-specializing-chemdcat-ap-inheritance). + +!!! warning "Editing a shared slot changes it everywhere" + LinkML gives each slot exactly one definition, reused via `slots:`/`slot_usage`, not one copy per class. If you edit a shared slot's field through the Excel inbox workflow and no `slot_usage` override already exists for the class you're editing, the change applies to the slot's single global definition -- affecting every other class that uses it too. The inbox tooling detects this and warns you, listing every other class the edit will also affect. If you only meant to change it for one class, that needs a `slot_usage` override added directly in the YAML (open a schema issue), not an Excel edit. --- @@ -348,11 +347,15 @@ was_generated_by: title: "powder X-ray diffraction" is_about_activity: - - type: Reaction # the CO oxidation reaction being monitored - catalyst_quantity: 50.0 - reactant: ["1 vol% CO", "2 vol% O2"] - carried_out_by: - type: FixedBedReactor + - type: CatalyticReaction # the CO oxidation reaction being monitored + catalyst_quantity: + - value: 50.0 + unit: https://qudt.org/vocab/unit/MilliGM + used_reactant: + - title: "CO (1 vol%)" + - title: "O2 (2 vol%)" + used_reactor: + - type: FixedBedReactor ``` If `Reaction` were modelled as a `DataGeneratingActivity`, this relationship would collapse: it would be impossible to distinguish the measurement from the catalytic process it monitors. @@ -366,17 +369,57 @@ The same distinction appears in DCAT-AP-PLUS itself — the NMR example in the b The full import chain, from the CoreMeta4Cat top level down to the DCAT-AP-PLUS base, is: ``` -catcore.yaml - └── catcore_common.yaml - └── chem_dcat_ap - └── chemical_reaction_ap - └── chemical_entities_ap - └── material_entities_ap - └── dcat_ap_plus ← DCAT-AP-PLUS base - ├── catcore_synthesis_ap.yaml - ├── catcore_characterization_ap.yaml - ├── catcore_reaction_ap.yaml - └── catcore_simulation_ap.yaml +coremeta4cat.yaml + └── coremeta4cat_common.yaml + └── chem_dcat_ap.yaml (chemdcat-ap, vendored locally) + └── chemical_reaction_ap.yaml (ChemicalReaction, Reactor) + └── chemical_entities_ap.yaml (ChemicalEntity, MaterialisticMixin) + └── material_entities_ap.yaml (Temperature, Mass, Pressure, ...) + └── dcat_ap_plus ← DCAT-AP-PLUS base (external, not vendored) + ├── coremeta4cat_synthesis_ap.yaml + ├── coremeta4cat_characterization_ap.yaml + ├── coremeta4cat_reaction_ap.yaml + └── coremeta4cat_simulation_ap.yaml ``` Each layer adds domain-specific classes and slots on top of the layer below, without modifying it. This means CoreMeta4Cat datasets remain valid DCAT-AP-PLUS instances, which in turn remain valid DCAT-AP datasets. + +The `chem_dcat_ap.yaml` / `chemical_reaction_ap.yaml` / `chemical_entities_ap.yaml` / `material_entities_ap.yaml` files are chemdcat-ap — vendored (copied) into this repo rather than imported as a package. `dcat_ap_plus` itself is *not* vendored; it's resolved via LinkML's normal import mechanism against its published schema URI. + +--- + +## Pattern 5: Specializing chemdcat-ap (inheritance) + +!!! abstract "Pattern summary" + `CatalyticReaction` and `ChemicalReactor` are `is_a` specializations of chemdcat-ap's generic `ChemicalReaction` and `Reactor` classes, not independent classes that merely resemble them. This means they *inherit* chemdcat-ap's slots on top of their own catalysis-specific ones. + +Earlier versions of this schema modelled `CatalyticReaction` and `ChemicalReaction` as unrelated siblings — both `is_a: EvaluatedActivity`, duplicating the generic reaction concept instead of specializing it. That's been fixed: + +``` +ChemicalReaction (chemdcat-ap) --is_a--> EvaluatedActivity + ^ + | is_a +CatalyticReaction (coremeta4cat) + +Reactor (chemdcat-ap) --is_a--> Device + ^ + | is_a +ChemicalReactor (coremeta4cat, abstract) + ^ + | is_a +FixedBedReactor, CSTR, PlugFlowReactor, Autoclave, +SlurryReactor, Microreactor, ElectrochemicalReactor, FluidizedBedReactor +``` + +**What this means in practice:** + +- `CatalyticReaction` automatically inherits `ChemicalReaction`'s slots — `used_starting_material`, `used_reactant`, `generated_product`, `used_catalyst`, `used_solvent`, `used_reactor`, `has_duration`, `has_temperature`, `has_pressure`, `has_yield`, `has_reaction_step`, `related_resource` — on top of its own catalysis-specific slots (`catalyst_quantity`, `catalyst_type`, `reactor_temperature_range`, ...). +- Where a coremeta4cat-specific slot's purpose fully overlapped with an inherited one, the coremeta4cat slot was removed in favour of the inherited slot: `reactant` was dropped in favour of `used_reactant` (range `Reagent`). Other cases (e.g. `experiment_pressure` vs. the inherited `has_pressure`) are not identical in shape and remain an open reconciliation item, not yet a bug to "fix" by deleting one side. +- Where `CatalyticReaction` needed to *narrow* an inherited slot (e.g. requiring a specific `ChemicalReactor` rather than any generic reactor), the narrowing is applied via `slot_usage` on the most specific already-existing inherited slot (`used_reactor`, `is_a: carried_out_by`) rather than on the generic parent relation (`carried_out_by`) directly. Narrowing the parent relation instead would duplicate `used_reactor` for no reason -- both would resolve to the same effective field, just under two different names. +- The same specialization applies one level down: `ChemicalReactor` (and its 8 concrete reactor types) inherits `Reactor`'s slots, rather than duplicating them. + +**Where you'll see this:** + +- **Generated docs** (`reaction.md`) show the full inherited slot set under `CatalyticReaction`, not just the catalysis-specific ones. +- **The vocabulary workbook** shows inherited fields as grey, read-only rows (see the workbook's Legend sheet) — they're visible for reference, but they belong to chemdcat-ap, not to this schema, so they can't be edited through the Excel inbox workflow. +- **Naming**: the schema class is `CatalyticReaction`, not `Reaction`, specifically to avoid a name clash with chemdcat-ap's `ChemicalReaction` now that one specializes the other. Generated docs display it as "Reaction" for readability, but always use `CatalyticReaction` in data files and code. diff --git a/docs/how-to-extend.md b/docs/how-to-extend.md index c43ee626b..b75e711c3 100644 --- a/docs/how-to-extend.md +++ b/docs/how-to-extend.md @@ -30,19 +30,19 @@ Each extension type has a designated parent class (see the table below). Always | What you are adding | Parent class | File | |---|---|---| -| New preparation method | `PreparationMethod` | `catcore_synthesis_ap.yaml` | -| New characterisation technique | `CharacterizationTechnique` | `catcore_characterization_ap.yaml` | -| New reactor type | `ReactorDesignType` | `catcore_reaction_ap.yaml` | -| New simulation method | `SimulationMethod` | `catcore_simulation_ap.yaml` | -| New calculated property | `CalculatedProperty` | `catcore_simulation_ap.yaml` | +| New preparation method | `PreparationMethod` | `coremeta4cat_synthesis_ap.yaml` | +| New characterisation technique | `CharacterizationTechnique` | `coremeta4cat_characterization_ap.yaml` | +| New reactor type | `ChemicalReactor` (abstract) | `coremeta4cat_reaction_ap.yaml` | +| New simulation method | `SimulationMethod` | `coremeta4cat_simulation_ap.yaml` | +| New calculated property | `CalculatedProperty` | `coremeta4cat_simulation_ap.yaml` | | New mixin (slot group) | *(no parent — mixin: true)* | Appropriate subprofile | -| New shared slot | *(no class — top-level slot)* | `catcore_common.yaml` | +| New shared slot | *(no class — top-level slot)* | `coremeta4cat_common.yaml` | **Rule 3 — Register an ontology term.** -Every new class should have a `class_uri:` pointing to a term in an established ontology (Voc4Cat, CHMO, OBI, NCIT, …). If no suitable term exists yet, use a provisional catcore-prefixed URI (`catcore:MyNewClass`) and open a Voc4Cat issue to request a proper term. +Every new class should have a `class_uri:` pointing to a term in an established ontology (Voc4Cat, CHMO, OBI, NCIT, …). If no suitable term exists yet, use a provisional coremeta4cat-prefixed URI (`coremeta4cat:MyNewClass`) and open a Voc4Cat issue to request a proper term. **Rule 4 — Declare slots in the right file.** -Slots used by exactly one class go in that class's subprofile file. Slots shared by two or more classes go in `catcore_common.yaml`. +Slots used by exactly one class go in that class's subprofile file. Slots shared by two or more classes go in `coremeta4cat_common.yaml`. **Rule 5 — Apply existing mixins before adding new slots.** If your new class needs drying, calcination, precipitation, or thermal process parameters, apply the appropriate mixin rather than redeclaring those slots. Only add method-specific slots beyond what the mixin provides. @@ -54,7 +54,7 @@ Every slot in a new class should have either `required: true` (Mandatory), `reco ## Adding a preparation method -New catalyst synthesis routes are added to `catcore_synthesis_ap.yaml` as `PreparationMethod` subclasses. +New catalyst synthesis routes are added to `coremeta4cat_synthesis_ap.yaml` as `PreparationMethod` subclasses. ### Step-by-step @@ -65,7 +65,7 @@ Before declaring any slots, check whether the method includes a drying step, cal ```yaml MyNewMethod: is_a: PreparationMethod - class_uri: voc4cat:XXXXXXX # register a real term, or use catcore: prefix temporarily + class_uri: VOC4CAT:XXXXXXX # register a real term, or use coremeta4cat: prefix temporarily mixins: - DryingMixin # if the method has a drying step - CalcinationMixin # if the method has a calcination step @@ -93,7 +93,7 @@ slots: my_specific_parameter_a: description: What this parameter means and its typical range. range: float - slot_uri: catcore:my_specific_parameter_a # or a Voc4Cat / ontology URI + slot_uri: coremeta4cat:my_specific_parameter_a # or a Voc4Cat / ontology URI multivalued: true unit: ucum_code: Cel # use UCUM codes — e.g. Cel, h, mL/min, bar, g @@ -101,7 +101,7 @@ slots: my_specific_parameter_b: description: What this parameter means. range: string - slot_uri: catcore:my_specific_parameter_b + slot_uri: coremeta4cat:my_specific_parameter_b multivalued: true ``` @@ -110,7 +110,7 @@ slots: ```yaml PhotochemicalSynthesis: is_a: PreparationMethod - class_uri: catcore:PhotochemicalSynthesis # replace with Voc4Cat term when available + class_uri: coremeta4cat:PhotochemicalSynthesis # replace with Voc4Cat term when available mixins: - DryingMixin description: |- @@ -127,13 +127,13 @@ slots: light_source: description: Type of light source used (e.g. Xe lamp, UV-LED, solar simulator). range: string - slot_uri: catcore:light_source + slot_uri: coremeta4cat:light_source multivalued: true irradiation_wavelength: description: Dominant wavelength of the irradiation source. range: float - slot_uri: catcore:irradiation_wavelength + slot_uri: coremeta4cat:irradiation_wavelength multivalued: true unit: ucum_code: nm @@ -141,7 +141,7 @@ slots: irradiation_duration: description: Total duration of light irradiation. range: float - slot_uri: catcore:irradiation_duration + slot_uri: coremeta4cat:irradiation_duration multivalued: true unit: ucum_code: h @@ -149,7 +149,7 @@ slots: light_intensity: description: Irradiance at the sample surface. range: float - slot_uri: catcore:light_intensity + slot_uri: coremeta4cat:light_intensity multivalued: true unit: ucum_code: mW/cm2 @@ -159,7 +159,7 @@ slots: ## Adding a characterisation technique -New analytical techniques are added to `catcore_characterization_ap.yaml` as `CharacterizationTechnique` subclasses. +New analytical techniques are added to `coremeta4cat_characterization_ap.yaml` as `CharacterizationTechnique` subclasses. ### Step-by-step @@ -193,7 +193,7 @@ MyNewTechnique: **3. Declare technique-specific slots.** -Use the same pattern as for preparation method slots (see above). Place them in the `slots:` section of `catcore_characterization_ap.yaml`. +Use the same pattern as for preparation method slots (see above). Place them in the `slots:` section of `coremeta4cat_characterization_ap.yaml`. ### Minimal complete example — NeutronDiffraction @@ -214,7 +214,7 @@ slots: neutron_wavelength: description: Wavelength of the neutron beam. range: float - slot_uri: catcore:neutron_wavelength + slot_uri: coremeta4cat:neutron_wavelength multivalued: true unit: ucum_code: Ao # Angstrom @@ -222,13 +222,13 @@ slots: moderator_type: description: Type of neutron moderator (e.g. cold, thermal, hot source). range: string - slot_uri: catcore:moderator_type + slot_uri: coremeta4cat:moderator_type multivalued: true detector_coverage: description: Angular range covered by the detector bank. range: float - slot_uri: catcore:detector_coverage + slot_uri: coremeta4cat:detector_coverage multivalued: true unit: ucum_code: deg @@ -238,7 +238,7 @@ slots: ## Adding a reactor type -New reactor geometries or operating modes are added to `catcore_reaction_ap.yaml` as `ReactorDesignType` subclasses. +New reactor geometries or operating modes are added to `coremeta4cat_reaction_ap.yaml` as `ChemicalReactor` subclasses. `ChemicalReactor` is itself an abstract specialization of chemdcat-ap's generic `Reactor` class (see [Pattern 5](design-patterns.md#pattern-5-specializing-chemdcat-ap-inheritance) in Design Patterns) -- new reactor types inherit that chain, they don't need to redeclare anything from it. ### Step-by-step @@ -246,8 +246,8 @@ New reactor types are simpler than new preparation methods — there are current ```yaml MyNewReactor: - is_a: ReactorDesignType - class_uri: voc4cat:XXXXXXX + is_a: ChemicalReactor + class_uri: VOC4CAT:XXXXXXX description: |- Brief description of the reactor geometry and typical operating conditions. slots: @@ -260,8 +260,8 @@ If the reactor shares parameters with an existing type (e.g. both are tubular fl ```yaml MonolithReactor: - is_a: ReactorDesignType - class_uri: catcore:MonolithReactor # replace with Voc4Cat term when available + is_a: ChemicalReactor + class_uri: coremeta4cat:MonolithReactor # replace with Voc4Cat term when available description: |- Monolith reactor — a reactor containing a structured monolithic substrate (ceramic or metallic) with parallel channels coated with catalyst. @@ -275,7 +275,7 @@ slots: channel_density: description: Number of channels per unit cross-sectional area of the monolith. range: float - slot_uri: catcore:channel_density + slot_uri: coremeta4cat:channel_density multivalued: true unit: ucum_code: 1/cm2 @@ -283,7 +283,7 @@ slots: washcoat_loading: description: Mass of washcoat (catalyst layer) per unit volume of monolith. range: float - slot_uri: catcore:washcoat_loading + slot_uri: coremeta4cat:washcoat_loading multivalued: true unit: ucum_code: g/L @@ -291,7 +291,7 @@ slots: monolith_material: description: Material of the monolith substrate (e.g. cordierite, FeCrAlloy). range: string - slot_uri: catcore:monolith_material + slot_uri: coremeta4cat:monolith_material multivalued: true ``` @@ -299,7 +299,7 @@ slots: ## Adding a simulation method -New computational approaches are added to `catcore_simulation_ap.yaml` as `SimulationMethod` subclasses. +New computational approaches are added to `coremeta4cat_simulation_ap.yaml` as `SimulationMethod` subclasses. ### Step-by-step @@ -312,7 +312,7 @@ The simulation subprofile provides `DFTSettingsMixin` (exchange-correlation func ```yaml MyNewSimulationMethod: is_a: SimulationMethod - class_uri: NCIT:XXXXXXX # or catcore: prefix temporarily + class_uri: NCIT:XXXXXXX # or coremeta4cat: prefix temporarily mixins: - DFTSettingsMixin # if DFT-based description: |- @@ -326,7 +326,7 @@ MyNewSimulationMethod: ```yaml KineticMonteCarlo: is_a: SimulationMethod - class_uri: catcore:KineticMonteCarlo + class_uri: coremeta4cat:KineticMonteCarlo description: |- Kinetic Monte Carlo simulation of surface reaction kinetics, using a reaction network of elementary steps with rate constants. @@ -340,13 +340,13 @@ slots: reaction_network_size: description: Number of elementary reaction steps in the KMC reaction network. range: integer - slot_uri: catcore:reaction_network_size + slot_uri: coremeta4cat:reaction_network_size multivalued: true simulation_time_kmc: description: Total simulated physical time of the KMC trajectory. range: float - slot_uri: catcore:simulation_time_kmc + slot_uri: coremeta4cat:simulation_time_kmc multivalued: true unit: ucum_code: s @@ -354,7 +354,7 @@ slots: surface_coverage_tracking: description: Species for which surface coverage is tracked as a function of time. range: string - slot_uri: catcore:surface_coverage_tracking + slot_uri: coremeta4cat:surface_coverage_tracking multivalued: true ``` @@ -362,12 +362,12 @@ slots: ## Adding a calculated property -New computed outputs are added to `catcore_simulation_ap.yaml` as `CalculatedProperty` subclasses. +New computed outputs are added to `coremeta4cat_simulation_ap.yaml` as `CalculatedProperty` subclasses. ```yaml MyNewProperty: is_a: CalculatedProperty - class_uri: catcore:MyNewProperty + class_uri: coremeta4cat:MyNewProperty description: |- What physical or chemical quantity is computed and what it tells us about the catalyst. slots: @@ -378,22 +378,22 @@ MyNewProperty: ## Adding a shared slot -If a slot is needed by **two or more subprofiles**, declare it in `catcore_common.yaml` rather than in any individual subprofile. This keeps the schema DRY and avoids slot name collisions. +If a slot is needed by **two or more subprofiles**, declare it in `coremeta4cat_common.yaml` rather than in any individual subprofile. This keeps the schema DRY and avoids slot name collisions. -**Checklist before adding a slot to catcore_common:** +**Checklist before adding a slot to coremeta4cat_common:** - [ ] The slot is genuinely needed in at least two different subprofile modules -- [ ] No existing slot in `catcore_common` covers the same concept -- [ ] The slot has a `slot_uri` pointing to an established ontology term (or a provisional catcore URI) +- [ ] No existing slot in `coremeta4cat_common` covers the same concept +- [ ] The slot has a `slot_uri` pointing to an established ontology term (or a provisional coremeta4cat URI) - [ ] A UCUM unit code is provided for all numeric slots ```yaml -# In catcore_common.yaml, under the slots: section: +# In coremeta4cat_common.yaml, under the slots: section: my_shared_slot: description: What this parameter means, with any relevant units or value constraints. range: float - slot_uri: catcore:my_shared_slot # replace with ontology URI if available + slot_uri: coremeta4cat:my_shared_slot # replace with ontology URI if available multivalued: true unit: ucum_code: mL/min @@ -403,7 +403,7 @@ my_shared_slot: ## Adding a mixin class -If a set of slots is shared across three or more classes in the same subprofile, consider factoring them into a new mixin. Mixins shared across two subprofiles should go in `catcore_common.yaml`. +If a set of slots is shared across three or more classes in the same subprofile, consider factoring them into a new mixin. Mixins shared across two subprofiles should go in `coremeta4cat_common.yaml`. ```yaml MyNewMixin: @@ -439,10 +439,10 @@ SomeConcreteClass: CoreMeta4Cat sits at the top of a layered import chain: ``` -catcore.yaml → catcore_common.yaml → chem_dcat_ap → … → dcat_ap_plus +coremeta4cat.yaml → coremeta4cat_common.yaml → chem_dcat_ap → … → dcat_ap_plus ``` -If you need to introduce a new intermediate chemistry layer (e.g. a `polymer_catalysis_ap` that adds polymer-specific base classes used across multiple pillars), add it between `catcore_common` and the first pillar that needs it. Import it in `catcore_common.yaml` via the `imports:` key, and document the new layer in the import hierarchy diagram in `catcore.yaml`. +If you need to introduce a new intermediate chemistry layer (e.g. a `polymer_catalysis_ap` that adds polymer-specific base classes used across multiple pillars), add it between `coremeta4cat_common` and the first pillar that needs it. Import it in `coremeta4cat_common.yaml` via the `imports:` key, and document the new layer in the import hierarchy diagram in `coremeta4cat.yaml`. Do not import new intermediate layers directly in individual pillar files — this would create hidden import order dependencies and make the schema harder to reason about. @@ -453,10 +453,10 @@ Do not import new intermediate layers directly in individual pillar files — th Before submitting a pull request with a new extension: - [ ] New class uses `is_a:` with the correct parent (see [General rules](#general-rules)) -- [ ] `class_uri:` is set (Voc4Cat / ontology term, or `catcore:` placeholder with issue link) +- [ ] `class_uri:` is set (Voc4Cat / ontology term, or `coremeta4cat:` placeholder with issue link) - [ ] Existing mixins are applied before adding new slots - [ ] Slots exclusive to this class are declared in the correct subprofile file -- [ ] Slots shared across subprofiles are declared in `catcore_common.yaml` +- [ ] Slots shared across subprofiles are declared in `coremeta4cat_common.yaml` - [ ] All slots have `slot_uri:`, `range:`, `multivalued: true` - [ ] Numeric slots have `unit: { ucum_code: ... }` - [ ] Obligation levels are set (`required:` or `recommended:`) on all slots diff --git a/docs/overview.md b/docs/overview.md index 26e642ddb..5b23bb0a7 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -51,12 +51,12 @@ was_generated_by: - id: ex:reaction-001 type: Reaction catalyst_quantity: 100.0 # mg - reactant: + used_reactant: - "1 vol% CO in N2" - "2 vol% O2 in N2" reactor_temperature_range: "200–400 °C" experiment_pressure: 1.0 # bar - carried_out_by: + used_reactor: id: ex:reactor-001 type: FixedBedReactor @@ -124,7 +124,7 @@ The **Characterization** pillar covers twenty-eight analytical techniques curren The **Reaction** pillar represents the catalytic process being studied. It is modelled as a DCAT-AP-PLUS `EvaluatedActivity` — the process the dataset is *about*, not the process that *generates* the data. This distinction matters: for operando experiments (e.g. in-situ XRD during a reaction), the dataset carries both `was_generated_by: Characterization` and `is_about_activity: Reaction`. -The reactor is linked via `carried_out_by` as one of eight `ReactorDesignType` subclasses: +The reactor is linked via `used_reactor` (`is_a: carried_out_by`) as one of eight `ChemicalReactor` subclasses:

diff --git a/inbox/README.md b/inbox/README.md index d2c97f624..c75e1779e 100644 --- a/inbox/README.md +++ b/inbox/README.md @@ -19,23 +19,31 @@ This folder is the drop-zone for vocabulary workbook contributions via pull requ 4. The **Excel inbox** GitHub Actions workflow runs automatically and: - Validates the workbook structure (sheet names, column headers). - - Runs a round-trip diff against the current schema and reports any - differences as a comment on the PR. - - If validation passes, the file is promoted to `docs/assets/` and the - inbox copy is cleaned up automatically. - - If validation fails, the PR is blocked until the issues are resolved. - -## What the round-trip check does - -The check compares every top-level slot listed in the workbook against the -LinkML schema and reports: - -- Slots present in the workbook but missing from the schema -- Slots present in the schema but missing from the workbook -- Mandatory/Recommended/Optional (M/R/O) mismatches - -The schema is the ground truth. If your edits require schema changes, please -open a schema issue or include the schema change in the same PR. + - Diffs every row against the current schema and plans the corresponding + schema changes: modifying an existing field's M/R/O, description, URI, + range, etc.; adding a genuinely new field or class (you can add a new + field and the new class it points to in the same submission -- both + are validated together); or flagging a field/class present in the + schema but missing from your workbook as a deletion. + - Posts the results as a comment on your PR: errors that must be fixed + before anything is written, and warnings that need maintainer review + (e.g. a deletion, or an edit to a field that is shared across multiple + classes -- which lists every other class the edit also affects, since + such a field has one single definition, not one per class). + - If there are no errors, the resulting schema changes are committed + directly to your PR branch, the regenerated `docs/assets/*.xlsx` + workbook is committed alongside them, and the inbox copy is removed + automatically. A maintainer then reviews the diff before merging. + - If there are errors, nothing is written -- fix the workbook and push + again. + +## What's editable + +Rows that appear in the workbook but are shown greyed-out (see the +**Legend** sheet) are inherited from chemdcat-ap, the underlying chemistry +model CoreMeta4Cat is built on. They're shown for reference so you can see +the full effective field set, but they cannot be added, changed, or removed +through this workflow -- open a schema issue instead. ## Notes diff --git a/mkdocs.yml b/mkdocs.yml index faad70b51..2c4ce5f34 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -37,6 +37,7 @@ watch: nav: - Home: index.md - Getting started: getting-started.md + - Working with Data: working-with-data.md - Overview: overview.md - Design Patterns: design-patterns.md - How to extend: how-to-extend.md @@ -47,6 +48,7 @@ nav: # - Workflow: a_heros_journey/workflow.md # - Collaborations and Future Work: a_heros_journey/collaboration_and_future.md - Documentation: + - Catalysis Dataset: catalysis-dataset.md - Synthesis: synthesis.md - Characterization: characterization.md - Reaction: reaction.md From a88a95a8a30d23198001d17097e318c76e4f00f1 Mon Sep 17 00:00:00 2001 From: HendrikBorgelt <84382772+HendrikBorgelt@users.noreply.github.com> Date: Tue, 14 Jul 2026 14:59:13 +0200 Subject: [PATCH 5/7] Add real-world example datasets as test data Adds 3 fully-worked CatalysisDataset records built from real experimental data (mixed CO/CO2 methanation, citral hydrogenation, carbonylation chemistry), validated end-to-end against the schema and published as docs/assets/examples for reference. Adds generate_example_outputs.py to publish them during doc generation, and updates the CI workflow to run `just test` (schema + pytest + linkml-run-examples) and upload the example validation output as a build artifact. --- .github/workflows/main.yaml | 20 + .../examples/CatalysisDataset-2d6m-exeb.json | 912 +++++++++++++ .../examples/CatalysisDataset-2d6m-exeb.yaml | 605 +++++++++ .../examples/CatalysisDataset-32x1-99x6.json | 1182 +++++++++++++++++ .../examples/CatalysisDataset-32x1-99x6.yaml | 784 +++++++++++ .../examples/CatalysisDataset-arp5-s69r.json | 659 +++++++++ .../examples/CatalysisDataset-arp5-s69r.yaml | 439 ++++++ docs/working-with-data.md | 138 ++ justfile | 4 +- project.justfile | 6 + scripts/generate_example_outputs.py | 69 + .../valid/CatalysisDataset-2d6m-exeb.yaml | 605 +++++++++ .../valid/CatalysisDataset-32x1-99x6.yaml | 784 +++++++++++ .../valid/CatalysisDataset-arp5-s69r.yaml | 439 ++++++ 14 files changed, 6644 insertions(+), 2 deletions(-) create mode 100644 docs/assets/examples/CatalysisDataset-2d6m-exeb.json create mode 100644 docs/assets/examples/CatalysisDataset-2d6m-exeb.yaml create mode 100644 docs/assets/examples/CatalysisDataset-32x1-99x6.json create mode 100644 docs/assets/examples/CatalysisDataset-32x1-99x6.yaml create mode 100644 docs/assets/examples/CatalysisDataset-arp5-s69r.json create mode 100644 docs/assets/examples/CatalysisDataset-arp5-s69r.yaml create mode 100644 docs/working-with-data.md create mode 100644 scripts/generate_example_outputs.py create mode 100644 tests/data/valid/CatalysisDataset-2d6m-exeb.yaml create mode 100644 tests/data/valid/CatalysisDataset-32x1-99x6.yaml create mode 100644 tests/data/valid/CatalysisDataset-arp5-s69r.yaml diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index c87149160..0cb5d846e 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -23,6 +23,10 @@ jobs: test: runs-on: ubuntu-latest + + permissions: + contents: read # needed alongside actions/upload-artifact below + strategy: matrix: python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] @@ -64,3 +68,19 @@ jobs: - name: Run test suite run: just test + + # examples/output/ is generated by `just test` (linkml-run-examples, + # json + yaml) but is git-ignored -- archive it from one matrix leg + # so it's inspectable without needing a local checkout. ttl is + # deliberately not requested here: it currently fails partway + # through the example set on a pre-existing linkml_runtime bug + # (rdflib_dumper mishandling certain CURIEs), unrelated to schema + # content -- not a "major error" worth blocking CI over, but not + # worth generating broken output for either. + - name: Upload example validation output + if: matrix.python-version == '3.13' + uses: actions/upload-artifact@v7 + with: + name: example-outputs + path: examples/output/ + retention-days: 30 diff --git a/docs/assets/examples/CatalysisDataset-2d6m-exeb.json b/docs/assets/examples/CatalysisDataset-2d6m-exeb.json new file mode 100644 index 000000000..62d3baa3a --- /dev/null +++ b/docs/assets/examples/CatalysisDataset-2d6m-exeb.json @@ -0,0 +1,912 @@ +{ + "id": "hdl:21.11165/4cat/2d6m-exeb", + "title": [ + "Dataset for Publication: Reaction Kinetics of CO and CO2 Methanation over Nickel" + ], + "description": [ + "Steady-state methanation kinetics screening dataset covering 16 valid experimental runs (Exp2,3,4,7,8,9,11,12,13,14,15,16,17,18,19,20 -- Exp1, Exp5, Exp6, Exp10 excluded by the data providers, see ReadMe.txt) over 16 distinct supported Ni catalysts (Al2O3, SiO2, ZrO2, TiO2, MgAl2O4 supports; 5-40.8 wt% Ni) in isothermal cylindrical fixed-bed reactors. Three reaction types were studied depending on feed gas composition: CO methanation (4 runs), CO2 methanation (8 runs), and mixed CO/CO2 co-methanation (4 runs). Conversion was determined from outlet gas composition analysis. Related publication: DOI 10.1021/acs.iecr.1c00389." + ], + "rdf_type": { + "id": "VOC4CAT:0007001", + "title": "heterogeneous catalysis" + }, + "keyword": [ + "Chemistry", + "Catalysis", + "Heterogeneous catalysis", + "CO methanation", + "CO2 methanation", + "Nickel catalyst", + "Fixed-bed reactor" + ], + "creator": [ + { + "name": [ + "Schmider, Daniel" + ] + }, + { + "name": [ + "Maier, Lubow" + ] + }, + { + "name": [ + "Deutschmann, Olaf" + ] + } + ], + "publisher": { + "name": [ + "NFDI4Cat Central Data Repository" + ] + }, + "dataset_distribution": [ + { + "access_URL": [ + { + "id": "https://hdl.handle.net/21.11165/4cat/2d6m-exeb", + "title": "Repository landing page" + } + ], + "description": [ + "Repository landing page providing access to the per-experiment CSV/JSON data files." + ], + "licence": { + "id": "https://creativecommons.org/licenses/by/4.0/", + "title": "CC BY 4.0" + } + } + ], + "other_identifier": [ + { + "notation": "https://hdl.handle.net/21.11165/4cat/2d6m-exeb" + }, + { + "notation": "doi:10.1021/acs.iecr.1c00389", + "description": "Related publication DOI" + } + ], + "was_generated_by": [ + { + "id": "coremeta4cat:CHAR_2d6m-exeb_outlet_gas_analysis", + "title": [ + "Outlet gas composition analysis (all 16 runs)" + ], + "description": [ + "Steady-state outlet gas composition analysis used to determine CO/CO2 conversion for all 16 catalyst screening runs (CO methanation: Exp2, 3, 4, 12; CO2 methanation: Exp7, 8, 9, 13, 14, 15, 16, 17; mixed CO/CO2 methanation: Exp11, 18, 19, 20). Dataset files do not name a specific instrument model; gas chromatography is the standard analytical method for this reaction class and is assumed here." + ], + "rdf_type": { + "id": "VOC4CAT:0000130", + "title": "gas chromatography" + }, + "carried_out_by": [ + { + "id": "coremeta4cat:DEV_2d6m-exeb_GC", + "title": "gas chromatograph", + "description": "Instrument model not specified in the source dataset files." + } + ], + "evaluated_entity": [ + { + "id": "coremeta4cat:CAT_2d6m-exeb_all", + "title": "16 supported Ni catalyst samples (this screening series)", + "description": "Supported Ni catalysts on Al2O3, SiO2, ZrO2, TiO2, and MgAl2O4, Ni loading 5-40.8 wt%, screened for CO methanation, CO2 methanation, and mixed CO/CO2 methanation (see the corresponding CatalyticReaction entries for per-catalyst detail: used_catalyst in coremeta4cat:REAC_2d6m-exeb_CO_methanation, coremeta4cat:REAC_2d6m-exeb_CO2_methanation, coremeta4cat:REAC_2d6m-exeb_mixed_methanation)." + } + ], + "realized_plan": { + "id": "coremeta4cat:CHAR_2d6m-exeb_GC_method", + "title": "Outlet gas GC method", + "description": "Analytical protocol for determining reactant/product mole fractions from the reactor outlet stream. Method parameters not specified in the source dataset files." + }, + "other_identifier": [ + { + "notation": "doi:10.1021/acs.iecr.1c00389", + "description": "Related publication DOI" + } + ], + "activity_designator": "Characterization" + } + ], + "is_about_activity": [ + { + "id": "coremeta4cat:REAC_2d6m-exeb_CO_methanation", + "reaction_name": [ + "CO methanation" + ], + "title": [ + "CO methanation catalyst screening (4 Ni catalysts)" + ], + "description": [ + "Catalytic CO methanation (CO + 3H2 -> CH4 + H2O) screened over 4 supported Ni catalysts (Al2O3, SiO2, ZrO2 supports; 10-20 wt% Ni) in cylindrical isothermal fixed-bed reactors (radius 3-10 mm across runs). Steady-state CO conversion measured as a function of superficial velocity and temperature. Source runs: Exp2, Exp3, Exp4, Exp12 (Ni/Al2O3 x2, Ni/SiO2, Ni/ZrO2). Total pressure ~100-101.3 kPa in all four runs." + ], + "rdf_type": { + "id": "VOC4CAT:0007010", + "title": "CO methanation" + }, + "catalyst_type": [ + "heterogeneous_catalysis" + ], + "catalyst_form": [ + "supported" + ], + "used_catalyst": [ + { + "id": "coremeta4cat:CAT_2d6m-exeb_Exp2", + "title": "20 wt% Ni/Al2O3 (Exp2)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 20.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "Ni loading (Exp2_metadata.json: catalyst.metal_loading)" + }, + { + "value": 630.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Length", + "unit": "MicroM", + "description": "Particle diameter (Exp2_metadata.json: catalyst.particles_mean_diameter)" + }, + { + "value": 14.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (Exp2_metadata.json: catalyst.specific_surface_area)" + }, + { + "value": 0.5, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Mass", + "unit": "GM", + "description": "Catalyst bed mass (Exp2_metadata.json: catalyst.mass)" + } + ] + }, + { + "id": "coremeta4cat:CAT_2d6m-exeb_Exp3", + "title": "20 wt% Ni/Al2O3 (Exp3)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 20.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "Ni loading (Exp3_metadata.json: catalyst.metal_loading)" + }, + { + "value": 375.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Length", + "unit": "MicroM", + "description": "Particle diameter (Exp3_metadata.json: catalyst.particles_mean_diameter)" + }, + { + "value": 3.56, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (Exp3_metadata.json: catalyst.specific_surface_area)" + }, + { + "value": 0.2, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Mass", + "unit": "GM", + "description": "Catalyst bed mass (Exp3_metadata.json: catalyst.mass)" + } + ] + }, + { + "id": "coremeta4cat:CAT_2d6m-exeb_Exp4", + "title": "10 wt% Ni/SiO2 (Exp4)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 10.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "Ni loading (Exp4_metadata.json: catalyst.metal_loading)" + }, + { + "value": 265.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Length", + "unit": "MicroM", + "description": "Particle diameter (Exp4_metadata.json: catalyst.particles_mean_diameter)" + }, + { + "value": 2.81, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (Exp4_metadata.json: catalyst.specific_surface_area)" + }, + { + "value": 0.05, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Mass", + "unit": "GM", + "description": "Catalyst bed mass (Exp4_metadata.json: catalyst.mass)" + } + ] + }, + { + "id": "coremeta4cat:CAT_2d6m-exeb_Exp12", + "title": "10 wt% Ni/ZrO2 (Exp12)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 10.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "Ni loading (Exp12_metadata.json: catalyst.metal_loading)" + }, + { + "value": 265.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Length", + "unit": "MicroM", + "description": "Particle diameter (Exp12_metadata.json: catalyst.particles_mean_diameter)" + }, + { + "value": 3.06, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (Exp12_metadata.json: catalyst.specific_surface_area)" + }, + { + "value": 0.05, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Mass", + "unit": "GM", + "description": "Catalyst bed mass (Exp12_metadata.json: catalyst.mass)" + } + ] + } + ], + "used_reactant": [ + { + "id": "coremeta4cat:REAC_2d6m-exeb_CO", + "title": "carbon monoxide", + "rdf_type": { + "id": "CHEBI:17245", + "title": "carbon monoxide" + }, + "has_concentration": [ + { + "value": 1.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MoleFraction", + "unit": "PERCENT", + "description": "Feed CO mole fraction ranges 1-25% across the 4 runs (Exp2, Exp3, Exp4, Exp12 inlet.mole_fractions.CO)" + } + ] + }, + { + "id": "coremeta4cat:REAC_2d6m-exeb_H2", + "title": "hydrogen", + "rdf_type": { + "id": "CHEBI:18276", + "title": "molecular hydrogen" + }, + "has_concentration": [ + { + "value": 50.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MoleFraction", + "unit": "PERCENT", + "description": "Feed H2 mole fraction ranges 50-75% across the 4 runs" + } + ] + } + ], + "used_reactor": [ + { + "id": "coremeta4cat:REAC_2d6m-exeb_CO_reactor", + "title": "isothermal cylindrical fixed-bed reactors", + "description": "Cylindrical fixed-bed reactors, radius 3-10 mm across the 4 runs, isothermal operation." + } + ], + "reactor_temperature_range": [ + { + "min_value": 423.0, + "max_value": 874.6, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Temperature", + "unit": "https://qudt.org/vocab/unit/K", + "description": "Overall temperature range explored across all 4 CO methanation runs" + } + ], + "experiment_pressure": [ + { + "value": 100.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Pressure", + "unit": "https://qudt.org/vocab/unit/KiloPA", + "description": "~100-101.3 kPa in all 4 runs" + } + ], + "product_identification_method": [ + { + "id": "coremeta4cat:REAC_2d6m-exeb_CO_product_id", + "title": "CO conversion from outlet gas composition", + "description": "CO conversion (dimensionless, 0-1) calculated from inlet and outlet CO concentrations. Specific analytical instrument not stated in dataset files; gas chromatography is the standard method for this reaction." + } + ], + "other_identifier": [ + { + "notation": "doi:10.1021/acs.iecr.1c00389", + "description": "Related publication DOI" + } + ] + }, + { + "id": "coremeta4cat:REAC_2d6m-exeb_CO2_methanation", + "reaction_name": [ + "CO2 methanation" + ], + "title": [ + "CO2 methanation catalyst screening (8 Ni catalysts)" + ], + "description": [ + "Catalytic CO2 methanation (CO2 + 4H2 -> CH4 + 2H2O) screened over 8 supported Ni catalysts (Al2O3, SiO2, ZrO2, MgAl2O4 supports; 10-40.8 wt% Ni) in cylindrical isothermal fixed-bed reactors (radius 3-10 mm across runs). Steady-state CO2 conversion measured as a function of superficial velocity and temperature. Source runs: Exp7, Exp8, Exp9, Exp13, Exp14, Exp15, Exp16, Exp17 (Ni/Al2O3 x4, Ni/MgAl2O4 x2, Ni/ZrO2, Ni/SiO2). Total pressure ~100-101.3 kPa in all runs except Exp9 (800 kPa, an outlier within this series)." + ], + "rdf_type": { + "id": "VOC4CAT:0007011", + "title": "CO2 methanation" + }, + "catalyst_type": [ + "heterogeneous_catalysis" + ], + "catalyst_form": [ + "supported" + ], + "used_catalyst": [ + { + "id": "coremeta4cat:CAT_2d6m-exeb_Exp7", + "title": "10 wt% Ni/MgAl2O4 (Exp7)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 10.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "Ni loading (Exp7_metadata.json: catalyst.metal_loading)" + }, + { + "value": 335.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Length", + "unit": "MicroM", + "description": "Particle diameter (Exp7_metadata.json: catalyst.particles_mean_diameter)" + }, + { + "value": 4.55, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (Exp7_metadata.json: catalyst.specific_surface_area)" + }, + { + "value": 1.2, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Mass", + "unit": "GM", + "description": "Catalyst bed mass (Exp7_metadata.json: catalyst.mass)" + } + ] + }, + { + "id": "coremeta4cat:CAT_2d6m-exeb_Exp8", + "title": "20 wt% Ni/Al2O3 (Exp8)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 20.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "Ni loading (Exp8_metadata.json: catalyst.metal_loading)" + }, + { + "value": 375.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Length", + "unit": "MicroM", + "description": "Particle diameter (Exp8_metadata.json: catalyst.particles_mean_diameter)" + }, + { + "value": 3.56, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (Exp8_metadata.json: catalyst.specific_surface_area)" + }, + { + "value": 0.2, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Mass", + "unit": "GM", + "description": "Catalyst bed mass (Exp8_metadata.json: catalyst.mass)" + } + ] + }, + { + "id": "coremeta4cat:CAT_2d6m-exeb_Exp9", + "title": "40.8 wt% Ni/Al2O3 (Exp9)", + "description": "High Ni-loading Al2O3-supported catalyst; this run also used an elevated feed pressure of 800 kPa, an outlier relative to the other runs in this series (~100-101.3 kPa).", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 40.8, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "Ni loading (Exp9_metadata.json: catalyst.metal_loading)" + }, + { + "value": 175.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Length", + "unit": "MicroM", + "description": "Particle diameter (Exp9_metadata.json: catalyst.particles_mean_diameter)" + }, + { + "value": 8.28, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (Exp9_metadata.json: catalyst.specific_surface_area)" + }, + { + "value": 0.025, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Mass", + "unit": "GM", + "description": "Catalyst bed mass (Exp9_metadata.json: catalyst.mass)" + } + ] + }, + { + "id": "coremeta4cat:CAT_2d6m-exeb_Exp13", + "title": "10 wt% Ni/ZrO2 (Exp13)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 10.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "Ni loading (Exp13_metadata.json: catalyst.metal_loading)" + }, + { + "value": 265.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Length", + "unit": "MicroM", + "description": "Particle diameter (Exp13_metadata.json: catalyst.particles_mean_diameter)" + }, + { + "value": 3.06, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (Exp13_metadata.json: catalyst.specific_surface_area)" + }, + { + "value": 0.05, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Mass", + "unit": "GM", + "description": "Catalyst bed mass (Exp13_metadata.json: catalyst.mass)" + } + ] + }, + { + "id": "coremeta4cat:CAT_2d6m-exeb_Exp14", + "title": "10 wt% Ni/SiO2 (Exp14)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 10.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "Ni loading (Exp14_metadata.json: catalyst.metal_loading)" + }, + { + "value": 265.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Length", + "unit": "MicroM", + "description": "Particle diameter (Exp14_metadata.json: catalyst.particles_mean_diameter)" + }, + { + "value": 2.81, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (Exp14_metadata.json: catalyst.specific_surface_area)" + }, + { + "value": 0.05, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Mass", + "unit": "GM", + "description": "Catalyst bed mass (Exp14_metadata.json: catalyst.mass)" + } + ] + }, + { + "id": "coremeta4cat:CAT_2d6m-exeb_Exp15", + "title": "20 wt% Ni/Al2O3 (Exp15)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 20.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "Ni loading (Exp15_metadata.json: catalyst.metal_loading)" + }, + { + "value": 750.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Length", + "unit": "MicroM", + "description": "Particle diameter (Exp15_metadata.json: catalyst.particles_mean_diameter)" + }, + { + "value": 1.76, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Mass", + "unit": "GM", + "description": "Catalyst bed mass (Exp15_metadata.json: catalyst.mass)" + } + ] + }, + { + "id": "coremeta4cat:CAT_2d6m-exeb_Exp16", + "title": "15 wt% Ni/Al2O3 (Exp16)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 15.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "Ni loading (Exp16_metadata.json: catalyst.metal_loading)" + }, + { + "value": 630.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Length", + "unit": "MicroM", + "description": "Particle diameter (Exp16_metadata.json: catalyst.particles_mean_diameter)" + }, + { + "value": 8.72, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (Exp16_metadata.json: catalyst.specific_surface_area)" + }, + { + "value": 0.3, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Mass", + "unit": "GM", + "description": "Catalyst bed mass (Exp16_metadata.json: catalyst.mass)" + } + ] + }, + { + "id": "coremeta4cat:CAT_2d6m-exeb_Exp17", + "title": "10 wt% Ni/MgAl2O4 (Exp17)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 10.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "Ni loading (Exp17_metadata.json: catalyst.metal_loading)" + }, + { + "value": 335.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Length", + "unit": "MicroM", + "description": "Particle diameter (Exp17_metadata.json: catalyst.particles_mean_diameter)" + }, + { + "value": 3.84, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (Exp17_metadata.json: catalyst.specific_surface_area)" + }, + { + "value": 1.2, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Mass", + "unit": "GM", + "description": "Catalyst bed mass (Exp17_metadata.json: catalyst.mass)" + } + ] + } + ], + "used_reactant": [ + { + "id": "coremeta4cat:REAC_2d6m-exeb_CO2", + "title": "carbon dioxide", + "rdf_type": { + "id": "CHEBI:16526", + "title": "carbon dioxide" + }, + "has_concentration": [ + { + "value": 1.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MoleFraction", + "unit": "PERCENT", + "description": "Feed CO2 mole fraction ranges 1-22.2% across the 8 runs (inlet.mole_fractions.CO2)" + } + ] + }, + { + "id": "coremeta4cat:REAC_2d6m-exeb_H2_CO2series", + "title": "hydrogen", + "rdf_type": { + "id": "CHEBI:18276", + "title": "molecular hydrogen" + }, + "has_concentration": [ + { + "value": 5.1, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MoleFraction", + "unit": "PERCENT", + "description": "Feed H2 mole fraction ranges 5.1-77.8% across the 8 runs" + } + ] + } + ], + "used_reactor": [ + { + "id": "coremeta4cat:REAC_2d6m-exeb_CO2_reactor", + "title": "isothermal cylindrical fixed-bed reactors", + "description": "Cylindrical fixed-bed reactors, radius 3-10 mm across the 8 runs, isothermal operation." + } + ], + "reactor_temperature_range": [ + { + "min_value": 405.1, + "max_value": 1114.4, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Temperature", + "unit": "https://qudt.org/vocab/unit/K", + "description": "Overall temperature range explored across all 8 CO2 methanation runs" + } + ], + "experiment_pressure": [ + { + "value": 100.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Pressure", + "unit": "https://qudt.org/vocab/unit/KiloPA", + "description": "~100-101.3 kPa in 7 of the 8 runs; Exp9 used 800 kPa (see used_catalyst description)" + } + ], + "product_identification_method": [ + { + "id": "coremeta4cat:REAC_2d6m-exeb_CO2_product_id", + "title": "CO2 conversion from outlet gas composition", + "description": "CO2 conversion (dimensionless, 0-1) calculated from inlet and outlet CO2 concentrations. Specific analytical instrument not stated in dataset files; gas chromatography is the standard method for this reaction." + } + ], + "other_identifier": [ + { + "notation": "doi:10.1021/acs.iecr.1c00389", + "description": "Related publication DOI" + } + ] + }, + { + "id": "coremeta4cat:REAC_2d6m-exeb_mixed_methanation", + "reaction_name": [ + "CO/CO2 co-methanation" + ], + "title": [ + "Mixed CO+CO2 methanation catalyst screening (4 Ni catalysts)" + ], + "description": [ + "Catalytic co-methanation of a mixed CO/CO2 feed (CO + 3H2 -> CH4 + H2O; CO2 + 4H2 -> CH4 + 2H2O) screened over 4 supported Ni catalysts (ZrO2, SiO2, TiO2, Al2O3 supports; 5 wt% Ni in all 4) in cylindrical isothermal fixed-bed reactors (radius 3.77-6.5 mm across runs). Steady-state CO and CO2 conversion measured as a function of superficial velocity and temperature. Source runs: Exp11, Exp18, Exp19, Exp20. Total pressure ~100 kPa in all four runs." + ], + "rdf_type": { + "id": "VOC4CAT:0007010", + "title": "CO methanation" + }, + "catalyst_type": [ + "heterogeneous_catalysis" + ], + "catalyst_form": [ + "supported" + ], + "used_catalyst": [ + { + "id": "coremeta4cat:CAT_2d6m-exeb_Exp11", + "title": "5 wt% Ni/ZrO2 (Exp11)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 5.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "Ni loading (Exp11_metadata.json: catalyst.metal_loading)" + }, + { + "value": 220.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Length", + "unit": "MicroM", + "description": "Particle diameter (Exp11_metadata.json: catalyst.particles_mean_diameter)" + }, + { + "value": 1.826, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (Exp11_metadata.json: catalyst.specific_surface_area)" + }, + { + "value": 0.15, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Mass", + "unit": "GM", + "description": "Catalyst bed mass (Exp11_metadata.json: catalyst.mass)" + } + ] + }, + { + "id": "coremeta4cat:CAT_2d6m-exeb_Exp18", + "title": "5 wt% Ni/SiO2 (Exp18)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 5.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "Ni loading (Exp18_metadata.json: catalyst.metal_loading)" + }, + { + "value": 3000.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Length", + "unit": "MicroM", + "description": "Particle diameter (Exp18_metadata.json: catalyst.particles_mean_diameter)" + }, + { + "value": 1.1, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (Exp18_metadata.json: catalyst.specific_surface_area)" + }, + { + "value": 0.18, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Mass", + "unit": "GM", + "description": "Catalyst bed mass (Exp18_metadata.json: catalyst.mass)" + } + ] + }, + { + "id": "coremeta4cat:CAT_2d6m-exeb_Exp19", + "title": "5 wt% Ni/TiO2 (Exp19)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 5.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "Ni loading (Exp19_metadata.json: catalyst.metal_loading)" + }, + { + "value": 630.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Length", + "unit": "MicroM", + "description": "Particle diameter (Exp19_metadata.json: catalyst.particles_mean_diameter)" + }, + { + "value": 14.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (Exp19_metadata.json: catalyst.specific_surface_area)" + }, + { + "value": 0.15, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Mass", + "unit": "GM", + "description": "Catalyst bed mass (Exp19_metadata.json: catalyst.mass)" + } + ] + }, + { + "id": "coremeta4cat:CAT_2d6m-exeb_Exp20", + "title": "5 wt% Ni/Al2O3 (Exp20)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 5.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "Ni loading (Exp20_metadata.json: catalyst.metal_loading)" + }, + { + "value": 220.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Length", + "unit": "MicroM", + "description": "Particle diameter (Exp20_metadata.json: catalyst.particles_mean_diameter)" + }, + { + "value": 0.897, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (Exp20_metadata.json: catalyst.specific_surface_area)" + }, + { + "value": 0.15, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Mass", + "unit": "GM", + "description": "Catalyst bed mass (Exp20_metadata.json: catalyst.mass)" + } + ] + } + ], + "used_reactant": [ + { + "id": "coremeta4cat:REAC_2d6m-exeb_CO_mixed", + "title": "carbon monoxide", + "rdf_type": { + "id": "CHEBI:17245", + "title": "carbon monoxide" + }, + "has_concentration": [ + { + "value": 0.6, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MoleFraction", + "unit": "PERCENT", + "description": "Feed CO mole fraction; 0.6% in 3 of 4 runs, 6% in Exp18" + } + ] + }, + { + "id": "coremeta4cat:REAC_2d6m-exeb_CO2_mixed", + "title": "carbon dioxide", + "rdf_type": { + "id": "CHEBI:16526", + "title": "carbon dioxide" + }, + "has_concentration": [ + { + "value": 6.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MoleFraction", + "unit": "PERCENT", + "description": "Feed CO2 mole fraction ranges 6-17% across the 4 runs" + } + ] + }, + { + "id": "coremeta4cat:REAC_2d6m-exeb_H2_mixed", + "title": "hydrogen", + "rdf_type": { + "id": "CHEBI:18276", + "title": "molecular hydrogen" + }, + "has_concentration": [ + { + "value": 57.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MoleFraction", + "unit": "PERCENT", + "description": "Feed H2 mole fraction ranges 57-88% across the 4 runs" + } + ] + } + ], + "used_reactor": [ + { + "id": "coremeta4cat:REAC_2d6m-exeb_mixed_reactor", + "title": "isothermal cylindrical fixed-bed reactors", + "description": "Cylindrical fixed-bed reactors, radius 3.77-6.5 mm across the 4 runs, isothermal operation." + } + ], + "reactor_temperature_range": [ + { + "min_value": 428.3, + "max_value": 672.2, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Temperature", + "unit": "https://qudt.org/vocab/unit/K", + "description": "Overall temperature range explored across all 4 mixed CO/CO2 methanation runs" + } + ], + "experiment_pressure": [ + { + "value": 100.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Pressure", + "unit": "https://qudt.org/vocab/unit/KiloPA", + "description": "~100 kPa in all 4 runs" + } + ], + "product_identification_method": [ + { + "id": "coremeta4cat:REAC_2d6m-exeb_mixed_product_id", + "title": "CO and CO2 conversion from outlet gas composition", + "description": "CO and CO2 conversion (dimensionless, 0-1) calculated from inlet and outlet gas concentrations. Specific analytical instrument not stated in dataset files; gas chromatography is the standard method for this reaction." + } + ], + "other_identifier": [ + { + "notation": "doi:10.1021/acs.iecr.1c00389", + "description": "Related publication DOI" + } + ] + } + ], + "is_about_entity": [ + { + "id": "coremeta4cat:CAT_2d6m-exeb_all", + "title": "16 supported Ni catalyst samples (this screening series)", + "description": "Supported Ni catalysts on Al2O3, SiO2, ZrO2, TiO2, and MgAl2O4, Ni loading 5-40.8 wt%. See used_catalyst under is_about_activity above for per-sample detail (particle size, BET surface area, catalyst mass)." + } + ] +} diff --git a/docs/assets/examples/CatalysisDataset-2d6m-exeb.yaml b/docs/assets/examples/CatalysisDataset-2d6m-exeb.yaml new file mode 100644 index 000000000..80fcf8a6c --- /dev/null +++ b/docs/assets/examples/CatalysisDataset-2d6m-exeb.yaml @@ -0,0 +1,605 @@ +--- +id: hdl:21.11165/4cat/2d6m-exeb +title: +- 'Dataset for Publication: Reaction Kinetics of CO and CO2 Methanation over Nickel' +description: +- 'Steady-state methanation kinetics screening dataset covering 16 valid experimental runs (Exp2,3,4,7,8,9,11,12,13,14,15,16,17,18,19,20 + -- Exp1, Exp5, Exp6, Exp10 excluded by the data providers, see ReadMe.txt) over 16 distinct supported + Ni catalysts (Al2O3, SiO2, ZrO2, TiO2, MgAl2O4 supports; 5-40.8 wt% Ni) in isothermal cylindrical fixed-bed + reactors. Three reaction types were studied depending on feed gas composition: CO methanation (4 runs), + CO2 methanation (8 runs), and mixed CO/CO2 co-methanation (4 runs). Conversion was determined from outlet + gas composition analysis. Related publication: DOI 10.1021/acs.iecr.1c00389.' +rdf_type: + id: VOC4CAT:0007001 + title: heterogeneous catalysis +keyword: +- Chemistry +- Catalysis +- Heterogeneous catalysis +- CO methanation +- CO2 methanation +- Nickel catalyst +- Fixed-bed reactor +creator: +- name: + - 'Schmider, Daniel' +- name: + - 'Maier, Lubow' +- name: + - 'Deutschmann, Olaf' +publisher: + name: + - NFDI4Cat Central Data Repository +dataset_distribution: +- access_URL: + - id: https://hdl.handle.net/21.11165/4cat/2d6m-exeb + title: Repository landing page + description: + - Repository landing page providing access to the per-experiment CSV/JSON data files. + licence: + id: https://creativecommons.org/licenses/by/4.0/ + title: CC BY 4.0 +other_identifier: +- notation: https://hdl.handle.net/21.11165/4cat/2d6m-exeb +- notation: doi:10.1021/acs.iecr.1c00389 + description: Related publication DOI +was_generated_by: +- id: coremeta4cat:CHAR_2d6m-exeb_outlet_gas_analysis + title: + - Outlet gas composition analysis (all 16 runs) + description: + - 'Steady-state outlet gas composition analysis used to determine CO/CO2 conversion for all 16 catalyst + screening runs (CO methanation: Exp2, 3, 4, 12; CO2 methanation: Exp7, 8, 9, 13, 14, 15, 16, 17; mixed + CO/CO2 methanation: Exp11, 18, 19, 20). Dataset files do not name a specific instrument model; gas + chromatography is the standard analytical method for this reaction class and is assumed here.' + rdf_type: + id: VOC4CAT:0000130 + title: gas chromatography + carried_out_by: + - id: coremeta4cat:DEV_2d6m-exeb_GC + title: gas chromatograph + description: Instrument model not specified in the source dataset files. + evaluated_entity: + - id: coremeta4cat:CAT_2d6m-exeb_all + title: 16 supported Ni catalyst samples (this screening series) + description: 'Supported Ni catalysts on Al2O3, SiO2, ZrO2, TiO2, and MgAl2O4, Ni loading 5-40.8 wt%, + screened for CO methanation, CO2 methanation, and mixed CO/CO2 methanation (see the corresponding + CatalyticReaction entries for per-catalyst detail: used_catalyst in coremeta4cat:REAC_2d6m-exeb_CO_methanation, + coremeta4cat:REAC_2d6m-exeb_CO2_methanation, coremeta4cat:REAC_2d6m-exeb_mixed_methanation).' + realized_plan: + id: coremeta4cat:CHAR_2d6m-exeb_GC_method + title: Outlet gas GC method + description: Analytical protocol for determining reactant/product mole fractions from the reactor + outlet stream. Method parameters not specified in the source dataset files. + other_identifier: + - notation: doi:10.1021/acs.iecr.1c00389 + description: Related publication DOI + activity_designator: Characterization +is_about_activity: +- id: coremeta4cat:REAC_2d6m-exeb_CO_methanation + reaction_name: + - CO methanation + title: + - CO methanation catalyst screening (4 Ni catalysts) + description: + - 'Catalytic CO methanation (CO + 3H2 -> CH4 + H2O) screened over 4 supported Ni catalysts (Al2O3, SiO2, + ZrO2 supports; 10-20 wt% Ni) in cylindrical isothermal fixed-bed reactors (radius 3-10 mm across runs). + Steady-state CO conversion measured as a function of superficial velocity and temperature. Source + runs: Exp2, Exp3, Exp4, Exp12 (Ni/Al2O3 x2, Ni/SiO2, Ni/ZrO2). Total pressure ~100-101.3 kPa in all + four runs.' + rdf_type: + id: VOC4CAT:0007010 + title: CO methanation + catalyst_type: + - heterogeneous_catalysis + catalyst_form: + - supported + used_catalyst: + - id: coremeta4cat:CAT_2d6m-exeb_Exp2 + title: 20 wt% Ni/Al2O3 (Exp2) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 20.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp2_metadata.json: catalyst.metal_loading)' + - value: 630.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp2_metadata.json: catalyst.particles_mean_diameter)' + - value: 14.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp2_metadata.json: catalyst.specific_surface_area)' + - value: 0.5 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp2_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp3 + title: 20 wt% Ni/Al2O3 (Exp3) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 20.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp3_metadata.json: catalyst.metal_loading)' + - value: 375.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp3_metadata.json: catalyst.particles_mean_diameter)' + - value: 3.56 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp3_metadata.json: catalyst.specific_surface_area)' + - value: 0.2 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp3_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp4 + title: 10 wt% Ni/SiO2 (Exp4) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 10.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp4_metadata.json: catalyst.metal_loading)' + - value: 265.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp4_metadata.json: catalyst.particles_mean_diameter)' + - value: 2.81 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp4_metadata.json: catalyst.specific_surface_area)' + - value: 0.05 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp4_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp12 + title: 10 wt% Ni/ZrO2 (Exp12) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 10.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp12_metadata.json: catalyst.metal_loading)' + - value: 265.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp12_metadata.json: catalyst.particles_mean_diameter)' + - value: 3.06 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp12_metadata.json: catalyst.specific_surface_area)' + - value: 0.05 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp12_metadata.json: catalyst.mass)' + used_reactant: + - id: coremeta4cat:REAC_2d6m-exeb_CO + title: carbon monoxide + rdf_type: + id: CHEBI:17245 + title: carbon monoxide + has_concentration: + - value: 1.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MoleFraction + unit: PERCENT + description: Feed CO mole fraction ranges 1-25% across the 4 runs (Exp2, Exp3, Exp4, Exp12 inlet.mole_fractions.CO) + - id: coremeta4cat:REAC_2d6m-exeb_H2 + title: hydrogen + rdf_type: + id: CHEBI:18276 + title: molecular hydrogen + has_concentration: + - value: 50.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MoleFraction + unit: PERCENT + description: Feed H2 mole fraction ranges 50-75% across the 4 runs + used_reactor: + - id: coremeta4cat:REAC_2d6m-exeb_CO_reactor + title: isothermal cylindrical fixed-bed reactors + description: Cylindrical fixed-bed reactors, radius 3-10 mm across the 4 runs, isothermal operation. + reactor_temperature_range: + - min_value: 423.0 + max_value: 874.6 + has_quantity_type: http://qudt.org/vocab/quantitykind/Temperature + unit: https://qudt.org/vocab/unit/K + description: Overall temperature range explored across all 4 CO methanation runs + experiment_pressure: + - value: 100.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/KiloPA + description: ~100-101.3 kPa in all 4 runs + product_identification_method: + - id: coremeta4cat:REAC_2d6m-exeb_CO_product_id + title: CO conversion from outlet gas composition + description: CO conversion (dimensionless, 0-1) calculated from inlet and outlet CO concentrations. + Specific analytical instrument not stated in dataset files; gas chromatography is the standard method + for this reaction. + other_identifier: + - notation: doi:10.1021/acs.iecr.1c00389 + description: Related publication DOI +- id: coremeta4cat:REAC_2d6m-exeb_CO2_methanation + reaction_name: + - CO2 methanation + title: + - CO2 methanation catalyst screening (8 Ni catalysts) + description: + - 'Catalytic CO2 methanation (CO2 + 4H2 -> CH4 + 2H2O) screened over 8 supported Ni catalysts (Al2O3, + SiO2, ZrO2, MgAl2O4 supports; 10-40.8 wt% Ni) in cylindrical isothermal fixed-bed reactors (radius + 3-10 mm across runs). Steady-state CO2 conversion measured as a function of superficial velocity and + temperature. Source runs: Exp7, Exp8, Exp9, Exp13, Exp14, Exp15, Exp16, Exp17 (Ni/Al2O3 x4, Ni/MgAl2O4 + x2, Ni/ZrO2, Ni/SiO2). Total pressure ~100-101.3 kPa in all runs except Exp9 (800 kPa, an outlier + within this series).' + rdf_type: + id: VOC4CAT:0007011 + title: CO2 methanation + catalyst_type: + - heterogeneous_catalysis + catalyst_form: + - supported + used_catalyst: + - id: coremeta4cat:CAT_2d6m-exeb_Exp7 + title: 10 wt% Ni/MgAl2O4 (Exp7) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 10.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp7_metadata.json: catalyst.metal_loading)' + - value: 335.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp7_metadata.json: catalyst.particles_mean_diameter)' + - value: 4.55 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp7_metadata.json: catalyst.specific_surface_area)' + - value: 1.2 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp7_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp8 + title: 20 wt% Ni/Al2O3 (Exp8) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 20.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp8_metadata.json: catalyst.metal_loading)' + - value: 375.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp8_metadata.json: catalyst.particles_mean_diameter)' + - value: 3.56 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp8_metadata.json: catalyst.specific_surface_area)' + - value: 0.2 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp8_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp9 + title: 40.8 wt% Ni/Al2O3 (Exp9) + description: High Ni-loading Al2O3-supported catalyst; this run also used an elevated feed pressure + of 800 kPa, an outlier relative to the other runs in this series (~100-101.3 kPa). + has_physical_state: SOLID + has_quantitative_attribute: + - value: 40.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp9_metadata.json: catalyst.metal_loading)' + - value: 175.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp9_metadata.json: catalyst.particles_mean_diameter)' + - value: 8.28 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp9_metadata.json: catalyst.specific_surface_area)' + - value: 0.025 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp9_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp13 + title: 10 wt% Ni/ZrO2 (Exp13) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 10.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp13_metadata.json: catalyst.metal_loading)' + - value: 265.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp13_metadata.json: catalyst.particles_mean_diameter)' + - value: 3.06 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp13_metadata.json: catalyst.specific_surface_area)' + - value: 0.05 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp13_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp14 + title: 10 wt% Ni/SiO2 (Exp14) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 10.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp14_metadata.json: catalyst.metal_loading)' + - value: 265.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp14_metadata.json: catalyst.particles_mean_diameter)' + - value: 2.81 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp14_metadata.json: catalyst.specific_surface_area)' + - value: 0.05 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp14_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp15 + title: 20 wt% Ni/Al2O3 (Exp15) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 20.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp15_metadata.json: catalyst.metal_loading)' + - value: 750.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp15_metadata.json: catalyst.particles_mean_diameter)' + - value: 1.76 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp15_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp16 + title: 15 wt% Ni/Al2O3 (Exp16) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 15.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp16_metadata.json: catalyst.metal_loading)' + - value: 630.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp16_metadata.json: catalyst.particles_mean_diameter)' + - value: 8.72 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp16_metadata.json: catalyst.specific_surface_area)' + - value: 0.3 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp16_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp17 + title: 10 wt% Ni/MgAl2O4 (Exp17) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 10.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp17_metadata.json: catalyst.metal_loading)' + - value: 335.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp17_metadata.json: catalyst.particles_mean_diameter)' + - value: 3.84 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp17_metadata.json: catalyst.specific_surface_area)' + - value: 1.2 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp17_metadata.json: catalyst.mass)' + used_reactant: + - id: coremeta4cat:REAC_2d6m-exeb_CO2 + title: carbon dioxide + rdf_type: + id: CHEBI:16526 + title: carbon dioxide + has_concentration: + - value: 1.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MoleFraction + unit: PERCENT + description: Feed CO2 mole fraction ranges 1-22.2% across the 8 runs (inlet.mole_fractions.CO2) + - id: coremeta4cat:REAC_2d6m-exeb_H2_CO2series + title: hydrogen + rdf_type: + id: CHEBI:18276 + title: molecular hydrogen + has_concentration: + - value: 5.1 + has_quantity_type: http://qudt.org/vocab/quantitykind/MoleFraction + unit: PERCENT + description: Feed H2 mole fraction ranges 5.1-77.8% across the 8 runs + used_reactor: + - id: coremeta4cat:REAC_2d6m-exeb_CO2_reactor + title: isothermal cylindrical fixed-bed reactors + description: Cylindrical fixed-bed reactors, radius 3-10 mm across the 8 runs, isothermal operation. + reactor_temperature_range: + - min_value: 405.1 + max_value: 1114.4 + has_quantity_type: http://qudt.org/vocab/quantitykind/Temperature + unit: https://qudt.org/vocab/unit/K + description: Overall temperature range explored across all 8 CO2 methanation runs + experiment_pressure: + - value: 100.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/KiloPA + description: ~100-101.3 kPa in 7 of the 8 runs; Exp9 used 800 kPa (see used_catalyst description) + product_identification_method: + - id: coremeta4cat:REAC_2d6m-exeb_CO2_product_id + title: CO2 conversion from outlet gas composition + description: CO2 conversion (dimensionless, 0-1) calculated from inlet and outlet CO2 concentrations. + Specific analytical instrument not stated in dataset files; gas chromatography is the standard method + for this reaction. + other_identifier: + - notation: doi:10.1021/acs.iecr.1c00389 + description: Related publication DOI +- id: coremeta4cat:REAC_2d6m-exeb_mixed_methanation + reaction_name: + - CO/CO2 co-methanation + title: + - Mixed CO+CO2 methanation catalyst screening (4 Ni catalysts) + description: + - 'Catalytic co-methanation of a mixed CO/CO2 feed (CO + 3H2 -> CH4 + H2O; CO2 + 4H2 -> CH4 + 2H2O) + screened over 4 supported Ni catalysts (ZrO2, SiO2, TiO2, Al2O3 supports; 5 wt% Ni in all 4) in cylindrical + isothermal fixed-bed reactors (radius 3.77-6.5 mm across runs). Steady-state CO and CO2 conversion + measured as a function of superficial velocity and temperature. Source runs: Exp11, Exp18, Exp19, + Exp20. Total pressure ~100 kPa in all four runs.' + rdf_type: + id: VOC4CAT:0007010 + title: CO methanation + catalyst_type: + - heterogeneous_catalysis + catalyst_form: + - supported + used_catalyst: + - id: coremeta4cat:CAT_2d6m-exeb_Exp11 + title: 5 wt% Ni/ZrO2 (Exp11) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 5.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp11_metadata.json: catalyst.metal_loading)' + - value: 220.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp11_metadata.json: catalyst.particles_mean_diameter)' + - value: 1.826 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp11_metadata.json: catalyst.specific_surface_area)' + - value: 0.15 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp11_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp18 + title: 5 wt% Ni/SiO2 (Exp18) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 5.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp18_metadata.json: catalyst.metal_loading)' + - value: 3000.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp18_metadata.json: catalyst.particles_mean_diameter)' + - value: 1.1 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp18_metadata.json: catalyst.specific_surface_area)' + - value: 0.18 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp18_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp19 + title: 5 wt% Ni/TiO2 (Exp19) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 5.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp19_metadata.json: catalyst.metal_loading)' + - value: 630.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp19_metadata.json: catalyst.particles_mean_diameter)' + - value: 14.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp19_metadata.json: catalyst.specific_surface_area)' + - value: 0.15 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp19_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp20 + title: 5 wt% Ni/Al2O3 (Exp20) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 5.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp20_metadata.json: catalyst.metal_loading)' + - value: 220.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp20_metadata.json: catalyst.particles_mean_diameter)' + - value: 0.897 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp20_metadata.json: catalyst.specific_surface_area)' + - value: 0.15 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp20_metadata.json: catalyst.mass)' + used_reactant: + - id: coremeta4cat:REAC_2d6m-exeb_CO_mixed + title: carbon monoxide + rdf_type: + id: CHEBI:17245 + title: carbon monoxide + has_concentration: + - value: 0.6 + has_quantity_type: http://qudt.org/vocab/quantitykind/MoleFraction + unit: PERCENT + description: Feed CO mole fraction; 0.6% in 3 of 4 runs, 6% in Exp18 + - id: coremeta4cat:REAC_2d6m-exeb_CO2_mixed + title: carbon dioxide + rdf_type: + id: CHEBI:16526 + title: carbon dioxide + has_concentration: + - value: 6.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MoleFraction + unit: PERCENT + description: Feed CO2 mole fraction ranges 6-17% across the 4 runs + - id: coremeta4cat:REAC_2d6m-exeb_H2_mixed + title: hydrogen + rdf_type: + id: CHEBI:18276 + title: molecular hydrogen + has_concentration: + - value: 57.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MoleFraction + unit: PERCENT + description: Feed H2 mole fraction ranges 57-88% across the 4 runs + used_reactor: + - id: coremeta4cat:REAC_2d6m-exeb_mixed_reactor + title: isothermal cylindrical fixed-bed reactors + description: Cylindrical fixed-bed reactors, radius 3.77-6.5 mm across the 4 runs, isothermal operation. + reactor_temperature_range: + - min_value: 428.3 + max_value: 672.2 + has_quantity_type: http://qudt.org/vocab/quantitykind/Temperature + unit: https://qudt.org/vocab/unit/K + description: Overall temperature range explored across all 4 mixed CO/CO2 methanation runs + experiment_pressure: + - value: 100.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/KiloPA + description: ~100 kPa in all 4 runs + product_identification_method: + - id: coremeta4cat:REAC_2d6m-exeb_mixed_product_id + title: CO and CO2 conversion from outlet gas composition + description: CO and CO2 conversion (dimensionless, 0-1) calculated from inlet and outlet gas concentrations. + Specific analytical instrument not stated in dataset files; gas chromatography is the standard method + for this reaction. + other_identifier: + - notation: doi:10.1021/acs.iecr.1c00389 + description: Related publication DOI +is_about_entity: +- id: coremeta4cat:CAT_2d6m-exeb_all + title: 16 supported Ni catalyst samples (this screening series) + description: Supported Ni catalysts on Al2O3, SiO2, ZrO2, TiO2, and MgAl2O4, Ni loading 5-40.8 wt%. + See used_catalyst under is_about_activity above for per-sample detail (particle size, BET surface + area, catalyst mass). diff --git a/docs/assets/examples/CatalysisDataset-32x1-99x6.json b/docs/assets/examples/CatalysisDataset-32x1-99x6.json new file mode 100644 index 000000000..47218c46a --- /dev/null +++ b/docs/assets/examples/CatalysisDataset-32x1-99x6.json @@ -0,0 +1,1182 @@ +{ + "id": "hdl:21.11165/4cat/32x1-99x6", + "title": [ + "Support Engineering with Phosphorus: Tuning the Palladium-Catalyzed Selective Hydrogenation of α,β-Unsaturated Aldehydes" + ], + "description": [ + "Catalyst characterization (BET, ICP-AES, PXRD, DRIFT, IR) and catalytic testing data for a series of Pd/P catalysts (nominal 2 wt% Pd, 0-5 wt% P) on Al2O3 and SiO2 supports, investigating how phosphorus modification of the support tunes the Pd-catalyzed selective hydrogenation of cinnamyl alcohol (CAL) and citral. Catalytic performance was screened via Central Composite Design (Al2O3/CAL, 27 runs) and full-factorial designs (SiO2/CAL, Al2O3/citral, SiO2/citral; 9 runs each) varying temperature (30-70 C), pressure (1-9 bar), phosphorus loading, and reaction time. TEM is mentioned in the original repository description but no TEM data files are included in the deposited dataset." + ], + "rdf_type": { + "id": "VOC4CAT:0007001", + "title": "heterogeneous catalysis" + }, + "keyword": [ + "Chemistry", + "Engineering", + "Catalysis", + "Heterogeneous catalysis", + "Palladium catalyst", + "Phosphorus modification", + "Selective hydrogenation", + "Cinnamyl alcohol", + "Citral" + ], + "creator": [ + { + "name": [ + "Rang, Fabian" + ] + }, + { + "name": [ + "Hanf, Schirin" + ] + }, + { + "name": [ + "Holtermann, Birger" + ] + }, + { + "name": [ + "Eggeler, Yolita" + ] + }, + { + "name": [ + "Barth, Simon" + ] + }, + { + "name": [ + "Grunwaldt, Jan-Dierk" + ] + } + ], + "publisher": { + "name": [ + "NFDI4Cat Central Data Repository" + ] + }, + "release_date": "2026-03-11", + "dataset_distribution": [ + { + "access_URL": [ + { + "id": "https://hdl.handle.net/21.11165/4cat/32x1-99x6", + "title": "Repository landing page" + } + ], + "description": [ + "Repository landing page providing access to the characterization and catalytic testing data files." + ], + "licence": { + "id": "https://creativecommons.org/licenses/by/4.0/", + "title": "CC BY 4.0" + } + } + ], + "other_identifier": [ + { + "notation": "https://hdl.handle.net/21.11165/4cat/32x1-99x6" + }, + { + "notation": "doi:10.1021/ac0702802", + "description": "Methodology reference cited for the DRIFT pseudo-absorbance conversion (not this dataset's own publication)" + } + ], + "was_generated_by": [ + { + "id": "coremeta4cat:CHAR_32x1-99x6_BET", + "title": [ + "BET surface area analysis (10 catalysts)" + ], + "description": [ + "Brunauer-Emmett-Teller specific surface area determination for all 10 Pd/P-Al2O3 and Pd/P-SiO2 catalysts (0-5 wt% nominal P loading). Surface area ranged 72-126 m2/g, generally decreasing with increasing P loading (bet_results.txt)." + ], + "rdf_type": { + "id": "ENM:0000064", + "title": "BET analysis" + }, + "carried_out_by": [ + { + "id": "coremeta4cat:DEV_32x1-99x6_BET", + "title": "BET surface area analyser", + "description": "Instrument model not specified in the source dataset files." + } + ], + "evaluated_entity": [ + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_0P", + "title": "Pd/Al2O3", + "description": "Pd on Al2O3, P-free reference" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_1P", + "title": "Pd/1P/Al2O3", + "description": "Pd on Al2O3, nominal 1 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_2P", + "title": "Pd/2P/Al2O3", + "description": "Pd on Al2O3, nominal 2 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_3P", + "title": "Pd/3P/Al2O3", + "description": "Pd on Al2O3, nominal 3 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_4P", + "title": "Pd/4P/Al2O3", + "description": "Pd on Al2O3, nominal 4 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_5P", + "title": "Pd/5P/Al2O3", + "description": "Pd on Al2O3, nominal 5 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_0P", + "title": "Pd/SiO2", + "description": "Pd on SiO2, P-free reference" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_1P", + "title": "Pd/1P/SiO2", + "description": "Pd on SiO2, nominal 1 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_3P", + "title": "Pd/3P/SiO2", + "description": "Pd on SiO2, nominal 3 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_5P", + "title": "Pd/5P/SiO2", + "description": "Pd on SiO2, nominal 5 wt% P" + } + ], + "realized_plan": { + "id": "coremeta4cat:CHAR_32x1-99x6_BET_method", + "title": "N2 physisorption BET method", + "description": "Standard N2 physisorption at liquid-nitrogen temperature (-196C), Brunauer-Emmett-Teller analysis. Adsorbate gas and measurement temperature not explicitly stated in bet_results.txt; assumed standard BET convention." + }, + "other_identifier": [ + { + "notation": "https://hdl.handle.net/21.11165/4cat/32x1-99x6" + } + ], + "activity_designator": "Characterization" + }, + { + "id": "coremeta4cat:CHAR_32x1-99x6_DRIFT", + "title": [ + "DRIFT CO-adsorption spectroscopy (4 catalysts)" + ], + "description": [ + "Diffuse reflectance infrared Fourier transform spectroscopy of CO adsorbed at room temperature, for 4 catalysts (Pd/Al2O3, Pd/3P/Al2O3, Pd/SiO2, Pd/3P/SiO2). Spectra converted to pseudo-absorbance (log(1/reflectance)) per Anal. Chem. 2007, 79, 10, 3912-3918 (DOI 10.1021/ac0702802) and baseline-corrected (info_drifts.txt); OriginPro 2023 used for analysis/plotting." + ], + "rdf_type": { + "id": "CHMO:0000645", + "title": "diffuse reflectance infrared Fourier transform spectroscopy" + }, + "carried_out_by": [ + { + "id": "coremeta4cat:DEV_32x1-99x6_DRIFT", + "title": "FTIR spectrometer with DRIFT accessory", + "description": "Instrument model not specified in the source dataset files." + } + ], + "evaluated_entity": [ + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_0P", + "title": "Pd/Al2O3", + "description": "Pd on Al2O3, P-free reference" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_3P", + "title": "Pd/3P/Al2O3", + "description": "Pd on Al2O3, nominal 3 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_0P", + "title": "Pd/SiO2", + "description": "Pd on SiO2, P-free reference" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_3P", + "title": "Pd/3P/SiO2", + "description": "Pd on SiO2, nominal 3 wt% P" + } + ], + "realized_plan": { + "id": "coremeta4cat:CHAR_32x1-99x6_DRIFT_method", + "title": "CO-adsorption DRIFT method", + "description": "CO adsorption at room temperature; pseudo-absorbance = log(1/reflectance)." + }, + "other_identifier": [ + { + "notation": "https://hdl.handle.net/21.11165/4cat/32x1-99x6" + } + ], + "activity_designator": "Characterization" + }, + { + "id": "coremeta4cat:CHAR_32x1-99x6_ICPAES", + "title": [ + "ICP-AES elemental composition analysis (8 catalysts)" + ], + "description": [ + "Inductively coupled plasma atomic emission spectroscopy for bulk Pd and P content of the 8 P-modified catalysts (measured Pd 1.8-2.0 wt%, P 0.8-4.8 wt%, deviating somewhat from nominal loadings; icp_results.txt). P-free reference catalysts (Pd/Al2O3, Pd/SiO2) were not analysed by ICP-AES." + ], + "rdf_type": { + "id": "CHMO:0000267", + "title": "inductively coupled plasma atomic emission spectroscopy" + }, + "carried_out_by": [ + { + "id": "coremeta4cat:DEV_32x1-99x6_ICPAES", + "title": "ICP-AES spectrometer", + "description": "Instrument model not specified in the source dataset files." + } + ], + "evaluated_entity": [ + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_1P", + "title": "Pd/1P/Al2O3", + "description": "Pd on Al2O3, nominal 1 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_2P", + "title": "Pd/2P/Al2O3", + "description": "Pd on Al2O3, nominal 2 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_3P", + "title": "Pd/3P/Al2O3", + "description": "Pd on Al2O3, nominal 3 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_4P", + "title": "Pd/4P/Al2O3", + "description": "Pd on Al2O3, nominal 4 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_5P", + "title": "Pd/5P/Al2O3", + "description": "Pd on Al2O3, nominal 5 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_1P", + "title": "Pd/1P/SiO2", + "description": "Pd on SiO2, nominal 1 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_3P", + "title": "Pd/3P/SiO2", + "description": "Pd on SiO2, nominal 3 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_5P", + "title": "Pd/5P/SiO2", + "description": "Pd on SiO2, nominal 5 wt% P" + } + ], + "realized_plan": { + "id": "coremeta4cat:CHAR_32x1-99x6_ICPAES_method", + "title": "ICP-AES elemental analysis method", + "description": "Elements analyzed: Pd, P. Results reported in wt% (icp_results.txt)." + }, + "other_identifier": [ + { + "notation": "https://hdl.handle.net/21.11165/4cat/32x1-99x6" + } + ], + "activity_designator": "Characterization" + }, + { + "id": "coremeta4cat:CHAR_32x1-99x6_IR", + "title": [ + "Infrared spectroscopy (6 catalysts)" + ], + "description": [ + "Infrared spectroscopy of the 6 P-modified catalysts (1, 3, 5 wt% nominal P on Al2O3 and SiO2). Wavenumber range ~400-3599 cm-1, 3319 data points per file, pseudo-absorbance convention consistent with the DRIFT data." + ], + "rdf_type": { + "id": "CHMO:0000630", + "title": "infrared spectroscopy" + }, + "carried_out_by": [ + { + "id": "coremeta4cat:DEV_32x1-99x6_IR", + "title": "FTIR spectrometer", + "description": "Instrument model not specified in the source dataset files." + } + ], + "evaluated_entity": [ + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_1P", + "title": "Pd/1P/Al2O3", + "description": "Pd on Al2O3, nominal 1 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_3P", + "title": "Pd/3P/Al2O3", + "description": "Pd on Al2O3, nominal 3 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_5P", + "title": "Pd/5P/Al2O3", + "description": "Pd on Al2O3, nominal 5 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_1P", + "title": "Pd/1P/SiO2", + "description": "Pd on SiO2, nominal 1 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_3P", + "title": "Pd/3P/SiO2", + "description": "Pd on SiO2, nominal 3 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_5P", + "title": "Pd/5P/SiO2", + "description": "Pd on SiO2, nominal 5 wt% P" + } + ], + "realized_plan": { + "id": "coremeta4cat:CHAR_32x1-99x6_IR_method", + "title": "Infrared spectroscopy method", + "description": "Wavenumber range ~400-3599 cm-1; pseudo-absorbance units." + }, + "other_identifier": [ + { + "notation": "https://hdl.handle.net/21.11165/4cat/32x1-99x6" + } + ], + "activity_designator": "Characterization" + }, + { + "id": "coremeta4cat:CHAR_32x1-99x6_PXRD", + "title": [ + "Powder XRD phase analysis (10 catalysts)" + ], + "description": [ + "Powder X-ray diffraction for phase identification of all 10 Pd/P-Al2O3 and Pd/P-SiO2 catalysts, plus a P/SiO2 support-only reference sample without Pd (file PXRD_1PSiO2.xy). Two-theta range ~2-92 degrees, step size 0.015 degrees (most files); two files (nominal 5 wt% P samples) cover a shorter range ~2-63.5 degrees." + ], + "rdf_type": { + "id": "CHMO:0000158", + "title": "powder X-ray diffraction" + }, + "carried_out_by": [ + { + "id": "coremeta4cat:DEV_32x1-99x6_PXRD", + "title": "X-ray diffractometer", + "description": "Instrument model not specified in the source dataset files." + } + ], + "evaluated_entity": [ + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_0P", + "title": "Pd/Al2O3", + "description": "Pd on Al2O3, P-free reference" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_1P", + "title": "Pd/1P/Al2O3", + "description": "Pd on Al2O3, nominal 1 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_2P", + "title": "Pd/2P/Al2O3", + "description": "Pd on Al2O3, nominal 2 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_3P", + "title": "Pd/3P/Al2O3", + "description": "Pd on Al2O3, nominal 3 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_4P", + "title": "Pd/4P/Al2O3", + "description": "Pd on Al2O3, nominal 4 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_5P", + "title": "Pd/5P/Al2O3", + "description": "Pd on Al2O3, nominal 5 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_0P", + "title": "Pd/SiO2", + "description": "Pd on SiO2, P-free reference" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_1P", + "title": "Pd/1P/SiO2", + "description": "Pd on SiO2, nominal 1 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_3P", + "title": "Pd/3P/SiO2", + "description": "Pd on SiO2, nominal 3 wt% P" + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_5P", + "title": "Pd/5P/SiO2", + "description": "Pd on SiO2, nominal 5 wt% P" + } + ], + "realized_plan": { + "id": "coremeta4cat:CHAR_32x1-99x6_PXRD_method", + "title": "Powder XRD measurement method", + "description": "Two-theta scan, ~2-92 degrees, step size 0.015 degrees. One file (PXRD_1PSiO2.xy) is a Pd-free P/SiO2 support reference; one file (PXRD_Pd5Al2O3.xy) is missing the 'P' in its name but is interpreted as the nominal 5 wt% P/Al2O3 sample based on the file series context (matches ICP sample FR507)." + }, + "other_identifier": [ + { + "notation": "https://hdl.handle.net/21.11165/4cat/32x1-99x6" + } + ], + "activity_designator": "Characterization" + } + ], + "is_about_activity": [ + { + "id": "coremeta4cat:REAC_32x1-99x6_CAL_Al2O3", + "reaction_name": [ + "selective hydrogenation of cinnamyl alcohol" + ], + "title": [ + "Selective hydrogenation of cinnamyl alcohol over Pd-P/Al2O3 catalysts" + ], + "description": [ + "Selective hydrogenation of cinnamyl alcohol (CAL) over 6 Pd/P/Al2O3 catalysts (P loading 0-5 wt%, ~2 wt% Pd) in a Central Composite Design (27 runs) exploring temperature, pressure, phosphorus loading, and time. An initial fixed-condition screening (50C/5bar/30min, hot-filtration leaching test) gave CAL conversion/HCAL yield of 32/30% (Pd/Al2O3) and 45/42% (Pd/3P/Al2O3). Conversion ranged 6-96%, yield 6-90% across the 27-run design (catalytic_data.xlsx, 'Pd-XPAl2O3_CCD_CAL')." + ], + "rdf_type": { + "id": "VOC4CAT:0000260", + "title": "hydrogenation" + }, + "catalyst_type": [ + "heterogeneous_catalysis" + ], + "catalyst_form": [ + "supported" + ], + "used_catalyst": [ + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_0P", + "title": "Pd/Al2O3", + "description": "Pd on Al2O3 support, unmodified (P-free) reference catalyst", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 119.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (bet_results.txt)" + } + ] + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_1P", + "title": "Pd/1P/Al2O3 (nominal 1 wt% P)", + "description": "Pd on Al2O3 support, nominal 1 wt% P (phosphorus modifier)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 1.8, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured Pd loading (icp_results.txt)" + }, + { + "value": 0.8, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured P loading (icp_results.txt)" + }, + { + "value": 118.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (bet_results.txt)" + } + ] + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_2P", + "title": "Pd/2P/Al2O3 (nominal 2 wt% P)", + "description": "Pd on Al2O3 support, nominal 2 wt% P (phosphorus modifier)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 2.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured Pd loading (icp_results.txt)" + }, + { + "value": 2.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured P loading (icp_results.txt)" + }, + { + "value": 116.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (bet_results.txt)" + } + ] + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_3P", + "title": "Pd/3P/Al2O3 (nominal 3 wt% P)", + "description": "Pd on Al2O3 support, nominal 3 wt% P (phosphorus modifier)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 1.8, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured Pd loading (icp_results.txt)" + }, + { + "value": 2.5, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured P loading (icp_results.txt)" + }, + { + "value": 105.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (bet_results.txt)" + } + ] + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_4P", + "title": "Pd/4P/Al2O3 (nominal 4 wt% P)", + "description": "Pd on Al2O3 support, nominal 4 wt% P (phosphorus modifier)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 2.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured Pd loading (icp_results.txt)" + }, + { + "value": 3.7, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured P loading (icp_results.txt)" + }, + { + "value": 112.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (bet_results.txt)" + } + ] + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_5P", + "title": "Pd/5P/Al2O3 (nominal 5 wt% P)", + "description": "Pd on Al2O3 support, nominal 5 wt% P (phosphorus modifier)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 1.9, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured Pd loading (icp_results.txt)" + }, + { + "value": 4.6, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured P loading (icp_results.txt)" + }, + { + "value": 108.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (bet_results.txt)" + } + ] + } + ], + "used_reactant": [ + { + "id": "coremeta4cat:REAC_32x1-99x6_CAL_Al2O3_substrate", + "title": "cinnamyl alcohol", + "rdf_type": { + "id": "CHEBI:15554", + "title": "cinnamyl alcohol" + } + }, + { + "id": "coremeta4cat:REAC_32x1-99x6_CAL_Al2O3_H2", + "title": "hydrogen", + "rdf_type": { + "id": "CHEBI:18276", + "title": "molecular hydrogen" + } + } + ], + "used_reactor": [ + { + "id": "coremeta4cat:REAC_32x1-99x6_CAL_Al2O3_reactor", + "title": "batch pressurized reactor", + "description": "Batch pressurised reactor (autoclave or similar sealed vessel), inferred from the 1-9 bar working pressure range and hot-filtration leaching test noted in catalytic_data.xlsx. Specific reactor model not stated in the source dataset files." + } + ], + "reactor_temperature_range": [ + { + "min_value": 303.15, + "max_value": 343.15, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Temperature", + "unit": "https://qudt.org/vocab/unit/K", + "description": "Temperature range explored in the design of experiments (catalytic_data.xlsx)" + } + ], + "experiment_pressure": [ + { + "value": 1.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Pressure", + "unit": "https://qudt.org/vocab/unit/BAR", + "description": "Minimum pressure in the design space" + }, + { + "value": 9.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Pressure", + "unit": "https://qudt.org/vocab/unit/BAR", + "description": "Maximum pressure in the design space" + } + ], + "product_identification_method": [ + { + "id": "coremeta4cat:REAC_32x1-99x6_CAL_Al2O3_product_id", + "title": "Conversion/yield quantification", + "description": "Substrate conversion and product yield (%) reported with standard deviations in catalytic_data.xlsx. Specific analytical instrument not stated in the source dataset files; GC is the standard method for this reaction class." + } + ], + "other_identifier": [ + { + "notation": "https://hdl.handle.net/21.11165/4cat/32x1-99x6" + } + ] + }, + { + "id": "coremeta4cat:REAC_32x1-99x6_CAL_SiO2", + "reaction_name": [ + "selective hydrogenation of cinnamyl alcohol" + ], + "title": [ + "Selective hydrogenation of cinnamyl alcohol over Pd-P/SiO2 catalysts" + ], + "description": [ + "Selective hydrogenation of cinnamyl alcohol (CAL) over 4 Pd/P/SiO2 catalysts (P loading 0-5 wt%, ~2 wt% Pd) in a full factorial design (9 runs) exploring temperature, pressure, phosphorus loading, and time. An initial fixed-condition screening (50C/5bar/30min, hot-filtration leaching test) gave CAL conversion/HCAL yield of 23/22% (Pd/SiO2) and 78/40% (Pd/3P/SiO2). Conversion ranged 12-100%, yield 9-56% across the 9-run design (catalytic_data.xlsx, 'Pd-XPSiO2_FF_CAL')." + ], + "rdf_type": { + "id": "VOC4CAT:0000260", + "title": "hydrogenation" + }, + "catalyst_type": [ + "heterogeneous_catalysis" + ], + "catalyst_form": [ + "supported" + ], + "used_catalyst": [ + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_0P", + "title": "Pd/SiO2", + "description": "Pd on SiO2 support, unmodified (P-free) reference catalyst", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 126.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (bet_results.txt)" + } + ] + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_1P", + "title": "Pd/1P/SiO2 (nominal 1 wt% P)", + "description": "Pd on SiO2 support, nominal 1 wt% P (phosphorus modifier)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 2.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured Pd loading (icp_results.txt)" + }, + { + "value": 1.1, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured P loading (icp_results.txt)" + }, + { + "value": 118.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (bet_results.txt)" + } + ] + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_3P", + "title": "Pd/3P/SiO2 (nominal 3 wt% P)", + "description": "Pd on SiO2 support, nominal 3 wt% P (phosphorus modifier)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 1.8, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured Pd loading (icp_results.txt)" + }, + { + "value": 2.6, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured P loading (icp_results.txt)" + }, + { + "value": 98.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (bet_results.txt)" + } + ] + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_5P", + "title": "Pd/5P/SiO2 (nominal 5 wt% P)", + "description": "Pd on SiO2 support, nominal 5 wt% P (phosphorus modifier)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 2.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured Pd loading (icp_results.txt)" + }, + { + "value": 4.8, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured P loading (icp_results.txt)" + }, + { + "value": 72.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (bet_results.txt)" + } + ] + } + ], + "used_reactant": [ + { + "id": "coremeta4cat:REAC_32x1-99x6_CAL_SiO2_substrate", + "title": "cinnamyl alcohol", + "rdf_type": { + "id": "CHEBI:15554", + "title": "cinnamyl alcohol" + } + }, + { + "id": "coremeta4cat:REAC_32x1-99x6_CAL_SiO2_H2", + "title": "hydrogen", + "rdf_type": { + "id": "CHEBI:18276", + "title": "molecular hydrogen" + } + } + ], + "used_reactor": [ + { + "id": "coremeta4cat:REAC_32x1-99x6_CAL_SiO2_reactor", + "title": "batch pressurized reactor", + "description": "Batch pressurised reactor (autoclave or similar sealed vessel), inferred from the 1-9 bar working pressure range and hot-filtration leaching test noted in catalytic_data.xlsx. Specific reactor model not stated in the source dataset files." + } + ], + "reactor_temperature_range": [ + { + "min_value": 303.15, + "max_value": 343.15, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Temperature", + "unit": "https://qudt.org/vocab/unit/K", + "description": "Temperature range explored in the design of experiments (catalytic_data.xlsx)" + } + ], + "experiment_pressure": [ + { + "value": 1.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Pressure", + "unit": "https://qudt.org/vocab/unit/BAR", + "description": "Minimum pressure in the design space" + }, + { + "value": 9.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Pressure", + "unit": "https://qudt.org/vocab/unit/BAR", + "description": "Maximum pressure in the design space" + } + ], + "product_identification_method": [ + { + "id": "coremeta4cat:REAC_32x1-99x6_CAL_SiO2_product_id", + "title": "Conversion/yield quantification", + "description": "Substrate conversion and product yield (%) reported with standard deviations in catalytic_data.xlsx. Specific analytical instrument not stated in the source dataset files; GC is the standard method for this reaction class." + } + ], + "other_identifier": [ + { + "notation": "https://hdl.handle.net/21.11165/4cat/32x1-99x6" + } + ] + }, + { + "id": "coremeta4cat:REAC_32x1-99x6_Citral_Al2O3", + "reaction_name": [ + "selective hydrogenation of citral" + ], + "title": [ + "Selective hydrogenation of citral over Pd-P/Al2O3 catalysts" + ], + "description": [ + "Selective hydrogenation of citral over 3 Pd/P/Al2O3 catalysts (1, 3, 5 wt% nominal P loading, ~2 wt% Pd) in a full factorial design (9 runs) exploring temperature, pressure, phosphorus loading, and time. Conversion ranged 15-85%, yield 15-65% across the 9-run design (catalytic_data.xlsx, 'Pd-XPAl2O3_FF_Citral')." + ], + "rdf_type": { + "id": "VOC4CAT:0000260", + "title": "hydrogenation" + }, + "catalyst_type": [ + "heterogeneous_catalysis" + ], + "catalyst_form": [ + "supported" + ], + "used_catalyst": [ + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_1P", + "title": "Pd/1P/Al2O3 (nominal 1 wt% P)", + "description": "Pd on Al2O3 support, nominal 1 wt% P (phosphorus modifier)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 1.8, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured Pd loading (icp_results.txt)" + }, + { + "value": 0.8, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured P loading (icp_results.txt)" + }, + { + "value": 118.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (bet_results.txt)" + } + ] + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_3P", + "title": "Pd/3P/Al2O3 (nominal 3 wt% P)", + "description": "Pd on Al2O3 support, nominal 3 wt% P (phosphorus modifier)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 1.8, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured Pd loading (icp_results.txt)" + }, + { + "value": 2.5, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured P loading (icp_results.txt)" + }, + { + "value": 105.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (bet_results.txt)" + } + ] + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_Al2O3_5P", + "title": "Pd/5P/Al2O3 (nominal 5 wt% P)", + "description": "Pd on Al2O3 support, nominal 5 wt% P (phosphorus modifier)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 1.9, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured Pd loading (icp_results.txt)" + }, + { + "value": 4.6, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured P loading (icp_results.txt)" + }, + { + "value": 108.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (bet_results.txt)" + } + ] + } + ], + "used_reactant": [ + { + "id": "coremeta4cat:REAC_32x1-99x6_Citral_Al2O3_substrate", + "title": "citral", + "rdf_type": { + "id": "CHEBI:29085", + "title": "citral" + } + }, + { + "id": "coremeta4cat:REAC_32x1-99x6_Citral_Al2O3_H2", + "title": "hydrogen", + "rdf_type": { + "id": "CHEBI:18276", + "title": "molecular hydrogen" + } + } + ], + "used_reactor": [ + { + "id": "coremeta4cat:REAC_32x1-99x6_Citral_Al2O3_reactor", + "title": "batch pressurized reactor", + "description": "Batch pressurised reactor (autoclave or similar sealed vessel), inferred from the 1-9 bar working pressure range and hot-filtration leaching test noted in catalytic_data.xlsx. Specific reactor model not stated in the source dataset files." + } + ], + "reactor_temperature_range": [ + { + "min_value": 303.15, + "max_value": 343.15, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Temperature", + "unit": "https://qudt.org/vocab/unit/K", + "description": "Temperature range explored in the design of experiments (catalytic_data.xlsx)" + } + ], + "experiment_pressure": [ + { + "value": 1.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Pressure", + "unit": "https://qudt.org/vocab/unit/BAR", + "description": "Minimum pressure in the design space" + }, + { + "value": 9.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Pressure", + "unit": "https://qudt.org/vocab/unit/BAR", + "description": "Maximum pressure in the design space" + } + ], + "product_identification_method": [ + { + "id": "coremeta4cat:REAC_32x1-99x6_Citral_Al2O3_product_id", + "title": "Conversion/yield quantification", + "description": "Substrate conversion and product yield (%) reported with standard deviations in catalytic_data.xlsx. Specific analytical instrument not stated in the source dataset files; GC is the standard method for this reaction class." + } + ], + "other_identifier": [ + { + "notation": "https://hdl.handle.net/21.11165/4cat/32x1-99x6" + } + ] + }, + { + "id": "coremeta4cat:REAC_32x1-99x6_Citral_SiO2", + "reaction_name": [ + "selective hydrogenation of citral" + ], + "title": [ + "Selective hydrogenation of citral over Pd-P/SiO2 catalysts" + ], + "description": [ + "Selective hydrogenation of citral over 3 Pd/P/SiO2 catalysts (1, 3, 5 wt% nominal P loading, ~2 wt% Pd) in a full factorial design (9 runs) exploring temperature, pressure, phosphorus loading, and time. Conversion ranged 11-100%, yield 11-84% across the 9-run design (catalytic_data.xlsx, 'Pd-XPSiO2_FF_Citral')." + ], + "rdf_type": { + "id": "VOC4CAT:0000260", + "title": "hydrogenation" + }, + "catalyst_type": [ + "heterogeneous_catalysis" + ], + "catalyst_form": [ + "supported" + ], + "used_catalyst": [ + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_1P", + "title": "Pd/1P/SiO2 (nominal 1 wt% P)", + "description": "Pd on SiO2 support, nominal 1 wt% P (phosphorus modifier)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 2.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured Pd loading (icp_results.txt)" + }, + { + "value": 1.1, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured P loading (icp_results.txt)" + }, + { + "value": 118.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (bet_results.txt)" + } + ] + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_3P", + "title": "Pd/3P/SiO2 (nominal 3 wt% P)", + "description": "Pd on SiO2 support, nominal 3 wt% P (phosphorus modifier)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 1.8, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured Pd loading (icp_results.txt)" + }, + { + "value": 2.6, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured P loading (icp_results.txt)" + }, + { + "value": 98.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (bet_results.txt)" + } + ] + }, + { + "id": "coremeta4cat:CAT_32x1-99x6_SiO2_5P", + "title": "Pd/5P/SiO2 (nominal 5 wt% P)", + "description": "Pd on SiO2 support, nominal 5 wt% P (phosphorus modifier)", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 2.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured Pd loading (icp_results.txt)" + }, + { + "value": 4.8, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "ICP-AES measured P loading (icp_results.txt)" + }, + { + "value": 72.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/SpecificArea", + "unit": "M2-PER-GM", + "description": "BET specific surface area (bet_results.txt)" + } + ] + } + ], + "used_reactant": [ + { + "id": "coremeta4cat:REAC_32x1-99x6_Citral_SiO2_substrate", + "title": "citral", + "rdf_type": { + "id": "CHEBI:29085", + "title": "citral" + } + }, + { + "id": "coremeta4cat:REAC_32x1-99x6_Citral_SiO2_H2", + "title": "hydrogen", + "rdf_type": { + "id": "CHEBI:18276", + "title": "molecular hydrogen" + } + } + ], + "used_reactor": [ + { + "id": "coremeta4cat:REAC_32x1-99x6_Citral_SiO2_reactor", + "title": "batch pressurized reactor", + "description": "Batch pressurised reactor (autoclave or similar sealed vessel), inferred from the 1-9 bar working pressure range and hot-filtration leaching test noted in catalytic_data.xlsx. Specific reactor model not stated in the source dataset files." + } + ], + "reactor_temperature_range": [ + { + "min_value": 303.15, + "max_value": 343.15, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Temperature", + "unit": "https://qudt.org/vocab/unit/K", + "description": "Temperature range explored in the design of experiments (catalytic_data.xlsx)" + } + ], + "experiment_pressure": [ + { + "value": 1.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Pressure", + "unit": "https://qudt.org/vocab/unit/BAR", + "description": "Minimum pressure in the design space" + }, + { + "value": 9.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Pressure", + "unit": "https://qudt.org/vocab/unit/BAR", + "description": "Maximum pressure in the design space" + } + ], + "product_identification_method": [ + { + "id": "coremeta4cat:REAC_32x1-99x6_Citral_SiO2_product_id", + "title": "Conversion/yield quantification", + "description": "Substrate conversion and product yield (%) reported with standard deviations in catalytic_data.xlsx. Specific analytical instrument not stated in the source dataset files; GC is the standard method for this reaction class." + } + ], + "other_identifier": [ + { + "notation": "https://hdl.handle.net/21.11165/4cat/32x1-99x6" + } + ] + } + ], + "is_about_entity": [ + { + "id": "coremeta4cat:CAT_32x1-99x6_all", + "title": "10 Pd/P catalyst samples (Al2O3 and SiO2 supports)", + "description": "Pd catalysts (nominal 2 wt% Pd) with 0-5 wt% nominal phosphorus loading on Al2O3 (6 samples) and SiO2 (4 samples) supports. See used_catalyst under is_about_activity and evaluated_entity under was_generated_by above for per-sample detail (ICP-AES loading, BET surface area)." + } + ] +} diff --git a/docs/assets/examples/CatalysisDataset-32x1-99x6.yaml b/docs/assets/examples/CatalysisDataset-32x1-99x6.yaml new file mode 100644 index 000000000..79734b29e --- /dev/null +++ b/docs/assets/examples/CatalysisDataset-32x1-99x6.yaml @@ -0,0 +1,784 @@ +--- +id: hdl:21.11165/4cat/32x1-99x6 +title: +- 'Support Engineering with Phosphorus: Tuning the Palladium-Catalyzed Selective Hydrogenation of α,β-Unsaturated + Aldehydes' +description: +- Catalyst characterization (BET, ICP-AES, PXRD, DRIFT, IR) and catalytic testing data for a series of + Pd/P catalysts (nominal 2 wt% Pd, 0-5 wt% P) on Al2O3 and SiO2 supports, investigating how phosphorus + modification of the support tunes the Pd-catalyzed selective hydrogenation of cinnamyl alcohol (CAL) + and citral. Catalytic performance was screened via Central Composite Design (Al2O3/CAL, 27 runs) and + full-factorial designs (SiO2/CAL, Al2O3/citral, SiO2/citral; 9 runs each) varying temperature (30-70 + C), pressure (1-9 bar), phosphorus loading, and reaction time. TEM is mentioned in the original repository + description but no TEM data files are included in the deposited dataset. +rdf_type: + id: VOC4CAT:0007001 + title: heterogeneous catalysis +keyword: +- Chemistry +- Engineering +- Catalysis +- Heterogeneous catalysis +- Palladium catalyst +- Phosphorus modification +- Selective hydrogenation +- Cinnamyl alcohol +- Citral +creator: +- name: + - Rang, Fabian +- name: + - Hanf, Schirin +- name: + - Holtermann, Birger +- name: + - Eggeler, Yolita +- name: + - Barth, Simon +- name: + - Grunwaldt, Jan-Dierk +publisher: + name: + - NFDI4Cat Central Data Repository +release_date: '2026-03-11' +dataset_distribution: +- access_URL: + - id: https://hdl.handle.net/21.11165/4cat/32x1-99x6 + title: Repository landing page + description: + - Repository landing page providing access to the characterization and catalytic testing data files. + licence: + id: https://creativecommons.org/licenses/by/4.0/ + title: CC BY 4.0 +other_identifier: +- notation: https://hdl.handle.net/21.11165/4cat/32x1-99x6 +- notation: doi:10.1021/ac0702802 + description: Methodology reference cited for the DRIFT pseudo-absorbance conversion (not this dataset's + own publication) +was_generated_by: +- id: coremeta4cat:CHAR_32x1-99x6_BET + title: + - BET surface area analysis (10 catalysts) + description: + - Brunauer-Emmett-Teller specific surface area determination for all 10 Pd/P-Al2O3 and Pd/P-SiO2 catalysts + (0-5 wt% nominal P loading). Surface area ranged 72-126 m2/g, generally decreasing with increasing + P loading (bet_results.txt). + rdf_type: + id: ENM:0000064 + title: BET analysis + carried_out_by: + - id: coremeta4cat:DEV_32x1-99x6_BET + title: BET surface area analyser + description: Instrument model not specified in the source dataset files. + evaluated_entity: + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_0P + title: Pd/Al2O3 + description: Pd on Al2O3, P-free reference + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_1P + title: Pd/1P/Al2O3 + description: Pd on Al2O3, nominal 1 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_2P + title: Pd/2P/Al2O3 + description: Pd on Al2O3, nominal 2 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_3P + title: Pd/3P/Al2O3 + description: Pd on Al2O3, nominal 3 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_4P + title: Pd/4P/Al2O3 + description: Pd on Al2O3, nominal 4 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_5P + title: Pd/5P/Al2O3 + description: Pd on Al2O3, nominal 5 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_0P + title: Pd/SiO2 + description: Pd on SiO2, P-free reference + - id: coremeta4cat:CAT_32x1-99x6_SiO2_1P + title: Pd/1P/SiO2 + description: Pd on SiO2, nominal 1 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_3P + title: Pd/3P/SiO2 + description: Pd on SiO2, nominal 3 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_5P + title: Pd/5P/SiO2 + description: Pd on SiO2, nominal 5 wt% P + realized_plan: + id: coremeta4cat:CHAR_32x1-99x6_BET_method + title: N2 physisorption BET method + description: Standard N2 physisorption at liquid-nitrogen temperature (-196C), Brunauer-Emmett-Teller + analysis. Adsorbate gas and measurement temperature not explicitly stated in bet_results.txt; assumed + standard BET convention. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/32x1-99x6 + activity_designator: Characterization +- id: coremeta4cat:CHAR_32x1-99x6_DRIFT + title: + - DRIFT CO-adsorption spectroscopy (4 catalysts) + description: + - Diffuse reflectance infrared Fourier transform spectroscopy of CO adsorbed at room temperature, for + 4 catalysts (Pd/Al2O3, Pd/3P/Al2O3, Pd/SiO2, Pd/3P/SiO2). Spectra converted to pseudo-absorbance (log(1/reflectance)) + per Anal. Chem. 2007, 79, 10, 3912-3918 (DOI 10.1021/ac0702802) and baseline-corrected (info_drifts.txt); + OriginPro 2023 used for analysis/plotting. + rdf_type: + id: CHMO:0000645 + title: diffuse reflectance infrared Fourier transform spectroscopy + carried_out_by: + - id: coremeta4cat:DEV_32x1-99x6_DRIFT + title: FTIR spectrometer with DRIFT accessory + description: Instrument model not specified in the source dataset files. + evaluated_entity: + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_0P + title: Pd/Al2O3 + description: Pd on Al2O3, P-free reference + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_3P + title: Pd/3P/Al2O3 + description: Pd on Al2O3, nominal 3 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_0P + title: Pd/SiO2 + description: Pd on SiO2, P-free reference + - id: coremeta4cat:CAT_32x1-99x6_SiO2_3P + title: Pd/3P/SiO2 + description: Pd on SiO2, nominal 3 wt% P + realized_plan: + id: coremeta4cat:CHAR_32x1-99x6_DRIFT_method + title: CO-adsorption DRIFT method + description: CO adsorption at room temperature; pseudo-absorbance = log(1/reflectance). + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/32x1-99x6 + activity_designator: Characterization +- id: coremeta4cat:CHAR_32x1-99x6_ICPAES + title: + - ICP-AES elemental composition analysis (8 catalysts) + description: + - Inductively coupled plasma atomic emission spectroscopy for bulk Pd and P content of the 8 P-modified + catalysts (measured Pd 1.8-2.0 wt%, P 0.8-4.8 wt%, deviating somewhat from nominal loadings; icp_results.txt). + P-free reference catalysts (Pd/Al2O3, Pd/SiO2) were not analysed by ICP-AES. + rdf_type: + id: CHMO:0000267 + title: inductively coupled plasma atomic emission spectroscopy + carried_out_by: + - id: coremeta4cat:DEV_32x1-99x6_ICPAES + title: ICP-AES spectrometer + description: Instrument model not specified in the source dataset files. + evaluated_entity: + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_1P + title: Pd/1P/Al2O3 + description: Pd on Al2O3, nominal 1 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_2P + title: Pd/2P/Al2O3 + description: Pd on Al2O3, nominal 2 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_3P + title: Pd/3P/Al2O3 + description: Pd on Al2O3, nominal 3 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_4P + title: Pd/4P/Al2O3 + description: Pd on Al2O3, nominal 4 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_5P + title: Pd/5P/Al2O3 + description: Pd on Al2O3, nominal 5 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_1P + title: Pd/1P/SiO2 + description: Pd on SiO2, nominal 1 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_3P + title: Pd/3P/SiO2 + description: Pd on SiO2, nominal 3 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_5P + title: Pd/5P/SiO2 + description: Pd on SiO2, nominal 5 wt% P + realized_plan: + id: coremeta4cat:CHAR_32x1-99x6_ICPAES_method + title: ICP-AES elemental analysis method + description: 'Elements analyzed: Pd, P. Results reported in wt% (icp_results.txt).' + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/32x1-99x6 + activity_designator: Characterization +- id: coremeta4cat:CHAR_32x1-99x6_IR + title: + - Infrared spectroscopy (6 catalysts) + description: + - Infrared spectroscopy of the 6 P-modified catalysts (1, 3, 5 wt% nominal P on Al2O3 and SiO2). Wavenumber + range ~400-3599 cm-1, 3319 data points per file, pseudo-absorbance convention consistent with the + DRIFT data. + rdf_type: + id: CHMO:0000630 + title: infrared spectroscopy + carried_out_by: + - id: coremeta4cat:DEV_32x1-99x6_IR + title: FTIR spectrometer + description: Instrument model not specified in the source dataset files. + evaluated_entity: + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_1P + title: Pd/1P/Al2O3 + description: Pd on Al2O3, nominal 1 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_3P + title: Pd/3P/Al2O3 + description: Pd on Al2O3, nominal 3 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_5P + title: Pd/5P/Al2O3 + description: Pd on Al2O3, nominal 5 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_1P + title: Pd/1P/SiO2 + description: Pd on SiO2, nominal 1 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_3P + title: Pd/3P/SiO2 + description: Pd on SiO2, nominal 3 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_5P + title: Pd/5P/SiO2 + description: Pd on SiO2, nominal 5 wt% P + realized_plan: + id: coremeta4cat:CHAR_32x1-99x6_IR_method + title: Infrared spectroscopy method + description: Wavenumber range ~400-3599 cm-1; pseudo-absorbance units. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/32x1-99x6 + activity_designator: Characterization +- id: coremeta4cat:CHAR_32x1-99x6_PXRD + title: + - Powder XRD phase analysis (10 catalysts) + description: + - Powder X-ray diffraction for phase identification of all 10 Pd/P-Al2O3 and Pd/P-SiO2 catalysts, plus + a P/SiO2 support-only reference sample without Pd (file PXRD_1PSiO2.xy). Two-theta range ~2-92 degrees, + step size 0.015 degrees (most files); two files (nominal 5 wt% P samples) cover a shorter range ~2-63.5 + degrees. + rdf_type: + id: CHMO:0000158 + title: powder X-ray diffraction + carried_out_by: + - id: coremeta4cat:DEV_32x1-99x6_PXRD + title: X-ray diffractometer + description: Instrument model not specified in the source dataset files. + evaluated_entity: + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_0P + title: Pd/Al2O3 + description: Pd on Al2O3, P-free reference + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_1P + title: Pd/1P/Al2O3 + description: Pd on Al2O3, nominal 1 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_2P + title: Pd/2P/Al2O3 + description: Pd on Al2O3, nominal 2 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_3P + title: Pd/3P/Al2O3 + description: Pd on Al2O3, nominal 3 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_4P + title: Pd/4P/Al2O3 + description: Pd on Al2O3, nominal 4 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_5P + title: Pd/5P/Al2O3 + description: Pd on Al2O3, nominal 5 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_0P + title: Pd/SiO2 + description: Pd on SiO2, P-free reference + - id: coremeta4cat:CAT_32x1-99x6_SiO2_1P + title: Pd/1P/SiO2 + description: Pd on SiO2, nominal 1 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_3P + title: Pd/3P/SiO2 + description: Pd on SiO2, nominal 3 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_5P + title: Pd/5P/SiO2 + description: Pd on SiO2, nominal 5 wt% P + realized_plan: + id: coremeta4cat:CHAR_32x1-99x6_PXRD_method + title: Powder XRD measurement method + description: Two-theta scan, ~2-92 degrees, step size 0.015 degrees. One file (PXRD_1PSiO2.xy) is + a Pd-free P/SiO2 support reference; one file (PXRD_Pd5Al2O3.xy) is missing the 'P' in its name but + is interpreted as the nominal 5 wt% P/Al2O3 sample based on the file series context (matches ICP + sample FR507). + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/32x1-99x6 + activity_designator: Characterization +is_about_activity: +- id: coremeta4cat:REAC_32x1-99x6_CAL_Al2O3 + reaction_name: + - selective hydrogenation of cinnamyl alcohol + title: + - Selective hydrogenation of cinnamyl alcohol over Pd-P/Al2O3 catalysts + description: + - Selective hydrogenation of cinnamyl alcohol (CAL) over 6 Pd/P/Al2O3 catalysts (P loading 0-5 wt%, + ~2 wt% Pd) in a Central Composite Design (27 runs) exploring temperature, pressure, phosphorus loading, + and time. An initial fixed-condition screening (50C/5bar/30min, hot-filtration leaching test) gave + CAL conversion/HCAL yield of 32/30% (Pd/Al2O3) and 45/42% (Pd/3P/Al2O3). Conversion ranged 6-96%, + yield 6-90% across the 27-run design (catalytic_data.xlsx, 'Pd-XPAl2O3_CCD_CAL'). + rdf_type: + id: VOC4CAT:0000260 + title: hydrogenation + catalyst_type: + - heterogeneous_catalysis + catalyst_form: + - supported + used_catalyst: + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_0P + title: Pd/Al2O3 + description: Pd on Al2O3 support, unmodified (P-free) reference catalyst + has_physical_state: SOLID + has_quantitative_attribute: + - value: 119.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_1P + title: Pd/1P/Al2O3 (nominal 1 wt% P) + description: Pd on Al2O3 support, nominal 1 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 1.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 0.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 118.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_2P + title: Pd/2P/Al2O3 (nominal 2 wt% P) + description: Pd on Al2O3 support, nominal 2 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 2.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 2.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 116.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_3P + title: Pd/3P/Al2O3 (nominal 3 wt% P) + description: Pd on Al2O3 support, nominal 3 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 1.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 2.5 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 105.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_4P + title: Pd/4P/Al2O3 (nominal 4 wt% P) + description: Pd on Al2O3 support, nominal 4 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 2.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 3.7 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 112.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_5P + title: Pd/5P/Al2O3 (nominal 5 wt% P) + description: Pd on Al2O3 support, nominal 5 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 1.9 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 4.6 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 108.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + used_reactant: + - id: coremeta4cat:REAC_32x1-99x6_CAL_Al2O3_substrate + title: cinnamyl alcohol + rdf_type: + id: CHEBI:15554 + title: cinnamyl alcohol + - id: coremeta4cat:REAC_32x1-99x6_CAL_Al2O3_H2 + title: hydrogen + rdf_type: + id: CHEBI:18276 + title: molecular hydrogen + used_reactor: + - id: coremeta4cat:REAC_32x1-99x6_CAL_Al2O3_reactor + title: batch pressurized reactor + description: Batch pressurised reactor (autoclave or similar sealed vessel), inferred from the 1-9 + bar working pressure range and hot-filtration leaching test noted in catalytic_data.xlsx. Specific + reactor model not stated in the source dataset files. + reactor_temperature_range: + - min_value: 303.15 + max_value: 343.15 + has_quantity_type: http://qudt.org/vocab/quantitykind/Temperature + unit: https://qudt.org/vocab/unit/K + description: Temperature range explored in the design of experiments (catalytic_data.xlsx) + experiment_pressure: + - value: 1.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Minimum pressure in the design space + - value: 9.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Maximum pressure in the design space + product_identification_method: + - id: coremeta4cat:REAC_32x1-99x6_CAL_Al2O3_product_id + title: Conversion/yield quantification + description: Substrate conversion and product yield (%) reported with standard deviations in catalytic_data.xlsx. + Specific analytical instrument not stated in the source dataset files; GC is the standard method + for this reaction class. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/32x1-99x6 +- id: coremeta4cat:REAC_32x1-99x6_CAL_SiO2 + reaction_name: + - selective hydrogenation of cinnamyl alcohol + title: + - Selective hydrogenation of cinnamyl alcohol over Pd-P/SiO2 catalysts + description: + - Selective hydrogenation of cinnamyl alcohol (CAL) over 4 Pd/P/SiO2 catalysts (P loading 0-5 wt%, ~2 + wt% Pd) in a full factorial design (9 runs) exploring temperature, pressure, phosphorus loading, and + time. An initial fixed-condition screening (50C/5bar/30min, hot-filtration leaching test) gave CAL + conversion/HCAL yield of 23/22% (Pd/SiO2) and 78/40% (Pd/3P/SiO2). Conversion ranged 12-100%, yield + 9-56% across the 9-run design (catalytic_data.xlsx, 'Pd-XPSiO2_FF_CAL'). + rdf_type: + id: VOC4CAT:0000260 + title: hydrogenation + catalyst_type: + - heterogeneous_catalysis + catalyst_form: + - supported + used_catalyst: + - id: coremeta4cat:CAT_32x1-99x6_SiO2_0P + title: Pd/SiO2 + description: Pd on SiO2 support, unmodified (P-free) reference catalyst + has_physical_state: SOLID + has_quantitative_attribute: + - value: 126.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_SiO2_1P + title: Pd/1P/SiO2 (nominal 1 wt% P) + description: Pd on SiO2 support, nominal 1 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 2.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 1.1 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 118.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_SiO2_3P + title: Pd/3P/SiO2 (nominal 3 wt% P) + description: Pd on SiO2 support, nominal 3 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 1.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 2.6 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 98.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_SiO2_5P + title: Pd/5P/SiO2 (nominal 5 wt% P) + description: Pd on SiO2 support, nominal 5 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 2.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 4.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 72.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + used_reactant: + - id: coremeta4cat:REAC_32x1-99x6_CAL_SiO2_substrate + title: cinnamyl alcohol + rdf_type: + id: CHEBI:15554 + title: cinnamyl alcohol + - id: coremeta4cat:REAC_32x1-99x6_CAL_SiO2_H2 + title: hydrogen + rdf_type: + id: CHEBI:18276 + title: molecular hydrogen + used_reactor: + - id: coremeta4cat:REAC_32x1-99x6_CAL_SiO2_reactor + title: batch pressurized reactor + description: Batch pressurised reactor (autoclave or similar sealed vessel), inferred from the 1-9 + bar working pressure range and hot-filtration leaching test noted in catalytic_data.xlsx. Specific + reactor model not stated in the source dataset files. + reactor_temperature_range: + - min_value: 303.15 + max_value: 343.15 + has_quantity_type: http://qudt.org/vocab/quantitykind/Temperature + unit: https://qudt.org/vocab/unit/K + description: Temperature range explored in the design of experiments (catalytic_data.xlsx) + experiment_pressure: + - value: 1.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Minimum pressure in the design space + - value: 9.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Maximum pressure in the design space + product_identification_method: + - id: coremeta4cat:REAC_32x1-99x6_CAL_SiO2_product_id + title: Conversion/yield quantification + description: Substrate conversion and product yield (%) reported with standard deviations in catalytic_data.xlsx. + Specific analytical instrument not stated in the source dataset files; GC is the standard method + for this reaction class. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/32x1-99x6 +- id: coremeta4cat:REAC_32x1-99x6_Citral_Al2O3 + reaction_name: + - selective hydrogenation of citral + title: + - Selective hydrogenation of citral over Pd-P/Al2O3 catalysts + description: + - Selective hydrogenation of citral over 3 Pd/P/Al2O3 catalysts (1, 3, 5 wt% nominal P loading, ~2 wt% + Pd) in a full factorial design (9 runs) exploring temperature, pressure, phosphorus loading, and time. + Conversion ranged 15-85%, yield 15-65% across the 9-run design (catalytic_data.xlsx, 'Pd-XPAl2O3_FF_Citral'). + rdf_type: + id: VOC4CAT:0000260 + title: hydrogenation + catalyst_type: + - heterogeneous_catalysis + catalyst_form: + - supported + used_catalyst: + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_1P + title: Pd/1P/Al2O3 (nominal 1 wt% P) + description: Pd on Al2O3 support, nominal 1 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 1.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 0.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 118.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_3P + title: Pd/3P/Al2O3 (nominal 3 wt% P) + description: Pd on Al2O3 support, nominal 3 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 1.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 2.5 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 105.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_5P + title: Pd/5P/Al2O3 (nominal 5 wt% P) + description: Pd on Al2O3 support, nominal 5 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 1.9 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 4.6 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 108.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + used_reactant: + - id: coremeta4cat:REAC_32x1-99x6_Citral_Al2O3_substrate + title: citral + rdf_type: + id: CHEBI:29085 + title: citral + - id: coremeta4cat:REAC_32x1-99x6_Citral_Al2O3_H2 + title: hydrogen + rdf_type: + id: CHEBI:18276 + title: molecular hydrogen + used_reactor: + - id: coremeta4cat:REAC_32x1-99x6_Citral_Al2O3_reactor + title: batch pressurized reactor + description: Batch pressurised reactor (autoclave or similar sealed vessel), inferred from the 1-9 + bar working pressure range and hot-filtration leaching test noted in catalytic_data.xlsx. Specific + reactor model not stated in the source dataset files. + reactor_temperature_range: + - min_value: 303.15 + max_value: 343.15 + has_quantity_type: http://qudt.org/vocab/quantitykind/Temperature + unit: https://qudt.org/vocab/unit/K + description: Temperature range explored in the design of experiments (catalytic_data.xlsx) + experiment_pressure: + - value: 1.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Minimum pressure in the design space + - value: 9.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Maximum pressure in the design space + product_identification_method: + - id: coremeta4cat:REAC_32x1-99x6_Citral_Al2O3_product_id + title: Conversion/yield quantification + description: Substrate conversion and product yield (%) reported with standard deviations in catalytic_data.xlsx. + Specific analytical instrument not stated in the source dataset files; GC is the standard method + for this reaction class. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/32x1-99x6 +- id: coremeta4cat:REAC_32x1-99x6_Citral_SiO2 + reaction_name: + - selective hydrogenation of citral + title: + - Selective hydrogenation of citral over Pd-P/SiO2 catalysts + description: + - Selective hydrogenation of citral over 3 Pd/P/SiO2 catalysts (1, 3, 5 wt% nominal P loading, ~2 wt% + Pd) in a full factorial design (9 runs) exploring temperature, pressure, phosphorus loading, and time. + Conversion ranged 11-100%, yield 11-84% across the 9-run design (catalytic_data.xlsx, 'Pd-XPSiO2_FF_Citral'). + rdf_type: + id: VOC4CAT:0000260 + title: hydrogenation + catalyst_type: + - heterogeneous_catalysis + catalyst_form: + - supported + used_catalyst: + - id: coremeta4cat:CAT_32x1-99x6_SiO2_1P + title: Pd/1P/SiO2 (nominal 1 wt% P) + description: Pd on SiO2 support, nominal 1 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 2.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 1.1 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 118.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_SiO2_3P + title: Pd/3P/SiO2 (nominal 3 wt% P) + description: Pd on SiO2 support, nominal 3 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 1.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 2.6 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 98.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_SiO2_5P + title: Pd/5P/SiO2 (nominal 5 wt% P) + description: Pd on SiO2 support, nominal 5 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 2.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 4.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 72.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + used_reactant: + - id: coremeta4cat:REAC_32x1-99x6_Citral_SiO2_substrate + title: citral + rdf_type: + id: CHEBI:29085 + title: citral + - id: coremeta4cat:REAC_32x1-99x6_Citral_SiO2_H2 + title: hydrogen + rdf_type: + id: CHEBI:18276 + title: molecular hydrogen + used_reactor: + - id: coremeta4cat:REAC_32x1-99x6_Citral_SiO2_reactor + title: batch pressurized reactor + description: Batch pressurised reactor (autoclave or similar sealed vessel), inferred from the 1-9 + bar working pressure range and hot-filtration leaching test noted in catalytic_data.xlsx. Specific + reactor model not stated in the source dataset files. + reactor_temperature_range: + - min_value: 303.15 + max_value: 343.15 + has_quantity_type: http://qudt.org/vocab/quantitykind/Temperature + unit: https://qudt.org/vocab/unit/K + description: Temperature range explored in the design of experiments (catalytic_data.xlsx) + experiment_pressure: + - value: 1.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Minimum pressure in the design space + - value: 9.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Maximum pressure in the design space + product_identification_method: + - id: coremeta4cat:REAC_32x1-99x6_Citral_SiO2_product_id + title: Conversion/yield quantification + description: Substrate conversion and product yield (%) reported with standard deviations in catalytic_data.xlsx. + Specific analytical instrument not stated in the source dataset files; GC is the standard method + for this reaction class. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/32x1-99x6 +is_about_entity: +- id: coremeta4cat:CAT_32x1-99x6_all + title: 10 Pd/P catalyst samples (Al2O3 and SiO2 supports) + description: Pd catalysts (nominal 2 wt% Pd) with 0-5 wt% nominal phosphorus loading on Al2O3 (6 samples) + and SiO2 (4 samples) supports. See used_catalyst under is_about_activity and evaluated_entity under + was_generated_by above for per-sample detail (ICP-AES loading, BET surface area). diff --git a/docs/assets/examples/CatalysisDataset-arp5-s69r.json b/docs/assets/examples/CatalysisDataset-arp5-s69r.json new file mode 100644 index 000000000..cdcfe1f88 --- /dev/null +++ b/docs/assets/examples/CatalysisDataset-arp5-s69r.json @@ -0,0 +1,659 @@ +{ + "id": "hdl:21.11165/4cat/arp5-s69r", + "title": [ + "Carbonylation catalysis of aryl halides through active-site engineering" + ], + "description": [ + "Catalyst characterization (PXRD, DRIFT, CO chemisorption, XPS, STEM) and catalytic testing data for Pd3P/SiO2 (a phosphorus-modified palladium phosphide catalyst, internal code ARNE01) compared against an unmodified Pd/SiO2 reference (ARNE02), for Pd-catalyzed carbonylation reactions of aryl iodides. 31 batch reactor runs span three reaction types: alkoxycarbonylation (27 runs; mainly iodobenzene + ethanol -> ethyl benzoate, exploring reaction time, base, temperature, and substrate/nucleophile scope), phenoxycarbonylation (1 run, phenol nucleophile), and aminocarbonylation (3 runs, aniline nucleophile, 100-140 C). PXRD additionally covers two further Pd3P/SiO2 loading variants (1 wt% and 10 wt% Pd), and STEM additionally covers a recycled/spent Pd3P/SiO2 sample recovered after catalytic testing; STEM method details are documented but no STEM image/data files are included in the deposited dataset." + ], + "rdf_type": { + "id": "VOC4CAT:0007001", + "title": "heterogeneous catalysis" + }, + "keyword": [ + "Chemistry", + "Catalysis", + "Heterogeneous catalysis", + "Palladium catalyst", + "Palladium phosphide", + "Carbonylation", + "Active-site engineering" + ], + "creator": [ + { + "name": [ + "Neyyathala, Arjun" + ] + }, + { + "name": [ + "Jung, Felix" + ] + }, + { + "name": [ + "Barth, Simon" + ] + }, + { + "name": [ + "Feldmann, Claus" + ] + }, + { + "name": [ + "Grunwaldt, Jan-Dierk" + ] + }, + { + "name": [ + "Jevtovik, Ivana" + ] + }, + { + "name": [ + "Schunk, Stephan A." + ] + }, + { + "name": [ + "Dolcet, Paolo" + ] + }, + { + "name": [ + "Gross, Silvia" + ] + }, + { + "name": [ + "Hanf, Schirin" + ] + } + ], + "publisher": { + "name": [ + "NFDI4Cat Central Data Repository" + ] + }, + "dataset_distribution": [ + { + "access_URL": [ + { + "id": "https://hdl.handle.net/21.11165/4cat/arp5-s69r", + "title": "Repository landing page" + } + ], + "description": [ + "Repository landing page providing access to the characterization and catalytic testing data files." + ], + "licence": { + "id": "https://creativecommons.org/licenses/by/4.0/", + "title": "CC BY 4.0" + } + } + ], + "other_identifier": [ + { + "notation": "https://hdl.handle.net/21.11165/4cat/arp5-s69r" + } + ], + "was_generated_by": [ + { + "id": "coremeta4cat:CHAR_arp5-s69r_COChemisorption", + "title": [ + "CO chemisorption analysis (2 catalysts)" + ], + "description": [ + "Pulse CO chemisorption at room temperature (25 C) for Pd3P/SiO2 and Pd/SiO2 (2 replicate runs each), used to determine active surface Pd site density / dispersion by comparing CO uptake between the phosphide and the unmodified reference catalyst." + ], + "carried_out_by": [ + { + "id": "coremeta4cat:DEV_arp5-s69r_COChemisorption", + "title": "Pulse chemisorption analyser", + "description": "Instrument model not specified in the source dataset files." + } + ], + "evaluated_entity": [ + { + "id": "coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt", + "title": "Pd3P/SiO2 (5 wt% Pd, ARNE01)", + "description": "See CatalyticReaction files for full detail." + }, + { + "id": "coremeta4cat:CAT_arp5-s69r_Pd_SiO2_5wt", + "title": "Pd/SiO2 (5 wt% Pd, ARNE02)", + "description": "See CatalyticReaction files for full detail." + } + ], + "realized_plan": { + "id": "coremeta4cat:CHAR_arp5-s69r_COChemisorption_method", + "title": "Pulse CO chemisorption method", + "description": "CO pulses at room temperature; peak areas integrated to determine total CO uptake." + }, + "other_identifier": [ + { + "notation": "https://hdl.handle.net/21.11165/4cat/arp5-s69r" + } + ], + "activity_designator": "Characterization" + }, + { + "id": "coremeta4cat:CHAR_arp5-s69r_DRIFT", + "title": [ + "DRIFT CO-adsorption spectroscopy (2 catalysts, 2 temperatures)" + ], + "description": [ + "Diffuse reflectance infrared Fourier transform spectroscopy of CO adsorbed on Pd3P/SiO2 and Pd/SiO2, at 30 C and 100 C (4 spectra total). Atmosphere: 4000 ppm CO, balance Ar, 50 mL/min flow; Ar flush between measurements. Sample: 50 mg, 100-200 micron sieve fraction, in a Harrick in-situ cell with CaF2 windows." + ], + "carried_out_by": [ + { + "id": "coremeta4cat:DEV_arp5-s69r_DRIFT", + "title": "VERTEX 70 FTIR spectrometer (Bruker)", + "description": "VERTEX 70 FTIR spectrometer (Bruker) equipped with Praying Mantis diffuse reflection optics (Harrick) and a liquid-nitrogen-cooled mercury cadmium telluride (MCT) detector." + } + ], + "evaluated_entity": [ + { + "id": "coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt", + "title": "Pd3P/SiO2 (5 wt% Pd, ARNE01)", + "description": "See CatalyticReaction files for full detail." + }, + { + "id": "coremeta4cat:CAT_arp5-s69r_Pd_SiO2_5wt", + "title": "Pd/SiO2 (5 wt% Pd, ARNE02)", + "description": "See CatalyticReaction files for full detail." + } + ], + "realized_plan": { + "id": "coremeta4cat:CHAR_arp5-s69r_DRIFT_method", + "title": "CO-adsorption DRIFT method", + "description": "Reflectance mode; scanner velocity 20 kHz; aperture 6 mm; MIR source, KBr beamsplitter." + }, + "other_identifier": [ + { + "notation": "https://hdl.handle.net/21.11165/4cat/arp5-s69r" + } + ], + "rdf_type": { + "id": "CHMO:0000645", + "title": "diffuse reflectance infrared Fourier transform spectroscopy" + }, + "activity_designator": "Characterization" + }, + { + "id": "coremeta4cat:CHAR_arp5-s69r_PXRD", + "title": [ + "Powder XRD phase analysis (4 catalysts)" + ], + "description": [ + "Powder X-ray diffraction for phase identification of Pd/SiO2 (5 wt%, ARNE01/ICSD 85525=Pd3P phase reference, ARNE02/ICSD 52251=Pd phase reference) and two further Pd3P/SiO2 loading variants (1 wt% and 10 wt%), transmission geometry, 2theta 2-90 degrees, ~80 min total measurement per sample." + ], + "carried_out_by": [ + { + "id": "coremeta4cat:DEV_arp5-s69r_PXRD", + "title": "Stoe STADI-MP diffractometer", + "description": "Stoe STADI-MP powder diffractometer, Cu X-ray source (lambda=1.54178 A), Ge monochromator." + } + ], + "evaluated_entity": [ + { + "id": "coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt", + "title": "Pd3P/SiO2 (5 wt% Pd, ARNE01)", + "description": "See CatalyticReaction files for full detail." + }, + { + "id": "coremeta4cat:CAT_arp5-s69r_Pd_SiO2_5wt", + "title": "Pd/SiO2 (5 wt% Pd, ARNE02)", + "description": "See CatalyticReaction files for full detail." + }, + { + "id": "coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_1wt", + "title": "Pd3P/SiO2 (1 wt% Pd)", + "description": "Lower-loading Pd3P/SiO2 variant, PXRD-only sample." + }, + { + "id": "coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_10wt", + "title": "Pd3P/SiO2 (10 wt% Pd)", + "description": "Higher-loading Pd3P/SiO2 variant, PXRD-only sample." + } + ], + "realized_plan": { + "id": "coremeta4cat:CHAR_arp5-s69r_PXRD_method", + "title": "Powder XRD measurement method", + "description": "Transmission geometry, air atmosphere, ambient temperature; software INSTPAR." + }, + "other_identifier": [ + { + "notation": "https://hdl.handle.net/21.11165/4cat/arp5-s69r" + } + ], + "rdf_type": { + "id": "CHMO:0000158", + "title": "powder X-ray diffraction" + }, + "activity_designator": "Characterization" + }, + { + "id": "coremeta4cat:CHAR_arp5-s69r_STEM", + "title": [ + "STEM/TEM imaging and EDX mapping (3 catalyst samples)" + ], + "description": [ + "Transmission electron microscopy (HRTEM), scanning TEM (HAADF-STEM), and STEM-EDX elemental mapping of Pd3P/SiO2 (ARNE01), Pd/SiO2 (ARNE02), and a recycled/spent Pd3P/SiO2 sample recovered after catalytic testing (ARNE03), for particle size distribution, chemical composition, and crystal structure. Note: STEM-Meta-2.txt documents the method in detail but no image/data files for this technique are included in the deposited dataset." + ], + "carried_out_by": [ + { + "id": "coremeta4cat:DEV_arp5-s69r_STEM", + "title": "FEI Osiris ChemiSTEM", + "description": "FEI/Thermo Fisher Osiris ChemiSTEM, combined TEM and STEM with ChemiSTEM EDX detector, Schottky field emission gun, 200 kV high tension, magnification 160-800 kx." + } + ], + "evaluated_entity": [ + { + "id": "coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt", + "title": "Pd3P/SiO2 (5 wt% Pd, ARNE01)", + "description": "See CatalyticReaction files for full detail." + }, + { + "id": "coremeta4cat:CAT_arp5-s69r_Pd_SiO2_5wt", + "title": "Pd/SiO2 (5 wt% Pd, ARNE02)", + "description": "See CatalyticReaction files for full detail." + }, + { + "id": "coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt_recycled", + "title": "Pd3P/SiO2 (5 wt% Pd, recycled, ARNE03)", + "description": "Spent Pd3P/SiO2 catalyst recovered after catalytic testing, examined by STEM for post-reaction stability." + } + ], + "realized_plan": { + "id": "coremeta4cat:CHAR_arp5-s69r_STEM_method", + "title": "STEM/TEM imaging and EDX mapping method", + "description": "HRTEM (Digital Micrograph/Gatan) and HAADF-STEM/STEM-EDXS (TEM Imaging and Microscopy/FEI, Esprit/Bruker); Cliff-Lorimer quantification for EDXS." + }, + "other_identifier": [ + { + "notation": "https://hdl.handle.net/21.11165/4cat/arp5-s69r" + } + ], + "rdf_type": { + "id": "VOC4CAT:0000078", + "title": "transmission electron microscopy" + }, + "activity_designator": "Characterization" + }, + { + "id": "coremeta4cat:CHAR_arp5-s69r_XPS", + "title": [ + "X-ray photoelectron spectroscopy (2 catalysts, Pd 3d and P 2p)" + ], + "description": [ + "XPS binding energy scans of the Pd 3d core level for Pd/SiO2 and Pd3P/SiO2, and the P 2p core level for Pd3P/SiO2, to compare Pd electronic structure/oxidation state between the phosphide and the unmodified reference catalyst." + ], + "carried_out_by": [ + { + "id": "coremeta4cat:DEV_arp5-s69r_XPS", + "title": "XPS spectrometer", + "description": "Instrument model not specified in the source dataset files." + } + ], + "evaluated_entity": [ + { + "id": "coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt", + "title": "Pd3P/SiO2 (5 wt% Pd, ARNE01)", + "description": "See CatalyticReaction files for full detail." + }, + { + "id": "coremeta4cat:CAT_arp5-s69r_Pd_SiO2_5wt", + "title": "Pd/SiO2 (5 wt% Pd, ARNE02)", + "description": "See CatalyticReaction files for full detail." + } + ], + "realized_plan": { + "id": "coremeta4cat:CHAR_arp5-s69r_XPS_method", + "title": "XPS core-level measurement method", + "description": "Pd 3d scans for both catalysts; P 2p scan additionally for Pd3P/SiO2." + }, + "other_identifier": [ + { + "notation": "https://hdl.handle.net/21.11165/4cat/arp5-s69r" + } + ], + "rdf_type": { + "id": "CHMO:0000404", + "title": "X-ray photoelectron spectroscopy" + }, + "activity_designator": "Characterization" + } + ], + "is_about_activity": [ + { + "id": "coremeta4cat:REAC_arp5-s69r_Aminocarbonylation", + "reaction_name": [ + "Pd-catalyzed aminocarbonylation of iodobenzene" + ], + "title": [ + "Aminocarbonylation of iodobenzene over Pd3P/SiO2 (3 runs)" + ], + "description": [ + "Pd-catalyzed aminocarbonylation of iodobenzene with aniline as the nucleophile (in toluene, triethylamine base) to form benzanilide, over Pd3P/SiO2. 3 runs at 100, 120, and 140 C (5 h, CO 10 bar); yield/conversion increased with temperature from 10% to 78%." + ], + "rdf_type": { + "id": "VOC4CAT:0000247", + "title": "carbonylation" + }, + "catalyst_type": [ + "heterogeneous_catalysis" + ], + "catalyst_form": [ + "supported" + ], + "used_catalyst": [ + { + "id": "coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt", + "title": "Pd3P/SiO2 (5 wt% Pd, internal code ARNE01)", + "description": "Palladium phosphide (Pd3P) nanoparticles supported on silica, 5 wt% Pd, 0.5 mol% metal loading.", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 5.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "Pd loading (Overview Reaction Description-2.txt)" + }, + { + "value": 0.01, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Mass", + "unit": "GM", + "description": "Catalyst mass used per batch test" + } + ] + } + ], + "used_reactant": [ + { + "id": "coremeta4cat:REAC_arp5-s69r_CO", + "title": "carbon monoxide", + "rdf_type": { + "id": "CHEBI:17245", + "title": "carbon monoxide" + } + }, + { + "id": "coremeta4cat:REAC_arp5-s69r_Amino_iodobenzene", + "title": "iodobenzene" + }, + { + "id": "coremeta4cat:REAC_arp5-s69r_Amino_aniline", + "title": "aniline" + } + ], + "used_reactor": [ + { + "id": "coremeta4cat:REAC_arp5-s69r_reactor", + "title": "Parr 5500 series compact reactor", + "description": "Batch autoclave, cylindrical stainless steel reaction chamber (25 mL, 25.4 x 50.8 mm ID), overhead stirrer at 1000 rpm, electric heating." + } + ], + "reactor_temperature_range": [ + { + "min_value": 373.15, + "max_value": 413.15, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Temperature", + "unit": "https://qudt.org/vocab/unit/K", + "description": "100-140 C across the 3 runs" + } + ], + "experiment_pressure": [ + { + "value": 10.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Pressure", + "unit": "https://qudt.org/vocab/unit/BAR", + "description": "Initial CO pressure, constant across the 3 runs" + } + ], + "product_identification_method": [ + { + "id": "coremeta4cat:REAC_arp5-s69r_Amino_product_id", + "title": "GC-MS product quantification", + "description": "Gas chromatography-mass spectrometry with n-decane internal standard." + } + ], + "other_identifier": [ + { + "notation": "https://hdl.handle.net/21.11165/4cat/arp5-s69r" + } + ] + }, + { + "id": "coremeta4cat:REAC_arp5-s69r_Carbonylation", + "reaction_name": [ + "Pd-catalyzed alkoxycarbonylation of aryl iodides" + ], + "title": [ + "Alkoxycarbonylation of aryl iodides over Pd3P/SiO2 and Pd/SiO2 (27 runs)" + ], + "description": [ + "Pd-catalyzed alkoxycarbonylation (CO insertion + alcohol trapping) of aryl iodides to form aryl esters, mainly iodobenzene + ethanol -> ethyl benzoate. 24 runs used Pd3P/SiO2 (ARNE01), exploring reaction time (5 min - 3 h, series A), base screening (triethylamine, sodium acetate, potassium hydroxide, potassium carbonate, or no base, series B), temperature-time kinetics grid (60-80 C x 0.5-1 h, series k), and substrate/nucleophile scope (methanol, isopropanol, and aryl iodide substrates bromoiodobenzene/iodotoluene/iodoanisole, series S1-S5). 3 further runs (series C) repeated the time-course on Pd/SiO2 (ARNE02, P-free reference) for comparison. Conversion/yield ranged 7-100% across all 27 runs. Batch reactor, CO 6 bar, ethanol solvent (except S1 methanol, S2 isopropanol)." + ], + "rdf_type": { + "id": "VOC4CAT:0000247", + "title": "carbonylation" + }, + "catalyst_type": [ + "heterogeneous_catalysis" + ], + "catalyst_form": [ + "supported" + ], + "used_catalyst": [ + { + "id": "coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt", + "title": "Pd3P/SiO2 (5 wt% Pd, internal code ARNE01)", + "description": "Palladium phosphide (Pd3P) nanoparticles supported on silica, 5 wt% Pd, 0.5 mol% metal loading.", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 5.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "Pd loading (Overview Reaction Description-2.txt)" + }, + { + "value": 0.01, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Mass", + "unit": "GM", + "description": "Catalyst mass used per batch test" + } + ] + }, + { + "id": "coremeta4cat:CAT_arp5-s69r_Pd_SiO2_5wt", + "title": "Pd/SiO2 (5 wt% Pd, internal code ARNE02)", + "description": "Unmodified (phosphorus-free) palladium nanoparticles supported on silica, 5 wt% Pd, 0.5 mol% metal loading -- reference catalyst for comparison against the Pd3P phosphide.", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 5.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "Pd loading (Overview Reaction Description-2.txt)" + }, + { + "value": 0.01, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Mass", + "unit": "GM", + "description": "Catalyst mass used per batch test" + } + ] + } + ], + "used_reactant": [ + { + "id": "coremeta4cat:REAC_arp5-s69r_CO", + "title": "carbon monoxide", + "rdf_type": { + "id": "CHEBI:17245", + "title": "carbon monoxide" + } + }, + { + "id": "coremeta4cat:REAC_arp5-s69r_Carbonylation_substrate", + "title": "aryl iodide substrate", + "description": "Iodobenzene in most runs; bromoiodobenzene (S3), iodotoluene (S4), and iodoanisole (S5) in the substrate-scope runs." + }, + { + "id": "coremeta4cat:REAC_arp5-s69r_Carbonylation_alcohol", + "title": "alcohol nucleophile", + "description": "Ethanol in most runs (also the reaction solvent); methanol (S1) and isopropanol (S2) in the nucleophile-scope runs." + }, + { + "id": "coremeta4cat:REAC_arp5-s69r_Carbonylation_base", + "title": "base", + "description": "Triethylamine in most runs; sodium acetate, potassium hydroxide, potassium carbonate, or no base in the base-screening runs (series B)." + } + ], + "used_reactor": [ + { + "id": "coremeta4cat:REAC_arp5-s69r_reactor", + "title": "Parr 5500 series compact reactor", + "description": "Batch autoclave, cylindrical stainless steel reaction chamber (25 mL, 25.4 x 50.8 mm ID), overhead stirrer at 1000 rpm, electric heating." + } + ], + "reactor_temperature_range": [ + { + "min_value": 333.15, + "max_value": 373.15, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Temperature", + "unit": "https://qudt.org/vocab/unit/K", + "description": "60-100 C across the 27 runs" + } + ], + "experiment_pressure": [ + { + "value": 6.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Pressure", + "unit": "https://qudt.org/vocab/unit/BAR", + "description": "Initial CO pressure, constant across all 27 runs" + } + ], + "product_identification_method": [ + { + "id": "coremeta4cat:REAC_arp5-s69r_Carbonylation_product_id", + "title": "GC-MS product quantification", + "description": "Gas chromatography-mass spectrometry with n-decane internal standard; conversion/yield/selectivity computed from GC-MS peak areas." + } + ], + "other_identifier": [ + { + "notation": "https://hdl.handle.net/21.11165/4cat/arp5-s69r" + } + ] + }, + { + "id": "coremeta4cat:REAC_arp5-s69r_Phenoxycarbonylation", + "reaction_name": [ + "Pd-catalyzed phenoxycarbonylation of iodobenzene" + ], + "title": [ + "Phenoxycarbonylation of iodobenzene over Pd3P/SiO2 (1 run)" + ], + "description": [ + "Pd-catalyzed phenoxycarbonylation of iodobenzene with phenol as the nucleophile (in toluene, triethylamine base) to form phenyl benzoate, over Pd3P/SiO2. Single run: 100 C, 7 h, CO 6 bar, yield/conversion 30%." + ], + "rdf_type": { + "id": "VOC4CAT:0000247", + "title": "carbonylation" + }, + "catalyst_type": [ + "heterogeneous_catalysis" + ], + "catalyst_form": [ + "supported" + ], + "used_catalyst": [ + { + "id": "coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt", + "title": "Pd3P/SiO2 (5 wt% Pd, internal code ARNE01)", + "description": "Palladium phosphide (Pd3P) nanoparticles supported on silica, 5 wt% Pd, 0.5 mol% metal loading.", + "has_physical_state": "SOLID", + "has_quantitative_attribute": [ + { + "value": 5.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/MassFraction", + "unit": "PERCENT", + "description": "Pd loading (Overview Reaction Description-2.txt)" + }, + { + "value": 0.01, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Mass", + "unit": "GM", + "description": "Catalyst mass used per batch test" + } + ] + } + ], + "used_reactant": [ + { + "id": "coremeta4cat:REAC_arp5-s69r_CO", + "title": "carbon monoxide", + "rdf_type": { + "id": "CHEBI:17245", + "title": "carbon monoxide" + } + }, + { + "id": "coremeta4cat:REAC_arp5-s69r_Phenoxy_iodobenzene", + "title": "iodobenzene" + }, + { + "id": "coremeta4cat:REAC_arp5-s69r_Phenoxy_phenol", + "title": "phenol" + } + ], + "used_reactor": [ + { + "id": "coremeta4cat:REAC_arp5-s69r_reactor", + "title": "Parr 5500 series compact reactor", + "description": "Batch autoclave, cylindrical stainless steel reaction chamber (25 mL, 25.4 x 50.8 mm ID), overhead stirrer at 1000 rpm, electric heating." + } + ], + "reactor_temperature_range": [ + { + "min_value": 373.15, + "max_value": 373.15, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Temperature", + "unit": "https://qudt.org/vocab/unit/K", + "description": "100 C, single run" + } + ], + "experiment_pressure": [ + { + "value": 6.0, + "has_quantity_type": "http://qudt.org/vocab/quantitykind/Pressure", + "unit": "https://qudt.org/vocab/unit/BAR", + "description": "Initial CO pressure" + } + ], + "product_identification_method": [ + { + "id": "coremeta4cat:REAC_arp5-s69r_Phenoxy_product_id", + "title": "GC-MS product quantification", + "description": "Gas chromatography-mass spectrometry with n-decane internal standard." + } + ], + "other_identifier": [ + { + "notation": "https://hdl.handle.net/21.11165/4cat/arp5-s69r" + } + ] + } + ], + "is_about_entity": [ + { + "id": "coremeta4cat:CAT_arp5-s69r_all", + "title": "Pd3P/SiO2 and Pd/SiO2 catalyst samples", + "description": "Palladium phosphide (Pd3P) and unmodified palladium catalysts supported on silica (5 wt% Pd, plus 1 and 10 wt% Pd3P loading variants characterized by PXRD only, and a recycled/spent Pd3P/SiO2 sample characterized by STEM only). See used_catalyst under is_about_activity and evaluated_entity under was_generated_by above for per-sample detail." + } + ] +} diff --git a/docs/assets/examples/CatalysisDataset-arp5-s69r.yaml b/docs/assets/examples/CatalysisDataset-arp5-s69r.yaml new file mode 100644 index 000000000..1245e9488 --- /dev/null +++ b/docs/assets/examples/CatalysisDataset-arp5-s69r.yaml @@ -0,0 +1,439 @@ +--- +id: hdl:21.11165/4cat/arp5-s69r +title: +- Carbonylation catalysis of aryl halides through active-site engineering +description: +- 'Catalyst characterization (PXRD, DRIFT, CO chemisorption, XPS, STEM) and catalytic testing data for + Pd3P/SiO2 (a phosphorus-modified palladium phosphide catalyst, internal code ARNE01) compared against + an unmodified Pd/SiO2 reference (ARNE02), for Pd-catalyzed carbonylation reactions of aryl iodides. + 31 batch reactor runs span three reaction types: alkoxycarbonylation (27 runs; mainly iodobenzene + + ethanol -> ethyl benzoate, exploring reaction time, base, temperature, and substrate/nucleophile scope), + phenoxycarbonylation (1 run, phenol nucleophile), and aminocarbonylation (3 runs, aniline nucleophile, + 100-140 C). PXRD additionally covers two further Pd3P/SiO2 loading variants (1 wt% and 10 wt% Pd), and + STEM additionally covers a recycled/spent Pd3P/SiO2 sample recovered after catalytic testing; STEM method + details are documented but no STEM image/data files are included in the deposited dataset.' +rdf_type: + id: VOC4CAT:0007001 + title: heterogeneous catalysis +keyword: +- Chemistry +- Catalysis +- Heterogeneous catalysis +- Palladium catalyst +- Palladium phosphide +- Carbonylation +- Active-site engineering +creator: +- name: + - Neyyathala, Arjun +- name: + - Jung, Felix +- name: + - Barth, Simon +- name: + - Feldmann, Claus +- name: + - Grunwaldt, Jan-Dierk +- name: + - Jevtovik, Ivana +- name: + - Schunk, Stephan A. +- name: + - Dolcet, Paolo +- name: + - Gross, Silvia +- name: + - Hanf, Schirin +publisher: + name: + - NFDI4Cat Central Data Repository +dataset_distribution: +- access_URL: + - id: https://hdl.handle.net/21.11165/4cat/arp5-s69r + title: Repository landing page + description: + - Repository landing page providing access to the characterization and catalytic testing data files. + licence: + id: https://creativecommons.org/licenses/by/4.0/ + title: CC BY 4.0 +other_identifier: +- notation: https://hdl.handle.net/21.11165/4cat/arp5-s69r +was_generated_by: +- id: coremeta4cat:CHAR_arp5-s69r_COChemisorption + title: + - CO chemisorption analysis (2 catalysts) + description: + - Pulse CO chemisorption at room temperature (25 C) for Pd3P/SiO2 and Pd/SiO2 (2 replicate runs each), + used to determine active surface Pd site density / dispersion by comparing CO uptake between the phosphide + and the unmodified reference catalyst. + carried_out_by: + - id: coremeta4cat:DEV_arp5-s69r_COChemisorption + title: Pulse chemisorption analyser + description: Instrument model not specified in the source dataset files. + evaluated_entity: + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt + title: Pd3P/SiO2 (5 wt% Pd, ARNE01) + description: See CatalyticReaction files for full detail. + - id: coremeta4cat:CAT_arp5-s69r_Pd_SiO2_5wt + title: Pd/SiO2 (5 wt% Pd, ARNE02) + description: See CatalyticReaction files for full detail. + realized_plan: + id: coremeta4cat:CHAR_arp5-s69r_COChemisorption_method + title: Pulse CO chemisorption method + description: CO pulses at room temperature; peak areas integrated to determine total CO uptake. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/arp5-s69r + activity_designator: Characterization +- id: coremeta4cat:CHAR_arp5-s69r_DRIFT + title: + - DRIFT CO-adsorption spectroscopy (2 catalysts, 2 temperatures) + description: + - 'Diffuse reflectance infrared Fourier transform spectroscopy of CO adsorbed on Pd3P/SiO2 and Pd/SiO2, + at 30 C and 100 C (4 spectra total). Atmosphere: 4000 ppm CO, balance Ar, 50 mL/min flow; Ar flush + between measurements. Sample: 50 mg, 100-200 micron sieve fraction, in a Harrick in-situ cell with + CaF2 windows.' + carried_out_by: + - id: coremeta4cat:DEV_arp5-s69r_DRIFT + title: VERTEX 70 FTIR spectrometer (Bruker) + description: VERTEX 70 FTIR spectrometer (Bruker) equipped with Praying Mantis diffuse reflection + optics (Harrick) and a liquid-nitrogen-cooled mercury cadmium telluride (MCT) detector. + evaluated_entity: + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt + title: Pd3P/SiO2 (5 wt% Pd, ARNE01) + description: See CatalyticReaction files for full detail. + - id: coremeta4cat:CAT_arp5-s69r_Pd_SiO2_5wt + title: Pd/SiO2 (5 wt% Pd, ARNE02) + description: See CatalyticReaction files for full detail. + realized_plan: + id: coremeta4cat:CHAR_arp5-s69r_DRIFT_method + title: CO-adsorption DRIFT method + description: Reflectance mode; scanner velocity 20 kHz; aperture 6 mm; MIR source, KBr beamsplitter. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/arp5-s69r + rdf_type: + id: CHMO:0000645 + title: diffuse reflectance infrared Fourier transform spectroscopy + activity_designator: Characterization +- id: coremeta4cat:CHAR_arp5-s69r_PXRD + title: + - Powder XRD phase analysis (4 catalysts) + description: + - Powder X-ray diffraction for phase identification of Pd/SiO2 (5 wt%, ARNE01/ICSD 85525=Pd3P phase + reference, ARNE02/ICSD 52251=Pd phase reference) and two further Pd3P/SiO2 loading variants (1 wt% + and 10 wt%), transmission geometry, 2theta 2-90 degrees, ~80 min total measurement per sample. + carried_out_by: + - id: coremeta4cat:DEV_arp5-s69r_PXRD + title: Stoe STADI-MP diffractometer + description: Stoe STADI-MP powder diffractometer, Cu X-ray source (lambda=1.54178 A), Ge monochromator. + evaluated_entity: + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt + title: Pd3P/SiO2 (5 wt% Pd, ARNE01) + description: See CatalyticReaction files for full detail. + - id: coremeta4cat:CAT_arp5-s69r_Pd_SiO2_5wt + title: Pd/SiO2 (5 wt% Pd, ARNE02) + description: See CatalyticReaction files for full detail. + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_1wt + title: Pd3P/SiO2 (1 wt% Pd) + description: Lower-loading Pd3P/SiO2 variant, PXRD-only sample. + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_10wt + title: Pd3P/SiO2 (10 wt% Pd) + description: Higher-loading Pd3P/SiO2 variant, PXRD-only sample. + realized_plan: + id: coremeta4cat:CHAR_arp5-s69r_PXRD_method + title: Powder XRD measurement method + description: Transmission geometry, air atmosphere, ambient temperature; software INSTPAR. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/arp5-s69r + rdf_type: + id: CHMO:0000158 + title: powder X-ray diffraction + activity_designator: Characterization +- id: coremeta4cat:CHAR_arp5-s69r_STEM + title: + - STEM/TEM imaging and EDX mapping (3 catalyst samples) + description: + - 'Transmission electron microscopy (HRTEM), scanning TEM (HAADF-STEM), and STEM-EDX elemental mapping + of Pd3P/SiO2 (ARNE01), Pd/SiO2 (ARNE02), and a recycled/spent Pd3P/SiO2 sample recovered after catalytic + testing (ARNE03), for particle size distribution, chemical composition, and crystal structure. Note: + STEM-Meta-2.txt documents the method in detail but no image/data files for this technique are included + in the deposited dataset.' + carried_out_by: + - id: coremeta4cat:DEV_arp5-s69r_STEM + title: FEI Osiris ChemiSTEM + description: FEI/Thermo Fisher Osiris ChemiSTEM, combined TEM and STEM with ChemiSTEM EDX detector, + Schottky field emission gun, 200 kV high tension, magnification 160-800 kx. + evaluated_entity: + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt + title: Pd3P/SiO2 (5 wt% Pd, ARNE01) + description: See CatalyticReaction files for full detail. + - id: coremeta4cat:CAT_arp5-s69r_Pd_SiO2_5wt + title: Pd/SiO2 (5 wt% Pd, ARNE02) + description: See CatalyticReaction files for full detail. + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt_recycled + title: Pd3P/SiO2 (5 wt% Pd, recycled, ARNE03) + description: Spent Pd3P/SiO2 catalyst recovered after catalytic testing, examined by STEM for post-reaction + stability. + realized_plan: + id: coremeta4cat:CHAR_arp5-s69r_STEM_method + title: STEM/TEM imaging and EDX mapping method + description: HRTEM (Digital Micrograph/Gatan) and HAADF-STEM/STEM-EDXS (TEM Imaging and Microscopy/FEI, + Esprit/Bruker); Cliff-Lorimer quantification for EDXS. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/arp5-s69r + rdf_type: + id: VOC4CAT:0000078 + title: transmission electron microscopy + activity_designator: Characterization +- id: coremeta4cat:CHAR_arp5-s69r_XPS + title: + - X-ray photoelectron spectroscopy (2 catalysts, Pd 3d and P 2p) + description: + - XPS binding energy scans of the Pd 3d core level for Pd/SiO2 and Pd3P/SiO2, and the P 2p core level + for Pd3P/SiO2, to compare Pd electronic structure/oxidation state between the phosphide and the unmodified + reference catalyst. + carried_out_by: + - id: coremeta4cat:DEV_arp5-s69r_XPS + title: XPS spectrometer + description: Instrument model not specified in the source dataset files. + evaluated_entity: + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt + title: Pd3P/SiO2 (5 wt% Pd, ARNE01) + description: See CatalyticReaction files for full detail. + - id: coremeta4cat:CAT_arp5-s69r_Pd_SiO2_5wt + title: Pd/SiO2 (5 wt% Pd, ARNE02) + description: See CatalyticReaction files for full detail. + realized_plan: + id: coremeta4cat:CHAR_arp5-s69r_XPS_method + title: XPS core-level measurement method + description: Pd 3d scans for both catalysts; P 2p scan additionally for Pd3P/SiO2. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/arp5-s69r + rdf_type: + id: CHMO:0000404 + title: X-ray photoelectron spectroscopy + activity_designator: Characterization +is_about_activity: +- id: coremeta4cat:REAC_arp5-s69r_Aminocarbonylation + reaction_name: + - Pd-catalyzed aminocarbonylation of iodobenzene + title: + - Aminocarbonylation of iodobenzene over Pd3P/SiO2 (3 runs) + description: + - Pd-catalyzed aminocarbonylation of iodobenzene with aniline as the nucleophile (in toluene, triethylamine + base) to form benzanilide, over Pd3P/SiO2. 3 runs at 100, 120, and 140 C (5 h, CO 10 bar); yield/conversion + increased with temperature from 10% to 78%. + rdf_type: + id: VOC4CAT:0000247 + title: carbonylation + catalyst_type: + - heterogeneous_catalysis + catalyst_form: + - supported + used_catalyst: + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt + title: Pd3P/SiO2 (5 wt% Pd, internal code ARNE01) + description: Palladium phosphide (Pd3P) nanoparticles supported on silica, 5 wt% Pd, 0.5 mol% metal + loading. + has_physical_state: SOLID + has_quantitative_attribute: + - value: 5.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: Pd loading (Overview Reaction Description-2.txt) + - value: 0.01 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: Catalyst mass used per batch test + used_reactant: + - id: coremeta4cat:REAC_arp5-s69r_CO + title: carbon monoxide + rdf_type: + id: CHEBI:17245 + title: carbon monoxide + - id: coremeta4cat:REAC_arp5-s69r_Amino_iodobenzene + title: iodobenzene + - id: coremeta4cat:REAC_arp5-s69r_Amino_aniline + title: aniline + used_reactor: + - id: coremeta4cat:REAC_arp5-s69r_reactor + title: Parr 5500 series compact reactor + description: Batch autoclave, cylindrical stainless steel reaction chamber (25 mL, 25.4 x 50.8 mm + ID), overhead stirrer at 1000 rpm, electric heating. + reactor_temperature_range: + - min_value: 373.15 + max_value: 413.15 + has_quantity_type: http://qudt.org/vocab/quantitykind/Temperature + unit: https://qudt.org/vocab/unit/K + description: 100-140 C across the 3 runs + experiment_pressure: + - value: 10.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Initial CO pressure, constant across the 3 runs + product_identification_method: + - id: coremeta4cat:REAC_arp5-s69r_Amino_product_id + title: GC-MS product quantification + description: Gas chromatography-mass spectrometry with n-decane internal standard. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/arp5-s69r +- id: coremeta4cat:REAC_arp5-s69r_Carbonylation + reaction_name: + - Pd-catalyzed alkoxycarbonylation of aryl iodides + title: + - Alkoxycarbonylation of aryl iodides over Pd3P/SiO2 and Pd/SiO2 (27 runs) + description: + - Pd-catalyzed alkoxycarbonylation (CO insertion + alcohol trapping) of aryl iodides to form aryl esters, + mainly iodobenzene + ethanol -> ethyl benzoate. 24 runs used Pd3P/SiO2 (ARNE01), exploring reaction + time (5 min - 3 h, series A), base screening (triethylamine, sodium acetate, potassium hydroxide, + potassium carbonate, or no base, series B), temperature-time kinetics grid (60-80 C x 0.5-1 h, series + k), and substrate/nucleophile scope (methanol, isopropanol, and aryl iodide substrates bromoiodobenzene/iodotoluene/iodoanisole, + series S1-S5). 3 further runs (series C) repeated the time-course on Pd/SiO2 (ARNE02, P-free reference) + for comparison. Conversion/yield ranged 7-100% across all 27 runs. Batch reactor, CO 6 bar, ethanol + solvent (except S1 methanol, S2 isopropanol). + rdf_type: + id: VOC4CAT:0000247 + title: carbonylation + catalyst_type: + - heterogeneous_catalysis + catalyst_form: + - supported + used_catalyst: + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt + title: Pd3P/SiO2 (5 wt% Pd, internal code ARNE01) + description: Palladium phosphide (Pd3P) nanoparticles supported on silica, 5 wt% Pd, 0.5 mol% metal + loading. + has_physical_state: SOLID + has_quantitative_attribute: + - value: 5.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: Pd loading (Overview Reaction Description-2.txt) + - value: 0.01 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: Catalyst mass used per batch test + - id: coremeta4cat:CAT_arp5-s69r_Pd_SiO2_5wt + title: Pd/SiO2 (5 wt% Pd, internal code ARNE02) + description: Unmodified (phosphorus-free) palladium nanoparticles supported on silica, 5 wt% Pd, 0.5 + mol% metal loading -- reference catalyst for comparison against the Pd3P phosphide. + has_physical_state: SOLID + has_quantitative_attribute: + - value: 5.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: Pd loading (Overview Reaction Description-2.txt) + - value: 0.01 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: Catalyst mass used per batch test + used_reactant: + - id: coremeta4cat:REAC_arp5-s69r_CO + title: carbon monoxide + rdf_type: + id: CHEBI:17245 + title: carbon monoxide + - id: coremeta4cat:REAC_arp5-s69r_Carbonylation_substrate + title: aryl iodide substrate + description: Iodobenzene in most runs; bromoiodobenzene (S3), iodotoluene (S4), and iodoanisole (S5) + in the substrate-scope runs. + - id: coremeta4cat:REAC_arp5-s69r_Carbonylation_alcohol + title: alcohol nucleophile + description: Ethanol in most runs (also the reaction solvent); methanol (S1) and isopropanol (S2) + in the nucleophile-scope runs. + - id: coremeta4cat:REAC_arp5-s69r_Carbonylation_base + title: base + description: Triethylamine in most runs; sodium acetate, potassium hydroxide, potassium carbonate, + or no base in the base-screening runs (series B). + used_reactor: + - id: coremeta4cat:REAC_arp5-s69r_reactor + title: Parr 5500 series compact reactor + description: Batch autoclave, cylindrical stainless steel reaction chamber (25 mL, 25.4 x 50.8 mm + ID), overhead stirrer at 1000 rpm, electric heating. + reactor_temperature_range: + - min_value: 333.15 + max_value: 373.15 + has_quantity_type: http://qudt.org/vocab/quantitykind/Temperature + unit: https://qudt.org/vocab/unit/K + description: 60-100 C across the 27 runs + experiment_pressure: + - value: 6.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Initial CO pressure, constant across all 27 runs + product_identification_method: + - id: coremeta4cat:REAC_arp5-s69r_Carbonylation_product_id + title: GC-MS product quantification + description: Gas chromatography-mass spectrometry with n-decane internal standard; conversion/yield/selectivity + computed from GC-MS peak areas. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/arp5-s69r +- id: coremeta4cat:REAC_arp5-s69r_Phenoxycarbonylation + reaction_name: + - Pd-catalyzed phenoxycarbonylation of iodobenzene + title: + - Phenoxycarbonylation of iodobenzene over Pd3P/SiO2 (1 run) + description: + - 'Pd-catalyzed phenoxycarbonylation of iodobenzene with phenol as the nucleophile (in toluene, triethylamine + base) to form phenyl benzoate, over Pd3P/SiO2. Single run: 100 C, 7 h, CO 6 bar, yield/conversion + 30%.' + rdf_type: + id: VOC4CAT:0000247 + title: carbonylation + catalyst_type: + - heterogeneous_catalysis + catalyst_form: + - supported + used_catalyst: + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt + title: Pd3P/SiO2 (5 wt% Pd, internal code ARNE01) + description: Palladium phosphide (Pd3P) nanoparticles supported on silica, 5 wt% Pd, 0.5 mol% metal + loading. + has_physical_state: SOLID + has_quantitative_attribute: + - value: 5.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: Pd loading (Overview Reaction Description-2.txt) + - value: 0.01 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: Catalyst mass used per batch test + used_reactant: + - id: coremeta4cat:REAC_arp5-s69r_CO + title: carbon monoxide + rdf_type: + id: CHEBI:17245 + title: carbon monoxide + - id: coremeta4cat:REAC_arp5-s69r_Phenoxy_iodobenzene + title: iodobenzene + - id: coremeta4cat:REAC_arp5-s69r_Phenoxy_phenol + title: phenol + used_reactor: + - id: coremeta4cat:REAC_arp5-s69r_reactor + title: Parr 5500 series compact reactor + description: Batch autoclave, cylindrical stainless steel reaction chamber (25 mL, 25.4 x 50.8 mm + ID), overhead stirrer at 1000 rpm, electric heating. + reactor_temperature_range: + - min_value: 373.15 + max_value: 373.15 + has_quantity_type: http://qudt.org/vocab/quantitykind/Temperature + unit: https://qudt.org/vocab/unit/K + description: 100 C, single run + experiment_pressure: + - value: 6.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Initial CO pressure + product_identification_method: + - id: coremeta4cat:REAC_arp5-s69r_Phenoxy_product_id + title: GC-MS product quantification + description: Gas chromatography-mass spectrometry with n-decane internal standard. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/arp5-s69r +is_about_entity: +- id: coremeta4cat:CAT_arp5-s69r_all + title: Pd3P/SiO2 and Pd/SiO2 catalyst samples + description: Palladium phosphide (Pd3P) and unmodified palladium catalysts supported on silica (5 wt% + Pd, plus 1 and 10 wt% Pd3P loading variants characterized by PXRD only, and a recycled/spent Pd3P/SiO2 + sample characterized by STEM only). See used_catalyst under is_about_activity and evaluated_entity + under was_generated_by above for per-sample detail. diff --git a/docs/working-with-data.md b/docs/working-with-data.md new file mode 100644 index 000000000..6a104d219 --- /dev/null +++ b/docs/working-with-data.md @@ -0,0 +1,138 @@ +--- +title: Working with Data +description: Three real published datasets, described end-to-end with CoreMeta4Cat +--- + +# Working with Data + +The rest of this documentation explains CoreMeta4Cat field by field. This page does the opposite: it shows three **complete, real** metadata records, built for datasets that are already published on [repository.nfdi4cat.org](https://repository.nfdi4cat.org) — NFDI4Cat's data repository (nicknamed "Repo4Cat"). Nothing here is a schema reference. It's meant to give you a feel for what a finished CoreMeta4Cat record actually looks like once real experimental data goes into it, so you have something concrete to compare your own dataset against. + +If you're looking for the field-by-field reference instead, see [Catalysis Dataset](catalysis-dataset.md), [Design Patterns](design-patterns.md), or the [Schema Reference](elements/overview.md). + +--- + +## How a CoreMeta4Cat record is organised + +Every record answers the same handful of questions, in this order: + +1. **What is this dataset, and who made it?** — a title, a description, the people who created it, and where the original files live (`id`, `title`, `description`, `creator`, `dataset_distribution`). +2. **What activities produced the data?** — was a catalyst synthesized (`Synthesis`)? Was something measured (`Characterization`)? Was something computed (`Simulation`)? These go under `was_generated_by`. +3. **What catalytic reaction is the dataset about?** — the reaction being studied, with its reactants, catalysts, conditions, and how products were identified. This goes under `is_about_activity`. +4. **What catalyst or material is the dataset about?** — `is_about_entity`. + +A simple dataset might only need one of these (e.g. a pure simulation study skips reactions entirely). The three examples below all use several at once, because that's what the underlying experiments actually did — a catalyst was characterized by several techniques, then tested in a set of reactions. + +Every example below is real, validated data: the three files are part of CoreMeta4Cat's own test suite (`tests/data/valid/`), so they're guaranteed to conform to the schema. + +--- + +## Dataset 1 — CO/CO₂ methanation over nickel + +
+ +**[Dataset for Publication: Reaction Kinetics of CO and CO2 Methanation over Nickel](https://repository.nfdi4cat.org/dataset.xhtml?persistentId=hdl:21.11165/4cat/2d6m-exeb){:target="_blank"}** +Schmider, D.; Maier, L.; Deutschmann, O. (2025) — Institute for Catalysis Research and Technology (IKFT), KIT +Related publication: [Ind. Eng. Chem. Res. (2021), DOI 10.1021/acs.iecr.1c00389](https://doi.org/10.1021/acs.iecr.1c00389){:target="_blank"} + +
+ +This dataset reports steady-state CO and CO₂ methanation kinetics measured over 16 different nickel catalysts (varying support — Al₂O₃, SiO₂, ZrO₂, TiO₂, MgAl₂O₄ — and nickel loading from 5 to 41 wt%) in fixed-bed reactors. The 16 runs split into three reaction types depending on the feed gas: CO methanation, CO₂ methanation, and a mixed CO/CO₂ feed. + +The CoreMeta4Cat record groups this into: + +- **1 `Characterization`** (`was_generated_by`) — the outlet gas composition analysis used for every run, since it's the same analytical method throughout. +- **3 `CatalyticReaction`s** (`is_about_activity`) — one per reaction type (CO methanation, CO₂ methanation, mixed feed), each listing all the catalysts tested under that feed and the temperature range explored. + +Grouping by reaction type and technique, rather than writing one entry per catalyst, keeps the record's length proportional to how the underlying study is actually organised — 4 pieces instead of 16. + +
+ + ⬇ Download YAML + + + ⬇ Download JSON + +
+ +--- + +## Dataset 2 — Phosphorus-modified Pd catalysts for selective hydrogenation + +
+ +**[Support Engineering with Phosphorus: Tuning the Palladium-Catalyzed Selective Hydrogenation of α,β-Unsaturated Aldehydes](https://repository.nfdi4cat.org/dataset.xhtml?persistentId=hdl:21.11165/4cat/32x1-99x6){:target="_blank"}** +Rang, F.; Hanf, S.; Holtermann, B.; Eggeler, Y.; Barth, S.; Grunwaldt, J.-D. (2026) — KIT + +
+ +This dataset investigates how phosphorus-modification of the support tunes Pd-catalyzed selective hydrogenation, across 10 Pd/P catalysts (Al₂O₃ and SiO₂ supports, 0–5 wt% phosphorus). It combines five characterization techniques with catalytic testing of two substrates (cinnamyl alcohol and citral) across both supports. + +The CoreMeta4Cat record groups this into: + +- **5 `Characterization`s** (`was_generated_by`) — one per technique (BET, ICP-AES, PXRD, DRIFT, IR), each covering every catalyst that technique was applied to. +- **4 `CatalyticReaction`s** (`is_about_activity`) — one per substrate/support combination (cinnamyl alcohol × Al₂O₃, cinnamyl alcohol × SiO₂, citral × Al₂O₃, citral × SiO₂). + +
+ + ⬇ Download YAML + + + ⬇ Download JSON + +
+ +--- + +## Dataset 3 — Palladium phosphide catalysts for carbonylation + +
+ +**[Carbonylation catalysis of aryl halides through active-site engineering](https://repository.nfdi4cat.org/dataset.xhtml?persistentId=hdl:21.11165/4cat/arp5-s69r){:target="_blank"}** +Neyyathala, A.; Jung, F.; Feldmann, C.; Barth, S.; Grunwaldt, J.-D.; Jevtovik, I.; Schunk, S. A.; Dolcet, P.; Gross, S.; Hanf, S. (2025) — KIT and collaborators + +
+ +This dataset compares a phosphorus-modified palladium phosphide catalyst (Pd₃P/SiO₂) against an unmodified Pd/SiO₂ reference, across 31 batch-reactor carbonylation runs — mostly alkoxycarbonylation of aryl iodides (varying reaction time, base, temperature, and substrate), plus a handful of phenoxy- and aminocarbonylation runs. It's characterized by five different techniques, including two additional Pd₃P/SiO₂ loading variants only seen in the PXRD data, and a recycled/spent catalyst sample only seen in the STEM data. + +The CoreMeta4Cat record groups this into: + +- **5 `Characterization`s** (`was_generated_by`) — PXRD, DRIFT, CO chemisorption, XPS, STEM. +- **3 `CatalyticReaction`s** (`is_about_activity`) — one per reaction type (alkoxycarbonylation, phenoxycarbonylation, aminocarbonylation). + +
+ + ⬇ Download YAML + + + ⬇ Download JSON + +
+ +--- + +## A note on grouping + +None of these three datasets describe just one catalyst measured once. Real studies screen many catalysts, or run the same technique across a whole series. Writing one `Characterization` per catalyst, or one `CatalyticReaction` per experimental run, would make the record balloon to dozens of near-identical entries. + +All three examples above instead group by **what was actually shared**: one `Characterization` per analytical technique (covering every sample that technique was applied to), and one `CatalyticReaction` per reaction type or substrate/condition combination (covering every catalyst tested under it, with things like temperature expressed as the range explored rather than one value per run). This keeps a record's size proportional to the *number of distinct methods and reaction types* in a study, not the number of individual data points — which is usually a much smaller number. + +--- + +## Next steps + +- **See the field-by-field reference** for `CatalysisDataset` → [Catalysis Dataset](catalysis-dataset.md) +- **Understand the four pillars** (Synthesis, Characterization, Reaction, Simulation) → [Design Patterns](design-patterns.md) +- **Start from your own spreadsheet** → [Getting Started](getting-started.md) +- **Browse every field CoreMeta4Cat defines** → [Schema Reference](elements/overview.md) diff --git a/justfile b/justfile index c1db5a2a0..bc03821af 100644 --- a/justfile +++ b/justfile @@ -94,12 +94,12 @@ lint: # Generate md documentation for the schema [group('model development')] -gen-doc: schema-to-excel _gen-yaml +gen-doc: schema-to-excel _gen-yaml gen-schema-docs gen-charts gen-example-outputs uv run gen-doc {{gen_doc_args}} -d {{docdir}} {{source_schema_path}} # Build docs and run test server [group('model development')] -testdoc: gen-doc gen-schema-docs gen-charts _serve +testdoc: gen-doc _serve # Generate the Python data models (dataclasses & pydantic) gen-python: diff --git a/project.justfile b/project.justfile index 195120aa1..243cf4180 100644 --- a/project.justfile +++ b/project.justfile @@ -15,6 +15,12 @@ gen-charts: schema-to-excel: uv run python scripts/schema_to_excel.py +# Publish the real-world CatalysisDataset examples as downloadable json/yaml +# (docs/assets/examples/) for the "Working with Data" documentation page +[group('model development')] +gen-example-outputs: + uv run python scripts/generate_example_outputs.py + # Compare the Excel vocabulary workbook against the current schema [group('model development')] excel-to-schema: diff --git a/scripts/generate_example_outputs.py b/scripts/generate_example_outputs.py new file mode 100644 index 000000000..40c64e661 --- /dev/null +++ b/scripts/generate_example_outputs.py @@ -0,0 +1,69 @@ +""" +generate_example_outputs.py + +Publishes the real-world CatalysisDataset examples (tests/data/valid/ +CatalysisDataset-.yaml, e.g. -2d6m-exeb.yaml) as downloadable +.json and .yaml files under docs/assets/examples/, so the "Working with +Data" documentation page can link to them. + +These files are already validated as part of `just test` +(tests/data/valid/ is the schema's test suite); this script only +republishes the already-valid YAML in JSON form and copies the YAML +alongside it, it does not re-validate. + +Run: + just gen-example-outputs + or directly: + uv run python scripts/generate_example_outputs.py +""" + +from __future__ import annotations + +import json +import re +import shutil +from pathlib import Path + +import yaml + +REPO_ROOT = Path(__file__).resolve().parent.parent +SOURCE_DIR = REPO_ROOT / "tests" / "data" / "valid" +OUTPUT_DIR = REPO_ROOT / "docs" / "assets" / "examples" + +# Real-world dataset examples, identified by the dataset-id suffix in their +# filename (CatalysisDataset-.yaml). Purely-numeric suffixes (001, +# 002, ...) are synthetic schema-testing fixtures and are excluded here -- +# only handle-style dataset ids (e.g. 2d6m-exeb) get published. +DATASET_ID_PATTERN = re.compile(r"^CatalysisDataset-(.+)\.yaml$") + + +def main() -> None: + OUTPUT_DIR.mkdir(parents=True, exist_ok=True) + published = [] + for source_file in sorted(SOURCE_DIR.glob("CatalysisDataset-*.yaml")): + match = DATASET_ID_PATTERN.match(source_file.name) + if not match: + continue + dataset_id = match.group(1) + if dataset_id.isdigit(): + continue + with open(source_file, encoding="utf-8") as f: + data = yaml.safe_load(f) + + yaml_out = OUTPUT_DIR / f"CatalysisDataset-{dataset_id}.yaml" + shutil.copyfile(source_file, yaml_out) + + json_out = OUTPUT_DIR / f"CatalysisDataset-{dataset_id}.json" + with open(json_out, "w", encoding="utf-8") as f: + json.dump(data, f, indent=2, ensure_ascii=False) + f.write("\n") + + published.append(dataset_id) + print(f" OK {yaml_out.relative_to(REPO_ROOT)}") + print(f" OK {json_out.relative_to(REPO_ROOT)}") + + print(f"\nPublished {len(published)} example dataset(s) to {OUTPUT_DIR.relative_to(REPO_ROOT)}: {', '.join(published)}") + + +if __name__ == "__main__": + main() diff --git a/tests/data/valid/CatalysisDataset-2d6m-exeb.yaml b/tests/data/valid/CatalysisDataset-2d6m-exeb.yaml new file mode 100644 index 000000000..80fcf8a6c --- /dev/null +++ b/tests/data/valid/CatalysisDataset-2d6m-exeb.yaml @@ -0,0 +1,605 @@ +--- +id: hdl:21.11165/4cat/2d6m-exeb +title: +- 'Dataset for Publication: Reaction Kinetics of CO and CO2 Methanation over Nickel' +description: +- 'Steady-state methanation kinetics screening dataset covering 16 valid experimental runs (Exp2,3,4,7,8,9,11,12,13,14,15,16,17,18,19,20 + -- Exp1, Exp5, Exp6, Exp10 excluded by the data providers, see ReadMe.txt) over 16 distinct supported + Ni catalysts (Al2O3, SiO2, ZrO2, TiO2, MgAl2O4 supports; 5-40.8 wt% Ni) in isothermal cylindrical fixed-bed + reactors. Three reaction types were studied depending on feed gas composition: CO methanation (4 runs), + CO2 methanation (8 runs), and mixed CO/CO2 co-methanation (4 runs). Conversion was determined from outlet + gas composition analysis. Related publication: DOI 10.1021/acs.iecr.1c00389.' +rdf_type: + id: VOC4CAT:0007001 + title: heterogeneous catalysis +keyword: +- Chemistry +- Catalysis +- Heterogeneous catalysis +- CO methanation +- CO2 methanation +- Nickel catalyst +- Fixed-bed reactor +creator: +- name: + - 'Schmider, Daniel' +- name: + - 'Maier, Lubow' +- name: + - 'Deutschmann, Olaf' +publisher: + name: + - NFDI4Cat Central Data Repository +dataset_distribution: +- access_URL: + - id: https://hdl.handle.net/21.11165/4cat/2d6m-exeb + title: Repository landing page + description: + - Repository landing page providing access to the per-experiment CSV/JSON data files. + licence: + id: https://creativecommons.org/licenses/by/4.0/ + title: CC BY 4.0 +other_identifier: +- notation: https://hdl.handle.net/21.11165/4cat/2d6m-exeb +- notation: doi:10.1021/acs.iecr.1c00389 + description: Related publication DOI +was_generated_by: +- id: coremeta4cat:CHAR_2d6m-exeb_outlet_gas_analysis + title: + - Outlet gas composition analysis (all 16 runs) + description: + - 'Steady-state outlet gas composition analysis used to determine CO/CO2 conversion for all 16 catalyst + screening runs (CO methanation: Exp2, 3, 4, 12; CO2 methanation: Exp7, 8, 9, 13, 14, 15, 16, 17; mixed + CO/CO2 methanation: Exp11, 18, 19, 20). Dataset files do not name a specific instrument model; gas + chromatography is the standard analytical method for this reaction class and is assumed here.' + rdf_type: + id: VOC4CAT:0000130 + title: gas chromatography + carried_out_by: + - id: coremeta4cat:DEV_2d6m-exeb_GC + title: gas chromatograph + description: Instrument model not specified in the source dataset files. + evaluated_entity: + - id: coremeta4cat:CAT_2d6m-exeb_all + title: 16 supported Ni catalyst samples (this screening series) + description: 'Supported Ni catalysts on Al2O3, SiO2, ZrO2, TiO2, and MgAl2O4, Ni loading 5-40.8 wt%, + screened for CO methanation, CO2 methanation, and mixed CO/CO2 methanation (see the corresponding + CatalyticReaction entries for per-catalyst detail: used_catalyst in coremeta4cat:REAC_2d6m-exeb_CO_methanation, + coremeta4cat:REAC_2d6m-exeb_CO2_methanation, coremeta4cat:REAC_2d6m-exeb_mixed_methanation).' + realized_plan: + id: coremeta4cat:CHAR_2d6m-exeb_GC_method + title: Outlet gas GC method + description: Analytical protocol for determining reactant/product mole fractions from the reactor + outlet stream. Method parameters not specified in the source dataset files. + other_identifier: + - notation: doi:10.1021/acs.iecr.1c00389 + description: Related publication DOI + activity_designator: Characterization +is_about_activity: +- id: coremeta4cat:REAC_2d6m-exeb_CO_methanation + reaction_name: + - CO methanation + title: + - CO methanation catalyst screening (4 Ni catalysts) + description: + - 'Catalytic CO methanation (CO + 3H2 -> CH4 + H2O) screened over 4 supported Ni catalysts (Al2O3, SiO2, + ZrO2 supports; 10-20 wt% Ni) in cylindrical isothermal fixed-bed reactors (radius 3-10 mm across runs). + Steady-state CO conversion measured as a function of superficial velocity and temperature. Source + runs: Exp2, Exp3, Exp4, Exp12 (Ni/Al2O3 x2, Ni/SiO2, Ni/ZrO2). Total pressure ~100-101.3 kPa in all + four runs.' + rdf_type: + id: VOC4CAT:0007010 + title: CO methanation + catalyst_type: + - heterogeneous_catalysis + catalyst_form: + - supported + used_catalyst: + - id: coremeta4cat:CAT_2d6m-exeb_Exp2 + title: 20 wt% Ni/Al2O3 (Exp2) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 20.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp2_metadata.json: catalyst.metal_loading)' + - value: 630.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp2_metadata.json: catalyst.particles_mean_diameter)' + - value: 14.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp2_metadata.json: catalyst.specific_surface_area)' + - value: 0.5 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp2_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp3 + title: 20 wt% Ni/Al2O3 (Exp3) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 20.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp3_metadata.json: catalyst.metal_loading)' + - value: 375.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp3_metadata.json: catalyst.particles_mean_diameter)' + - value: 3.56 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp3_metadata.json: catalyst.specific_surface_area)' + - value: 0.2 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp3_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp4 + title: 10 wt% Ni/SiO2 (Exp4) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 10.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp4_metadata.json: catalyst.metal_loading)' + - value: 265.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp4_metadata.json: catalyst.particles_mean_diameter)' + - value: 2.81 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp4_metadata.json: catalyst.specific_surface_area)' + - value: 0.05 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp4_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp12 + title: 10 wt% Ni/ZrO2 (Exp12) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 10.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp12_metadata.json: catalyst.metal_loading)' + - value: 265.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp12_metadata.json: catalyst.particles_mean_diameter)' + - value: 3.06 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp12_metadata.json: catalyst.specific_surface_area)' + - value: 0.05 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp12_metadata.json: catalyst.mass)' + used_reactant: + - id: coremeta4cat:REAC_2d6m-exeb_CO + title: carbon monoxide + rdf_type: + id: CHEBI:17245 + title: carbon monoxide + has_concentration: + - value: 1.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MoleFraction + unit: PERCENT + description: Feed CO mole fraction ranges 1-25% across the 4 runs (Exp2, Exp3, Exp4, Exp12 inlet.mole_fractions.CO) + - id: coremeta4cat:REAC_2d6m-exeb_H2 + title: hydrogen + rdf_type: + id: CHEBI:18276 + title: molecular hydrogen + has_concentration: + - value: 50.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MoleFraction + unit: PERCENT + description: Feed H2 mole fraction ranges 50-75% across the 4 runs + used_reactor: + - id: coremeta4cat:REAC_2d6m-exeb_CO_reactor + title: isothermal cylindrical fixed-bed reactors + description: Cylindrical fixed-bed reactors, radius 3-10 mm across the 4 runs, isothermal operation. + reactor_temperature_range: + - min_value: 423.0 + max_value: 874.6 + has_quantity_type: http://qudt.org/vocab/quantitykind/Temperature + unit: https://qudt.org/vocab/unit/K + description: Overall temperature range explored across all 4 CO methanation runs + experiment_pressure: + - value: 100.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/KiloPA + description: ~100-101.3 kPa in all 4 runs + product_identification_method: + - id: coremeta4cat:REAC_2d6m-exeb_CO_product_id + title: CO conversion from outlet gas composition + description: CO conversion (dimensionless, 0-1) calculated from inlet and outlet CO concentrations. + Specific analytical instrument not stated in dataset files; gas chromatography is the standard method + for this reaction. + other_identifier: + - notation: doi:10.1021/acs.iecr.1c00389 + description: Related publication DOI +- id: coremeta4cat:REAC_2d6m-exeb_CO2_methanation + reaction_name: + - CO2 methanation + title: + - CO2 methanation catalyst screening (8 Ni catalysts) + description: + - 'Catalytic CO2 methanation (CO2 + 4H2 -> CH4 + 2H2O) screened over 8 supported Ni catalysts (Al2O3, + SiO2, ZrO2, MgAl2O4 supports; 10-40.8 wt% Ni) in cylindrical isothermal fixed-bed reactors (radius + 3-10 mm across runs). Steady-state CO2 conversion measured as a function of superficial velocity and + temperature. Source runs: Exp7, Exp8, Exp9, Exp13, Exp14, Exp15, Exp16, Exp17 (Ni/Al2O3 x4, Ni/MgAl2O4 + x2, Ni/ZrO2, Ni/SiO2). Total pressure ~100-101.3 kPa in all runs except Exp9 (800 kPa, an outlier + within this series).' + rdf_type: + id: VOC4CAT:0007011 + title: CO2 methanation + catalyst_type: + - heterogeneous_catalysis + catalyst_form: + - supported + used_catalyst: + - id: coremeta4cat:CAT_2d6m-exeb_Exp7 + title: 10 wt% Ni/MgAl2O4 (Exp7) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 10.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp7_metadata.json: catalyst.metal_loading)' + - value: 335.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp7_metadata.json: catalyst.particles_mean_diameter)' + - value: 4.55 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp7_metadata.json: catalyst.specific_surface_area)' + - value: 1.2 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp7_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp8 + title: 20 wt% Ni/Al2O3 (Exp8) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 20.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp8_metadata.json: catalyst.metal_loading)' + - value: 375.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp8_metadata.json: catalyst.particles_mean_diameter)' + - value: 3.56 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp8_metadata.json: catalyst.specific_surface_area)' + - value: 0.2 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp8_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp9 + title: 40.8 wt% Ni/Al2O3 (Exp9) + description: High Ni-loading Al2O3-supported catalyst; this run also used an elevated feed pressure + of 800 kPa, an outlier relative to the other runs in this series (~100-101.3 kPa). + has_physical_state: SOLID + has_quantitative_attribute: + - value: 40.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp9_metadata.json: catalyst.metal_loading)' + - value: 175.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp9_metadata.json: catalyst.particles_mean_diameter)' + - value: 8.28 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp9_metadata.json: catalyst.specific_surface_area)' + - value: 0.025 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp9_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp13 + title: 10 wt% Ni/ZrO2 (Exp13) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 10.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp13_metadata.json: catalyst.metal_loading)' + - value: 265.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp13_metadata.json: catalyst.particles_mean_diameter)' + - value: 3.06 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp13_metadata.json: catalyst.specific_surface_area)' + - value: 0.05 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp13_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp14 + title: 10 wt% Ni/SiO2 (Exp14) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 10.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp14_metadata.json: catalyst.metal_loading)' + - value: 265.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp14_metadata.json: catalyst.particles_mean_diameter)' + - value: 2.81 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp14_metadata.json: catalyst.specific_surface_area)' + - value: 0.05 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp14_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp15 + title: 20 wt% Ni/Al2O3 (Exp15) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 20.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp15_metadata.json: catalyst.metal_loading)' + - value: 750.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp15_metadata.json: catalyst.particles_mean_diameter)' + - value: 1.76 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp15_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp16 + title: 15 wt% Ni/Al2O3 (Exp16) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 15.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp16_metadata.json: catalyst.metal_loading)' + - value: 630.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp16_metadata.json: catalyst.particles_mean_diameter)' + - value: 8.72 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp16_metadata.json: catalyst.specific_surface_area)' + - value: 0.3 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp16_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp17 + title: 10 wt% Ni/MgAl2O4 (Exp17) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 10.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp17_metadata.json: catalyst.metal_loading)' + - value: 335.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp17_metadata.json: catalyst.particles_mean_diameter)' + - value: 3.84 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp17_metadata.json: catalyst.specific_surface_area)' + - value: 1.2 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp17_metadata.json: catalyst.mass)' + used_reactant: + - id: coremeta4cat:REAC_2d6m-exeb_CO2 + title: carbon dioxide + rdf_type: + id: CHEBI:16526 + title: carbon dioxide + has_concentration: + - value: 1.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MoleFraction + unit: PERCENT + description: Feed CO2 mole fraction ranges 1-22.2% across the 8 runs (inlet.mole_fractions.CO2) + - id: coremeta4cat:REAC_2d6m-exeb_H2_CO2series + title: hydrogen + rdf_type: + id: CHEBI:18276 + title: molecular hydrogen + has_concentration: + - value: 5.1 + has_quantity_type: http://qudt.org/vocab/quantitykind/MoleFraction + unit: PERCENT + description: Feed H2 mole fraction ranges 5.1-77.8% across the 8 runs + used_reactor: + - id: coremeta4cat:REAC_2d6m-exeb_CO2_reactor + title: isothermal cylindrical fixed-bed reactors + description: Cylindrical fixed-bed reactors, radius 3-10 mm across the 8 runs, isothermal operation. + reactor_temperature_range: + - min_value: 405.1 + max_value: 1114.4 + has_quantity_type: http://qudt.org/vocab/quantitykind/Temperature + unit: https://qudt.org/vocab/unit/K + description: Overall temperature range explored across all 8 CO2 methanation runs + experiment_pressure: + - value: 100.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/KiloPA + description: ~100-101.3 kPa in 7 of the 8 runs; Exp9 used 800 kPa (see used_catalyst description) + product_identification_method: + - id: coremeta4cat:REAC_2d6m-exeb_CO2_product_id + title: CO2 conversion from outlet gas composition + description: CO2 conversion (dimensionless, 0-1) calculated from inlet and outlet CO2 concentrations. + Specific analytical instrument not stated in dataset files; gas chromatography is the standard method + for this reaction. + other_identifier: + - notation: doi:10.1021/acs.iecr.1c00389 + description: Related publication DOI +- id: coremeta4cat:REAC_2d6m-exeb_mixed_methanation + reaction_name: + - CO/CO2 co-methanation + title: + - Mixed CO+CO2 methanation catalyst screening (4 Ni catalysts) + description: + - 'Catalytic co-methanation of a mixed CO/CO2 feed (CO + 3H2 -> CH4 + H2O; CO2 + 4H2 -> CH4 + 2H2O) + screened over 4 supported Ni catalysts (ZrO2, SiO2, TiO2, Al2O3 supports; 5 wt% Ni in all 4) in cylindrical + isothermal fixed-bed reactors (radius 3.77-6.5 mm across runs). Steady-state CO and CO2 conversion + measured as a function of superficial velocity and temperature. Source runs: Exp11, Exp18, Exp19, + Exp20. Total pressure ~100 kPa in all four runs.' + rdf_type: + id: VOC4CAT:0007010 + title: CO methanation + catalyst_type: + - heterogeneous_catalysis + catalyst_form: + - supported + used_catalyst: + - id: coremeta4cat:CAT_2d6m-exeb_Exp11 + title: 5 wt% Ni/ZrO2 (Exp11) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 5.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp11_metadata.json: catalyst.metal_loading)' + - value: 220.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp11_metadata.json: catalyst.particles_mean_diameter)' + - value: 1.826 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp11_metadata.json: catalyst.specific_surface_area)' + - value: 0.15 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp11_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp18 + title: 5 wt% Ni/SiO2 (Exp18) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 5.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp18_metadata.json: catalyst.metal_loading)' + - value: 3000.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp18_metadata.json: catalyst.particles_mean_diameter)' + - value: 1.1 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp18_metadata.json: catalyst.specific_surface_area)' + - value: 0.18 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp18_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp19 + title: 5 wt% Ni/TiO2 (Exp19) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 5.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp19_metadata.json: catalyst.metal_loading)' + - value: 630.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp19_metadata.json: catalyst.particles_mean_diameter)' + - value: 14.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp19_metadata.json: catalyst.specific_surface_area)' + - value: 0.15 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp19_metadata.json: catalyst.mass)' + - id: coremeta4cat:CAT_2d6m-exeb_Exp20 + title: 5 wt% Ni/Al2O3 (Exp20) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 5.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: 'Ni loading (Exp20_metadata.json: catalyst.metal_loading)' + - value: 220.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Length + unit: MicroM + description: 'Particle diameter (Exp20_metadata.json: catalyst.particles_mean_diameter)' + - value: 0.897 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: 'BET specific surface area (Exp20_metadata.json: catalyst.specific_surface_area)' + - value: 0.15 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: 'Catalyst bed mass (Exp20_metadata.json: catalyst.mass)' + used_reactant: + - id: coremeta4cat:REAC_2d6m-exeb_CO_mixed + title: carbon monoxide + rdf_type: + id: CHEBI:17245 + title: carbon monoxide + has_concentration: + - value: 0.6 + has_quantity_type: http://qudt.org/vocab/quantitykind/MoleFraction + unit: PERCENT + description: Feed CO mole fraction; 0.6% in 3 of 4 runs, 6% in Exp18 + - id: coremeta4cat:REAC_2d6m-exeb_CO2_mixed + title: carbon dioxide + rdf_type: + id: CHEBI:16526 + title: carbon dioxide + has_concentration: + - value: 6.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MoleFraction + unit: PERCENT + description: Feed CO2 mole fraction ranges 6-17% across the 4 runs + - id: coremeta4cat:REAC_2d6m-exeb_H2_mixed + title: hydrogen + rdf_type: + id: CHEBI:18276 + title: molecular hydrogen + has_concentration: + - value: 57.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MoleFraction + unit: PERCENT + description: Feed H2 mole fraction ranges 57-88% across the 4 runs + used_reactor: + - id: coremeta4cat:REAC_2d6m-exeb_mixed_reactor + title: isothermal cylindrical fixed-bed reactors + description: Cylindrical fixed-bed reactors, radius 3.77-6.5 mm across the 4 runs, isothermal operation. + reactor_temperature_range: + - min_value: 428.3 + max_value: 672.2 + has_quantity_type: http://qudt.org/vocab/quantitykind/Temperature + unit: https://qudt.org/vocab/unit/K + description: Overall temperature range explored across all 4 mixed CO/CO2 methanation runs + experiment_pressure: + - value: 100.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/KiloPA + description: ~100 kPa in all 4 runs + product_identification_method: + - id: coremeta4cat:REAC_2d6m-exeb_mixed_product_id + title: CO and CO2 conversion from outlet gas composition + description: CO and CO2 conversion (dimensionless, 0-1) calculated from inlet and outlet gas concentrations. + Specific analytical instrument not stated in dataset files; gas chromatography is the standard method + for this reaction. + other_identifier: + - notation: doi:10.1021/acs.iecr.1c00389 + description: Related publication DOI +is_about_entity: +- id: coremeta4cat:CAT_2d6m-exeb_all + title: 16 supported Ni catalyst samples (this screening series) + description: Supported Ni catalysts on Al2O3, SiO2, ZrO2, TiO2, and MgAl2O4, Ni loading 5-40.8 wt%. + See used_catalyst under is_about_activity above for per-sample detail (particle size, BET surface + area, catalyst mass). diff --git a/tests/data/valid/CatalysisDataset-32x1-99x6.yaml b/tests/data/valid/CatalysisDataset-32x1-99x6.yaml new file mode 100644 index 000000000..79734b29e --- /dev/null +++ b/tests/data/valid/CatalysisDataset-32x1-99x6.yaml @@ -0,0 +1,784 @@ +--- +id: hdl:21.11165/4cat/32x1-99x6 +title: +- 'Support Engineering with Phosphorus: Tuning the Palladium-Catalyzed Selective Hydrogenation of α,β-Unsaturated + Aldehydes' +description: +- Catalyst characterization (BET, ICP-AES, PXRD, DRIFT, IR) and catalytic testing data for a series of + Pd/P catalysts (nominal 2 wt% Pd, 0-5 wt% P) on Al2O3 and SiO2 supports, investigating how phosphorus + modification of the support tunes the Pd-catalyzed selective hydrogenation of cinnamyl alcohol (CAL) + and citral. Catalytic performance was screened via Central Composite Design (Al2O3/CAL, 27 runs) and + full-factorial designs (SiO2/CAL, Al2O3/citral, SiO2/citral; 9 runs each) varying temperature (30-70 + C), pressure (1-9 bar), phosphorus loading, and reaction time. TEM is mentioned in the original repository + description but no TEM data files are included in the deposited dataset. +rdf_type: + id: VOC4CAT:0007001 + title: heterogeneous catalysis +keyword: +- Chemistry +- Engineering +- Catalysis +- Heterogeneous catalysis +- Palladium catalyst +- Phosphorus modification +- Selective hydrogenation +- Cinnamyl alcohol +- Citral +creator: +- name: + - Rang, Fabian +- name: + - Hanf, Schirin +- name: + - Holtermann, Birger +- name: + - Eggeler, Yolita +- name: + - Barth, Simon +- name: + - Grunwaldt, Jan-Dierk +publisher: + name: + - NFDI4Cat Central Data Repository +release_date: '2026-03-11' +dataset_distribution: +- access_URL: + - id: https://hdl.handle.net/21.11165/4cat/32x1-99x6 + title: Repository landing page + description: + - Repository landing page providing access to the characterization and catalytic testing data files. + licence: + id: https://creativecommons.org/licenses/by/4.0/ + title: CC BY 4.0 +other_identifier: +- notation: https://hdl.handle.net/21.11165/4cat/32x1-99x6 +- notation: doi:10.1021/ac0702802 + description: Methodology reference cited for the DRIFT pseudo-absorbance conversion (not this dataset's + own publication) +was_generated_by: +- id: coremeta4cat:CHAR_32x1-99x6_BET + title: + - BET surface area analysis (10 catalysts) + description: + - Brunauer-Emmett-Teller specific surface area determination for all 10 Pd/P-Al2O3 and Pd/P-SiO2 catalysts + (0-5 wt% nominal P loading). Surface area ranged 72-126 m2/g, generally decreasing with increasing + P loading (bet_results.txt). + rdf_type: + id: ENM:0000064 + title: BET analysis + carried_out_by: + - id: coremeta4cat:DEV_32x1-99x6_BET + title: BET surface area analyser + description: Instrument model not specified in the source dataset files. + evaluated_entity: + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_0P + title: Pd/Al2O3 + description: Pd on Al2O3, P-free reference + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_1P + title: Pd/1P/Al2O3 + description: Pd on Al2O3, nominal 1 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_2P + title: Pd/2P/Al2O3 + description: Pd on Al2O3, nominal 2 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_3P + title: Pd/3P/Al2O3 + description: Pd on Al2O3, nominal 3 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_4P + title: Pd/4P/Al2O3 + description: Pd on Al2O3, nominal 4 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_5P + title: Pd/5P/Al2O3 + description: Pd on Al2O3, nominal 5 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_0P + title: Pd/SiO2 + description: Pd on SiO2, P-free reference + - id: coremeta4cat:CAT_32x1-99x6_SiO2_1P + title: Pd/1P/SiO2 + description: Pd on SiO2, nominal 1 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_3P + title: Pd/3P/SiO2 + description: Pd on SiO2, nominal 3 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_5P + title: Pd/5P/SiO2 + description: Pd on SiO2, nominal 5 wt% P + realized_plan: + id: coremeta4cat:CHAR_32x1-99x6_BET_method + title: N2 physisorption BET method + description: Standard N2 physisorption at liquid-nitrogen temperature (-196C), Brunauer-Emmett-Teller + analysis. Adsorbate gas and measurement temperature not explicitly stated in bet_results.txt; assumed + standard BET convention. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/32x1-99x6 + activity_designator: Characterization +- id: coremeta4cat:CHAR_32x1-99x6_DRIFT + title: + - DRIFT CO-adsorption spectroscopy (4 catalysts) + description: + - Diffuse reflectance infrared Fourier transform spectroscopy of CO adsorbed at room temperature, for + 4 catalysts (Pd/Al2O3, Pd/3P/Al2O3, Pd/SiO2, Pd/3P/SiO2). Spectra converted to pseudo-absorbance (log(1/reflectance)) + per Anal. Chem. 2007, 79, 10, 3912-3918 (DOI 10.1021/ac0702802) and baseline-corrected (info_drifts.txt); + OriginPro 2023 used for analysis/plotting. + rdf_type: + id: CHMO:0000645 + title: diffuse reflectance infrared Fourier transform spectroscopy + carried_out_by: + - id: coremeta4cat:DEV_32x1-99x6_DRIFT + title: FTIR spectrometer with DRIFT accessory + description: Instrument model not specified in the source dataset files. + evaluated_entity: + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_0P + title: Pd/Al2O3 + description: Pd on Al2O3, P-free reference + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_3P + title: Pd/3P/Al2O3 + description: Pd on Al2O3, nominal 3 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_0P + title: Pd/SiO2 + description: Pd on SiO2, P-free reference + - id: coremeta4cat:CAT_32x1-99x6_SiO2_3P + title: Pd/3P/SiO2 + description: Pd on SiO2, nominal 3 wt% P + realized_plan: + id: coremeta4cat:CHAR_32x1-99x6_DRIFT_method + title: CO-adsorption DRIFT method + description: CO adsorption at room temperature; pseudo-absorbance = log(1/reflectance). + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/32x1-99x6 + activity_designator: Characterization +- id: coremeta4cat:CHAR_32x1-99x6_ICPAES + title: + - ICP-AES elemental composition analysis (8 catalysts) + description: + - Inductively coupled plasma atomic emission spectroscopy for bulk Pd and P content of the 8 P-modified + catalysts (measured Pd 1.8-2.0 wt%, P 0.8-4.8 wt%, deviating somewhat from nominal loadings; icp_results.txt). + P-free reference catalysts (Pd/Al2O3, Pd/SiO2) were not analysed by ICP-AES. + rdf_type: + id: CHMO:0000267 + title: inductively coupled plasma atomic emission spectroscopy + carried_out_by: + - id: coremeta4cat:DEV_32x1-99x6_ICPAES + title: ICP-AES spectrometer + description: Instrument model not specified in the source dataset files. + evaluated_entity: + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_1P + title: Pd/1P/Al2O3 + description: Pd on Al2O3, nominal 1 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_2P + title: Pd/2P/Al2O3 + description: Pd on Al2O3, nominal 2 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_3P + title: Pd/3P/Al2O3 + description: Pd on Al2O3, nominal 3 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_4P + title: Pd/4P/Al2O3 + description: Pd on Al2O3, nominal 4 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_5P + title: Pd/5P/Al2O3 + description: Pd on Al2O3, nominal 5 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_1P + title: Pd/1P/SiO2 + description: Pd on SiO2, nominal 1 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_3P + title: Pd/3P/SiO2 + description: Pd on SiO2, nominal 3 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_5P + title: Pd/5P/SiO2 + description: Pd on SiO2, nominal 5 wt% P + realized_plan: + id: coremeta4cat:CHAR_32x1-99x6_ICPAES_method + title: ICP-AES elemental analysis method + description: 'Elements analyzed: Pd, P. Results reported in wt% (icp_results.txt).' + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/32x1-99x6 + activity_designator: Characterization +- id: coremeta4cat:CHAR_32x1-99x6_IR + title: + - Infrared spectroscopy (6 catalysts) + description: + - Infrared spectroscopy of the 6 P-modified catalysts (1, 3, 5 wt% nominal P on Al2O3 and SiO2). Wavenumber + range ~400-3599 cm-1, 3319 data points per file, pseudo-absorbance convention consistent with the + DRIFT data. + rdf_type: + id: CHMO:0000630 + title: infrared spectroscopy + carried_out_by: + - id: coremeta4cat:DEV_32x1-99x6_IR + title: FTIR spectrometer + description: Instrument model not specified in the source dataset files. + evaluated_entity: + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_1P + title: Pd/1P/Al2O3 + description: Pd on Al2O3, nominal 1 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_3P + title: Pd/3P/Al2O3 + description: Pd on Al2O3, nominal 3 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_5P + title: Pd/5P/Al2O3 + description: Pd on Al2O3, nominal 5 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_1P + title: Pd/1P/SiO2 + description: Pd on SiO2, nominal 1 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_3P + title: Pd/3P/SiO2 + description: Pd on SiO2, nominal 3 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_5P + title: Pd/5P/SiO2 + description: Pd on SiO2, nominal 5 wt% P + realized_plan: + id: coremeta4cat:CHAR_32x1-99x6_IR_method + title: Infrared spectroscopy method + description: Wavenumber range ~400-3599 cm-1; pseudo-absorbance units. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/32x1-99x6 + activity_designator: Characterization +- id: coremeta4cat:CHAR_32x1-99x6_PXRD + title: + - Powder XRD phase analysis (10 catalysts) + description: + - Powder X-ray diffraction for phase identification of all 10 Pd/P-Al2O3 and Pd/P-SiO2 catalysts, plus + a P/SiO2 support-only reference sample without Pd (file PXRD_1PSiO2.xy). Two-theta range ~2-92 degrees, + step size 0.015 degrees (most files); two files (nominal 5 wt% P samples) cover a shorter range ~2-63.5 + degrees. + rdf_type: + id: CHMO:0000158 + title: powder X-ray diffraction + carried_out_by: + - id: coremeta4cat:DEV_32x1-99x6_PXRD + title: X-ray diffractometer + description: Instrument model not specified in the source dataset files. + evaluated_entity: + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_0P + title: Pd/Al2O3 + description: Pd on Al2O3, P-free reference + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_1P + title: Pd/1P/Al2O3 + description: Pd on Al2O3, nominal 1 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_2P + title: Pd/2P/Al2O3 + description: Pd on Al2O3, nominal 2 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_3P + title: Pd/3P/Al2O3 + description: Pd on Al2O3, nominal 3 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_4P + title: Pd/4P/Al2O3 + description: Pd on Al2O3, nominal 4 wt% P + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_5P + title: Pd/5P/Al2O3 + description: Pd on Al2O3, nominal 5 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_0P + title: Pd/SiO2 + description: Pd on SiO2, P-free reference + - id: coremeta4cat:CAT_32x1-99x6_SiO2_1P + title: Pd/1P/SiO2 + description: Pd on SiO2, nominal 1 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_3P + title: Pd/3P/SiO2 + description: Pd on SiO2, nominal 3 wt% P + - id: coremeta4cat:CAT_32x1-99x6_SiO2_5P + title: Pd/5P/SiO2 + description: Pd on SiO2, nominal 5 wt% P + realized_plan: + id: coremeta4cat:CHAR_32x1-99x6_PXRD_method + title: Powder XRD measurement method + description: Two-theta scan, ~2-92 degrees, step size 0.015 degrees. One file (PXRD_1PSiO2.xy) is + a Pd-free P/SiO2 support reference; one file (PXRD_Pd5Al2O3.xy) is missing the 'P' in its name but + is interpreted as the nominal 5 wt% P/Al2O3 sample based on the file series context (matches ICP + sample FR507). + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/32x1-99x6 + activity_designator: Characterization +is_about_activity: +- id: coremeta4cat:REAC_32x1-99x6_CAL_Al2O3 + reaction_name: + - selective hydrogenation of cinnamyl alcohol + title: + - Selective hydrogenation of cinnamyl alcohol over Pd-P/Al2O3 catalysts + description: + - Selective hydrogenation of cinnamyl alcohol (CAL) over 6 Pd/P/Al2O3 catalysts (P loading 0-5 wt%, + ~2 wt% Pd) in a Central Composite Design (27 runs) exploring temperature, pressure, phosphorus loading, + and time. An initial fixed-condition screening (50C/5bar/30min, hot-filtration leaching test) gave + CAL conversion/HCAL yield of 32/30% (Pd/Al2O3) and 45/42% (Pd/3P/Al2O3). Conversion ranged 6-96%, + yield 6-90% across the 27-run design (catalytic_data.xlsx, 'Pd-XPAl2O3_CCD_CAL'). + rdf_type: + id: VOC4CAT:0000260 + title: hydrogenation + catalyst_type: + - heterogeneous_catalysis + catalyst_form: + - supported + used_catalyst: + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_0P + title: Pd/Al2O3 + description: Pd on Al2O3 support, unmodified (P-free) reference catalyst + has_physical_state: SOLID + has_quantitative_attribute: + - value: 119.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_1P + title: Pd/1P/Al2O3 (nominal 1 wt% P) + description: Pd on Al2O3 support, nominal 1 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 1.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 0.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 118.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_2P + title: Pd/2P/Al2O3 (nominal 2 wt% P) + description: Pd on Al2O3 support, nominal 2 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 2.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 2.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 116.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_3P + title: Pd/3P/Al2O3 (nominal 3 wt% P) + description: Pd on Al2O3 support, nominal 3 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 1.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 2.5 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 105.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_4P + title: Pd/4P/Al2O3 (nominal 4 wt% P) + description: Pd on Al2O3 support, nominal 4 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 2.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 3.7 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 112.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_5P + title: Pd/5P/Al2O3 (nominal 5 wt% P) + description: Pd on Al2O3 support, nominal 5 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 1.9 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 4.6 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 108.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + used_reactant: + - id: coremeta4cat:REAC_32x1-99x6_CAL_Al2O3_substrate + title: cinnamyl alcohol + rdf_type: + id: CHEBI:15554 + title: cinnamyl alcohol + - id: coremeta4cat:REAC_32x1-99x6_CAL_Al2O3_H2 + title: hydrogen + rdf_type: + id: CHEBI:18276 + title: molecular hydrogen + used_reactor: + - id: coremeta4cat:REAC_32x1-99x6_CAL_Al2O3_reactor + title: batch pressurized reactor + description: Batch pressurised reactor (autoclave or similar sealed vessel), inferred from the 1-9 + bar working pressure range and hot-filtration leaching test noted in catalytic_data.xlsx. Specific + reactor model not stated in the source dataset files. + reactor_temperature_range: + - min_value: 303.15 + max_value: 343.15 + has_quantity_type: http://qudt.org/vocab/quantitykind/Temperature + unit: https://qudt.org/vocab/unit/K + description: Temperature range explored in the design of experiments (catalytic_data.xlsx) + experiment_pressure: + - value: 1.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Minimum pressure in the design space + - value: 9.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Maximum pressure in the design space + product_identification_method: + - id: coremeta4cat:REAC_32x1-99x6_CAL_Al2O3_product_id + title: Conversion/yield quantification + description: Substrate conversion and product yield (%) reported with standard deviations in catalytic_data.xlsx. + Specific analytical instrument not stated in the source dataset files; GC is the standard method + for this reaction class. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/32x1-99x6 +- id: coremeta4cat:REAC_32x1-99x6_CAL_SiO2 + reaction_name: + - selective hydrogenation of cinnamyl alcohol + title: + - Selective hydrogenation of cinnamyl alcohol over Pd-P/SiO2 catalysts + description: + - Selective hydrogenation of cinnamyl alcohol (CAL) over 4 Pd/P/SiO2 catalysts (P loading 0-5 wt%, ~2 + wt% Pd) in a full factorial design (9 runs) exploring temperature, pressure, phosphorus loading, and + time. An initial fixed-condition screening (50C/5bar/30min, hot-filtration leaching test) gave CAL + conversion/HCAL yield of 23/22% (Pd/SiO2) and 78/40% (Pd/3P/SiO2). Conversion ranged 12-100%, yield + 9-56% across the 9-run design (catalytic_data.xlsx, 'Pd-XPSiO2_FF_CAL'). + rdf_type: + id: VOC4CAT:0000260 + title: hydrogenation + catalyst_type: + - heterogeneous_catalysis + catalyst_form: + - supported + used_catalyst: + - id: coremeta4cat:CAT_32x1-99x6_SiO2_0P + title: Pd/SiO2 + description: Pd on SiO2 support, unmodified (P-free) reference catalyst + has_physical_state: SOLID + has_quantitative_attribute: + - value: 126.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_SiO2_1P + title: Pd/1P/SiO2 (nominal 1 wt% P) + description: Pd on SiO2 support, nominal 1 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 2.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 1.1 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 118.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_SiO2_3P + title: Pd/3P/SiO2 (nominal 3 wt% P) + description: Pd on SiO2 support, nominal 3 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 1.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 2.6 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 98.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_SiO2_5P + title: Pd/5P/SiO2 (nominal 5 wt% P) + description: Pd on SiO2 support, nominal 5 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 2.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 4.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 72.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + used_reactant: + - id: coremeta4cat:REAC_32x1-99x6_CAL_SiO2_substrate + title: cinnamyl alcohol + rdf_type: + id: CHEBI:15554 + title: cinnamyl alcohol + - id: coremeta4cat:REAC_32x1-99x6_CAL_SiO2_H2 + title: hydrogen + rdf_type: + id: CHEBI:18276 + title: molecular hydrogen + used_reactor: + - id: coremeta4cat:REAC_32x1-99x6_CAL_SiO2_reactor + title: batch pressurized reactor + description: Batch pressurised reactor (autoclave or similar sealed vessel), inferred from the 1-9 + bar working pressure range and hot-filtration leaching test noted in catalytic_data.xlsx. Specific + reactor model not stated in the source dataset files. + reactor_temperature_range: + - min_value: 303.15 + max_value: 343.15 + has_quantity_type: http://qudt.org/vocab/quantitykind/Temperature + unit: https://qudt.org/vocab/unit/K + description: Temperature range explored in the design of experiments (catalytic_data.xlsx) + experiment_pressure: + - value: 1.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Minimum pressure in the design space + - value: 9.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Maximum pressure in the design space + product_identification_method: + - id: coremeta4cat:REAC_32x1-99x6_CAL_SiO2_product_id + title: Conversion/yield quantification + description: Substrate conversion and product yield (%) reported with standard deviations in catalytic_data.xlsx. + Specific analytical instrument not stated in the source dataset files; GC is the standard method + for this reaction class. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/32x1-99x6 +- id: coremeta4cat:REAC_32x1-99x6_Citral_Al2O3 + reaction_name: + - selective hydrogenation of citral + title: + - Selective hydrogenation of citral over Pd-P/Al2O3 catalysts + description: + - Selective hydrogenation of citral over 3 Pd/P/Al2O3 catalysts (1, 3, 5 wt% nominal P loading, ~2 wt% + Pd) in a full factorial design (9 runs) exploring temperature, pressure, phosphorus loading, and time. + Conversion ranged 15-85%, yield 15-65% across the 9-run design (catalytic_data.xlsx, 'Pd-XPAl2O3_FF_Citral'). + rdf_type: + id: VOC4CAT:0000260 + title: hydrogenation + catalyst_type: + - heterogeneous_catalysis + catalyst_form: + - supported + used_catalyst: + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_1P + title: Pd/1P/Al2O3 (nominal 1 wt% P) + description: Pd on Al2O3 support, nominal 1 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 1.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 0.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 118.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_3P + title: Pd/3P/Al2O3 (nominal 3 wt% P) + description: Pd on Al2O3 support, nominal 3 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 1.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 2.5 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 105.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_Al2O3_5P + title: Pd/5P/Al2O3 (nominal 5 wt% P) + description: Pd on Al2O3 support, nominal 5 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 1.9 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 4.6 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 108.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + used_reactant: + - id: coremeta4cat:REAC_32x1-99x6_Citral_Al2O3_substrate + title: citral + rdf_type: + id: CHEBI:29085 + title: citral + - id: coremeta4cat:REAC_32x1-99x6_Citral_Al2O3_H2 + title: hydrogen + rdf_type: + id: CHEBI:18276 + title: molecular hydrogen + used_reactor: + - id: coremeta4cat:REAC_32x1-99x6_Citral_Al2O3_reactor + title: batch pressurized reactor + description: Batch pressurised reactor (autoclave or similar sealed vessel), inferred from the 1-9 + bar working pressure range and hot-filtration leaching test noted in catalytic_data.xlsx. Specific + reactor model not stated in the source dataset files. + reactor_temperature_range: + - min_value: 303.15 + max_value: 343.15 + has_quantity_type: http://qudt.org/vocab/quantitykind/Temperature + unit: https://qudt.org/vocab/unit/K + description: Temperature range explored in the design of experiments (catalytic_data.xlsx) + experiment_pressure: + - value: 1.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Minimum pressure in the design space + - value: 9.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Maximum pressure in the design space + product_identification_method: + - id: coremeta4cat:REAC_32x1-99x6_Citral_Al2O3_product_id + title: Conversion/yield quantification + description: Substrate conversion and product yield (%) reported with standard deviations in catalytic_data.xlsx. + Specific analytical instrument not stated in the source dataset files; GC is the standard method + for this reaction class. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/32x1-99x6 +- id: coremeta4cat:REAC_32x1-99x6_Citral_SiO2 + reaction_name: + - selective hydrogenation of citral + title: + - Selective hydrogenation of citral over Pd-P/SiO2 catalysts + description: + - Selective hydrogenation of citral over 3 Pd/P/SiO2 catalysts (1, 3, 5 wt% nominal P loading, ~2 wt% + Pd) in a full factorial design (9 runs) exploring temperature, pressure, phosphorus loading, and time. + Conversion ranged 11-100%, yield 11-84% across the 9-run design (catalytic_data.xlsx, 'Pd-XPSiO2_FF_Citral'). + rdf_type: + id: VOC4CAT:0000260 + title: hydrogenation + catalyst_type: + - heterogeneous_catalysis + catalyst_form: + - supported + used_catalyst: + - id: coremeta4cat:CAT_32x1-99x6_SiO2_1P + title: Pd/1P/SiO2 (nominal 1 wt% P) + description: Pd on SiO2 support, nominal 1 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 2.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 1.1 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 118.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_SiO2_3P + title: Pd/3P/SiO2 (nominal 3 wt% P) + description: Pd on SiO2 support, nominal 3 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 1.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 2.6 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 98.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + - id: coremeta4cat:CAT_32x1-99x6_SiO2_5P + title: Pd/5P/SiO2 (nominal 5 wt% P) + description: Pd on SiO2 support, nominal 5 wt% P (phosphorus modifier) + has_physical_state: SOLID + has_quantitative_attribute: + - value: 2.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured Pd loading (icp_results.txt) + - value: 4.8 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: ICP-AES measured P loading (icp_results.txt) + - value: 72.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/SpecificArea + unit: M2-PER-GM + description: BET specific surface area (bet_results.txt) + used_reactant: + - id: coremeta4cat:REAC_32x1-99x6_Citral_SiO2_substrate + title: citral + rdf_type: + id: CHEBI:29085 + title: citral + - id: coremeta4cat:REAC_32x1-99x6_Citral_SiO2_H2 + title: hydrogen + rdf_type: + id: CHEBI:18276 + title: molecular hydrogen + used_reactor: + - id: coremeta4cat:REAC_32x1-99x6_Citral_SiO2_reactor + title: batch pressurized reactor + description: Batch pressurised reactor (autoclave or similar sealed vessel), inferred from the 1-9 + bar working pressure range and hot-filtration leaching test noted in catalytic_data.xlsx. Specific + reactor model not stated in the source dataset files. + reactor_temperature_range: + - min_value: 303.15 + max_value: 343.15 + has_quantity_type: http://qudt.org/vocab/quantitykind/Temperature + unit: https://qudt.org/vocab/unit/K + description: Temperature range explored in the design of experiments (catalytic_data.xlsx) + experiment_pressure: + - value: 1.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Minimum pressure in the design space + - value: 9.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Maximum pressure in the design space + product_identification_method: + - id: coremeta4cat:REAC_32x1-99x6_Citral_SiO2_product_id + title: Conversion/yield quantification + description: Substrate conversion and product yield (%) reported with standard deviations in catalytic_data.xlsx. + Specific analytical instrument not stated in the source dataset files; GC is the standard method + for this reaction class. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/32x1-99x6 +is_about_entity: +- id: coremeta4cat:CAT_32x1-99x6_all + title: 10 Pd/P catalyst samples (Al2O3 and SiO2 supports) + description: Pd catalysts (nominal 2 wt% Pd) with 0-5 wt% nominal phosphorus loading on Al2O3 (6 samples) + and SiO2 (4 samples) supports. See used_catalyst under is_about_activity and evaluated_entity under + was_generated_by above for per-sample detail (ICP-AES loading, BET surface area). diff --git a/tests/data/valid/CatalysisDataset-arp5-s69r.yaml b/tests/data/valid/CatalysisDataset-arp5-s69r.yaml new file mode 100644 index 000000000..1245e9488 --- /dev/null +++ b/tests/data/valid/CatalysisDataset-arp5-s69r.yaml @@ -0,0 +1,439 @@ +--- +id: hdl:21.11165/4cat/arp5-s69r +title: +- Carbonylation catalysis of aryl halides through active-site engineering +description: +- 'Catalyst characterization (PXRD, DRIFT, CO chemisorption, XPS, STEM) and catalytic testing data for + Pd3P/SiO2 (a phosphorus-modified palladium phosphide catalyst, internal code ARNE01) compared against + an unmodified Pd/SiO2 reference (ARNE02), for Pd-catalyzed carbonylation reactions of aryl iodides. + 31 batch reactor runs span three reaction types: alkoxycarbonylation (27 runs; mainly iodobenzene + + ethanol -> ethyl benzoate, exploring reaction time, base, temperature, and substrate/nucleophile scope), + phenoxycarbonylation (1 run, phenol nucleophile), and aminocarbonylation (3 runs, aniline nucleophile, + 100-140 C). PXRD additionally covers two further Pd3P/SiO2 loading variants (1 wt% and 10 wt% Pd), and + STEM additionally covers a recycled/spent Pd3P/SiO2 sample recovered after catalytic testing; STEM method + details are documented but no STEM image/data files are included in the deposited dataset.' +rdf_type: + id: VOC4CAT:0007001 + title: heterogeneous catalysis +keyword: +- Chemistry +- Catalysis +- Heterogeneous catalysis +- Palladium catalyst +- Palladium phosphide +- Carbonylation +- Active-site engineering +creator: +- name: + - Neyyathala, Arjun +- name: + - Jung, Felix +- name: + - Barth, Simon +- name: + - Feldmann, Claus +- name: + - Grunwaldt, Jan-Dierk +- name: + - Jevtovik, Ivana +- name: + - Schunk, Stephan A. +- name: + - Dolcet, Paolo +- name: + - Gross, Silvia +- name: + - Hanf, Schirin +publisher: + name: + - NFDI4Cat Central Data Repository +dataset_distribution: +- access_URL: + - id: https://hdl.handle.net/21.11165/4cat/arp5-s69r + title: Repository landing page + description: + - Repository landing page providing access to the characterization and catalytic testing data files. + licence: + id: https://creativecommons.org/licenses/by/4.0/ + title: CC BY 4.0 +other_identifier: +- notation: https://hdl.handle.net/21.11165/4cat/arp5-s69r +was_generated_by: +- id: coremeta4cat:CHAR_arp5-s69r_COChemisorption + title: + - CO chemisorption analysis (2 catalysts) + description: + - Pulse CO chemisorption at room temperature (25 C) for Pd3P/SiO2 and Pd/SiO2 (2 replicate runs each), + used to determine active surface Pd site density / dispersion by comparing CO uptake between the phosphide + and the unmodified reference catalyst. + carried_out_by: + - id: coremeta4cat:DEV_arp5-s69r_COChemisorption + title: Pulse chemisorption analyser + description: Instrument model not specified in the source dataset files. + evaluated_entity: + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt + title: Pd3P/SiO2 (5 wt% Pd, ARNE01) + description: See CatalyticReaction files for full detail. + - id: coremeta4cat:CAT_arp5-s69r_Pd_SiO2_5wt + title: Pd/SiO2 (5 wt% Pd, ARNE02) + description: See CatalyticReaction files for full detail. + realized_plan: + id: coremeta4cat:CHAR_arp5-s69r_COChemisorption_method + title: Pulse CO chemisorption method + description: CO pulses at room temperature; peak areas integrated to determine total CO uptake. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/arp5-s69r + activity_designator: Characterization +- id: coremeta4cat:CHAR_arp5-s69r_DRIFT + title: + - DRIFT CO-adsorption spectroscopy (2 catalysts, 2 temperatures) + description: + - 'Diffuse reflectance infrared Fourier transform spectroscopy of CO adsorbed on Pd3P/SiO2 and Pd/SiO2, + at 30 C and 100 C (4 spectra total). Atmosphere: 4000 ppm CO, balance Ar, 50 mL/min flow; Ar flush + between measurements. Sample: 50 mg, 100-200 micron sieve fraction, in a Harrick in-situ cell with + CaF2 windows.' + carried_out_by: + - id: coremeta4cat:DEV_arp5-s69r_DRIFT + title: VERTEX 70 FTIR spectrometer (Bruker) + description: VERTEX 70 FTIR spectrometer (Bruker) equipped with Praying Mantis diffuse reflection + optics (Harrick) and a liquid-nitrogen-cooled mercury cadmium telluride (MCT) detector. + evaluated_entity: + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt + title: Pd3P/SiO2 (5 wt% Pd, ARNE01) + description: See CatalyticReaction files for full detail. + - id: coremeta4cat:CAT_arp5-s69r_Pd_SiO2_5wt + title: Pd/SiO2 (5 wt% Pd, ARNE02) + description: See CatalyticReaction files for full detail. + realized_plan: + id: coremeta4cat:CHAR_arp5-s69r_DRIFT_method + title: CO-adsorption DRIFT method + description: Reflectance mode; scanner velocity 20 kHz; aperture 6 mm; MIR source, KBr beamsplitter. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/arp5-s69r + rdf_type: + id: CHMO:0000645 + title: diffuse reflectance infrared Fourier transform spectroscopy + activity_designator: Characterization +- id: coremeta4cat:CHAR_arp5-s69r_PXRD + title: + - Powder XRD phase analysis (4 catalysts) + description: + - Powder X-ray diffraction for phase identification of Pd/SiO2 (5 wt%, ARNE01/ICSD 85525=Pd3P phase + reference, ARNE02/ICSD 52251=Pd phase reference) and two further Pd3P/SiO2 loading variants (1 wt% + and 10 wt%), transmission geometry, 2theta 2-90 degrees, ~80 min total measurement per sample. + carried_out_by: + - id: coremeta4cat:DEV_arp5-s69r_PXRD + title: Stoe STADI-MP diffractometer + description: Stoe STADI-MP powder diffractometer, Cu X-ray source (lambda=1.54178 A), Ge monochromator. + evaluated_entity: + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt + title: Pd3P/SiO2 (5 wt% Pd, ARNE01) + description: See CatalyticReaction files for full detail. + - id: coremeta4cat:CAT_arp5-s69r_Pd_SiO2_5wt + title: Pd/SiO2 (5 wt% Pd, ARNE02) + description: See CatalyticReaction files for full detail. + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_1wt + title: Pd3P/SiO2 (1 wt% Pd) + description: Lower-loading Pd3P/SiO2 variant, PXRD-only sample. + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_10wt + title: Pd3P/SiO2 (10 wt% Pd) + description: Higher-loading Pd3P/SiO2 variant, PXRD-only sample. + realized_plan: + id: coremeta4cat:CHAR_arp5-s69r_PXRD_method + title: Powder XRD measurement method + description: Transmission geometry, air atmosphere, ambient temperature; software INSTPAR. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/arp5-s69r + rdf_type: + id: CHMO:0000158 + title: powder X-ray diffraction + activity_designator: Characterization +- id: coremeta4cat:CHAR_arp5-s69r_STEM + title: + - STEM/TEM imaging and EDX mapping (3 catalyst samples) + description: + - 'Transmission electron microscopy (HRTEM), scanning TEM (HAADF-STEM), and STEM-EDX elemental mapping + of Pd3P/SiO2 (ARNE01), Pd/SiO2 (ARNE02), and a recycled/spent Pd3P/SiO2 sample recovered after catalytic + testing (ARNE03), for particle size distribution, chemical composition, and crystal structure. Note: + STEM-Meta-2.txt documents the method in detail but no image/data files for this technique are included + in the deposited dataset.' + carried_out_by: + - id: coremeta4cat:DEV_arp5-s69r_STEM + title: FEI Osiris ChemiSTEM + description: FEI/Thermo Fisher Osiris ChemiSTEM, combined TEM and STEM with ChemiSTEM EDX detector, + Schottky field emission gun, 200 kV high tension, magnification 160-800 kx. + evaluated_entity: + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt + title: Pd3P/SiO2 (5 wt% Pd, ARNE01) + description: See CatalyticReaction files for full detail. + - id: coremeta4cat:CAT_arp5-s69r_Pd_SiO2_5wt + title: Pd/SiO2 (5 wt% Pd, ARNE02) + description: See CatalyticReaction files for full detail. + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt_recycled + title: Pd3P/SiO2 (5 wt% Pd, recycled, ARNE03) + description: Spent Pd3P/SiO2 catalyst recovered after catalytic testing, examined by STEM for post-reaction + stability. + realized_plan: + id: coremeta4cat:CHAR_arp5-s69r_STEM_method + title: STEM/TEM imaging and EDX mapping method + description: HRTEM (Digital Micrograph/Gatan) and HAADF-STEM/STEM-EDXS (TEM Imaging and Microscopy/FEI, + Esprit/Bruker); Cliff-Lorimer quantification for EDXS. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/arp5-s69r + rdf_type: + id: VOC4CAT:0000078 + title: transmission electron microscopy + activity_designator: Characterization +- id: coremeta4cat:CHAR_arp5-s69r_XPS + title: + - X-ray photoelectron spectroscopy (2 catalysts, Pd 3d and P 2p) + description: + - XPS binding energy scans of the Pd 3d core level for Pd/SiO2 and Pd3P/SiO2, and the P 2p core level + for Pd3P/SiO2, to compare Pd electronic structure/oxidation state between the phosphide and the unmodified + reference catalyst. + carried_out_by: + - id: coremeta4cat:DEV_arp5-s69r_XPS + title: XPS spectrometer + description: Instrument model not specified in the source dataset files. + evaluated_entity: + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt + title: Pd3P/SiO2 (5 wt% Pd, ARNE01) + description: See CatalyticReaction files for full detail. + - id: coremeta4cat:CAT_arp5-s69r_Pd_SiO2_5wt + title: Pd/SiO2 (5 wt% Pd, ARNE02) + description: See CatalyticReaction files for full detail. + realized_plan: + id: coremeta4cat:CHAR_arp5-s69r_XPS_method + title: XPS core-level measurement method + description: Pd 3d scans for both catalysts; P 2p scan additionally for Pd3P/SiO2. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/arp5-s69r + rdf_type: + id: CHMO:0000404 + title: X-ray photoelectron spectroscopy + activity_designator: Characterization +is_about_activity: +- id: coremeta4cat:REAC_arp5-s69r_Aminocarbonylation + reaction_name: + - Pd-catalyzed aminocarbonylation of iodobenzene + title: + - Aminocarbonylation of iodobenzene over Pd3P/SiO2 (3 runs) + description: + - Pd-catalyzed aminocarbonylation of iodobenzene with aniline as the nucleophile (in toluene, triethylamine + base) to form benzanilide, over Pd3P/SiO2. 3 runs at 100, 120, and 140 C (5 h, CO 10 bar); yield/conversion + increased with temperature from 10% to 78%. + rdf_type: + id: VOC4CAT:0000247 + title: carbonylation + catalyst_type: + - heterogeneous_catalysis + catalyst_form: + - supported + used_catalyst: + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt + title: Pd3P/SiO2 (5 wt% Pd, internal code ARNE01) + description: Palladium phosphide (Pd3P) nanoparticles supported on silica, 5 wt% Pd, 0.5 mol% metal + loading. + has_physical_state: SOLID + has_quantitative_attribute: + - value: 5.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: Pd loading (Overview Reaction Description-2.txt) + - value: 0.01 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: Catalyst mass used per batch test + used_reactant: + - id: coremeta4cat:REAC_arp5-s69r_CO + title: carbon monoxide + rdf_type: + id: CHEBI:17245 + title: carbon monoxide + - id: coremeta4cat:REAC_arp5-s69r_Amino_iodobenzene + title: iodobenzene + - id: coremeta4cat:REAC_arp5-s69r_Amino_aniline + title: aniline + used_reactor: + - id: coremeta4cat:REAC_arp5-s69r_reactor + title: Parr 5500 series compact reactor + description: Batch autoclave, cylindrical stainless steel reaction chamber (25 mL, 25.4 x 50.8 mm + ID), overhead stirrer at 1000 rpm, electric heating. + reactor_temperature_range: + - min_value: 373.15 + max_value: 413.15 + has_quantity_type: http://qudt.org/vocab/quantitykind/Temperature + unit: https://qudt.org/vocab/unit/K + description: 100-140 C across the 3 runs + experiment_pressure: + - value: 10.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Initial CO pressure, constant across the 3 runs + product_identification_method: + - id: coremeta4cat:REAC_arp5-s69r_Amino_product_id + title: GC-MS product quantification + description: Gas chromatography-mass spectrometry with n-decane internal standard. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/arp5-s69r +- id: coremeta4cat:REAC_arp5-s69r_Carbonylation + reaction_name: + - Pd-catalyzed alkoxycarbonylation of aryl iodides + title: + - Alkoxycarbonylation of aryl iodides over Pd3P/SiO2 and Pd/SiO2 (27 runs) + description: + - Pd-catalyzed alkoxycarbonylation (CO insertion + alcohol trapping) of aryl iodides to form aryl esters, + mainly iodobenzene + ethanol -> ethyl benzoate. 24 runs used Pd3P/SiO2 (ARNE01), exploring reaction + time (5 min - 3 h, series A), base screening (triethylamine, sodium acetate, potassium hydroxide, + potassium carbonate, or no base, series B), temperature-time kinetics grid (60-80 C x 0.5-1 h, series + k), and substrate/nucleophile scope (methanol, isopropanol, and aryl iodide substrates bromoiodobenzene/iodotoluene/iodoanisole, + series S1-S5). 3 further runs (series C) repeated the time-course on Pd/SiO2 (ARNE02, P-free reference) + for comparison. Conversion/yield ranged 7-100% across all 27 runs. Batch reactor, CO 6 bar, ethanol + solvent (except S1 methanol, S2 isopropanol). + rdf_type: + id: VOC4CAT:0000247 + title: carbonylation + catalyst_type: + - heterogeneous_catalysis + catalyst_form: + - supported + used_catalyst: + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt + title: Pd3P/SiO2 (5 wt% Pd, internal code ARNE01) + description: Palladium phosphide (Pd3P) nanoparticles supported on silica, 5 wt% Pd, 0.5 mol% metal + loading. + has_physical_state: SOLID + has_quantitative_attribute: + - value: 5.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: Pd loading (Overview Reaction Description-2.txt) + - value: 0.01 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: Catalyst mass used per batch test + - id: coremeta4cat:CAT_arp5-s69r_Pd_SiO2_5wt + title: Pd/SiO2 (5 wt% Pd, internal code ARNE02) + description: Unmodified (phosphorus-free) palladium nanoparticles supported on silica, 5 wt% Pd, 0.5 + mol% metal loading -- reference catalyst for comparison against the Pd3P phosphide. + has_physical_state: SOLID + has_quantitative_attribute: + - value: 5.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: Pd loading (Overview Reaction Description-2.txt) + - value: 0.01 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: Catalyst mass used per batch test + used_reactant: + - id: coremeta4cat:REAC_arp5-s69r_CO + title: carbon monoxide + rdf_type: + id: CHEBI:17245 + title: carbon monoxide + - id: coremeta4cat:REAC_arp5-s69r_Carbonylation_substrate + title: aryl iodide substrate + description: Iodobenzene in most runs; bromoiodobenzene (S3), iodotoluene (S4), and iodoanisole (S5) + in the substrate-scope runs. + - id: coremeta4cat:REAC_arp5-s69r_Carbonylation_alcohol + title: alcohol nucleophile + description: Ethanol in most runs (also the reaction solvent); methanol (S1) and isopropanol (S2) + in the nucleophile-scope runs. + - id: coremeta4cat:REAC_arp5-s69r_Carbonylation_base + title: base + description: Triethylamine in most runs; sodium acetate, potassium hydroxide, potassium carbonate, + or no base in the base-screening runs (series B). + used_reactor: + - id: coremeta4cat:REAC_arp5-s69r_reactor + title: Parr 5500 series compact reactor + description: Batch autoclave, cylindrical stainless steel reaction chamber (25 mL, 25.4 x 50.8 mm + ID), overhead stirrer at 1000 rpm, electric heating. + reactor_temperature_range: + - min_value: 333.15 + max_value: 373.15 + has_quantity_type: http://qudt.org/vocab/quantitykind/Temperature + unit: https://qudt.org/vocab/unit/K + description: 60-100 C across the 27 runs + experiment_pressure: + - value: 6.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Initial CO pressure, constant across all 27 runs + product_identification_method: + - id: coremeta4cat:REAC_arp5-s69r_Carbonylation_product_id + title: GC-MS product quantification + description: Gas chromatography-mass spectrometry with n-decane internal standard; conversion/yield/selectivity + computed from GC-MS peak areas. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/arp5-s69r +- id: coremeta4cat:REAC_arp5-s69r_Phenoxycarbonylation + reaction_name: + - Pd-catalyzed phenoxycarbonylation of iodobenzene + title: + - Phenoxycarbonylation of iodobenzene over Pd3P/SiO2 (1 run) + description: + - 'Pd-catalyzed phenoxycarbonylation of iodobenzene with phenol as the nucleophile (in toluene, triethylamine + base) to form phenyl benzoate, over Pd3P/SiO2. Single run: 100 C, 7 h, CO 6 bar, yield/conversion + 30%.' + rdf_type: + id: VOC4CAT:0000247 + title: carbonylation + catalyst_type: + - heterogeneous_catalysis + catalyst_form: + - supported + used_catalyst: + - id: coremeta4cat:CAT_arp5-s69r_Pd3P_SiO2_5wt + title: Pd3P/SiO2 (5 wt% Pd, internal code ARNE01) + description: Palladium phosphide (Pd3P) nanoparticles supported on silica, 5 wt% Pd, 0.5 mol% metal + loading. + has_physical_state: SOLID + has_quantitative_attribute: + - value: 5.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/MassFraction + unit: PERCENT + description: Pd loading (Overview Reaction Description-2.txt) + - value: 0.01 + has_quantity_type: http://qudt.org/vocab/quantitykind/Mass + unit: GM + description: Catalyst mass used per batch test + used_reactant: + - id: coremeta4cat:REAC_arp5-s69r_CO + title: carbon monoxide + rdf_type: + id: CHEBI:17245 + title: carbon monoxide + - id: coremeta4cat:REAC_arp5-s69r_Phenoxy_iodobenzene + title: iodobenzene + - id: coremeta4cat:REAC_arp5-s69r_Phenoxy_phenol + title: phenol + used_reactor: + - id: coremeta4cat:REAC_arp5-s69r_reactor + title: Parr 5500 series compact reactor + description: Batch autoclave, cylindrical stainless steel reaction chamber (25 mL, 25.4 x 50.8 mm + ID), overhead stirrer at 1000 rpm, electric heating. + reactor_temperature_range: + - min_value: 373.15 + max_value: 373.15 + has_quantity_type: http://qudt.org/vocab/quantitykind/Temperature + unit: https://qudt.org/vocab/unit/K + description: 100 C, single run + experiment_pressure: + - value: 6.0 + has_quantity_type: http://qudt.org/vocab/quantitykind/Pressure + unit: https://qudt.org/vocab/unit/BAR + description: Initial CO pressure + product_identification_method: + - id: coremeta4cat:REAC_arp5-s69r_Phenoxy_product_id + title: GC-MS product quantification + description: Gas chromatography-mass spectrometry with n-decane internal standard. + other_identifier: + - notation: https://hdl.handle.net/21.11165/4cat/arp5-s69r +is_about_entity: +- id: coremeta4cat:CAT_arp5-s69r_all + title: Pd3P/SiO2 and Pd/SiO2 catalyst samples + description: Palladium phosphide (Pd3P) and unmodified palladium catalysts supported on silica (5 wt% + Pd, plus 1 and 10 wt% Pd3P loading variants characterized by PXRD only, and a recycled/spent Pd3P/SiO2 + sample characterized by STEM only). See used_catalyst under is_about_activity and evaluated_entity + under was_generated_by above for per-sample detail. From 3568a8a2076cda337c877c497071b8b589e25bb2 Mon Sep 17 00:00:00 2001 From: HendrikBorgelt <84382772+HendrikBorgelt@users.noreply.github.com> Date: Tue, 14 Jul 2026 15:00:20 +0200 Subject: [PATCH 6/7] Fix small vocabulary/docs issues and regenerate derived artifacts Fixes CURIEs for precursor_quantity and adds the new precipitating_concentration slot (nfdi4cat/CoreMeta4Cat#109, #59, #34). Renames "CatCore" to "CoreMeta4Cat" and aligns the vocabulary workbook's sheet-description table with its actual current sheets (#111, #53). Generalizes "Voc4Cat term" wording to "CURIE" since the schema also uses CHMO/QUDT/OBI/SIO/NCIT/AFE terms (#110). Documents the Excel workbook's structure/colour-coding/columns and the inbox PR workflow in detail, with real workbook screenshots and the automated check's actual validation messages (#112). Regenerates all derived artifacts (Python dataclasses/pydantic models, generated schema docs, Excel workbook, sunburst charts) from the final schema state. --- docs/assets/coremeta4cat_vocabulary.xlsx | Bin 65776 -> 89397 bytes .../metadata_characterization_hierarchy.html | 2 +- .../metadata_coremeta4cat_overview.html | 2 +- docs/assets/metadata_reaction_hierarchy.html | 2 +- .../assets/metadata_simulation_hierarchy.html | 2 +- docs/assets/metadata_synthesis_hierarchy.html | 2 +- docs/characterization.md | 2478 +- docs/getting-started.md | 91 +- docs/images/workbook-legend.png | Bin 0 -> 329666 bytes docs/images/workbook-sample.png | Bin 0 -> 321913 bytes docs/reaction.md | 6122 +++- docs/schema/coremeta4cat.yaml | 23726 ++++++++-------- docs/simulation.md | 262 +- docs/synthesis.md | 2611 +- src/coremeta4cat/datamodel/coremeta4cat.py | 2779 +- .../datamodel/coremeta4cat_pydantic.py | 14163 +++++---- 16 files changed, 30442 insertions(+), 21800 deletions(-) create mode 100644 docs/images/workbook-legend.png create mode 100644 docs/images/workbook-sample.png diff --git a/docs/assets/coremeta4cat_vocabulary.xlsx b/docs/assets/coremeta4cat_vocabulary.xlsx index eea46d224cd0c28f4dc74ef5f165ef27f8b48a72..7e9a4fe2130e158237a262423309f8ebb9f48638 100644 GIT binary patch delta 86492 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

%cwLX9 zJqT8!9cJyw3yyV~TwhLGX3?VFoSBhLP@SSXeDd6aoKeTY4pQaPq5P{(EPc4dD!KA& zwvXA<8;jRw3sc=|J48@lmvEitX*+UTF!r&eO4KjvvavO6PlE5F3->1PIE#N z_!D1NnfyLNnR1q_sFpX%rP1s9JCq!K>OejW9^#=PRbw|zRO%+ItfIah6GLT;6U)0z z!F;bJ;q~hiDnlEBuf)PVrvHq2R2z|X0yyX#s6JC51iudIX|@?DKJ+lH--w&i-<)>^ z*GSB|>L03}ykTUW`Fg%yJVHaRSrYura4|ChdHxjw&h;t-mKzWH|H*g1`@@b^@+lXg z%Ew~^B>ve$E;>6lxkGi#&Z`ibwRpA~Q=ZD7FE%vpeR#t%Ag27@C=-hPx!Ygq^<^%O z+IOwt;SE2?U6Xfqh|SDv$MvmDnc$?g(fE8sZwl5SNd<6`X67@uLMi^p?te9lP?U8c zF@^P(pM^n=HN;!HddJ=Xi;>sj3x|`P24#hp$IYu0yVqHGs^@NqiK&YWIZ2{;#codj zg0L1RC)n@RjFkD#@YKYGLd00rweo4^tW-Dl^#z)A1q(y|A60J|701?m591mLPH@*C z3GVK}A;Ag3-3d;k!DWyTT!RO9hXi+LaCdj-9dhq|e*gCaA6RQvPfzzbr>geewaauo zSrnAMqp)tmTVthq?4(Oa5JiEdr+GT_=Prx7WWyh+hb4q#mLX6U?UL!)vSrE%8L)~$ zjYEMXBuI<;A)|_{xksL6$7+a&(enr1fzmG(JT&yE=%Ubs+|+lQG@ zU|VgRf}b6Vi{fiW{Om4`@2fVc|COjdhnY4s80Pj6{a#NAt3NdhzPV(eT>e>+K3T`5 zcMJ=Dx4X>s#D0kY6+_zY$pjn22j@M1Sdvz493t(S@tW+EY$VFGgf^0VOQt?H04&ka zKS#Vt=|cP=oR2`a=P-JAa(zmG6uxS091cJ-uM?j9v;-!Y9=kR|T5C){V(>FzMG~R&yAQ0LKnghe-`XLFo~!F#lnrnM zuER~T^YkrlU(KZ3RRB+UJ8~Uvxo?fbz9VerGJoF9nX8GO=wesfZ0r8`K2q_6t=B4( z8lduxd0;%wB<2@NuoeQX^OT#ejq|0mYUJ9HrN z6#iEJi)BKk^`o~y{@1m%ScI`_L0%*!!h>A+QEBfgvcqc+7C$sV$cUVjhLVu-MrcIj zVXNEK#T&x3z?A`cNtripN|?+Z!V;9x_XVADbeJFcMezvAWqK(wmqb6FE(?_>TD}*e zzd7~rac!d)n6WE%%bqpq{IBM?iC)_ELY}0^&$1et6i!XLBgVP+O`azRVQ@{ z93!{27snt1^^9~4+j1-BLaF8rB+mCGisi=csrZHyl57oyZL9mtP_|*UXkn^QL{=Qi zLBDli#!r1NFq!Oeuo0Qq3_vlGls;ESjA(zJu@fw+uK<1ov#f8aR*fnUYfotU#5xLf za;D6Mgassgk|O*U_o+ismjFxK$~Ov=`@kn|>0j2+7Ckti66 z$5@3=6C1jVhjjNt>EVp>BVjE$n$(>YjfpI1b}ofl)fKk4Kc`*d!_49?>OSs8+}2z* zAw(9{0}bl#5z$vTA9;j2eW}r}RRY@SpiO*2WsTb@DZ(Y(5NFdevyeGuZE3>@yD-y# zjx;E=QCC@3H6Mv6TZhk}u`FEd5?uIwds1ks$)p4mK#y)lcn#Z#sOOL}XXC|vb~Att zm*CNj7Gf?qZ&S$mKK+!{VM4D#mfr}U>)~*=0Z0wGn_fBDC`S$&A0MJ3;r@`P!sV8u zP*0s-#l&L5TAixnY2lhr7_b(fytRld9^Qj*jVkqIyKWN)6tyk^r9OF#5GQT7rg z0-(hv>OFPdGpL@co;cZ~!ZM>PZ)W8f^~s5wBpQux9E?#a#2tZ0fFyzs>m8LS5+C5_ zvn?0G6X)j^0;f;Hw?O`MUsG>U6Ok&5%6C{#WKE^JK>$r6Kvj@t78vU;B@=3fHM~L) zCgFBT;$f3hYGz)$Xh~2QgO|!_a7eRm4m3xim^6;LW1u(QrV4jZC78Lv;og4B=d6+m z)L35Av1u=!^Nq4yD0r-7WI@xNq|XOZMv79Rq~>y_wg!ngF2qRKV4-&m$wlB1U{L1V zLfwqgB3|Ack8;TTs`pcehkK2-)O0R9#W@1=cjaJt_vdP4QTTq?{xMD2KgrGj-OGw3 z-Y6YPP+qNa*08LJcqM}xrB_>5E&4;A8mch_PT5a}L$zlnCCZER@8%1Cl}7ox#EP0$ z8)NDTM`@iP&DmFbV*!rB)zUU#u4K_hA|8}40)h??guFhIH-!_AkLiLgbG>=dO*39v z8If3tn`hxg7@r@VF4|E5+wCvZEZP{IrO{%qa3tf`i}0JiX5VhHBFzSFdrwmGyb&8 zI)*V4N4<_|Y9a8Rq*GQCNh*z&Kw!eElnHcgXV4xeCo`#|O%^%@-c5_v7?d=%vR>CRa`ze61g_E>sfQ#RP}~B>%mO z(e@UA8>7|tp!P%iyOETE)VbNLxy@bRI_F% zs>JPpk!B%Hka+z0NHp7cNDS^A$Yv+6B`KTlJVvCN7ON_wPsnUcS@SI0_J#ADq}Z~&xDzHx0hA{I1BF}zUwc#J_BH{&05 zAx4k2a`?O5b3vckt3L64INC}Ck(t*m4o|wMbNX*8QBn|%H%5oS=_Avx2ZT_<;vs8M zck-{irnI;jme#17lR9a6eAVGPPSL~&#pV1_-@#3+VeJHKdV{cMRfW1!^oTf^E@%Wh z*bX3axVefO;T6GUYlE7N`K;fBg#Ws>CnHdTFDQ-3JM^Lt^%i3ozO zK%N!n6Fo{l^65yTT;7tq4ot*xd8X@&C53BX{TsYGKBYg6&ZVR>HxeoUvDu)(L#8pb zEa$G{5_6L?diSGRPLirNi z_u>B1jILJTQB-{(F8j;U&1N{5qm8gQqin6=Y51*1-t-Wek`S7rkYt7u3xI^@3btfJ zFO7>-BQlxTcdixMc5?@=&$`YOy<72%_vQTNdkADY1yzYf~_$tN|PqZafhW3(h#y?5D7tpDJc>JxdUFI(#l z{l7u=VzfB;kU!SU=ah6zCHu7 zuqd_mBx3+^itP6?a}m`a8}C-MD*c8*K8YGoB>DbMWO@ddKE7*&mwf*DMKASk3^H=N zR3ID)3n8{(1Gvf<{S!sH$-KSE6nf)NhsuE(#>xpU1{Dx zE`&e}?Z5fxr587wrU<)Og!tGSQiSijgL6>7bH;)7F z108X{$Y`F&jTGYJgxbgO<9}H>_xVm45e2f@6}itwkbILXW{M9*R54H-fSZ*G7qF5Y ze9rHy^Cw9iZc0J!olK7_Q^(F5_pD)%226|r8yfU%$hS=KObRscDF`<+FPiEl!r&3` zNs|5m_xd?!-aJ>8US;H=wwUZb<^pa{Rnfb>324*_Q8E;e?Sc@?<;kTimQ*3WH1GFM z3NjBC`6BrN!RNW+0KH}~Z+Ayw@zG3A`?K{NNj^9C-I&HyNy?S+W@T&?7tcFK3PcQ; znT*B~%}Kl=?aGQrCuvIwVe$4fiIsyRwVA~av-V8xxOCAv%$lEsr zWvOlWO+_AbLc>MdX;c{^Thz7KiTU{o)n50ru8{CpA14_=Wc(B|)Sbn4zb@l3%iyTc z!FYVW%GSH|hZyE^Ks9xYwLhFcx~mt4`?no8q6jji#Ght;TUC zOdN}}l8|S+BQCDYFp8nP*)=iN)kya<4U{QqoclLXR1m$yQ&0%_+=oDxJ&ld(!)#+Vtw2_5!IliC=BbnIJK z2SS*+svRG6iJLY2qI}6Z-Qv?PeY}-`IW6o9skQ`{b7jANgSv3|reEPB*2fEog`vlY zKhi@oH49jt)r>E&H-4CX!aEIMfH%zSj;ZZi2fFI^iG}Y1^Q`FHK?gdr2_M)0PQtH1 z`R^rU_(&ai{&?}GP?v#Ari|s?gFA1`O-*U`uypV-o@+%i4A)vBX1}oS$*<`|xKXT> z_}-;gzWfzU(R*-82=u{p=dX4lT||DF9$YneteDnKZnE=ND1_!Yp+$-+x1XqNh8DyG zCAcDxo}kkPVrb(WV&o?_Rn0La35^K>7<&yukIS&mF@C&;bcJk43!L~7qND~;o+z(% zDp$LPG4)HMQO9dGo;;%sP_wtgHg-B6kzpoo7adkL9y%9*Xz}Ivl<8ukq>jl+NQZ}B zmMjySbC|VGv(=xgCX7}WsVO9;xinw?xwJ{}VN_1yp`vmhScWIy)yp#jQluwkCaR<+ z8>NuiP|*NF$iEzf|>x;kM4LdA7vK&!)py}<%JeSA~aeT3n zp&Zg&Sz0D2SDF$HJV@^YpI;26EHAPjC8mBFC21h=Ekt@ohR2!zNb=O|(6wq_;7K*L z!93b228(xCw0Ch0AkG~k-HuU~N`?I=G5Iq>^`N=c>)CUq*7mhJ|1PzgUGEo&#eXIP zk?!~|15p@9B6%-hhZby@Ra|jNTUKHnP^SSWUTHV=^*D23yhW|*suU!!!?p8nDswGh zvbPo87wu+Qn#Mnv3TN6a24QT%{VFNep4KnptJK$ZGvKV6FuD|Ex+50SAnMLs7z38R z4U#%I@2AH=*|S1sQ5`{jvE}l}Y?Sq8-o1&stkI)-J=QgTSB(TaZYnlTg^ley6tY|M z3yKx32^pD{ZQ^_u1=)-(?&?*lWCkE$b&2kQc;)m~Mik=Ck}`cb!1MY0JbE~%v%{#| zW!H!XaFWHPioeLn#%#msnzD&=8pTUVp3?Hldy;BYMI@<8{J*6NoqsL+TlQU>+T>`{ zeX+o^cZ1~Q;GNP@z{b3Q20AkXcVYJj&bVg%gtV38%FPl>x%d6F>jZa#RBy++O8%6D z&YTa)W0WV&ocBww{OsFzr=|IuK>}cuBJjSS|9P;r=6$n7neu}`Iw*UGRCsJ1dTI3( z3cSI&lY{3M0@HutO8rlyYYsqoLg#p(yJ<=XVefLz9xL1Erp@&^hVe<*Nw-TaMa9p` zN)<$3r3m8tAzUiIY-?$x{aIS>dfR?wg4wz0J|4?<1xBj%v4A`gp!2t&WadFRQlG$4 z4!WQ0!VvO*32OUM7zYlC)c4!1z($_>;qGgQcoWBN*U>39`%G!dr^E!$`0i~1yjsEQ zT>^^`eIl87g*9DMtV|O5?ESC{=u8nZXp`~a|B~+VVPayW3e-P{K{M_)KBu%{p~62t zH>UvAcijqaU*i_PPQ62+uA)4uID&U=Xq?u=mI_68Wm;Fy5Aa`_fBbsFY<~DG-K1ts zz@(=+rSz)aY=he4<15deISl_kGBGHwdklXpKY+uuflb6extaQZF=rMW@_0@7=V=J+ zO*#^|AYc)z@Jzf4s8aqQRerV|1Vn_9U42+A-)prG`72X*uG(&b6E-8JKpb}z!al$6 zEI;KQyi5BefTW)Y`o;b1(ezNaG8VQIT)DZD6AT$~6CPf~so@}?$8hQNTm`c|QM8tu zv9KkJl}ZyQ*{FR04=B)n9#3l8$~DWy@vwj6h&_>>jn^ZM6Ql6CM931W02m6^$?5fd zNxo0e3FZ4meg`nW56j={VAv!5OWzY&6=`=5OPH*{9-1BdkU7wXwWGrPkWsQ5 zYeQYZ8LW`$S8+qC?xg$UW8l{i({uoDsKEvMq?q;8I05c>(raDkvPyBA#sRlOt3W#I z6WZqINu)CgVRi52(}PXaMML`M?ES2D!`Nb4wk{Y(HGuxTT>xqhfSut}yQfIneETTT z5N-UR#S3-)*4EhE0|PWuHmj$aUY|K+1pM}%V28850-wo^U@$V--Nikok4QG(t~qVf zL2{N%DZZ0}sY?9y6{jV~><{j_(|0<7g`8@e9$wbl1p8I((>@X*Gv z9@i?NBJYGqi6s$$e@ep9m33&s>Fw?0D0gR#`jbN{XYO3>o@&nJ1$j2Cw}MDNQ?8gg zm5dmQ6q1cIE{XeaRVkHGl&3tMSL;um)G19g|8C}8S$+$08Sp{HWZ-C&wL+T*pMFA1 zV}tp|M~_kG0zXbgmC)Zc(3QKzqtXg61P#GBVXuIfup5$*-B4g5MTO@?6K_+iS<8(cW?5qo(8C^Der#(#Uj9@i9#aU69;Lt0a)kE$p9)ZEafxNa(7K zhSvzDEfH?BV4E@wfezzNXk}{R6}Zl^ zcO-$>nRx^MPYyZVTT1*j{q3G&vauDcay8cqoE2=5R;J##Az`}2OATAE@AuVf?b#dV zFjxvb3#W;l|hA2+fc)(>_`NcC!%>+PVy;>2 zaVA}{WMjv%X^c=^{U%YQDS9z6xj%hBw$m|?%^We+#RGF!johP<`m#W}Jb{Xm8LZZy z1SC_9I&MoI^JG%WS2ldq{wqmHFa0Nc*vOJcTUSc1KQ7_4?#~#jC8{0XOzjT~6mEXi zu^27!l^NhBR!9H@GNr4-`sdn~ssyZWglYeoF zUIx^dW_g{uRovEjK>iTI6{vU}c3hL;I*j|Fm2*>Pkg<5=5jSt(kpC}3wTRSwrXVhA z{%tsMEpG!8Hhsk>ouZ6}pW+N0UH(0M?CX8P6+9qM4KGDnig2Z%!xT-|Iu;Am4Hs`N z&%+;yEE%qVY=`mYFG`T9fR}P(o&i+28wWl_lTXikRmeh~*_Yy98o?*{x7G_nCFCa&lRaK=_UR6HowX=EY73USnZI6>nsODPk#?**WmB%L6j(sBCPfrxDmJiad`)DQo zU%un3{%KLPt#+N+RqfBljiW>>wq>qwZV+JlS8gpY-yzfE=jjwGdSb(MBrz1BixZ= z4+GAB$U5xu&F8Z9Nf5}B$Dh#ceotD%XUXKM8qOkKkQz$z^==IvOz^H|soPN?q_ClJ zpMcf#9(Zkeu4i$sm$cP{HN-7(Nrq~^Xs<;cvUYCH$)HyKlT3i*o2TgW!?`}j6E1NU zNQBoiMkEVeG*{ddfLv3`aPC|_We8e%X5KRdEz4C2dD)HL3~aW~MW0_+zYgP*gj!sD(Jzn;UWr_*9O*1ch| zsOqt&iGQym_756)dalWBYj=GBFK*tYRe}5S2Wlixnc#@NZcsYN9vS|Le^-WVSe;lx z>yKmNROqWN?mZ9A+mB?@S%Tk^%?RKrY@fdvBS+2KE`PLO4d`#9^XG=9spN*vlsOd= zgAW#?a^b=8m8+tH^ygx}`kll8X9xYjBL6} zo%f5sAHS#RXJ)q9Y+Xh)+glBEP9)?yodf+y=Va@m(|dNWrl{P#YXpK>4a7%CytyH<$<;=#g=)Acaq-}L5S0wlv_Q(sQK2T z#~q-W;5{38xcELKhMxsVG^Lz;V_Nio$LN%QISq+M6iVgprKO5j{@zbL?;kT-Hxrvp zZ3$-Xk!ugy84E71!ox0aXIc!tvlM6G755D>vd-17>Gp-Bkct1OCLD*s3v8`$gyH() zNmheo+b!&fNM*g^ck5^+?`eD~rl?EHf7Y%t2SB4IUrVW|3a`JDP(%5vMR&W^JU^i~XqqRw6 z*2p)sP@0{#Z?xAKGPhI~aCT>AW{Xp~5Q5(}9btVJb^(dM2|1KSPwG|wZTok9k%Ujr zN{)5cItU{LN(!ml7O@|2>q8Qo$zh1xMJFlWMQHD+I}BXMYK^D_tsn_HKyc`W#t#Eo z{iUjfEW+8z_}}G?Z~Z>C5vERkwvil(d;MsTTEhNnc;u^Rn@xH3p-a>SUvN zX{RR+8kQQM%&)2A$;%Tx|q{Mr=^o0@UbKguLS^*s38>Sk{$J_haLWck~w<@Cui zJ~EChK%=U#sm0c_4KRC0ti8#>#|&S?^T0?>)cnO;ol==thqU6q1wmNiFZ%nLIR31M zhyG^^VBWkqswcB}sHfbje|0@qRe=LTqwQ|CrbkI`m(6{*farLc|wgjsEl8?3W$!v>y>)Yf#f($Hv z0?}}JDJU*#Ds#+UqyqN(LnoC0-d&2n3=Z7%o;1u)3S^@l`FH!*b~Jw8QSn^vr&hJ6l*c<c1UFAjGHXO-@7EEc|$-GiOzbFiuO}E zMUag#OWrOJ?dLzKdXESD`0AIQqsXtEN9#ztJPbui;qMAO9xQ*hC}tgwSJW@Eu`x5x z;+KP=Xb{C@gAUA~>fbKj7pR=@E)hv$Fe;qTr1r@!(EDpFvj`OfOuI<#v8_E6N+g#I zDH_%xsuyQtQ%^@e?uXw&2$rkp(dyDR-C_a(t5^`4uR|omn<^yMh$s*TIpkhS`ErnS zo_rRMq2@~&^>1_)4U?$CVHo%>FU@;}v=4WANNQEx3KCT8lbw&aea$=a2HRP7av{E? z0vB?xG5b5jN8)1uh+%&(n5^-x?>2vJ-fIE(6N+L3Z64s<6FZe2(P5Qu_tbQC~A0+ac^6ny8OdZ$^ zah5S~Qk3~iN6LjbV+gRx|FYn|vq|`5hJe$9zyBwa02uy>-Us=q;^riG%#6^q?5Mt^ zgD{bh-eCmdI6-L3v#^(({+}@KO!aL!n}l{*N|Hl@Zk0=aXc%@mL(?^u3=!=l3Xx}D&p>cDwH(7){LaG$JLVwAP(%8Mq08!89Op{{+ zUz8=`tsdIpQ;y{sF0n@&U`KPZ{ThS1C|W z0xN&Q4PVHOGl`w&-2@w>_>n4(_8U*kaN`pZN1J-H7Ma+~;UeV+2S zscHVi_mr8okTRP*(Z=rHAxWym(QiZOuZLNx;>KJP5upLW-kqBD0Oj&T%|9u&F?HUV zGJ&u`Hwa7l%6(tBdRW-@$&Av#+8Wxp6){@&+5Fdqz)?a_p+i#4XIrDovT1)lcF<6K zP}RJpnR>d(K=Lx)PIaSw1Hiz171RAe@>aKnW>=T2Ud3+)-=Pgzsy_#% z0xdkgbpz}O@1wsNHyt^bqd%V*;Wv1}t3on*8hd&j23pOcalAfpdBxF5Hf+qY*)S!C zTbsGkCF~XlSYAqa_x4^|lY=h)tSLzbS5}s3$2j)qdmEDGTY_G5^ z9OrO#AbYxwixu!tt>_}Y&@aCTI_8o!5;)5MYAbY=V`;t3Qes2!FNNYlqOZ&HpZ1Dy z{m9-IlsspcRvjpu*`yEkSNH1MrzJmsL;eM#wGdzMs!i4}u9Lbw38IYkz8Bn$X=t+g z_Gd`1>;Ne%j2Pqsny@@=;RK{i|A~eN9AB;uZ{QHArE!_VlyY^H%<36?4$QH4@ z#jk+YKFUJ0_(_`J~LCGLiKfhWsv)yBElXl!<>CwcM?!5~yW{_%-?cKqz* z(TOtNM7kGciJ&NF4^UO8HRl>`<{DA*0Wo_I%`iGwjG7MGm5R=yDh?Zw6%a;d1gUls zkbQi~lbX6oPEQ4ag$kpMk9_67GG!M)&b<2xs;`5%0#m0c^cjNfsS6IcFjWQcE#5w53KSDskkW6?QZ*$e|GMt z>)3LqsL||WcmwSIYnAX7CukZCHEh*~D^#Ai@0lKV1NsHSyv3KT?c^_<3qY8ASQctZwC4$^z1QPVMMlQ$eDN)F2O4wDrdO^D z+^ACR-^e)24)C*xCm2P-$k-G^KzqBaSF*V6wR9glV-wk8FLN!$QKMxOK*;+d_l11W z#jJ+j1^ERMTcl7#jw8j$1X;RC8pu{Y&h_hWAjOqTfV%Xr+IMP*BrcU7f!ja1y`|r4 zYcJVn76%5}j^KCI8%F1gJbpgV3|dD-=x+DEh5zs_$r8$1hI5osITGOzi3C+S&Vu^? zp}muSp&PTFZAcACI*Vk7nM4H1me`qw`=T))CyaH9@-rPL^+6DS5*`aljpe)KL$XUdoJv;JGTIQFD-|QB{_G)_#oqfKv1}lh-Q^v;l z4#~)9A5i}h9iXNzkPt&Qi@|tNJ#Zn)2kh>MkT^V^Wpr<2K!8iKL~Q{qZaE{S5?U)YJXdU#;t zpxrE3DnVzcBtIJ#)pLb$+Nx8namids11dcto#t2sQ2c+|74*EuB-vws3M6*-6A=&g}qVL;P3uu=i?xDy2?wT5*l^Ppzbc1K8wLG*eR2Q z)xZLMSu`ykf!?>NdAs<;HpMIdfHOp-Uql4yup#F?IV-eE@jA(o2PVC_B6*DIN^P(o zTd)KIW8VUAAcJ)h&iQls9u~DbM9P2Nm`VR=@sB#^#N?1w8upj;;GZxVIKQQ4wn#2I zesEiS&{`{rOVOh`oCrE;TibF|Kk%z#i(8>&N3KU@mrYDd;&BFtVyS261+o`}LRdKO zfza-p;?td%Za)_W1jg@|Bef5!ldlHu-;egfxd03#s-)R2DaL0)XpxcNN7;!Wqk0G(xk5@?^%8a8oc4eDL%~R_zH)h%M=AAth%Q`?lEi28Ns3)_X;NFqNFSDKG0?TEd^r1e^fOq_xlu~&CxBY>*c87L!;<6yi39k1?l!mWS^Ndt4cm|bFO%!E=FTq1 zVkFglPI!CHk<`-oTnGoB3dHA(6~}2~^muk_aC1A5GIfJFLMH!Gq#JM3%#J^oR!yAG z)#&D1ZHPBwT-hoUh%y>$3mFjxIwM!-wwfN@A^C@=UK~u)uF3<7NA`v->SUsPtw!Dw zGcq2|M8pP4mzcTYTeM^p%c&{)!L!(5Mby;I1X8P12N3O&pI8Fi(l*&Ixok6P4UhXH zXOFf6^GAx779IVlFq`?ShDC;=*l=p31|1NbMHRlR41JCa%zxafkskHf9=Iu;yV~;I znCX-^JHXh4mw@SdZB%1iL@gJk5bKz8#-kUH`=e{Dv&x`CdvM^l@cL#-=iwNe{mhecNzZ#@q&9vX_{yU6iA69##gNQRabwUKv#Cmk4n?PVBb0u;Q;@_ zj?mXRlxWMh1`tjYw5uYPoo<3BT{F+HnG!>>!a_RymQ1`LTvp(NVjz*Qbp6hvfNLjY zrKU9z+oaOw+X%4Fg-d_Eo@)63+)rMLZFY*zKY(GjryM!1`zKk`_~qu?B7 zAKV0M9H5aCEeEHKLO-zx0{&NK*Yl5(H}Th4k52z``}mz-!0RAcX?=rBsQ_7Zq__Qo zJSLrv+kI?IqnM0t`C#%)p&7#-zivChl_FkOKtX0~-9dxpuaIo`SM6$o@ox&thYMe% z6v7Tf)P*!!XQ}L;h$KbH5>*iGnmE)^r+C?uZeX@SEfC0^M$Ww}_M%)1*J>OQ)_pfG zvvXmv-N~a@Fveua(7e+W9OT3< zR`xfkE$d{NH+pri&wIdc{SaU4;bFx}6z!w7A^$$y$=uiheYF=iSXL49;3V7E`iAX7 z1tcQDH@KDhKPo%iW1O6IFHTlqhHQV$Ykg*&+3;6YVB-K6;FS`|G4!QJum$f*1ylaY z0&1Zv-;dExj>ECxyM})<&i^q_n)AJW#9|lC2Q(nPy(Inkp`yLG=>E65!{Kec^MbN9 zzw1Up*ZjD@W4JuuM+CBwyrPr+ub6qWwbI)v{xd6K;I`QowUU0Zmt*?q_d9155Oc)4g2!J);FHY9YuQ1FB`&U#JMr3oC2- z^?J^uR%#A{L*-_Y0_0$gWVl|9y65nr-JEuPL{7!c&)+D%tgMlBKga^H@aEc(cA=`J zYElqu2NFui!JII}U(B72TZ`=O0G$r)1H6`)7P~<&qbNVjHB=t0xVbU8X(-!URQ|EX zik)37O-Ywp+bsV=MV~0Es1m-;k0#?Gcvm2rN$Gn2FS5Q$!tvuF0AXgMt-8$NE10K6 z>)7+tQ>n*=tr!7vy!hS&&d5aQ-N~{MVGu{3PjplT;J`gP5*^ToQM*%$(`7Lat%?~&q#!d{{DYTG= zWUY_5@}~1+G3PxRhA}`6``6<<2PzH)Hdl_1qc^{U^-_&Ox9M9{-z4eU@c;4rRX9WR6}qxD_>|odgj1B&(#_ zxzi#A8{c4(a)_ zr8N-K6SpK|C@+*gks1*;5l(s*a@_2?^S@dkDzK|3q2`YH_{jrcC|I3)xB^Cko!7FSSQD^bAcTAim`wi$;*k~ zCkyk?WaGleR>>%hsL#vc-{%FpqIQE&1m8NA#*-HWGf7SOe<19g6xVuzD3{S)liT0} z17nQ)$>Z6ZT@&D-AO}Le{gR&l|HR5Ss1|M*K=`zm?3oFP9YNwG6M^lC|uCuc!-`Hk&oEXsE0Q;BYsa{jJ& zdZj+oyM5H8cDVit5D%x>)U}`KodftD&l;sqd4fS69DD~K2Q%3(gR#!J>fh0F+<}Yu z8T3!aKksNXW-QRhMG3E`*yJWfk&C|P0q)%_fTR}o4}lB6U;?YbZ$+r%Z%v)PBfkI+ zH}2MqB2kB&P3Gb)mRsOl)O}3Ty5J08{E<^boBW` zFUuAr*vFNmfB5+O2H1^<`ojFaN5W|(h^M!}P&^rA{D%~Ft}DR`#D14}0WAJTmh#vQ zsr~XMC#lTQVg#lTbc-yKl%elwVV@c`m9kArh-}s90o%l68kY@HF+kn<~d_)8*AmwX%n3rw(-2*?Jmx++pR-hi%Ig7+^9M;g1wOo})C zXM>N3#!Uj1do?0(++iQE*mde0z!nta%JP5^Lw~T9yWw8{FKm3^9zV&5;S=VHmFMX%jEu#zcN@6e_~fhlVz3)cn804Ih>8iH`3IF*J&VsG-$}=W&xI^fJ$g zvwU~q$>W~%UR>nXY0IVibynw@R2LgjXE+%fD+JP)PaJ)?$jJFLpbsa-CuG+!vkNpc z4KNsC2R$!(6)eQFV@34n)sZ>stU-iuuTjYT4!qULm6af`1M`319Wa7qexp8Rlf>fT ztij{-=uWTp)uZh=@38Hw`$Xrh!nQ3Q0dkYkY;88Ssg)<5Urj~*!};Qdga|mm-R29W z`sI=?kL?w4LWu346Ji_$e`b&+idmpxMF+M=aE zE7|o&-=4r*{rUC+^Sh~3>Fy6l$&ZIuJV}49%!Mp53b#{iC^JO>L6N>k$N&en=vYaL zqEDzW;d@99^CVgyi1cN-h_f3%#KCV$U-LDn%peKbx>%{SwR|kb<-Uiko%htZlY3V2 zIC?Stie;)njJqJ-ofH+y%y!Y|2rN-aEJrEi7kmP58KqdyVtc!C4kN+G$J$%3 zDLG$kVWcP9O_*IdFgM%SP@ zFojTEQ+fqr)QNv9f_0Hg2&M4aBqnRBvg#F1GbipjkjM7 zfRn@aG~8{)ssgcy@06<4o@7}tmvHJNbSD2I2yw2iNspBV$|fJO1)p~V8x zukldvBtJ*C$R$pvZB&B#Ocx0LP+~?+kr>*z6)Vj(E<(mZQCninvzk5Jk=&^2E)LU- zj0(Y+u-pb-VP1wihi^l8MU2oui2iH!O{jRJZ3WwYBjw#{D)Rstr;B=<-i%Dst&91| z{^((9SC4m?a?dtS44Uksv?NRyT>PyA%|ExdN@9S8#hLmevioeKmY$TsQs9i*y$Y;W zAe0d9ey~Ki2o`4h0gE}aky45_W|??uO}s6J)4_ffB?4x?{j=nr3Pi!@eLm6qlLYsB zh!}!P!*9)*YM`f}schZ{e=qagv_7U|+*4YY^%&Y-{CX9QwkJAUQ$S(3=l*R06S5!Z zHip-ol}A`NAkgIAmtK;xr%bn2%u5lIi_xfVL&c$I9k#o{QF2# z1zTE^hF;Pt5TqRm2yXiQ4Vb)CDqn4zV8ep?#aPXh@Ln&kjqbQDlJ>1&eATa$$h5Ug zrSvygj`@q71w)NGni2$6;{WMII{I!UD@J+vc4m_n+ABpXxefzH7Xt83KgX?+8x*8zn!er76$G0P@)HZ;X+ags_R_!V2@;~XKNqX`D3wm;M@&hIax7(LK3*>(RA zKyo@`LBJ4?2R9yh8|q2>A#5WN+LyoWmA*S3ajQTFO#w$og8kM&MwLP{Mbq5U+d{wJuCq(Wy?B^rSpMw9)^#LuC^BHR4=CDF zr8)2p4$`vFq9&y(^ngaGJB=WuARhNs4@o_rA0l6qr}Vch;UI?}(Xbe0Q>A34x7u!I zwuk{EwWoo1s=A<6(8e2LQO@^+fhIyt>NPrq{Wz(*yJ~0K0h#1#a_1$Uv=3p%VJcY< zr8wtu`5676O$cdO!{g*ni7CvG`6)-|!AEQ9JLsK-=xnoAX;gJ@D(uQ|>Un?8$_WWJ z--tk1AbV)9J5FPxG)lC(Pa=-~d~Z&51^Xv#saQM^2yP((lshskL)iK zL6D7NPva|@P1nAInn)%YBE!uu9-gkCjYco!x|nBWubaBUu?-Hr=BQK>iVa&ZCWNzz zlA)*K|2Lsp+pakJ>EUL5cr)6&VYgK?R1DUydMX;3_*65&g+*sma6I!1Rjq}x=*n^a zcDw0kfbYn;|HUc9e~R^T8CpzvEb$B-<8J}o>TI+67ThU5$)hEeMiC;XAVgPb# z6D0+V+Q>n9qU_5kI0{h{beIz`&rU)Sg?hjrib9NroxhctvT|goxax^l=b)#u2Iu=*TZpCmfKPM8^I5*TSBh7J(_$3c4{Gi`g|&OT*Hit1GbW4s z08>>1;e0W~PnD(0;&fdPD>_aWwV-Wz2V?w>%p>8Ma{ypwIZJ#-{QtYUZ_{gU`zb*| zAveRkxVi&eEN(W|hb@ba3o?~IJ(bv7VdZ<~zEz8d4hlc@HqJ+=<6*Dt?v2M!wp_Oo zp#4CO{n0OP3@amhQ0yLZ{%X5pOI8uiS01kLY@GlwO|>l;-%_$n0b6y!U5rX=TJYL~ zukWR$dxFDx^jdGu$%@-NQ=V_5!Huc;0~C)A$s>pCCPT}mxHi`rLb8(T`O!=7bjcXT-@YTyS!1tHw-3|Md8 z87<%{taJ%2+SrS8O;KJzaQ_|yZ*UJDJ zvF9d2OM=9`7jO5BzRIUD<8*o>&h#n#>6*mu;?_}s!^me$KaTYK?e@?tYw>(>=@TDI zEI0UJd0fl=Iv+ou)nCgIyKH;244nTCu&~wgew?t@SAPah3b{yM>BCL9WOYwuPQ7Lw zH+clsM^Zd($cN!X+MqAUVE<&i;Rxw4l28(RMfB$+e0c{sL?z&j_bCw-w8H{DP;FxLn0z5wM?-vR2^VUuTjf>z2-)gwsN${!%DMhE~ zB(I&7&STmWw-HE$&?hpc7-7S^Es(d$CrURk2XGxOiGN-zubjd6;gJupY+#(hr_f)8 z>#vM@?B2_AyB2zc?rX5gCfx2OS7o@nSstmGNHnDw!%eRuZ-HpLj>9%Okwtsb0q9`A zbKTVE^;Js8_C8#nvdQn(W+oneJ(+-U+%Dp(yTIb# zKUY_@PNo-jDisvqxN5LxC#t@U(`>8^Xw8$mM8!jwGb27e)hk?Z{vwGUaOlO#^=jsl zlyCx^bs|kS8s1Q(!W+9u0yZQiK=d)W_UxxGAEKB}CRKdGRtaH_a-N6L@e5XaB#Jvm z4Np#wPrrdYJkz%iDO`O?o)XK3)`8tYcHJU-tDByeO#eq*BA=Nrjnl7}(Jm=RovRFS zlv=C5RN76rmsdP;H86yZaDt47UT2Qdk2}#yq>3{pEd}^@B%(j#>CyPN0NBb`zQs0sOGm1AoCc%ULh?7CiQ#9+ z^?fcX_iBymnNI`SE+KA#q%*_19~IdyAhAsPx6@mFL!^rjjxRDAFTQ*J^h2ao}9E4G>;A z5*Cr%=W%Nr`a>mU)+F)vz*u=?uF}ui(dGP5KL<)9-t*K}Zfz|Y0?<20YV8%NmUL^@ zONWB6ZpFs2E!B4-j+!f{M<#BPYndJmZ9c`s!4g$c1&6!&edO*BHM=@`sFX_1N|;T? z11@Zl9G`KV+zLI6p(B~=))b?Cd30BQ;kZQXB9>+J-+$3LK0W@r3+?`{VQg(fB8BKh zP3TLA{SBz0Qm}Hy6X^BsGB}LTFj46UXuoqixMWLbL1US{T0>hi%QQ>L2-z}8z$s1% zaJw+(P()iR*DPh6`=y+eG&=1(6MeW#KdGIa^a1^}v?Ynb#nGx_>c~T7s(xNb=}Usb zSpc^t7nwTxri@Ue)gwo9ZK_J_o=$mqfP1~lm{M&X^XAu!YoK(_q`<(lf@|U8R^Ija zfqIIfp?wg7rF{@a>o+xY=PVbV5$Dsy0{g);EOXEuuD(3jAn^3MyH*KcDt2Xr>PFpy z6h!!+*p^l-1xHfuz9YS*SE0KkfuWCjE?AYvc}5Q~{^5G#$%`Itf^(E4b#=Y6y+H2% zPWe`5c=*d&A20@D5>i~AYxlWfo}n<>qFJZ%MXE~7T%Q|K#FtGj#f^weU{68B3o^mz zo+oC^I!5+7cQBAwzS;GX3o%1V?b6&&Qkh^bn=Y*wpHPH#eeO}&a5H4(OD!)vJhLw7 z2*r)CN&YF~*r~={Z|3fZ(bgnaFB9A8ooUW+L$gJa4lMJnIGxpXk=yVsE$e*16>F2YV`2 zWgxD79MEihayn{Sf5|j$UrZIKq5sjhXB(HhX7Q%#=QBQDa&;v+1wbKo#Jg(JIvHRUW)V(897Q&!1T^ zZ1p_Hk0Vt7qaF*JaHtn1>kHe@pauY>0)dxD8G)!1WC3n&8X4p2%#N=;h`?MD=cmp# zBN~z5(ZVcu)L=!`X1Z9H{v^!QsoBcMIeHWIg7Gvdr1rW&tIgJJ#K9HV&6r4DtmWctuQ1D&4G1DVy9g6AlS%KLDLkl#0V} zH0?U+`EJJ*UJi1-u%C9$VTFYhq6Z_>J)j0cKbx?ML|`zHj_;rH0aLcxNYug zg9fzJ=#9(YBOkC|QvSq-H1EYex5-q8@YsnO411%++b!CLjmhI%^)jh?*ZsW(eR5hq zc1e~2aaz_^Ko+!+d+m7Mmk#*Uw_d5HH+jWlm0o^P?~&d6uE9H!RH&0xS|dHOI!L%?a#(4~Z&vgjy(=a|r z_x&3GfhTs00-~K{iq)e=NDgWMA@+as2$6C)Hw@cbliq9w65>3~)2i4Cq?pQ$StSuG zdNs5BJ{b6~FT6}cSuh$7QK4A|yd~2SXYX;FV7W0*^@&8;_l#^yu9DyE@?M^nr3||< zu6Z2uKJmu8)~(I~w$Uh}_`F24E{KGMft;wpgaiewA|J%8KA1lmZ*hK)MG7Bn0EH^S z4#atYJ33UiPIGvBQP(c^#=T6t`3~Lb%IB?7&j0R_N;!-zP_ozEDNb~EOSaXVgXMX{ zMTN-ySrg0sWkCiHqP@J5#nZtWgQlKkeM_<2s1C@bPEyvtch}VXu`8|K&8O}g$aQ#A zf}+m;V9qgqH+XHA{F3WYsOg1s_;p}=Wb6zr;QYjJ)%*S--N00BtA)8_h4qnOgV#Z> zwgPh$MD0=_TT!ufV4u0!W-vnk<4DcE#6eK8{C@hZHS@Ue;v`^sFdN@b(Wjz+d;H}Z zkrbdX0{yo%oqFOkx*dRVxjXs&L$I~|-bIbRnjMx=)ZXTBh_RdbZ#9@$U-4^0MUYjX zsDVw%&yhXx%6c4s><544Ovt07mX|hW9*&%zkOPY85O-6r3bcUEm#3pvb#-(Dx!M_@ z_B5cfbh~j(=b6A4T}@X$W9PsYXqo0%HxuZ1Y%wq!0=Ie%QTeSld^e(AG`He9EaozH zcNidLs(!Yo^z-oyy`=Tw!o~EM8qlp%dJ2mdyW91EV zBrTOKNVJFY-!)^+Fptc+8#pOQ6*rfWxj!qzWt@2RL0(rh7i8|pwosBx%9LR<_7Y%j zL>6^Wgoui8XEQt~o{6adXVE%vZIzk@?!HF6RN72hje*M4n zV$eNCpoHx^q6b0g2~Y!CWikJ4nLY5lBM*w-UmAo#8)a(sO--uybX13>G+f;!9ov;| z|83XG(=kW^<(;8QZM97pIjc6*7JUod&=c_iz7rS%gxm|M5aI$6+YL zj4~7}5&9N$mCXF@xADED@p`tJ!f57~PxFgds%Kdxt}WAH8+Eib&8wlf?H}1}7t3VylzG3mcMY0s#4Dm9#xM+Y+rRIXbh1=I3CYM%`iNg{)8O zaD&yWc|N{7W-%N$ONl=^-weccL-V%VV|af0R2+7oiwS0qM9|&9vkH9OwZx^v=n?n6 zVwFg#1FBJUIQ4fj;iY*AW=dDg(GdOZA4AMg?QRBV`7m5Mh8w$tb)n~{+#X+(EP(SN zJ?4}p8K%4v`pTs4=2OCwm#ZvhJB!4~9kH^P(#UKDyb|?KoMUzz)_Zq{d^8ND=`UE$ zza{dp4NTkLj3aikV1qAhIkI)kY{CiLwe$-7#)V1ZYle);tYdBd`}{`v@__L_5bAEX z2ZuHaT`QqEqWPIeyR_}90r**HX4}T(s@&T;Jd|$`L7$>n`(T6kTMe$9oMYe1+efw? z5|RNHJgS8^1ixcyMkDUmNT$H*6gx6@+DDul8)W8fn@>A{*lLf6KVqF(L}X zf9ema2LT1msy8? z|3n8l-Cxc{X1ZxVPx+KPQ#sZvje@p!IJXKq2{o%*sg|;4-og3Rgvc~i{Ww2~Y}Vyf4_NN%mvjkNKFO%}|<$3&E4 zWkwN&2jPm1Y7SI@(D^^6`}J@Z zDtO>$Gvs$u$q0nA=nn;$Iy#a9P43y0KRlYmQ%8tJRpL*tV0mK3zMl`6V^{WX_l|-q zjJf}S&-rSIkmm70=52J@b$3vMk7hyodzT6?-M4EdjkpV*syDd=-3;bOR#RF!_S<#_ z4kt3@o-6s8^-vooMyU_Po+cfdZa1TV0s|zUStsHi&SHy6C*n2dQ>#OH64vxO6?GTb zZ27j(tcbAJM@-!i&290$5t`K>Rt+%J&`gMv9pL@@gBn2ywHp@y#z)>){_f6JLcIMO zuN!X&_Q*sEYESL56gQfx6~6Shacs2pNF=d&L)j81Wag>wQF&m5pSJ>k`nNm45gO`o zUYJhT#ua=n@zO1Cd`42uF0h=i^B^jaFj5-C0~T%WF(ym7wQ;va(8OSz1#v$IEH#H& zI@bNO-mACgg%SHMzCTf+xV76jU0rLK)1tl)q-4vJQ%quO9EABMdtqSzfA z@3>bj9)1t6WPVg`{l$soq~JThyB!ji8=Wae4Ta?;(4soJ}28Y zAp#n21FD=Lpt1s6KKCpl2H`pUH;&a%5lM>QG@15D-qQtLlJV^Zd0&qD2Vlwbzev+P ze{&4rpI2ngcfK5(F!c2_kHEsJN%#Fr6fSsjVY2(s8{LzcO7oq3p2xHrzAgT`L#Qd- zZ0{h=d&h}Dd+9DG#h3biEb=Yzmt26~UK07Sy7QeM0Xd02x4a{hZH1n7)f?P2_mjSl zGWZn7VTIN8rF-lY#%XbBnsVwYu?TM+QTz+$4LrjZ?`{*~9_G)kz;t)Dwf5#+*^4+9 zDiSyj)|tq+n2~Rwbo$lYt{WTo>^ZNVw=rhTS|!!4NA4a1ya&2b`~bmTVh}c8`}@1d z|Bx)z(bmFNTY@-^#3c1sOt`JI9*|{w(`;hUSkl%pSDyHdY4k4Q$j0Dni*xamV(L|J z(ovs_N~gjR_O`uMA%P@Ui)uNuTJeiU=CvM2?V?Gu)d36hQG79*3tN-?ZZv69YK7*7 z8b4CPxUrTuU?<}vNBpN>F3#H*t4=T&+9=^ij8Bl~kcsjie^0L5`qX~#5Y}BK-yTgG zcGS{}3zL{j3Xu*&jJ>EpAqVd4{%>4uCU`iI;zol`|FnXeFE}n(e)g%#mUOO7^_qCx zopTGtlHY;`S@)E-J_Ip z{r{WAUQ(wkY5AK%St7=0 zL!z6&F_E)<;2J(v!mvYsoQDfDYLW6~pm0=hv>Y`Nfg!lcoaSOMuzq`YLC8y*I7sxH zU6oP*-W#}nrBD$EI$+yUQ0s@j{0VpEuea(U^DN<B&9{+LuH)fj>N1CA4g;;S!G z-w>^7sKcTEMY^`VQ+kwuS7G&c{pAgg$I7dQnj4E!G8S|}Sfhn0k=|O(GFexLDnRo> zM~#i6n$zSY-XHRFPRuhG7?c?B*#|m9cLP{HBk z|6{|BjTk)RZ|F;Ftryvz8^k`%gfv>I-p4cl=r4D2L|HgFgy-DL*Os1Au8(n8(&eKb zn?;9*p}Hs^UrWg9=_w~*>^+J;S4p!iLuBHJw6;?!Je}z;w{n!@0UU{$5$Hq6Ah3X> zer^kfEv2IW{b?ze_L;?eE%Ozkt+kqd=7N&#I{hrNzH=JCoAIoNpr#=Y zgxoWJFMNVh;253`Q00jLdjEun%6o=R=k2_&#EnQlszZ9Z(t*KNpY%;GALqZ0Ifi_);9`&SIzsJwrJ zXjH6y@uYjcqbsjvdV+r9psUCp6W`Q3v4+h!?PlUZo4Ghi(J2|w*2s`0BuxErWQhrPplPiz|V|x(zmpKb_`5-(eEKy|CHNSu|`g7JM-hMkL_lMXc z#}EciV4z}37t(_`-iiMe7B#}i0%%4~6?9lPdvj$mTtz5o$lLiC;K56LAiu;}^pL#W zwa#sq@n>J;Tq*Ga>diRg(fe5V!ZasYFnzHwN3lsTBx+ zX}_08qCy27j!l@!+3~2*b@Hz*5da24y~=*GE;aLDU{SU9kME5caI$YS<>R>=WrsB-&n*H-Y2 zmI~mNJ~nwUwDZa!VO5lap8>z^+HEG;EO(bk+7=DB`9su05YB!S@b-=Z4N*v9Ujlj6 zL(=LVdk|fkyC0fJag7rYAbsuysA*i^ZWh4(=aF72?Q`xb*H9D{y=J58V1ycp8d{5S ziq9-p)NaGBEo*OS47V)woydb}$B3ZV-1@hBUZ{_~YbwC6ihd3At_yYW&Z`6kp5<3& z)_J^uDxGSWJurb}IBt>xm%-oI1G45xY47sH5Fx;+9{RH87b^Ipj0TmigDdn|DqO5) zggp^vr%zP4{=)W2>rCb2;H+FI+(7}3!RDEqy^w8vgev-p=;RV20~?WppxjxGA%@iC z3RRkj<23U)dCml6AD;!TzRTT|1}XOq27<{-`Z&2iKLNnlj4&-hMjBJrDJvByN{gB$ zA-)BT(-hQNL877)P*m4+VCvJVC0w118@orQS_^>Z&`sZ%wmu6e8^$)+o~f<(19O_I za95Ur$2J&_cVE5Uf`uWWa(Np*9#)KHHhA{XsWk-(DmuisF;Qc;#lAp23e` zrNN~|+l_MS|9SiX@nyy3aZ00%`(_?6COx_idRzS9oe-cmpG)Z1cI`PBhIyt`_1Drb zDz-)gD|6>E8}R$+D632L&s6Ib(${cZ!(HNODD_HbK;~W!6fOoYMt*}Y!ITpX7N13n@)XILY-4pRlLYiDdaa*W3}s=zK=e7 zze}B*7*;EBtzC+o_OK5{d_p`B{bm?pZ~gIm)$ARmKmVhE6f=rUj)EVU7fe4VQeLBv zpKX*S(2REcd;wsc$W^|pA>n>)9l*X1jHitydGcQ?YraAP7^)Q8 zBKN`jaDN^MZP~N^M0)S07@1c8*pnR6L0b3`fyoJo!+K&?a8-VTu$_P%oAwS9O&#{H zS#R)`AQ{roIL%rio5y^+rN;n+cc+w*!$oOCjUO})Lm(Ku>ED3&zvn{P^gYkLK|;5A z`KH6}1X&nE;9!IlD;9*_o1;mpFku6#ZZKQ7oo7J&V^~2|G_;6@m6Z2o3CN@T+W-_T zA~h~~sniFD>XHa8VbUVl#C5n#C2H{Y!y$Sf(qcaq)pwbfJ2>uEH;b0QQkO|xoNo4f zuW}8CmZFDBbbxDg{0;L5yw_d((PZ?){k$a0-)Fym`xQIvhshiZ@6UWoIxj;aKFHBU zUYC!N8e{`LLbt*wdOybmb4qjrppbhEphc+|^$yE<2Cw=Vfnm~V8Ztr)BvZsuB^?w< zN$;|pI9~m($!(geX*>4GEde?gI$3UP;E6(u6gx|=zKeX`1e^M0fwD&#E0uTq1?UP` zU!CYO;-Rc&@G(Gk3=ob$Gf7nS^!?URj`vwyJ6?jXygNFE`!p2!Ay^#P*Qvd|DQx1_ z)a0J=d_7*9yc~Ub&o9#cUg%rC0fgIy97&b>2MM3Azd%Nnf_ygb5AWcAD+&qZxUsXl zFXpx9>mYPWw+jmylOdCDNaN)~`;S1CFqwV=A^x2yj!iUWH8D=e`IS+|%jfjbyj*Fs z8^SpW#-$%Jo9ZsUsX%yXEfai3iq$DmBua@#(YwQ3oxO&wrN>&G%srDrT}gRpe_wBs zT#`>b5Jink!>>EL?G6`7Ik=#tB1iE0{K$8KJm9%S*?>ms9qG(hP5ll&?qOnZL^|R) z7aa{zy05oybDR64Ytu3Vr$xcKIwR>|I7d#yz?88)_jBN6KX6JjW-iDw9zo#>HTfEg zpUdJu0X2k@Yr^&k6eCaG2F3pwO(3mQt7&{qc)_V+HeDpYTYHR@d5AH6HGhGe?n|G3 zy`Pq;2gAJf>MaLI$O?%ekiS_uLht$RtMnbstlmwO0!odi6swlYSA*>VWZ|=cC5a@F zH*Y_M5zFD{G6FxSG0_ro?D_?W#}X2}Bn#o@ycK#}r;W3rlg%Km3$$^w;gq8$88NM~ zP+agi!Pn!(tD;oo?;gumCz3^&1`5Q!zTGr6gB(xQ)_3(H4M%Pm|9Zc%V!IR)`k@%1 zBHIG_Vy)e(bne4-(rRr~?Z>78HK<3ngs1t>q}gplP2vE{M|SZ)GbLme7YhKEbSezS zlq@}CX6{OMMOoO6q_{6k^=TI1LYUsVg(-oo$`-Svdq3wvv0R_G)3$1P{VJoswA8Bf&e&Kn|^DHV{0wq@ES*x{ONAyO|@rNtv5(h-jq}RgcIX=KifnJ|^U>K>ixlHs{r)4$+AMgzBeI<1$Hsuu~{0Wgxd& zP3#ZeOk6<%gqO(c(2i`$>&^gT5kV8*i-QHWPF_olAaYdEp44A}F)9>zBWYQWI@v=d z)413}U%s#-KnaM}<3PczuzRwUb5&i0RQffnX!A8JqBUFC4J{ag7m@{)*!s)m4_mPv|oSEygV(M zA>$@*Ub`w5JZ2SnxTiAC%=PQ_ZA2fiBi@eM*B@CvXMqp2OseqAdQ@0yAD>zTDQx-9 z=aDroao?3~+S7X!E#xnG0M$@%HiJ856X9eSCd7d$k8Zrxx}T zwko!g)7p*NG3tg9o|m`_jLJd}NzMi8tagxWIy{aZ^m@UU~8geEy<0a;c(%9 zKV9Y@lCmR51cFXhg}B~SqtTC08huj(!ztZ2^!5*U0p#lNrbm);Waub^whqS%A}{QU z1*RGD0&IiZGNY8(lY?$uiysEDh6X5e2ZQ8AIm6D8zR6uGpZzkReC)M+%BkYEeDO); zQ4lO0i>MpQC8iBL@D@;IUs^#lQ~*8bJ+F-DRTn?hj*2kH^|=r;^l(;8*XClUM;tYi zm!?Jq12$Y1Y8e?6w;h{_iX>nn zP>JiaPr9s9gp?g#{@8X~BI?1bzbB!Nv=-+oW;OCtQzTC}W45N3t+^aKy8H+HK*}M0 zL7)q-VqIOV2Beppc|vhQZ_@fYX9n;s33U{Zw-GBLNMozs%9pYh97bAIcVRo^8iq=P)xt7>6uAsG1K&eYmGdYg`~ zyE|IW0YdQW`nn7$ch+hV-}&$^+*4VF;bVc~f+)SW(fpT~ zOh@v{j>-`dMV>U%v;;m1 zT4`r!Yu9wqocA)KZ_CO~nfz&u$liXFKcnx_r(^WXff1GyIs69zLXhgaKf`b9IeUnM z>qz&Tq#SgRhsj@u=ksoE^mrMXv!^cP?VsvW>a! z*+8GT;8nFf$Yo>}*Gpn0^IA;o0uRkw1-l}-MVKUN99}BA-{hMDOgIwlhuhfyhR$zH z;vVxEFr1V-Pt0(6^77szG8DqVLFKVPXz@2h#rKH)K@O3L^_I_4jN9qqi*7)Qo{1%b zJUKB%Voq$xnMOD#yGd?#v`ufm#r8*V^O($@b_IN_>?it3N)~EVZ8=d8LI|=kR(Gee z#Nzn4T`=)dei3=3_kc6_s_6c#B|J`c(R=wGAXR)zUkz;E!eJIfZpzP9UoFMNSnxe< zuCS1&5E#FZ_$hAq77`f-VI56TW=VUlo_wXojEa$3yI4qNV6a#2A z>r;X_!unc2gV9R_tC}}MZ>nC$*2DszB9rKSg%yVrsY-;OBDh&VjVc&BaySre9FYIu zfJ1y2Q^2c1`0U5vAhrPhwpD4%Jx_DQuQ3X)(6a_P)Y;#z$x`Iz|JYCE`i7ag7Zd>v z)70;zxrG*`%%7GSNAkrNmyLjJ@nS~C%=7vm%-5VaQDw{Q)Y~VjgHK4)gf=`3a%+`r zDCZmB`U!~~Tb#S_%oVKvw-H71Iq* zg4Gj4YbXxsznS_`;k3ca2UL+S71(@y70F5OqUS0`xiMjP7Q#LZnZC^7wHCw?^c(z2 zcm_e+&j$e@$w5ue&$Q}6r4my7iNiUYdypp_8DEMFf*Nniij&N7BHmQm?H)N7fTo6% zD+CxhGpSPV_FSAmJAQ4?Rgs31*0QvDZ~ z_)Drmp)+T585{_!b?y?ocG^G69GT7|0jo~IJ*>P1erg|XR1;qd47s9y5jMv`V?*q8 z!3g`y`8jQGP!>tE{XyVO))YRCpoU%Fx#n1mh7qpU-`oysU6T_=?2=4&&5FqY(Qhdx z_0!qEx=ht2PZAlFEREAs zEvNLsUwkElSKnJXO{z2>n&F#Uwn+{3c3efJ4OFB0IoUvG#Z*C08^-O}dhC5Kl%4o0 zP4{OW#vq0^!uD&KB=wO&z?;t>ojfIFzTiVDh$T4YJ@1#!^ozF!S;&&VAoJk0`}f7O zqWsu$QIr2w=t4b6eze@$%4_-V7uAW^RPHhrrZVuP_&zefa*m%IM}Voh9(q~S)h0qhs^U1YjUd_FBjYYCnIXsf0)PpE-u8L2qn_{)p5<9qak_e z67V%OoC8ttkU}Y;g+jdfF1{6i^cC!K-~Z!s1yO=-E9EbhPcoE9K#kf4gBKCvJ{HVe zG^R|OOQtz@(?1(6)5B5CTnrI3UvT$An6|~* z7B!*eTzXflv;l%f!6R79D(Q{0Q^w8TC7CCT>h|F!DxD`|N8VK^&71Fd#UEyNK)4UZ zIj4r3sx!qqxKUFV;MT7!{{(!-ID#JccIx;2!9kA46X?HkkusMD74}x_0{G{2(W%t_fun6_hfXjO+nIrXrD5`5)He##v0G#wkH<>AxKKSIco~b zQx$lw&W)mSA&A6LlO^eHTR7f2&){!$#RfLjxn<~=~?DB2Rf zjcCmhm!$NOno#~9=Ba7)cJMChQA6SPFT)j27u~n7w@$h^h82}A6ZX2}H8wIyrJbQk zrte4Iy4(q`$ew&ov)=8yDm%mk!CaX4ttnc1;4*%ACTUr(!?FWkRDP2TqE2E_zbV3` zmR|%`M+LefAQS!Mo>(8N=DIP4#8l(;zQ3XR7Ym0clwERLr%5u=walk2nx#J%G1EMo z54&&oVAet$m>s{nfU<;%$7>ug>7gb|6?ca%TaOK~FI!K4C;DTsivq$&IsWtBo2IzW zm=Nv8nD-bKu(X+4luhp~CI5)qI00Xiwiv4p-zK8aZJ69YRlzV5enN~{gr@}cIoWtvFr#b^)^r|TGC0Rq zJ&0rQ)2mk3QJ;RftgX~?h27X@bIR<)x@Z3DjggyqqK}RSfO1*`@IMzm#(&FxSP6?Q z5%Q0F+|lXpq!%n%YcM|ss~i)Ar*i336r$(>t%r4FWD@!8_FMa8VNj@i#W^o~<09R3 z2+7#qU|Ytpd{5TH*0 zx;if1K?#5~5@V^69@CDhWX9BzancS26&0H# z--UNEKuIvdR&W#QZwydohN|C5vt7{DAIQXpGjnR}UdKyhBBg;|vmTP2X;%Cbo4J$4Wpthw_fyM2^oD!5mMrUMz9{22R(6x`v z&wUvqX8Qu+|MH0LWhbxosdNgF*T3o5k1iO#P_h^^Qf4VKQj)lKBZe?`s!$bmv;S-A zeH36*$B8cdIP_e%M`q>JN6{QB4KK_x>5uO3d_8Q?7afNS0{#Y>zz^7F(E3`@{l&D@ zbmnccmD-b(ph*Vgc!c@7*g9TT5t>R*D#~Ba3{FyftGK$;fcLOMKrSSPPl|Affk~7` z2Y=UX@rN*NHKhtvip?Go%D>bOo#{*s%fo6PsgPLr4Ix!5nA(YZ!Fo4MTP8te6VAl` zp?3CwJlKBwrECt}jXe4f2UNwBz(t9;^^z#cHaS`dPt203Q5ex?Br2-1LE6;>KX6VZ z?%j-|rs$mLpsJWO_YLi%+gq8qf7xB30L1-pMT#_{O zQbZ&y_{^Uco!6Ps!@G%F{tsxgu{b8CFn{!BejABp%kj$36(2~wg;*L*xk!w!Kku|e zuWGGbumjGsZn_HOg@0Fia6Xqm{$SG;ZCzItJLCR3l}v&w-OOQlNe#mA6Yf!fciu80 zqTI%Ap7@8RRb_8h3y=n&13cXN%pjJdU01i;l3nZ(>4rmFUECJ6=eYz+eeRbm?Je@> zvaKE8rCz|;t?YnoKxe-;%8HQrt@v*Y_Af`GVQWG;7ZH95O1jRWrv%|`%{ zz7h%XU}PQ~+7wY_eUl*nFJ1)v`aWHrbNu$qz*8C2USl}tHmuzii{gd|3Wc`t=VaG< z;9wAu=Z*bC9aHr-Oz%4-j^^gTZ?`nH*81emRMtqMW^l5Mp^sQ=x=U-6NA4umGdE=W z=$Z$&IKm}>Gy4<2W}4FV25ewStLmpdB8u`Xy~-MaD%&K$X*Y1J2_R3{53n(~SVl}l z>tpY2%vIbl>}2KSy>N$J(No1Unj1QA&l0Vy@PDX_{!sM8jTlwfs9zQ*M(T{U1;hPk zEA9Ayz)Q?BHQGwsF**TZ9(?Esci`Bm!f;6r&jcYlewgREZbVe6^;Y0d@Dth}DxtBx z(Tby;ju!w7BuA6>fPa51Ab{|aYiolGIcZgqsy&Tpvr6mo z0^(nQ`_`KqwP)$ZP;f|6AK?G;fo)J(?yGy441%)?;)Di0*^u%_Dq~&d>OcE~HaS8S z1njVtyeN;6g2rZ1B=K-~V-{e9jZ~9P-i12hD1{k;6q=9&!QP!};sCMrz3(~z1(sgR z;;DP};4<8MXwTgt^u+k!73%y(nQT@^oGNEAo;dYy=oxyJ>Im0sof6D27Ur#{q|RW< zfHNG&LNMl2oluWp?2~6xT@jUD-pR8GF13h}Na*q{un!gqEYn{y1Q=FUR_>jC!22x; z9SDlSy<1C(s@Nt)5l)E#SUsz#(=q!9rX+Bw1C=+8z-V+>%}V6+M6>pNRR|xy?dw+B z&DJp7qoVNZMssl67{fhoK3T?bXW0< z{8+ILGe1JWNNbZjhT{q&J{}`}v*e@(?c4C(#>bsZWFG5lDgcD&M{ELx4wVd{4p3>N zA{@_o)3vmNf@XHf^&+M5Sk=#m}04KNCv4Qt`oqiT_KO0ue3;M5jK8R&FO1m|2 za({yx@QWsXGSzz~R(31D7*>nJCb&4z?53gz*|bc<)w*TcmF9-)%1l0U#VVkXix}oP zSIg{v=|Aw<7eVuYxJK~M=heCJlQ7i^O3CYq()icyZ;Adsk+U;ae*R8<6XtqD6MTWc zvQk`n3h3jy<*%Alk5X zOSuwgc3`Sx7keP2Rg9zcyAl+!y3^xHfRG%epRGD?Bq zBqn$mpYu}a!POwEl1BkCqJxJb3N2M|HE1Xnt1JE}4}>vPS|M|7ToVn8%^r5o*$j&v z0Hn5*_>PU!c#h8v0J#-NJ_C%o8FIha&Pl7jrSLRcmx8N7EPn|n0nAg*(Np@2#*J4n z(xlhNDSDXU_`;uZau3W*r5IE*n&48<(R@v~JbA~5uA8&@nv%5-YGJFjIvQl)x79dI zjj3HMwZ76e|C9+z(d!9Tx52t-hh+Ad3s!&5$X2+{>d6GG$`Dwlz&hv**1>d$os!zP zD(cLEKQLvFc8<7i*g9HbE(PCi-cTwE&z5U31^J<5cojvQ$GV)dN}6st4qUTZBg&cv zI7&;3?Lr9zte)Z(t{C0obz-4;ZX~5>hFh;ov6Md!q5m(KZm>8&4|Ww5`gECcSOQ42 z$lc6|>ezB|p}&+Zmh+dGEF@OFQLkw}opXA2iXGi6o(%!D;O_`mvvp)x6PLi7q-aQJ zN_QwZ&y46@+8EH$dbG)yxAOI|D`G9mub$xrNJWprHb*4M?)&;FY=1`)b{GG--<6U1 z^MaQxtSm6=A5U_za%JaN^?m_Zmh;%yjUoGTos~WjEXK5R!gx4eg5>`zhk2z0V@J7F zlKJI_=k;73#h-qeX9L?v!1HsGi`U6C*U7YCe(mL{un%9^P^%9Cs+(Jz`#hI(tYF%} zFPgqA)*lW6Tn$>@hb6U!>7`8jrETx zwlKZpAJJe0A%`3lGDA7SKK=^>b7W~#jmg6!lWX5(?GE3md?cw^@ug?-h)sqTHdCNs zg6?NvDF^2%2oqVy!Fh@tDOuu$b(H@gR~-($(NZW5pRZ&L*MtRb9Xwd-4>>PQ?Dl~>T+-$L|e$u;4lC2QzOlv zyj*V)+DeA6xJQG1(OVzdqfR*?n%W4HU8`UbLBa#$MYVNuUZWGF@*uV^y=?#;^dCQW z-;q4>-krSSiTXp6#;eyf=4YRBw{@FWR~$t^^<#n&f#%wfrHC-!>S0P_mq*4X(i`DtM9gDP=3K| zKj7t}d*P=j5hJB;_hhlB1OedV5L!MhpJSq5k5^dXf}Pm>rduC`ZGjnu<%&&2$o9}B zX(6(BbVu!vBL7iB4~GWX;jENgc`2XwYZ5BTL-N#OvUtLc6zHZ&dIObK;+||C-!fp> zl)n_qa{gPFgN$h1-XMr*g%*2{ch8wIiG4IM5JSQv3_y-E2)i8eNzh8Fd<3U>w|rGC zurA&$aUBjScbc20_9qiq!QLB#@sDe(jfzjxn<(nn~q@OSKkN07is zwwaYrS7xanXn7D5#m@i}#e4pWliQ?uTsR=*iTrPAe(Q%ll-FUfciPdFUtAkXxJ}0B zHBVIPnWn5*e@WnHf(mEZBAdk3<+D>gP52Wth8^ibtwZv5=WLKj*kelMuvobbZ2ltx zt)27Sw{R_K3@%Gt_apqv{`Gkf(BdiOChh5Ep1TVB7|Vk!%rY8)?qBP7`M`*w_kH;< z4JSMjJI$DHMi#tY;(94FEK03Ue+Feg=oK9-wS7i+bxRp9>CoL}Y{o zlb02f!V~W99HaTT_lzHU?MeM}Uowm8Y~}w6U0d8i-Gx2y4h)PS4tq@gUeXK@$rvbq?qM_Jm@UkgO;=gf7(t_;lYSO zA%6EiaTT+aC)k|7`iY69z4HV=JNwmdTWlK-(#QRy;4weNn;9q>_rOnoJ{trL8@%E2 z0<2m=h6J~G-5=OMBNl!J*mJXtzY!J$Rn5i8G%QmoH zTX^h931aK*VnMWn*<3V2HsPQ-qE$`UT_~7yeWv7ev2mHHCU>wX!WWCSC9Mb-?imh( z%EHa&wS^>$FQrui7wR@6Nx(FbGz?HCB9L)mLL$Ux>l^>vA5u#jLpYEI7B1vHxhIXU zWmbYp&D%U71`E@MsS!1JJ%zgXi;3yrMJ+$%%C5i)J=4s>#gXt3NJ-HwKw4L##w&e< z!}tekd+$y}Y_sM}^d1yT@;{zOfNF>levD4l)Wtv1jheH#(CdIyfXuUOJq}6tH~E+C z4j-nJ6oO+EI?E3mo$XFM+vz^msn(V{iwbuhyvrpaqnxVRDI*uj{|Igyl*evOcYTCT zTW)p{$QnTsq}?W3dFH}YlGDvdH@Re6n$%CJJ(4=M-XyrTbs@HHR!EkGqPYBHLJ%}o z+B90o7bM_BS&Qwr3LL`-LGeLSk$jVoicNzWrKD-fSd7cU{2|v<682n`K99cHYmhxx z6=0PkxE-!z<6VYZE1{Bj6`c8hRJ~aUi~C3D@O!P?_E+>lkN3G??WHSIIj=$&?E*pG4! zsGB%>AgXKXZVK_A;GLbpTC@8?9!(itQr4%1pGVX{EgBFc{PTiwSL6&pmF#mq?K!l< zI*!i=TCfwp>?<-FSNnRjreP|@G;&_wEUW9lf&@*S>anODpu_dq!bXG= z4Mj!+3xN?U51Y(*_lsH(h?+hMTuBzR7x^#Ua7DtEuN1XAsuC#m0Wm>bmFoK>EoPwK z&E8xT zFiA4ec~9{zkfu(+gNQO&K*6n(?Z2v}DrSX1Gto2oKr=Z)tl)b7X4%-!05QP=ONxco z6t*Ya2;}m2^xFNTublsNY7tX3;Qu;Y{!!ikTSJw$rv~4vEWKVwx$PN!`zJNhRBxL% zx4!bkFLj*0+q{;TBH8waa;=EPIl#gKBv3?i%Hl|zMzaT%=xT^TZdm+*QjaV*kexpI z|Ds#x{yc`LJ7sA~ff4YqVyCG~?XF%Hxw9wn)~Q~MZLU$-l;@J8b4iD)x_DFcQ%<$n zFU3@r+qqBPt*h7+AEm*Aed?-Td4>+bqY%pz{OEX=sY(~~3VCFJ$2)z5Q}X##htqZO zkFbMx$(BzBU;l`Gf@8S}?-&x@FQ5?dAnf<#v?J>_Q4YJ>np3@mf4Cnp7nk6_M^EJL zt(D5HuJ)s4F=I^$lwzgc_Ef?;`K(eutm#UD0K)MNZ_He@h%TgMs43_F zdQs84!V40V@Ov_aOE;4CQvMgM$qd@7YDC{9c-5sIG1w)?HL2F>%BT}8zmsFMs5_5> z-80S#mn-%K+CQ2kf!qcTN~h1pkx}vE+6(85sKa);fS_!uB2&^z<;`kBP@E`R`SfRX z@rkOInx-P8_M{>jh)*Aq*!UaT;3yV555|F1mKV&Nh|eup|Dw^IVk}s_B^0Qj)tof{x31c=s^_N6Gbphtxqe=Ic{9u&BStyvn zc}xoEAT}`{fwsx)TuclN$MisU9daZAP6MQTVC`wmv_C}!21vlrLScLYo@%@{(~iWc zENK5xgNn^ht)kDr?I^oMCQKQg$jFEf@WW*kMMY)3Qh2g^;xvGcq@`Ra5)uRSdVa~n zL^J-+{lq$u-rrW9POVq*mP?dXIu(EqPEHzlxP<-lY%*AP>ulf^&%Kq*vq1`C5KoEd z*&r&IMP8;`>MF_E&Z*3;Y3WPK>xTdSJZWFcv{}y^Hs0Y0Vp&DN_N%_$)>_6R%+k2U zK^m#V9sI1J;DYfVuC!pmEZV-Utbg-qcP5J$X!oa^63XU{1(YPu#I{YqwD}`ecU7E( zh%n6;wM@|d_h0fD4gnoa^WdDywyt8v-xl+F?W2L*^6l?unA9kShxi)7_efH!OY*1| zPLQ+l`Zxu{%ZkzajXnYSn-#Oiqe%r&=*a zC=Xw5Ubcur=GE(@I6Z1wi7B^hR8R1&2hXxE@}D}$T>Wo<9XNd!E%=^9iG_N z<=WbbHDfhA7SD2es1WPBQMtF@swwM_Q0Mu@^GmDHqWS%b@m4e!tfq6NyMD~<)cxt6#ooIToWmeK`F+nZs4dyFEP0;_(oBSpK17R`}|M2v6|bvzQ2P^ z(Giz;O}Hw{l~8HJQ#{%d;I~SQs%E%mx!i24JI%iNQ&MqGZ1eeCmvSOaQm-}yc=xFO z_Q~h$>fZB$H2wEN@|at9aOd=R=SrtQP(VfixY$fudtqE9>%CY+xmu+aNDbX9JW@-BeSqONqK`(V&&?sWq@c@e=lW zWdBRi58tFPRc>|6s2ZgI8XmCQ1ok6AZ3mZ2C;6I&%{P{p<&W5>Zn{fHQO_lW`4rcp zmj`KN&)L(J3>$Tz8k_RG%LB3NHN_=Ic|&o<-uN|*horeY>Zh%@!k!|)?Mr7XmUy`k zq-kTvm}W=A=yJPe#&;3g>%uepqs2W5uYtMr{T?RFMZcS?Tv<+V>U`Yx+GZJr>o1Ij zNU!b%JxE@p=pe-p$xV*Zb@F4Z?SFMJ2iJYhio@Ib@A64%y?1XfBPod5!XuA0h{b*2 z?&OFf?RD{5fq2KaBH>A`@g1aBX8I<{yOB<+Tv-9D+RmI0X0oH(Y=7w(fUQzM#eUr7O)eETrz)=Tt^r8fugY zY#vvi9p|R2s9-uae4|LA+L!+{B|V8ZorcW)1BuSue2#YsV~x#2NxLLRhbZBGmnJZ* z`|3tL(|_X7RL5&3ns*HF=3$B2SMKb5bpOB{{370gjCIBHVA~2p1g^~Q>$6yzSkq-^ zDYnip&Po0-2h({!oX%W-X57ihAe?S9!IyS zn~l~a;Qi%gIxFm6ZzK`<D ztTb{*rd~5W7aZi z2&>&}s-W1C(ZapHL2`%}-}Ef-V9)?M*QIFh0w)rlDaM&{$ZpvTx+Xd|X41ZV$!q1| z5z5{A3H;o0^gV2Q6?XQ`6UxhT@_h%D>Sj9oU%prn)`gyruzst1v1myT&3NEMvxTtD zmHx*2Vp4FNUwRDTrzk2|f)PDaKRJj@%V4CS0IS7Y%3dE{@uN1e0>aG*DAa$0HiV=^ zw$D)!zh(M6D$Sol^fi_Vl?d`1c$+M2B;EwhBLG}e&=K!%8BXmu+TGz#X`rKZtr(vl zNF_(Ko3f(_d-2@1>I|D&@*}!k)dpPAm@Y^sgE-nFs6L)JD!kn&u^Ywf9Br^x%Q0@~bOyx5y{vzbUFN71qZv&o=%RXHxgIn+hr2~a>BJg5# z0B)6H?C5WS%V=d`UWW=Wj)PIs)lJu|A7MVj05OXw+&qN40hiMY7MWpCS#>n?1;H^3 zWD`af>9ve!dlN2%o6_paj0>R^Qz(2J7zWB#jRhy7>&Rv-Xh?)&wPpc{NjYnFglY>z z@E8k4dqmyHjqU}XB)815>CEd$4dW@wfY>K^t~<1|?O%9TPCCU+X;eBA3!N0{61%>f z^Q8D@$7n7&x!p)6gQEd(3-zR2-=$E(%Y)*3I6p~z@fP-ndutu=^3cYL7J< zhGA&YoDVO0-_e;L?T8$+cX~;@;GP}^o`8wva$ff%eO$M0vDriG9w6}f zQ*wMdXBu!Bz+lTvGi;g;dczfcNs2BjCP0K78sLi_Y|84T3O;D}3j6srD7|nLm)n(e zc~3~gcrfsh;$&v0BHpx+i?vTt6{5O{g(Z;ucL$39883=LNDmaR)qQ_{W*I~}N^d5v zImDt5yPa^Hu5esncNG`C7saBNC_ql(ggboQEgFMjK4(jDB-d$aHqR(idtdKLL>g}= z^kEHt4nHL%B4+!6fVH0u^G625c@fuFI6iG}1A0qZ|E9~sKbMqDjg&P3QweIu-7&P7b%XFp<4wFzy{y+~} zepU-AenJkSGROo|{t&zLIKsdA+qhLF8^hpF%!bs_Gaf62a~5>)8hv^cZw=HHm0Ylb zLd;OJ?(5DoJ>9zlN^5twl-a5{Y3-*b?s1eKa3f-&r%K`$;2w6teA6Zg37POn;_3nl zhaGd^n8+#RX1MxBYV?;hhFOb9$22^bV?>hH&zcPSH0P+Qi`xFTvcA?YIH*GB3xLpE z@79`krL5_vXP+BxL_oQumZ6`w$v4oUeght~>i7b{(CV3OK?F{kxH#9fNHo2X=VhTRRnglSKz;KTmLT z^Q`MTL-gdGQJ1wCJwjyuW~%RFC-}wBMzG4t0VW={W*2c)ureY1riw)BQ^`fC@}H;% z8v}%qK)!7B3-ug_F`OA>X+ZU))@`k>nj@6X+KP>3xBpQ@;4N>|{4n$f>shFgPl2a{ zpG*cOKS7wSyn{wnG%n)CSpvrrqSdMI|CO= zfVBm@bqqiMqJHRtH<=ElQRljCYU>|$w=;iv#um7OnK%+u4joZk02dg5NaUd9!-U>xP~~7?0!v^ja)YLn=C$-NSq*3T*g=zX-@kxasb6F!qV5KY0%} zdBujOISIWkIQS(CB|ctR8B=2%m%DBxFYgCW-;>Npk)Dv}NW>3HJ@G|}gI0jZ0Oo#l zsHE&FDPfcJqHTR_%42DU_rMl`9MCC@24hB8OQv&)aW6*rlL($pscP=RqjsZR zAu0QhQV@gz-V-^I)Dtsq?o8c4TO6K>EzITPLB+j~Kq zJuVd=$zxhEQZ8l7u{gtxCIw)Xg$-JA9!leFa;wMifBN+7Wn^<;ixe~pF(C?;H&L*> zi9+o1fdYx)!Ga-bl8z7rTBazyEn6YH8N){oO%IiU((UjwzMxubzNbz`qh2=| z5_CiJTTfKu^%-;1T90bOhndsb@a zX)GxLsVvhxfmUvz??cbZsblv>DzM7%UQhdGl83`ts7fj)=#$K&Hmgb{#>)U}I7kk& zTU3$7J=n(y2Q^Suni3bUa;`)F!qfWb96IS=@uP+N)@NOX^hcdK++BoSiCNLpttg_L zud8Wsp*cGy(63u@loS{$B8ao8mH?JONt5(~UH!&{@Ti!3|Y@ZbhX|$q{2VWN6+8Q&*Jzl1OaM^@yUcQlJw`&0^%W z!Y0XNI!O^f(wjxEKhS!=kC0rno;twvA^9&8KNXRIT@yl}06(;YTS=5_BvyAMHsP2E zT+^UcY3EWdgT@QHLZN{xOv2`WFhe`9t zjR}N84Vmo663V4FluU-(<113SC(xp%t#4p%Di4h`^x9}&<^&A4K@TNCF&XAvF@J>C zOVt%7JD#{Ey35hsQ}J=?R~W1>uycoV1Ad18qQsThXfy z`escFK=^74(HtS0Np0i>kd6oYHwOF&@%E2rY`_VGsKruG#Gq8)iO?;jpwcD=$*IWFFr!R4i^x^9lq3j-$GnpTK*h$VcHgP)-cgo%bG9_MU z4xo3;2rTD6e0+malv~-1eZRU^5`qJe*oI1uO%C>1yfK*1G@O#_Aji{mg^!*08qDpm z`aOO($U9*Xv(1>d{iH!Hy~01>E~vfmtNgNbdVWrT5S^61{AsGmV`Cwdl}S-zl8T#0 zLY=KDzc5s{p3IP;ZmfHiAcB?Th5fI~{DTs;voq4O=a~ot5hyfPZ6>`o>K0r>lTnv; zMB3??Ta?@rBlBcIhU7~XOGM)D(-DR$P=KY<5sph}+2EDw&nXj8AnJ+iE#z~GCi1YI zlog?{|A1@sw+nd>5{dzj$iog|DSl7&mX4tzf-lm~Atu>8ZzGCMfhI+Kr}KEbf8m==WQno#`OFfK8g{9hkC+f>9(`S#T z&!5MSmdm;0Yww_Hf6&Fq@m*`ohUBn7p%F%&jl(n@Y6scpF0e@XK} zZPd%DZ~Bfg3r99^u) zRQbfeD_MA8Oru9^8@en^@um-JnxwB8da3Ja9Zxh&rBPa3*P4ZzTu{k}=%zRSRjs=| zl7SvW-}fs?j@R7eQhEB)i!pT{q|?Yf!PIW?YFNNMQJBL!n%ZarNootkN@NQ&6ag`-0HlZvO}Q&;?3fCf zxS;@o#VBwT&zNw|1GV->N}fPY$r!78-pkDCIXChv(3`OH*qm6Qh;4C1WyRAUxd2e` zcj%oPxre|1^i95!LP3Bk@6UzJwJ8;SeV?%e3|P4O5^!!5C6Hx0qd+bH2W@m}S(2T_ zsA_**UKn%5QmC)hfZbYv%qUKWzq+=R2mUygT-jkbMK6IhVa>L_U6ox`OFxAGDJtGt zl{@F+XLTc$S33NdmfNG;-)bkRLW2h0Op7_YhIZ8qrxl#S*oN}a{bZ`LuTrUWNoi&} zwl$k|VTebPt*;7l34|B8$a|XAV%kbdPr> z;sh&mazV%Mv!Hp8uZ1{BSkx`bjnxFxH|lu7fH1U?JM2j$K-Azs3ZgAfMelEVf%&fV z;yyQy9!G z5k%N@9Rz!MvHt>m`Ho~Dj!2(`M~vIq__;T;V7i#4CKONXW@kdtx@c*&87 zpfrBk_ZCWi)oSJPnHNgH<-efk8J|VfwMr)Z!ylgR>Wmh0J(gb5&p>T1+FISoirXSL1yhzq|izgdDs|>5=CV;hHHy zWF@?(X)zF84g)_qtQfjShagG4+CQ@8%Ig*z^QNEEE@Y!o3QZ=I&#?lUQ6v1tuevU2 z0@mn{=QOOJS!3r_OvDU(k4L%K?XD80rg9XN9>H6w3M~M>Xe0Ih| zBdPXXsbzjS@Im*<{OBd16A@joMX?zzQwSc~C)r_#QjRcZ#Ddcr|Ay!iqpgB_n^p))&ids){G(}IAFUnF~T|Vsk!wz z=0bW;P!7t8+YfxPh|aN)E$bf?%8o0$%-eiM zzK)qEmmp}WReXQEyZxh;zIy*>dgj8DMKi?l;$>lTidI0DDE1iQ2<7CD&`v9>H{E0v zrF0^~4*%yxNeeNu0Hkq63-E(W2JJ`^UIcLd5$l%pRpa@qYXIffV;NdR%!}ko?MTwL z?y`2TH26w56JTz5zOFLdDB0Imt@!hk$Z781p^5os8yZMB8z!qTOQFiYjw%V5WT{GX zNz-6@pGqu--$aQg`HRf=IbA^bua}b#5Le$kgA~%&rURQxKG}Un(ML8#B1L(7w$pmK z)lLa;FdB!3F57Z_OPcWT$QXJl~xEkB}ra4%_<&s6=GI` zMZz089;+a^uOc!>^t+S-2CS0bnftKUSm%*Y({sEisBW|lO;GT_H}N>9+NCTKZj1m{ zk5s?P>>N?-Qi4r5IH3@0I7r89k~{2V21dv>$U}6CErx^AN2Kb5!VY^S;x3=&xi*hH zX>i?vCbH!p>m+s0oiG$pkAL^Y`@|Rwees&#)^;a6gtQ9;C2Y_se7$_D6vR=G9q+6^HUpqJOi7k# zLQlnX@EQ<;R%;kw_WmNa&{%lkX6BNT_AN7ipYP^7=;9NTaz?H$zc4|tddJ3s!$_je zaKmU{3aU(6)H351TO^;QT&DO4Xp*rHvSaO^x|@_n6NZTha%>LLfrE7{`~xRs30{4_ zeHK&+EtWjXFwWmCLBn+R)PM!07zu@FX>RH$G`(5obtj)1KfNkwB`ls<44atc-R=uk zA=qEY&`A{3Zis1|x3hUWO?o+n#u#Z-$Ud(3R~|@E%YRHf;li=6X>NO9d;{tasgW+} zongww^Z5i72HnMki0F%kWR#>45O+Ef79@kj$b@t{KB|C&VHyQDK+LdhVArBLo7*af zTMUlHqpnU;qJdDUEYaY3;*@3!{{zwHF}g(;=w1`4i!2qIwQiflEf>8O3DQt4_m|h> z(NXI4Kj_<^OuKl;4^1=@%Lj&#Q%K&YV~s7+9mDYByhh=b>=L@zu8FvF{yo%fugBbZ zR4j#sl^-5|oRI=L1RFeC$PK472ibka9pWDe;Qe=i6h)R0f9);Jl3`a z7&HxA7+}sy4apg#&ZD5Y)^QyE*AfJLsj0Ned0{*Gqvc%qM|KIeT3gb+ZNIvp%PIv# z572eB7o>z5(I3vvm3s!uX+;`bOW1ou*=s44FT^iubFd{SQiBuC2I7IraY&%8&rK8yo&NK|-J+0$ zQq(ewFXzZ(SR>4*}5{%x|)+Gv$mPX5&iMh|a^iPq0gJEnaK%;dE!v%_x`qhI^4{3l2YB`z-(35B zNf>earr%fF*HnS0YRu}gDp^jTgb=d-088?|ll7(PL?cy522tbgq8wu~PUTL((aNm2 zsYoT<#qjuyBDHU3@)!d&+CX4uIa=RNha}b_-;hYj6vf0|s;t`m;Bnyj&6>_?z(ZxT z@&ISSM^)X4LC1D&)Iyq05}XiBFVgt;JI54heQY;#%Ze<&O$dbxjDYYC&kYJ_Dd32y zQOZL=OirnciCuaMWv7FEP4Y{K`9a26X(u?`8B_TpZW!XouAzQ8@{`6Mrj63w5wmhG z9JyXXG6hBeb4k)hoGd`<7kKYAYiyZPn>P94#&|Qi{d*<5<4CN6Cvr-fljV8>NnA2$ zB{6w4CNbG%(&1J@1_)0ft~R9x7aqRyY1oNNz1PsUknpUpvCV3zlyHYy>&8Z*d0MnY zyTgr4Hmxi2gP*#pz&*SpK)r$6;!K)x+4JX-&4`E#2GS5?jgvOd2U2ld9Rw7}PFb7L zC{?lFBC(-x|AREaKr?4r;wWk^E4#wp_&mA+Toh`y2C8h;BHBee#(8+gV|58++qz#q z(wDl~ajK5Ejwjc0PL{eC1tO1=3Vt$oaQkgUIyCK?i|et&t+rYS|Lk5kHyIb?R2aXM zC8^81&yAZv&3y|+?7jxuXcE^kT}dG3s)|=>^)KW%s>)sZ?&RRM3Ci$KdC}CbTCqdv z?LOE6X5m!6nx-6<(Da)bVF-?9{hA48nJc^c@!>O(<{5sa*_6wzD!%t=c|5rR{8opI zIcSi15W1+xjGKQ4$hDQw^4 z^1g=2B7C3fhsUqtXhOKJ6C-LoTrnZw(8~_MKk1O{S$8(i+LjtUI9z|du+6Hx9;^lT z2Bik;a&FFZ5A40PRy*AKrk4nuKZfXpOf5QmU&NaZjW!;PAsZdQ4f2Rwl{=6^5Rj5v zewrMTv6SXR-r-kSlSB|F6YA>tXiBVL-uMkOT;+ULkI!{dz%`W7sB$WBKG?6X?Qa>- zP%`?3GemCx$vW8 z*)ELIj3ai7BPMrC12a%KI$BD!E97vE_K&bmXv)QTrBm@E+e zkdc>`MB3q>otK;p9@sa2b~3|-2Nt{#h8Pz;q60HehqYE>6V_S;8{17VFfMX86upYE ziBi^AWBTMqrRw?N=p|Q*phi*Ur2|hzr18cOQPawbvaG;XnZN%h>tf5oM@WlXX(4Kt zc^N}m8NOpzIS7IsnHZP!!O`HvL6`50kr+wjZ1DCn$lwgU{WBzF=o=dv0LtbpT#}vX zvGk+q=tWJH@`R%6yov{7*|$WT-^0T2cHD3OH(B1fAWnM`g3;KN%W{KWUbK+>WLP#l zi_**K__G94`}S*%x6{8}PpHU#0Azv8Do&bm1SWfvrcF ziYquM;7OvlzWQQL=F8JKJiGp8-QK4A)%eq1g_yVjZCykHPnc=3raI|>KSsVEvbr#@e*ko zCR4)fnwMp{f`gk<{*Th2B_Xz&_RnA&1j^`ML{RNLA`S7v;kJIE>3{OWu-G2whcT3# z`X(jFFS-wx*Y!9-6>YViISCed1cV)jX7{-`^wA`_DbW^7LF_0KFg~a^TspU{?gBVk zeXK)cv=EkpR;tJA-b>rFw|1$~DmOGvb7pro_qTSI4~EqfPA_gT8NIzf-<6OzR9}2J zkZk@T;b>8Ul~0$>jTR%}ft`XrEv13Sg%I@j?=cMx_$_vhLLdBn#0{$Oq}b&c*X2m) z^JP&k%*9yv@+a6!);E``Lmt9%C`Vbe>8OiHwS-P5}0O;AcGu zQ|AeZu!A?vit_I69x17O7I#Iduy8M>4hC8D372_Y`CygQWEI7J#TV3RR~d;gt@j#s zRbOA|*qqALyI!DQODt@9(*$p%TSd z1_(Y;i6#=For?U$QIVcd7e~rP}tOO6=qi zLXl(dMv3l5xNfMP<}(q5pnn@#L0pKhB&y9afzUP2Z*~ex-rWs-oey2K*aZ!e@-XXZt&B>VF^)!3^hZD z3vUanjCx_7kpd|DsdkwvwW6-l^R`Z zCH46E+CKNIJge`_G z`24_$QVCxY6Swg;iasL^VexoGCEjOx-GC#iD`rN5$bBWiJ8n5as{8t|etluRp0Uks;ckmdJpX&M*|&gbr;YVgaMHu5NW}Pso3&4nMYq3=HCO zgwRwCRM%yncjuL|wV<*)V+hW=lNmcykbLIvoVUO+&3y`Mp3h_ zJQ7Qxh_Dcnw{_K<+w4&~{db5qB$9GvF3rytwk5WuwN)x%fs7tGiwvQSlQx^|RXW+z zR%JiwLH61zBz@b8vt!ZN{+qlJpOQ_fMNH8pSb8OgQ=gKSRk=b2n-+2F#ji}B8Qq@m zg*I%qPri%xIutU$y%grZAL;A;>4YMsPTRXs_e1wg^wOCm&3cXN#~;?F`84VKPu)K? zOL$&_Ytt(2CDwkYmmc4$0FS(SoL58FWVvWI5UcwiI|H@SFAw~zu|pf{4AN1;vi{aT z+>==C@%IRR;PhPjo~yLLpcLI!S{ps{`?9XQay%*JwAETgGrAN97tk& zmV^zfni^T8uZJDIpc?~c*?1>N)YlaEsxtIT~IaCD~m7iXoSm}_A6}(FLFK$c4)lvG@5r|M@B9#WP z-~+}=e$kiVS^A7k0bx2e@a{6qQ)fOZ#tR`&Drn;aLsY1r4kmX9nt#k=Kz7by=&~(f zpk@M1lyoD~sAX3e++go&ua@AtmHvq}YH~9%A-5`fIulWo7&}JY`L@@u`zP-E6UCdy zvt(Bvi;cV+xx)U|f?($KK0=^FV(N|>2}y)S?0g_|F7C}b!0L-^?YV5Xt4dl9Z$I&c z!`aY-66S1FpB4w9V6UT3$M-pE$c}-1)gmJ6uS)_`9KCkz!ZX`pB?jkTyc?(3d-jq~ zM45ccLs@4U3wzlC+qTf~eO{iBCeoge49K0c`An*bK_`1+{}e7hE2dg;nYd<*>=kkq zKB81tuci!`5`xG5TSFXr)|>(@9JqFfEVnTpq*(j;8@bc&Zx$6a;!)Bf9&ZgzxER~s zlJ$9nBrrEYO(x8QWh$I{hrbZr2@|2*SGpmj$~Hsi?%5>rx>iGq2Ah%`E1xA*!l218 z9jhJ2Ox%3}uDO8&sT}~P~BGYJII+D8PDg)sUeKHx@ z^*(I#4;apeP*NDnGH)G@AVt5`&hk{swi!o z0oXGDe6P&sYEAeclJrxxCRDW5euK734@M1SR})EN ztca(t_s5IbwP30WD^@JL)nAcFfg}+~jI4tIY&pv^n%~gw-58wRKmW(8q6sJQ;^t6F z^OW5TfibPh@|2uxDJyq=GXX1aNb#7II>?e6Q)`ss-md5!L196k~BGXAoGrn1mSIZusyf3g~ zKn8Or;#(#`7TU2de2#;(%ond7WP(K+hxz%#55?@f$gvtch4~bEJ8kdRsh_<|L6Kn( z>>Sjky_vU)5w+fzIDEWUGy4Ffx~+h9c0&Qv}I9dJ_LD zQ3J}C{#*bd4nd(h><(;g+^Ft%Gz@uA+FUtJy|bH5U2|q7TXuZ>+toW0{B-}jBT!l+qF1hL zVTm2FPr@xfk{7x@`rWR?s+g*=UkwwIjXDvQgBl~Mj7rQkdC!HAI?)z55TOcgv04A? zHu>ZRqnKOURQP<|J^46UvvlAKt=K?to83Bx5pzfd;rWZI{)Y=DO1g2Io67kR!vAmd z`E(cL;QZ@%=&kH_yc32h*47}VXTs4N7vA`YyVrJ*<+3pP{x>4K!dqPzZsRjwoJz|b z>=i=G0Pre6=cIZ;X6Y}cS^cBChtgfAl zan&`9V4q#`SZSj38il%Q>Y%A&>~H5l02vG+0lte1oF$N>9py8C8ncRr*7S=5guEXa zj0gh?Gg)?IuuXF+9Vq{-ilAiapO?Ge@(Jd=h;`f|5^d^yBl52sHhNyCPU|>r7MoJJSeUr4h@X>rlf~1wic)4qVp-(d=nnv zzS<$nD8kB)mzvGz*IV||M?0klEm-;J`Wi;Bw`;GMG`T5ZeTE~`FP;eCZR~SHUE+n# zb{mfurE4ab-tpMlp(0ov{0a?A6mseI_TEY$G;5I$`Msr-{x(OtS3gddfK5*=fE z{{y9<-UQ5#b9zeLGGS0T7@j!8{+b8e%&&=A%qYH*%D=CKA=>Qn71_tQ64+GzPCaig z_xe4-_vZj^Q~Z+g?Qnlv+daF{L3)LBa^Ucns8$@`s;|&0wCoPFVjn?ZF&Y;anu!Oh z#n&>X$>)ZJ<&Qh?am!-*BcY_IWed2pFZo+5t?~5RYxeGBMTd8G^0k%4n!3Y4i(btf z+S26hQj|h<{Ts0$toJ3;`u%~a3dju4jU|Fq&GbtTguxP3I%J3W;WK?yk!;4aX~s+k z%>xjV2(}bbMv6_eWUuu)mv0CC?B3c~anF1GRHoy;0-U?*W`hN*HC*ewVBmmeKbGqrOA#0tg5c2nYx-2NpMXZwE`ae?v~2y5~;otl0i3bZGSnFqrI+m?)x|K(k`X zI_a~01axY4JauV^(5v5X5vW_Sj|Jya8ukAE)1P{JJhR;Gm&k7Jom7h6Q?o7Qf=Ew?KhUt%Y;kN{=Us_UwjH{PvkrI7MuWLHTlahEPF7{}A8O^dm7TxJb40#I#V4(W2? z?&X#{#|BY?TXkPi{no8K1b)k|IA(d+^(}E%@twofu5h1Hfriza?m&M%@x7AmY zwI3$mz<)P?iMl7Qrc`u%1-AQLSH7NG=qFcJ78X{}|H_vw8_nwavk}2@pB&YhLaeH` z4AiNKUbqo9c<35Sw?M^gRUg+t`y^TVaU3`#4r-vhFMW`PZXB|m;Iy8ZCvq5KW$L(> zaO*oz$(umc*c#NqbTSlaUdCWvt%Tip&-^uj;0NEwe&KPhtkfvo0cd?-P6(iQ5R!P} z>-MZ^^Y!iCFyNhzn;}`L8E*@}C%KPo``TL2^pN4^A~!W`cd{+D z%jK&kp7T(#l)0j2zmHv5dwn_`^49%TPA%?tZo=KJj>jM_Hr4_w4>d4$`da zcp>>fp->ipM4r?4(N0mkw{n~|ty?->>D9&0#;%KjkGp`*QbNH*!oPrBCAq(#=WXQk z-PPxhl$G`GjTP}lPrPzFMx2lPVNYTzxi4hm_ktUq#GG9{??59mX>7soAEaUt^f1UL zNL_}6k5~vU6pqt-aQqXr3veXYk=T-7{V1+Y#LPhWGvb&Kcd+>GYO^s=7!fQoTrid! ztTW|e?iqQk-XH9OsU#a$KG%!zxscz4F;i^Z3l73aNrXEV(dg9EDwHFm|9@+ml@oo} zga2Lnv2S+iSN@wx^8aN;$-A532GR~lLA0jt{r zceofBE-N!INWjzq>1~aQlOO(7P)9QLE~|+DOLhhZR-igmrN+XOCma@?Z2ON3S^ZSa zByLp}1_lcOboD{fAoYgEpzOl?UrG!KUlV&bnVe zV;C6ft(nnuvE+l@#{VD1ZO=8Lo;Lz*;oO66i}9Js4*%sfkX(eccNER+SHL}O6Aw#H zUhtpQ6-fhnc?=8I2FAhwM%2<7&G(aE{g<}U31MW2FG|fR*4G1(Xi8!hwdl3wSqNWH9gAD-zfdGNwbP7W027C;L=%GR`;E$W5kPr|U zAETwSg_^6giyNzjv#S-0x1&Q5s7Ixj4LQQZYNW$sMG0Ekh~;N?L|7j+dei62Mq6bp z8ky7eoJI!{1SjI1_iG!2-yZ18vi=Dorqr=^Q*FPLB_g>6F<~JSZ!oeI9>wY==dWSzH*<`p(QoH+)@v)ZI{1(wwN5Y`RZ1v21U=A@6s{TaXg7I0G1f7oltMaps#EsiAqefdR6MjaVh1s|?yb$;~+7yw{T!)x_y zVK|D#Xk__hm#Xs}+@HB#-9*@|Ro8M29XcATFn*Y@8W4`+OY^PSXI%4a-M zvN?B5xPy-0`(XcmE}Tq=IuYPa$sF(grflW(_6z=!BV$CstI78gM96LO2(6KA@J^3w z_ATi~O5dP3)|!`vMU&udbPz{`NN^mr=|nDrL>^t(a1StErb`I_<`Xe7WfL{6);_QmmW#aPrl zM29tVQ)?Bb;dgxz4_13j#wJji4w0vNeD-%40aM+b^Q+i?a9ung$CoYV$JrJ=<^HD_ z=z+aXvE}bYwS3mKHzhG#Y4erUum0EYEY~}l0uELdxBVS7d0B}}@~A(K?ImOSiCI7( zt-7QNc#VbWivtqyP*QsZv{Lf;ojA1LPebqxy&}2e+W@=yWz$_ zi6cVr(=vE(S^L}YG!y+^rjy9Td;wxW`aO&r6=Rum>X`NHv{sa+Tpon3W=BTC^BZHPwWug0>uS_E*uHEqZ0By(OsUWMzh_6gyPv z!DucjavlSZ!8qM=MlM>QEV29}vvl`Ks_5gIH4-AnBs|WrDk~1W-&6CXg$>ugok~AX zIF$I;mZDDsRFFc7Qi*WlXMWN&0blr&X(gR%kViCVaohfGb5uGP%vE}sY1HeZ00qe1 zu+iSEqF+Lv_09NW{%{zphrq#B9>&k3Iw_`b^+3b@sjS4fiHiB#Ct!>fK{7PSHXb44 zwwfCPUDCBXuNHTm&x5ix|2R$O0(x@|^}2-%YW5@ncn`3ta5>34sj_`5tyyzYLsI#0 zctW{BIHSWpJ@G=IZ=%oXZG7osUMbp+)hp^Q`-W4ix0bWk7d)-gm+0#CAVyY9NsCdB zW_=x-nC&~kBmL%xVpbiNoY?P`Kt4ph@D<|;93EXQrM^1Uhg|8)iM?H&{V6d3Zupx8 ziY!0C)aQqD>=)d6^Rj-6&J z>`9tHI8T<$xeRoAn`k;6jW+GE^ib`%dn6VB9`?qb2KI?aWR<|ES|ZUpkL(gpxB%XY zm_fytowBiPok{%T46DfCJCAx;U4xTnZp;^I3Z9hA9KL*nN5y3VilO0&hv>j{6Rf~ly# zB?Li1*XU(yr)KsY^^E6+$?43XRDtXiQm%#TYK_qVt*^?HGJWK{5Y)ReqDy!d@eRs( z+w&ZMNnv{O(cQ^0<+J3%KygF?xGgvl0KQz^-k@l*i6o-}6bXdhAAf#IMwLvLGW9`y zrgRMl3`5*ma%_h)4KVa>&VGS+isy)T#oR85rbx&^*3;elCVSK^oy3Q?3ERGWoAnEQw;B+FZ4Py| z1!>vSwV!JXpBa`5*Ns1X0rgk4!4nMMY4&O`wFme=yuc92oI~pg;)4%l;{1mXaQw>$ zbXQy{c|Z67i}8haO;FE3xkVd;nOm9upuxJw7awd+DD1C=(S8!&bF6c!; z1k(0Vxi$M+_4}jL%A5wDdd6{*4(u;W;PH``D_6Gar5L=wcOJty*0{^qf463s;2XKJ z_QZcDhEBQg5nwBojE`yIKLZ?`D&6-A)n4i-3~*pM!DP*|6ARfhDx5B?sf>7VaJ)J+ z23M@B!r#@p4@~P+SUy#jPsSjd7QNilSya=-;RP%@9- zG1t6U%wEYoFtya&vbij~zc`jMHDMXj>}AH~n7YIV`=@1Ectt0v{!;)v~pwu@3L$M++{5}Mchi7t0V z=+?mvBXfYw)QNZP#)%%AU+3Tnvj)H0a{1Bj-P%`4@z+S`V`hfB5{{+fkbvndDn|uJ z;)&-QkA6Ff=D+f~$nQpoy>6}<3I*2;JAH@I@}T?Azuume@Bl^FO8jy*%e${I5(kkO z0%*@2i**}*>7Nt9{CDoI8!=PCu*+-$s^(!E`pkP7%_HbIo8;Z@ItT~;F3mVi+~%p} zx(qew1d~BRLC~i2v0@Oif_Pt=xwpQv>n!aXu!bNc

#h62m!T68|{+wp)2)IY6Dg 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 u1cI*re?B2FF%N%

-
+
diff --git a/docs/assets/metadata_coremeta4cat_overview.html b/docs/assets/metadata_coremeta4cat_overview.html index 0d8d41a7f..42ad7271f 100644 --- a/docs/assets/metadata_coremeta4cat_overview.html +++ b/docs/assets/metadata_coremeta4cat_overview.html @@ -19,7 +19,7 @@
-
+
diff --git a/docs/assets/metadata_reaction_hierarchy.html b/docs/assets/metadata_reaction_hierarchy.html index a54ac1395..6fa521d60 100644 --- a/docs/assets/metadata_reaction_hierarchy.html +++ b/docs/assets/metadata_reaction_hierarchy.html @@ -18,7 +18,7 @@
-
+
diff --git a/docs/assets/metadata_simulation_hierarchy.html b/docs/assets/metadata_simulation_hierarchy.html index 5594b46a3..261920d02 100644 --- a/docs/assets/metadata_simulation_hierarchy.html +++ b/docs/assets/metadata_simulation_hierarchy.html @@ -18,7 +18,7 @@
-
+
diff --git a/docs/assets/metadata_synthesis_hierarchy.html b/docs/assets/metadata_synthesis_hierarchy.html index 667812f36..c4b96c923 100644 --- a/docs/assets/metadata_synthesis_hierarchy.html +++ b/docs/assets/metadata_synthesis_hierarchy.html @@ -18,7 +18,7 @@
-
+
diff --git a/docs/characterization.md b/docs/characterization.md index 802c0ac49..2e4673087 100644 --- a/docs/characterization.md +++ b/docs/characterization.md @@ -104,7 +104,7 @@ The class follows a hierarchical structure in which selection of a characterizat **Data Type Class Details:** -
+
SamplePretreatment **Description:** A qualitative descriptor of the pre-treatment applied to a sample @@ -145,6 +145,29 @@ before a process or measurement (e.g. "reduction at 300 °C", "outgassing").

+
+activity designator (Optional) + +**Description:** Internal type designator for CatalysisDataGeneratingActivity subclasses +(Synthesis, Characterization, Simulation). Only needs to be set by hand +when nesting one of these inside another object's was_generated_by list +(e.g. in a combined CatalysisDataset file) -- LinkML fills it in +automatically when a class is instantiated directly. + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`rdf:type`](http://www.w3.org/1999/02/22-rdf-syntax-ns#type) + +**Schema Reference:** [activity_designator](./elements/slots/activity_designator.md) + +

+ + 💡 Submit Term Feedback + +

+
realized plan (Mandatory) @@ -158,7 +181,7 @@ before a process or measurement (e.g. "reduction at 300 °C", "outgassing"). **Data Type Class Details:** -
+
CharacterizationTechnique **Abstract Class** @@ -171,6 +194,25 @@ Linked from Characterization via realized_plan. **Schema Reference:** [CharacterizationTechnique](./elements/classes/CharacterizationTechnique.md) +**Slots** + +
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback @@ -179,7 +221,7 @@ Linked from Characterization via realized_plan. **Possible Subclasses / Enumerations of CharacterizationTechnique:** -

+
PowderXRD **Description:** Powder X-ray diffraction for phase identification and structural analysis. @@ -206,7 +248,7 @@ Provide unit as a QUDT term (e.g. Degree). **Data Type Class Details:** -
+
QuantitativeRange **Description:** A quantitative property expressed as a range between a lower and upper bound, @@ -303,7 +345,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Data Type Class Details:** -
+
OperationMode **Description:** A qualitative descriptor of the operation mode of an instrument or @@ -334,13 +376,13 @@ process (e.g. "transmission", "reflection", "AC", "DC", "full-scan"). **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0007809`](https://w3id.org/nfdi4cat/voc4cat_0007809) **Schema Reference:** [has_atmosphere](./elements/slots/has_atmosphere.md) **Data Type Class Details:** -
+
Atmosphere **Description:** A qualitative descriptor of the gaseous environment or atmospheric @@ -358,7 +400,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **Possible Subclasses / Enumerations of Atmosphere:** -
+
CalcinationGaseousEnvironment **Description:** The specific gaseous environment maintained during a calcination step @@ -383,14 +425,33 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").
has temperature (Optional) -**Description:** No description available +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. -**Data Type:** string +**Data Type:** Temperature **Cardinality:** Optional +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + **Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +**Schema Reference:** [Temperature](./elements/classes/Temperature.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback @@ -412,7 +473,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **Data Type Class Details:** -

+
AngularVelocity **Description:** Rate of rotational motion, typically expressed in revolutions per minute. @@ -448,7 +509,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **Data Type Class Details:** -
+
Duration **Description:** A quantitative measure of elapsed time (duration of a process step). @@ -469,6 +530,23 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
xray source (Optional, Multivalued) @@ -513,7 +591,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").

-
+
SingleCrystalXRD **Description:** Single crystal X-ray diffraction for structure determination. @@ -527,20 +605,52 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").
has temperature (Optional) -**Description:** No description available +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. -**Data Type:** string +**Data Type:** Temperature **Cardinality:** Optional +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + **Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
xray source (Optional, Multivalued) @@ -585,7 +695,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").

-
+
XRayAbsorptionSpectroscopy **Description:** X-ray absorption spectroscopy (XAS/XANES/EXAFS) for electronic and local structure analysis. @@ -619,13 +729,9 @@ process (e.g. "transmission", "reflection", "AC", "DC", "full-scan"). **CURIE:** [`VOC4CAT:0000108`](https://w3id.org/nfdi4cat/voc4cat_0000108) -**Schema Reference:** [OperationMode](./elements/classes/OperationMode.md) +*Full field list already shown [earlier on this page](#schema-class-OperationMode) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -686,7 +792,7 @@ process (e.g. "transmission", "reflection", "AC", "DC", "full-scan"). **Data Type Class Details:** -

+
EnergyQuantity **Description:** A quantitative measure of energy (eV, keV, kJ/mol, etc.). @@ -710,14 +816,29 @@ process (e.g. "transmission", "reflection", "AC", "DC", "full-scan").
has temperature (Optional) -**Description:** No description available +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. -**Data Type:** string +**Data Type:** Temperature **Cardinality:** Optional +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + **Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -763,13 +884,13 @@ process (e.g. "transmission", "reflection", "AC", "DC", "full-scan").

-number of cycles (Optional, Multivalued) +number of cycles (Optional) **Description:** Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles). **Data Type:** integer -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`VOC4CAT:0008123`](https://w3id.org/nfdi4cat/voc4cat_0008123) @@ -781,6 +902,23 @@ process (e.g. "transmission", "reflection", "AC", "DC", "full-scan").

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
xray source (Optional, Multivalued) @@ -848,49 +986,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [QuantitativeRange](./elements/classes/QuantitativeRange.md) - -**Slots** - -
-title (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional - -**Schema Reference:** [title](./elements/slots/title.md) - -

- - 💡 Submit Term Feedback - -

- -
-description (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional - -**Schema Reference:** [description](./elements/slots/description.md) - -

- - 💡 Submit Term Feedback - -

+*Full field list already shown [earlier on this page](#schema-class-QuantitativeRange) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -904,7 +1002,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

-
+
XPS **Description:** X-ray photoelectron spectroscopy for surface elemental and chemical state analysis. @@ -937,13 +1035,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -952,13 +1046,13 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

-number of scans (Optional, Multivalued) +number of scans (Optional) **Description:** Number of scans or accumulations recorded. **Data Type:** integer -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`coremeta4cat:number_of_scans`](https://w3id.org/nfdi4cat/coremeta4cat/number_of_scans) @@ -1011,13 +1105,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [EnergyQuantity](./elements/classes/EnergyQuantity.md) +*Full field list already shown [earlier on this page](#schema-class-EnergyQuantity) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -1040,7 +1130,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Data Type Class Details:** -

+
LengthQuantity **Description:** A quantitative measure of length or spatial dimension (nm, mm, cm). @@ -1070,8 +1160,6 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Cardinality:** Optional, Multivalued -**CURIE:** [`VOC4CAT:0000108`](https://w3id.org/nfdi4cat/voc4cat_0000108) - **Schema Reference:** [lense_mode](./elements/slots/lense_mode.md)

@@ -1108,7 +1196,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0007809`](https://w3id.org/nfdi4cat/voc4cat_0007809) **Schema Reference:** [has_atmosphere](./elements/slots/has_atmosphere.md) @@ -1122,34 +1210,29 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) -**Schema Reference:** [Atmosphere](./elements/classes/Atmosphere.md) +*Full field list already shown [earlier on this page](#schema-class-Atmosphere) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+
-**Possible Subclasses / Enumerations of Atmosphere:** +

+ + 💡 Submit Term Feedback + +

-CalcinationGaseousEnvironment +id (Optional) -**Description:** The specific gaseous environment maintained during a calcination step -(e.g. "air", "N2", "10% O2/N2"). +**Description:** No description available -**CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) +**Data Type:** string -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +**Cardinality:** Optional -

- - 💡 Submit Term Feedback - -

+**Schema Reference:** [id](./elements/slots/id.md)

- + 💡 Submit Term Feedback

@@ -1221,63 +1304,23 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [QuantitativeRange](./elements/classes/QuantitativeRange.md) - -**Slots** - -
-title (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional +*Full field list already shown [earlier on this page](#schema-class-QuantitativeRange) -- this class is reached from multiple fields.* -**Schema Reference:** [title](./elements/slots/title.md) +

- + 💡 Submit Term Feedback

-
-description (Optional) +

+ + 💡 Submit Term Feedback + +

-**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional - -**Schema Reference:** [description](./elements/slots/description.md) - -

- - 💡 Submit Term Feedback - -

- -

- - 💡 Submit Term Feedback - -

- -

- - 💡 Submit Term Feedback - -

- -

- - 💡 Submit Term Feedback - -

- -
+
EDX **Description:** Energy-dispersive X-ray spectroscopy for elemental mapping and quantification. @@ -1310,13 +1353,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [EnergyQuantity](./elements/classes/EnergyQuantity.md) +*Full field list already shown [earlier on this page](#schema-class-EnergyQuantity) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -1346,13 +1385,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -1398,13 +1433,30 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback

-
+
InfraredSpectroscopy **Description:** Infrared spectroscopy (FTIR/ATR) for functional group and surface species identification. @@ -1438,13 +1490,9 @@ process (e.g. "transmission", "reflection", "AC", "DC", "full-scan"). **CURIE:** [`VOC4CAT:0000108`](https://w3id.org/nfdi4cat/voc4cat_0000108) -**Schema Reference:** [OperationMode](./elements/classes/OperationMode.md) +*Full field list already shown [earlier on this page](#schema-class-OperationMode) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -1481,49 +1529,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [QuantitativeRange](./elements/classes/QuantitativeRange.md) - -**Slots** - -

-title (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional +*Full field list already shown [earlier on this page](#schema-class-QuantitativeRange) -- this class is reached from multiple fields.* -**Schema Reference:** [title](./elements/slots/title.md) - -

- - 💡 Submit Term Feedback - -

- -
-description (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional - -**Schema Reference:** [description](./elements/slots/description.md) - -

- - 💡 Submit Term Feedback - -

- -

- - 💡 Submit Term Feedback - -

+

@@ -1553,14 +1561,29 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

has temperature (Optional) -**Description:** No description available +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. -**Data Type:** string +**Data Type:** Temperature **Cardinality:** Optional +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + **Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -1587,13 +1610,13 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

-number of scans (Optional, Multivalued) +number of scans (Optional) **Description:** Number of scans or accumulations recorded. **Data Type:** integer -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`coremeta4cat:number_of_scans`](https://w3id.org/nfdi4cat/coremeta4cat/number_of_scans) @@ -1614,7 +1637,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0007809`](https://w3id.org/nfdi4cat/voc4cat_0007809) **Schema Reference:** [has_atmosphere](./elements/slots/has_atmosphere.md) @@ -1628,34 +1651,29 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) -**Schema Reference:** [Atmosphere](./elements/classes/Atmosphere.md) +*Full field list already shown [earlier on this page](#schema-class-Atmosphere) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+
-**Possible Subclasses / Enumerations of Atmosphere:** +

+ + 💡 Submit Term Feedback + +

-CalcinationGaseousEnvironment +id (Optional) -**Description:** The specific gaseous environment maintained during a calcination step -(e.g. "air", "N2", "10% O2/N2"). +**Description:** No description available -**CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) +**Data Type:** string -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +**Cardinality:** Optional -

- - 💡 Submit Term Feedback - -

+**Schema Reference:** [id](./elements/slots/id.md)

- + 💡 Submit Term Feedback

@@ -1666,7 +1684,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").

-
+
DRIFTS **Description:** Diffuse reflectance infrared Fourier transform spectroscopy for in-situ @@ -1691,61 +1709,274 @@ surface species identification under reactive gas conditions. **Schema Reference:** [adsorption_gas](./elements/slots/adsorption_gas.md) +**Data Type Class Details:** + +
+ChemicalEntity + +**Description:** Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. + +**CURIE:** [`CHEBI:23367`](http://purl.obolibrary.org/obo/CHEBI_23367) + +**Schema Reference:** [ChemicalEntity](./elements/classes/ChemicalEntity.md) + +**Slots** + +
+inchi (Recommended) + +**Description:** The slot to provide the InChi descriptor of a ChemicalEntity. + +**Data Type:** InChi + +**Cardinality:** Recommended + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [inchi](./elements/slots/inchi.md) + +**Data Type Class Details:** + +
+InChi + +**Description:** A structure descriptor which conforms to the InChI format specification. + +**CURIE:** [`CHEMINF:000113`](http://semanticscience.org/resource/CHEMINF_000113) + +**Schema Reference:** [InChi](./elements/classes/InChi.md) +

- + + 💡 Submit Term Feedback + +

+ +

+ 💡 Submit Term Feedback

-has atmosphere (Optional, Multivalued) +inchikey (Recommended) -**Description:** Gaseous environment or atmospheric conditions during a process. +**Description:** The slot to provide the InChiKey of a ChemicalEntity. -**Data Type:** Atmosphere +**Data Type:** InChIKey -**Cardinality:** Optional, Multivalued +**Cardinality:** Recommended **CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) -**Schema Reference:** [has_atmosphere](./elements/slots/has_atmosphere.md) +**Schema Reference:** [inchikey](./elements/slots/inchikey.md) **Data Type Class Details:** +
+InChIKey + +**Description:** No description available + +**CURIE:** [`CHEMINF:000059`](http://semanticscience.org/resource/CHEMINF_000059) + +**Schema Reference:** [InChIKey](./elements/classes/InChIKey.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+
-Atmosphere +smiles (Recommended) -**Description:** A qualitative descriptor of the gaseous environment or atmospheric -conditions during a process (e.g. "air", "N2", "5% H2/Ar"). +**Description:** The slot to provide the canonical SMILES descriptor of a ChemicalEntity. -**CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) +**Data Type:** SMILES -**Schema Reference:** [Atmosphere](./elements/classes/Atmosphere.md) +**Cardinality:** Recommended + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [smiles](./elements/slots/smiles.md) + +**Data Type Class Details:** + +
+SMILES + +**Description:** A structure descriptor that denotes a molecular structure as a graph and conforms to the SMILES format specification. + +**CURIE:** [`CHEMINF:000018`](http://semanticscience.org/resource/CHEMINF_000018) + +**Schema Reference:** [SMILES](./elements/classes/SMILES.md)

- + 💡 Submit Term Feedback

-**Possible Subclasses / Enumerations of Atmosphere:** +

+ + 💡 Submit Term Feedback + +

-CalcinationGaseousEnvironment +molecular formula (Recommended) -**Description:** The specific gaseous environment maintained during a calcination step -(e.g. "air", "N2", "10% O2/N2"). +**Description:** The slot to provide the IUPAC formula of a ChemicalEntity. -**CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) +**Data Type:** MolecularFormula -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +**Cardinality:** Recommended + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [molecular_formula](./elements/slots/molecular_formula.md) + +**Data Type Class Details:** + +
+MolecularFormula + +**Description:** A structure descriptor which identifies each constituent element by its chemical symbol and indicates the number of atoms of each element found in each discrete molecule of that compound. + +**CURIE:** [`CHEMINF:000042`](http://semanticscience.org/resource/CHEMINF_000042) + +**Schema Reference:** [MolecularFormula](./elements/classes/MolecularFormula.md)

- + + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+iupac name (Recommended) + +**Description:** The slot to provide the IUPAC name of a ChemicalEntity. + +**Data Type:** IUPACName + +**Cardinality:** Recommended + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [iupac_name](./elements/slots/iupac_name.md) + +**Data Type Class Details:** + +
+IUPACName + +**Description:** A systematic name which is formulated according to the rules and recommendations for chemical nomenclature set out by the International Union of Pure and Applied Chemistry (IUPAC). + +**CURIE:** [`CHEMINF:000107`](http://semanticscience.org/resource/CHEMINF_000107) + +**Schema Reference:** [IUPACName](./elements/classes/IUPACName.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+has molar mass (Recommended) + +**Description:** The slot to provide the MolarMass of a ChemicalEntity. + +**Data Type:** MolarMass + +**Cardinality:** Recommended + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_molar_mass](./elements/slots/has_molar_mass.md) + +**Data Type Class Details:** + +
+MolarMass + +**Description:** A Mass (physical quality) that quantifies the mass of a homogeneous ChemicalSubstance containing 6.02 x 10^23 atoms or molecules. + +**CURIE:** [`AFR:0002409`](http://purl.allotrope.org/ontologies/result#AFR_0002409) + +**Schema Reference:** [MolarMass](./elements/classes/MolarMass.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +

+ 💡 Submit Term Feedback

+

+ + 💡 Submit Term Feedback + +

+ +
+has atmosphere (Optional, Multivalued) + +**Description:** Gaseous environment or atmospheric conditions during a process. + +**Data Type:** Atmosphere + +**Cardinality:** Optional, Multivalued + +**CURIE:** [`VOC4CAT:0007809`](https://w3id.org/nfdi4cat/voc4cat_0007809) + +**Schema Reference:** [has_atmosphere](./elements/slots/has_atmosphere.md) + +**Data Type Class Details:** + +
+Atmosphere + +**Description:** A qualitative descriptor of the gaseous environment or atmospheric +conditions during a process (e.g. "air", "N2", "5% H2/Ar"). + +**CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) + +*Full field list already shown [earlier on this page](#schema-class-Atmosphere) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -1767,7 +1998,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **Data Type Class Details:** -

+
VolumeFlowRate **Description:** Volume of fluid passing a given point per unit time. @@ -1817,49 +2048,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [QuantitativeRange](./elements/classes/QuantitativeRange.md) - -**Slots** - -
-title (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional - -**Schema Reference:** [title](./elements/slots/title.md) - -

- - 💡 Submit Term Feedback - -

- -
-description (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional +*Full field list already shown [earlier on this page](#schema-class-QuantitativeRange) -- this class is reached from multiple fields.* -**Schema Reference:** [description](./elements/slots/description.md) - -

- - 💡 Submit Term Feedback - -

- -

- - 💡 Submit Term Feedback - -

+

@@ -1965,14 +2156,29 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

has temperature (Optional) -**Description:** No description available +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. -**Data Type:** string +**Data Type:** Temperature **Cardinality:** Optional +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + **Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -1980,13 +2186,13 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

-number of scans (Optional, Multivalued) +number of scans (Optional) **Description:** Number of scans or accumulations recorded. **Data Type:** integer -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`coremeta4cat:number_of_scans`](https://w3id.org/nfdi4cat/coremeta4cat/number_of_scans) @@ -1998,13 +2204,30 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback

-
+
RamanSpectroscopy **Description:** Raman spectroscopy for vibrational and structural characterization. @@ -2037,13 +2260,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [LengthQuantity](./elements/classes/LengthQuantity.md) +*Full field list already shown [earlier on this page](#schema-class-LengthQuantity) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -2066,7 +2285,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Data Type Class Details:** -

+
PowerQuantity **Description:** Rate of energy transfer per unit time (e.g. laser power in mW). @@ -2128,13 +2347,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -2143,13 +2358,13 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

-number of scans (Optional, Multivalued) +number of scans (Optional) **Description:** Number of scans or accumulations recorded. **Data Type:** integer -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`coremeta4cat:number_of_scans`](https://w3id.org/nfdi4cat/coremeta4cat/number_of_scans) @@ -2170,7 +2385,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0007809`](https://w3id.org/nfdi4cat/voc4cat_0007809) **Schema Reference:** [has_atmosphere](./elements/slots/has_atmosphere.md) @@ -2184,31 +2399,9 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) -**Schema Reference:** [Atmosphere](./elements/classes/Atmosphere.md) - -

- - 💡 Submit Term Feedback - -

- -**Possible Subclasses / Enumerations of Atmosphere:** - -
-CalcinationGaseousEnvironment - -**Description:** The specific gaseous environment maintained during a calcination step -(e.g. "air", "N2", "10% O2/N2"). - -**CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) - -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +*Full field list already shown [earlier on this page](#schema-class-Atmosphere) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -2219,14 +2412,29 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").

has temperature (Optional) -**Description:** No description available +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. -**Data Type:** string +**Data Type:** Temperature **Cardinality:** Optional +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + **Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -2252,13 +2460,30 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback

-
+
NMRSpectroscopy **Description:** Nuclear magnetic resonance spectroscopy for structure elucidation. @@ -2304,6 +2529,19 @@ this subprofile. **Schema Reference:** [solvent](./elements/slots/solvent.md) +**Data Type Class Details:** + +
+ChemicalEntity + +**Description:** Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. + +**CURIE:** [`CHEBI:23367`](http://purl.obolibrary.org/obo/CHEBI_23367) + +*Full field list already shown [earlier on this page](#schema-class-ChemicalEntity) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -2334,14 +2572,29 @@ this subprofile.

has temperature (Optional) -**Description:** No description available +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. -**Data Type:** string +**Data Type:** Temperature **Cardinality:** Optional +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + **Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -2387,13 +2640,13 @@ this subprofile.

-number of scans (Optional, Multivalued) +number of scans (Optional) **Description:** Number of scans or accumulations recorded. **Data Type:** integer -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`coremeta4cat:number_of_scans`](https://w3id.org/nfdi4cat/coremeta4cat/number_of_scans) @@ -2414,7 +2667,7 @@ this subprofile. **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0007809`](https://w3id.org/nfdi4cat/voc4cat_0007809) **Schema Reference:** [has_atmosphere](./elements/slots/has_atmosphere.md) @@ -2428,34 +2681,29 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) -**Schema Reference:** [Atmosphere](./elements/classes/Atmosphere.md) +*Full field list already shown [earlier on this page](#schema-class-Atmosphere) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+
-**Possible Subclasses / Enumerations of Atmosphere:** +

+ + 💡 Submit Term Feedback + +

-CalcinationGaseousEnvironment +id (Optional) -**Description:** The specific gaseous environment maintained during a calcination step -(e.g. "air", "N2", "10% O2/N2"). +**Description:** No description available -**CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) +**Data Type:** string -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +**Cardinality:** Optional -

- - 💡 Submit Term Feedback - -

+**Schema Reference:** [id](./elements/slots/id.md)

- + 💡 Submit Term Feedback

@@ -2466,7 +2714,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").

-
+
TransmissionElectronMicroscopy **Description:** TEM for atomic-resolution imaging and diffraction of catalyst particles. @@ -2500,13 +2748,9 @@ process (e.g. "transmission", "reflection", "AC", "DC", "full-scan"). **CURIE:** [`VOC4CAT:0000108`](https://w3id.org/nfdi4cat/voc4cat_0000108) -**Schema Reference:** [OperationMode](./elements/classes/OperationMode.md) +*Full field list already shown [earlier on this page](#schema-class-OperationMode) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -2514,6 +2758,23 @@ process (e.g. "transmission", "reflection", "AC", "DC", "full-scan").

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
gun type (Optional, Multivalued) @@ -2548,7 +2809,7 @@ process (e.g. "transmission", "reflection", "AC", "DC", "full-scan"). **Data Type Class Details:** -
+
ElectricPotential **Description:** A quantitative measure of electric potential difference or voltage. @@ -2594,7 +2855,7 @@ process (e.g. "transmission", "reflection", "AC", "DC", "full-scan").

-
+
ScanningElectronMicroscopy **Description:** SEM for surface morphology and particle size/shape imaging. @@ -2645,6 +2906,23 @@ process (e.g. "transmission", "reflection", "AC", "DC", "full-scan").

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
gun type (Optional, Multivalued) @@ -2686,13 +2964,9 @@ process (e.g. "transmission", "reflection", "AC", "DC", "full-scan"). **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [ElectricPotential](./elements/classes/ElectricPotential.md) +*Full field list already shown [earlier on this page](#schema-class-ElectricPotential) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -2725,7 +2999,7 @@ process (e.g. "transmission", "reflection", "AC", "DC", "full-scan").

-
+
Thermogravimetry **Description:** Thermogravimetric analysis (TGA/DTG) for mass loss, decomposition, and oxidation state characterization. @@ -2759,13 +3033,9 @@ process (e.g. "transmission", "reflection", "AC", "DC", "full-scan"). **CURIE:** [`VOC4CAT:0000108`](https://w3id.org/nfdi4cat/voc4cat_0000108) -**Schema Reference:** [OperationMode](./elements/classes/OperationMode.md) +*Full field list already shown [earlier on this page](#schema-class-OperationMode) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -2782,7 +3052,7 @@ process (e.g. "transmission", "reflection", "AC", "DC", "full-scan"). **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0007809`](https://w3id.org/nfdi4cat/voc4cat_0007809) **Schema Reference:** [has_atmosphere](./elements/slots/has_atmosphere.md) @@ -2796,31 +3066,9 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) -**Schema Reference:** [Atmosphere](./elements/classes/Atmosphere.md) - -

- - 💡 Submit Term Feedback - -

- -**Possible Subclasses / Enumerations of Atmosphere:** - -
-CalcinationGaseousEnvironment - -**Description:** The specific gaseous environment maintained during a calcination step -(e.g. "air", "N2", "10% O2/N2"). - -**CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) - -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +*Full field list already shown [earlier on this page](#schema-class-Atmosphere) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -2841,6 +3089,19 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **Schema Reference:** [initial_temperature](./elements/slots/initial_temperature.md) +**Data Type Class Details:** + +

+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -2860,6 +3121,19 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **Schema Reference:** [final_temperature](./elements/slots/final_temperature.md) +**Data Type Class Details:** + +

+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -2879,12 +3153,46 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **Schema Reference:** [has_sample_mass](./elements/slots/has_sample_mass.md) +**Data Type Class Details:** + +

+Mass + +**Description:** The strength of a body's gravitational attraction to other bodies. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +**Schema Reference:** [Mass](./elements/classes/Mass.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
has temperature range (Optional) @@ -2912,51 +3220,11 @@ Aligned to qudt:Quantity (as in the DCAT-AP-PLUS QuantitativeAttribute pattern) but with min_value / max_value instead of a single value to represent an interval rather than a point value. Provide the shared unit as a QUDT DefinedTerm. -**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) - -**Schema Reference:** [QuantitativeRange](./elements/classes/QuantitativeRange.md) - -**Slots** - -
-title (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional - -**Schema Reference:** [title](./elements/slots/title.md) - -

- - 💡 Submit Term Feedback - -

- -
-description (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional - -**Schema Reference:** [description](./elements/slots/description.md) - -

- - 💡 Submit Term Feedback - -

- -

- - 💡 Submit Term Feedback - -

+**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-QuantitativeRange) -- this class is reached from multiple fields.* + +

@@ -2979,7 +3247,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Data Type Class Details:** -

+
HeatingRate **Description:** Rate of temperature change per unit time during a thermal ramp. @@ -3015,7 +3283,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Data Type Class Details:** -
+
HeatingProcedure **Description:** A qualitative descriptor of the thermal programme or heating procedure @@ -3043,7 +3311,7 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h").

-
+
TPR **Description:** Temperature-programmed reduction for reducibility and metal-support interaction characterization. @@ -3073,6 +3341,23 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h").

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
has temperature range (Optional) @@ -3102,49 +3387,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [QuantitativeRange](./elements/classes/QuantitativeRange.md) - -**Slots** - -
-title (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional - -**Schema Reference:** [title](./elements/slots/title.md) - -

- - 💡 Submit Term Feedback - -

- -
-description (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional - -**Schema Reference:** [description](./elements/slots/description.md) - -

- - 💡 Submit Term Feedback - -

+*Full field list already shown [earlier on this page](#schema-class-QuantitativeRange) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3174,13 +3419,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [HeatingRate](./elements/classes/HeatingRate.md) +*Full field list already shown [earlier on this page](#schema-class-HeatingRate) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3211,13 +3452,9 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h"). **CURIE:** [`coremeta4cat:HeatingProcedure`](https://w3id.org/nfdi4cat/coremeta4cat/HeatingProcedure) -**Schema Reference:** [HeatingProcedure](./elements/classes/HeatingProcedure.md) +*Full field list already shown [earlier on this page](#schema-class-HeatingProcedure) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3231,7 +3468,7 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h").

-
+
TPO **Description:** Temperature-programmed oxidation for coke quantification and reoxidation characterization. @@ -3261,6 +3498,23 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h").

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
has temperature range (Optional) @@ -3290,49 +3544,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [QuantitativeRange](./elements/classes/QuantitativeRange.md) - -**Slots** - -
-title (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional - -**Schema Reference:** [title](./elements/slots/title.md) - -

- - 💡 Submit Term Feedback - -

- -
-description (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional - -**Schema Reference:** [description](./elements/slots/description.md) - -

- - 💡 Submit Term Feedback - -

+*Full field list already shown [earlier on this page](#schema-class-QuantitativeRange) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3362,13 +3576,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [HeatingRate](./elements/classes/HeatingRate.md) +*Full field list already shown [earlier on this page](#schema-class-HeatingRate) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3399,13 +3609,9 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h"). **CURIE:** [`coremeta4cat:HeatingProcedure`](https://w3id.org/nfdi4cat/coremeta4cat/HeatingProcedure) -**Schema Reference:** [HeatingProcedure](./elements/classes/HeatingProcedure.md) +*Full field list already shown [earlier on this page](#schema-class-HeatingProcedure) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3419,7 +3625,7 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h").

-
+
BET **Description:** Brunauer-Emmett-Teller analysis for specific surface area and pore size distribution. @@ -3462,6 +3668,19 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h"). **Schema Reference:** [degassing_temperature](./elements/slots/degassing_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -3481,6 +3700,19 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h"). **Schema Reference:** [measurement_temperature](./elements/slots/measurement_temperature.md) +**Data Type Class Details:** + +

+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -3519,19 +3751,49 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h"). **Schema Reference:** [has_sample_mass](./elements/slots/has_sample_mass.md) +**Data Type Class Details:** + +

+Mass + +**Description:** The strength of a body's gravitational attraction to other bodies. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Mass) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback

-
+
ICPAES **Description:** Inductively coupled plasma atomic emission spectroscopy for bulk elemental composition. @@ -3618,13 +3880,30 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h").

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback

-
+
ElementalAnalysis **Description:** Combustion elemental analysis (CHNS/O) for carbon, hydrogen, nitrogen, sulfur content. @@ -3661,33 +3940,76 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h"). **Data Type:** Temperature -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional, Multivalued + +**CURIE:** [`coremeta4cat:combustion_temperature`](https://w3id.org/nfdi4cat/coremeta4cat/combustion_temperature) + +**Schema Reference:** [combustion_temperature](./elements/slots/combustion_temperature.md) + +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+carrier gas (Optional, Multivalued) + +**Description:** Carrier gas used in a process (e.g. in GC analysis or ALD deposition). + +**Data Type:** ChemicalEntity + +**Cardinality:** Optional, Multivalued + +**CURIE:** [`coremeta4cat:carrier_gas`](https://w3id.org/nfdi4cat/coremeta4cat/carrier_gas) + +**Schema Reference:** [carrier_gas](./elements/slots/carrier_gas.md) + +**Data Type Class Details:** + +
+ChemicalEntity + +**Description:** Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. + +**CURIE:** [`CHEBI:23367`](http://purl.obolibrary.org/obo/CHEBI_23367) -**CURIE:** [`coremeta4cat:combustion_temperature`](https://w3id.org/nfdi4cat/coremeta4cat/combustion_temperature) +*Full field list already shown [earlier on this page](#schema-class-ChemicalEntity) -- this class is reached from multiple fields.* -**Schema Reference:** [combustion_temperature](./elements/slots/combustion_temperature.md) +

- + 💡 Submit Term Feedback

-carrier gas (Optional, Multivalued) - -**Description:** Carrier gas used in a process (e.g. in GC analysis or ALD deposition). +id (Optional) -**Data Type:** ChemicalEntity +**Description:** No description available -**Cardinality:** Optional, Multivalued +**Data Type:** string -**CURIE:** [`coremeta4cat:carrier_gas`](https://w3id.org/nfdi4cat/coremeta4cat/carrier_gas) +**Cardinality:** Optional -**Schema Reference:** [carrier_gas](./elements/slots/carrier_gas.md) +**Schema Reference:** [id](./elements/slots/id.md)

- + 💡 Submit Term Feedback

@@ -3698,7 +4020,7 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h").

-
+
UVVisSpectroscopy **Description:** UV-Vis spectroscopy for electronic transitions, band gap, and concentration determination. @@ -3710,43 +4032,40 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h"). **Slots**
-minimum wavelength (Optional, Multivalued) +wavelength range (Optional, Multivalued) -**Description:** Minimum wavelength of the UV-Vis scan range. +**Description:** Wavelength range of the UV-Vis scan, provided as a QuantitativeRange +with min_value and max_value (unit_code: "nm"). -**Data Type:** float +**Data Type:** QuantitativeRange **Cardinality:** Optional, Multivalued -**CURIE:** [`coremeta4cat:minimum_wavelength`](https://w3id.org/nfdi4cat/coremeta4cat/minimum_wavelength) +**CURIE:** [`coremeta4cat:wavelength_range`](https://w3id.org/nfdi4cat/coremeta4cat/wavelength_range) -**Schema Reference:** [minimum_wavelength](./elements/slots/minimum_wavelength.md) +**Schema Reference:** [wavelength_range](./elements/slots/wavelength_range.md) -**Unit:** nm - -

- - 💡 Submit Term Feedback - -

+**Data Type Class Details:**
-maximum wavelength (Optional, Multivalued) - -**Description:** Maximum wavelength of the UV-Vis scan range. +QuantitativeRange -**Data Type:** float +**Description:** A quantitative property expressed as a range between a lower and upper bound, +sharing a common unit. Used where an experiment operates over a range of +conditions (e.g. a temperature sweep, a feed concentration window). -**Cardinality:** Optional, Multivalued +Aligned to qudt:Quantity (as in the DCAT-AP-PLUS QuantitativeAttribute pattern) +but with min_value / max_value instead of a single value to represent an +interval rather than a point value. Provide the shared unit as a QUDT DefinedTerm. -**CURIE:** [`coremeta4cat:maximum_wavelength`](https://w3id.org/nfdi4cat/coremeta4cat/maximum_wavelength) +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [maximum_wavelength](./elements/slots/maximum_wavelength.md) +*Full field list already shown [earlier on this page](#schema-class-QuantitativeRange) -- this class is reached from multiple fields.* -**Unit:** nm +

- + 💡 Submit Term Feedback

@@ -3785,6 +4104,19 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h"). **Schema Reference:** [solvent](./elements/slots/solvent.md) +**Data Type Class Details:** + +
+ChemicalEntity + +**Description:** Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. + +**CURIE:** [`CHEBI:23367`](http://purl.obolibrary.org/obo/CHEBI_23367) + +*Full field list already shown [earlier on this page](#schema-class-ChemicalEntity) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -3794,27 +4126,63 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h").

has concentration (Optional) -**Description:** No description available +**Description:** The slot to provide the Concentration of a ChemicalSubstance. -**Data Type:** string +**Data Type:** Concentration **Cardinality:** Optional +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + **Schema Reference:** [has_concentration](./elements/slots/has_concentration.md) +**Data Type Class Details:** + +
+Concentration + +**Description:** A QuantitativeAttribute of a ChemicalSubstance that represents the amount of a constituent divided by the volume of the mixture. + +**CURIE:** [`CHMO:0002820`](http://purl.obolibrary.org/obo/CHMO_0002820) + +**Schema Reference:** [Concentration](./elements/classes/Concentration.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback

-
+
PhotoluminescenceSpectroscopy **Description:** Photoluminescence spectroscopy for defect and charge carrier characterization. @@ -3906,13 +4274,9 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h"). **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3920,6 +4284,23 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h").

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
excitation wavelength (Optional, Multivalued) @@ -3942,13 +4323,9 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h"). **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [LengthQuantity](./elements/classes/LengthQuantity.md) +*Full field list already shown [earlier on this page](#schema-class-LengthQuantity) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3978,13 +4355,9 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h"). **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [LengthQuantity](./elements/classes/LengthQuantity.md) +*Full field list already shown [earlier on this page](#schema-class-LengthQuantity) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -4014,14 +4387,29 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h").

has temperature (Optional) -**Description:** No description available +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. -**Data Type:** string +**Data Type:** Temperature **Cardinality:** Optional +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + **Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -4034,7 +4422,7 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h").

-
+
PhotoluminescenceLifetime **Description:** Time-resolved photoluminescence for charge carrier lifetime and recombination dynamics. @@ -4065,13 +4453,13 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h").

-number of shots (Optional, Multivalued) +number of shots (Optional) **Description:** Number of laser shots accumulated per measurement point. **Data Type:** integer -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`coremeta4cat:number_of_shots`](https://w3id.org/nfdi4cat/coremeta4cat/number_of_shots) @@ -4083,6 +4471,23 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h").

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
excitation wavelength (Optional, Multivalued) @@ -4105,13 +4510,9 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h"). **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [LengthQuantity](./elements/classes/LengthQuantity.md) +*Full field list already shown [earlier on this page](#schema-class-LengthQuantity) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -4141,13 +4542,9 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h"). **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [LengthQuantity](./elements/classes/LengthQuantity.md) +*Full field list already shown [earlier on this page](#schema-class-LengthQuantity) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -4177,14 +4574,29 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h").

has temperature (Optional) -**Description:** No description available +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. -**Data Type:** string +**Data Type:** Temperature **Cardinality:** Optional +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + **Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -4197,7 +4609,7 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h").

-
+
CyclicVoltammetry **Description:** Cyclic voltammetry for electrochemical activity, redox potential, and capacitance characterization. @@ -4230,43 +4642,40 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h").

-minimum potential (Optional, Multivalued) +scan potential range (Optional, Multivalued) -**Description:** Lower potential limit in cyclic voltammetry. +**Description:** Potential window scanned in cyclic voltammetry, provided as a +QuantitativeRange with min_value and max_value (unit_code: "V"). -**Data Type:** float +**Data Type:** QuantitativeRange **Cardinality:** Optional, Multivalued -**CURIE:** [`coremeta4cat:minimum_potential`](https://w3id.org/nfdi4cat/coremeta4cat/minimum_potential) - -**Schema Reference:** [minimum_potential](./elements/slots/minimum_potential.md) +**CURIE:** [`coremeta4cat:scan_potential_range`](https://w3id.org/nfdi4cat/coremeta4cat/scan_potential_range) -**Unit:** V +**Schema Reference:** [scan_potential_range](./elements/slots/scan_potential_range.md) -

- - 💡 Submit Term Feedback - -

+**Data Type Class Details:**
-maximum potential (Optional, Multivalued) - -**Description:** Upper potential limit in cyclic voltammetry. +QuantitativeRange -**Data Type:** float +**Description:** A quantitative property expressed as a range between a lower and upper bound, +sharing a common unit. Used where an experiment operates over a range of +conditions (e.g. a temperature sweep, a feed concentration window). -**Cardinality:** Optional, Multivalued +Aligned to qudt:Quantity (as in the DCAT-AP-PLUS QuantitativeAttribute pattern) +but with min_value / max_value instead of a single value to represent an +interval rather than a point value. Provide the shared unit as a QUDT DefinedTerm. -**CURIE:** [`coremeta4cat:maximum_potential`](https://w3id.org/nfdi4cat/coremeta4cat/maximum_potential) +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [maximum_potential](./elements/slots/maximum_potential.md) +*Full field list already shown [earlier on this page](#schema-class-QuantitativeRange) -- this class is reached from multiple fields.* -**Unit:** V +

- + 💡 Submit Term Feedback

@@ -4293,13 +4702,13 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h").

-number of cycles (Optional, Multivalued) +number of cycles (Optional) **Description:** Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles). **Data Type:** integer -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`VOC4CAT:0008123`](https://w3id.org/nfdi4cat/voc4cat_0008123) @@ -4311,6 +4720,23 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h").

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
reference electrode (Optional, Multivalued) @@ -4400,6 +4826,19 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h"). **Schema Reference:** [electrolyte_concentration](./elements/slots/electrolyte_concentration.md) +**Data Type Class Details:** + +
+Concentration + +**Description:** A QuantitativeAttribute of a ChemicalSubstance that represents the amount of a constituent divided by the volume of the mixture. + +**CURIE:** [`CHMO:0002820`](http://purl.obolibrary.org/obo/CHMO_0002820) + +*Full field list already shown [earlier on this page](#schema-class-Concentration) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -4415,7 +4854,7 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h"). **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0007809`](https://w3id.org/nfdi4cat/voc4cat_0007809) **Schema Reference:** [has_atmosphere](./elements/slots/has_atmosphere.md) @@ -4429,48 +4868,41 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) -**Schema Reference:** [Atmosphere](./elements/classes/Atmosphere.md) +*Full field list already shown [earlier on this page](#schema-class-Atmosphere) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+ -**Possible Subclasses / Enumerations of Atmosphere:** +

+ + 💡 Submit Term Feedback + +

-CalcinationGaseousEnvironment +has temperature (Optional) -**Description:** The specific gaseous environment maintained during a calcination step -(e.g. "air", "N2", "10% O2/N2"). +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. -**CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) +**Data Type:** Temperature -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +**Cardinality:** Optional -

- - 💡 Submit Term Feedback - -

+**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) -

- - 💡 Submit Term Feedback - -

+**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) + +**Data Type Class Details:**
-has temperature (Optional) +Temperature -**Description:** No description available +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. -**Data Type:** string +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Cardinality:** Optional +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* -**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) +

@@ -4484,7 +4916,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").

-
+
ConductivityMeasurement **Description:** Electrical conductivity measurement for ionic and electronic transport characterization. @@ -4573,6 +5005,23 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
reference electrode (Optional, Multivalued) @@ -4662,6 +5111,19 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **Schema Reference:** [electrolyte_concentration](./elements/slots/electrolyte_concentration.md) +**Data Type Class Details:** + +
+Concentration + +**Description:** A QuantitativeAttribute of a ChemicalSubstance that represents the amount of a constituent divided by the volume of the mixture. + +**CURIE:** [`CHMO:0002820`](http://purl.obolibrary.org/obo/CHMO_0002820) + +*Full field list already shown [earlier on this page](#schema-class-Concentration) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -4677,7 +5139,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0007809`](https://w3id.org/nfdi4cat/voc4cat_0007809) **Schema Reference:** [has_atmosphere](./elements/slots/has_atmosphere.md) @@ -4691,31 +5153,9 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) -**Schema Reference:** [Atmosphere](./elements/classes/Atmosphere.md) - -

- - 💡 Submit Term Feedback - -

- -**Possible Subclasses / Enumerations of Atmosphere:** - -
-CalcinationGaseousEnvironment - -**Description:** The specific gaseous environment maintained during a calcination step -(e.g. "air", "N2", "10% O2/N2"). - -**CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) - -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +*Full field list already shown [earlier on this page](#schema-class-Atmosphere) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -4726,14 +5166,29 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").

has temperature (Optional) -**Description:** No description available +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. -**Data Type:** string +**Data Type:** Temperature **Cardinality:** Optional +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + **Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -4746,7 +5201,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").

-
+
DynamicLightScattering **Description:** Dynamic light scattering for hydrodynamic particle size distribution in suspension. @@ -4770,6 +5225,19 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **Schema Reference:** [solvent](./elements/slots/solvent.md) +**Data Type Class Details:** + +
+ChemicalEntity + +**Description:** Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. + +**CURIE:** [`CHEBI:23367`](http://purl.obolibrary.org/obo/CHEBI_23367) + +*Full field list already shown [earlier on this page](#schema-class-ChemicalEntity) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -4779,14 +5247,29 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").

has concentration (Optional) -**Description:** No description available +**Description:** The slot to provide the Concentration of a ChemicalSubstance. -**Data Type:** string +**Data Type:** Concentration **Cardinality:** Optional +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + **Schema Reference:** [has_concentration](./elements/slots/has_concentration.md) +**Data Type Class Details:** + +
+Concentration + +**Description:** A QuantitativeAttribute of a ChemicalSubstance that represents the amount of a constituent divided by the volume of the mixture. + +**CURIE:** [`CHMO:0002820`](http://purl.obolibrary.org/obo/CHMO_0002820) + +*Full field list already shown [earlier on this page](#schema-class-Concentration) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -4815,13 +5298,9 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [LengthQuantity](./elements/classes/LengthQuantity.md) +*Full field list already shown [earlier on this page](#schema-class-LengthQuantity) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -4844,7 +5323,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **Data Type Class Details:** -

+
PlaneAngle **Description:** A quantitative measure of a plane angle (e.g. scattering angle in degrees). @@ -4887,14 +5366,29 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").
has temperature (Optional) -**Description:** No description available +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. -**Data Type:** string +**Data Type:** Temperature **Cardinality:** Optional +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + **Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -4914,6 +5408,19 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **Schema Reference:** [dispersant](./elements/slots/dispersant.md) +**Data Type Class Details:** + +

+ChemicalEntity + +**Description:** Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. + +**CURIE:** [`CHEBI:23367`](http://purl.obolibrary.org/obo/CHEBI_23367) + +*Full field list already shown [earlier on this page](#schema-class-ChemicalEntity) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -4942,13 +5449,9 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -4956,13 +5459,30 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback

-
+
ElectroSprayIonizationMassSpectrometry **Description:** Electrospray ionisation mass spectrometry for molecular mass and identity determination. @@ -4996,13 +5516,9 @@ process (e.g. "transmission", "reflection", "AC", "DC", "full-scan"). **CURIE:** [`VOC4CAT:0000108`](https://w3id.org/nfdi4cat/voc4cat_0000108) -**Schema Reference:** [OperationMode](./elements/classes/OperationMode.md) +*Full field list already shown [earlier on this page](#schema-class-OperationMode) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -5032,13 +5548,9 @@ process (e.g. "transmission", "reflection", "AC", "DC", "full-scan"). **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [ElectricPotential](./elements/classes/ElectricPotential.md) +*Full field list already shown [earlier on this page](#schema-class-ElectricPotential) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -5059,6 +5571,19 @@ process (e.g. "transmission", "reflection", "AC", "DC", "full-scan"). **Schema Reference:** [capillary_temperature](./elements/slots/capillary_temperature.md) +**Data Type Class Details:** + +

+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -5106,13 +5631,9 @@ process (e.g. "transmission", "reflection", "AC", "DC", "full-scan"). **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [VolumeFlowRate](./elements/classes/VolumeFlowRate.md) +*Full field list already shown [earlier on this page](#schema-class-VolumeFlowRate) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -5133,64 +5654,59 @@ process (e.g. "transmission", "reflection", "AC", "DC", "full-scan"). **Schema Reference:** [carrier_gas](./elements/slots/carrier_gas.md) -

- - 💡 Submit Term Feedback - -

+**Data Type Class Details:**
-has concentration (Optional) +ChemicalEntity -**Description:** No description available +**Description:** Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. -**Data Type:** string +**CURIE:** [`CHEBI:23367`](http://purl.obolibrary.org/obo/CHEBI_23367) -**Cardinality:** Optional +*Full field list already shown [earlier on this page](#schema-class-ChemicalEntity) -- this class is reached from multiple fields.* -**Schema Reference:** [has_concentration](./elements/slots/has_concentration.md) +

- + 💡 Submit Term Feedback

-has mz range (Optional) +has concentration (Optional) -**Description:** Mass-to-charge ratio scan range (minimum -> maximum m/z) as a QuantitativeRange. -The unit for m/z is dimensionless (Thomson); set unit to the appropriate QUDT term. +**Description:** The slot to provide the Concentration of a ChemicalSubstance. -**Data Type:** QuantitativeRange +**Data Type:** Concentration **Cardinality:** Optional -**CURIE:** [`coremeta4cat:hasMzRange`](https://w3id.org/nfdi4cat/coremeta4cat/hasMzRange) +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) -**Schema Reference:** [has_mz_range](./elements/slots/has_mz_range.md) +**Schema Reference:** [has_concentration](./elements/slots/has_concentration.md) **Data Type Class Details:**
-QuantitativeRange +Concentration -**Description:** A quantitative property expressed as a range between a lower and upper bound, -sharing a common unit. Used where an experiment operates over a range of -conditions (e.g. a temperature sweep, a feed concentration window). +**Description:** A QuantitativeAttribute of a ChemicalSubstance that represents the amount of a constituent divided by the volume of the mixture. -Aligned to qudt:Quantity (as in the DCAT-AP-PLUS QuantitativeAttribute pattern) -but with min_value / max_value instead of a single value to represent an -interval rather than a point value. Provide the shared unit as a QUDT DefinedTerm. +**CURIE:** [`CHMO:0002820`](http://purl.obolibrary.org/obo/CHMO_0002820) -**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) +*Full field list already shown [earlier on this page](#schema-class-Concentration) -- this class is reached from multiple fields.* -**Schema Reference:** [QuantitativeRange](./elements/classes/QuantitativeRange.md) +
-**Slots** +

+ + 💡 Submit Term Feedback + +

-title (Optional) +id (Optional) **Description:** No description available @@ -5198,36 +5714,46 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Cardinality:** Optional -**Schema Reference:** [title](./elements/slots/title.md) +**Schema Reference:** [id](./elements/slots/id.md)

- + 💡 Submit Term Feedback

-description (Optional) +has mz range (Optional) -**Description:** No description available +**Description:** Mass-to-charge ratio scan range (minimum -> maximum m/z) as a QuantitativeRange. +The unit for m/z is dimensionless (Thomson); set unit to the appropriate QUDT term. -**Data Type:** string +**Data Type:** QuantitativeRange **Cardinality:** Optional -**Schema Reference:** [description](./elements/slots/description.md) +**CURIE:** [`coremeta4cat:hasMzRange`](https://w3id.org/nfdi4cat/coremeta4cat/hasMzRange) -

- - 💡 Submit Term Feedback - -

+**Schema Reference:** [has_mz_range](./elements/slots/has_mz_range.md) + +**Data Type Class Details:** + +
+QuantitativeRange + +**Description:** A quantitative property expressed as a range between a lower and upper bound, +sharing a common unit. Used where an experiment operates over a range of +conditions (e.g. a temperature sweep, a feed concentration window). + +Aligned to qudt:Quantity (as in the DCAT-AP-PLUS QuantitativeAttribute pattern) +but with min_value / max_value instead of a single value to represent an +interval rather than a point value. Provide the shared unit as a QUDT DefinedTerm. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -

- - 💡 Submit Term Feedback - -

+*Full field list already shown [earlier on this page](#schema-class-QuantitativeRange) -- this class is reached from multiple fields.* + +

@@ -5241,7 +5767,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

-
+
GCMS **Description:** Gas chromatography-mass spectrometry for volatile compound identification and quantification. @@ -5265,6 +5791,19 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Schema Reference:** [carrier_gas](./elements/slots/carrier_gas.md) +**Data Type Class Details:** + +
+ChemicalEntity + +**Description:** Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. + +**CURIE:** [`CHEBI:23367`](http://purl.obolibrary.org/obo/CHEBI_23367) + +*Full field list already shown [earlier on this page](#schema-class-ChemicalEntity) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -5303,6 +5842,19 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Schema Reference:** [inlet_temperature](./elements/slots/inlet_temperature.md) +**Data Type Class Details:** + +

+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -5310,39 +5862,40 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

-minimum oven temperature (Optional, Multivalued) +oven temperature range (Optional, Multivalued) -**Description:** Minimum oven temperature in GC temperature programme. +**Description:** Oven temperature range in the GC temperature programme, provided as a +QuantitativeRange with min_value and max_value (unit_code: "Cel"). -**Data Type:** Temperature +**Data Type:** QuantitativeRange **Cardinality:** Optional, Multivalued -**CURIE:** [`coremeta4cat:minimum_oven_temperature`](https://w3id.org/nfdi4cat/coremeta4cat/minimum_oven_temperature) +**CURIE:** [`coremeta4cat:oven_temperature_range`](https://w3id.org/nfdi4cat/coremeta4cat/oven_temperature_range) -**Schema Reference:** [minimum_oven_temperature](./elements/slots/minimum_oven_temperature.md) +**Schema Reference:** [oven_temperature_range](./elements/slots/oven_temperature_range.md) -

- - 💡 Submit Term Feedback - -

+**Data Type Class Details:**
-maximum oven temperature (Optional, Multivalued) +QuantitativeRange -**Description:** Maximum oven temperature in GC temperature programme. +**Description:** A quantitative property expressed as a range between a lower and upper bound, +sharing a common unit. Used where an experiment operates over a range of +conditions (e.g. a temperature sweep, a feed concentration window). -**Data Type:** Temperature +Aligned to qudt:Quantity (as in the DCAT-AP-PLUS QuantitativeAttribute pattern) +but with min_value / max_value instead of a single value to represent an +interval rather than a point value. Provide the shared unit as a QUDT DefinedTerm. -**Cardinality:** Optional, Multivalued +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**CURIE:** [`coremeta4cat:maximum_oven_temperature`](https://w3id.org/nfdi4cat/coremeta4cat/maximum_oven_temperature) +*Full field list already shown [earlier on this page](#schema-class-QuantitativeRange) -- this class is reached from multiple fields.* -**Schema Reference:** [maximum_oven_temperature](./elements/slots/maximum_oven_temperature.md) +

- + 💡 Submit Term Feedback

@@ -5369,13 +5922,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [HeatingRate](./elements/classes/HeatingRate.md) +*Full field list already shown [earlier on this page](#schema-class-HeatingRate) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -5406,13 +5955,9 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h"). **CURIE:** [`coremeta4cat:HeatingProcedure`](https://w3id.org/nfdi4cat/coremeta4cat/HeatingProcedure) -**Schema Reference:** [HeatingProcedure](./elements/classes/HeatingProcedure.md) +*Full field list already shown [earlier on this page](#schema-class-HeatingProcedure) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -5498,6 +6043,23 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h").

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
column type (Optional, Multivalued) @@ -5530,6 +6092,19 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h"). **Schema Reference:** [eluent](./elements/slots/eluent.md) +**Data Type Class Details:** + +
+ChemicalEntity + +**Description:** Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. + +**CURIE:** [`CHEBI:23367`](http://purl.obolibrary.org/obo/CHEBI_23367) + +*Full field list already shown [earlier on this page](#schema-class-ChemicalEntity) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -5558,13 +6133,9 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h"). **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [VolumeFlowRate](./elements/classes/VolumeFlowRate.md) +*Full field list already shown [earlier on this page](#schema-class-VolumeFlowRate) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -5585,6 +6156,23 @@ applied (e.g. "isothermal", "ramp 5 °C/min to 500 °C, dwell 2 h"). **Schema Reference:** [has_injection_volume](./elements/slots/has_injection_volume.md) +**Data Type Class Details:** + +

+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +**Schema Reference:** [Volume](./elements/classes/Volume.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback @@ -5658,49 +6246,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [QuantitativeRange](./elements/classes/QuantitativeRange.md) - -**Slots** - -

-title (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional - -**Schema Reference:** [title](./elements/slots/title.md) - -

- - 💡 Submit Term Feedback - -

- -
-description (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional - -**Schema Reference:** [description](./elements/slots/description.md) - -

- - 💡 Submit Term Feedback - -

+*Full field list already shown [earlier on this page](#schema-class-QuantitativeRange) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -5714,7 +6262,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

-
+
SizeExclusionChromatography **Description:** Size exclusion chromatography for molecular weight distribution determination. @@ -5728,14 +6276,29 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer
has temperature (Optional) -**Description:** No description available +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. -**Data Type:** string +**Data Type:** Temperature **Cardinality:** Optional +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + **Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -5761,6 +6324,23 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
column type (Optional, Multivalued) @@ -5793,6 +6373,19 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Schema Reference:** [eluent](./elements/slots/eluent.md) +**Data Type Class Details:** + +
+ChemicalEntity + +**Description:** Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. + +**CURIE:** [`CHEBI:23367`](http://purl.obolibrary.org/obo/CHEBI_23367) + +*Full field list already shown [earlier on this page](#schema-class-ChemicalEntity) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -5821,13 +6414,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [VolumeFlowRate](./elements/classes/VolumeFlowRate.md) +*Full field list already shown [earlier on this page](#schema-class-VolumeFlowRate) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -5848,6 +6437,19 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Schema Reference:** [has_injection_volume](./elements/slots/has_injection_volume.md) +**Data Type Class Details:** + +

+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Volume) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -5898,7 +6500,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

-
+
HighPerformanceLiquidChromatographyMassSpectrometry **Description:** High-performance liquid chromatography-mass spectrometry for compound identification and quantification. @@ -5950,20 +6552,52 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer
has temperature (Optional) -**Description:** No description available +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. -**Data Type:** string +**Data Type:** Temperature **Cardinality:** Optional +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + **Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
column type (Optional, Multivalued) @@ -5996,6 +6630,19 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Schema Reference:** [eluent](./elements/slots/eluent.md) +**Data Type Class Details:** + +
+ChemicalEntity + +**Description:** Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. + +**CURIE:** [`CHEBI:23367`](http://purl.obolibrary.org/obo/CHEBI_23367) + +*Full field list already shown [earlier on this page](#schema-class-ChemicalEntity) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -6024,13 +6671,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [VolumeFlowRate](./elements/classes/VolumeFlowRate.md) +*Full field list already shown [earlier on this page](#schema-class-VolumeFlowRate) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -6051,6 +6694,19 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Schema Reference:** [has_injection_volume](./elements/slots/has_injection_volume.md) +**Data Type Class Details:** + +

+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Volume) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback diff --git a/docs/getting-started.md b/docs/getting-started.md index 646c48553..1ffad1e37 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -26,7 +26,7 @@ The path below goes from the simplest possible adoption — using the vocabulary ``` Level 1 ──► Understand the vocabulary hierarchy ↓ -Level 2 ──► Annotate your own spreadsheets with Voc4Cat terms +Level 2 ──► Annotate your own spreadsheets with CoreMeta4Cat terms ↓ Level 3 ──► Write a lightweight JSON converter for your sheet structure ↓ @@ -51,23 +51,75 @@ The workbook has five sheets: | Sheet | What it shows | |---|---| -| **CatCore** | The minimal global field set — catalyst type, support, metal, metal loading, additive, reaction type — with the Voc4Cat term for each | -| **Catalysts synthesis precise** | The full hierarchy of synthesis fields, organised by synthesis step (solvation, mixing, milling, pH adjustment, filtration, crystallisation, washing, dilution, impregnation, drying, calcination, sieving, pelleting), with the corresponding Voc4Cat CURIE shown in each column header | -| **Characterization FF** | Method parameter fields for 10+ characterisation techniques (PXRD, XAS, FTIR, Raman, GC-MS, …), showing which ontology terms apply to which measurement parameters | -| **Characterization results** | The result fields that should be reported for each of the 25 techniques currently in CoreMeta4Cat, with the relevant ontology term for each result type | -| **Cat test** | The full hierarchy of reaction / catalytic test fields — reactor type, operation mode, reactants, solvent, products, analysis — with Voc4Cat CURIEs | +| **CoreMeta4Cat** | The minimal global field set — catalyst type, support, metal, metal loading, additive, reaction type — with the CURIE for each | +| **Synthesis** | The full hierarchy of synthesis fields, organised by synthesis step (solvation, mixing, milling, pH adjustment, filtration, crystallisation, washing, dilution, impregnation, drying, calcination, sieving, pelleting), with the corresponding CURIE shown in each column header | +| **Characterization** | Method parameter fields and result fields for the characterisation techniques currently in CoreMeta4Cat, showing which ontology terms apply to which measurement parameters and result types | +| **Reaction** | The full hierarchy of reaction / catalytic test fields — reactor type, operation mode, reactants, solvent, products, analysis — with CURIEs | +| **Simulation** | Fields for computational simulations — simulation method (DFT, molecular dynamics, microkinetics, Monte Carlo) and the calculated properties they produce — with CURIEs | Use this workbook to find the right term for a concept you want to annotate, and to understand how fields nest within each other (e.g. which parameters belong under a calcination step versus a drying step). +### How the workbook is organised + +Every data sheet (`CoreMeta4Cat`, `Synthesis`, `Characterization`, `Reaction`, `Simulation`) uses the same ten columns — `label`, `type`, `domain`, `M / R / O`, `range`, `multivalued`, `inlined as list`, `unit`, `uri`, `description` — and the same colour coding. Both are explained on the workbook's own **Legend** sheet, reproduced here: + +

+ Legend sheet from the CoreMeta4Cat vocabulary workbook, showing the Mandatory/Recommended/Optional/Inherited colour coding and column descriptions +
+ +In short: + +- **Red rows (M)** — Mandatory. A record is not schema-valid without these fields. +- **Blue rows (R)** — Recommended. Strongly encouraged; omitting them reduces how findable and reusable your data is. +- **Green rows (O)** — Optional. Useful additional context, not required. +- **Grey italic rows** — Inherited from chemdcat-ap, the underlying chemistry data model CoreMeta4Cat is built on. Shown for reference only — they can't be added, changed, or removed through the inbox workflow described below. Open a GitHub issue instead if one of these needs correcting. + +A `class`-type row (also shown in grey, but bold rather than plain italic) means the field above it doesn't take a plain value — it expands into its own structured sub-record. Here is a real excerpt from the **Synthesis** sheet, showing Mandatory, Recommended, Optional, and Inherited rows together, and how the `solvent` field expands into the inherited `ChemicalEntity` class and its own sub-fields (`inchi`, `inchikey`, `smiles`, …): + +
+ Excerpt from the Synthesis sheet of the CoreMeta4Cat vocabulary workbook, showing all ten columns and the M/R/O/Inherited colour coding +
+ +### Proposing a change: the inbox workflow in detail + +The workbook is also the mechanism for proposing changes to the vocabulary — no coding required. This section goes into more detail than the [Contributing guide](contributing.md); read that page for the short version. + +1. **Download** the workbook using the button above. Don't create a new workbook from scratch — always start from the current generated file, since the automated check compares your edits against the live schema. +2. **Edit the `Synthesis`, `Characterization`, `Reaction`, or `Simulation` sheet directly.** + - To correct an existing field: change its `M / R / O`, `range`, `unit`, `uri`, or `description` cell. + - To add a new field: add a new row with a `label`, set `type` to `slot`, and set `domain` to the class it belongs to (leave `domain` empty for a top-level field). + - To add a new field that needs a brand-new class (e.g. a field whose `range` doesn't exist yet): add both the new `slot` row and the new `class` row in the same submission — they're validated together. + - Don't touch the grey inherited rows, don't rename sheets, and don't rename or remove column headers — the automated check matches on exact names. +3. **Place the edited file** at `inbox/coremeta4cat_vocabulary.xlsx` in a new branch and **open a pull request**. +4. **Wait for the automated check.** A GitHub Action reads your edited workbook, diffs it against the schema, and posts the results as a comment directly on your PR — usually within a couple of minutes. +5. **Address anything it flags**, then push again (the check re-runs automatically on every push). Once it passes cleanly, a maintainer reviews and merges — the schema, generated docs, and this workbook all update automatically. + +#### Typical messages from the automated check + +The check reports three kinds of things: ✅ changes it applied, ⚠️ warnings worth reviewing, and ❌ errors that block the merge. Here are the messages you're most likely to see, in the check's own wording: + +| Message | What it means | How to fix it | +|---|---|---| +| ❌ *Required sheet **Synthesis** is missing.* | A sheet was renamed, reordered, or deleted. | Re-download the template rather than reusing a modified copy; don't rename sheets. | +| ❌ *Missing required column(s): label, M / R / O.* | A column header in row 1 was edited, reordered, or deleted. | Re-download the template; leave the header row untouched. | +| ❌ *Invalid M/R/O value `'Mandatory'`. Only **M** (Mandatory), **R** (Recommended), or **O** (Optional) are accepted.* | The `M / R / O` cell contains something other than the single letter. | Use exactly `M`, `R`, or `O`. | +| ❌ *Unknown range `Concentraton`. This type is not a recognized primitive or schema class.* | The `range` cell references a type that doesn't exist (often a typo, or a new class you forgot to add as its own row). | Use an existing primitive (`string`, `float`, `integer`, `boolean`) or class name, or add the new class as its own row in the same submission. | +| ⚠️ *Range changed: `string` → `Mass`. This structural change may invalidate existing data files.* | You changed what type of value a field expects. | Often intentional and fine — the test suite checks it automatically, and a maintainer reviews the impact before merging. | +| ⚠️ *This edit changes `has_atmosphere`'s single, global definition — it is not scoped to `Synthesis` alone. It will also change `has_atmosphere` for: `CatalyticReaction`.* | The field you edited is reused by more than one class (shown in the `domain` column of the *other* sheets too), so your edit affects all of them, not just the one you meant to change. | If that's what you intended, no action needed. If you only meant to change it for one class, say so in the PR description — a maintainer can add a class-specific override instead of changing the shared definition. | +| ⚠️ *Present in the schema but **missing** from your workbook (expected label: *drying device*). It will be removed from `Impregnation`.* | A row that exists in the current schema isn't in your uploaded sheet — usually because a row was accidentally deleted or filtered out before saving. | If accidental, re-download the template and redo your edits without deleting rows. If you genuinely meant to remove the field, no action needed — a maintainer reviews deletions before merging. | + +!!! info "Nothing changed?" + If your edits don't actually differ from the current schema, the check simply reports *"✅ The workbook is fully aligned with the schema — no changes were needed."* and closes with nothing to merge. + --- ## Level 2 — Annotating your own spreadsheets -The most lightweight form of CoreMeta4Cat adoption is to take your **existing experimental spreadsheets** — the ones you already use to record synthesis batches, characterisation measurements, or reaction results — and annotate their column headers with the corresponding Voc4Cat terms. +The most lightweight form of CoreMeta4Cat adoption is to take your **existing experimental spreadsheets** — the ones you already use to record synthesis batches, characterisation measurements, or reaction results — and annotate their column headers with the corresponding CoreMeta4Cat terms. ### How the annotation works -Each column header in your sheet gets a Voc4Cat CURIE added alongside it, whether in a second header row, as a cell comment, or simply appended to the header text. There is no prescribed format — what matters is that the machine-readable term is present and unambiguous. +Each column header in your sheet gets a CURIE added alongside it, whether in a second header row, as a cell comment, or simply appended to the header text. There is no prescribed format — what matters is that the machine-readable term is present and unambiguous. The vocabulary reference workbook uses a two-line pattern in each column header as a model: @@ -80,7 +132,7 @@ Here are some representative examples drawn from the reference workbook: **Synthesis fields:** -| Label in reference workbook | Voc4Cat term | Meaning | +| Label in reference workbook | CURIE | Meaning | |---|---|---| | `institution` | `voc4cat:0007842` | Institution where the catalyst was prepared | | `catalyst` | `voc4cat:0007014` | Catalyst type | @@ -95,14 +147,13 @@ Here are some representative examples drawn from the reference workbook: **Reaction / catalytic test fields:** -| Label in reference workbook | Voc4Cat term | Meaning | +| Label in reference workbook | CURIE | Meaning | |---|---|---| | `Reaction type` | `voc4cat:0007010` | Type of catalytic reaction | | `Catalyst mass [g]` | `voc4cat:0007792` | Mass of catalyst loaded | | `Reactor` | `voc4cat:0007017` | Reactor type | | `operation mode` | `voc4cat:0000108` | Batch or flow operation | | `Reactor temperature` | `voc4cat:0007032` | Reactor temperature range | -| `reactant` | `voc4cat:0000101` | Reactant compound(s) | | `Solvent` | `voc4cat:0007246` | Reaction solvent | **Characterisation result fields:** @@ -121,13 +172,13 @@ Here are some representative examples drawn from the reference workbook: You do not need to annotate every column at once. Starting with the most essential fields — **catalyst type, support, metal loading, and reaction type** — already makes your spreadsheet far more comparable against data from other groups, because you are now using the same vocabulary terms. !!! info "What are CURIEs?" - A CURIE (Compact URI) like `voc4cat:0007014` is shorthand for a full web address: `https://w3id.org/nfdi4cat/voc4cat_0007014`. Every Voc4Cat term resolves to a human-readable definition at that address. This means a computer — or another researcher — can unambiguously identify what each field means, regardless of what language your column header is written in. That is the foundation of interoperability. + A CURIE (Compact URI) like `voc4cat:0007014` is shorthand for a full web address: `https://w3id.org/nfdi4cat/voc4cat_0007014`. Every CoreMeta4Cat term — whether it comes from Voc4Cat or another controlled vocabulary such as CHMO or QUDT — resolves to a human-readable definition at its CURIE's address. This means a computer — or another researcher — can unambiguously identify what each field means, regardless of what language your column header is written in. That is the foundation of interoperability. -### The CatCore minimal field set +### The CoreMeta4Cat minimal field set -The **CatCore** sheet in the reference workbook shows the smallest useful annotation set — fields that apply to every catalysis dataset regardless of data class. If you annotate nothing else, annotating these fields is already a meaningful step: +The **CoreMeta4Cat** sheet in the reference workbook shows the smallest useful annotation set — fields that apply to every catalysis dataset regardless of data class. If you annotate nothing else, annotating these fields is already a meaningful step: -| Field | Voc4Cat term | Notes | +| Field | CURIE | Notes | |---|---|---| | Catalyst type | `voc4cat:0007014` | Choose from: heterogeneous (`voc4cat:0007003`), homogeneous (`voc4cat:0007804`), hybrid (`voc4cat:0007805`), biocatalyst | | Support | `voc4cat:0007825` | e.g. Al₂O₃, SiO₂, TiO₂, carbon | @@ -149,7 +200,7 @@ Every research group's spreadsheets are different. Column order, naming conventi This may sound like more work, but in practice a converter for a synthesis sheet is typically 30–80 lines of Python. It is a one-time investment per sheet structure, and it produces a permanent, auditable record of exactly how your data maps onto the CoreMeta4Cat schema. If your sheet layout changes, you update the converter accordingly. -The Voc4Cat annotations you added in Level 2 do most of the work: they are the mapping key that tells the converter which column corresponds to which CoreMeta4Cat field. +The CURIE annotations you added in Level 2 do most of the work: they are the mapping key that tells the converter which column corresponds to which CoreMeta4Cat field. ### What a minimal converter looks like @@ -159,7 +210,7 @@ import openpyxl, json wb = openpyxl.load_workbook("my_synthesis_data.xlsx") ws = wb["Synthesis"] -# Read column headers — these carry the Voc4Cat annotations +# Read column headers — these carry the CURIE annotations # so you know exactly which column maps to which CoreMeta4Cat field headers = [cell.value for cell in ws[1]] @@ -202,7 +253,7 @@ with open("synthesis_records.json", "w") as f: json.dump(records, f, indent=2, ensure_ascii=False) ``` -The column names passed to `data.get(...)` are the same human-readable labels you already have in your sheet header. The Voc4Cat CURIEs in the comments document the semantic meaning of each mapping for anyone reading the script later. +The column names passed to `data.get(...)` are the same human-readable labels you already have in your sheet header. The CURIEs in the comments document the semantic meaning of each mapping for anyone reading the script later. ### The resulting JSON record @@ -263,8 +314,8 @@ Validation reports which mandatory fields are missing, which values fall outside | Level | What you need to do | What you gain | |---|---|---| -| **1 — Vocabulary reference** | Browse the reference workbook | Understanding of the field hierarchy and available Voc4Cat terms | -| **2 — Annotate your sheets** | Add Voc4Cat CURIEs to column headers in your existing sheets | Vocabulary-consistent, comparable data — no programming required | +| **1 — Vocabulary reference** | Browse the reference workbook | Understanding of the field hierarchy and available CoreMeta4Cat terms | +| **2 — Annotate your sheets** | Add CURIEs to column headers in your existing sheets | Vocabulary-consistent, comparable data — no programming required | | **3 — Write a converter** | One small Python script per sheet structure | Fully machine-readable JSON records, ready for repository deposit | | **4 — Validate** | Run `linkml-validate` | Schema compliance, SHACL shapes, RDF export, semantic querying | diff --git a/docs/images/workbook-legend.png b/docs/images/workbook-legend.png new file mode 100644 index 0000000000000000000000000000000000000000..21fb0aa543fb3ed8b559da3d4d163a0987d7c9fb GIT binary patch literal 329666 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

iy$w=l$Lgn~X_a<6MC>BRH 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

TZSX8zHCDSn&B>?R?`8K^^)p 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

A8f}Q6kCKwEP|N17{g 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 -

catalyst quantity (Mandatory, Multivalued) +catalyst quantity (Recommended, Multivalued) **Description:** Mass of catalyst loaded into the reactor. **Data Type:** Mass -**Cardinality:** Mandatory, Multivalued +**Cardinality:** Recommended, Multivalued **CURIE:** [`coremeta4cat:catalyst_quantity`](https://w3id.org/nfdi4cat/coremeta4cat/catalyst_quantity) **Schema Reference:** [catalyst_quantity](./elements/slots/catalyst_quantity.md) +**Data Type Class Details:** + +
+Mass + +**Description:** The strength of a body's gravitational attraction to other bodies. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +**Schema Reference:** [Mass](./elements/classes/Mass.md) + +

+ + 💡 Submit Term Feedback + +

+ +**Possible Subclasses / Enumerations of Mass:** + +
+MolarMass + +**Description:** A Mass (physical quality) that quantifies the mass of a homogeneous ChemicalSubstance containing 6.02 x 10^23 atoms or molecules. + +**CURIE:** [`AFR:0002409`](http://purl.allotrope.org/ontologies/result#AFR_0002409) + +**Schema Reference:** [MolarMass](./elements/classes/MolarMass.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback @@ -55,42 +87,77 @@ Core fields include reactor design type, operational parameters, and product ide

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

-reactant (Mandatory, Multivalued) +catalyst type (Recommended, Multivalued) -**Description:** Reactant(s) or feed chemicals used in the reaction. Provide a ChemicalEntity -instance with inchikey, smiles, or iupac_name. For feed mixtures, list each -component as a separate ChemicalEntity and record composition via has_concentration. +**Description:** The catalytic regime of the reaction (e.g. heterogeneous, homogeneous, +biocatalysis, electrocatalysis, photocatalysis). For the physical +form/presentation of the catalyst itself, use catalyst_form instead. + +Deliberately kept `recommended` rather than `required` (see nfdi4cat/ +CoreMeta4Cat#117): classification here can be genuinely disputed or +not yet covered by CatalysisResearchFieldEnum for a novel catalyst, +and forcing a value would push researchers into a premature or +contested classification rather than leaving the field unset until +consensus/vocabulary catches up. Open for discussion in a follow-up +issue if a different tradeoff is wanted. See also nfdi4cat/ +CoreMeta4Cat#116 on whether this two-slot design (catalyst_type + +catalyst_form) or PR #118's CatalystType class hierarchy should be +the long-term mechanism -- kept as two enums here because the +VOC4CAT terms show CatalystType conflates the regime axis +(Heterogeneous/Homogeneous/Bio/Electro/Photo) with the physical-form +axis (ThinFilm/Bulk/Powdered/DepositedSample/Supported -- identical +VOC4CAT ids to catalyst_form's permissible values), which are +independent and often both apply to the same catalyst at once. + +**Data Type:** CatalysisResearchFieldEnum -**Data Type:** ChemicalEntity +**Cardinality:** Recommended, Multivalued -**Cardinality:** Mandatory, Multivalued +**CURIE:** [`VOC4CAT:0007014`](https://w3id.org/nfdi4cat/voc4cat_0007014) + +**Schema Reference:** [catalyst_type](./elements/slots/catalyst_type.md) -**CURIE:** [`VOC4CAT:0000101`](https://w3id.org/nfdi4cat/voc4cat_0000101) +

+ + 💡 Submit Term Feedback + +

+ +
+catalyst form (Recommended, Multivalued) + +**Description:** The physical form or presentation of the catalyst as loaded into the +reactor (e.g. thin film, bulk, powder, supported). A separate axis +from catalyst_type (the catalytic regime). -**Schema Reference:** [reactant](./elements/slots/reactant.md) +**Data Type:** CatalystFormEnum + +**Cardinality:** Recommended, Multivalued + +**Schema Reference:** [catalyst_form](./elements/slots/catalyst_form.md)

- + 💡 Submit Term Feedback

-catalyst type (Recommended, Multivalued) +reaction name (Recommended) -**Description:** Type of catalyst used (e.g. heterogeneous, homogeneous, biocatalyst). -For heterogeneous catalysts, use voc4cat terms where available. +**Description:** A name for the catalytic reaction which assigns the reactants and +(desired) products (e.g. "ammonia synthesis", "Fischer-Tropsch synthesis"). **Data Type:** string -**Cardinality:** Recommended, Multivalued +**Cardinality:** Recommended -**CURIE:** [`VOC4CAT:0007014`](https://w3id.org/nfdi4cat/voc4cat_0007014) +**CURIE:** [`VOC4CAT:0007009`](https://w3id.org/nfdi4cat/voc4cat_0007009) -**Schema Reference:** [catalyst_type](./elements/slots/catalyst_type.md) +**Schema Reference:** [reaction_name](./elements/slots/reaction_name.md)

- + 💡 Submit Term Feedback

@@ -112,7 +179,7 @@ For a single set-point, set min_value equal to max_value. **Data Type Class Details:** -
+
QuantitativeRange **Description:** A quantitative property expressed as a range between a lower and upper bound, @@ -184,13 +251,13 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0007809`](https://w3id.org/nfdi4cat/voc4cat_0007809) **Schema Reference:** [has_atmosphere](./elements/slots/has_atmosphere.md) **Data Type Class Details:** -
+
Atmosphere **Description:** A qualitative descriptor of the gaseous environment or atmospheric @@ -208,7 +275,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **Possible Subclasses / Enumerations of Atmosphere:** -
+
CalcinationGaseousEnvironment **Description:** The specific gaseous environment maintained during a calcination step @@ -243,6 +310,23 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **Schema Reference:** [experiment_pressure](./elements/slots/experiment_pressure.md) +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +**Schema Reference:** [Pressure](./elements/classes/Pressure.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback @@ -266,7 +350,7 @@ vol% or mol%). For fixed-composition experiments use reactant.has_concentration. **Data Type Class Details:** -

+
QuantitativeRange **Description:** A quantitative property expressed as a range between a lower and upper bound, @@ -279,49 +363,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [QuantitativeRange](./elements/classes/QuantitativeRange.md) - -**Slots** - -
-title (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional - -**Schema Reference:** [title](./elements/slots/title.md) - -

- - 💡 Submit Term Feedback - -

- -
-description (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional - -**Schema Reference:** [description](./elements/slots/description.md) - -

- - 💡 Submit Term Feedback - -

+*Full field list already shown [earlier on this page](#schema-class-QuantitativeRange) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -344,7 +388,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Data Type Class Details:** -

+
Duration **Description:** A quantitative measure of elapsed time (duration of a process step). @@ -382,7 +426,7 @@ The abstract stub ProductIdentificationMethod is retained for backward compatibi **Data Type Class Details:** -
+
ProductIdentificationMethod **Description:** Abstract Plan representing the method used to identify and quantify reaction @@ -390,13 +434,34 @@ products. In practice, users should reference a concrete CharacterizationTechniq subclass from coremeta4cat_characterization_ap (e.g. GCMS, HPLC_MS, NMRSpectroscopy). This abstract class is retained for backward compatibility with the original -CoreMeta4Cat monolith. It is a subclass of Plan (prov:Plan / OBI:0000272) so that -it can participate in the realized_plan slot if needed. +CoreMeta4Cat monolith. It is a subclass of CatalysisPlan (which is itself a Plan, +prov:Plan / OBI:0000272) so that it can participate in the realized_plan slot, +and so it (and every other CoreMeta4Cat protocol/technique class) can carry a +persistent id. **CURIE:** [`OBI:0000272`](http://purl.obolibrary.org/obo/OBI_0000272) **Schema Reference:** [ProductIdentificationMethod](./elements/classes/ProductIdentificationMethod.md) +**Slots** + +
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback @@ -410,284 +475,5913 @@ it can participate in the realized_plan slot if needed.

-carried out by (Mandatory, Multivalued) +used starting material (Recommended, Multivalued) -**Description:** The reactor in which the Reaction takes place. -Must be a Reactor instance (a Device subclass specific to catalytic -reaction vessels, e.g. FixedBedReactor, CSTR, Autoclave). +**Description:** The slot to specify the StartingMaterial(s) of a ChemicalReaction. -**Data Type:** ChemicalReactor +**Data Type:** StartingMaterial -**Cardinality:** Mandatory, Multivalued - -**Schema Reference:** [carried_out_by](./elements/slots/carried_out_by.md) +**Cardinality:** Recommended, Multivalued -**Data Type Class Details:** +**CURIE:** [`RO:0004009`](http://purl.obolibrary.org/obo/RO_0004009) -
-ChemicalReactor +**Schema Reference:** [used_starting_material](./elements/slots/used_starting_material.md) -**Abstract Class** +**Data Type Class Details:** -**Description:** Abstract Device subclass representing a catalytic reactor vessel. +
+StartingMaterial -Reactor is more specific than the general Device (AgenticEntity): it restricts -carried_out_by on Reaction to dedicated reactor equipment. This semantic -distinction separates analytical instruments (Device) from reaction vessels -(Reactor) in the carried_out_by relationship. +**Description:** A ChemicalSubstance with that has a starting material role in a synthesis. -Concrete subclasses (FixedBedReactor, CSTR, PlugFlowReactor, …) specify -reactor geometry and operating mode. -Linked from Reaction via carried_out_by (restricted to range: Reactor). +**CURIE:** [`PROCO:0000029`](http://purl.obolibrary.org/obo/PROCO_0000029) -**CURIE:** [`VOC4CAT:0007018`](https://w3id.org/nfdi4cat/voc4cat_0007018) +**Schema Reference:** [StartingMaterial](./elements/classes/StartingMaterial.md) -**Schema Reference:** [ChemicalReactor](./elements/classes/ChemicalReactor.md) +**Slots** -

- - 💡 Submit Term Feedback - -

+
+has molar equivalent (Optional) -**Possible Subclasses / Enumerations of ChemicalReactor:** +**Description:** A slot to provide the MolarEquivalent of a ChemicalSubstance, such as the DissolvingSubstance, Starting Material or Reactant, within the context of a chemical reaction. -
-ElectrochemicalReactor +**Data Type:** MolarEquivalent -**Description:** Electrochemical reactor used in electrocatalytic experiments, including -H-cells, flow cells, and membrane electrode assemblies. +**Cardinality:** Optional -**CURIE:** [`VOC4CAT:0000193`](https://w3id.org/nfdi4cat/voc4cat_0000193) +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) -**Schema Reference:** [ElectrochemicalReactor](./elements/classes/ElectrochemicalReactor.md) +**Schema Reference:** [has_molar_equivalent](./elements/slots/has_molar_equivalent.md) -

- - 💡 Submit Term Feedback - -

+**Data Type Class Details:** -
-CSTR +
+MolarEquivalent -**Description:** Continuous stirred tank reactor (CSTR) — a well-mixed, continuous-flow -reactor operating at steady state. +**Description:** A dimensionless ratio that quantifies the stoichiometric proportion of a chemical substance relative to a reference substance in a chemical reaction. -**CURIE:** [`VOC4CAT:0007019`](https://w3id.org/nfdi4cat/voc4cat_0007019) +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [CSTR](./elements/classes/CSTR.md) +**Schema Reference:** [MolarEquivalent](./elements/classes/MolarEquivalent.md)

- + 💡 Submit Term Feedback

+

+ + 💡 Submit Term Feedback + +

+
-PlugFlowReactor +alternative label (Optional) -**Description:** Plug flow reactor (PFR) — a tubular reactor in which reactant composition -varies along the axis with no axial mixing. +**Description:** The slot to specify an alternative label, name or title for a MaterialEntity. -**CURIE:** [`VOC4CAT:0007102`](https://w3id.org/nfdi4cat/voc4cat_0007102) +**Data Type:** string -**Schema Reference:** [PlugFlowReactor](./elements/classes/PlugFlowReactor.md) +**Cardinality:** Optional + +**CURIE:** [`skos:altLabel`](http://www.w3.org/2004/02/skos/core#altLabel) + +**Schema Reference:** [alternative_label](./elements/slots/alternative_label.md)

- - 💡 Submit Term Feedback - -

+ + 💡 Submit Term Feedback + +

-Autoclave +has physical state (Optional) -**Description:** Autoclave reactor — a sealed pressure vessel for batch reactions at -elevated temperature and/or pressure. +**Description:** The slot to specify the physical state of a MaterialEntity. -**CURIE:** [`NCIT:C93052`](http://purl.obolibrary.org/obo/NCIT_C93052) +**Data Type:** PhysicalStateEnum -**Schema Reference:** [Autoclave](./elements/classes/Autoclave.md) +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_physical_state](./elements/slots/has_physical_state.md)

- - 💡 Submit Term Feedback - -

+ + 💡 Submit Term Feedback + +

-SlurryReactor +has temperature (Optional) -**Description:** Slurry reactor — a three-phase reactor in which catalyst particles are -suspended in a liquid phase through which gas is bubbled. +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. -**CURIE:** [`coremeta4cat:SlurryReactor`](https://w3id.org/nfdi4cat/coremeta4cat/SlurryReactor) +**Data Type:** Temperature -**Schema Reference:** [SlurryReactor](./elements/classes/SlurryReactor.md) +**Cardinality:** Optional -

- - 💡 Submit Term Feedback - -

+**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) -
-Microreactor +**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) -**Description:** Microreactor — a miniaturised flow reactor with characteristic dimensions -in the sub-millimetre range, enabling precise thermal control and rapid -screening. +**Data Type Class Details:** -**CURIE:** [`VOC4CAT:0000234`](https://w3id.org/nfdi4cat/voc4cat_0000234) +
+Temperature -**Schema Reference:** [Microreactor](./elements/classes/Microreactor.md) +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +**Schema Reference:** [Temperature](./elements/classes/Temperature.md)

- + 💡 Submit Term Feedback

+

+ + 💡 Submit Term Feedback + +

+
-FixedBedReactor +has mass (Optional) -**Description:** Fixed bed reactor — a tubular reactor packed with a stationary catalyst bed. -The most common reactor type in heterogeneous catalysis testing. +**Description:** The slot to provide the Mass of a MaterialEntity. -**CURIE:** [`coremeta4cat:FixedBedReactor`](https://w3id.org/nfdi4cat/coremeta4cat/FixedBedReactor) +**Data Type:** Mass -**Schema Reference:** [FixedBedReactor](./elements/classes/FixedBedReactor.md) +**Cardinality:** Optional -

- - 💡 Submit Term Feedback - -

+**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) -
-FluidizedBedReactor +**Schema Reference:** [has_mass](./elements/slots/has_mass.md) -**Description:** Fluidized bed reactor — a reactor in which the catalyst particles are -suspended in an upward-flowing gas or liquid stream. +**Data Type Class Details:** -**CURIE:** [`coremeta4cat:FluidizedBedReactor`](https://w3id.org/nfdi4cat/coremeta4cat/FluidizedBedReactor) +
+Mass -**Schema Reference:** [FluidizedBedReactor](./elements/classes/FluidizedBedReactor.md) +**Description:** The strength of a body's gravitational attraction to other bodies. -**Slots** +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Mass) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

-gas distributor type (Optional, Multivalued) +has volume (Optional) -**Description:** Type or design of the gas distributor plate in a fluidized bed reactor. +**Description:** The slot to provide the Volume of a MaterialEntity. -**Data Type:** string +**Data Type:** Volume -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional -**CURIE:** [`coremeta4cat:gas_distributor_type`](https://w3id.org/nfdi4cat/coremeta4cat/gas_distributor_type) +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) -**Schema Reference:** [gas_distributor_type](./elements/slots/gas_distributor_type.md) +**Schema Reference:** [has_volume](./elements/slots/has_volume.md) + +**Data Type Class Details:** + +
+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +**Schema Reference:** [Volume](./elements/classes/Volume.md)

- + + 💡 Submit Term Feedback + +

+ +

+ 💡 Submit Term Feedback

-bed expansion height (Optional, Multivalued) +has density (Optional) -**Description:** Height of bed expansion above the settled bed height under operating conditions. +**Description:** The slot to provide the Density of a MaterialEntity. -**Data Type:** float +**Data Type:** Density -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional -**CURIE:** [`coremeta4cat:bed_expansion_height`](https://w3id.org/nfdi4cat/coremeta4cat/bed_expansion_height) +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) -**Schema Reference:** [bed_expansion_height](./elements/slots/bed_expansion_height.md) +**Schema Reference:** [has_density](./elements/slots/has_density.md) -**Unit:** cm +**Data Type Class Details:** + +
+Density + +**Description:** A measure of the mass per unit volume of a substance. + +**CURIE:** [`SIO:001406`](http://semanticscience.org/resource/SIO_001406) + +**Schema Reference:** [Density](./elements/classes/Density.md)

- + + 💡 Submit Term Feedback + +

+ +

+ 💡 Submit Term Feedback

-bubble size distribution (Optional) +has pressure (Optional) -**Description:** Description or characterization of bubble size distribution in the fluidized bed. +**Description:** The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity. -**Data Type:** string +**Data Type:** Pressure **Cardinality:** Optional -**CURIE:** [`coremeta4cat:bubble_size_distribution`](https://w3id.org/nfdi4cat/coremeta4cat/bubble_size_distribution) +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) -**Schema Reference:** [bubble_size_distribution](./elements/slots/bubble_size_distribution.md) +**Schema Reference:** [has_pressure](./elements/slots/has_pressure.md) + +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Pressure) -- this class is reached from multiple fields.* + +

- + 💡 Submit Term Feedback

+
+has concentration (Optional) + +**Description:** The slot to provide the Concentration of a ChemicalSubstance. + +**Data Type:** Concentration + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_concentration](./elements/slots/has_concentration.md) + +**Data Type Class Details:** + +
+Concentration + +**Description:** A QuantitativeAttribute of a ChemicalSubstance that represents the amount of a constituent divided by the volume of the mixture. + +**CURIE:** [`CHMO:0002820`](http://purl.obolibrary.org/obo/CHMO_0002820) + +**Schema Reference:** [Concentration](./elements/classes/Concentration.md) +

- + 💡 Submit Term Feedback

- + 💡 Submit Term Feedback

-
-product identification method (Mandatory, Multivalued) +
+has ph value (Optional) -**Description:** The analytical method used to identify and/or quantify reaction products. -Should reference a CharacterizationTechnique instance (e.g. GCMS, HPLC_MS). -The abstract stub ProductIdentificationMethod is retained for backward compatibility. +**Description:** The slot to provide the PHValue of a ChemicalSubstance. -**Data Type:** ProductIdentificationMethod +**Data Type:** PHValue -**Cardinality:** Mandatory, Multivalued +**Cardinality:** Optional -**CURIE:** [`coremeta4cat:product_identification_method`](https://w3id.org/nfdi4cat/coremeta4cat/product_identification_method) +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) -**Schema Reference:** [product_identification_method](./elements/slots/product_identification_method.md) +**Schema Reference:** [has_ph_value](./elements/slots/has_ph_value.md) **Data Type Class Details:** -
-ProductIdentificationMethod +
+PHValue -**Description:** Abstract Plan representing the method used to identify and quantify reaction -products. In practice, users should reference a concrete CharacterizationTechnique -subclass from coremeta4cat_characterization_ap (e.g. GCMS, HPLC_MS, NMRSpectroscopy). +**Description:** No description available -This abstract class is retained for backward compatibility with the original -CoreMeta4Cat monolith. It is a subclass of Plan (prov:Plan / OBI:0000272) so that -it can participate in the realized_plan slot if needed. +**CURIE:** [`SIO:001089`](http://semanticscience.org/resource/SIO_001089) -**CURIE:** [`OBI:0000272`](http://purl.obolibrary.org/obo/OBI_0000272) +**Schema Reference:** [PHValue](./elements/classes/PHValue.md) -**Schema Reference:** [ProductIdentificationMethod](./elements/classes/ProductIdentificationMethod.md) +

+ + 💡 Submit Term Feedback + +

- + + 💡 Submit Term Feedback + +

+ +
+composed of (Recommended, Multivalued) + +**Description:** The slot to provide the chemical entities of which a ChemicalSubstance is composed of. + +**Data Type:** ChemicalEntity + +**Cardinality:** Recommended, Multivalued + +**CURIE:** [`BFO:0000051`](http://purl.obolibrary.org/obo/BFO_0000051) + +**Schema Reference:** [composed_of](./elements/slots/composed_of.md) + +**Data Type Class Details:** + +
+ChemicalEntity + +**Description:** Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. + +**CURIE:** [`CHEBI:23367`](http://purl.obolibrary.org/obo/CHEBI_23367) + +**Schema Reference:** [ChemicalEntity](./elements/classes/ChemicalEntity.md) + +**Slots** + +
+inchi (Recommended) + +**Description:** The slot to provide the InChi descriptor of a ChemicalEntity. + +**Data Type:** InChi + +**Cardinality:** Recommended + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [inchi](./elements/slots/inchi.md) + +**Data Type Class Details:** + +
+InChi + +**Description:** A structure descriptor which conforms to the InChI format specification. + +**CURIE:** [`CHEMINF:000113`](http://semanticscience.org/resource/CHEMINF_000113) + +**Schema Reference:** [InChi](./elements/classes/InChi.md) + +

+ 💡 Submit Term Feedback

- + + 💡 Submit Term Feedback + +

+ +
+inchikey (Recommended) + +**Description:** The slot to provide the InChiKey of a ChemicalEntity. + +**Data Type:** InChIKey + +**Cardinality:** Recommended + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [inchikey](./elements/slots/inchikey.md) + +**Data Type Class Details:** + +
+InChIKey + +**Description:** No description available + +**CURIE:** [`CHEMINF:000059`](http://semanticscience.org/resource/CHEMINF_000059) + +**Schema Reference:** [InChIKey](./elements/classes/InChIKey.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+smiles (Recommended) + +**Description:** The slot to provide the canonical SMILES descriptor of a ChemicalEntity. + +**Data Type:** SMILES + +**Cardinality:** Recommended + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [smiles](./elements/slots/smiles.md) + +**Data Type Class Details:** + +
+SMILES + +**Description:** A structure descriptor that denotes a molecular structure as a graph and conforms to the SMILES format specification. + +**CURIE:** [`CHEMINF:000018`](http://semanticscience.org/resource/CHEMINF_000018) + +**Schema Reference:** [SMILES](./elements/classes/SMILES.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+molecular formula (Recommended) + +**Description:** The slot to provide the IUPAC formula of a ChemicalEntity. + +**Data Type:** MolecularFormula + +**Cardinality:** Recommended + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [molecular_formula](./elements/slots/molecular_formula.md) + +**Data Type Class Details:** + +
+MolecularFormula + +**Description:** A structure descriptor which identifies each constituent element by its chemical symbol and indicates the number of atoms of each element found in each discrete molecule of that compound. + +**CURIE:** [`CHEMINF:000042`](http://semanticscience.org/resource/CHEMINF_000042) + +**Schema Reference:** [MolecularFormula](./elements/classes/MolecularFormula.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+iupac name (Recommended) + +**Description:** The slot to provide the IUPAC name of a ChemicalEntity. + +**Data Type:** IUPACName + +**Cardinality:** Recommended + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [iupac_name](./elements/slots/iupac_name.md) + +**Data Type Class Details:** + +
+IUPACName + +**Description:** A systematic name which is formulated according to the rules and recommendations for chemical nomenclature set out by the International Union of Pure and Applied Chemistry (IUPAC). + +**CURIE:** [`CHEMINF:000107`](http://semanticscience.org/resource/CHEMINF_000107) + +**Schema Reference:** [IUPACName](./elements/classes/IUPACName.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+has molar mass (Recommended) + +**Description:** The slot to provide the MolarMass of a ChemicalEntity. + +**Data Type:** MolarMass + +**Cardinality:** Recommended + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_molar_mass](./elements/slots/has_molar_mass.md) + +**Data Type Class Details:** + +
+MolarMass + +**Description:** A Mass (physical quality) that quantifies the mass of a homogeneous ChemicalSubstance containing 6.02 x 10^23 atoms or molecules. + +**CURIE:** [`AFR:0002409`](http://purl.allotrope.org/ontologies/result#AFR_0002409) + +*Full field list already shown [earlier on this page](#schema-class-MolarMass) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+has amount (Optional) + +**Description:** The slot to provide the AmountConcentration of a ChemicalSubstance. + +**Data Type:** AmountOfSubstance + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_amount](./elements/slots/has_amount.md) + +**Data Type Class Details:** + +
+AmountOfSubstance + +**Description:** The total amount of substance used in a ChemicalReaction. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +**Schema Reference:** [AmountOfSubstance](./elements/classes/AmountOfSubstance.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+used reactant (Recommended, Multivalued) + +**Description:** The slot to specify the Reagent(s) of a ChemicalReaction. + +**Data Type:** Reagent + +**Cardinality:** Recommended, Multivalued + +**CURIE:** [`RO:0004009`](http://purl.obolibrary.org/obo/RO_0004009) + +**Schema Reference:** [used_reactant](./elements/slots/used_reactant.md) + +**Data Type Class Details:** + +
+Reagent + +**Description:** A ChemicalSubstance that is consumed or transformed in a ChemicalReaction. + +**CURIE:** [`SIO:010411`](http://semanticscience.org/resource/SIO_010411) + +**Schema Reference:** [Reagent](./elements/classes/Reagent.md) + +**Slots** + +
+has molar equivalent (Optional) + +**Description:** A slot to provide the MolarEquivalent of a ChemicalSubstance, such as the DissolvingSubstance, Starting Material or Reactant, within the context of a chemical reaction. + +**Data Type:** MolarEquivalent + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_molar_equivalent](./elements/slots/has_molar_equivalent.md) + +**Data Type Class Details:** + +
+MolarEquivalent + +**Description:** A dimensionless ratio that quantifies the stoichiometric proportion of a chemical substance relative to a reference substance in a chemical reaction. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-MolarEquivalent) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+alternative label (Optional) + +**Description:** The slot to specify an alternative label, name or title for a MaterialEntity. + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`skos:altLabel`](http://www.w3.org/2004/02/skos/core#altLabel) + +**Schema Reference:** [alternative_label](./elements/slots/alternative_label.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has physical state (Optional) + +**Description:** The slot to specify the physical state of a MaterialEntity. + +**Data Type:** PhysicalStateEnum + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_physical_state](./elements/slots/has_physical_state.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has temperature (Optional) + +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. + +**Data Type:** Temperature + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) + +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has mass (Optional) + +**Description:** The slot to provide the Mass of a MaterialEntity. + +**Data Type:** Mass + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_mass](./elements/slots/has_mass.md) + +**Data Type Class Details:** + +
+Mass + +**Description:** The strength of a body's gravitational attraction to other bodies. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Mass) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has volume (Optional) + +**Description:** The slot to provide the Volume of a MaterialEntity. + +**Data Type:** Volume + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_volume](./elements/slots/has_volume.md) + +**Data Type Class Details:** + +
+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Volume) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has density (Optional) + +**Description:** The slot to provide the Density of a MaterialEntity. + +**Data Type:** Density + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_density](./elements/slots/has_density.md) + +**Data Type Class Details:** + +
+Density + +**Description:** A measure of the mass per unit volume of a substance. + +**CURIE:** [`SIO:001406`](http://semanticscience.org/resource/SIO_001406) + +*Full field list already shown [earlier on this page](#schema-class-Density) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has pressure (Optional) + +**Description:** The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity. + +**Data Type:** Pressure + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_pressure](./elements/slots/has_pressure.md) + +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Pressure) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has concentration (Optional) + +**Description:** The slot to provide the Concentration of a ChemicalSubstance. + +**Data Type:** Concentration + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_concentration](./elements/slots/has_concentration.md) + +**Data Type Class Details:** + +
+Concentration + +**Description:** A QuantitativeAttribute of a ChemicalSubstance that represents the amount of a constituent divided by the volume of the mixture. + +**CURIE:** [`CHMO:0002820`](http://purl.obolibrary.org/obo/CHMO_0002820) + +*Full field list already shown [earlier on this page](#schema-class-Concentration) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has ph value (Optional) + +**Description:** The slot to provide the PHValue of a ChemicalSubstance. + +**Data Type:** PHValue + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_ph_value](./elements/slots/has_ph_value.md) + +**Data Type Class Details:** + +
+PHValue + +**Description:** No description available + +**CURIE:** [`SIO:001089`](http://semanticscience.org/resource/SIO_001089) + +*Full field list already shown [earlier on this page](#schema-class-PHValue) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+composed of (Recommended, Multivalued) + +**Description:** The slot to provide the chemical entities of which a ChemicalSubstance is composed of. + +**Data Type:** ChemicalEntity + +**Cardinality:** Recommended, Multivalued + +**CURIE:** [`BFO:0000051`](http://purl.obolibrary.org/obo/BFO_0000051) + +**Schema Reference:** [composed_of](./elements/slots/composed_of.md) + +**Data Type Class Details:** + +
+ChemicalEntity + +**Description:** Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. + +**CURIE:** [`CHEBI:23367`](http://purl.obolibrary.org/obo/CHEBI_23367) + +*Full field list already shown [earlier on this page](#schema-class-ChemicalEntity) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has amount (Optional) + +**Description:** The slot to provide the AmountConcentration of a ChemicalSubstance. + +**Data Type:** AmountOfSubstance + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_amount](./elements/slots/has_amount.md) + +**Data Type Class Details:** + +
+AmountOfSubstance + +**Description:** The total amount of substance used in a ChemicalReaction. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-AmountOfSubstance) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+generated product (Recommended, Multivalued) + +**Description:** The slot to specify the Product(s) of a ChemicalReaction. + +**Data Type:** ChemicalProduct + +**Cardinality:** Recommended, Multivalued + +**CURIE:** [`RO:0004008`](http://purl.obolibrary.org/obo/RO_0004008) + +**Schema Reference:** [generated_product](./elements/slots/generated_product.md) + +**Data Type Class Details:** + +
+ChemicalProduct + +**Description:** A chemical substance that is produced by a ChemicalReaction. + +**CURIE:** [`NCIT:C48810`](http://purl.obolibrary.org/obo/NCIT_C48810) + +**Schema Reference:** [ChemicalProduct](./elements/classes/ChemicalProduct.md) + +**Slots** + +
+alternative label (Optional) + +**Description:** The slot to specify an alternative label, name or title for a MaterialEntity. + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`skos:altLabel`](http://www.w3.org/2004/02/skos/core#altLabel) + +**Schema Reference:** [alternative_label](./elements/slots/alternative_label.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has physical state (Optional) + +**Description:** The slot to specify the physical state of a MaterialEntity. + +**Data Type:** PhysicalStateEnum + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_physical_state](./elements/slots/has_physical_state.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has temperature (Optional) + +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. + +**Data Type:** Temperature + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) + +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has mass (Optional) + +**Description:** The slot to provide the Mass of a MaterialEntity. + +**Data Type:** Mass + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_mass](./elements/slots/has_mass.md) + +**Data Type Class Details:** + +
+Mass + +**Description:** The strength of a body's gravitational attraction to other bodies. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Mass) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has volume (Optional) + +**Description:** The slot to provide the Volume of a MaterialEntity. + +**Data Type:** Volume + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_volume](./elements/slots/has_volume.md) + +**Data Type Class Details:** + +
+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Volume) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has density (Optional) + +**Description:** The slot to provide the Density of a MaterialEntity. + +**Data Type:** Density + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_density](./elements/slots/has_density.md) + +**Data Type Class Details:** + +
+Density + +**Description:** A measure of the mass per unit volume of a substance. + +**CURIE:** [`SIO:001406`](http://semanticscience.org/resource/SIO_001406) + +*Full field list already shown [earlier on this page](#schema-class-Density) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has pressure (Optional) + +**Description:** The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity. + +**Data Type:** Pressure + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_pressure](./elements/slots/has_pressure.md) + +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Pressure) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has concentration (Optional) + +**Description:** The slot to provide the Concentration of a ChemicalSubstance. + +**Data Type:** Concentration + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_concentration](./elements/slots/has_concentration.md) + +**Data Type Class Details:** + +
+Concentration + +**Description:** A QuantitativeAttribute of a ChemicalSubstance that represents the amount of a constituent divided by the volume of the mixture. + +**CURIE:** [`CHMO:0002820`](http://purl.obolibrary.org/obo/CHMO_0002820) + +*Full field list already shown [earlier on this page](#schema-class-Concentration) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has ph value (Optional) + +**Description:** The slot to provide the PHValue of a ChemicalSubstance. + +**Data Type:** PHValue + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_ph_value](./elements/slots/has_ph_value.md) + +**Data Type Class Details:** + +
+PHValue + +**Description:** No description available + +**CURIE:** [`SIO:001089`](http://semanticscience.org/resource/SIO_001089) + +*Full field list already shown [earlier on this page](#schema-class-PHValue) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+composed of (Recommended, Multivalued) + +**Description:** The slot to provide the chemical entities of which a ChemicalSubstance is composed of. + +**Data Type:** ChemicalEntity + +**Cardinality:** Recommended, Multivalued + +**CURIE:** [`BFO:0000051`](http://purl.obolibrary.org/obo/BFO_0000051) + +**Schema Reference:** [composed_of](./elements/slots/composed_of.md) + +**Data Type Class Details:** + +
+ChemicalEntity + +**Description:** Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. + +**CURIE:** [`CHEBI:23367`](http://purl.obolibrary.org/obo/CHEBI_23367) + +*Full field list already shown [earlier on this page](#schema-class-ChemicalEntity) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has amount (Optional) + +**Description:** The slot to provide the AmountConcentration of a ChemicalSubstance. + +**Data Type:** AmountOfSubstance + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_amount](./elements/slots/has_amount.md) + +**Data Type Class Details:** + +
+AmountOfSubstance + +**Description:** The total amount of substance used in a ChemicalReaction. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-AmountOfSubstance) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+used catalyst (Recommended, Multivalued) + +**Description:** The slot to specify the Catalyst of a ChemicalReaction. + +**Data Type:** Catalyst + +**Cardinality:** Recommended, Multivalued + +**CURIE:** [`RXNO:0000425`](http://purl.obolibrary.org/obo/RXNO_0000425) + +**Schema Reference:** [used_catalyst](./elements/slots/used_catalyst.md) + +**Data Type Class Details:** + +
+Catalyst + +**Description:** A ChemicalSubstance or MaterialEntity that initiates or accelerates a ChemicalReaction without itself being affected. + +**CURIE:** [`SIO:010344`](http://semanticscience.org/resource/SIO_010344) + +**Schema Reference:** [Catalyst](./elements/classes/Catalyst.md) + +**Slots** + +
+has molar equivalent (Optional) + +**Description:** A slot to provide the MolarEquivalent of a ChemicalSubstance, such as the DissolvingSubstance, Starting Material or Reactant, within the context of a chemical reaction. + +**Data Type:** MolarEquivalent + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_molar_equivalent](./elements/slots/has_molar_equivalent.md) + +**Data Type Class Details:** + +
+MolarEquivalent + +**Description:** A dimensionless ratio that quantifies the stoichiometric proportion of a chemical substance relative to a reference substance in a chemical reaction. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-MolarEquivalent) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has concentration (Optional) + +**Description:** The slot to provide the Concentration of a ChemicalSubstance. + +**Data Type:** Concentration + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_concentration](./elements/slots/has_concentration.md) + +**Data Type Class Details:** + +
+Concentration + +**Description:** A QuantitativeAttribute of a ChemicalSubstance that represents the amount of a constituent divided by the volume of the mixture. + +**CURIE:** [`CHMO:0002820`](http://purl.obolibrary.org/obo/CHMO_0002820) + +*Full field list already shown [earlier on this page](#schema-class-Concentration) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has ph value (Optional) + +**Description:** The slot to provide the PHValue of a ChemicalSubstance. + +**Data Type:** PHValue + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_ph_value](./elements/slots/has_ph_value.md) + +**Data Type Class Details:** + +
+PHValue + +**Description:** No description available + +**CURIE:** [`SIO:001089`](http://semanticscience.org/resource/SIO_001089) + +*Full field list already shown [earlier on this page](#schema-class-PHValue) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+composed of (Recommended, Multivalued) + +**Description:** The slot to provide the chemical entities of which a ChemicalSubstance is composed of. + +**Data Type:** ChemicalEntity + +**Cardinality:** Recommended, Multivalued + +**CURIE:** [`BFO:0000051`](http://purl.obolibrary.org/obo/BFO_0000051) + +**Schema Reference:** [composed_of](./elements/slots/composed_of.md) + +**Data Type Class Details:** + +
+ChemicalEntity + +**Description:** Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. + +**CURIE:** [`CHEBI:23367`](http://purl.obolibrary.org/obo/CHEBI_23367) + +*Full field list already shown [earlier on this page](#schema-class-ChemicalEntity) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has amount (Optional) + +**Description:** The slot to provide the AmountConcentration of a ChemicalSubstance. + +**Data Type:** AmountOfSubstance + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_amount](./elements/slots/has_amount.md) + +**Data Type Class Details:** + +
+AmountOfSubstance + +**Description:** The total amount of substance used in a ChemicalReaction. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-AmountOfSubstance) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+alternative label (Optional) + +**Description:** The slot to specify an alternative label, name or title for a MaterialEntity. + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`skos:altLabel`](http://www.w3.org/2004/02/skos/core#altLabel) + +**Schema Reference:** [alternative_label](./elements/slots/alternative_label.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has physical state (Optional) + +**Description:** The slot to specify the physical state of a MaterialEntity. + +**Data Type:** PhysicalStateEnum + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_physical_state](./elements/slots/has_physical_state.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has temperature (Optional) + +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. + +**Data Type:** Temperature + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) + +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has mass (Optional) + +**Description:** The slot to provide the Mass of a MaterialEntity. + +**Data Type:** Mass + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_mass](./elements/slots/has_mass.md) + +**Data Type Class Details:** + +
+Mass + +**Description:** The strength of a body's gravitational attraction to other bodies. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Mass) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has volume (Optional) + +**Description:** The slot to provide the Volume of a MaterialEntity. + +**Data Type:** Volume + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_volume](./elements/slots/has_volume.md) + +**Data Type Class Details:** + +
+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Volume) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has density (Optional) + +**Description:** The slot to provide the Density of a MaterialEntity. + +**Data Type:** Density + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_density](./elements/slots/has_density.md) + +**Data Type Class Details:** + +
+Density + +**Description:** A measure of the mass per unit volume of a substance. + +**CURIE:** [`SIO:001406`](http://semanticscience.org/resource/SIO_001406) + +*Full field list already shown [earlier on this page](#schema-class-Density) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has pressure (Optional) + +**Description:** The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity. + +**Data Type:** Pressure + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_pressure](./elements/slots/has_pressure.md) + +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Pressure) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+used solvent (Recommended, Multivalued) + +**Description:** The slot to specify the chemical substance that had a solvent role (CHEBI:35223) in a ChemicalReaction. + +**Data Type:** DissolvingSubstance + +**Cardinality:** Recommended, Multivalued + +**CURIE:** [`prov:wasAssociatedWith`](http://www.w3.org/ns/prov#wasAssociatedWith) + +**Schema Reference:** [used_solvent](./elements/slots/used_solvent.md) + +**Data Type Class Details:** + +
+DissolvingSubstance + +**Description:** A liquid ChemicalSubstance that dissolves or that is capable of dissolving a ChemicalSubstance. + +**CURIE:** [`SIO:010417`](http://semanticscience.org/resource/SIO_010417) + +**Schema Reference:** [DissolvingSubstance](./elements/classes/DissolvingSubstance.md) + +**Slots** + +
+has percentage of total (Optional) + +**Description:** A slot to specify the percentage of a specific ChemicalSubstance in relation to the total amount of that same substance used across a multi-step reaction. + +**Data Type:** PercentageOfTotal + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_percentage_of_total](./elements/slots/has_percentage_of_total.md) + +**Data Type Class Details:** + +
+PercentageOfTotal + +**Description:** A dimensionless ratio that quantifies the stoichiometric proportion of a chemical substance relative to a reference substance in a chemical reaction. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +**Schema Reference:** [PercentageOfTotal](./elements/classes/PercentageOfTotal.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+has concentration (Optional) + +**Description:** The slot to provide the Concentration of a ChemicalSubstance. + +**Data Type:** Concentration + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_concentration](./elements/slots/has_concentration.md) + +**Data Type Class Details:** + +
+Concentration + +**Description:** A QuantitativeAttribute of a ChemicalSubstance that represents the amount of a constituent divided by the volume of the mixture. + +**CURIE:** [`CHMO:0002820`](http://purl.obolibrary.org/obo/CHMO_0002820) + +*Full field list already shown [earlier on this page](#schema-class-Concentration) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has ph value (Optional) + +**Description:** The slot to provide the PHValue of a ChemicalSubstance. + +**Data Type:** PHValue + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_ph_value](./elements/slots/has_ph_value.md) + +**Data Type Class Details:** + +
+PHValue + +**Description:** No description available + +**CURIE:** [`SIO:001089`](http://semanticscience.org/resource/SIO_001089) + +*Full field list already shown [earlier on this page](#schema-class-PHValue) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+composed of (Recommended, Multivalued) + +**Description:** The slot to provide the chemical entities of which a ChemicalSubstance is composed of. + +**Data Type:** ChemicalEntity + +**Cardinality:** Recommended, Multivalued + +**CURIE:** [`BFO:0000051`](http://purl.obolibrary.org/obo/BFO_0000051) + +**Schema Reference:** [composed_of](./elements/slots/composed_of.md) + +**Data Type Class Details:** + +
+ChemicalEntity + +**Description:** Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. + +**CURIE:** [`CHEBI:23367`](http://purl.obolibrary.org/obo/CHEBI_23367) + +*Full field list already shown [earlier on this page](#schema-class-ChemicalEntity) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has amount (Optional) + +**Description:** The slot to provide the AmountConcentration of a ChemicalSubstance. + +**Data Type:** AmountOfSubstance + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_amount](./elements/slots/has_amount.md) + +**Data Type Class Details:** + +
+AmountOfSubstance + +**Description:** The total amount of substance used in a ChemicalReaction. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-AmountOfSubstance) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+alternative label (Optional) + +**Description:** The slot to specify an alternative label, name or title for a MaterialEntity. + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`skos:altLabel`](http://www.w3.org/2004/02/skos/core#altLabel) + +**Schema Reference:** [alternative_label](./elements/slots/alternative_label.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has physical state (Optional) + +**Description:** The slot to specify the physical state of a MaterialEntity. + +**Data Type:** PhysicalStateEnum + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_physical_state](./elements/slots/has_physical_state.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has temperature (Optional) + +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. + +**Data Type:** Temperature + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) + +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has mass (Optional) + +**Description:** The slot to provide the Mass of a MaterialEntity. + +**Data Type:** Mass + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_mass](./elements/slots/has_mass.md) + +**Data Type Class Details:** + +
+Mass + +**Description:** The strength of a body's gravitational attraction to other bodies. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Mass) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has volume (Optional) + +**Description:** The slot to provide the Volume of a MaterialEntity. + +**Data Type:** Volume + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_volume](./elements/slots/has_volume.md) + +**Data Type Class Details:** + +
+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Volume) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has density (Optional) + +**Description:** The slot to provide the Density of a MaterialEntity. + +**Data Type:** Density + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_density](./elements/slots/has_density.md) + +**Data Type Class Details:** + +
+Density + +**Description:** A measure of the mass per unit volume of a substance. + +**CURIE:** [`SIO:001406`](http://semanticscience.org/resource/SIO_001406) + +*Full field list already shown [earlier on this page](#schema-class-Density) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has pressure (Optional) + +**Description:** The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity. + +**Data Type:** Pressure + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_pressure](./elements/slots/has_pressure.md) + +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Pressure) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+has duration (Optional) + +**Description:** A slot to provide the duration of a ChemicalReaction. + +**Data Type:** duration + +**Cardinality:** Optional + +**CURIE:** [`schema:duration`](http://schema.org/duration) + +**Schema Reference:** [has_duration](./elements/slots/has_duration.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+used reactor (Mandatory, Multivalued) + +**Description:** The slot to specify the reactor used in a ChemicalReaction. + +**Data Type:** Reactor + +**Cardinality:** Mandatory, Multivalued + +**CURIE:** [`prov:wasAssociatedWith`](http://www.w3.org/ns/prov#wasAssociatedWith) + +**Schema Reference:** [used_reactor](./elements/slots/used_reactor.md) + +**Data Type Class Details:** + +
+Reactor + +**Description:** A reactor is a container for controlling a biological or chemical reaction or process. + +**CURIE:** [`AFE:0000153`](http://purl.allotrope.org/ontologies/equipment#AFE_0000153) + +**Schema Reference:** [Reactor](./elements/classes/Reactor.md) + +**Slots** + +
+alternative label (Optional) + +**Description:** The slot to specify an alternative label, name or title for a MaterialEntity. + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`skos:altLabel`](http://www.w3.org/2004/02/skos/core#altLabel) + +**Schema Reference:** [alternative_label](./elements/slots/alternative_label.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has physical state (Optional) + +**Description:** The slot to specify the physical state of a MaterialEntity. + +**Data Type:** PhysicalStateEnum + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_physical_state](./elements/slots/has_physical_state.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has temperature (Optional) + +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. + +**Data Type:** Temperature + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) + +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has mass (Optional) + +**Description:** The slot to provide the Mass of a MaterialEntity. + +**Data Type:** Mass + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_mass](./elements/slots/has_mass.md) + +**Data Type Class Details:** + +
+Mass + +**Description:** The strength of a body's gravitational attraction to other bodies. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Mass) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has volume (Optional) + +**Description:** The slot to provide the Volume of a MaterialEntity. + +**Data Type:** Volume + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_volume](./elements/slots/has_volume.md) + +**Data Type Class Details:** + +
+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Volume) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has density (Optional) + +**Description:** The slot to provide the Density of a MaterialEntity. + +**Data Type:** Density + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_density](./elements/slots/has_density.md) + +**Data Type Class Details:** + +
+Density + +**Description:** A measure of the mass per unit volume of a substance. + +**CURIE:** [`SIO:001406`](http://semanticscience.org/resource/SIO_001406) + +*Full field list already shown [earlier on this page](#schema-class-Density) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has pressure (Optional) + +**Description:** The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity. + +**Data Type:** Pressure + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_pressure](./elements/slots/has_pressure.md) + +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Pressure) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +**Possible Subclasses / Enumerations of Reactor:** + +
+ChemicalReactor + +**Abstract Class** + +**Description:** Abstract Reactor (chemdcat-ap) subclass representing a catalytic reactor +vessel. + +Reactor is more specific than the general Device (AgenticEntity): it restricts +the used_reactor relation (is_a: carried_out_by) on Reaction to dedicated +reactor equipment. This semantic distinction separates analytical +instruments (Device) from reaction vessels (Reactor). ChemicalReactor +further specializes chemdcat-ap's generic Reactor for catalysis use cases. + +Concrete subclasses (FixedBedReactor, CSTR, PlugFlowReactor, …) specify +reactor geometry and operating mode. +Linked from Reaction via used_reactor (restricted to range: ChemicalReactor). + +**CURIE:** [`VOC4CAT:0007018`](https://w3id.org/nfdi4cat/voc4cat_0007018) + +**Schema Reference:** [ChemicalReactor](./elements/classes/ChemicalReactor.md) + +**Slots** + +
+alternative label (Optional) + +**Description:** The slot to specify an alternative label, name or title for a MaterialEntity. + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`skos:altLabel`](http://www.w3.org/2004/02/skos/core#altLabel) + +**Schema Reference:** [alternative_label](./elements/slots/alternative_label.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has physical state (Optional) + +**Description:** The slot to specify the physical state of a MaterialEntity. + +**Data Type:** PhysicalStateEnum + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_physical_state](./elements/slots/has_physical_state.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has temperature (Optional) + +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. + +**Data Type:** Temperature + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) + +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has mass (Optional) + +**Description:** The slot to provide the Mass of a MaterialEntity. + +**Data Type:** Mass + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_mass](./elements/slots/has_mass.md) + +**Data Type Class Details:** + +
+Mass + +**Description:** The strength of a body's gravitational attraction to other bodies. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Mass) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has volume (Optional) + +**Description:** The slot to provide the Volume of a MaterialEntity. + +**Data Type:** Volume + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_volume](./elements/slots/has_volume.md) + +**Data Type Class Details:** + +
+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Volume) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has density (Optional) + +**Description:** The slot to provide the Density of a MaterialEntity. + +**Data Type:** Density + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_density](./elements/slots/has_density.md) + +**Data Type Class Details:** + +
+Density + +**Description:** A measure of the mass per unit volume of a substance. + +**CURIE:** [`SIO:001406`](http://semanticscience.org/resource/SIO_001406) + +*Full field list already shown [earlier on this page](#schema-class-Density) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has pressure (Optional) + +**Description:** The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity. + +**Data Type:** Pressure + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_pressure](./elements/slots/has_pressure.md) + +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Pressure) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+ElectrochemicalReactor + +**Description:** Electrochemical reactor used in electrocatalytic experiments, including +H-cells, flow cells, and membrane electrode assemblies. + +**CURIE:** [`VOC4CAT:0000193`](https://w3id.org/nfdi4cat/voc4cat_0000193) + +**Schema Reference:** [ElectrochemicalReactor](./elements/classes/ElectrochemicalReactor.md) + +**Slots** + +
+has cathode (Recommended) + +**Description:** The electrode where reduction occurs in an electrochemical cell. It is +the negative electrode in an electrolytic cell, while it is the +positive electrode in a galvanic cell. + +**Data Type:** string + +**Cardinality:** Recommended + +**CURIE:** [`VOC4CAT:0007254`](https://w3id.org/nfdi4cat/voc4cat_0007254) + +**Schema Reference:** [has_cathode](./elements/slots/has_cathode.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has anode (Recommended) + +**Description:** The electrode where oxidation occurs in an electrochemical cell. It is +the positive electrode in an electrolytic cell, while it is the +negative electrode in a galvanic cell. + +**Data Type:** string + +**Cardinality:** Recommended + +**CURIE:** [`VOC4CAT:0007255`](https://w3id.org/nfdi4cat/voc4cat_0007255) + +**Schema Reference:** [has_anode](./elements/slots/has_anode.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+cell operating mode (Recommended) + +**Description:** The functional mode of an electrochemical cell based on the direction +of energy conversion. + +**Data Type:** CellOperatingModeEnum + +**Cardinality:** Recommended + +**CURIE:** [`coremeta4cat:cell_operating_mode`](https://w3id.org/nfdi4cat/coremeta4cat/cell_operating_mode) + +**Schema Reference:** [cell_operating_mode](./elements/slots/cell_operating_mode.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has active area (Optional) + +**Description:** In contrast to substrate area, the actual area of a sample or +electrode which is active. + +**Data Type:** Area + +**Cardinality:** Optional + +**CURIE:** [`VOC4CAT:0007258`](https://w3id.org/nfdi4cat/voc4cat_0007258) + +**Schema Reference:** [has_active_area](./elements/slots/has_active_area.md) + +**Data Type Class Details:** + +
+Area + +**Description:** A quantitative measure of surface area (e.g. active electrode area). + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +**Schema Reference:** [Area](./elements/classes/Area.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+faradaic current (Recommended) + +**Description:** The current that is flowing through an electrochemical cell and is +causing (or is caused by) chemical reactions. + +**Data Type:** ElectricCurrent + +**Cardinality:** Recommended + +**CURIE:** [`VOC4CAT:0007259`](https://w3id.org/nfdi4cat/voc4cat_0007259) + +**Schema Reference:** [faradaic_current](./elements/slots/faradaic_current.md) + +**Data Type Class Details:** + +
+ElectricCurrent + +**Description:** A quantitative measure of electric current (e.g. faradaic current in an electrochemical cell). + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +**Schema Reference:** [ElectricCurrent](./elements/classes/ElectricCurrent.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+alternative label (Optional) + +**Description:** The slot to specify an alternative label, name or title for a MaterialEntity. + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`skos:altLabel`](http://www.w3.org/2004/02/skos/core#altLabel) + +**Schema Reference:** [alternative_label](./elements/slots/alternative_label.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has physical state (Optional) + +**Description:** The slot to specify the physical state of a MaterialEntity. + +**Data Type:** PhysicalStateEnum + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_physical_state](./elements/slots/has_physical_state.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has temperature (Optional) + +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. + +**Data Type:** Temperature + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) + +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has mass (Optional) + +**Description:** The slot to provide the Mass of a MaterialEntity. + +**Data Type:** Mass + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_mass](./elements/slots/has_mass.md) + +**Data Type Class Details:** + +
+Mass + +**Description:** The strength of a body's gravitational attraction to other bodies. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Mass) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has volume (Optional) + +**Description:** The slot to provide the Volume of a MaterialEntity. + +**Data Type:** Volume + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_volume](./elements/slots/has_volume.md) + +**Data Type Class Details:** + +
+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Volume) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has density (Optional) + +**Description:** The slot to provide the Density of a MaterialEntity. + +**Data Type:** Density + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_density](./elements/slots/has_density.md) + +**Data Type Class Details:** + +
+Density + +**Description:** A measure of the mass per unit volume of a substance. + +**CURIE:** [`SIO:001406`](http://semanticscience.org/resource/SIO_001406) + +*Full field list already shown [earlier on this page](#schema-class-Density) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has pressure (Optional) + +**Description:** The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity. + +**Data Type:** Pressure + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_pressure](./elements/slots/has_pressure.md) + +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Pressure) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+CSTR + +**Description:** Continuous stirred tank reactor (CSTR) — a well-mixed, continuous-flow +reactor operating at steady state. + +**CURIE:** [`VOC4CAT:0007019`](https://w3id.org/nfdi4cat/voc4cat_0007019) + +**Schema Reference:** [CSTR](./elements/classes/CSTR.md) + +**Slots** + +
+stirring rate (Recommended) + +**Description:** The rate at which the stirrer rotates, typically expressed in +revolutions per unit time (e.g. revolutions per minute). + +**Data Type:** AngularVelocity + +**Cardinality:** Recommended + +**CURIE:** [`VOC4CAT:0008114`](https://w3id.org/nfdi4cat/voc4cat_0008114) + +**Schema Reference:** [stirring_rate](./elements/slots/stirring_rate.md) + +**Data Type Class Details:** + +
+AngularVelocity + +**Description:** Rate of rotational motion, typically expressed in revolutions per minute. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +**Schema Reference:** [AngularVelocity](./elements/classes/AngularVelocity.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+residence time (Recommended) + +**Description:** The average time a unit of fluid spends inside the reactor before +exiting. + +**Data Type:** Duration + +**Cardinality:** Recommended + +**Schema Reference:** [residence_time](./elements/slots/residence_time.md) + +**Data Type Class Details:** + +
+Duration + +**Description:** A quantitative measure of elapsed time (duration of a process step). + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+reactor working volume (Recommended) + +**Description:** Volume of the reaction chamber, calculated by its dimensions. Volume +of pipes and valves connected to the reactor is not included. + +**Data Type:** Volume + +**Cardinality:** Recommended + +**CURIE:** [`VOC4CAT:0000153`](https://w3id.org/nfdi4cat/voc4cat_0000153) + +**Schema Reference:** [reactor_working_volume](./elements/slots/reactor_working_volume.md) + +**Data Type Class Details:** + +
+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Volume) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+reactor diameter (Optional) + +**Description:** The internal diameter of the reactor vessel. + +**Data Type:** LengthQuantity + +**Cardinality:** Optional + +**Schema Reference:** [reactor_diameter](./elements/slots/reactor_diameter.md) + +**Data Type Class Details:** + +
+LengthQuantity + +**Description:** A quantitative measure of length or spatial dimension (nm, mm, cm). + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +**Schema Reference:** [LengthQuantity](./elements/classes/LengthQuantity.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+stirrer diameter (Optional) + +**Description:** The effective diameter of the stirrer. Typically expressed as the +distance across the rotating blade or mixing head from one tip to +the opposite tip. + +**Data Type:** LengthQuantity + +**Cardinality:** Optional + +**CURIE:** [`VOC4CAT:0008115`](https://w3id.org/nfdi4cat/voc4cat_0008115) + +**Schema Reference:** [stirrer_diameter](./elements/slots/stirrer_diameter.md) + +**Data Type Class Details:** + +
+LengthQuantity + +**Description:** A quantitative measure of length or spatial dimension (nm, mm, cm). + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-LengthQuantity) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+reactor stirrer type (Optional) + +**Description:** The category of mechanical or magnetic agitation device used in the +reactor, such as a magnetic stirrer or an overhead mechanical (steel +shaft) stirrer. Distinct from the synthesis-context stirrer_type slot +(coremeta4cat_synthesis_ap), since reactor and synthesis-vessel stirring +may use different equipment. + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`VOC4CAT:0008113`](https://w3id.org/nfdi4cat/voc4cat_0008113) + +**Schema Reference:** [reactor_stirrer_type](./elements/slots/reactor_stirrer_type.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+alternative label (Optional) + +**Description:** The slot to specify an alternative label, name or title for a MaterialEntity. + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`skos:altLabel`](http://www.w3.org/2004/02/skos/core#altLabel) + +**Schema Reference:** [alternative_label](./elements/slots/alternative_label.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has physical state (Optional) + +**Description:** The slot to specify the physical state of a MaterialEntity. + +**Data Type:** PhysicalStateEnum + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_physical_state](./elements/slots/has_physical_state.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has temperature (Optional) + +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. + +**Data Type:** Temperature + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) + +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has mass (Optional) + +**Description:** The slot to provide the Mass of a MaterialEntity. + +**Data Type:** Mass + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_mass](./elements/slots/has_mass.md) + +**Data Type Class Details:** + +
+Mass + +**Description:** The strength of a body's gravitational attraction to other bodies. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Mass) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has volume (Optional) + +**Description:** The slot to provide the Volume of a MaterialEntity. + +**Data Type:** Volume + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_volume](./elements/slots/has_volume.md) + +**Data Type Class Details:** + +
+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Volume) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has density (Optional) + +**Description:** The slot to provide the Density of a MaterialEntity. + +**Data Type:** Density + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_density](./elements/slots/has_density.md) + +**Data Type Class Details:** + +
+Density + +**Description:** A measure of the mass per unit volume of a substance. + +**CURIE:** [`SIO:001406`](http://semanticscience.org/resource/SIO_001406) + +*Full field list already shown [earlier on this page](#schema-class-Density) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has pressure (Optional) + +**Description:** The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity. + +**Data Type:** Pressure + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_pressure](./elements/slots/has_pressure.md) + +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Pressure) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+PlugFlowReactor + +**Description:** Plug flow reactor (PFR) — a tubular reactor in which reactant composition +varies along the axis with no axial mixing. + +**CURIE:** [`VOC4CAT:0007102`](https://w3id.org/nfdi4cat/voc4cat_0007102) + +**Schema Reference:** [PlugFlowReactor](./elements/classes/PlugFlowReactor.md) + +**Slots** + +
+tube length (Recommended) + +**Description:** The length of the tubular reaction chamber. + +**Data Type:** LengthQuantity + +**Cardinality:** Recommended + +**Schema Reference:** [tube_length](./elements/slots/tube_length.md) + +**Data Type Class Details:** + +
+LengthQuantity + +**Description:** A quantitative measure of length or spatial dimension (nm, mm, cm). + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-LengthQuantity) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+tube internal diameter (Recommended) + +**Description:** The internal diameter of the tubular reaction chamber. + +**Data Type:** LengthQuantity + +**Cardinality:** Recommended + +**Schema Reference:** [tube_internal_diameter](./elements/slots/tube_internal_diameter.md) + +**Data Type Class Details:** + +
+LengthQuantity + +**Description:** A quantitative measure of length or spatial dimension (nm, mm, cm). + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-LengthQuantity) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+flow direction (Recommended) + +**Description:** The direction of reactant flow through the tube (e.g. upflow, +downflow, horizontal). + +**Data Type:** string + +**Cardinality:** Recommended + +**Schema Reference:** [flow_direction](./elements/slots/flow_direction.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+number of tubes (Recommended) + +**Description:** The number of parallel tubes in the reactor. + +**Data Type:** integer + +**Cardinality:** Recommended + +**Schema Reference:** [number_of_tubes](./elements/slots/number_of_tubes.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+tube material (Recommended) + +**Description:** Material used for the construction of the reactor tube(s). + +**Data Type:** string + +**Cardinality:** Recommended + +**Schema Reference:** [tube_material](./elements/slots/tube_material.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+catalyst particle size (Recommended) + +**Description:** A measure of the characteristic linear dimension of a particle in a +sample, typically reported as diameter or sieve fraction range. + +**Data Type:** LengthQuantity + +**Cardinality:** Recommended + +**CURIE:** [`VOC4CAT:0008212`](https://w3id.org/nfdi4cat/voc4cat_0008212) + +**Schema Reference:** [catalyst_particle_size](./elements/slots/catalyst_particle_size.md) + +**Data Type Class Details:** + +
+LengthQuantity + +**Description:** A quantitative measure of length or spatial dimension (nm, mm, cm). + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-LengthQuantity) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+alternative label (Optional) + +**Description:** The slot to specify an alternative label, name or title for a MaterialEntity. + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`skos:altLabel`](http://www.w3.org/2004/02/skos/core#altLabel) + +**Schema Reference:** [alternative_label](./elements/slots/alternative_label.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has physical state (Optional) + +**Description:** The slot to specify the physical state of a MaterialEntity. + +**Data Type:** PhysicalStateEnum + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_physical_state](./elements/slots/has_physical_state.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has temperature (Optional) + +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. + +**Data Type:** Temperature + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) + +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has mass (Optional) + +**Description:** The slot to provide the Mass of a MaterialEntity. + +**Data Type:** Mass + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_mass](./elements/slots/has_mass.md) + +**Data Type Class Details:** + +
+Mass + +**Description:** The strength of a body's gravitational attraction to other bodies. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Mass) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has volume (Optional) + +**Description:** The slot to provide the Volume of a MaterialEntity. + +**Data Type:** Volume + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_volume](./elements/slots/has_volume.md) + +**Data Type Class Details:** + +
+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Volume) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has density (Optional) + +**Description:** The slot to provide the Density of a MaterialEntity. + +**Data Type:** Density + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_density](./elements/slots/has_density.md) + +**Data Type Class Details:** + +
+Density + +**Description:** A measure of the mass per unit volume of a substance. + +**CURIE:** [`SIO:001406`](http://semanticscience.org/resource/SIO_001406) + +*Full field list already shown [earlier on this page](#schema-class-Density) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has pressure (Optional) + +**Description:** The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity. + +**Data Type:** Pressure + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_pressure](./elements/slots/has_pressure.md) + +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Pressure) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+Autoclave + +**Description:** Autoclave reactor — a sealed pressure vessel for batch reactions at +elevated temperature and/or pressure. + +**CURIE:** [`NCIT:C93052`](http://purl.obolibrary.org/obo/NCIT_C93052) + +**Schema Reference:** [Autoclave](./elements/classes/Autoclave.md) + +**Slots** + +
+agitation type (Recommended) + +**Description:** The category of agitation used inside the autoclave (e.g. magnetic +stirring, mechanical overhead stirring, rocking, none). + +**Data Type:** string + +**Cardinality:** Recommended + +**Schema Reference:** [agitation_type](./elements/slots/agitation_type.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+reaction chamber material (Recommended) + +**Description:** Material used for the construction of the inner reaction chamber +(the surface in direct contact with the reaction mixture). Distinct +from vessel_material, the material of the outer pressure vessel/shell. + +**Data Type:** string + +**Cardinality:** Recommended + +**CURIE:** [`VOC4CAT:0000156`](https://w3id.org/nfdi4cat/voc4cat_0000156) + +**Schema Reference:** [reaction_chamber_material](./elements/slots/reaction_chamber_material.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+vessel internal volume (Recommended) + +**Description:** The internal (working) volume of the autoclave vessel. + +**Data Type:** Volume + +**Cardinality:** Recommended + +**Schema Reference:** [vessel_internal_volume](./elements/slots/vessel_internal_volume.md) + +**Data Type Class Details:** + +
+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Volume) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+vessel material (Recommended) + +**Description:** Material used for the construction of the outer autoclave vessel/ +pressure shell. Distinct from reaction_chamber_material, the material +of the inner reaction chamber lining. + +**Data Type:** string + +**Cardinality:** Recommended + +**Schema Reference:** [vessel_material](./elements/slots/vessel_material.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+batch duration (Recommended) + +**Description:** The total duration of the batch reaction inside the autoclave, from +start to end of the reaction step. + +**Data Type:** Duration + +**Cardinality:** Recommended + +**Schema Reference:** [batch_duration](./elements/slots/batch_duration.md) + +**Data Type Class Details:** + +
+Duration + +**Description:** A quantitative measure of elapsed time (duration of a process step). + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+alternative label (Optional) + +**Description:** The slot to specify an alternative label, name or title for a MaterialEntity. + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`skos:altLabel`](http://www.w3.org/2004/02/skos/core#altLabel) + +**Schema Reference:** [alternative_label](./elements/slots/alternative_label.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has physical state (Optional) + +**Description:** The slot to specify the physical state of a MaterialEntity. + +**Data Type:** PhysicalStateEnum + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_physical_state](./elements/slots/has_physical_state.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has temperature (Optional) + +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. + +**Data Type:** Temperature + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) + +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has mass (Optional) + +**Description:** The slot to provide the Mass of a MaterialEntity. + +**Data Type:** Mass + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_mass](./elements/slots/has_mass.md) + +**Data Type Class Details:** + +
+Mass + +**Description:** The strength of a body's gravitational attraction to other bodies. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Mass) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has volume (Optional) + +**Description:** The slot to provide the Volume of a MaterialEntity. + +**Data Type:** Volume + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_volume](./elements/slots/has_volume.md) + +**Data Type Class Details:** + +
+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Volume) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has density (Optional) + +**Description:** The slot to provide the Density of a MaterialEntity. + +**Data Type:** Density + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_density](./elements/slots/has_density.md) + +**Data Type Class Details:** + +
+Density + +**Description:** A measure of the mass per unit volume of a substance. + +**CURIE:** [`SIO:001406`](http://semanticscience.org/resource/SIO_001406) + +*Full field list already shown [earlier on this page](#schema-class-Density) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has pressure (Optional) + +**Description:** The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity. + +**Data Type:** Pressure + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_pressure](./elements/slots/has_pressure.md) + +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Pressure) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+SlurryReactor + +**Description:** Slurry reactor — a three-phase reactor in which catalyst particles are +suspended in a liquid phase through which gas is bubbled. + +**CURIE:** [`coremeta4cat:SlurryReactor`](https://w3id.org/nfdi4cat/coremeta4cat/SlurryReactor) + +**Schema Reference:** [SlurryReactor](./elements/classes/SlurryReactor.md) + +**Slots** + +
+catalyst particle size (Recommended) + +**Description:** A measure of the characteristic linear dimension of a particle in a +sample, typically reported as diameter or sieve fraction range. + +**Data Type:** LengthQuantity + +**Cardinality:** Recommended + +**CURIE:** [`VOC4CAT:0008212`](https://w3id.org/nfdi4cat/voc4cat_0008212) + +**Schema Reference:** [catalyst_particle_size](./elements/slots/catalyst_particle_size.md) + +**Data Type Class Details:** + +
+LengthQuantity + +**Description:** A quantitative measure of length or spatial dimension (nm, mm, cm). + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-LengthQuantity) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+gas liquid ratio (Recommended) + +**Description:** The volumetric ratio of gas to liquid phase in the slurry reactor. + +**Data Type:** float + +**Cardinality:** Recommended + +**Schema Reference:** [gas_liquid_ratio](./elements/slots/gas_liquid_ratio.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+agitation sparging rate (Recommended) + +**Description:** The volumetric flow rate at which gas is sparged/bubbled through the +liquid phase, or the rate of mechanical agitation used to maintain +the slurry suspension. + +**Data Type:** VolumeFlowRate + +**Cardinality:** Recommended + +**Schema Reference:** [agitation_sparging_rate](./elements/slots/agitation_sparging_rate.md) + +**Data Type Class Details:** + +
+VolumeFlowRate + +**Description:** Volume of fluid passing a given point per unit time. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +**Schema Reference:** [VolumeFlowRate](./elements/classes/VolumeFlowRate.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+impeller type (Recommended) + +**Description:** The category of impeller used to agitate and suspend the slurry +(e.g. Rushton turbine, pitched blade, anchor). + +**Data Type:** string + +**Cardinality:** Recommended + +**Schema Reference:** [impeller_type](./elements/slots/impeller_type.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+agitation speed (Recommended) + +**Description:** The rotational speed of the agitator/impeller, typically expressed +in revolutions per unit time. + +**Data Type:** AngularVelocity + +**Cardinality:** Recommended + +**Schema Reference:** [agitation_speed](./elements/slots/agitation_speed.md) + +**Data Type Class Details:** + +
+AngularVelocity + +**Description:** Rate of rotational motion, typically expressed in revolutions per minute. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-AngularVelocity) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+alternative label (Optional) + +**Description:** The slot to specify an alternative label, name or title for a MaterialEntity. + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`skos:altLabel`](http://www.w3.org/2004/02/skos/core#altLabel) + +**Schema Reference:** [alternative_label](./elements/slots/alternative_label.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has physical state (Optional) + +**Description:** The slot to specify the physical state of a MaterialEntity. + +**Data Type:** PhysicalStateEnum + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_physical_state](./elements/slots/has_physical_state.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has temperature (Optional) + +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. + +**Data Type:** Temperature + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) + +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has mass (Optional) + +**Description:** The slot to provide the Mass of a MaterialEntity. + +**Data Type:** Mass + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_mass](./elements/slots/has_mass.md) + +**Data Type Class Details:** + +
+Mass + +**Description:** The strength of a body's gravitational attraction to other bodies. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Mass) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has volume (Optional) + +**Description:** The slot to provide the Volume of a MaterialEntity. + +**Data Type:** Volume + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_volume](./elements/slots/has_volume.md) + +**Data Type Class Details:** + +
+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Volume) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has density (Optional) + +**Description:** The slot to provide the Density of a MaterialEntity. + +**Data Type:** Density + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_density](./elements/slots/has_density.md) + +**Data Type Class Details:** + +
+Density + +**Description:** A measure of the mass per unit volume of a substance. + +**CURIE:** [`SIO:001406`](http://semanticscience.org/resource/SIO_001406) + +*Full field list already shown [earlier on this page](#schema-class-Density) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has pressure (Optional) + +**Description:** The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity. + +**Data Type:** Pressure + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_pressure](./elements/slots/has_pressure.md) + +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Pressure) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+Microreactor + +**Description:** Microreactor — a miniaturised flow reactor with characteristic dimensions +in the sub-millimetre range, enabling precise thermal control and rapid +screening. + +**CURIE:** [`VOC4CAT:0000234`](https://w3id.org/nfdi4cat/voc4cat_0000234) + +**Schema Reference:** [Microreactor](./elements/classes/Microreactor.md) + +**Slots** + +
+channel material (Recommended) + +**Description:** Material used for the construction of the microreactor channels. + +**Data Type:** string + +**Cardinality:** Recommended + +**Schema Reference:** [channel_material](./elements/slots/channel_material.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+channel dimensions (Recommended, Multivalued) + +**Description:** The characteristic dimensions (e.g. width, depth) of the microreactor +channels. + +**Data Type:** LengthQuantity + +**Cardinality:** Recommended, Multivalued + +**Schema Reference:** [channel_dimensions](./elements/slots/channel_dimensions.md) + +**Data Type Class Details:** + +
+LengthQuantity + +**Description:** A quantitative measure of length or spatial dimension (nm, mm, cm). + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-LengthQuantity) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+number of channels (Recommended) + +**Description:** The number of parallel channels in the microreactor. + +**Data Type:** integer + +**Cardinality:** Recommended + +**Schema Reference:** [number_of_channels](./elements/slots/number_of_channels.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+alternative label (Optional) + +**Description:** The slot to specify an alternative label, name or title for a MaterialEntity. + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`skos:altLabel`](http://www.w3.org/2004/02/skos/core#altLabel) + +**Schema Reference:** [alternative_label](./elements/slots/alternative_label.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has physical state (Optional) + +**Description:** The slot to specify the physical state of a MaterialEntity. + +**Data Type:** PhysicalStateEnum + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_physical_state](./elements/slots/has_physical_state.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has temperature (Optional) + +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. + +**Data Type:** Temperature + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) + +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has mass (Optional) + +**Description:** The slot to provide the Mass of a MaterialEntity. + +**Data Type:** Mass + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_mass](./elements/slots/has_mass.md) + +**Data Type Class Details:** + +
+Mass + +**Description:** The strength of a body's gravitational attraction to other bodies. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Mass) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has volume (Optional) + +**Description:** The slot to provide the Volume of a MaterialEntity. + +**Data Type:** Volume + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_volume](./elements/slots/has_volume.md) + +**Data Type Class Details:** + +
+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Volume) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has density (Optional) + +**Description:** The slot to provide the Density of a MaterialEntity. + +**Data Type:** Density + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_density](./elements/slots/has_density.md) + +**Data Type Class Details:** + +
+Density + +**Description:** A measure of the mass per unit volume of a substance. + +**CURIE:** [`SIO:001406`](http://semanticscience.org/resource/SIO_001406) + +*Full field list already shown [earlier on this page](#schema-class-Density) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has pressure (Optional) + +**Description:** The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity. + +**Data Type:** Pressure + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_pressure](./elements/slots/has_pressure.md) + +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Pressure) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+FixedBedReactor + +**Description:** Fixed bed reactor — a tubular reactor packed with a stationary catalyst bed. +The most common reactor type in heterogeneous catalysis testing. + +**CURIE:** [`coremeta4cat:FixedBedReactor`](https://w3id.org/nfdi4cat/coremeta4cat/FixedBedReactor) + +**Schema Reference:** [FixedBedReactor](./elements/classes/FixedBedReactor.md) + +**Slots** + +
+catalyst particle size (Recommended) + +**Description:** A measure of the characteristic linear dimension of a particle in a +sample, typically reported as diameter or sieve fraction range. + +**Data Type:** LengthQuantity + +**Cardinality:** Recommended + +**CURIE:** [`VOC4CAT:0008212`](https://w3id.org/nfdi4cat/voc4cat_0008212) + +**Schema Reference:** [catalyst_particle_size](./elements/slots/catalyst_particle_size.md) + +**Data Type Class Details:** + +
+LengthQuantity + +**Description:** A quantitative measure of length or spatial dimension (nm, mm, cm). + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-LengthQuantity) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+catalyst bed diameter (Recommended) + +**Description:** The internal diameter of the packed catalyst bed section. + +**Data Type:** LengthQuantity + +**Cardinality:** Recommended + +**Schema Reference:** [catalyst_bed_diameter](./elements/slots/catalyst_bed_diameter.md) + +**Data Type Class Details:** + +
+LengthQuantity + +**Description:** A quantitative measure of length or spatial dimension (nm, mm, cm). + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-LengthQuantity) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+catalyst bed volume (Recommended) + +**Description:** The bulk volume taken up by the catalyst and potential diluent in a +fixed bed reactor. + +**Data Type:** Volume + +**Cardinality:** Recommended + +**CURIE:** [`VOC4CAT:0007021`](https://w3id.org/nfdi4cat/voc4cat_0007021) + +**Schema Reference:** [catalyst_bed_volume](./elements/slots/catalyst_bed_volume.md) + +**Data Type Class Details:** + +
+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Volume) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+catalyst dilution material (Optional) + +**Description:** An inert solid mixed with catalyst particles in a fixed bed to modify +bed properties (e.g. improve heat/mass transfer, dilute activity). + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`VOC4CAT:0008218`](https://w3id.org/nfdi4cat/voc4cat_0008218) + +**Schema Reference:** [catalyst_dilution_material](./elements/slots/catalyst_dilution_material.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+catalyst bed height (Optional) + +**Description:** The axial length of the packed catalyst section in a reactor, +measured along the direction of flow. + +**Data Type:** LengthQuantity + +**Cardinality:** Optional + +**CURIE:** [`VOC4CAT:0008217`](https://w3id.org/nfdi4cat/voc4cat_0008217) + +**Schema Reference:** [catalyst_bed_height](./elements/slots/catalyst_bed_height.md) + +**Data Type Class Details:** + +
+LengthQuantity + +**Description:** A quantitative measure of length or spatial dimension (nm, mm, cm). + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-LengthQuantity) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+alternative label (Optional) + +**Description:** The slot to specify an alternative label, name or title for a MaterialEntity. + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`skos:altLabel`](http://www.w3.org/2004/02/skos/core#altLabel) + +**Schema Reference:** [alternative_label](./elements/slots/alternative_label.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has physical state (Optional) + +**Description:** The slot to specify the physical state of a MaterialEntity. + +**Data Type:** PhysicalStateEnum + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_physical_state](./elements/slots/has_physical_state.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has temperature (Optional) + +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. + +**Data Type:** Temperature + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) + +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has mass (Optional) + +**Description:** The slot to provide the Mass of a MaterialEntity. + +**Data Type:** Mass + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_mass](./elements/slots/has_mass.md) + +**Data Type Class Details:** + +
+Mass + +**Description:** The strength of a body's gravitational attraction to other bodies. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Mass) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has volume (Optional) + +**Description:** The slot to provide the Volume of a MaterialEntity. + +**Data Type:** Volume + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_volume](./elements/slots/has_volume.md) + +**Data Type Class Details:** + +
+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Volume) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has density (Optional) + +**Description:** The slot to provide the Density of a MaterialEntity. + +**Data Type:** Density + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_density](./elements/slots/has_density.md) + +**Data Type Class Details:** + +
+Density + +**Description:** A measure of the mass per unit volume of a substance. + +**CURIE:** [`SIO:001406`](http://semanticscience.org/resource/SIO_001406) + +*Full field list already shown [earlier on this page](#schema-class-Density) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has pressure (Optional) + +**Description:** The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity. + +**Data Type:** Pressure + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_pressure](./elements/slots/has_pressure.md) + +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Pressure) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+FluidizedBedReactor + +**Description:** Fluidized bed reactor — a reactor in which the catalyst particles are +suspended in an upward-flowing gas or liquid stream. + +**CURIE:** [`coremeta4cat:FluidizedBedReactor`](https://w3id.org/nfdi4cat/coremeta4cat/FluidizedBedReactor) + +**Schema Reference:** [FluidizedBedReactor](./elements/classes/FluidizedBedReactor.md) + +**Slots** + +
+gas distributor type (Optional, Multivalued) + +**Description:** Type or design of the gas distributor plate in a fluidized bed reactor. + +**Data Type:** string + +**Cardinality:** Optional, Multivalued + +**CURIE:** [`coremeta4cat:gas_distributor_type`](https://w3id.org/nfdi4cat/coremeta4cat/gas_distributor_type) + +**Schema Reference:** [gas_distributor_type](./elements/slots/gas_distributor_type.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+bed expansion height (Optional, Multivalued) + +**Description:** Height of bed expansion above the settled bed height under operating conditions. + +**Data Type:** float + +**Cardinality:** Optional, Multivalued + +**CURIE:** [`coremeta4cat:bed_expansion_height`](https://w3id.org/nfdi4cat/coremeta4cat/bed_expansion_height) + +**Schema Reference:** [bed_expansion_height](./elements/slots/bed_expansion_height.md) + +**Unit:** cm + +

+ + 💡 Submit Term Feedback + +

+ +
+bubble size distribution (Optional) + +**Description:** Description or characterization of bubble size distribution in the fluidized bed. + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`coremeta4cat:bubble_size_distribution`](https://w3id.org/nfdi4cat/coremeta4cat/bubble_size_distribution) + +**Schema Reference:** [bubble_size_distribution](./elements/slots/bubble_size_distribution.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+alternative label (Optional) + +**Description:** The slot to specify an alternative label, name or title for a MaterialEntity. + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`skos:altLabel`](http://www.w3.org/2004/02/skos/core#altLabel) + +**Schema Reference:** [alternative_label](./elements/slots/alternative_label.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has physical state (Optional) + +**Description:** The slot to specify the physical state of a MaterialEntity. + +**Data Type:** PhysicalStateEnum + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_physical_state](./elements/slots/has_physical_state.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has temperature (Optional) + +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. + +**Data Type:** Temperature + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) + +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has mass (Optional) + +**Description:** The slot to provide the Mass of a MaterialEntity. + +**Data Type:** Mass + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_mass](./elements/slots/has_mass.md) + +**Data Type Class Details:** + +
+Mass + +**Description:** The strength of a body's gravitational attraction to other bodies. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Mass) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has volume (Optional) + +**Description:** The slot to provide the Volume of a MaterialEntity. + +**Data Type:** Volume + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_volume](./elements/slots/has_volume.md) + +**Data Type Class Details:** + +
+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Volume) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has density (Optional) + +**Description:** The slot to provide the Density of a MaterialEntity. + +**Data Type:** Density + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_density](./elements/slots/has_density.md) + +**Data Type Class Details:** + +
+Density + +**Description:** A measure of the mass per unit volume of a substance. + +**CURIE:** [`SIO:001406`](http://semanticscience.org/resource/SIO_001406) + +*Full field list already shown [earlier on this page](#schema-class-Density) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has pressure (Optional) + +**Description:** The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity. + +**Data Type:** Pressure + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_pressure](./elements/slots/has_pressure.md) + +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Pressure) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+has temperature (Optional) + +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. + +**Data Type:** Temperature + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) + +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has pressure (Optional) + +**Description:** The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity. + +**Data Type:** Pressure + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_pressure](./elements/slots/has_pressure.md) + +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Pressure) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has yield (Optional) + +**Description:** A slot to provide the percentage of how much of the ChemicalProduct was produced by a ChemicalReaction. + +**Data Type:** Yield + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_yield](./elements/slots/has_yield.md) + +**Data Type Class Details:** + +
+Yield + +**Description:** A dimensionless physical quantity describing the fraction of a product B that is formed from a reactant A taking into account the stoichiometry. If A fully reacts to B without side-reactions, the yield of product B is 1 (or 100 %). + +**CURIE:** [`CHMO:0002855`](http://purl.obolibrary.org/obo/CHMO_0002855) + +**Schema Reference:** [Yield](./elements/classes/Yield.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+has reaction step (Optional, Multivalued) + +**Description:** A slot to specify a step (part) of a ChemicalReaction that is itself a ChemicalReaction. + +**Data Type:** ChemicalReaction + +**Cardinality:** Optional, Multivalued + +**CURIE:** [`BFO:0000051`](http://purl.obolibrary.org/obo/BFO_0000051) + +**Schema Reference:** [has_reaction_step](./elements/slots/has_reaction_step.md) + +**Data Type Class Details:** + +
+ChemicalReaction + +**Description:** A process that leads to the transformation of one set of chemical substances to another and that is the subject matter of a DataGeneratingActivity. + +**CURIE:** [`SIO:010345`](http://semanticscience.org/resource/SIO_010345) + +**Schema Reference:** [ChemicalReaction](./elements/classes/ChemicalReaction.md) + +**Slots** + +
+used starting material (Recommended, Multivalued) + +**Description:** The slot to specify the StartingMaterial(s) of a ChemicalReaction. + +**Data Type:** StartingMaterial + +**Cardinality:** Recommended, Multivalued + +**CURIE:** [`RO:0004009`](http://purl.obolibrary.org/obo/RO_0004009) + +**Schema Reference:** [used_starting_material](./elements/slots/used_starting_material.md) + +**Data Type Class Details:** + +
+StartingMaterial + +**Description:** A ChemicalSubstance with that has a starting material role in a synthesis. + +**CURIE:** [`PROCO:0000029`](http://purl.obolibrary.org/obo/PROCO_0000029) + +*Full field list already shown [earlier on this page](#schema-class-StartingMaterial) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+used reactant (Recommended, Multivalued) + +**Description:** The slot to specify the Reagent(s) of a ChemicalReaction. + +**Data Type:** Reagent + +**Cardinality:** Recommended, Multivalued + +**CURIE:** [`RO:0004009`](http://purl.obolibrary.org/obo/RO_0004009) + +**Schema Reference:** [used_reactant](./elements/slots/used_reactant.md) + +**Data Type Class Details:** + +
+Reagent + +**Description:** A ChemicalSubstance that is consumed or transformed in a ChemicalReaction. + +**CURIE:** [`SIO:010411`](http://semanticscience.org/resource/SIO_010411) + +*Full field list already shown [earlier on this page](#schema-class-Reagent) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+generated product (Recommended, Multivalued) + +**Description:** The slot to specify the Product(s) of a ChemicalReaction. + +**Data Type:** ChemicalProduct + +**Cardinality:** Recommended, Multivalued + +**CURIE:** [`RO:0004008`](http://purl.obolibrary.org/obo/RO_0004008) + +**Schema Reference:** [generated_product](./elements/slots/generated_product.md) + +**Data Type Class Details:** + +
+ChemicalProduct + +**Description:** A chemical substance that is produced by a ChemicalReaction. + +**CURIE:** [`NCIT:C48810`](http://purl.obolibrary.org/obo/NCIT_C48810) + +*Full field list already shown [earlier on this page](#schema-class-ChemicalProduct) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+used catalyst (Recommended, Multivalued) + +**Description:** The slot to specify the Catalyst of a ChemicalReaction. + +**Data Type:** Catalyst + +**Cardinality:** Recommended, Multivalued + +**CURIE:** [`RXNO:0000425`](http://purl.obolibrary.org/obo/RXNO_0000425) + +**Schema Reference:** [used_catalyst](./elements/slots/used_catalyst.md) + +**Data Type Class Details:** + +
+Catalyst + +**Description:** A ChemicalSubstance or MaterialEntity that initiates or accelerates a ChemicalReaction without itself being affected. + +**CURIE:** [`SIO:010344`](http://semanticscience.org/resource/SIO_010344) + +*Full field list already shown [earlier on this page](#schema-class-Catalyst) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+used solvent (Recommended, Multivalued) + +**Description:** The slot to specify the chemical substance that had a solvent role (CHEBI:35223) in a ChemicalReaction. + +**Data Type:** DissolvingSubstance + +**Cardinality:** Recommended, Multivalued + +**CURIE:** [`prov:wasAssociatedWith`](http://www.w3.org/ns/prov#wasAssociatedWith) + +**Schema Reference:** [used_solvent](./elements/slots/used_solvent.md) + +**Data Type Class Details:** + +
+DissolvingSubstance + +**Description:** A liquid ChemicalSubstance that dissolves or that is capable of dissolving a ChemicalSubstance. + +**CURIE:** [`SIO:010417`](http://semanticscience.org/resource/SIO_010417) + +*Full field list already shown [earlier on this page](#schema-class-DissolvingSubstance) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has duration (Optional) + +**Description:** A slot to provide the duration of a ChemicalReaction. + +**Data Type:** duration + +**Cardinality:** Optional + +**CURIE:** [`schema:duration`](http://schema.org/duration) + +**Schema Reference:** [has_duration](./elements/slots/has_duration.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+used reactor (Optional) + +**Description:** The slot to specify the reactor used in a ChemicalReaction. + +**Data Type:** Reactor + +**Cardinality:** Optional + +**CURIE:** [`prov:wasAssociatedWith`](http://www.w3.org/ns/prov#wasAssociatedWith) + +**Schema Reference:** [used_reactor](./elements/slots/used_reactor.md) + +**Data Type Class Details:** + +
+Reactor + +**Description:** A reactor is a container for controlling a biological or chemical reaction or process. + +**CURIE:** [`AFE:0000153`](http://purl.allotrope.org/ontologies/equipment#AFE_0000153) + +*Full field list already shown [earlier on this page](#schema-class-Reactor) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has temperature (Optional) + +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. + +**Data Type:** Temperature + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) + +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has pressure (Optional) + +**Description:** The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity. + +**Data Type:** Pressure + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_pressure](./elements/slots/has_pressure.md) + +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Pressure) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has yield (Optional) + +**Description:** A slot to provide the percentage of how much of the ChemicalProduct was produced by a ChemicalReaction. + +**Data Type:** Yield + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_yield](./elements/slots/has_yield.md) + +**Data Type Class Details:** + +
+Yield + +**Description:** A dimensionless physical quantity describing the fraction of a product B that is formed from a reactant A taking into account the stoichiometry. If A fully reacts to B without side-reactions, the yield of product B is 1 (or 100 %). + +**CURIE:** [`CHMO:0002855`](http://purl.obolibrary.org/obo/CHMO_0002855) + +*Full field list already shown [earlier on this page](#schema-class-Yield) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has reaction step (Optional, Multivalued) + +**Description:** A slot to specify a step (part) of a ChemicalReaction that is itself a ChemicalReaction. + +**Data Type:** ChemicalReaction + +**Cardinality:** Optional, Multivalued + +**CURIE:** [`BFO:0000051`](http://purl.obolibrary.org/obo/BFO_0000051) + +**Schema Reference:** [has_reaction_step](./elements/slots/has_reaction_step.md) + +**Data Type Class Details:** + +

+ + 💡 Submit Term Feedback + +

+ +
+related resource (Optional, Multivalued) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional, Multivalued + +**Schema Reference:** [related_resource](./elements/slots/related_resource.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+related resource (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [related_resource](./elements/slots/related_resource.md) + +

+ 💡 Submit Term Feedback

diff --git a/docs/schema/coremeta4cat.yaml b/docs/schema/coremeta4cat.yaml index 74b61a91f..7fa2a6523 100644 --- a/docs/schema/coremeta4cat.yaml +++ b/docs/schema/coremeta4cat.yaml @@ -9,17 +9,25 @@ description: "The CoreMeta4Cat describes the minimum information which must be r \ terms \u2014 analogous to how NMRSpectroscopy uses\n rdf_type: CHMO:0000613 to\ \ classify the measurement type.\n\n- The four CoreMeta4Cat pillars are modelled\ \ as DCAT-AP-PLUS Activity subclasses,\n following the same pattern as NMRSpectroscopy\ - \ (is_a: DataGeneratingActivity):\n\n Synthesis --> is_a: DataGeneratingActivity\n\ + \ (is_a: DataGeneratingActivity).\n Synthesis, Characterization, and Simulation\ + \ specialize CatalysisDataGeneratingActivity\n (is_a: DataGeneratingActivity) rather\ + \ than DataGeneratingActivity directly -- this\n coremeta4cat-owned intermediate\ + \ adds a type designator (activity_designator) so that\n was_generated_by (typed\ + \ CatalysisDataGeneratingActivity) can hold any of the three and\n still resolve\ + \ to the right concrete Python class when loaded. Likewise, is_about_activity\n\ + \ is typed CatalyticReaction directly (not the wider EvaluatedActivity) so it needs\ + \ no\n designator at all:\n\n Synthesis --> is_a: CatalysisDataGeneratingActivity\n\ \ Produces a catalyst (MaterialSample) as had_output_entity.\n\ \ The PreparationMethod (protocol) is linked via realized_plan.\n\ - \n Characterization --> is_a: DataGeneratingActivity\n \ - \ Produces measurement data about a catalyst or reaction.\n \ - \ The catalyst/sample is the evaluated_entity.\n The CharacterizationTechnique\ - \ is linked via realized_plan.\n\n Reaction --> is_a: EvaluatedActivity\n\ - \ The catalytic process being studied, NOT a data-generating\n\ + \n Characterization --> is_a: CatalysisDataGeneratingActivity\n \ + \ Produces measurement data about a catalyst or reaction.\n \ + \ The catalyst/sample is the evaluated_entity.\n \ + \ The CharacterizationTechnique is linked via realized_plan.\n\n Reaction \ + \ --> is_a: CatalyticReaction (via ChemicalReaction, EvaluatedActivity)\n \ + \ The catalytic process being studied, NOT a data-generating\n\ \ activity itself. Characterization datasets are about this.\n\ \ Analogous to the reaction being observed in a reaction\n \ - \ monitoring dataset.\n\n Simulation --> is_a: DataGeneratingActivity\n\ + \ monitoring dataset.\n\n Simulation --> is_a: CatalysisDataGeneratingActivity\n\ \ Generates computational data about a catalyst or reaction.\n\ \ The SimulationMethod (protocol) is linked via realized_plan.\n\ \ The simulation software is carried_out_by: Software.\n\n-\ @@ -51,9 +59,9 @@ imports: - coremeta4cat_reaction_ap - coremeta4cat_simulation_ap - chem_dcat_ap +- chemical_reaction_ap - dcatapplus:latest/schema/dcat_ap_plus - chemical_entities_ap -- chemical_reaction_ap - material_entities_ap license: CC-BY-4.0 prefixes: @@ -432,6 +440,11 @@ enums: text: electrocatalysis description: "Electrocatalysis \u2014 catalysis of electrochemical reactions." meaning: VOC4CAT:0000216 + photocatalysis: + text: photocatalysis + description: "Photocatalysis \u2014 catalysis of a chemical reaction through\ + \ the\nabsorption of sufficient light energy by a photocatalyst." + meaning: VOC4CAT:0000001 hybrid_catalysis: text: hybrid_catalysis description: "Hybrid catalysis \u2014 combination of two or more catalytic\ @@ -490,6 +503,65 @@ enums: other: text: other description: Other sample state. + CatalystFormEnum: + name: CatalystFormEnum + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CatalystFormEnum + description: 'Enumeration of the physical form/presentation of a catalyst as loaded + + into a reactor -- a separate axis from CatalysisResearchFieldEnum + + (which describes the catalytic regime, e.g. heterogeneous/homogeneous).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ + permissible_values: + thin_film: + text: thin_film + description: A catalyst introduced to the reaction chamber as a thin film + on a substrate. + meaning: VOC4CAT:0000019 + bulk: + text: bulk + description: A catalyst that consists mainly of the active material throughout + its volume. + meaning: VOC4CAT:0007015 + powdered: + text: powdered + description: A catalyst introduced to the reaction chamber as a loose powder. + meaning: VOC4CAT:0000017 + deposited_sample: + text: deposited_sample + description: A thin film of the catalyst deposited on a substrate for characterization + purposes. + meaning: VOC4CAT:0000038 + supported: + text: supported + description: A catalyst where the active material is dispersed on a support + material. + meaning: VOC4CAT:0007034 + other: + text: other + description: Other catalyst form not covered by the above terms. + CellOperatingModeEnum: + name: CellOperatingModeEnum + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CellOperatingModeEnum + description: 'Enumeration of the functional mode of an electrochemical cell, based + + on the direction of energy conversion.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ + permissible_values: + galvanic: + text: galvanic + description: 'An electrochemical cell that converts chemical energy into + + electrical energy via a spontaneous reaction.' + meaning: VOC4CAT:0007256 + electrolytic: + text: electrolytic + description: 'An electrochemical cell that consumes electrical energy to drive + + a non-spontaneous reaction.' + other: + text: other + description: Other cell operating mode. DatasetThemes: name: DatasetThemes definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/DatasetThemes @@ -653,6 +725,27 @@ enums: electricity, often found in high-energy environments such as stars or lightning. meaning: PATO:0015012 slots: + activity_designator: + name: activity_designator + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/activity_designator + description: 'Internal type designator for CatalysisDataGeneratingActivity subclasses + + (Synthesis, Characterization, Simulation). Only needs to be set by hand + + when nesting one of these inside another object''s was_generated_by list + + (e.g. in a combined CatalysisDataset file) -- LinkML fills it in + + automatically when a class is instantiated directly.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ + mappings: + - rdf:type + slot_uri: rdf:type + designates_type: true + owner: CatalysisDataGeneratingActivity + domain_of: + - CatalysisDataGeneratingActivity + range: string has_flow_rate: name: has_flow_rate definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_flow_rate @@ -816,67 +909,6 @@ slots: multivalued: true inlined: true inlined_as_list: true - has_conversion: - name: has_conversion - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_conversion - description: A dimensionless physical quantity describing the fraction of a reactant - that reacts in a chemical conversion. If a reactant is consumed completely its - conversion is 1 (or 100 %). - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - SIO:000008 - is_a: has_quantitative_attribute - slot_uri: SIO:000008 - owner: ReactorPerformanceMeasures - domain_of: - - ReactorPerformanceMeasures - range: Conversion - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - has_space_time_yield: - name: has_space_time_yield - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_space_time_yield - description: 'A physical quantity that describes the amount of product produced - per unit of time and unit of producing entity. The producing entity is for example - the volume of a chemical reactor or in catalysis the mass or volume or moles - of catalyst. Example unit: kg{product} / (hour * cubicmeter{catalyst})' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - SIO:000008 - is_a: has_quantitative_attribute - slot_uri: SIO:000008 - owner: ReactorPerformanceMeasures - domain_of: - - ReactorPerformanceMeasures - range: SpaceTimeYield - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - has_selectivity: - name: has_selectivity - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_selectivity - description: A dimensionless physical quantity describing how effective a reactant - is converted to the desired product in a chemical conversion. It is calculated - as the ratio between the amount of the desired product and the amount of the - desired product that could have been formed if all reactants were converted - to the desired product. The selectivity is 1 (or 100 %) if no other than the - desired product is formed. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - SIO:000008 - is_a: has_quantitative_attribute - slot_uri: SIO:000008 - owner: ReactorPerformanceMeasures - domain_of: - - ReactorPerformanceMeasures - range: Selectivity - recommended: true - multivalued: true - inlined: true - inlined_as_list: true has_drying_temperature: name: has_drying_temperature definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_drying_temperature @@ -919,11 +951,14 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - coremeta4cat:hasCalcinationTemperatureRange + is_a: has_quantitative_attribute slot_uri: coremeta4cat:hasCalcinationTemperatureRange owner: CalcinationMixin domain_of: - CalcinationMixin range: QuantitativeRange + recommended: true + multivalued: true inlined: true inlined_as_list: true has_calcination_dwelling_time: @@ -984,10 +1019,9 @@ slots: - SIO:000008 is_a: has_angular_velocity slot_uri: SIO:000008 - owner: CSTR + owner: MolecularSynthesis domain_of: - MolecularSynthesis - - CSTR range: AngularVelocity recommended: true multivalued: true @@ -1075,209 +1109,6 @@ slots: range: Duration inlined: true inlined_as_list: true - has_cathode: - name: has_cathode - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_cathode - description: The electrode where reduction occurs in an electrochemical cell. - It is the negative electrode in an electrolytic cell, while it is the positive - electrode in a galvanic cell. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - VOC4CAT:0007254 - is_a: carried_out_by - slot_uri: VOC4CAT:0007254 - owner: ElectrochemicalReactor - domain_of: - - ElectrochemicalReactor - range: string - recommended: true - multivalued: true - inlined_as_list: true - has_anode: - name: has_anode - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_anode - description: The electrode where oxidation occurs in an electrochemical cell. - It is the positive electrode in an electrolytic cell, while it is the negative - electrode in a galvanic cell. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - VOC4CAT:0007255 - is_a: carried_out_by - slot_uri: VOC4CAT:0007255 - owner: ElectrochemicalReactor - domain_of: - - ElectrochemicalReactor - range: string - recommended: true - multivalued: true - inlined_as_list: true - has_cell_operating_mode: - name: has_cell_operating_mode - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_cell_operating_mode - description: The functional mode of an electrochemical cell based on the direction - of energy conversion, specifiying wheter the system generates electrical energy - from spontaneous reactions or consumes energy to drive non-spontaneous reactions. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - SIO:000008 - is_a: has_qualitative_attribute - slot_uri: SIO:000008 - owner: ElectrochemicalReactor - domain_of: - - ElectrochemicalReactor - range: string - recommended: true - multivalued: true - inlined_as_list: true - has_active_area: - name: has_active_area - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_active_area - description: In contrast to substrate area, the actual area of a sample or electrode - which is active. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - SIO:000008 - is_a: has_quantitative_attribute - slot_uri: SIO:000008 - owner: ElectrochemicalReactor - domain_of: - - ElectrochemicalReactor - range: QuantitativeAttribute - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - has_faradaic_current: - name: has_faradaic_current - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_faradaic_current - description: The current that is flowing through an electrochemical cell and is - causing (or is caused by) chemical reactions (charge transfer) occurring at - the electrode surfaces. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - SIO:000008 - is_a: has_quantitative_attribute - slot_uri: SIO:000008 - owner: ElectrochemicalReactor - domain_of: - - ElectrochemicalReactor - range: QuantitativeAttribute - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - has_stirrer_type: - name: has_stirrer_type - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_stirrer_type - description: The category of mechanical or magnetic agitation device used to ensure - homogeneous mixing within a reaction system or mixing vessel, such as a magnetic - stirrer or an overhead mechanical (steel shaft) stirrer. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - VOC4CAT:0008113 - is_a: has_qualitative_attribute - slot_uri: VOC4CAT:0008113 - owner: CSTR - domain_of: - - CSTR - range: string - recommended: true - multivalued: true - inlined: false - inlined_as_list: false - has_stirrer_diameter: - name: has_stirrer_diameter - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_stirrer_diameter - description: The effective diameter of the stirrer. Typically expressed as the - distance across the rotating blade or mixing head from one tip to the opposite - tip. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - VOC4CAT:0008115 - is_a: has_quantitative_attribute - slot_uri: VOC4CAT:0008115 - owner: CSTR - domain_of: - - CSTR - range: QuantitativeAttribute - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - has_catalyst_particle_size: - name: has_catalyst_particle_size - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_catalyst_particle_size - description: A measure of the characteristic linear dimension of a particle in - a sample, typically reported as diameter, equivalent diameter, or another size - metric determined by an appropriate measurement method. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - VOC4CAT:0008212 - is_a: has_quantitative_attribute - slot_uri: VOC4CAT:0008212 - owner: FixedBedReactor - domain_of: - - FixedBedReactor - range: QuantitativeAttribute - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - has_catalyst_bed_volume: - name: has_catalyst_bed_volume - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_catalyst_bed_volume - description: The bulk volume taken up by the catalyst and potential diluent in - a fixed bed reactor. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - VOC4CAT:0007021 - is_a: has_quantitative_attribute - slot_uri: VOC4CAT:0007021 - owner: FixedBedReactor - domain_of: - - FixedBedReactor - range: QuantitativeAttribute - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - has_catalyst_dilution_material: - name: has_catalyst_dilution_material - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_catalyst_dilution_material - description: An inert solid mixed with catalyst particles in a fixed bed to modify - bed properties (e.g., improve heat transfer, hydrodynamics or isothermicity) - without participating in the reaction. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - VOC4CAT:0008218 - is_a: has_qualitative_attribute - slot_uri: VOC4CAT:0008218 - owner: FixedBedReactor - domain_of: - - FixedBedReactor - range: QualitativeAttribute - recommended: true - multivalued: true - inlined: true - inlined_as_list: false - has_catalyst_bed_height: - name: has_catalyst_bed_height - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_catalyst_bed_height - description: The axial length of the packed catalyst section in a reactor, measured - along the direction of flow between the defined bed boundaries. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - VOC4CAT:0008217 - is_a: has_quantitative_attribute - slot_uri: VOC4CAT:0008217 - owner: FixedBedReactor - domain_of: - - FixedBedReactor - range: QuantitativeAttribute - recommended: true - multivalued: true - inlined: true - inlined_as_list: true has_atmosphere: name: has_atmosphere definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_atmosphere @@ -1422,6 +1253,7 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - VOC4CAT:0008123 + is_a: has_quantitative_attribute slot_uri: VOC4CAT:0008123 owner: CyclicVoltammetry domain_of: @@ -1431,7 +1263,9 @@ slots: - XRayAbsorptionSpectroscopy - CyclicVoltammetry range: integer + recommended: true multivalued: true + inlined_as_list: true carrier_gas: name: carrier_gas definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/carrier_gas @@ -1439,6 +1273,7 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - coremeta4cat:carrier_gas + is_a: carried_out_by slot_uri: coremeta4cat:carrier_gas owner: GCMS domain_of: @@ -1447,6 +1282,7 @@ slots: - ElectroSprayIonizationMassSpectrometry - GCMS range: ChemicalEntity + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -1457,12 +1293,14 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - coremeta4cat:dispersant + is_a: carried_out_by slot_uri: coremeta4cat:dispersant owner: DynamicLightScattering domain_of: - FlameSprayPyrolysis - DynamicLightScattering range: ChemicalEntity + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -1473,12 +1311,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - VOC4CAT:0008122 + is_a: has_qualitative_attribute slot_uri: VOC4CAT:0008122 owner: DryingMixin domain_of: - DryingMixin range: string + recommended: true multivalued: true + inlined_as_list: true step_size: name: step_size definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/step_size @@ -1486,6 +1327,7 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - AFR:0000950 + is_a: has_quantitative_attribute slot_uri: AFR:0000950 owner: PhotoluminescenceSpectroscopy domain_of: @@ -1495,7 +1337,9 @@ slots: - DRIFTS - PhotoluminescenceSpectroscopy range: float + recommended: true multivalued: true + inlined_as_list: true resolution: name: resolution definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/resolution @@ -1503,13 +1347,16 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - coremeta4cat:resolution + is_a: has_quantitative_attribute slot_uri: coremeta4cat:resolution owner: DRIFTS domain_of: - EDX - DRIFTS range: float + recommended: true multivalued: true + inlined_as_list: true number_of_scans: name: number_of_scans definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/number_of_scans @@ -1517,6 +1364,7 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - coremeta4cat:number_of_scans + is_a: has_quantitative_attribute slot_uri: coremeta4cat:number_of_scans owner: NMRSpectroscopy domain_of: @@ -1526,7 +1374,9 @@ slots: - RamanSpectroscopy - NMRSpectroscopy range: integer + recommended: true multivalued: true + inlined_as_list: true solvent: name: solvent definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/solvent @@ -1534,6 +1384,7 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - VOC4CAT:0007246 + is_a: carried_out_by slot_uri: VOC4CAT:0007246 owner: DynamicLightScattering domain_of: @@ -1542,6 +1393,7 @@ slots: - UVVisSpectroscopy - DynamicLightScattering range: ChemicalEntity + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -1552,12 +1404,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - coremeta4cat:external_standard + is_a: has_qualitative_attribute slot_uri: coremeta4cat:external_standard owner: ChromatographyMixin domain_of: - ChromatographyMixin range: string + recommended: true multivalued: true + inlined_as_list: true internal_standard: name: internal_standard definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/internal_standard @@ -1565,12 +1420,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - coremeta4cat:internal_standard + is_a: has_qualitative_attribute slot_uri: coremeta4cat:internal_standard owner: ChromatographyMixin domain_of: - ChromatographyMixin range: string + recommended: true multivalued: true + inlined_as_list: true calibration_method: name: calibration_method definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/calibration_method @@ -1578,13 +1436,16 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - coremeta4cat:calibration_method + is_a: has_qualitative_attribute slot_uri: coremeta4cat:calibration_method owner: ICPAES domain_of: - EDX - ICPAES range: string + recommended: true multivalued: true + inlined_as_list: true column_type: name: column_type definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/column_type @@ -1592,12 +1453,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - coremeta4cat:column_type + is_a: has_qualitative_attribute slot_uri: coremeta4cat:column_type owner: ChromatographyMixin domain_of: - ChromatographyMixin range: string + recommended: true multivalued: true + inlined_as_list: true filtration_device: name: filtration_device definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/filtration_device @@ -1605,13 +1469,16 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - coremeta4cat:filtration_device + is_a: has_qualitative_attribute slot_uri: coremeta4cat:filtration_device owner: MolecularSynthesis domain_of: - FlameSprayPyrolysis - MolecularSynthesis range: string + recommended: true multivalued: true + inlined_as_list: true filter_type: name: filter_type definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/filter_type @@ -1619,13 +1486,16 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - coremeta4cat:filter_type + is_a: has_qualitative_attribute slot_uri: coremeta4cat:filter_type owner: MolecularSynthesis domain_of: - FlameSprayPyrolysis - MolecularSynthesis range: string + recommended: true multivalued: true + inlined_as_list: true nominal_composition: name: nominal_composition definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/nominal_composition @@ -1634,12 +1504,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:nominal_composition + is_a: has_qualitative_attribute slot_uri: coremeta4cat:nominal_composition owner: Synthesis domain_of: - Synthesis range: string + recommended: true multivalued: true + inlined_as_list: true catalyst_measured_properties: name: catalyst_measured_properties definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/catalyst_measured_properties @@ -1649,12 +1522,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:catalyst_measured_properties + is_a: has_qualitative_attribute slot_uri: coremeta4cat:catalyst_measured_properties owner: Synthesis domain_of: - Synthesis range: string + recommended: true multivalued: true + inlined_as_list: true storage_conditions: name: storage_conditions definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/storage_conditions @@ -1663,12 +1539,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - VOC4CAT:0008105 + is_a: has_qualitative_attribute slot_uri: VOC4CAT:0008105 owner: Synthesis domain_of: - Synthesis range: string + recommended: true multivalued: true + inlined_as_list: true catalyst_support: name: catalyst_support definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/catalyst_support @@ -1677,24 +1556,29 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - VOC4CAT:0008104 + is_a: has_qualitative_attribute slot_uri: VOC4CAT:0008104 owner: Synthesis domain_of: - Synthesis range: string + recommended: true multivalued: true + inlined_as_list: true precursor_quantity: name: precursor_quantity definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/precursor_quantity description: Quantity of precursor used in synthesis. from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - coremeta4cat:precursor_quantity - slot_uri: coremeta4cat:precursor_quantity + - VOC4CAT:0008118 + is_a: has_mass + slot_uri: VOC4CAT:0008118 owner: Precursor domain_of: - Precursor range: Mass + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -1718,6 +1602,7 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - VOC4CAT:0008120 + is_a: has_duration slot_uri: VOC4CAT:0008120 owner: Impregnation domain_of: @@ -1733,11 +1618,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - VOC4CAT:0008121 + is_a: has_temperature slot_uri: VOC4CAT:0008121 owner: Impregnation domain_of: - Impregnation range: Temperature + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -1748,11 +1635,31 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - VOC4CAT:0008203 + is_a: carried_out_by slot_uri: VOC4CAT:0008203 owner: PrecipitationMixin domain_of: - PrecipitationMixin range: ChemicalEntity + recommended: true + multivalued: true + inlined: true + inlined_as_list: true + precipitating_concentration: + name: precipitating_concentration + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/precipitating_concentration + description: Concentration of the precipitating agent/solution used to induce + precipitation. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ + mappings: + - VOC4CAT:0008125 + is_a: has_concentration + slot_uri: VOC4CAT:0008125 + owner: PrecipitationMixin + domain_of: + - PrecipitationMixin + range: Concentration + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -1846,12 +1753,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - VOC4CAT:0008128 + is_a: has_qualitative_attribute slot_uri: VOC4CAT:0008128 owner: PrecipitationMixin domain_of: - PrecipitationMixin range: string + recommended: true multivalued: true + inlined_as_list: true filtration: name: filtration definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/filtration @@ -1859,12 +1769,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - VOC4CAT:0008129 + is_a: has_qualitative_attribute slot_uri: VOC4CAT:0008129 owner: PrecipitationMixin domain_of: - PrecipitationMixin range: string + recommended: true multivalued: true + inlined_as_list: true purification: name: purification definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/purification @@ -1872,12 +1785,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - VOC4CAT:0008130 + is_a: has_qualitative_attribute slot_uri: VOC4CAT:0008130 owner: PrecipitationMixin domain_of: - PrecipitationMixin range: string + recommended: true multivalued: true + inlined_as_list: true deposition_temperature: name: deposition_temperature definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/deposition_temperature @@ -1885,12 +1801,14 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:deposition_temperature + is_a: has_temperature slot_uri: coremeta4cat:deposition_temperature owner: DepositionPrecipitation domain_of: - AtomicLayerDeposition - DepositionPrecipitation range: Temperature + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -1901,6 +1819,7 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:deposition_time + is_a: has_duration slot_uri: coremeta4cat:deposition_time owner: DepositionPrecipitation domain_of: @@ -1916,11 +1835,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - VOC4CAT:0000051 + is_a: has_temperature slot_uri: VOC4CAT:0000051 owner: ThermalSynthesisMixin domain_of: - ThermalSynthesisMixin range: Temperature + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -1931,6 +1852,7 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - VOC4CAT:0000050 + is_a: has_duration slot_uri: VOC4CAT:0000050 owner: ThermalSynthesisMixin domain_of: @@ -1946,12 +1868,14 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - VOC4CAT:0000053 + is_a: has_pressure slot_uri: VOC4CAT:0000053 owner: Sublimation domain_of: - PlasmaAssisted - Sublimation range: Pressure + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -1962,12 +1886,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:hydrolysis_ratio + is_a: has_quantitative_attribute slot_uri: coremeta4cat:hydrolysis_ratio owner: SolGel domain_of: - SolGel range: float + recommended: true multivalued: true + inlined_as_list: true drying: name: drying definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/drying @@ -1976,12 +1903,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:drying + is_a: has_qualitative_attribute slot_uri: coremeta4cat:drying owner: SolGel domain_of: - SolGel range: string + recommended: true multivalued: true + inlined_as_list: true surfactant_template: name: surfactant_template definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/surfactant_template @@ -1989,12 +1919,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:surfactant_template + is_a: has_qualitative_attribute slot_uri: coremeta4cat:surfactant_template owner: SolGel domain_of: - SolGel range: string + recommended: true multivalued: true + inlined_as_list: true filling_volume: name: filling_volume definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/filling_volume @@ -2002,12 +1935,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:filling_volume + is_a: has_quantitative_attribute slot_uri: coremeta4cat:filling_volume owner: Solvothermal domain_of: - Solvothermal range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: mL stirrer_type: @@ -2017,12 +1953,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - VOC4CAT:0008113 + is_a: has_qualitative_attribute slot_uri: VOC4CAT:0008113 owner: Solvothermal domain_of: - Solvothermal range: string + recommended: true multivalued: true + inlined_as_list: true cooling_rate: name: cooling_rate definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/cooling_rate @@ -2030,11 +1969,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:cooling_rate + is_a: has_heating_rate slot_uri: coremeta4cat:cooling_rate owner: Solvothermal domain_of: - Solvothermal range: HeatingRate + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -2045,12 +1986,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:plasma_type + is_a: has_qualitative_attribute slot_uri: coremeta4cat:plasma_type owner: PlasmaAssisted domain_of: - PlasmaAssisted range: string + recommended: true multivalued: true + inlined_as_list: true power_input: name: power_input definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/power_input @@ -2058,11 +2002,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:power_input + is_a: has_power slot_uri: coremeta4cat:power_input owner: PlasmaAssisted domain_of: - PlasmaAssisted range: PowerQuantity + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -2073,6 +2019,7 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:exposure_time + is_a: has_duration slot_uri: coremeta4cat:exposure_time owner: PlasmaAssisted domain_of: @@ -2088,12 +2035,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:fuel + is_a: has_qualitative_attribute slot_uri: coremeta4cat:fuel owner: CombustionSynthesis domain_of: - CombustionSynthesis range: string + recommended: true multivalued: true + inlined_as_list: true oxidizer: name: oxidizer definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/oxidizer @@ -2101,12 +2051,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:oxidizer + is_a: has_qualitative_attribute slot_uri: coremeta4cat:oxidizer owner: CombustionSynthesis domain_of: - CombustionSynthesis range: string + recommended: true multivalued: true + inlined_as_list: true fuel_to_oxidizer_ratio: name: fuel_to_oxidizer_ratio definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/fuel_to_oxidizer_ratio @@ -2114,12 +2067,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:fuel_to_oxidizer_ratio + is_a: has_quantitative_attribute slot_uri: coremeta4cat:fuel_to_oxidizer_ratio owner: CombustionSynthesis domain_of: - CombustionSynthesis range: float + recommended: true multivalued: true + inlined_as_list: true set_temperature: name: set_temperature definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/set_temperature @@ -2127,11 +2083,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:set_temperature + is_a: has_temperature slot_uri: coremeta4cat:set_temperature owner: CombustionSynthesis domain_of: - CombustionSynthesis range: Temperature + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -2142,12 +2100,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:post_treatment + is_a: has_qualitative_attribute slot_uri: coremeta4cat:post_treatment owner: CombustionSynthesis domain_of: - CombustionSynthesis range: string + recommended: true multivalued: true + inlined_as_list: true substrate: name: substrate definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/substrate @@ -2155,12 +2116,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - VOC4CAT:0000024 + is_a: has_qualitative_attribute slot_uri: VOC4CAT:0000024 owner: AtomicLayerDeposition domain_of: - AtomicLayerDeposition range: string + recommended: true multivalued: true + inlined_as_list: true pulse_time: name: pulse_time definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/pulse_time @@ -2168,12 +2132,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:pulse_time + is_a: has_quantitative_attribute slot_uri: coremeta4cat:pulse_time owner: AtomicLayerDeposition domain_of: - AtomicLayerDeposition range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: s purging_duration: @@ -2183,12 +2150,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - VOC4CAT:0000112 + is_a: has_quantitative_attribute slot_uri: VOC4CAT:0000112 owner: AtomicLayerDeposition domain_of: - AtomicLayerDeposition range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: s power: @@ -2198,12 +2168,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:power + is_a: has_quantitative_attribute slot_uri: coremeta4cat:power owner: MicrowaveAssisted domain_of: - MicrowaveAssisted range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: W microwave_frequency: @@ -2213,12 +2186,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:microwave_frequency + is_a: has_quantitative_attribute slot_uri: coremeta4cat:microwave_frequency owner: MicrowaveAssisted domain_of: - MicrowaveAssisted range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: GHz sonication_power: @@ -2228,12 +2204,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:sonication_power + is_a: has_quantitative_attribute slot_uri: coremeta4cat:sonication_power owner: SonochemicalSynthesis domain_of: - SonochemicalSynthesis range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: W sonication_duration: @@ -2243,12 +2222,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:sonication_duration + is_a: has_quantitative_attribute slot_uri: coremeta4cat:sonication_duration owner: SonochemicalSynthesis domain_of: - SonochemicalSynthesis range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: min flame_type: @@ -2258,12 +2240,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:flame_type + is_a: has_qualitative_attribute slot_uri: coremeta4cat:flame_type owner: FlameSprayPyrolysis domain_of: - FlameSprayPyrolysis range: string + recommended: true multivalued: true + inlined_as_list: true inlet_system: name: inlet_system definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/inlet_system @@ -2271,12 +2256,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:inlet_system + is_a: has_qualitative_attribute slot_uri: coremeta4cat:inlet_system owner: FlameSprayPyrolysis domain_of: - FlameSprayPyrolysis range: string + recommended: true multivalued: true + inlined_as_list: true flame_ring: name: flame_ring definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/flame_ring @@ -2284,12 +2272,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:flame_ring + is_a: has_qualitative_attribute slot_uri: coremeta4cat:flame_ring owner: FlameSprayPyrolysis domain_of: - FlameSprayPyrolysis range: string + recommended: true multivalued: true + inlined_as_list: true capillary_pressure: name: capillary_pressure definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/capillary_pressure @@ -2297,12 +2288,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:capillary_pressure + is_a: has_quantitative_attribute slot_uri: coremeta4cat:capillary_pressure owner: FlameSprayPyrolysis domain_of: - FlameSprayPyrolysis range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: bar fuel_dispersant_ratio: @@ -2312,12 +2306,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:fuel_dispersant_ratio + is_a: has_quantitative_attribute slot_uri: coremeta4cat:fuel_dispersant_ratio owner: FlameSprayPyrolysis domain_of: - FlameSprayPyrolysis range: float + recommended: true multivalued: true + inlined_as_list: true vessel_volume: name: vessel_volume definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/vessel_volume @@ -2325,12 +2322,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:vessel_volume + is_a: has_quantitative_attribute slot_uri: coremeta4cat:vessel_volume owner: MechanochemicalSynthesis domain_of: - MechanochemicalSynthesis range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: mL size_and_material: @@ -2340,12 +2340,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:size_and_material + is_a: has_qualitative_attribute slot_uri: coremeta4cat:size_and_material owner: MechanochemicalSynthesis domain_of: - MechanochemicalSynthesis range: string + recommended: true multivalued: true + inlined_as_list: true milling_speed: name: milling_speed definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/milling_speed @@ -2353,12 +2356,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:milling_speed + is_a: has_quantitative_attribute slot_uri: coremeta4cat:milling_speed owner: MechanochemicalSynthesis domain_of: - MechanochemicalSynthesis range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: rpm milling_duration: @@ -2368,12 +2374,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:milling_duration + is_a: has_quantitative_attribute slot_uri: coremeta4cat:milling_duration owner: MechanochemicalSynthesis domain_of: - MechanochemicalSynthesis range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: h ball_material: @@ -2383,12 +2392,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:ball_material + is_a: has_qualitative_attribute slot_uri: coremeta4cat:ball_material owner: MechanochemicalSynthesis domain_of: - MechanochemicalSynthesis range: string + recommended: true multivalued: true + inlined_as_list: true ball_size: name: ball_size definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ball_size @@ -2396,12 +2408,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:ball_size + is_a: has_quantitative_attribute slot_uri: coremeta4cat:ball_size owner: MechanochemicalSynthesis domain_of: - MechanochemicalSynthesis range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: mm ball_to_powder_ratio: @@ -2411,12 +2426,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:ball_to_powder_ratio + is_a: has_quantitative_attribute slot_uri: coremeta4cat:ball_to_powder_ratio owner: MechanochemicalSynthesis domain_of: - MechanochemicalSynthesis range: float + recommended: true multivalued: true + inlined_as_list: true reaction_vessel: name: reaction_vessel definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/reaction_vessel @@ -2424,12 +2442,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:reaction_vessel + is_a: has_qualitative_attribute slot_uri: coremeta4cat:reaction_vessel owner: MolecularSynthesis domain_of: - MolecularSynthesis range: string + recommended: true multivalued: true + inlined_as_list: true mixing_device: name: mixing_device definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/mixing_device @@ -2437,12 +2458,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:mixing_device + is_a: has_qualitative_attribute slot_uri: coremeta4cat:mixing_device owner: MolecularSynthesis domain_of: - MolecularSynthesis range: string + recommended: true multivalued: true + inlined_as_list: true crystallisation_solvents: name: crystallisation_solvents definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/crystallisation_solvents @@ -2450,12 +2474,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:crystallisation_solvents + is_a: has_qualitative_attribute slot_uri: coremeta4cat:crystallisation_solvents owner: MolecularSynthesis domain_of: - MolecularSynthesis range: string + recommended: true multivalued: true + inlined_as_list: true precipitation_agent: name: precipitation_agent definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/precipitation_agent @@ -2463,12 +2490,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - VOC4CAT:0008203 + is_a: has_qualitative_attribute slot_uri: VOC4CAT:0008203 owner: MolecularSynthesis domain_of: - MolecularSynthesis range: string + recommended: true multivalued: true + inlined_as_list: true crystallisation_duration: name: crystallisation_duration definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/crystallisation_duration @@ -2476,12 +2506,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:crystallisation_duration + is_a: has_quantitative_attribute slot_uri: coremeta4cat:crystallisation_duration owner: MolecularSynthesis domain_of: - MolecularSynthesis range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: h purification_solvent: @@ -2491,12 +2524,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:purification_solvent + is_a: has_qualitative_attribute slot_uri: coremeta4cat:purification_solvent owner: MolecularSynthesis domain_of: - MolecularSynthesis range: string + recommended: true multivalued: true + inlined_as_list: true temperature_ramp: name: temperature_ramp definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/temperature_ramp @@ -2504,12 +2540,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - coremeta4cat:temperature_ramp + is_a: has_quantitative_attribute slot_uri: coremeta4cat:temperature_ramp owner: MolecularSynthesis domain_of: - MolecularSynthesis range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: Cel/min sample_state: @@ -2532,12 +2571,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:sample_description + is_a: has_qualitative_attribute slot_uri: coremeta4cat:sample_description owner: Characterization domain_of: - Characterization range: string + recommended: true multivalued: true + inlined_as_list: true sample_preparation: name: sample_preparation definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/sample_preparation @@ -2545,12 +2587,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - AFP:0001159 + is_a: has_qualitative_attribute slot_uri: AFP:0001159 owner: Characterization domain_of: - Characterization range: string + recommended: true multivalued: true + inlined_as_list: true detector_type: name: detector_type definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/detector_type @@ -2558,12 +2603,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - AFR:0000317 + is_a: has_qualitative_attribute slot_uri: AFR:0000317 owner: Characterization domain_of: - Characterization range: string + recommended: true multivalued: true + inlined_as_list: true xray_source: name: xray_source definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/xray_source @@ -2571,12 +2619,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - OBI:0001138 + is_a: has_qualitative_attribute slot_uri: OBI:0001138 owner: XRaySourceMixin domain_of: - XRaySourceMixin range: string + recommended: true multivalued: true + inlined_as_list: true monochromator: name: monochromator definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/monochromator @@ -2584,12 +2635,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - CHMO:0002120 + is_a: has_qualitative_attribute slot_uri: CHMO:0002120 owner: XRaySourceMixin domain_of: - XRaySourceMixin range: string + recommended: true multivalued: true + inlined_as_list: true has_energy_range: name: has_energy_range definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_energy_range @@ -2599,11 +2653,14 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:hasEnergyRange + is_a: has_quantitative_attribute slot_uri: coremeta4cat:hasEnergyRange owner: EnergyRangeMixin domain_of: - EnergyRangeMixin range: QuantitativeRange + recommended: true + multivalued: true inlined: true inlined_as_list: true gun_type: @@ -2613,12 +2670,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:gun_type + is_a: has_qualitative_attribute slot_uri: coremeta4cat:gun_type owner: ElectronMicroscopyMixin domain_of: - ElectronMicroscopyMixin range: string + recommended: true multivalued: true + inlined_as_list: true acceleration_voltage: name: acceleration_voltage definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/acceleration_voltage @@ -2626,11 +2686,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:acceleration_voltage + is_a: has_electric_potential slot_uri: coremeta4cat:acceleration_voltage owner: ElectronMicroscopyMixin domain_of: - ElectronMicroscopyMixin range: ElectricPotential + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -2641,13 +2703,16 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - AFR:0002226 + is_a: has_quantitative_attribute slot_uri: AFR:0002226 owner: RamanSpectroscopy domain_of: - ElectronMicroscopyMixin - RamanSpectroscopy range: float + recommended: true multivalued: true + inlined_as_list: true has_temperature_range: name: has_temperature_range definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_temperature_range @@ -2657,11 +2722,14 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:hasTemperatureRange + is_a: has_quantitative_attribute slot_uri: coremeta4cat:hasTemperatureRange owner: TemperatureProgramMixin domain_of: - TemperatureProgramMixin range: QuantitativeRange + recommended: true + multivalued: true inlined: true inlined_as_list: true initial_temperature: @@ -2671,11 +2739,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - NCIT:C164644 + is_a: has_temperature slot_uri: NCIT:C164644 owner: Thermogravimetry domain_of: - Thermogravimetry range: Temperature + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -2686,11 +2756,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - NCIT:C164644 + is_a: has_temperature slot_uri: NCIT:C164644 owner: Thermogravimetry domain_of: - Thermogravimetry range: Temperature + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -2704,11 +2776,14 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:hasMzRange + is_a: has_quantitative_attribute slot_uri: coremeta4cat:hasMzRange owner: MassRangeMixin domain_of: - MassRangeMixin range: QuantitativeRange + recommended: true + multivalued: true inlined: true inlined_as_list: true excitation_wavelength: @@ -2718,11 +2793,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - AFR:0002479 + is_a: has_length slot_uri: AFR:0002479 owner: PhotoluminescenceMixin domain_of: - PhotoluminescenceMixin range: LengthQuantity + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -2733,11 +2810,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - NCIT:C204101 + is_a: has_length slot_uri: NCIT:C204101 owner: PhotoluminescenceMixin domain_of: - PhotoluminescenceMixin range: LengthQuantity + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -2748,12 +2827,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:optical_filter + is_a: has_qualitative_attribute slot_uri: coremeta4cat:optical_filter owner: PhotoluminescenceMixin domain_of: - PhotoluminescenceMixin range: string + recommended: true multivalued: true + inlined_as_list: true reference_electrode: name: reference_electrode definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/reference_electrode @@ -2761,12 +2843,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - VOC4CAT:0007204 + is_a: has_qualitative_attribute slot_uri: VOC4CAT:0007204 owner: ElectrochemistryMixin domain_of: - ElectrochemistryMixin range: string + recommended: true multivalued: true + inlined_as_list: true working_electrode: name: working_electrode definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/working_electrode @@ -2774,12 +2859,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - VOC4CAT:0007202 + is_a: has_qualitative_attribute slot_uri: VOC4CAT:0007202 owner: ElectrochemistryMixin domain_of: - ElectrochemistryMixin range: string + recommended: true multivalued: true + inlined_as_list: true counter_electrode: name: counter_electrode definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/counter_electrode @@ -2787,12 +2875,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - VOC4CAT:0007203 + is_a: has_qualitative_attribute slot_uri: VOC4CAT:0007203 owner: ElectrochemistryMixin domain_of: - ElectrochemistryMixin range: string + recommended: true multivalued: true + inlined_as_list: true electrolyte_composition: name: electrolyte_composition definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/electrolyte_composition @@ -2800,12 +2891,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:electrolyte_composition + is_a: has_qualitative_attribute slot_uri: coremeta4cat:electrolyte_composition owner: ElectrochemistryMixin domain_of: - ElectrochemistryMixin range: string + recommended: true multivalued: true + inlined_as_list: true electrolyte_concentration: name: electrolyte_concentration definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/electrolyte_concentration @@ -2813,11 +2907,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:electrolyte_concentration + is_a: has_concentration slot_uri: coremeta4cat:electrolyte_concentration owner: ElectrochemistryMixin domain_of: - ElectrochemistryMixin range: Concentration + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -2831,11 +2927,14 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:hasTwoThetaRange + is_a: has_quantitative_attribute slot_uri: coremeta4cat:hasTwoThetaRange owner: PowderXRD domain_of: - PowderXRD range: QuantitativeRange + recommended: true + multivalued: true inlined: true inlined_as_list: true sample_spinning_speed: @@ -2845,11 +2944,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:sample_spinning_speed + is_a: has_angular_velocity slot_uri: coremeta4cat:sample_spinning_speed owner: PowderXRD domain_of: - PowderXRD range: AngularVelocity + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -2860,12 +2961,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:absorption_edge + is_a: has_qualitative_attribute slot_uri: coremeta4cat:absorption_edge owner: XRayAbsorptionSpectroscopy domain_of: - XRayAbsorptionSpectroscopy range: string + recommended: true multivalued: true + inlined_as_list: true element_analyzed: name: element_analyzed definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/element_analyzed @@ -2873,13 +2977,16 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:element_analyzed + is_a: has_qualitative_attribute slot_uri: coremeta4cat:element_analyzed owner: ICPAES domain_of: - XRayAbsorptionSpectroscopy - ICPAES range: string + recommended: true multivalued: true + inlined_as_list: true beamline_source: name: beamline_source definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/beamline_source @@ -2887,12 +2994,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:beamline_source + is_a: has_qualitative_attribute slot_uri: coremeta4cat:beamline_source owner: XRayAbsorptionSpectroscopy domain_of: - XRayAbsorptionSpectroscopy range: string + recommended: true multivalued: true + inlined_as_list: true noise_of_measurement: name: noise_of_measurement definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/noise_of_measurement @@ -2900,12 +3010,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:noise_of_measurement + is_a: has_quantitative_attribute slot_uri: coremeta4cat:noise_of_measurement owner: XRayAbsorptionSpectroscopy domain_of: - XRayAbsorptionSpectroscopy range: float + recommended: true multivalued: true + inlined_as_list: true energy_resolution: name: energy_resolution definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/energy_resolution @@ -2913,11 +3026,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - AFR:0000950 + is_a: has_energy slot_uri: AFR:0000950 owner: XRayAbsorptionSpectroscopy domain_of: - XRayAbsorptionSpectroscopy range: EnergyQuantity + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -2928,6 +3043,7 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:total_acquisition_time + is_a: has_duration slot_uri: coremeta4cat:total_acquisition_time owner: XPS domain_of: @@ -2943,11 +3059,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:pass_energy + is_a: has_energy slot_uri: coremeta4cat:pass_energy owner: XPS domain_of: - XPS range: EnergyQuantity + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -2958,11 +3076,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:spot_size + is_a: has_length slot_uri: coremeta4cat:spot_size owner: XPS domain_of: - XPS range: LengthQuantity + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -2971,14 +3091,15 @@ slots: definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/lense_mode description: Electron lens mode setting in XPS analyser. from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ - mappings: - - VOC4CAT:0000108 - slot_uri: VOC4CAT:0000108 + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:lense_mode owner: XPS domain_of: - XPS range: string + recommended: true multivalued: true + inlined_as_list: true charge_compensation: name: charge_compensation definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/charge_compensation @@ -2986,12 +3107,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:charge_compensation + is_a: has_qualitative_attribute slot_uri: coremeta4cat:charge_compensation owner: XPS domain_of: - XPS range: string + recommended: true multivalued: true + inlined_as_list: true primary_energy: name: primary_energy definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/primary_energy @@ -2999,11 +3123,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:primary_energy + is_a: has_energy slot_uri: coremeta4cat:primary_energy owner: EDX domain_of: - EDX range: EnergyQuantity + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -3014,6 +3140,7 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:counting_time + is_a: has_duration slot_uri: coremeta4cat:counting_time owner: EDX domain_of: @@ -3031,12 +3158,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:hasWavenumberRange + is_a: has_quantitative_attribute slot_uri: coremeta4cat:hasWavenumberRange owner: DRIFTS domain_of: - InfraredSpectroscopy - DRIFTS range: QuantitativeRange + recommended: true + multivalued: true inlined: true inlined_as_list: true background_correction: @@ -3046,12 +3176,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - AFP:0003721 + is_a: has_qualitative_attribute slot_uri: AFP:0003721 owner: InfraredSpectroscopy domain_of: - InfraredSpectroscopy range: string + recommended: true multivalued: true + inlined_as_list: true adsorption_gas: name: adsorption_gas definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/adsorption_gas @@ -3059,11 +3192,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:adsorption_gas + is_a: had_input_entity slot_uri: coremeta4cat:adsorption_gas owner: DRIFTS domain_of: - DRIFTS range: ChemicalEntity + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -3074,12 +3209,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:diluting_reference + is_a: has_qualitative_attribute slot_uri: coremeta4cat:diluting_reference owner: DRIFTS domain_of: - DRIFTS range: string + recommended: true multivalued: true + inlined_as_list: true ratio_reference_sample: name: ratio_reference_sample definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ratio_reference_sample @@ -3087,12 +3225,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:ratio_reference_sample + is_a: has_quantitative_attribute slot_uri: coremeta4cat:ratio_reference_sample owner: DRIFTS domain_of: - DRIFTS range: float + recommended: true multivalued: true + inlined_as_list: true background_correction_method: name: background_correction_method definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/background_correction_method @@ -3100,12 +3241,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:background_correction_method + is_a: has_qualitative_attribute slot_uri: coremeta4cat:background_correction_method owner: DRIFTS domain_of: - DRIFTS range: string + recommended: true multivalued: true + inlined_as_list: true excitation_laser_wavelength: name: excitation_laser_wavelength definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/excitation_laser_wavelength @@ -3113,11 +3257,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - AFR:0001594 + is_a: has_length slot_uri: AFR:0001594 owner: RamanSpectroscopy domain_of: - RamanSpectroscopy range: LengthQuantity + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -3128,11 +3274,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - AFR:0001595 + is_a: has_power slot_uri: AFR:0001595 owner: RamanSpectroscopy domain_of: - RamanSpectroscopy range: PowerQuantity + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -3143,12 +3291,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:filter_or_grating + is_a: has_qualitative_attribute slot_uri: coremeta4cat:filter_or_grating owner: RamanSpectroscopy domain_of: - RamanSpectroscopy range: string + recommended: true multivalued: true + inlined_as_list: true nucleus: name: nucleus definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/nucleus @@ -3156,12 +3307,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:nucleus + is_a: has_qualitative_attribute slot_uri: coremeta4cat:nucleus owner: NMRSpectroscopy domain_of: - NMRSpectroscopy range: string + recommended: true multivalued: true + inlined_as_list: true irradiation_frequency: name: irradiation_frequency definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/irradiation_frequency @@ -3169,12 +3323,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:irradiation_frequency + is_a: has_quantitative_attribute slot_uri: coremeta4cat:irradiation_frequency owner: NMRSpectroscopy domain_of: - NMRSpectroscopy range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: MHz nmr_pulse_sequence: @@ -3184,12 +3341,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:nmr_pulse_sequence + is_a: has_qualitative_attribute slot_uri: coremeta4cat:nmr_pulse_sequence owner: NMRSpectroscopy domain_of: - NMRSpectroscopy range: string + recommended: true multivalued: true + inlined_as_list: true nmr_sample_tube: name: nmr_sample_tube definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/nmr_sample_tube @@ -3197,12 +3357,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:nmr_sample_tube + is_a: has_qualitative_attribute slot_uri: coremeta4cat:nmr_sample_tube owner: NMRSpectroscopy domain_of: - NMRSpectroscopy range: string + recommended: true multivalued: true + inlined_as_list: true image_resolution: name: image_resolution definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/image_resolution @@ -3210,12 +3373,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:image_resolution + is_a: has_quantitative_attribute slot_uri: coremeta4cat:image_resolution owner: ScanningElectronMicroscopy domain_of: - ScanningElectronMicroscopy range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: nm field_emitter: @@ -3225,12 +3391,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:field_emitter + is_a: has_qualitative_attribute slot_uri: coremeta4cat:field_emitter owner: ScanningElectronMicroscopy domain_of: - ScanningElectronMicroscopy range: string + recommended: true multivalued: true + inlined_as_list: true reducing_gas_composition: name: reducing_gas_composition definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/reducing_gas_composition @@ -3238,12 +3407,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:reducing_gas_composition + is_a: has_qualitative_attribute slot_uri: coremeta4cat:reducing_gas_composition owner: TPR domain_of: - TPR range: string + recommended: true multivalued: true + inlined_as_list: true oxidizing_gas_composition: name: oxidizing_gas_composition definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/oxidizing_gas_composition @@ -3251,12 +3423,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:oxidizing_gas_composition + is_a: has_qualitative_attribute slot_uri: coremeta4cat:oxidizing_gas_composition owner: TPO domain_of: - TPO range: string + recommended: true multivalued: true + inlined_as_list: true adsorbate_gas: name: adsorbate_gas definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/adsorbate_gas @@ -3264,12 +3439,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:adsorbate_gas + is_a: has_qualitative_attribute slot_uri: coremeta4cat:adsorbate_gas owner: BET domain_of: - BET range: string + recommended: true multivalued: true + inlined_as_list: true degassing_temperature: name: degassing_temperature definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/degassing_temperature @@ -3277,11 +3455,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:degassing_temperature + is_a: has_temperature slot_uri: coremeta4cat:degassing_temperature owner: BET domain_of: - BET range: Temperature + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -3293,11 +3473,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:measurement_temperature + is_a: has_temperature slot_uri: coremeta4cat:measurement_temperature owner: BET domain_of: - BET range: Temperature + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -3309,12 +3491,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:pore_size_distribution_method + is_a: has_qualitative_attribute slot_uri: coremeta4cat:pore_size_distribution_method owner: BET domain_of: - BET range: string + recommended: true multivalued: true + inlined_as_list: true elements_analyzed: name: elements_analyzed definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/elements_analyzed @@ -3323,12 +3508,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:elements_analyzed + is_a: has_qualitative_attribute slot_uri: coremeta4cat:elements_analyzed owner: ElementalAnalysis domain_of: - ElementalAnalysis range: string + recommended: true multivalued: true + inlined_as_list: true combustion_temperature: name: combustion_temperature definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/combustion_temperature @@ -3336,11 +3524,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:combustion_temperature + is_a: has_temperature slot_uri: coremeta4cat:combustion_temperature owner: ElementalAnalysis domain_of: - ElementalAnalysis range: Temperature + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -3351,12 +3541,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - NCIT:C105701 + is_a: has_quantitative_attribute slot_uri: NCIT:C105701 owner: ICPAES domain_of: - ICPAES range: float + recommended: true multivalued: true + inlined_as_list: true matrix_effect_correction: name: matrix_effect_correction definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/matrix_effect_correction @@ -3364,42 +3557,34 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:matrix_effect_correction + is_a: has_qualitative_attribute slot_uri: coremeta4cat:matrix_effect_correction owner: ICPAES domain_of: - ICPAES range: string + recommended: true multivalued: true - minimum_wavelength: - name: minimum_wavelength - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/minimum_wavelength - description: Minimum wavelength of the UV-Vis scan range. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ - mappings: - - coremeta4cat:minimum_wavelength - slot_uri: coremeta4cat:minimum_wavelength - owner: UVVisSpectroscopy - domain_of: - - UVVisSpectroscopy - range: float - multivalued: true - unit: - ucum_code: nm - maximum_wavelength: - name: maximum_wavelength - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/maximum_wavelength - description: Maximum wavelength of the UV-Vis scan range. + inlined_as_list: true + wavelength_range: + name: wavelength_range + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/wavelength_range + description: 'Wavelength range of the UV-Vis scan, provided as a QuantitativeRange + + with min_value and max_value (unit_code: "nm").' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - coremeta4cat:maximum_wavelength - slot_uri: coremeta4cat:maximum_wavelength + - coremeta4cat:wavelength_range + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:wavelength_range owner: UVVisSpectroscopy domain_of: - UVVisSpectroscopy - range: float + range: QuantitativeRange + recommended: true multivalued: true - unit: - ucum_code: nm + inlined: true + inlined_as_list: true path_length: name: path_length definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/path_length @@ -3407,12 +3592,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - AFQ:0000268 + is_a: has_quantitative_attribute slot_uri: AFQ:0000268 owner: UVVisSpectroscopy domain_of: - UVVisSpectroscopy range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: cm emission_range: @@ -3422,12 +3610,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:emission_range + is_a: has_qualitative_attribute slot_uri: coremeta4cat:emission_range owner: PhotoluminescenceSpectroscopy domain_of: - PhotoluminescenceSpectroscopy range: string + recommended: true multivalued: true + inlined_as_list: true slit_width: name: slit_width definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/slit_width @@ -3435,12 +3626,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:slit_width + is_a: has_quantitative_attribute slot_uri: coremeta4cat:slit_width owner: PhotoluminescenceSpectroscopy domain_of: - PhotoluminescenceSpectroscopy range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: nm lifetime_fitting_model: @@ -3451,12 +3645,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:lifetime_fitting_model + is_a: has_qualitative_attribute slot_uri: coremeta4cat:lifetime_fitting_model owner: PhotoluminescenceLifetime domain_of: - PhotoluminescenceLifetime range: string + recommended: true multivalued: true + inlined_as_list: true number_of_shots: name: number_of_shots definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/number_of_shots @@ -3464,12 +3661,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:number_of_shots + is_a: has_quantitative_attribute slot_uri: coremeta4cat:number_of_shots owner: PhotoluminescenceLifetime domain_of: - PhotoluminescenceLifetime range: integer + recommended: true multivalued: true + inlined_as_list: true scan_rate: name: scan_rate definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/scan_rate @@ -3477,44 +3677,36 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - VOC4CAT:0007213 + is_a: has_quantitative_attribute slot_uri: VOC4CAT:0007213 owner: CyclicVoltammetry domain_of: - CyclicVoltammetry range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: mV/s - minimum_potential: - name: minimum_potential - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/minimum_potential - description: Lower potential limit in cyclic voltammetry. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ - mappings: - - coremeta4cat:minimum_potential - slot_uri: coremeta4cat:minimum_potential - owner: CyclicVoltammetry - domain_of: - - CyclicVoltammetry - range: float - multivalued: true - unit: - ucum_code: V - maximum_potential: - name: maximum_potential - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/maximum_potential - description: Upper potential limit in cyclic voltammetry. + scan_potential_range: + name: scan_potential_range + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/scan_potential_range + description: 'Potential window scanned in cyclic voltammetry, provided as a + + QuantitativeRange with min_value and max_value (unit_code: "V").' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - coremeta4cat:maximum_potential - slot_uri: coremeta4cat:maximum_potential + - coremeta4cat:scan_potential_range + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:scan_potential_range owner: CyclicVoltammetry domain_of: - CyclicVoltammetry - range: float + range: QuantitativeRange + recommended: true multivalued: true - unit: - ucum_code: V + inlined: true + inlined_as_list: true step_size_potential: name: step_size_potential definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/step_size_potential @@ -3522,12 +3714,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - VOC4CAT:0007218 + is_a: has_quantitative_attribute slot_uri: VOC4CAT:0007218 owner: CyclicVoltammetry domain_of: - CyclicVoltammetry range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: mV electrode_configuration: @@ -3538,12 +3733,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:electrode_configuration + is_a: has_qualitative_attribute slot_uri: coremeta4cat:electrode_configuration owner: ConductivityMeasurement domain_of: - ConductivityMeasurement range: string + recommended: true multivalued: true + inlined_as_list: true ac_frequency: name: ac_frequency definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ac_frequency @@ -3551,12 +3749,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - VOC4CAT:0007239 + is_a: has_quantitative_attribute slot_uri: VOC4CAT:0007239 owner: ConductivityMeasurement domain_of: - ConductivityMeasurement range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: Hz ac_dc_mode: @@ -3566,12 +3767,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:ac_dc_mode + is_a: has_qualitative_attribute slot_uri: coremeta4cat:ac_dc_mode owner: ConductivityMeasurement domain_of: - ConductivityMeasurement range: string + recommended: true multivalued: true + inlined_as_list: true sample_geometry: name: sample_geometry definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/sample_geometry @@ -3580,12 +3784,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:sample_geometry + is_a: has_qualitative_attribute slot_uri: coremeta4cat:sample_geometry owner: ConductivityMeasurement domain_of: - ConductivityMeasurement range: string + recommended: true multivalued: true + inlined_as_list: true light_wavelength: name: light_wavelength definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/light_wavelength @@ -3593,11 +3800,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - VOC4CAT:0000176 + is_a: has_length slot_uri: VOC4CAT:0000176 owner: DynamicLightScattering domain_of: - DynamicLightScattering range: LengthQuantity + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -3608,11 +3817,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:scattering_angle + is_a: has_plane_angle slot_uri: coremeta4cat:scattering_angle owner: DynamicLightScattering domain_of: - DynamicLightScattering range: PlaneAngle + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -3623,12 +3834,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:refractive_index + is_a: has_quantitative_attribute slot_uri: coremeta4cat:refractive_index owner: DynamicLightScattering domain_of: - DynamicLightScattering range: float + recommended: true multivalued: true + inlined_as_list: true measurement_duration: name: measurement_duration definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/measurement_duration @@ -3636,6 +3850,7 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:measurement_duration + is_a: has_duration slot_uri: coremeta4cat:measurement_duration owner: DynamicLightScattering domain_of: @@ -3651,11 +3866,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - CHMO:0002792 + is_a: has_electric_potential slot_uri: CHMO:0002792 owner: ElectroSprayIonizationMassSpectrometry domain_of: - ElectroSprayIonizationMassSpectrometry range: ElectricPotential + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -3666,11 +3883,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:capillary_temperature + is_a: has_temperature slot_uri: coremeta4cat:capillary_temperature owner: ElectroSprayIonizationMassSpectrometry domain_of: - ElectroSprayIonizationMassSpectrometry range: Temperature + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -3681,12 +3900,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - VOC4CAT:0007246 + is_a: has_qualitative_attribute slot_uri: VOC4CAT:0007246 owner: ElectroSprayIonizationMassSpectrometry domain_of: - ElectroSprayIonizationMassSpectrometry range: string + recommended: true multivalued: true + inlined_as_list: true carrier_gas_purity: name: carrier_gas_purity definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/carrier_gas_purity @@ -3694,12 +3916,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:carrier_gas_purity + is_a: has_qualitative_attribute slot_uri: coremeta4cat:carrier_gas_purity owner: GCMS domain_of: - GCMS range: string + recommended: true multivalued: true + inlined_as_list: true inlet_temperature: name: inlet_temperature definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/inlet_temperature @@ -3707,41 +3932,33 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:inlet_temperature + is_a: has_temperature slot_uri: coremeta4cat:inlet_temperature owner: GCMS domain_of: - GCMS range: Temperature + recommended: true multivalued: true inlined: true inlined_as_list: true - minimum_oven_temperature: - name: minimum_oven_temperature - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/minimum_oven_temperature - description: Minimum oven temperature in GC temperature programme. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ - mappings: - - coremeta4cat:minimum_oven_temperature - slot_uri: coremeta4cat:minimum_oven_temperature - owner: GCMS - domain_of: - - GCMS - range: Temperature - multivalued: true - inlined: true - inlined_as_list: true - maximum_oven_temperature: - name: maximum_oven_temperature - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/maximum_oven_temperature - description: Maximum oven temperature in GC temperature programme. + oven_temperature_range: + name: oven_temperature_range + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/oven_temperature_range + description: 'Oven temperature range in the GC temperature programme, provided + as a + + QuantitativeRange with min_value and max_value (unit_code: "Cel").' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - coremeta4cat:maximum_oven_temperature - slot_uri: coremeta4cat:maximum_oven_temperature + - coremeta4cat:oven_temperature_range + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:oven_temperature_range owner: GCMS domain_of: - GCMS - range: Temperature + range: QuantitativeRange + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -3752,11 +3969,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - VOC4CAT:0008116 + is_a: has_heating_rate slot_uri: VOC4CAT:0008116 owner: GCMS domain_of: - GCMS range: HeatingRate + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -3767,12 +3986,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:acquisition_mode + is_a: has_qualitative_attribute slot_uri: coremeta4cat:acquisition_mode owner: GCMS domain_of: - GCMS range: string + recommended: true multivalued: true + inlined_as_list: true solvent_delay: name: solvent_delay definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/solvent_delay @@ -3780,12 +4002,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:solvent_delay + is_a: has_quantitative_attribute slot_uri: coremeta4cat:solvent_delay owner: GCMS domain_of: - GCMS range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: min trace_ion_detection: @@ -3795,12 +4020,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:trace_ion_detection + is_a: has_qualitative_attribute slot_uri: coremeta4cat:trace_ion_detection owner: GCMS domain_of: - GCMS range: string + recommended: true multivalued: true + inlined_as_list: true split_ratio: name: split_ratio definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/split_ratio @@ -3808,12 +4036,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:split_ratio + is_a: has_quantitative_attribute slot_uri: coremeta4cat:split_ratio owner: GCMS domain_of: - GCMS range: float + recommended: true multivalued: true + inlined_as_list: true eluent: name: eluent definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/eluent @@ -3821,11 +4052,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - AFRL:0000011 + is_a: carried_out_by slot_uri: AFRL:0000011 owner: ChromatographyMixin domain_of: - ChromatographyMixin range: ChemicalEntity + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -3837,12 +4070,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:calibration_standard + is_a: has_qualitative_attribute slot_uri: coremeta4cat:calibration_standard owner: SizeExclusionChromatography domain_of: - SizeExclusionChromatography range: string + recommended: true multivalued: true + inlined_as_list: true gradient_program: name: gradient_program definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/gradient_program @@ -3850,12 +4086,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:gradient_program + is_a: has_qualitative_attribute slot_uri: coremeta4cat:gradient_program owner: HighPerformanceLiquidChromatographyMassSpectrometry domain_of: - HighPerformanceLiquidChromatographyMassSpectrometry range: string + recommended: true multivalued: true + inlined_as_list: true ionization_mode: name: ionization_mode definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ionization_mode @@ -3863,12 +4102,15 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - coremeta4cat:ionization_mode + is_a: has_qualitative_attribute slot_uri: coremeta4cat:ionization_mode owner: HighPerformanceLiquidChromatographyMassSpectrometry domain_of: - HighPerformanceLiquidChromatographyMassSpectrometry range: string + recommended: true multivalued: true + inlined_as_list: true catalyst_quantity: name: catalyst_quantity definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/catalyst_quantity @@ -3876,69 +4118,99 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - coremeta4cat:catalyst_quantity + is_a: has_mass slot_uri: coremeta4cat:catalyst_quantity owner: CatalyticReaction domain_of: - CatalyticReaction range: Mass - required: true + recommended: true multivalued: true inlined: true inlined_as_list: true - reactant: - name: reactant - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/reactant - description: 'Reactant(s) or feed chemicals used in the reaction. Provide a ChemicalEntity + catalyst_type: + name: catalyst_type + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/catalyst_type + description: 'The catalytic regime of the reaction (e.g. heterogeneous, homogeneous, + + biocatalysis, electrocatalysis, photocatalysis). For the physical + + form/presentation of the catalyst itself, use catalyst_form instead. + + + Deliberately kept `recommended` rather than `required` (see nfdi4cat/ + + CoreMeta4Cat#117): classification here can be genuinely disputed or + + not yet covered by CatalysisResearchFieldEnum for a novel catalyst, + + and forcing a value would push researchers into a premature or + + contested classification rather than leaving the field unset until + + consensus/vocabulary catches up. Open for discussion in a follow-up - instance with inchikey, smiles, or iupac_name. For feed mixtures, list each + issue if a different tradeoff is wanted. See also nfdi4cat/ - component as a separate ChemicalEntity and record composition via has_concentration.' + CoreMeta4Cat#116 on whether this two-slot design (catalyst_type + + + catalyst_form) or PR #118''s CatalystType class hierarchy should be + + the long-term mechanism -- kept as two enums here because the + + VOC4CAT terms show CatalystType conflates the regime axis + + (Heterogeneous/Homogeneous/Bio/Electro/Photo) with the physical-form + + axis (ThinFilm/Bulk/Powdered/DepositedSample/Supported -- identical + + VOC4CAT ids to catalyst_form''s permissible values), which are + + independent and often both apply to the same catalyst at once.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - VOC4CAT:0000101 - slot_uri: VOC4CAT:0000101 + - VOC4CAT:0007014 + slot_uri: VOC4CAT:0007014 owner: CatalyticReaction domain_of: - CatalyticReaction - range: ChemicalEntity - required: true + range: CatalysisResearchFieldEnum + recommended: true multivalued: true - inlined: true - inlined_as_list: true - has_catalyst_type: - name: has_catalyst_type - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_catalyst_type - description: 'Type of catalyst used (e.g. heterogeneous, homogeneous, biocatalyst). + catalyst_form: + name: catalyst_form + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/catalyst_form + description: 'The physical form or presentation of the catalyst as loaded into + the - For heterogeneous catalysts, use voc4cat terms where available.' + reactor (e.g. thin film, bulk, powder, supported). A separate axis + + from catalyst_type (the catalytic regime).' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ - mappings: - - VOC4CAT:0007014 - slot_uri: VOC4CAT:0007014 + slot_uri: coremeta4cat:catalyst_form owner: CatalyticReaction domain_of: - CatalyticReaction - range: CatalystType + range: CatalystFormEnum recommended: true multivalued: true - inlined: true - inlined_as_list: true - has_reaction_type: - name: has_reaction_type - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_reaction_type - description: A group of chemical reactions with common conditions or reactants, - e.g. Oxidation, Hydrogenation, Reduction, Cracking. + reaction_name: + name: reaction_name + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/reaction_name + description: 'A name for the catalytic reaction which assigns the reactants and + + (desired) products (e.g. "ammonia synthesis", "Fischer-Tropsch synthesis").' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - VOC4CAT:0007010 - slot_uri: VOC4CAT:0007010 + - VOC4CAT:0007009 + is_a: has_qualitative_attribute + slot_uri: VOC4CAT:0007009 owner: CatalyticReaction domain_of: - CatalyticReaction - range: ReactionType + range: string recommended: true multivalued: true - inlined: true inlined_as_list: true reactor_temperature_range: name: reactor_temperature_range @@ -3952,11 +4224,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - VOC4CAT:0007032 + is_a: has_quantitative_attribute slot_uri: VOC4CAT:0007032 owner: CatalyticReaction domain_of: - CatalyticReaction range: QuantitativeRange + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -3967,11 +4241,13 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - VOC4CAT:0000118 + is_a: has_pressure slot_uri: VOC4CAT:0000118 owner: CatalyticReaction domain_of: - CatalyticReaction range: Pressure + recommended: true multivalued: true inlined: true inlined_as_list: true @@ -3986,4085 +4262,4306 @@ slots: from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - coremeta4cat:feed_composition_range + is_a: has_quantitative_attribute slot_uri: coremeta4cat:feed_composition_range owner: CatalyticReaction domain_of: - CatalyticReaction range: QuantitativeRange + recommended: true multivalued: true inlined: true inlined_as_list: true - gas_distributor_type: - name: gas_distributor_type - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/gas_distributor_type - description: Type or design of the gas distributor plate in a fluidized bed reactor. + has_cathode: + name: has_cathode + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_cathode + description: 'The electrode where reduction occurs in an electrochemical cell. + It is + + the negative electrode in an electrolytic cell, while it is the + + positive electrode in a galvanic cell.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:gas_distributor_type - slot_uri: coremeta4cat:gas_distributor_type - owner: FluidizedBedReactor + - VOC4CAT:0007254 + is_a: has_qualitative_attribute + slot_uri: VOC4CAT:0007254 + owner: ElectrochemicalReactor domain_of: - - FluidizedBedReactor + - ElectrochemicalReactor range: string + recommended: true multivalued: true - bed_expansion_height: - name: bed_expansion_height - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/bed_expansion_height - description: Height of bed expansion above the settled bed height under operating - conditions. + inlined_as_list: true + has_anode: + name: has_anode + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_anode + description: 'The electrode where oxidation occurs in an electrochemical cell. + It is + + the positive electrode in an electrolytic cell, while it is the + + negative electrode in a galvanic cell.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:bed_expansion_height - slot_uri: coremeta4cat:bed_expansion_height - owner: FluidizedBedReactor + - VOC4CAT:0007255 + is_a: has_qualitative_attribute + slot_uri: VOC4CAT:0007255 + owner: ElectrochemicalReactor domain_of: - - FluidizedBedReactor - range: float + - ElectrochemicalReactor + range: string + recommended: true multivalued: true - unit: - ucum_code: cm - bubble_size_distribution: - name: bubble_size_distribution - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/bubble_size_distribution - description: Description or characterization of bubble size distribution in the - fluidized bed. + inlined_as_list: true + cell_operating_mode: + name: cell_operating_mode + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/cell_operating_mode + description: 'The functional mode of an electrochemical cell based on the direction + + of energy conversion.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:bubble_size_distribution - slot_uri: coremeta4cat:bubble_size_distribution - owner: FluidizedBedReactor + - coremeta4cat:cell_operating_mode + slot_uri: coremeta4cat:cell_operating_mode + owner: ElectrochemicalReactor domain_of: - - FluidizedBedReactor - range: string - product_identification_method: - name: product_identification_method - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/product_identification_method - description: 'The analytical method used to identify and/or quantify reaction - products. - - Should reference a CharacterizationTechnique instance (e.g. GCMS, HPLC_MS). + - ElectrochemicalReactor + range: CellOperatingModeEnum + recommended: true + has_active_area: + name: has_active_area + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/has_active_area + description: 'In contrast to substrate area, the actual area of a sample or - The abstract stub ProductIdentificationMethod is retained for backward compatibility.' + electrode which is active.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:product_identification_method - slot_uri: coremeta4cat:product_identification_method - owner: CatalyticReaction + - VOC4CAT:0007258 + is_a: has_quantitative_attribute + slot_uri: VOC4CAT:0007258 + owner: ElectrochemicalReactor domain_of: - - CatalyticReaction - range: ProductIdentificationMethod - required: true + - ElectrochemicalReactor + range: Area + recommended: true multivalued: true inlined: true inlined_as_list: true - software_package: - name: software_package - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/software_package - description: 'Software package or code used for the simulation (e.g. VASP, Quantum - ESPRESSO, + faradaic_current: + name: faradaic_current + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/faradaic_current + description: 'The current that is flowing through an electrochemical cell and + is - LAMMPS, CP2K, ORCA, Zacros). Include version number where possible.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + causing (or is caused by) chemical reactions.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:software_package - slot_uri: coremeta4cat:software_package - owner: Simulation + - VOC4CAT:0007259 + is_a: has_quantitative_attribute + slot_uri: VOC4CAT:0007259 + owner: ElectrochemicalReactor domain_of: - - Simulation - range: string - required: true + - ElectrochemicalReactor + range: ElectricCurrent + recommended: true multivalued: true - calculated_property: - name: calculated_property - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/calculated_property - description: 'A property computed by this Simulation, provided as a CalculatedProperty + inlined: true + inlined_as_list: true + stirring_rate: + name: stirring_rate + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/stirring_rate + description: 'The rate at which the stirrer rotates, typically expressed in - instance. Multiple properties may be computed in a single simulation run.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + revolutions per unit time (e.g. revolutions per minute).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:calculated_property - slot_uri: coremeta4cat:calculated_property - owner: Simulation + - VOC4CAT:0008114 + is_a: has_angular_velocity + slot_uri: VOC4CAT:0008114 + owner: CSTR domain_of: - - Simulation - range: CalculatedProperty - required: true + - CSTR + range: AngularVelocity + recommended: true multivalued: true inlined: true inlined_as_list: true - exchange_correlation_functional: - name: exchange_correlation_functional - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/exchange_correlation_functional - description: 'Exchange-correlation functional used (e.g. PBE, PBEsol, RPBE, B3LYP, + residence_time: + name: residence_time + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/residence_time + description: 'The average time a unit of fluid spends inside the reactor before - HSE06). The choice of functional directly affects accuracy.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + exiting.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + is_a: has_duration + slot_uri: coremeta4cat:residence_time + owner: CSTR + domain_of: + - CSTR + range: Duration + recommended: true + inlined: true + inlined_as_list: true + reactor_working_volume: + name: reactor_working_volume + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/reactor_working_volume + description: 'Volume of the reaction chamber, calculated by its dimensions. Volume + + of pipes and valves connected to the reactor is not included.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:exchange_correlation_functional - slot_uri: coremeta4cat:exchange_correlation_functional - owner: DFT + - VOC4CAT:0000153 + is_a: has_volume + slot_uri: VOC4CAT:0000153 + owner: CSTR domain_of: - - DFT - range: string + - CSTR + range: Volume + recommended: true multivalued: true - energy_cutoff: - name: energy_cutoff - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/energy_cutoff - description: Plane-wave kinetic energy cutoff for the basis set expansion. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:energy_cutoff - slot_uri: coremeta4cat:energy_cutoff - owner: DFT + inlined: true + inlined_as_list: true + reactor_diameter: + name: reactor_diameter + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/reactor_diameter + description: The internal diameter of the reactor vessel. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + is_a: has_length + slot_uri: coremeta4cat:reactor_diameter + owner: CSTR domain_of: - - DFTSettingsMixin - - DFT - range: float + - CSTR + range: LengthQuantity + recommended: true multivalued: true - unit: - ucum_code: eV - convergence_criteria: - name: convergence_criteria - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/convergence_criteria - description: 'Convergence thresholds applied during self-consistent field (SCF) - and/or + inlined: true + inlined_as_list: true + stirrer_diameter: + name: stirrer_diameter + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/stirrer_diameter + description: 'The effective diameter of the stirrer. Typically expressed as the - geometry optimisation (e.g. energy < 1e-5 eV, forces < 0.02 eV/A).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + distance across the rotating blade or mixing head from one tip to + + the opposite tip.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:convergence_criteria - slot_uri: coremeta4cat:convergence_criteria - owner: DFT + - VOC4CAT:0008115 + is_a: has_length + slot_uri: VOC4CAT:0008115 + owner: CSTR domain_of: - - DFTSettingsMixin - - DFT - range: string + - CSTR + range: LengthQuantity + recommended: true multivalued: true - dft_u_parameters: - name: dft_u_parameters - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/dft_u_parameters - description: 'Hubbard U correction parameters (DFT+U). Specify element, orbital, - and + inlined: true + inlined_as_list: true + reactor_stirrer_type: + name: reactor_stirrer_type + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/reactor_stirrer_type + description: 'The category of mechanical or magnetic agitation device used in + the - U value (e.g. "Fe d: U=4.0 eV, J=0.0 eV").' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + reactor, such as a magnetic stirrer or an overhead mechanical (steel + + shaft) stirrer. Distinct from the synthesis-context stirrer_type slot + + (coremeta4cat_synthesis_ap), since reactor and synthesis-vessel stirring + + may use different equipment.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:dft_u_parameters - slot_uri: coremeta4cat:dft_u_parameters - owner: DFT + - VOC4CAT:0008113 + is_a: has_qualitative_attribute + slot_uri: VOC4CAT:0008113 + owner: CSTR domain_of: - - DFT + - CSTR range: string + recommended: true multivalued: true - spin_polarization: - name: spin_polarization - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/spin_polarization - description: 'Whether spin polarization (collinear magnetism) is included in the - DFT - - calculation. Set to true for systems containing magnetic elements.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:spin_polarization - slot_uri: coremeta4cat:spin_polarization - owner: DFT + inlined_as_list: true + tube_length: + name: tube_length + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/tube_length + description: The length of the tubular reaction chamber. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + is_a: has_length + slot_uri: coremeta4cat:tube_length + owner: PlugFlowReactor domain_of: - - DFT - range: boolean + - PlugFlowReactor + range: LengthQuantity + recommended: true multivalued: true - total_energy_per_atom: - name: total_energy_per_atom - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/total_energy_per_atom - description: Total DFT ground-state energy divided by number of atoms in the unit - cell. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:total_energy_per_atom - slot_uri: coremeta4cat:total_energy_per_atom - owner: DFT + inlined: true + inlined_as_list: true + tube_internal_diameter: + name: tube_internal_diameter + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/tube_internal_diameter + description: The internal diameter of the tubular reaction chamber. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + is_a: has_length + slot_uri: coremeta4cat:tube_internal_diameter + owner: PlugFlowReactor domain_of: - - DFT - range: float + - PlugFlowReactor + range: LengthQuantity + recommended: true multivalued: true - unit: - ucum_code: eV - force_field: - name: force_field - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/force_field - description: 'Force field or interatomic potential used (e.g. ReaxFF, CHARMM, - Tersoff, + inlined: true + inlined_as_list: true + flow_direction: + name: flow_direction + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/flow_direction + description: 'The direction of reactant flow through the tube (e.g. upflow, - EAM). Include parametrisation source or reference.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:force_field - slot_uri: coremeta4cat:force_field - owner: MolecularDynamics + downflow, horizontal).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:flow_direction + owner: PlugFlowReactor domain_of: - - MolecularDynamics + - PlugFlowReactor range: string + recommended: true multivalued: true - simulation_timestep: - name: simulation_timestep - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/simulation_timestep - description: Integration timestep used in molecular dynamics. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - APOLLO_SV:00000012 - slot_uri: APOLLO_SV:00000012 - owner: MolecularDynamics + inlined_as_list: true + number_of_tubes: + name: number_of_tubes + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/number_of_tubes + description: The number of parallel tubes in the reactor. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:number_of_tubes + owner: PlugFlowReactor domain_of: - - MolecularDynamics - range: float + - PlugFlowReactor + range: integer + recommended: true multivalued: true - unit: - ucum_code: fs - simulation_time: - name: simulation_time - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/simulation_time - description: Total simulated physical time of the MD trajectory. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:simulation_time - slot_uri: coremeta4cat:simulation_time - owner: MolecularDynamics + inlined_as_list: true + tube_material: + name: tube_material + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/tube_material + description: Material used for the construction of the reactor tube(s). + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:tube_material + owner: PlugFlowReactor domain_of: - - MolecularDynamics - range: float + - PlugFlowReactor + range: string + recommended: true multivalued: true - unit: - ucum_code: ps - ensemble_type: - name: ensemble_type - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ensemble_type - description: 'Statistical ensemble used in MD (e.g. NVE, NVT, NPT). Determines - which + inlined_as_list: true + catalyst_particle_size: + name: catalyst_particle_size + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/catalyst_particle_size + description: 'A measure of the characteristic linear dimension of a particle in + a - thermodynamic quantities are conserved.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + sample, typically reported as diameter or sieve fraction range.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:ensemble_type - slot_uri: coremeta4cat:ensemble_type - owner: MolecularDynamics + - VOC4CAT:0008212 + is_a: has_length + slot_uri: VOC4CAT:0008212 + owner: FixedBedReactor domain_of: - - MolecularDynamics - range: string + - PlugFlowReactor + - SlurryReactor + - FixedBedReactor + range: LengthQuantity + recommended: true multivalued: true - number_of_atoms: - name: number_of_atoms - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/number_of_atoms - description: Number of atoms in the simulation cell or supercell. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:number_of_atoms - slot_uri: coremeta4cat:number_of_atoms - owner: MolecularDynamics + inlined: true + inlined_as_list: true + agitation_type: + name: agitation_type + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/agitation_type + description: 'The category of agitation used inside the autoclave (e.g. magnetic + + stirring, mechanical overhead stirring, rocking, none).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:agitation_type + owner: Autoclave domain_of: - - MolecularDynamics - range: integer + - Autoclave + range: string + recommended: true multivalued: true - rate_constants: - name: rate_constants - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/rate_constants - description: 'Rate constants or Arrhenius parameters (pre-exponential factor and + inlined_as_list: true + reaction_chamber_material: + name: reaction_chamber_material + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/reaction_chamber_material + description: 'Material used for the construction of the inner reaction chamber - activation energy) for each elementary step in the reaction network.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + (the surface in direct contact with the reaction mixture). Distinct + + from vessel_material, the material of the outer pressure vessel/shell.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - NCIT:C94967 - slot_uri: NCIT:C94967 - owner: Microkinetics + - VOC4CAT:0000156 + is_a: has_qualitative_attribute + slot_uri: VOC4CAT:0000156 + owner: Autoclave domain_of: - - Microkinetics + - Autoclave range: string + recommended: true multivalued: true - solver_type: - name: solver_type - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/solver_type - description: 'Numerical solver used for the microkinetic rate equations (e.g. - LSODA, + inlined_as_list: true + vessel_internal_volume: + name: vessel_internal_volume + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/vessel_internal_volume + description: The internal (working) volume of the autoclave vessel. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + is_a: has_volume + slot_uri: coremeta4cat:vessel_internal_volume + owner: Autoclave + domain_of: + - Autoclave + range: Volume + recommended: true + multivalued: true + inlined: true + inlined_as_list: true + vessel_material: + name: vessel_material + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/vessel_material + description: 'Material used for the construction of the outer autoclave vessel/ - stiff ODE solver, steady-state Newton method).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:solver_type - slot_uri: coremeta4cat:solver_type - owner: Microkinetics + pressure shell. Distinct from reaction_chamber_material, the material + + of the inner reaction chamber lining.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:vessel_material + owner: Autoclave domain_of: - - Microkinetics + - Autoclave range: string + recommended: true multivalued: true - surface_coverage: - name: surface_coverage - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/surface_coverage - description: Surface coverage of adsorbed species (fraction of surface sites occupied). - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:surface_coverage - slot_uri: coremeta4cat:surface_coverage - owner: Microkinetics + inlined_as_list: true + batch_duration: + name: batch_duration + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/batch_duration + description: 'The total duration of the batch reaction inside the autoclave, from + + start to end of the reaction step.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + is_a: has_duration + slot_uri: coremeta4cat:batch_duration + owner: Autoclave domain_of: - - Microkinetics + - Autoclave + range: Duration + recommended: true + inlined: true + inlined_as_list: true + gas_liquid_ratio: + name: gas_liquid_ratio + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/gas_liquid_ratio + description: The volumetric ratio of gas to liquid phase in the slurry reactor. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:gas_liquid_ratio + owner: SlurryReactor + domain_of: + - SlurryReactor range: float + recommended: true multivalued: true - activation_energy: - name: activation_energy - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/activation_energy - description: Activation energy for each elementary step in the reaction mechanism. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:activation_energy - slot_uri: coremeta4cat:activation_energy - owner: Microkinetics + inlined_as_list: true + agitation_sparging_rate: + name: agitation_sparging_rate + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/agitation_sparging_rate + description: 'The volumetric flow rate at which gas is sparged/bubbled through + the + + liquid phase, or the rate of mechanical agitation used to maintain + + the slurry suspension.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + is_a: has_flow_rate + slot_uri: coremeta4cat:agitation_sparging_rate + owner: SlurryReactor domain_of: - - Microkinetics - range: float + - SlurryReactor + range: VolumeFlowRate + recommended: true multivalued: true - unit: - ucum_code: eV - interaction_potential: - name: interaction_potential - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/interaction_potential - description: Interaction potential or Hamiltonian used to compute energies in - MC moves. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:interaction_potential - slot_uri: coremeta4cat:interaction_potential - owner: MonteCarlo + inlined: true + inlined_as_list: true + impeller_type: + name: impeller_type + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/impeller_type + description: 'The category of impeller used to agitate and suspend the slurry + + (e.g. Rushton turbine, pitched blade, anchor).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:impeller_type + owner: SlurryReactor domain_of: - - MonteCarlo + - SlurryReactor range: string + recommended: true multivalued: true - number_of_steps: - name: number_of_steps - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/number_of_steps - description: Total number of Monte Carlo moves or trial configurations generated. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:number_of_steps - slot_uri: coremeta4cat:number_of_steps - owner: MonteCarlo + inlined_as_list: true + agitation_speed: + name: agitation_speed + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/agitation_speed + description: 'The rotational speed of the agitator/impeller, typically expressed + + in revolutions per unit time.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + is_a: has_angular_velocity + slot_uri: coremeta4cat:agitation_speed + owner: SlurryReactor domain_of: - - MonteCarlo - range: integer + - SlurryReactor + range: AngularVelocity + recommended: true multivalued: true - lattice_size_type: - name: lattice_size_type - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/lattice_size_type - description: 'Lattice geometry and dimensions used in lattice-based MC (e.g. - - "100x100 square lattice", "hexagonal 50x50").' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:lattice_size_type - slot_uri: coremeta4cat:lattice_size_type - owner: MonteCarlo + inlined: true + inlined_as_list: true + channel_material: + name: channel_material + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/channel_material + description: Material used for the construction of the microreactor channels. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:channel_material + owner: Microreactor domain_of: - - MonteCarlo + - Microreactor range: string + recommended: true multivalued: true - acceptance_criteria: - name: acceptance_criteria - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/acceptance_criteria - description: 'Criterion for accepting or rejecting MC moves (e.g. Metropolis, + inlined_as_list: true + channel_dimensions: + name: channel_dimensions + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/channel_dimensions + description: 'The characteristic dimensions (e.g. width, depth) of the microreactor - Kawasaki, heat-bath algorithm).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:acceptance_criteria - slot_uri: coremeta4cat:acceptance_criteria - owner: MonteCarlo + channels.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + is_a: has_length + slot_uri: coremeta4cat:channel_dimensions + owner: Microreactor domain_of: - - MonteCarlo - range: string + - Microreactor + range: LengthQuantity + recommended: true multivalued: true - equilibration_steps: - name: equilibration_steps - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/equilibration_steps - description: Number of MC steps used for equilibration before data collection - begins. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:equilibration_steps - slot_uri: coremeta4cat:equilibration_steps - owner: MonteCarlo + inlined: true + inlined_as_list: true + number_of_channels: + name: number_of_channels + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/number_of_channels + description: The number of parallel channels in the microreactor. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:number_of_channels + owner: Microreactor domain_of: - - MonteCarlo + - Microreactor range: integer + recommended: true multivalued: true - sampling_interval: - name: sampling_interval - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/sampling_interval - description: Interval between successive MC snapshots used for property averaging. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:sampling_interval - slot_uri: coremeta4cat:sampling_interval - owner: MonteCarlo + inlined_as_list: true + catalyst_bed_diameter: + name: catalyst_bed_diameter + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/catalyst_bed_diameter + description: The internal diameter of the packed catalyst bed section. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + is_a: has_length + slot_uri: coremeta4cat:catalyst_bed_diameter + owner: FixedBedReactor domain_of: - - MonteCarlo - range: integer + - FixedBedReactor + range: LengthQuantity + recommended: true multivalued: true - material_composition: - name: material_composition - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/material_composition - description: 'Chemical composition of the simulated material (e.g. "Fe2O3", "Pt/CeO2"). + inlined: true + inlined_as_list: true + catalyst_bed_volume: + name: catalyst_bed_volume + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/catalyst_bed_volume + description: 'The bulk volume taken up by the catalyst and potential diluent in + a - Use empirical formula or SMILES for molecular systems.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + fixed bed reactor.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:material_composition - slot_uri: coremeta4cat:material_composition - owner: MaterialDescriptorMixin + - VOC4CAT:0007021 + is_a: has_volume + slot_uri: VOC4CAT:0007021 + owner: FixedBedReactor domain_of: - - MaterialDescriptorMixin - range: string + - FixedBedReactor + range: Volume + recommended: true multivalued: true - crystal_structure: - name: crystal_structure - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/crystal_structure - description: 'Crystal structure of the simulated material, including space group - and + inlined: true + inlined_as_list: true + catalyst_dilution_material: + name: catalyst_dilution_material + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/catalyst_dilution_material + description: 'An inert solid mixed with catalyst particles in a fixed bed to modify - lattice parameters (e.g. "Fm-3m, a=3.92 A for Pt").' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + bed properties (e.g. improve heat/mass transfer, dilute activity).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - SIO:001100 - slot_uri: SIO:001100 - owner: MaterialDescriptorMixin + - VOC4CAT:0008218 + is_a: has_qualitative_attribute + slot_uri: VOC4CAT:0008218 + owner: FixedBedReactor domain_of: - - MaterialDescriptorMixin + - FixedBedReactor range: string + recommended: true multivalued: true - k_point_mesh: - name: k_point_mesh - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/k_point_mesh - description: 'Monkhorst-Pack k-point mesh used for Brillouin zone sampling + inlined_as_list: true + catalyst_bed_height: + name: catalyst_bed_height + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/catalyst_bed_height + description: 'The axial length of the packed catalyst section in a reactor, - (e.g. "4x4x1" for a surface slab, "8x8x8" for a bulk cell).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + measured along the direction of flow.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:k_point_mesh - slot_uri: coremeta4cat:k_point_mesh - owner: DFTSettingsMixin + - VOC4CAT:0008217 + is_a: has_length + slot_uri: VOC4CAT:0008217 + owner: FixedBedReactor domain_of: - - DFTSettingsMixin + - FixedBedReactor + range: LengthQuantity + recommended: true + multivalued: true + inlined: true + inlined_as_list: true + gas_distributor_type: + name: gas_distributor_type + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/gas_distributor_type + description: Type or design of the gas distributor plate in a fluidized bed reactor. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + mappings: + - coremeta4cat:gas_distributor_type + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:gas_distributor_type + owner: FluidizedBedReactor + domain_of: + - FluidizedBedReactor range: string + recommended: true multivalued: true - formation_energy: - name: formation_energy - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/formation_energy - description: Formation energy per atom relative to elemental reference states. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + inlined_as_list: true + bed_expansion_height: + name: bed_expansion_height + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/bed_expansion_height + description: Height of bed expansion above the settled bed height under operating + conditions. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:formation_energy - slot_uri: coremeta4cat:formation_energy - owner: ThermodynamicStability + - coremeta4cat:bed_expansion_height + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:bed_expansion_height + owner: FluidizedBedReactor domain_of: - - ThermodynamicStability + - FluidizedBedReactor range: float + recommended: true multivalued: true + inlined_as_list: true unit: - ucum_code: eV - reference_energies: - name: reference_energies - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/reference_energies - description: 'Elemental reference energies used to compute formation energies - - (e.g. DFT total energies of elemental ground-state structures).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + ucum_code: cm + bubble_size_distribution: + name: bubble_size_distribution + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/bubble_size_distribution + description: Description or characterization of bubble size distribution in the + fluidized bed. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:reference_energies - slot_uri: coremeta4cat:reference_energies - owner: ThermodynamicStability + - coremeta4cat:bubble_size_distribution + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:bubble_size_distribution + owner: FluidizedBedReactor domain_of: - - ThermodynamicStability + - FluidizedBedReactor range: string + recommended: true multivalued: true - energy_above_hull: - name: energy_above_hull - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/energy_above_hull - description: 'Distance above the convex hull of stable phases (thermodynamic stability + inlined_as_list: true + product_identification_method: + name: product_identification_method + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/product_identification_method + description: 'The analytical method used to identify and/or quantify reaction + products. - metric). Zero for phases on the hull; positive values indicate metastability.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + Should reference a CharacterizationTechnique instance (e.g. GCMS, HPLC_MS). + + The abstract stub ProductIdentificationMethod is retained for backward compatibility.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:energy_above_hull - slot_uri: coremeta4cat:energy_above_hull - owner: ThermodynamicStability + - coremeta4cat:product_identification_method + is_a: realized_plan + slot_uri: coremeta4cat:product_identification_method + owner: CatalyticReaction domain_of: - - ThermodynamicStability - range: float + - CatalyticReaction + range: ProductIdentificationMethod + required: true multivalued: true - unit: - ucum_code: eV - phase_diagram_type: - name: phase_diagram_type - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/phase_diagram_type - description: Type of phase diagram constructed (e.g. binary, ternary, quaternary). + inlined: true + inlined_as_list: true + software_package: + name: software_package + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/software_package + description: 'Software package or code used for the simulation (e.g. VASP, Quantum + ESPRESSO, + + LAMMPS, CP2K, ORCA, Zacros). Include version number where possible.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:phase_diagram_type - slot_uri: coremeta4cat:phase_diagram_type - owner: ThermodynamicStability + - coremeta4cat:software_package + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:software_package + owner: Simulation domain_of: - - ThermodynamicStability + - Simulation range: string + required: true + recommended: true multivalued: true - competing_phases: - name: competing_phases - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/competing_phases - description: 'List of stable competing phases used in convex hull construction + inlined_as_list: true + calculated_property: + name: calculated_property + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/calculated_property + description: 'A property computed by this Simulation, provided as a CalculatedProperty - (e.g. "Fe2O3, Fe3O4, FeO, Fe").' + instance. Multiple properties may be computed in a single simulation run.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:competing_phases - slot_uri: coremeta4cat:competing_phases - owner: ThermodynamicStability + - coremeta4cat:calculated_property + is_a: had_output_entity + slot_uri: coremeta4cat:calculated_property + owner: Simulation domain_of: - - ThermodynamicStability - range: string + - Simulation + range: CalculatedProperty + required: true + recommended: true multivalued: true - piezoelectric_tensor: - name: piezoelectric_tensor - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/piezoelectric_tensor - description: 'Components of the piezoelectric tensor e_ij (C/m2) or d_ij (pC/N), + inlined: true + inlined_as_list: true + exchange_correlation_functional: + name: exchange_correlation_functional + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/exchange_correlation_functional + description: 'Exchange-correlation functional used (e.g. PBE, PBEsol, RPBE, B3LYP, - describing the coupling between stress and electric polarization.' + HSE06). The choice of functional directly affects accuracy.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:piezoelectric_tensor - slot_uri: coremeta4cat:piezoelectric_tensor - owner: Piezoelectricity + - coremeta4cat:exchange_correlation_functional + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:exchange_correlation_functional + owner: DFT domain_of: - - Piezoelectricity + - DFT range: string + recommended: true multivalued: true - crystal_symmetry: - name: crystal_symmetry - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/crystal_symmetry - description: Point group or space group symmetry of the crystal structure. + inlined_as_list: true + energy_cutoff: + name: energy_cutoff + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/energy_cutoff + description: Plane-wave kinetic energy cutoff for the basis set expansion. from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:crystal_symmetry - slot_uri: coremeta4cat:crystal_symmetry - owner: Piezoelectricity + - coremeta4cat:energy_cutoff + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:energy_cutoff + owner: DFT domain_of: - - Piezoelectricity - range: string + - DFTSettingsMixin + - DFT + range: float + recommended: true multivalued: true - strain_applied: - name: strain_applied - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/strain_applied - description: Magnitude of applied strain in the piezoelectric calculation. + inlined_as_list: true + unit: + ucum_code: eV + convergence_criteria: + name: convergence_criteria + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/convergence_criteria + description: 'Convergence thresholds applied during self-consistent field (SCF) + and/or + + geometry optimisation (e.g. energy < 1e-5 eV, forces < 0.02 eV/A).' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:strain_applied - slot_uri: coremeta4cat:strain_applied - owner: Piezoelectricity + - coremeta4cat:convergence_criteria + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:convergence_criteria + owner: DFT domain_of: - - Piezoelectricity - range: float - multivalued: true - ionic_electronic_contributions: - name: ionic_electronic_contributions - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ionic_electronic_contributions - description: 'Decomposition of the piezoelectric or dielectric response into ionic - - (nuclear) and electronic contributions.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:ionic_electronic_contributions - slot_uri: coremeta4cat:ionic_electronic_contributions - owner: Piezoelectricity - domain_of: - - Piezoelectricity + - DFTSettingsMixin + - DFT range: string + recommended: true multivalued: true - elastic_tensor: - name: elastic_tensor - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/elastic_tensor - description: 'Full Voigt-notation elastic tensor C_ij (GPa) describing the linear + inlined_as_list: true + dft_u_parameters: + name: dft_u_parameters + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/dft_u_parameters + description: 'Hubbard U correction parameters (DFT+U). Specify element, orbital, + and - elastic response of the material.' + U value (e.g. "Fe d: U=4.0 eV, J=0.0 eV").' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:elastic_tensor - slot_uri: coremeta4cat:elastic_tensor - owner: ElasticConstants + - coremeta4cat:dft_u_parameters + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:dft_u_parameters + owner: DFT domain_of: - - ElasticConstants + - DFT range: string + recommended: true multivalued: true - bulk_modulus: - name: bulk_modulus - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/bulk_modulus - description: Bulk modulus (resistance to uniform compression). + inlined_as_list: true + spin_polarization: + name: spin_polarization + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/spin_polarization + description: 'Whether spin polarization (collinear magnetism) is included in the + DFT + + calculation. Set to true for systems containing magnetic elements.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:bulk_modulus - slot_uri: coremeta4cat:bulk_modulus - owner: EquationsOfState + - coremeta4cat:spin_polarization + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:spin_polarization + owner: DFT domain_of: - - ElasticConstants - - EquationsOfState - range: float + - DFT + range: boolean + recommended: true multivalued: true - unit: - ucum_code: GPa - shear_modulus: - name: shear_modulus - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/shear_modulus - description: Shear modulus (resistance to shear deformation). + inlined_as_list: true + total_energy_per_atom: + name: total_energy_per_atom + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/total_energy_per_atom + description: Total DFT ground-state energy divided by number of atoms in the unit + cell. from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:shear_modulus - slot_uri: coremeta4cat:shear_modulus - owner: ElasticConstants + - coremeta4cat:total_energy_per_atom + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:total_energy_per_atom + owner: DFT domain_of: - - ElasticConstants + - DFT range: float + recommended: true multivalued: true + inlined_as_list: true unit: - ucum_code: GPa - poisson_ratio: - name: poisson_ratio - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/poisson_ratio - description: Poisson's ratio (ratio of transverse to axial strain under uniaxial - load). + ucum_code: eV + force_field: + name: force_field + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/force_field + description: 'Force field or interatomic potential used (e.g. ReaxFF, CHARMM, + Tersoff, + + EAM). Include parametrisation source or reference.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:poisson_ratio - slot_uri: coremeta4cat:poisson_ratio - owner: ElasticConstants + - coremeta4cat:force_field + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:force_field + owner: MolecularDynamics domain_of: - - ElasticConstants - range: float + - MolecularDynamics + range: string + recommended: true multivalued: true - young_modulus: - name: young_modulus - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/young_modulus - description: Young's modulus (stiffness under uniaxial tension or compression). + inlined_as_list: true + simulation_timestep: + name: simulation_timestep + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/simulation_timestep + description: Integration timestep used in molecular dynamics. from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:young_modulus - slot_uri: coremeta4cat:young_modulus - owner: ElasticConstants + - APOLLO_SV:00000012 + is_a: has_quantitative_attribute + slot_uri: APOLLO_SV:00000012 + owner: MolecularDynamics domain_of: - - ElasticConstants + - MolecularDynamics range: float + recommended: true multivalued: true + inlined_as_list: true unit: - ucum_code: GPa - surface_energy: - name: surface_energy - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/surface_energy - description: 'Cleavage energy per unit area required to create the surface from - the bulk. - - A lower value indicates a more stable surface facet.' + ucum_code: fs + simulation_time: + name: simulation_time + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/simulation_time + description: Total simulated physical time of the MD trajectory. from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:surface_energy - slot_uri: coremeta4cat:surface_energy - owner: Surfaces + - coremeta4cat:simulation_time + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:simulation_time + owner: MolecularDynamics domain_of: - - Surfaces + - MolecularDynamics range: float + recommended: true multivalued: true + inlined_as_list: true unit: - ucum_code: J/m2 - miller_indices: - name: miller_indices - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/miller_indices - description: Miller indices of the modelled surface facet (e.g. "(111)", "(110)", - "(100)"). + ucum_code: ps + ensemble_type: + name: ensemble_type + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ensemble_type + description: 'Statistical ensemble used in MD (e.g. NVE, NVT, NPT). Determines + which + + thermodynamic quantities are conserved.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:miller_indices - slot_uri: coremeta4cat:miller_indices - owner: Surfaces + - coremeta4cat:ensemble_type + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:ensemble_type + owner: MolecularDynamics domain_of: - - Surfaces + - MolecularDynamics range: string + recommended: true multivalued: true - slab_thickness: - name: slab_thickness - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/slab_thickness - description: Thickness of the periodic slab model used to represent the surface. + inlined_as_list: true + number_of_atoms: + name: number_of_atoms + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/number_of_atoms + description: Number of atoms in the simulation cell or supercell. from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:slab_thickness - slot_uri: coremeta4cat:slab_thickness - owner: Surfaces + - coremeta4cat:number_of_atoms + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:number_of_atoms + owner: MolecularDynamics domain_of: - - Surfaces - range: float + - MolecularDynamics + range: integer + recommended: true multivalued: true - unit: - ucum_code: Ao - vacuum_spacing: - name: vacuum_spacing - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/vacuum_spacing - description: 'Vacuum layer thickness added above the slab to prevent spurious + inlined_as_list: true + rate_constants: + name: rate_constants + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/rate_constants + description: 'Rate constants or Arrhenius parameters (pre-exponential factor and - periodic interactions between slab images.' + activation energy) for each elementary step in the reaction network.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:vacuum_spacing - slot_uri: coremeta4cat:vacuum_spacing - owner: Surfaces + - NCIT:C94967 + is_a: has_qualitative_attribute + slot_uri: NCIT:C94967 + owner: Microkinetics domain_of: - - Surfaces - range: float + - Microkinetics + range: string + recommended: true multivalued: true - unit: - ucum_code: Ao - surface_termination_method: - name: surface_termination_method - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/surface_termination_method - description: 'Method used to terminate the slab and handle dangling bonds + inlined_as_list: true + solver_type: + name: solver_type + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/solver_type + description: 'Numerical solver used for the microkinetic rate equations (e.g. + LSODA, - (e.g. H-passivation, OH-termination, dipole correction).' + stiff ODE solver, steady-state Newton method).' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:surface_termination_method - slot_uri: coremeta4cat:surface_termination_method - owner: Surfaces + - coremeta4cat:solver_type + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:solver_type + owner: Microkinetics domain_of: - - Surfaces + - Microkinetics range: string + recommended: true multivalued: true - dielectric_tensor: - name: dielectric_tensor - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/dielectric_tensor - description: 'Components of the static and/or high-frequency dielectric tensor - epsilon_ij, - - computed from DFPT.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:dielectric_tensor - slot_uri: coremeta4cat:dielectric_tensor - owner: DielectricTensors - domain_of: - - DielectricTensors - range: string - multivalued: true - born_effective_charges: - name: born_effective_charges - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/born_effective_charges - description: 'Born effective charge tensors Z*_ij for each atom, describing how - - the polarization changes with atomic displacements.' + inlined_as_list: true + surface_coverage: + name: surface_coverage + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/surface_coverage + description: Surface coverage of adsorbed species (fraction of surface sites occupied). from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:born_effective_charges - slot_uri: coremeta4cat:born_effective_charges - owner: DielectricTensors + - coremeta4cat:surface_coverage + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:surface_coverage + owner: Microkinetics domain_of: - - DielectricTensors - range: string + - Microkinetics + range: float + recommended: true multivalued: true - force_constant_method: - name: force_constant_method - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/force_constant_method - description: 'Method used to compute the interatomic force constants (e.g. finite - - differences / supercell method, DFPT/linear response).' + inlined_as_list: true + activation_energy: + name: activation_energy + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/activation_energy + description: Activation energy for each elementary step in the reaction mechanism. from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:force_constant_method - slot_uri: coremeta4cat:force_constant_method - owner: PhononDispersion + - coremeta4cat:activation_energy + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:activation_energy + owner: Microkinetics domain_of: - - PhononDispersion - range: string + - Microkinetics + range: float + recommended: true multivalued: true - kq_point_mesh: - name: kq_point_mesh - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/kq_point_mesh - description: 'k/q-point mesh for phonon Brillouin zone sampling (e.g. "8x8x8"). - - Distinct from the electronic k-point mesh.' + inlined_as_list: true + unit: + ucum_code: eV + interaction_potential: + name: interaction_potential + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/interaction_potential + description: Interaction potential or Hamiltonian used to compute energies in + MC moves. from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:kq_point_mesh - slot_uri: coremeta4cat:kq_point_mesh - owner: PhononDispersion + - coremeta4cat:interaction_potential + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:interaction_potential + owner: MonteCarlo domain_of: - - PhononDispersion + - MonteCarlo range: string + recommended: true multivalued: true - smearing_parameter: - name: smearing_parameter - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/smearing_parameter - description: Smearing or broadening parameter applied to the phonon density of - states. + inlined_as_list: true + number_of_steps: + name: number_of_steps + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/number_of_steps + description: Total number of Monte Carlo moves or trial configurations generated. from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:smearing_parameter - slot_uri: coremeta4cat:smearing_parameter - owner: PhononDispersion + - coremeta4cat:number_of_steps + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:number_of_steps + owner: MonteCarlo domain_of: - - PhononDispersion - range: float + - MonteCarlo + range: integer + recommended: true multivalued: true - unit: - ucum_code: eV - imaginary_modes: - name: imaginary_modes - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/imaginary_modes - description: 'Whether imaginary (soft) phonon modes are present in the dispersion. + inlined_as_list: true + lattice_size_type: + name: lattice_size_type + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/lattice_size_type + description: 'Lattice geometry and dimensions used in lattice-based MC (e.g. - Imaginary modes indicate dynamical instability of the structure.' + "100x100 square lattice", "hexagonal 50x50").' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:imaginary_modes - slot_uri: coremeta4cat:imaginary_modes - owner: PhononDispersion + - coremeta4cat:lattice_size_type + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:lattice_size_type + owner: MonteCarlo domain_of: - - PhononDispersion - range: boolean + - MonteCarlo + range: string + recommended: true multivalued: true - fit_method: - name: fit_method - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/fit_method - description: 'Parametric model used to fit the energy-volume curve + inlined_as_list: true + acceptance_criteria: + name: acceptance_criteria + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/acceptance_criteria + description: 'Criterion for accepting or rejecting MC moves (e.g. Metropolis, - (e.g. Birch-Murnaghan 3rd order, Vinet, Murnaghan).' + Kawasaki, heat-bath algorithm).' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:fit_method - slot_uri: coremeta4cat:fit_method - owner: EquationsOfState + - coremeta4cat:acceptance_criteria + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:acceptance_criteria + owner: MonteCarlo domain_of: - - EquationsOfState + - MonteCarlo range: string + recommended: true multivalued: true - pressure_derivative: - name: pressure_derivative - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/pressure_derivative - description: Pressure derivative of the bulk modulus B' (dimensionless). + inlined_as_list: true + equilibration_steps: + name: equilibration_steps + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/equilibration_steps + description: Number of MC steps used for equilibration before data collection + begins. from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:pressure_derivative - slot_uri: coremeta4cat:pressure_derivative - owner: EquationsOfState + - coremeta4cat:equilibration_steps + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:equilibration_steps + owner: MonteCarlo domain_of: - - EquationsOfState - range: float + - MonteCarlo + range: integer + recommended: true multivalued: true - fit_residuals: - name: fit_residuals - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/fit_residuals - description: Root-mean-square residuals of the energy-volume fit. + inlined_as_list: true + sampling_interval: + name: sampling_interval + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/sampling_interval + description: Interval between successive MC snapshots used for property averaging. from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:fit_residuals - slot_uri: coremeta4cat:fit_residuals - owner: EquationsOfState + - coremeta4cat:sampling_interval + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:sampling_interval + owner: MonteCarlo domain_of: - - EquationsOfState - range: float + - MonteCarlo + range: integer + recommended: true multivalued: true - ph_range: - name: ph_range - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ph_range - description: pH range covered in the Pourbaix stability diagram (e.g. "0-14"). + inlined_as_list: true + material_composition: + name: material_composition + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/material_composition + description: 'Chemical composition of the simulated material (e.g. "Fe2O3", "Pt/CeO2"). + + Use empirical formula or SMILES for molecular systems.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:ph_range - slot_uri: coremeta4cat:ph_range - owner: AqueousStability + - coremeta4cat:material_composition + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:material_composition + owner: MaterialDescriptorMixin domain_of: - - AqueousStability + - MaterialDescriptorMixin range: string + recommended: true multivalued: true - potential_range: - name: potential_range - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/potential_range - description: 'Electrode potential range covered in the Pourbaix diagram + inlined_as_list: true + crystal_structure: + name: crystal_structure + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/crystal_structure + description: 'Crystal structure of the simulated material, including space group + and - (e.g. "-2 to +2 V vs SHE").' + lattice parameters (e.g. "Fm-3m, a=3.92 A for Pt").' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:potential_range - slot_uri: coremeta4cat:potential_range - owner: AqueousStability + - SIO:001100 + is_a: has_qualitative_attribute + slot_uri: SIO:001100 + owner: MaterialDescriptorMixin domain_of: - - AqueousStability + - MaterialDescriptorMixin range: string + recommended: true multivalued: true - solvation_model: - name: solvation_model - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/solvation_model - description: 'Implicit solvation model used to account for aqueous environment + inlined_as_list: true + k_point_mesh: + name: k_point_mesh + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/k_point_mesh + description: 'Monkhorst-Pack k-point mesh used for Brillouin zone sampling - (e.g. VASPsol, SCCS/Environ, COSMO).' + (e.g. "4x4x1" for a surface slab, "8x8x8" for a bulk cell).' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:solvation_model - slot_uri: coremeta4cat:solvation_model - owner: AqueousStability + - coremeta4cat:k_point_mesh + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:k_point_mesh + owner: DFTSettingsMixin domain_of: - - AqueousStability + - DFTSettingsMixin range: string + recommended: true multivalued: true - ionic_strength: - name: ionic_strength - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ionic_strength - description: Ionic strength of the electrolyte solution modelled. + inlined_as_list: true + formation_energy: + name: formation_energy + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/formation_energy + description: Formation energy per atom relative to elemental reference states. from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:ionic_strength - slot_uri: coremeta4cat:ionic_strength - owner: AqueousStability + - coremeta4cat:formation_energy + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:formation_energy + owner: ThermodynamicStability domain_of: - - AqueousStability + - ThermodynamicStability range: float + recommended: true multivalued: true + inlined_as_list: true unit: - ucum_code: mol/L - grain_boundary_plane: - name: grain_boundary_plane - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/grain_boundary_plane - description: 'Crystallographic plane of the grain boundary, expressed using + ucum_code: eV + reference_energies: + name: reference_energies + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/reference_energies + description: 'Elemental reference energies used to compute formation energies - Miller indices (e.g. "Sigma5 (310)[001]").' + (e.g. DFT total energies of elemental ground-state structures).' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:grain_boundary_plane - slot_uri: coremeta4cat:grain_boundary_plane - owner: GrainBoundaries + - coremeta4cat:reference_energies + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:reference_energies + owner: ThermodynamicStability domain_of: - - GrainBoundaries + - ThermodynamicStability range: string + recommended: true multivalued: true - misorientation_angle: - name: misorientation_angle - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/misorientation_angle - description: Misorientation angle between adjacent grains at the boundary. + inlined_as_list: true + energy_above_hull: + name: energy_above_hull + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/energy_above_hull + description: 'Distance above the convex hull of stable phases (thermodynamic stability + + metric). Zero for phases on the hull; positive values indicate metastability.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:misorientation_angle - slot_uri: coremeta4cat:misorientation_angle - owner: GrainBoundaries + - coremeta4cat:energy_above_hull + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:energy_above_hull + owner: ThermodynamicStability domain_of: - - GrainBoundaries + - ThermodynamicStability range: float + recommended: true multivalued: true + inlined_as_list: true unit: - ucum_code: deg - grain_boundary_energy: - name: grain_boundary_energy - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/grain_boundary_energy - description: Excess energy per unit area of the grain boundary. + ucum_code: eV + phase_diagram_type: + name: phase_diagram_type + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/phase_diagram_type + description: Type of phase diagram constructed (e.g. binary, ternary, quaternary). from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:grain_boundary_energy - slot_uri: coremeta4cat:grain_boundary_energy - owner: GrainBoundaries + - coremeta4cat:phase_diagram_type + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:phase_diagram_type + owner: ThermodynamicStability domain_of: - - GrainBoundaries - range: float + - ThermodynamicStability + range: string + recommended: true multivalued: true - unit: - ucum_code: J/m2 - simulation_cell_size: - name: simulation_cell_size - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/simulation_cell_size - description: 'Dimensions of the simulation cell used to model the grain boundary + inlined_as_list: true + competing_phases: + name: competing_phases + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/competing_phases + description: 'List of stable competing phases used in convex hull construction - (e.g. "10x10x30 nm").' + (e.g. "Fe2O3, Fe3O4, FeO, Fe").' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:simulation_cell_size - slot_uri: coremeta4cat:simulation_cell_size - owner: GrainBoundaries + - coremeta4cat:competing_phases + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:competing_phases + owner: ThermodynamicStability domain_of: - - GrainBoundaries + - ThermodynamicStability range: string + recommended: true multivalued: true - gb_excess_volume: - name: gb_excess_volume - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/gb_excess_volume - description: Excess volume per unit area associated with the grain boundary. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:gb_excess_volume - slot_uri: coremeta4cat:gb_excess_volume - owner: GrainBoundaries - domain_of: - - GrainBoundaries - range: float - multivalued: true - gb_structural_units: - name: gb_structural_units - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/gb_structural_units - description: 'Description of the structural units (repeating atomic motifs) that + inlined_as_list: true + piezoelectric_tensor: + name: piezoelectric_tensor + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/piezoelectric_tensor + description: 'Components of the piezoelectric tensor e_ij (C/m2) or d_ij (pC/N), - constitute the grain boundary structure.' + describing the coupling between stress and electric polarization.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:gb_structural_units - slot_uri: coremeta4cat:gb_structural_units - owner: GrainBoundaries + - coremeta4cat:piezoelectric_tensor + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:piezoelectric_tensor + owner: Piezoelectricity domain_of: - - GrainBoundaries + - Piezoelectricity range: string + recommended: true multivalued: true - charge_defect_segregation: - name: charge_defect_segregation - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/charge_defect_segregation - description: 'Data describing charge carrier or point defect segregation behaviour - - at the grain boundary (e.g. segregation energy per defect type).' + inlined_as_list: true + crystal_symmetry: + name: crystal_symmetry + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/crystal_symmetry + description: Point group or space group symmetry of the crystal structure. from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:charge_defect_segregation - slot_uri: coremeta4cat:charge_defect_segregation - owner: GrainBoundaries + - coremeta4cat:crystal_symmetry + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:crystal_symmetry + owner: Piezoelectricity domain_of: - - GrainBoundaries + - Piezoelectricity range: string + recommended: true multivalued: true - smearing_method: - name: smearing_method - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/smearing_method - description: 'Electronic smearing scheme and width used in the SCF calculation - - (e.g. Methfessel-Paxton order 1 with sigma=0.2 eV, Gaussian with sigma=0.05 - eV).' + inlined_as_list: true + strain_applied: + name: strain_applied + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/strain_applied + description: Magnitude of applied strain in the piezoelectric calculation. from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:smearing_method - slot_uri: coremeta4cat:smearing_method - owner: ElectronicStructure + - coremeta4cat:strain_applied + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:strain_applied + owner: Piezoelectricity domain_of: - - ElectronicStructure - range: string + - Piezoelectricity + range: float + recommended: true multivalued: true - spin_polarized: - name: spin_polarized - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/spin_polarized - description: 'Whether the electronic structure calculation is spin-polarized + inlined_as_list: true + ionic_electronic_contributions: + name: ionic_electronic_contributions + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ionic_electronic_contributions + description: 'Decomposition of the piezoelectric or dielectric response into ionic - (accounts for spin-up and spin-down electrons separately).' + (nuclear) and electronic contributions.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:spin_polarized - slot_uri: coremeta4cat:spin_polarized - owner: ElectronicStructure + - coremeta4cat:ionic_electronic_contributions + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:ionic_electronic_contributions + owner: Piezoelectricity domain_of: - - ElectronicStructure - range: boolean + - Piezoelectricity + range: string + recommended: true multivalued: true - band_path: - name: band_path - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/band_path - description: 'High-symmetry k-path through the Brillouin zone used to plot the + inlined_as_list: true + elastic_tensor: + name: elastic_tensor + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/elastic_tensor + description: 'Full Voigt-notation elastic tensor C_ij (GPa) describing the linear - band structure (e.g. "Gamma-X-M-Gamma-R" for cubic, following SeeK-path convention).' + elastic response of the material.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:band_path - slot_uri: coremeta4cat:band_path - owner: ElectronicStructure + - coremeta4cat:elastic_tensor + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:elastic_tensor + owner: ElasticConstants domain_of: - - ElectronicStructure + - ElasticConstants range: string + recommended: true multivalued: true - fermi_energy: - name: fermi_energy - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/fermi_energy - description: Fermi energy (chemical potential of electrons) in the calculated - system. + inlined_as_list: true + bulk_modulus: + name: bulk_modulus + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/bulk_modulus + description: Bulk modulus (resistance to uniform compression). from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:fermi_energy - slot_uri: coremeta4cat:fermi_energy - owner: ElectronicStructure + - coremeta4cat:bulk_modulus + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:bulk_modulus + owner: EquationsOfState domain_of: - - ElectronicStructure + - ElasticConstants + - EquationsOfState range: float + recommended: true multivalued: true + inlined_as_list: true unit: - ucum_code: eV - polarization_direction: - name: polarization_direction - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/polarization_direction - description: 'Crystallographic direction of the spontaneous electric polarization - - (e.g. "[001]" for tetragonal BaTiO_3).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:polarization_direction - slot_uri: coremeta4cat:polarization_direction - owner: Ferroelectrics - domain_of: - - Ferroelectrics - range: string - multivalued: true - spontaneous_polarization: - name: spontaneous_polarization - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/spontaneous_polarization - description: Magnitude of the spontaneous electric polarization. + ucum_code: GPa + shear_modulus: + name: shear_modulus + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/shear_modulus + description: Shear modulus (resistance to shear deformation). from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:spontaneous_polarization - slot_uri: coremeta4cat:spontaneous_polarization - owner: Ferroelectrics + - coremeta4cat:shear_modulus + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:shear_modulus + owner: ElasticConstants domain_of: - - Ferroelectrics + - ElasticConstants range: float + recommended: true multivalued: true + inlined_as_list: true unit: - ucum_code: uC/cm2 - reference_structure: - name: reference_structure - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/reference_structure - description: 'Reference (paraelectric/centrosymmetric) structure used as the zero- - - polarization endpoint in the Berry-phase polarization calculation.' + ucum_code: GPa + poisson_ratio: + name: poisson_ratio + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/poisson_ratio + description: Poisson's ratio (ratio of transverse to axial strain under uniaxial + load). from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:reference_structure - slot_uri: coremeta4cat:reference_structure - owner: Ferroelectrics + - coremeta4cat:poisson_ratio + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:poisson_ratio + owner: ElasticConstants domain_of: - - Ferroelectrics - range: string + - ElasticConstants + range: float + recommended: true multivalued: true - switching_barrier: - name: switching_barrier - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/switching_barrier - description: Energy barrier for polarization switching between equivalent states. + inlined_as_list: true + young_modulus: + name: young_modulus + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/young_modulus + description: Young's modulus (stiffness under uniaxial tension or compression). from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:switching_barrier - slot_uri: coremeta4cat:switching_barrier - owner: Ferroelectrics + - coremeta4cat:young_modulus + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:young_modulus + owner: ElasticConstants domain_of: - - Ferroelectrics + - ElasticConstants range: float + recommended: true multivalued: true + inlined_as_list: true unit: - ucum_code: eV - coercive_field: - name: coercive_field - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/coercive_field - description: Electric field required to reverse the polarization direction. + ucum_code: GPa + surface_energy: + name: surface_energy + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/surface_energy + description: 'Cleavage energy per unit area required to create the surface from + the bulk. + + A lower value indicates a more stable surface facet.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:coercive_field - slot_uri: coremeta4cat:coercive_field - owner: Ferroelectrics + - coremeta4cat:surface_energy + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:surface_energy + owner: Surfaces domain_of: - - Ferroelectrics + - Surfaces range: float + recommended: true multivalued: true + inlined_as_list: true unit: - ucum_code: kV/cm - temperature_dependence: - name: temperature_dependence - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/temperature_dependence - description: Description of how the ferroelectric properties vary with temperature. + ucum_code: J/m2 + miller_indices: + name: miller_indices + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/miller_indices + description: Miller indices of the modelled surface facet (e.g. "(111)", "(110)", + "(100)"). from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:temperature_dependence - slot_uri: coremeta4cat:temperature_dependence - owner: Ferroelectrics + - coremeta4cat:miller_indices + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:miller_indices + owner: Surfaces domain_of: - - Ferroelectrics + - Surfaces range: string + recommended: true multivalued: true - material_sample: - name: material_sample - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/material_sample - description: 'Reference to the material or MaterialSample being characterised - by this - - calculated band gap.' + inlined_as_list: true + slab_thickness: + name: slab_thickness + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/slab_thickness + description: Thickness of the periodic slab model used to represent the surface. from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - VOC4CAT:0005056 - slot_uri: VOC4CAT:0005056 - owner: BandGap + - coremeta4cat:slab_thickness + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:slab_thickness + owner: Surfaces domain_of: - - BandGap - range: string + - Surfaces + range: float + recommended: true multivalued: true - structure_model: - name: structure_model - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/structure_model - description: 'Model structure used in the band gap calculation (e.g. bulk unit - cell, + inlined_as_list: true + unit: + ucum_code: Ao + vacuum_spacing: + name: vacuum_spacing + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/vacuum_spacing + description: 'Vacuum layer thickness added above the slab to prevent spurious - surface slab, defect supercell).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:structure_model - slot_uri: coremeta4cat:structure_model - owner: BandGap - domain_of: - - BandGap - range: string - multivalued: true - smearing_broadening: - name: smearing_broadening - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/smearing_broadening - description: Gaussian or Lorentzian broadening applied to the simulated spectrum. + periodic interactions between slab images.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:smearing_broadening - slot_uri: coremeta4cat:smearing_broadening - owner: BandGap + - coremeta4cat:vacuum_spacing + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:vacuum_spacing + owner: Surfaces domain_of: - - BandGap + - Surfaces range: float + recommended: true multivalued: true + inlined_as_list: true unit: - ucum_code: eV - direct_indirect: - name: direct_indirect - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/direct_indirect - description: 'Band gap character: "direct" (VBM and CBM at same k-point) or + ucum_code: Ao + surface_termination_method: + name: surface_termination_method + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/surface_termination_method + description: 'Method used to terminate the slab and handle dangling bonds - "indirect" (VBM and CBM at different k-points).' + (e.g. H-passivation, OH-termination, dipole correction).' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:direct_indirect - slot_uri: coremeta4cat:direct_indirect - owner: BandGap + - coremeta4cat:surface_termination_method + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:surface_termination_method + owner: Surfaces domain_of: - - BandGap + - Surfaces range: string + recommended: true multivalued: true - experimental_reference: - name: experimental_reference - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/experimental_reference - description: Experimental band gap value used for benchmarking the calculation. + inlined_as_list: true + dielectric_tensor: + name: dielectric_tensor + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/dielectric_tensor + description: 'Components of the static and/or high-frequency dielectric tensor + epsilon_ij, + + computed from DFPT.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:experimental_reference - slot_uri: coremeta4cat:experimental_reference - owner: BandGap + - coremeta4cat:dielectric_tensor + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:dielectric_tensor + owner: DielectricTensors domain_of: - - BandGap - range: float + - DielectricTensors + range: string + recommended: true multivalued: true - unit: - ucum_code: eV - gw_hybrid_correction: - name: gw_hybrid_correction - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/gw_hybrid_correction - description: 'Whether a many-body GW correction or hybrid functional (e.g. HSE06) + inlined_as_list: true + born_effective_charges: + name: born_effective_charges + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/born_effective_charges + description: 'Born effective charge tensors Z*_ij for each atom, describing how - was applied to correct the DFT band gap underestimation.' + the polarization changes with atomic displacements.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:gw_hybrid_correction - slot_uri: coremeta4cat:gw_hybrid_correction - owner: BandGap + - coremeta4cat:born_effective_charges + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:born_effective_charges + owner: DielectricTensors domain_of: - - BandGap - range: boolean + - DielectricTensors + range: string + recommended: true multivalued: true - excitonic_correction: - name: excitonic_correction - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/excitonic_correction - description: 'Excitonic correction (from Bethe-Salpeter equation) applied to the + inlined_as_list: true + force_constant_method: + name: force_constant_method + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/force_constant_method + description: 'Method used to compute the interatomic force constants (e.g. finite - optical band gap.' + differences / supercell method, DFPT/linear response).' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:excitonic_correction - slot_uri: coremeta4cat:excitonic_correction - owner: BandGap + - coremeta4cat:force_constant_method + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:force_constant_method + owner: PhononDispersion domain_of: - - BandGap + - PhononDispersion + range: string + recommended: true + multivalued: true + inlined_as_list: true + kq_point_mesh: + name: kq_point_mesh + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/kq_point_mesh + description: 'k/q-point mesh for phonon Brillouin zone sampling (e.g. "8x8x8"). + + Distinct from the electronic k-point mesh.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + mappings: + - coremeta4cat:kq_point_mesh + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:kq_point_mesh + owner: PhononDispersion + domain_of: + - PhononDispersion + range: string + recommended: true + multivalued: true + inlined_as_list: true + smearing_parameter: + name: smearing_parameter + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/smearing_parameter + description: Smearing or broadening parameter applied to the phonon density of + states. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + mappings: + - coremeta4cat:smearing_parameter + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:smearing_parameter + owner: PhononDispersion + domain_of: + - PhononDispersion range: float + recommended: true multivalued: true + inlined_as_list: true unit: ucum_code: eV - access_URL: - name: access_URL - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/access_URL - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + imaginary_modes: + name: imaginary_modes + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/imaginary_modes + description: 'Whether imaginary (soft) phonon modes are present in the dispersion. + + Imaginary modes indicate dynamical instability of the structure.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcat:accessURL - slot_uri: dcat:accessURL - owner: Distribution + - coremeta4cat:imaginary_modes + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:imaginary_modes + owner: PhononDispersion domain_of: - - Distribution - range: string - access_rights: - name: access_rights - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/access_rights - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - PhononDispersion + range: boolean + recommended: true + multivalued: true + inlined_as_list: true + fit_method: + name: fit_method + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/fit_method + description: 'Parametric model used to fit the energy-volume curve + + (e.g. Birch-Murnaghan 3rd order, Vinet, Murnaghan).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcterms:accessRights - slot_uri: dcterms:accessRights - owner: Dataset + - coremeta4cat:fit_method + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:fit_method + owner: EquationsOfState domain_of: - - DataService - - Dataset + - EquationsOfState range: string - access_service: - name: access_service - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/access_service - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + recommended: true + multivalued: true + inlined_as_list: true + pressure_derivative: + name: pressure_derivative + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/pressure_derivative + description: Pressure derivative of the bulk modulus B' (dimensionless). + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcat:accessService - slot_uri: dcat:accessService - owner: Distribution + - coremeta4cat:pressure_derivative + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:pressure_derivative + owner: EquationsOfState domain_of: - - Distribution - range: string - algorithm: - name: algorithm - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/algorithm - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - EquationsOfState + range: float + recommended: true + multivalued: true + inlined_as_list: true + fit_residuals: + name: fit_residuals + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/fit_residuals + description: Root-mean-square residuals of the energy-volume fit. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - spdx:algorithm - slot_uri: spdx:algorithm - owner: Checksum + - coremeta4cat:fit_residuals + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:fit_residuals + owner: EquationsOfState domain_of: - - Checksum - range: string - applicable_legislation: - name: applicable_legislation - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/applicable_legislation - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - EquationsOfState + range: float + recommended: true + multivalued: true + inlined_as_list: true + ph_range: + name: ph_range + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ph_range + description: pH range covered in the Pourbaix stability diagram (e.g. "0-14"). + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcatap:applicableLegislation - slot_uri: dcatap:applicableLegislation - owner: Distribution + - coremeta4cat:ph_range + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:ph_range + owner: AqueousStability domain_of: - - Catalogue - - DataService - - Dataset - - DatasetSeries - - Distribution + - AqueousStability range: string - application_profile: - name: application_profile - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/application_profile - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + recommended: true + multivalued: true + inlined_as_list: true + potential_range: + name: potential_range + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/potential_range + description: 'Electrode potential range covered in the Pourbaix diagram + + (e.g. "-2 to +2 V vs SHE").' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcterms:conformsTo - slot_uri: dcterms:conformsTo - owner: CatalogueRecord + - coremeta4cat:potential_range + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:potential_range + owner: AqueousStability domain_of: - - CatalogueRecord + - AqueousStability range: string - availability: - name: availability - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/availability - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + recommended: true + multivalued: true + inlined_as_list: true + solvation_model: + name: solvation_model + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/solvation_model + description: 'Implicit solvation model used to account for aqueous environment + + (e.g. VASPsol, SCCS/Environ, COSMO).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcatap:availability - slot_uri: dcatap:availability - owner: Distribution + - coremeta4cat:solvation_model + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:solvation_model + owner: AqueousStability domain_of: - - Distribution + - AqueousStability range: string - bbox: - name: bbox - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/bbox - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + recommended: true + multivalued: true + inlined_as_list: true + ionic_strength: + name: ionic_strength + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ionic_strength + description: Ionic strength of the electrolyte solution modelled. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcat:bbox - slot_uri: dcat:bbox - owner: Location - domain_of: - - Location - range: string - beginning: - name: beginning - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/beginning - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - time:hasBeginning - slot_uri: time:hasBeginning - owner: PeriodOfTime + - coremeta4cat:ionic_strength + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:ionic_strength + owner: AqueousStability domain_of: - - PeriodOfTime - range: string - byte_size: - name: byte_size - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/byte_size - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - AqueousStability + range: float + recommended: true + multivalued: true + inlined_as_list: true + unit: + ucum_code: mol/L + grain_boundary_plane: + name: grain_boundary_plane + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/grain_boundary_plane + description: 'Crystallographic plane of the grain boundary, expressed using + + Miller indices (e.g. "Sigma5 (310)[001]").' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcat:byteSize - slot_uri: dcat:byteSize - owner: Distribution + - coremeta4cat:grain_boundary_plane + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:grain_boundary_plane + owner: GrainBoundaries domain_of: - - Distribution + - GrainBoundaries range: string - carried_out_by: - name: carried_out_by - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/carried_out_by - description: The slot to specify the AgenticEntity that played a certain part - in carrying out the Activity, either via having a specific role, function or - disposition that was realized in the Activity. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + recommended: true + multivalued: true + inlined_as_list: true + misorientation_angle: + name: misorientation_angle + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/misorientation_angle + description: Misorientation angle between adjacent grains at the boundary. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - prov:wasAssociatedWith - slot_uri: prov:wasAssociatedWith - owner: Activity + - coremeta4cat:misorientation_angle + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:misorientation_angle + owner: GrainBoundaries domain_of: - - Activity - range: AgenticEntity + - GrainBoundaries + range: float recommended: true multivalued: true - inlined: true inlined_as_list: true - catalogue: - name: catalogue - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/catalogue - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + unit: + ucum_code: deg + grain_boundary_energy: + name: grain_boundary_energy + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/grain_boundary_energy + description: Excess energy per unit area of the grain boundary. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcat:catalog - slot_uri: dcat:catalog - owner: Catalogue + - coremeta4cat:grain_boundary_energy + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:grain_boundary_energy + owner: GrainBoundaries domain_of: - - Catalogue - range: string - centroid: - name: centroid - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/centroid - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - GrainBoundaries + range: float + recommended: true + multivalued: true + inlined_as_list: true + unit: + ucum_code: J/m2 + simulation_cell_size: + name: simulation_cell_size + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/simulation_cell_size + description: 'Dimensions of the simulation cell used to model the grain boundary + + (e.g. "10x10x30 nm").' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcat:centroid - slot_uri: dcat:centroid - owner: Location + - coremeta4cat:simulation_cell_size + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:simulation_cell_size + owner: GrainBoundaries domain_of: - - Location + - GrainBoundaries range: string - change_type: - name: change_type - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/change_type - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + recommended: true + multivalued: true + inlined_as_list: true + gb_excess_volume: + name: gb_excess_volume + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/gb_excess_volume + description: Excess volume per unit area associated with the grain boundary. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - adms:status - slot_uri: adms:status - owner: CatalogueRecord + - coremeta4cat:gb_excess_volume + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:gb_excess_volume + owner: GrainBoundaries domain_of: - - CatalogueRecord - range: string - checksum: - name: checksum - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/checksum - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - GrainBoundaries + range: float + recommended: true + multivalued: true + inlined_as_list: true + gb_structural_units: + name: gb_structural_units + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/gb_structural_units + description: 'Description of the structural units (repeating atomic motifs) that + + constitute the grain boundary structure.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - spdx:checksum - slot_uri: spdx:checksum - owner: Distribution + - coremeta4cat:gb_structural_units + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:gb_structural_units + owner: GrainBoundaries domain_of: - - Distribution + - GrainBoundaries range: string - checksum_value: - name: checksum_value - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/checksum_value - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + recommended: true + multivalued: true + inlined_as_list: true + charge_defect_segregation: + name: charge_defect_segregation + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/charge_defect_segregation + description: 'Data describing charge carrier or point defect segregation behaviour + + at the grain boundary (e.g. segregation energy per defect type).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - spdx:checksumValue - slot_uri: spdx:checksumValue - owner: Checksum + - coremeta4cat:charge_defect_segregation + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:charge_defect_segregation + owner: GrainBoundaries domain_of: - - Checksum + - GrainBoundaries range: string - compression_format: - name: compression_format - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/compression_format - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + recommended: true + multivalued: true + inlined_as_list: true + smearing_method: + name: smearing_method + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/smearing_method + description: 'Electronic smearing scheme and width used in the SCF calculation + + (e.g. Methfessel-Paxton order 1 with sigma=0.2 eV, Gaussian with sigma=0.05 + eV).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcat:compressFormat - slot_uri: dcat:compressFormat - owner: Distribution + - coremeta4cat:smearing_method + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:smearing_method + owner: ElectronicStructure domain_of: - - Distribution + - ElectronicStructure range: string - conforms_to: - name: conforms_to - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/conforms_to - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + recommended: true + multivalued: true + inlined_as_list: true + spin_polarized: + name: spin_polarized + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/spin_polarized + description: 'Whether the electronic structure calculation is spin-polarized + + (accounts for spin-up and spin-down electrons separately).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcterms:conformsTo - slot_uri: dcterms:conformsTo - owner: Dataset + - coremeta4cat:spin_polarized + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:spin_polarized + owner: ElectronicStructure domain_of: - - DataService - - Dataset - range: string - contact_point: - name: contact_point - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/contact_point - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - ElectronicStructure + range: boolean + recommended: true + multivalued: true + inlined_as_list: true + band_path: + name: band_path + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/band_path + description: 'High-symmetry k-path through the Brillouin zone used to plot the + + band structure (e.g. "Gamma-X-M-Gamma-R" for cubic, following SeeK-path convention).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcat:contactPoint - slot_uri: dcat:contactPoint - owner: DatasetSeries + - coremeta4cat:band_path + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:band_path + owner: ElectronicStructure domain_of: - - DataService - - Dataset - - DatasetSeries + - ElectronicStructure range: string - creator: - name: creator - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/creator - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + recommended: true + multivalued: true + inlined_as_list: true + fermi_energy: + name: fermi_energy + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/fermi_energy + description: Fermi energy (chemical potential of electrons) in the calculated + system. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcterms:creator - slot_uri: dcterms:creator - owner: Dataset + - coremeta4cat:fermi_energy + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:fermi_energy + owner: ElectronicStructure domain_of: - - Catalogue - - Dataset - range: string - dataset_distribution: - name: dataset_distribution - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/dataset_distribution - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - ElectronicStructure + range: float + recommended: true + multivalued: true + inlined_as_list: true + unit: + ucum_code: eV + polarization_direction: + name: polarization_direction + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/polarization_direction + description: 'Crystallographic direction of the spontaneous electric polarization + + (e.g. "[001]" for tetragonal BaTiO_3).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcat:distribution - slot_uri: dcat:distribution - owner: Dataset + - coremeta4cat:polarization_direction + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:polarization_direction + owner: Ferroelectrics domain_of: - - Dataset + - Ferroelectrics range: string - description: - name: description - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/description - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + recommended: true + multivalued: true + inlined_as_list: true + spontaneous_polarization: + name: spontaneous_polarization + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/spontaneous_polarization + description: Magnitude of the spontaneous electric polarization. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcterms:description - slot_uri: dcterms:description - owner: TimeInstant + - coremeta4cat:spontaneous_polarization + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:spontaneous_polarization + owner: Ferroelectrics domain_of: - - QuantitativeRange - - Activity - - AgenticEntity - - Any - - Attribution - - Catalogue - - CatalogueRecord - - ChecksumAlgorithm - - Concept - - ConceptScheme - - DataService - - Dataset - - DatasetSeries - - Distribution - - Document - - Entity - - Frequency - - Geometry - - Identifier - - LegalResource - - LicenseDocument - - LinguisticSystem - - MediaType - - MediaTypeOrExtent - - PeriodOfTime - - Plan - - Policy - - ProvenanceStatement - - QualitativeAttribute - - QuantitativeAttribute - - Resource - - RightsStatement - - Role - - Standard - - SupportiveEntity - - Surrounding - - TimeInstant - range: string - documentation: - name: documentation - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/documentation - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - Ferroelectrics + range: float + recommended: true + multivalued: true + inlined_as_list: true + unit: + ucum_code: uC/cm2 + reference_structure: + name: reference_structure + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/reference_structure + description: 'Reference (paraelectric/centrosymmetric) structure used as the zero- + + polarization endpoint in the Berry-phase polarization calculation.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - foaf:page - slot_uri: foaf:page - owner: Distribution + - coremeta4cat:reference_structure + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:reference_structure + owner: Ferroelectrics domain_of: - - DataService - - Dataset - - Distribution + - Ferroelectrics range: string - download_URL: - name: download_URL - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/download_URL - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + recommended: true + multivalued: true + inlined_as_list: true + switching_barrier: + name: switching_barrier + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/switching_barrier + description: Energy barrier for polarization switching between equivalent states. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcat:downloadURL - slot_uri: dcat:downloadURL - owner: Distribution + - coremeta4cat:switching_barrier + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:switching_barrier + owner: Ferroelectrics domain_of: - - Distribution - range: string - end: - name: end - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/end - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - Ferroelectrics + range: float + recommended: true + multivalued: true + inlined_as_list: true + unit: + ucum_code: eV + coercive_field: + name: coercive_field + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/coercive_field + description: Electric field required to reverse the polarization direction. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - time:hasEnd - slot_uri: time:hasEnd - owner: PeriodOfTime + - coremeta4cat:coercive_field + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:coercive_field + owner: Ferroelectrics domain_of: - - PeriodOfTime - range: string - end_date: - name: end_date - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/end_date - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - Ferroelectrics + range: float + recommended: true + multivalued: true + inlined_as_list: true + unit: + ucum_code: kV/cm + temperature_dependence: + name: temperature_dependence + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/temperature_dependence + description: Description of how the ferroelectric properties vary with temperature. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcat:endDate - slot_uri: dcat:endDate - owner: PeriodOfTime + - coremeta4cat:temperature_dependence + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:temperature_dependence + owner: Ferroelectrics domain_of: - - PeriodOfTime + - Ferroelectrics range: string - endpoint_URL: - name: endpoint_URL - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/endpoint_URL - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcat:endpointURL - slot_uri: dcat:endpointURL - owner: DataService - domain_of: - - DataService - range: string - endpoint_description: - name: endpoint_description - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/endpoint_description - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcat:endpointDescription - slot_uri: dcat:endpointDescription - owner: DataService - domain_of: - - DataService - range: string - evaluated_activity: - name: evaluated_activity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/evaluated_activity - description: The slot to specify the Activity about which the DataGeneratingActivity - produced information. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - prov:wasInformedBy - is_a: had_input_activity - slot_uri: prov:wasInformedBy - owner: DataGeneratingActivity - domain_of: - - DataGeneratingActivity - range: EvaluatedActivity recommended: true multivalued: true - inlined: true inlined_as_list: true - evaluated_entity: - name: evaluated_entity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/evaluated_entity - description: The slot to specify the Entity about which the DataGeneratingActivity - produced information. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + material_sample: + name: material_sample + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/material_sample + description: 'Reference to the material or MaterialSample being characterised + by this + + calculated band gap.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - prov:used - is_a: had_input_entity - slot_uri: prov:used - owner: DataGeneratingActivity + - VOC4CAT:0005056 + is_a: has_qualitative_attribute + slot_uri: VOC4CAT:0005056 + owner: BandGap domain_of: - - DataGeneratingActivity - range: EvaluatedEntity + - BandGap + range: string recommended: true multivalued: true - inlined: true inlined_as_list: true - format: - name: format - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/format - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + structure_model: + name: structure_model + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/structure_model + description: 'Model structure used in the band gap calculation (e.g. bulk unit + cell, + + surface slab, defect supercell).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcterms:format - slot_uri: dcterms:format - owner: Distribution + - coremeta4cat:structure_model + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:structure_model + owner: BandGap domain_of: - - DataService - - Distribution + - BandGap range: string - frequency: - name: frequency - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/frequency - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + recommended: true + multivalued: true + inlined_as_list: true + smearing_broadening: + name: smearing_broadening + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/smearing_broadening + description: Gaussian or Lorentzian broadening applied to the simulated spectrum. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcterms:accrualPeriodicity - slot_uri: dcterms:accrualPeriodicity - owner: DatasetSeries + - coremeta4cat:smearing_broadening + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:smearing_broadening + owner: BandGap domain_of: - - Dataset - - DatasetSeries - range: string - geographical_coverage: - name: geographical_coverage - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/geographical_coverage - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - BandGap + range: float + recommended: true + multivalued: true + inlined_as_list: true + unit: + ucum_code: eV + direct_indirect: + name: direct_indirect + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/direct_indirect + description: 'Band gap character: "direct" (VBM and CBM at same k-point) or + + "indirect" (VBM and CBM at different k-points).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcterms:spatial - slot_uri: dcterms:spatial - owner: DatasetSeries + - coremeta4cat:direct_indirect + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:direct_indirect + owner: BandGap domain_of: - - Catalogue - - Dataset - - DatasetSeries + - BandGap range: string - geometry: - name: geometry - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/geometry - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + recommended: true + multivalued: true + inlined_as_list: true + experimental_reference: + name: experimental_reference + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/experimental_reference + description: Experimental band gap value used for benchmarking the calculation. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - locn:geometry - slot_uri: locn:geometry - owner: Location + - coremeta4cat:experimental_reference + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:experimental_reference + owner: BandGap domain_of: - - Location - range: string - had_input_activity: - name: had_input_activity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/had_input_activity - description: The slot to provide a previous Activity that informed the Activity - by being causally via a shared participant. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - BandGap + range: float + recommended: true + multivalued: true + inlined_as_list: true + unit: + ucum_code: eV + gw_hybrid_correction: + name: gw_hybrid_correction + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/gw_hybrid_correction + description: 'Whether a many-body GW correction or hybrid functional (e.g. HSE06) + + was applied to correct the DFT band gap underestimation.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - prov:wasInformedBy - slot_uri: prov:wasInformedBy - owner: Activity + - coremeta4cat:gw_hybrid_correction + is_a: has_qualitative_attribute + slot_uri: coremeta4cat:gw_hybrid_correction + owner: BandGap domain_of: - - Activity - range: Activity + - BandGap + range: boolean recommended: true multivalued: true - inlined: true inlined_as_list: true - had_input_entity: - name: had_input_entity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/had_input_entity - description: The slot to specify the Entity that was used as an input of an Activity - that is to be changed, consumed or transformed. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + excitonic_correction: + name: excitonic_correction + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/excitonic_correction + description: 'Excitonic correction (from Bethe-Salpeter equation) applied to the + + optical band gap.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - prov:used - slot_uri: prov:used - owner: Activity + - coremeta4cat:excitonic_correction + is_a: has_quantitative_attribute + slot_uri: coremeta4cat:excitonic_correction + owner: BandGap domain_of: - - Activity - range: Entity + - BandGap + range: float recommended: true multivalued: true - inlined: true inlined_as_list: true - had_output_entity: - name: had_output_entity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/had_output_entity - description: The slot to specify the Entity that was generated as an output of - an Activity. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + unit: + ucum_code: eV + used_starting_material: + name: used_starting_material + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/used_starting_material + description: The slot to specify the StartingMaterial(s) of a ChemicalReaction. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ mappings: - - prov:generated - slot_uri: prov:generated - owner: Activity + - RO:0004009 + is_a: had_input_entity + slot_uri: RO:0004009 + owner: ChemicalReaction domain_of: - - Activity - range: Entity + - ChemicalReaction + range: StartingMaterial recommended: true multivalued: true inlined: true inlined_as_list: true - had_role: - name: had_role - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/had_role - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + used_reactant: + name: used_reactant + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/used_reactant + description: The slot to specify the Reagent(s) of a ChemicalReaction. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ mappings: - - dcat:hadRole - slot_uri: dcat:hadRole - owner: Relationship + - RO:0004009 + is_a: had_input_entity + slot_uri: RO:0004009 + owner: ChemicalReaction domain_of: - - Relationship - range: string - has_dataset: - name: has_dataset - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_dataset - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - ChemicalReaction + range: Reagent + recommended: true + multivalued: true + inlined: true + inlined_as_list: true + generated_product: + name: generated_product + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/generated_product + description: The slot to specify the Product(s) of a ChemicalReaction. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ mappings: - - dcat:dataset - slot_uri: dcat:dataset - owner: Catalogue + - RO:0004008 + is_a: had_output_entity + slot_uri: RO:0004008 + owner: ChemicalReaction domain_of: - - Catalogue - range: string - has_part: - name: has_part - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_part - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - ChemicalReaction + range: ChemicalProduct + recommended: true + multivalued: true + inlined: true + inlined_as_list: true + used_catalyst: + name: used_catalyst + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/used_catalyst + description: The slot to specify the Catalyst of a ChemicalReaction. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ mappings: - - dcterms:hasPart - slot_uri: dcterms:hasPart - owner: Entity + - RXNO:0000425 + is_a: carried_out_by + slot_uri: RXNO:0000425 + owner: ChemicalReaction domain_of: - - Activity - - AgenticEntity - - Catalogue - - Entity - inverse: part_of - range: Activity - has_policy: - name: has_policy - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_policy - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - ChemicalReaction + range: Catalyst + recommended: true + multivalued: true + inlined: true + inlined_as_list: true + used_solvent: + name: used_solvent + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/used_solvent + description: The slot to specify the chemical substance that had a solvent role + (CHEBI:35223) in a ChemicalReaction. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ mappings: - - odrl:hasPolicy - slot_uri: odrl:hasPolicy - owner: Distribution + - prov:wasAssociatedWith + is_a: carried_out_by + slot_uri: prov:wasAssociatedWith + owner: ChemicalReaction domain_of: - - Distribution - range: string - has_qualitative_attribute: - name: has_qualitative_attribute - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_qualitative_attribute - description: The slot to relate a qualitative attribute to an EvaluatedEntity, - EvaluatedActivity or AgenticEntity - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - ChemicalReaction + range: DissolvingSubstance + recommended: true + multivalued: true + inlined: true + inlined_as_list: true + has_duration: + name: has_duration + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/has_duration + description: A slot to provide the duration of a ChemicalReaction. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ mappings: - - dcterms:relation - slot_uri: dcterms:relation - owner: Entity + - schema:duration + slot_uri: schema:duration + owner: ChemicalReaction domain_of: - - Activity - - AgenticEntity - - Entity - range: QualitativeAttribute + - ChemicalReaction + range: duration + used_reactor: + name: used_reactor + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/used_reactor + description: The slot to specify the reactor used in a ChemicalReaction. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + mappings: + - prov:wasAssociatedWith + is_a: carried_out_by + slot_uri: prov:wasAssociatedWith + owner: ChemicalReaction + domain_of: + - ChemicalReaction + range: Reactor recommended: true multivalued: true inlined: true inlined_as_list: true - has_quantitative_attribute: - name: has_quantitative_attribute - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_quantitative_attribute - description: The slot to relate a quantitative attribute to an EvaluatedEntity, - EvaluatedActivity or AgenticEntity - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + has_yield: + name: has_yield + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/has_yield + description: A slot to provide the percentage of how much of the ChemicalProduct + was produced by a ChemicalReaction. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ mappings: - - dcterms:relation - slot_uri: dcterms:relation - owner: Entity + - SIO:000008 + is_a: has_quantitative_attribute + slot_uri: SIO:000008 + owner: ChemicalReaction domain_of: - - Activity - - AgenticEntity - - Entity - range: QuantitativeAttribute + - ChemicalReaction + range: Yield recommended: true multivalued: true inlined: true inlined_as_list: true - has_version: - name: has_version - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_version + has_molar_equivalent: + name: has_molar_equivalent + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/has_molar_equivalent + description: A slot to provide the MolarEquivalent of a ChemicalSubstance, such + as the DissolvingSubstance, Starting Material or Reactant, within the context + of a chemical reaction. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + mappings: + - SIO:000008 + is_a: has_quantitative_attribute + slot_uri: SIO:000008 + owner: Catalyst + domain_of: + - StartingMaterial + - Reagent + - Catalyst + range: MolarEquivalent + recommended: true + multivalued: true + inlined: true + inlined_as_list: true + has_percentage_of_total: + name: has_percentage_of_total + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/has_percentage_of_total + description: A slot to specify the percentage of a specific ChemicalSubstance + in relation to the total amount of that same substance used across a multi-step + reaction. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + mappings: + - SIO:000008 + is_a: has_quantitative_attribute + slot_uri: SIO:000008 + owner: DissolvingSubstance + domain_of: + - DissolvingSubstance + range: PercentageOfTotal + recommended: true + multivalued: true + inlined: true + inlined_as_list: true + has_reaction_step: + name: has_reaction_step + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/has_reaction_step + description: A slot to specify a step (part) of a ChemicalReaction that is itself + a ChemicalReaction. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + mappings: + - BFO:0000051 + is_a: has_part + slot_uri: BFO:0000051 + owner: ChemicalReaction + domain_of: + - ChemicalReaction + range: ChemicalReaction + multivalued: true + inlined: true + inlined_as_list: true + access_URL: + name: access_URL + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/access_URL description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:hasVersion - slot_uri: dcat:hasVersion - owner: Dataset + - dcat:accessURL + slot_uri: dcat:accessURL + owner: Distribution domain_of: - - Dataset + - Distribution range: string - homepage: - name: homepage - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/homepage + access_rights: + name: access_rights + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/access_rights description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - foaf:homepage - slot_uri: foaf:homepage - owner: Catalogue + - dcterms:accessRights + slot_uri: dcterms:accessRights + owner: Dataset domain_of: - - Catalogue + - DataService + - Dataset range: string - id: - name: id - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/id - description: A slot to provide an URI for an entity within this schema. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - slot_uri: dcatapplus:id - identifier: true - owner: Resource - domain_of: - - Activity - - AgenticEntity - - Dataset - - DefinedTerm - - Document - - Entity - - LegalResource - - LicenseDocument - - Resource - range: uriorcurie - required: true - identifier: - name: identifier - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/identifier + access_service: + name: access_service + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/access_service description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:identifier - slot_uri: dcterms:identifier - owner: Dataset + - dcat:accessService + slot_uri: dcat:accessService + owner: Distribution domain_of: - - Dataset + - Distribution range: string - in_series: - name: in_series - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/in_series + algorithm: + name: algorithm + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/algorithm description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:inSeries - slot_uri: dcat:inSeries - owner: Dataset + - spdx:algorithm + slot_uri: spdx:algorithm + owner: Checksum domain_of: - - Dataset + - Checksum range: string - is_about_activity: - name: is_about_activity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/is_about_activity - description: A slot to provide the EvaluatedActivity a Dataset is about. - in_subset: - - domain_agnostic_core + applicable_legislation: + name: applicable_legislation + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/applicable_legislation + description: This slot is described in more detail within the class in which it + is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:subject - exact_mappings: - - IAO:0000136 - slot_uri: dcterms:subject - owner: Dataset + - dcatap:applicableLegislation + slot_uri: dcatap:applicableLegislation + owner: Distribution domain_of: + - Catalogue + - DataService - Dataset - range: EvaluatedActivity - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - is_about_entity: - name: is_about_entity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/is_about_entity - description: A slot to provide the EvaluatedEntity a Dataset is about. - in_subset: - - domain_agnostic_core + - DatasetSeries + - Distribution + range: string + application_profile: + name: application_profile + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/application_profile + description: This slot is described in more detail within the class in which it + is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:subject - exact_mappings: - - IAO:0000136 - slot_uri: dcterms:subject - owner: Dataset + - dcterms:conformsTo + slot_uri: dcterms:conformsTo + owner: CatalogueRecord domain_of: - - Dataset - range: EvaluatedEntity - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - is_referenced_by: - name: is_referenced_by - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/is_referenced_by + - CatalogueRecord + range: string + availability: + name: availability + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/availability description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:isReferencedBy - slot_uri: dcterms:isReferencedBy - owner: Dataset + - dcatap:availability + slot_uri: dcatap:availability + owner: Distribution domain_of: - - Dataset + - Distribution range: string - keyword: - name: keyword - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/keyword + bbox: + name: bbox + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/bbox description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:keyword - slot_uri: dcat:keyword - owner: Dataset + - dcat:bbox + slot_uri: dcat:bbox + owner: Location domain_of: - - DataService - - Dataset + - Location range: string - landing_page: - name: landing_page - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/landing_page + beginning: + name: beginning + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/beginning description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:landingPage - slot_uri: dcat:landingPage - owner: Dataset + - time:hasBeginning + slot_uri: time:hasBeginning + owner: PeriodOfTime domain_of: - - DataService - - Dataset + - PeriodOfTime range: string - language: - name: language - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/language + byte_size: + name: byte_size + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/byte_size description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:language - slot_uri: dcterms:language + - dcat:byteSize + slot_uri: dcat:byteSize owner: Distribution domain_of: - - Catalogue - - CatalogueRecord - - Dataset - Distribution range: string - licence: - name: licence - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/licence + carried_out_by: + name: carried_out_by + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/carried_out_by + description: The slot to specify the AgenticEntity that played a certain part + in carrying out the Activity, either via having a specific role, function or + disposition that was realized in the Activity. + in_subset: + - domain_agnostic_core + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - prov:wasAssociatedWith + slot_uri: prov:wasAssociatedWith + owner: Activity + domain_of: + - Activity + range: AgenticEntity + recommended: true + multivalued: true + inlined: true + inlined_as_list: true + catalogue: + name: catalogue + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/catalogue description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:license - slot_uri: dcterms:license - owner: Distribution + - dcat:catalog + slot_uri: dcat:catalog + owner: Catalogue domain_of: - Catalogue - - DataService - - Distribution range: string - linked_schemas: - name: linked_schemas - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/linked_schemas + centroid: + name: centroid + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/centroid description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:conformsTo - slot_uri: dcterms:conformsTo - owner: Distribution + - dcat:centroid + slot_uri: dcat:centroid + owner: Location domain_of: - - Distribution + - Location range: string - listing_date: - name: listing_date - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/listing_date + change_type: + name: change_type + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/change_type description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:issued - slot_uri: dcterms:issued + - adms:status + slot_uri: adms:status owner: CatalogueRecord domain_of: - CatalogueRecord range: string - media_type: - name: media_type - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/media_type + checksum: + name: checksum + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/checksum description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:mediaType - slot_uri: dcat:mediaType + - spdx:checksum + slot_uri: spdx:checksum owner: Distribution domain_of: - Distribution range: string - modification_date: - name: modification_date - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/modification_date + checksum_value: + name: checksum_value + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/checksum_value description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:modified - slot_uri: dcterms:modified - owner: Distribution + - spdx:checksumValue + slot_uri: spdx:checksumValue + owner: Checksum domain_of: - - Catalogue - - CatalogueRecord - - Dataset - - DatasetSeries - - Distribution + - Checksum range: string - name: - name: name - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/name + compression_format: + name: compression_format + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/compression_format description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - foaf:name - slot_uri: foaf:name - owner: Agent + - dcat:compressFormat + slot_uri: dcat:compressFormat + owner: Distribution domain_of: - - Agent + - Distribution range: string - notation: - name: notation - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/notation + conforms_to: + name: conforms_to + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/conforms_to description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - skos:notation - slot_uri: skos:notation - owner: Identifier + - dcterms:conformsTo + slot_uri: dcterms:conformsTo + owner: Dataset domain_of: - - Identifier + - DataService + - Dataset range: string - occurred_in: - name: occurred_in - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/occurred_in - description: The slot to specify the Surrounding in which an Activity took place. - in_subset: - - domain_agnostic_core + contact_point: + name: contact_point + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/contact_point + description: This slot is described in more detail within the class in which it + is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - prov:atLocation - slot_uri: prov:atLocation - owner: DataGeneratingActivity + - dcat:contactPoint + slot_uri: dcat:contactPoint + owner: DatasetSeries domain_of: - - DataGeneratingActivity - range: Surrounding - inlined: true - inlined_as_list: true - other_identifier: - name: other_identifier - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/other_identifier + - DataService + - Dataset + - DatasetSeries + range: string + creator: + name: creator + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/creator description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - adms:identifier - slot_uri: adms:identifier - owner: Entity + - dcterms:creator + slot_uri: dcterms:creator + owner: Dataset domain_of: - - Activity - - AgenticEntity + - Catalogue - Dataset - - Entity range: string - packaging_format: - name: packaging_format - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/packaging_format + dataset_distribution: + name: dataset_distribution + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/dataset_distribution description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:packageFormat - slot_uri: dcat:packageFormat - owner: Distribution + - dcat:distribution + slot_uri: dcat:distribution + owner: Dataset domain_of: - - Distribution + - Dataset range: string - part_of: - name: part_of - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/part_of - description: A slot to specify a related resource in which the described resource - is physically or logically included. - in_subset: - - domain_agnostic_core + description: + name: description + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/description + description: This slot is described in more detail within the class in which it + is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:isPartOf - slot_uri: dcterms:isPartOf - owner: Entity + - dcterms:description + slot_uri: dcterms:description + owner: TimeInstant domain_of: + - QuantitativeRange - Activity - AgenticEntity + - Any + - Attribution + - Catalogue + - CatalogueRecord + - ChecksumAlgorithm + - Concept + - ConceptScheme + - DataService + - Dataset + - DatasetSeries + - Distribution + - Document - Entity - inverse: has_part - range: Activity - preferred_label: - name: preferred_label - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/preferred_label + - Frequency + - Geometry + - Identifier + - LegalResource + - LicenseDocument + - LinguisticSystem + - MediaType + - MediaTypeOrExtent + - PeriodOfTime + - Plan + - Policy + - ProvenanceStatement + - QualitativeAttribute + - QuantitativeAttribute + - Resource + - RightsStatement + - Role + - Standard + - SupportiveEntity + - Surrounding + - TimeInstant + range: string + documentation: + name: documentation + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/documentation description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - skos:prefLabel - slot_uri: skos:prefLabel - owner: Concept + - foaf:page + slot_uri: foaf:page + owner: Distribution domain_of: - - Concept + - DataService + - Dataset + - Distribution range: string - primary_topic: - name: primary_topic - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/primary_topic + download_URL: + name: download_URL + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/download_URL description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - foaf:primaryTopic - slot_uri: foaf:primaryTopic - owner: CatalogueRecord + - dcat:downloadURL + slot_uri: dcat:downloadURL + owner: Distribution domain_of: - - CatalogueRecord + - Distribution range: string - provenance: - name: provenance - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/provenance + end: + name: end + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/end description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:provenance - slot_uri: dcterms:provenance - owner: Dataset + - time:hasEnd + slot_uri: time:hasEnd + owner: PeriodOfTime domain_of: - - Dataset + - PeriodOfTime range: string - publisher: - name: publisher - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/publisher + end_date: + name: end_date + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/end_date description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:publisher - slot_uri: dcterms:publisher - owner: DatasetSeries + - dcat:endDate + slot_uri: dcat:endDate + owner: PeriodOfTime domain_of: - - Catalogue - - DataService - - Dataset - - DatasetSeries + - PeriodOfTime range: string - qualified_attribution: - name: qualified_attribution - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/qualified_attribution + endpoint_URL: + name: endpoint_URL + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/endpoint_URL description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - prov:qualifiedAttribution - slot_uri: prov:qualifiedAttribution - owner: Dataset + - dcat:endpointURL + slot_uri: dcat:endpointURL + owner: DataService domain_of: - - Dataset + - DataService range: string - qualified_relation: - name: qualified_relation - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/qualified_relation + endpoint_description: + name: endpoint_description + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/endpoint_description description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:qualifiedRelation - slot_uri: dcat:qualifiedRelation - owner: Dataset + - dcat:endpointDescription + slot_uri: dcat:endpointDescription + owner: DataService domain_of: - - Dataset + - DataService range: string - rdf_type: - name: rdf_type - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/rdf_type - description: The slot to specify the ontology class that is instantiated by an - entity. + evaluated_activity: + name: evaluated_activity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/evaluated_activity + description: The slot to specify the Activity about which the DataGeneratingActivity + produced information. in_subset: - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - rdf:type - slot_uri: rdf:type - owner: ClassifierMixin + - prov:wasInformedBy + is_a: had_input_activity + slot_uri: prov:wasInformedBy + owner: DataGeneratingActivity domain_of: - - ClassifierMixin - range: DefinedTerm + - DataGeneratingActivity + range: EvaluatedActivity recommended: true + multivalued: true inlined: true - inlined_as_list: false - realized_plan: - name: realized_plan - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/realized_plan - description: The slot to specify the Plan (i.e. directive information or procedure) - that was realized by an Activity. + inlined_as_list: true + evaluated_entity: + name: evaluated_entity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/evaluated_entity + description: The slot to specify the Entity about which the DataGeneratingActivity + produced information. in_subset: - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - prov:used + is_a: had_input_entity slot_uri: prov:used owner: DataGeneratingActivity domain_of: - DataGeneratingActivity - range: Plan + range: EvaluatedEntity + recommended: true + multivalued: true inlined: true inlined_as_list: true - record: - name: record - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/record + format: + name: format + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/format description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:record - slot_uri: dcat:record - owner: Catalogue + - dcterms:format + slot_uri: dcterms:format + owner: Distribution domain_of: - - Catalogue + - DataService + - Distribution range: string - related_resource: - name: related_resource - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/related_resource + frequency: + name: frequency + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/frequency description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:relation - slot_uri: dcterms:relation - owner: ChemicalReaction + - dcterms:accrualPeriodicity + slot_uri: dcterms:accrualPeriodicity + owner: DatasetSeries domain_of: - Dataset - - ChemicalReaction - range: string - relation: - name: relation - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/relation - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcterms:relation - slot_uri: dcterms:relation - owner: Relationship - domain_of: - - Relationship + - DatasetSeries range: string - release_date: - name: release_date - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/release_date + geographical_coverage: + name: geographical_coverage + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/geographical_coverage description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:issued - slot_uri: dcterms:issued - owner: Distribution + - dcterms:spatial + slot_uri: dcterms:spatial + owner: DatasetSeries domain_of: - Catalogue - Dataset - DatasetSeries - - Distribution - range: string - rights: - name: rights - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/rights - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcterms:rights - slot_uri: dcterms:rights - owner: Distribution - domain_of: - - Catalogue - - Distribution range: string - sample: - name: sample - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/sample + geometry: + name: geometry + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/geometry description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - adms:sample - slot_uri: adms:sample - owner: Dataset + - locn:geometry + slot_uri: locn:geometry + owner: Location domain_of: - - Dataset + - Location range: string - serves_dataset: - name: serves_dataset - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/serves_dataset - description: This slot is described in more detail within the class in which it - is used. + had_input_activity: + name: had_input_activity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/had_input_activity + description: The slot to provide a previous Activity that informed the Activity + by being causally via a shared participant. + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:servesDataset - slot_uri: dcat:servesDataset - owner: DataService + - prov:wasInformedBy + slot_uri: prov:wasInformedBy + owner: Activity domain_of: - - DataService - range: string - service: - name: service - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/service - description: This slot is described in more detail within the class in which it - is used. + - Activity + range: Activity + recommended: true + multivalued: true + inlined: true + inlined_as_list: true + had_input_entity: + name: had_input_entity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/had_input_entity + description: The slot to specify the Entity that was used as an input of an Activity + that is to be changed, consumed or transformed. + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:service - slot_uri: dcat:service - owner: Catalogue + - prov:used + slot_uri: prov:used + owner: Activity domain_of: - - Catalogue - range: string - source: - name: source - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/source - description: This slot is described in more detail within the class in which it - is used. + - Activity + range: Entity + recommended: true + multivalued: true + inlined: true + inlined_as_list: true + had_output_entity: + name: had_output_entity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/had_output_entity + description: The slot to specify the Entity that was generated as an output of + an Activity. + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:source - slot_uri: dcterms:source - owner: Dataset + - prov:generated + slot_uri: prov:generated + owner: Activity domain_of: - - Dataset - range: string - source_metadata: - name: source_metadata - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/source_metadata + - Activity + range: Entity + recommended: true + multivalued: true + inlined: true + inlined_as_list: true + had_role: + name: had_role + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/had_role description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:source - slot_uri: dcterms:source - owner: CatalogueRecord + - dcat:hadRole + slot_uri: dcat:hadRole + owner: Relationship domain_of: - - CatalogueRecord + - Relationship range: string - spatial_resolution: - name: spatial_resolution - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/spatial_resolution + has_dataset: + name: has_dataset + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_dataset description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:spatialResolutionInMeters - slot_uri: dcat:spatialResolutionInMeters - owner: Distribution + - dcat:dataset + slot_uri: dcat:dataset + owner: Catalogue domain_of: - - Dataset - - Distribution + - Catalogue range: string - start_date: - name: start_date - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/start_date + has_part: + name: has_part + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_part description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:startDate - slot_uri: dcat:startDate - owner: PeriodOfTime + - dcterms:hasPart + slot_uri: dcterms:hasPart + owner: Entity domain_of: - - PeriodOfTime - range: string - status: - name: status - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/status + - Activity + - AgenticEntity + - Catalogue + - Entity + inverse: part_of + range: Activity + has_policy: + name: has_policy + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_policy description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - adms:status - slot_uri: adms:status + - odrl:hasPolicy + slot_uri: odrl:hasPolicy owner: Distribution domain_of: - Distribution range: string - temporal_coverage: - name: temporal_coverage - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/temporal_coverage - description: This slot is described in more detail within the class in which it - is used. + has_qualitative_attribute: + name: has_qualitative_attribute + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_qualitative_attribute + description: The slot to relate a qualitative attribute to an EvaluatedEntity, + EvaluatedActivity or AgenticEntity + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:temporal - slot_uri: dcterms:temporal - owner: DatasetSeries + - dcterms:relation + slot_uri: dcterms:relation + owner: Entity domain_of: - - Catalogue - - Dataset - - DatasetSeries - range: string - temporal_resolution: - name: temporal_resolution - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/temporal_resolution - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcat:temporalResolution - slot_uri: dcat:temporalResolution - owner: Distribution + - Activity + - AgenticEntity + - Entity + range: QualitativeAttribute + recommended: true + multivalued: true + inlined: true + inlined_as_list: true + has_quantitative_attribute: + name: has_quantitative_attribute + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_quantitative_attribute + description: The slot to relate a quantitative attribute to an EvaluatedEntity, + EvaluatedActivity or AgenticEntity + in_subset: + - domain_agnostic_core + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcterms:relation + slot_uri: dcterms:relation + owner: Entity domain_of: - - Dataset - - Distribution - range: string - theme: - name: theme - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/theme + - Activity + - AgenticEntity + - Entity + range: QuantitativeAttribute + recommended: true + multivalued: true + inlined: true + inlined_as_list: true + has_version: + name: has_version + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_version description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:theme - slot_uri: dcat:theme + - dcat:hasVersion + slot_uri: dcat:hasVersion owner: Dataset domain_of: - - DataService - Dataset range: string - themes: - name: themes - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/themes + homepage: + name: homepage + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/homepage description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:themeTaxonomy - slot_uri: dcat:themeTaxonomy + - foaf:homepage + slot_uri: foaf:homepage owner: Catalogue domain_of: - Catalogue range: string - title: - name: title - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/title - description: This slot is described in more detail within the class in which it - is used. + id: + name: id + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/id + description: A slot to provide an URI for an entity within this schema. + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcterms:title - slot_uri: dcterms:title - owner: TimeInstant + slot_uri: dcatapplus:id + identifier: true + owner: Resource domain_of: - - QuantitativeRange + - CatalysisPlan - Activity - AgenticEntity - - Any - - Attribution - - Catalogue - - CatalogueRecord - - ChecksumAlgorithm - - Concept - - ConceptScheme - - DataService - Dataset - - DatasetSeries - DefinedTerm - - Distribution - Document - Entity - - Frequency - - Geometry - - Identifier - LegalResource - LicenseDocument - - LinguisticSystem - - MediaType - - MediaTypeOrExtent - - PeriodOfTime - - Plan - - Policy - - ProvenanceStatement - - QualitativeAttribute - - QuantitativeAttribute - Resource - - RightsStatement - - Role - - Standard - - SupportiveEntity - - Surrounding - - TimeInstant + range: uriorcurie + required: true + identifier: + name: identifier + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/identifier + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcterms:identifier + slot_uri: dcterms:identifier + owner: Dataset + domain_of: + - Dataset range: string - type: - name: type - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/type + in_series: + name: in_series + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/in_series description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:type - slot_uri: dcterms:type - owner: LicenseDocument + - dcat:inSeries + slot_uri: dcat:inSeries + owner: Dataset domain_of: - - Agent - - ClassifierMixin - Dataset - - LicenseDocument range: string - value: - name: value - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/value - description: A slot to provide the literal value of an attribute. + is_about_activity: + name: is_about_activity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/is_about_activity + description: A slot to provide the EvaluatedActivity a Dataset is about. in_subset: - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - prov:value - slot_uri: prov:value - owner: QuantitativeAttribute + - dcterms:subject + exact_mappings: + - IAO:0000136 + slot_uri: dcterms:subject + owner: Dataset domain_of: - - QualitativeAttribute - - QuantitativeAttribute - range: string - version: - name: version - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/version + - Dataset + range: EvaluatedActivity + recommended: true + multivalued: true + inlined: true + inlined_as_list: true + is_about_entity: + name: is_about_entity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/is_about_entity + description: A slot to provide the EvaluatedEntity a Dataset is about. + in_subset: + - domain_agnostic_core + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcterms:subject + exact_mappings: + - IAO:0000136 + slot_uri: dcterms:subject + owner: Dataset + domain_of: + - Dataset + range: EvaluatedEntity + recommended: true + multivalued: true + inlined: true + inlined_as_list: true + is_referenced_by: + name: is_referenced_by + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/is_referenced_by description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:version - slot_uri: dcat:version + - dcterms:isReferencedBy + slot_uri: dcterms:isReferencedBy owner: Dataset domain_of: - Dataset range: string - version_notes: - name: version_notes - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/version_notes + keyword: + name: keyword + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/keyword description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - adms:versionNotes - slot_uri: adms:versionNotes + - dcat:keyword + slot_uri: dcat:keyword owner: Dataset domain_of: + - DataService - Dataset range: string - was_generated_by: - name: was_generated_by - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/was_generated_by + landing_page: + name: landing_page + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/landing_page description: This slot is described in more detail within the class in which it is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - prov:wasGeneratedBy - slot_uri: prov:wasGeneratedBy - owner: EvaluatedEntity + - dcat:landingPage + slot_uri: dcat:landingPage + owner: Dataset domain_of: + - DataService - Dataset - - EvaluatedEntity range: string - composed_of: - name: composed_of - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/composed_of - description: The slot to provide the chemical entities of which a ChemicalSubstance - is composed of. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + language: + name: language + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/language + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - BFO:0000051 - close_mappings: - - AFX:0000940 - is_a: has_part - slot_uri: BFO:0000051 - owner: ChemicalSubstanceMixin + - dcterms:language + slot_uri: dcterms:language + owner: Distribution domain_of: - - ChemicalSubstanceMixin - range: ChemicalEntity - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - has_concentration: - name: has_concentration - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/has_concentration - description: The slot to provide the Concentration of a ChemicalSubstance. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + - Catalogue + - CatalogueRecord + - Dataset + - Distribution + range: string + licence: + name: licence + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/licence + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:000008 - is_a: has_quantitative_attribute - slot_uri: SIO:000008 - owner: ChemicalSubstanceMixin - domain_of: - - PrecipitationMixin - - UVVisSpectroscopy - - DynamicLightScattering - - ElectroSprayIonizationMassSpectrometry - - ChemicalSubstanceMixin - range: Concentration - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - has_amount: - name: has_amount - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/has_amount - description: The slot to provide the AmountConcentration of a ChemicalSubstance. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + - dcterms:license + slot_uri: dcterms:license + owner: Distribution + domain_of: + - Catalogue + - DataService + - Distribution + range: string + linked_schemas: + name: linked_schemas + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/linked_schemas + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:000008 - is_a: has_quantitative_attribute - slot_uri: SIO:000008 - owner: ChemicalSubstanceMixin + - dcterms:conformsTo + slot_uri: dcterms:conformsTo + owner: Distribution domain_of: - - ChemicalSubstanceMixin - range: AmountOfSubstance - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - has_ph_value: - name: has_ph_value - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/has_ph_value - description: The slot to provide the PHValue of a ChemicalSubstance. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + - Distribution + range: string + listing_date: + name: listing_date + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/listing_date + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:000008 - is_a: has_quantitative_attribute - slot_uri: SIO:000008 - owner: ChemicalSubstanceMixin + - dcterms:issued + slot_uri: dcterms:issued + owner: CatalogueRecord domain_of: - - PrecipitationMixin - - ChemicalSubstanceMixin - range: PHValue - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - inchi: - name: inchi - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/inchi - description: The slot to provide the InChi descriptor of a ChemicalEntity. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + - CatalogueRecord + range: string + media_type: + name: media_type + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/media_type + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:000008 - is_a: has_qualitative_attribute - slot_uri: SIO:000008 - owner: ChemicalEntity + - dcat:mediaType + slot_uri: dcat:mediaType + owner: Distribution domain_of: - - ChemicalEntity - range: InChi - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - inchikey: - name: inchikey - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/inchikey - description: The slot to provide the InChiKey of a ChemicalEntity. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + - Distribution + range: string + modification_date: + name: modification_date + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/modification_date + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:000008 - is_a: has_qualitative_attribute - slot_uri: SIO:000008 - owner: ChemicalEntity + - dcterms:modified + slot_uri: dcterms:modified + owner: Distribution domain_of: - - ChemicalEntity - range: InChIKey - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - smiles: - name: smiles - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/smiles - description: The slot to provide the canonical SMILES descriptor of a ChemicalEntity. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + - Catalogue + - CatalogueRecord + - Dataset + - DatasetSeries + - Distribution + range: string + name: + name: name + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/name + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:000008 - is_a: has_qualitative_attribute - slot_uri: SIO:000008 - owner: ChemicalEntity + - foaf:name + slot_uri: foaf:name + owner: Agent domain_of: - - ChemicalEntity - range: SMILES - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - molecular_formula: - name: molecular_formula - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/molecular_formula - description: The slot to provide the IUPAC formula of a ChemicalEntity. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + - Agent + range: string + notation: + name: notation + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/notation + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:000008 - is_a: has_qualitative_attribute - slot_uri: SIO:000008 - owner: ChemicalEntity + - skos:notation + slot_uri: skos:notation + owner: Identifier domain_of: - - ChemicalEntity - range: MolecularFormula - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - iupac_name: - name: iupac_name - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/iupac_name - description: The slot to provide the IUPAC name of a ChemicalEntity. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + - Identifier + range: string + occurred_in: + name: occurred_in + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/occurred_in + description: The slot to specify the Surrounding in which an Activity took place. + in_subset: + - domain_agnostic_core + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:000008 - is_a: has_qualitative_attribute - slot_uri: SIO:000008 - owner: ChemicalEntity + - prov:atLocation + slot_uri: prov:atLocation + owner: DataGeneratingActivity domain_of: - - ChemicalEntity - range: IUPACName - recommended: true - multivalued: true + - DataGeneratingActivity + range: Surrounding inlined: true inlined_as_list: true - has_molar_mass: - name: has_molar_mass - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/has_molar_mass - description: The slot to provide the MolarMass of a ChemicalEntity. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + other_identifier: + name: other_identifier + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/other_identifier + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:000008 - is_a: has_mass - slot_uri: SIO:000008 - owner: ChemicalEntity + - adms:identifier + slot_uri: adms:identifier + owner: Entity domain_of: - - ChemicalEntity - range: MolarMass - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - used_starting_material: - name: used_starting_material - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/used_starting_material - description: The slot to specify the StartingMaterial(s) of a ChemicalReaction. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + - Activity + - AgenticEntity + - Dataset + - Entity + range: string + packaging_format: + name: packaging_format + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/packaging_format + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - RO:0004009 - is_a: had_input_entity - slot_uri: RO:0004009 - owner: ChemicalReaction + - dcat:packageFormat + slot_uri: dcat:packageFormat + owner: Distribution domain_of: - - ChemicalReaction - range: StartingMaterial - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - used_reactant: - name: used_reactant - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/used_reactant - description: The slot to specify the Reagent(s) of a ChemicalReaction. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + - Distribution + range: string + part_of: + name: part_of + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/part_of + description: A slot to specify a related resource in which the described resource + is physically or logically included. + in_subset: + - domain_agnostic_core + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - RO:0004009 - is_a: had_input_entity - slot_uri: RO:0004009 - owner: ChemicalReaction + - dcterms:isPartOf + slot_uri: dcterms:isPartOf + owner: Entity domain_of: - - ChemicalReaction - range: Reagent - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - generated_product: - name: generated_product - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/generated_product - description: The slot to specify the Product(s) of a ChemicalReaction. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + - Activity + - AgenticEntity + - Entity + inverse: has_part + range: Activity + preferred_label: + name: preferred_label + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/preferred_label + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - RO:0004008 - is_a: had_output_entity - slot_uri: RO:0004008 - owner: ChemicalReaction + - skos:prefLabel + slot_uri: skos:prefLabel + owner: Concept domain_of: - - ChemicalReaction - range: ChemicalProduct - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - used_catalyst: - name: used_catalyst - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/used_catalyst - description: The slot to specify the Catalyst of a ChemicalReaction. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + - Concept + range: string + primary_topic: + name: primary_topic + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/primary_topic + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - RXNO:0000425 - is_a: carried_out_by - slot_uri: RXNO:0000425 - owner: ChemicalReaction + - foaf:primaryTopic + slot_uri: foaf:primaryTopic + owner: CatalogueRecord domain_of: - - ChemicalReaction - range: Catalyst - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - used_solvent: - name: used_solvent - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/used_solvent - description: The slot to specify the chemical substance that had a solvent role - (CHEBI:35223) in a ChemicalReaction. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + - CatalogueRecord + range: string + provenance: + name: provenance + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/provenance + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - prov:wasAssociatedWith - is_a: carried_out_by - slot_uri: prov:wasAssociatedWith - owner: ChemicalReaction + - dcterms:provenance + slot_uri: dcterms:provenance + owner: Dataset domain_of: - - ChemicalReaction - range: DissolvingSubstance - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - has_duration: - name: has_duration - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/has_duration - description: A slot to provide the duration of a ChemicalReaction. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + - Dataset + range: string + publisher: + name: publisher + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/publisher + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - schema:duration - slot_uri: schema:duration - owner: ChemicalReaction + - dcterms:publisher + slot_uri: dcterms:publisher + owner: DatasetSeries domain_of: - - ChemicalReaction - range: duration - used_reactor: - name: used_reactor - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/used_reactor - description: The slot to specify the reactor used in a ChemicalReaction. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + - Catalogue + - DataService + - Dataset + - DatasetSeries + range: string + qualified_attribution: + name: qualified_attribution + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/qualified_attribution + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - prov:wasAssociatedWith - is_a: carried_out_by - slot_uri: prov:wasAssociatedWith - owner: ChemicalReaction + - prov:qualifiedAttribution + slot_uri: prov:qualifiedAttribution + owner: Dataset domain_of: - - ChemicalReaction - range: Reactor - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - has_yield: - name: has_yield - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/has_yield - description: A slot to provide the percentage of how much of the ChemicalProduct - was produced by a ChemicalReaction. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + - Dataset + range: string + qualified_relation: + name: qualified_relation + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/qualified_relation + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:000008 - is_a: has_quantitative_attribute - slot_uri: SIO:000008 - owner: ChemicalReaction + - dcat:qualifiedRelation + slot_uri: dcat:qualifiedRelation + owner: Dataset domain_of: - - ReactorPerformanceMeasures - - ChemicalReaction - range: Yield - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - has_molar_equivalent: - name: has_molar_equivalent - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/has_molar_equivalent - description: A slot to provide the MolarEquivalent of a ChemicalSubstance, such - as the DissolvingSubstance, Starting Material or Reactant, within the context - of a chemical reaction. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + - Dataset + range: string + rdf_type: + name: rdf_type + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/rdf_type + description: The slot to specify the ontology class that is instantiated by an + entity. + in_subset: + - domain_agnostic_core + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:000008 - is_a: has_quantitative_attribute - slot_uri: SIO:000008 - owner: Catalyst + - rdf:type + slot_uri: rdf:type + owner: ClassifierMixin domain_of: - - StartingMaterial - - Reagent - - Catalyst - range: MolarEquivalent + - ClassifierMixin + range: DefinedTerm recommended: true - multivalued: true inlined: true - inlined_as_list: true - has_percentage_of_total: - name: has_percentage_of_total - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/has_percentage_of_total - description: A slot to specify the percentage of a specific ChemicalSubstance - in relation to the total amount of that same substance used across a multi-step - reaction. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + inlined_as_list: false + realized_plan: + name: realized_plan + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/realized_plan + description: The slot to specify the Plan (i.e. directive information or procedure) + that was realized by an Activity. + in_subset: + - domain_agnostic_core + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:000008 - is_a: has_quantitative_attribute - slot_uri: SIO:000008 - owner: DissolvingSubstance + - prov:used + slot_uri: prov:used + owner: DataGeneratingActivity domain_of: - - DissolvingSubstance - range: PercentageOfTotal - recommended: true - multivalued: true + - DataGeneratingActivity + range: Plan inlined: true inlined_as_list: true - has_reaction_step: - name: has_reaction_step - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/has_reaction_step - description: A slot to specify a step (part) of a ChemicalReaction that is itself - a ChemicalReaction. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ - mappings: - - BFO:0000051 - is_a: has_part - slot_uri: BFO:0000051 - owner: ChemicalReaction - domain_of: - - ChemicalReaction - range: ChemicalReaction - multivalued: true - inlined: true - inlined_as_list: true - alternative_label: - name: alternative_label - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/alternative_label - description: The slot to specify an alternative label, name or title for a MaterialEntity. - todos: - - Should probably rather declared on Entity or in some common metadata mixin instead. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ + record: + name: record + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/record + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - skos:altLabel - slot_uri: skos:altLabel - owner: MaterialisticMixin + - dcat:record + slot_uri: dcat:record + owner: Catalogue domain_of: - - MaterialisticMixin + - Catalogue range: string - has_physical_state: - name: has_physical_state - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/has_physical_state - description: The slot to specify the physical state of a MaterialEntity. - todos: - - Find out how to make this a subproperty of has_qualitative_attribute, as it - currently throws the error 'physical_state enumerations cannot be inlined' due - to the fact that we are using an enum here. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ - mappings: - - SIO:000008 - slot_uri: SIO:000008 - owner: MaterialisticMixin - domain_of: - - MaterialisticMixin - range: PhysicalStateEnum - multivalued: false - inlined: false - has_temperature: - name: has_temperature - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/has_temperature - description: The slot to provide the Temperature of a MaterialEntity or an Activity, - whereas the temperature of the Activity is ontologically rooted in the temperature - of the material entities that participate in the Activity. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ + related_resource: + name: related_resource + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/related_resource + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:000008 - is_a: has_quantitative_attribute - slot_uri: SIO:000008 - owner: MaterialisticMixin + - dcterms:relation + slot_uri: dcterms:relation + owner: Dataset domain_of: - - SonochemicalSynthesis - - PhotoluminescenceMixin - - ElectrochemistryMixin - - PowderXRD - - SingleCrystalXRD - - XRayAbsorptionSpectroscopy - - InfraredSpectroscopy - - DRIFTS - - RamanSpectroscopy - - NMRSpectroscopy - - DynamicLightScattering - - SizeExclusionChromatography - - HighPerformanceLiquidChromatographyMassSpectrometry - - Microkinetics - - MonteCarlo - - AqueousStability - ChemicalReaction - - MaterialisticMixin - range: Temperature - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - has_mass: - name: has_mass - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/has_mass - description: The slot to provide the Mass of a MaterialEntity. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ + - Dataset + range: string + relation: + name: relation + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/relation + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:000008 - is_a: has_quantitative_attribute - slot_uri: SIO:000008 - owner: MaterialisticMixin + - dcterms:relation + slot_uri: dcterms:relation + owner: Relationship domain_of: - - MaterialisticMixin - range: Mass - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - has_volume: - name: has_volume - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/has_volume - description: The slot to provide the Volume of a MaterialEntity. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ + - Relationship + range: string + release_date: + name: release_date + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/release_date + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:000008 - is_a: has_quantitative_attribute - slot_uri: SIO:000008 - owner: MaterialisticMixin + - dcterms:issued + slot_uri: dcterms:issued + owner: Distribution domain_of: - - CSTR - - MaterialisticMixin - range: Volume - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - has_density: - name: has_density - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/has_density - description: The slot to provide the Density of a MaterialEntity. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ + - Catalogue + - Dataset + - DatasetSeries + - Distribution + range: string + rights: + name: rights + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/rights + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:000008 - is_a: has_quantitative_attribute - slot_uri: SIO:000008 - owner: MaterialisticMixin + - dcterms:rights + slot_uri: dcterms:rights + owner: Distribution domain_of: - - MaterialisticMixin - range: Density - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - has_pressure: - name: has_pressure - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/has_pressure - description: The slot to provide data about the pressure of a MaterialEntity or - an Activity, whereas the Pressure of an Activity is ontologically a quality - borne by the material entities participating in the Activity. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ + - Catalogue + - Distribution + range: string + sample: + name: sample + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/sample + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:000008 - is_a: has_quantitative_attribute - slot_uri: SIO:000008 - owner: MaterialisticMixin + - adms:sample + slot_uri: adms:sample + owner: Dataset domain_of: - - Microkinetics - - ChemicalReaction - - MaterialisticMixin - range: Pressure - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - derived_from: - name: derived_from - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/derived_from - description: The slot to specify the Entity from which a Sample was derived. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ + - Dataset + range: string + serves_dataset: + name: serves_dataset + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/serves_dataset + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - prov:wasDerivedFrom - exact_mappings: - - SIO:000244 - close_mappings: - - BFO:0000050 - - dcterms:partOf - slot_uri: prov:wasDerivedFrom - owner: MaterialSample + - dcat:servesDataset + slot_uri: dcat:servesDataset + owner: DataService domain_of: - - MaterialSample - range: Entity - inlined: true - inlined_as_list: false - quantitativeRange__min_value: - name: quantitativeRange__min_value - description: Lower bound of the range. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ + - DataService + range: string + service: + name: service + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/service + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - coremeta4cat:minValue - slot_uri: coremeta4cat:minValue - alias: min_value - owner: QuantitativeRange + - dcat:service + slot_uri: dcat:service + owner: Catalogue domain_of: - - QuantitativeRange - range: float - quantitativeRange__max_value: - name: quantitativeRange__max_value - description: Upper bound of the range. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - coremeta4cat:maxValue - slot_uri: coremeta4cat:maxValue - alias: max_value - owner: QuantitativeRange - domain_of: - - QuantitativeRange - range: float - quantitativeRange__unit: - name: quantitativeRange__unit - description: 'Unit shared by both bounds, as a QUDT unit term - - (e.g. id: http://qudt.org/vocab/unit/DegreeCelsius, title: "Degree Celsius").' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ + - Catalogue + range: string + source: + name: source + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/source + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - qudt:unit - slot_uri: qudt:unit - alias: unit - owner: QuantitativeRange + - dcterms:source + slot_uri: dcterms:source + owner: Dataset domain_of: - - QuantitativeRange - range: DefinedTerm - quantitativeRange__has_quantity_type: - name: quantitativeRange__has_quantity_type - description: 'QUDT QuantityKind term for the kind of quantity this range describes - - (e.g. id: http://qudt.org/vocab/quantitykind/Temperature, title: "Temperature").' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ + - Dataset + range: string + source_metadata: + name: source_metadata + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/source_metadata + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - qudt:hasQuantityKind - slot_uri: qudt:hasQuantityKind - alias: has_quantity_type - owner: QuantitativeRange + - dcterms:source + slot_uri: dcterms:source + owner: CatalogueRecord domain_of: - - QuantitativeRange - range: DefinedTerm - definedTerm__from_CV: - name: definedTerm__from_CV - description: The URL of the controlled vocabulary. + - CatalogueRecord + range: string + spatial_resolution: + name: spatial_resolution + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/spatial_resolution + description: This slot is described in more detail within the class in which it + is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - schema:inDefinedTermSet - slot_uri: schema:inDefinedTermSet - alias: from_CV - owner: DefinedTerm + - dcat:spatialResolutionInMeters + slot_uri: dcat:spatialResolutionInMeters + owner: Distribution domain_of: - - DefinedTerm - range: uriorcurie - quantitativeAttribute__has_quantity_type: - name: quantitativeAttribute__has_quantity_type - description: The type of quality that is quantifiable according to the QUDT ontology. + - Dataset + - Distribution + range: string + start_date: + name: start_date + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/start_date + description: This slot is described in more detail within the class in which it + is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - qudt:hasQuantityKind - slot_uri: qudt:hasQuantityKind - alias: has_quantity_type - owner: QuantitativeAttribute + - dcat:startDate + slot_uri: dcat:startDate + owner: PeriodOfTime domain_of: - - QuantitativeAttribute - range: DefinedTerm - bindings: - - range: QUDTQuantityKindEnum - obligation_level: - text: RECOMMENDED - description: The metadata element is recommended to be present in the model - binds_value_of: id - description: Binds the type of a quantifiable attribute to a QUDT Quantity Kind - instance from the QUDT Quantity Kind vocabulary. - required: true - quantitativeAttribute__unit: - name: quantitativeAttribute__unit + - PeriodOfTime + range: string + status: + name: status + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/status + description: This slot is described in more detail within the class in which it + is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - qudt:unit - slot_uri: qudt:unit - alias: unit - owner: QuantitativeAttribute + - adms:status + slot_uri: adms:status + owner: Distribution domain_of: - - QuantitativeAttribute - range: DefinedTerm - bindings: - - range: QUDTUnitEnum - obligation_level: - text: RECOMMENDED - description: The metadata element is recommended to be present in the model - binds_value_of: id - description: Restricts the allowable defined terms to the QUDT Unit vocabulary. - recommended: true - CatalysisDataset_rdf_type: - name: CatalysisDataset_rdf_type - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/rdf_type - description: 'The catalysis research field, provided as a voc4cat term from - - CatalysisResearchFieldEnum. This is the primary machine-actionable - - classification of the dataset''s domain.' - in_subset: - - domain_agnostic_core + - Distribution + range: string + temporal_coverage: + name: temporal_coverage + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/temporal_coverage + description: This slot is described in more detail within the class in which it + is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - rdf:type - is_a: rdf_type - domain: CatalysisDataset - slot_uri: rdf:type - alias: rdf_type - owner: CatalysisDataset + - dcterms:temporal + slot_uri: dcterms:temporal + owner: DatasetSeries domain_of: - - CatalysisDataset - is_usage_slot: true - usage_slot_name: rdf_type - range: DefinedTerm - bindings: - - range: CatalysisResearchFieldEnum - obligation_level: - text: RECOMMENDED - description: The metadata element is recommended to be present in the model - binds_value_of: id - description: Classify the dataset by catalysis research field using voc4cat. - recommended: true - inlined: true - inlined_as_list: false - CatalysisDataset_was_generated_by: - name: CatalysisDataset_was_generated_by - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/was_generated_by - description: 'The DataGeneratingActivity (Synthesis, Characterization, or Simulation) - - that produced this dataset.' + - Catalogue + - Dataset + - DatasetSeries + range: string + temporal_resolution: + name: temporal_resolution + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/temporal_resolution + description: This slot is described in more detail within the class in which it + is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - prov:wasGeneratedBy - is_a: was_generated_by - domain: CatalysisDataset - slot_uri: prov:wasGeneratedBy - alias: was_generated_by - owner: CatalysisDataset + - dcat:temporalResolution + slot_uri: dcat:temporalResolution + owner: Distribution domain_of: - - CatalysisDataset - is_usage_slot: true - usage_slot_name: was_generated_by - range: DataGeneratingActivity - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - CatalysisDataset_is_about_activity: - name: CatalysisDataset_is_about_activity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/is_about_activity - description: 'The catalytic Reaction that this dataset is about (e.g. a dataset - of - - catalytic performance measurements is about the Reaction being studied).' - in_subset: - - domain_agnostic_core + - Dataset + - Distribution + range: string + theme: + name: theme + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/theme + description: This slot is described in more detail within the class in which it + is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:subject - exact_mappings: - - IAO:0000136 - is_a: is_about_activity - domain: CatalysisDataset - slot_uri: dcterms:subject - alias: is_about_activity - owner: CatalysisDataset + - dcat:theme + slot_uri: dcat:theme + owner: Dataset domain_of: - - CatalysisDataset - is_usage_slot: true - usage_slot_name: is_about_activity - range: EvaluatedActivity - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - CatalysisDataset_is_about_entity: - name: CatalysisDataset_is_about_entity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/is_about_entity - description: The catalyst sample, material, or other Entity that this dataset - is about. - in_subset: - - domain_agnostic_core + - DataService + - Dataset + range: string + themes: + name: themes + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/themes + description: This slot is described in more detail within the class in which it + is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:subject - exact_mappings: - - IAO:0000136 - is_a: is_about_entity - domain: CatalysisDataset - slot_uri: dcterms:subject - alias: is_about_entity - owner: CatalysisDataset + - dcat:themeTaxonomy + slot_uri: dcat:themeTaxonomy + owner: Catalogue domain_of: - - CatalysisDataset - is_usage_slot: true - usage_slot_name: is_about_entity - range: EvaluatedEntity - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - Synthesis_nominal_composition: - name: Synthesis_nominal_composition - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/nominal_composition - description: Nominal elemental or chemical composition of the catalyst (e.g. 5wt% - Pt/Al2O3). - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ + - Catalogue + range: string + title: + name: title + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/title + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - coremeta4cat:nominal_composition - is_a: nominal_composition - domain: Synthesis - slot_uri: coremeta4cat:nominal_composition - alias: nominal_composition - owner: Synthesis + - dcterms:title + slot_uri: dcterms:title + owner: TimeInstant domain_of: - - Synthesis - is_usage_slot: true - usage_slot_name: nominal_composition + - QuantitativeRange + - Activity + - AgenticEntity + - Any + - Attribution + - Catalogue + - CatalogueRecord + - ChecksumAlgorithm + - Concept + - ConceptScheme + - DataService + - Dataset + - DatasetSeries + - DefinedTerm + - Distribution + - Document + - Entity + - Frequency + - Geometry + - Identifier + - LegalResource + - LicenseDocument + - LinguisticSystem + - MediaType + - MediaTypeOrExtent + - PeriodOfTime + - Plan + - Policy + - ProvenanceStatement + - QualitativeAttribute + - QuantitativeAttribute + - Resource + - RightsStatement + - Role + - Standard + - SupportiveEntity + - Surrounding + - TimeInstant range: string - required: true - multivalued: true - Synthesis_catalyst_measured_properties: - name: Synthesis_catalyst_measured_properties - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/catalyst_measured_properties - description: 'Key measured properties of the resulting catalyst - - (e.g. BET surface area, sieve fraction, molar ratio).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ + type: + name: type + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/type + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - coremeta4cat:catalyst_measured_properties - is_a: catalyst_measured_properties - domain: Synthesis - slot_uri: coremeta4cat:catalyst_measured_properties - alias: catalyst_measured_properties - owner: Synthesis + - dcterms:type + slot_uri: dcterms:type + owner: LicenseDocument domain_of: - - Synthesis - is_usage_slot: true - usage_slot_name: catalyst_measured_properties + - Agent + - ClassifierMixin + - Dataset + - LicenseDocument range: string - required: true - multivalued: true - Synthesis_had_input_entity: - name: Synthesis_had_input_entity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/had_input_entity - description: The Precursor(s) consumed during this Synthesis. + value: + name: value + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/value + description: A slot to provide the literal value of an attribute. in_subset: - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - prov:used - is_a: had_input_entity - domain: Synthesis - slot_uri: prov:used - alias: had_input_entity - owner: Synthesis + - prov:value + slot_uri: prov:value + owner: QuantitativeAttribute domain_of: - - Synthesis - is_usage_slot: true - usage_slot_name: had_input_entity - range: Precursor - required: true + - QualitativeAttribute + - QuantitativeAttribute + range: string + version: + name: version + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/version + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcat:version + slot_uri: dcat:version + owner: Dataset + domain_of: + - Dataset + range: string + version_notes: + name: version_notes + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/version_notes + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - adms:versionNotes + slot_uri: adms:versionNotes + owner: Dataset + domain_of: + - Dataset + range: string + was_generated_by: + name: was_generated_by + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/was_generated_by + description: This slot is described in more detail within the class in which it + is used. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - prov:wasGeneratedBy + slot_uri: prov:wasGeneratedBy + owner: EvaluatedEntity + domain_of: + - Dataset + - EvaluatedEntity + range: string + composed_of: + name: composed_of + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/composed_of + description: The slot to provide the chemical entities of which a ChemicalSubstance + is composed of. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + mappings: + - BFO:0000051 + close_mappings: + - AFX:0000940 + is_a: has_part + slot_uri: BFO:0000051 + owner: ChemicalSubstanceMixin + domain_of: + - ChemicalSubstanceMixin + range: ChemicalEntity recommended: true multivalued: true inlined: true inlined_as_list: true - Synthesis_had_output_entity: - name: Synthesis_had_output_entity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/had_output_entity - description: The CatalystSample produced by this Synthesis. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + has_concentration: + name: has_concentration + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/has_concentration + description: The slot to provide the Concentration of a ChemicalSubstance. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ mappings: - - prov:generated - is_a: had_output_entity - domain: Synthesis - slot_uri: prov:generated - alias: had_output_entity - owner: Synthesis + - SIO:000008 + is_a: has_quantitative_attribute + slot_uri: SIO:000008 + owner: ChemicalSubstanceMixin domain_of: - - Synthesis - is_usage_slot: true - usage_slot_name: had_output_entity - range: CatalystSample + - UVVisSpectroscopy + - DynamicLightScattering + - ElectroSprayIonizationMassSpectrometry + - ChemicalSubstanceMixin + range: Concentration recommended: true multivalued: true inlined: true inlined_as_list: true - Synthesis_realized_plan: - name: Synthesis_realized_plan - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/realized_plan - description: The PreparationMethod (protocol) realized in this Synthesis. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + has_amount: + name: has_amount + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/has_amount + description: The slot to provide the AmountConcentration of a ChemicalSubstance. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ mappings: - - prov:used - is_a: realized_plan - domain: Synthesis - slot_uri: prov:used - alias: realized_plan - owner: Synthesis + - SIO:000008 + is_a: has_quantitative_attribute + slot_uri: SIO:000008 + owner: ChemicalSubstanceMixin domain_of: - - Synthesis - is_usage_slot: true - usage_slot_name: realized_plan - range: PreparationMethod - required: true + - ChemicalSubstanceMixin + range: AmountOfSubstance + recommended: true + multivalued: true inlined: true inlined_as_list: true - Synthesis_storage_conditions: - name: Synthesis_storage_conditions - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/storage_conditions - description: "Conditions under which the catalyst is stored (e.g. inert atmosphere,\ - \ 4\xB0C)." - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ + has_ph_value: + name: has_ph_value + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/has_ph_value + description: The slot to provide the PHValue of a ChemicalSubstance. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ mappings: - - VOC4CAT:0008105 - is_a: storage_conditions - domain: Synthesis - slot_uri: VOC4CAT:0008105 - alias: storage_conditions - owner: Synthesis + - SIO:000008 + is_a: has_quantitative_attribute + slot_uri: SIO:000008 + owner: ChemicalSubstanceMixin domain_of: - - Synthesis - is_usage_slot: true - usage_slot_name: storage_conditions - range: string + - PrecipitationMixin + - ChemicalSubstanceMixin + range: PHValue recommended: true multivalued: true - Synthesis_carried_out_by: - name: Synthesis_carried_out_by - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/carried_out_by - description: 'Equipment or synthesis device used to carry out this preparation - step. - - Provide a Device instance (e.g. rotary evaporator, autoclave, furnace).' - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + inlined: true + inlined_as_list: true + inchi: + name: inchi + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/inchi + description: The slot to provide the InChi descriptor of a ChemicalEntity. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ mappings: - - prov:wasAssociatedWith - is_a: carried_out_by - domain: Synthesis - slot_uri: prov:wasAssociatedWith - alias: carried_out_by - owner: Synthesis + - SIO:000008 + is_a: has_qualitative_attribute + slot_uri: SIO:000008 + owner: ChemicalEntity domain_of: - - Synthesis - is_usage_slot: true - usage_slot_name: carried_out_by - range: Device + - ChemicalEntity + range: InChi recommended: true multivalued: true inlined: true inlined_as_list: true - Precursor_precursor_quantity: - name: Precursor_precursor_quantity - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/precursor_quantity - description: Quantity of precursor used in synthesis. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ + inchikey: + name: inchikey + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/inchikey + description: The slot to provide the InChiKey of a ChemicalEntity. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ mappings: - - VOC4CAT:0008118 - is_a: precursor_quantity - domain: Precursor - slot_uri: VOC4CAT:0008118 - alias: precursor_quantity - owner: Precursor + - SIO:000008 + is_a: has_qualitative_attribute + slot_uri: SIO:000008 + owner: ChemicalEntity domain_of: - - Precursor - is_usage_slot: true - usage_slot_name: precursor_quantity - range: Mass - required: true + - ChemicalEntity + range: InChIKey + recommended: true multivalued: true inlined: true inlined_as_list: true - CatalystSample_derived_from: - name: CatalystSample_derived_from - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/derived_from - description: 'The Precursor(s) or other MaterialSample from which this - - CatalystSample was produced.' - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ - mappings: - - prov:wasDerivedFrom - exact_mappings: - - SIO:000244 - close_mappings: - - BFO:0000050 - - dcterms:partOf - is_a: derived_from - domain: CatalystSample - slot_uri: prov:wasDerivedFrom - alias: derived_from - owner: CatalystSample - domain_of: - - CatalystSample - is_usage_slot: true - usage_slot_name: derived_from - range: MaterialSample - inlined: true - inlined_as_list: false - Characterization_carried_out_by: - name: Characterization_carried_out_by - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/carried_out_by - description: 'The analytical instrument used to carry out this characterization. - - Provide a Device instance (e.g. XRD diffractometer, TEM, NMR spectrometer).' - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + smiles: + name: smiles + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/smiles + description: The slot to provide the canonical SMILES descriptor of a ChemicalEntity. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ mappings: - - prov:wasAssociatedWith - is_a: carried_out_by - domain: Characterization - slot_uri: prov:wasAssociatedWith - alias: carried_out_by - owner: Characterization + - SIO:000008 + is_a: has_qualitative_attribute + slot_uri: SIO:000008 + owner: ChemicalEntity domain_of: - - Characterization - is_usage_slot: true - usage_slot_name: carried_out_by - range: Device - required: true + - ChemicalEntity + range: SMILES recommended: true multivalued: true inlined: true inlined_as_list: true - Characterization_evaluated_entity: - name: Characterization_evaluated_entity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/evaluated_entity - description: The catalyst sample or material being characterized. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + molecular_formula: + name: molecular_formula + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/molecular_formula + description: The slot to provide the IUPAC formula of a ChemicalEntity. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ mappings: - - prov:used - is_a: evaluated_entity - domain: Characterization - slot_uri: prov:used - alias: evaluated_entity - owner: Characterization + - SIO:000008 + is_a: has_qualitative_attribute + slot_uri: SIO:000008 + owner: ChemicalEntity domain_of: - - Characterization - is_usage_slot: true - usage_slot_name: evaluated_entity - range: EvaluatedEntity + - ChemicalEntity + range: MolecularFormula recommended: true multivalued: true inlined: true inlined_as_list: true - Characterization_realized_plan: - name: Characterization_realized_plan - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/realized_plan - description: The CharacterizationTechnique (protocol) realized in this Characterization. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + iupac_name: + name: iupac_name + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/iupac_name + description: The slot to provide the IUPAC name of a ChemicalEntity. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ mappings: - - prov:used - is_a: realized_plan - domain: Characterization - slot_uri: prov:used - alias: realized_plan - owner: Characterization + - SIO:000008 + is_a: has_qualitative_attribute + slot_uri: SIO:000008 + owner: ChemicalEntity domain_of: - - Characterization - is_usage_slot: true - usage_slot_name: realized_plan - range: CharacterizationTechnique - required: true + - ChemicalEntity + range: IUPACName + recommended: true + multivalued: true inlined: true inlined_as_list: true - Characterization_rdf_type: - name: Characterization_rdf_type - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/rdf_type - description: 'The type of characterization technique as an ontology term, e.g. - - CHMO:0000158 (powder XRD), CHMO:0000404 (XPS), VOC4CAT:0000075 (SEM).' - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + has_molar_mass: + name: has_molar_mass + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/has_molar_mass + description: The slot to provide the MolarMass of a ChemicalEntity. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ mappings: - - rdf:type - is_a: rdf_type - domain: Characterization - slot_uri: rdf:type - alias: rdf_type - owner: Characterization + - SIO:000008 + is_a: has_mass + slot_uri: SIO:000008 + owner: ChemicalEntity domain_of: - - Characterization - is_usage_slot: true - usage_slot_name: rdf_type - range: DefinedTerm + - ChemicalEntity + range: MolarMass recommended: true + multivalued: true inlined: true - inlined_as_list: false - CatalyticReaction_rdf_type: - name: CatalyticReaction_rdf_type - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/rdf_type - description: 'The type of catalytic reaction as an ontology term (e.g. VOC4CAT:0007010 - - for a specific reaction type, or a ChemO/RXNO term).' - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + inlined_as_list: true + alternative_label: + name: alternative_label + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/alternative_label + description: The slot to specify an alternative label, name or title for a MaterialEntity. + todos: + - Should probably rather declared on Entity or in some common metadata mixin instead. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ mappings: - - rdf:type - is_a: rdf_type - domain: CatalyticReaction - slot_uri: rdf:type - alias: rdf_type - owner: CatalyticReaction + - skos:altLabel + slot_uri: skos:altLabel + owner: MaterialisticMixin domain_of: - - CatalyticReaction - is_usage_slot: true - usage_slot_name: rdf_type - range: DefinedTerm - recommended: true - inlined: true - inlined_as_list: false - CatalyticReaction_carried_out_by: - name: CatalyticReaction_carried_out_by - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/carried_out_by - description: 'The reactor in which the Reaction takes place. - - Must be a Reactor instance (a Device subclass specific to catalytic - - reaction vessels, e.g. FixedBedReactor, CSTR, Autoclave).' - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - MaterialisticMixin + range: string + has_physical_state: + name: has_physical_state + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/has_physical_state + description: The slot to specify the physical state of a MaterialEntity. + todos: + - Find out how to make this a subproperty of has_qualitative_attribute, as it + currently throws the error 'physical_state enumerations cannot be inlined' due + to the fact that we are using an enum here. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ mappings: - - prov:wasAssociatedWith - is_a: carried_out_by - domain: CatalyticReaction - slot_uri: prov:wasAssociatedWith - alias: carried_out_by - owner: CatalyticReaction + - SIO:000008 + slot_uri: SIO:000008 + owner: MaterialisticMixin domain_of: - - CatalyticReaction - is_usage_slot: true - usage_slot_name: carried_out_by - range: ChemicalReactor - required: true - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - CatalyticReaction_had_input_entity: - name: CatalyticReaction_had_input_entity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/had_input_entity - description: The reactant chemicals or feeds entering the reactor. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - MaterialisticMixin + range: PhysicalStateEnum + multivalued: false + inlined: false + has_temperature: + name: has_temperature + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/has_temperature + description: The slot to provide the Temperature of a MaterialEntity or an Activity, + whereas the temperature of the Activity is ontologically rooted in the temperature + of the material entities that participate in the Activity. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ mappings: - - prov:used - is_a: had_input_entity - domain: CatalyticReaction - slot_uri: prov:used - alias: had_input_entity - owner: CatalyticReaction + - SIO:000008 + is_a: has_quantitative_attribute + slot_uri: SIO:000008 + owner: MaterialisticMixin domain_of: - - CatalyticReaction - is_usage_slot: true - usage_slot_name: had_input_entity - range: EvaluatedEntity + - SonochemicalSynthesis + - PhotoluminescenceMixin + - ElectrochemistryMixin + - PowderXRD + - SingleCrystalXRD + - XRayAbsorptionSpectroscopy + - InfraredSpectroscopy + - DRIFTS + - RamanSpectroscopy + - NMRSpectroscopy + - DynamicLightScattering + - SizeExclusionChromatography + - HighPerformanceLiquidChromatographyMassSpectrometry + - Microkinetics + - MonteCarlo + - AqueousStability + - ChemicalReaction + - MaterialisticMixin + range: Temperature recommended: true multivalued: true inlined: true inlined_as_list: true - CatalyticReaction_product_identification_method: - name: CatalyticReaction_product_identification_method - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/product_identification_method - description: 'The analytical method used to identify and/or quantify reaction - products. - - Should reference a CharacterizationTechnique instance (e.g. GCMS, HPLC_MS). - - The abstract stub ProductIdentificationMethod is retained for backward compatibility.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + has_mass: + name: has_mass + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/has_mass + description: The slot to provide the Mass of a MaterialEntity. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ mappings: - - coremeta4cat:product_identification_method - is_a: product_identification_method - domain: CatalyticReaction - slot_uri: coremeta4cat:product_identification_method - alias: product_identification_method - owner: CatalyticReaction + - SIO:000008 + is_a: has_quantitative_attribute + slot_uri: SIO:000008 + owner: MaterialisticMixin domain_of: - - CatalyticReaction - is_usage_slot: true - usage_slot_name: product_identification_method - range: ProductIdentificationMethod - required: true + - MaterialisticMixin + range: Mass + recommended: true multivalued: true inlined: true inlined_as_list: true - Simulation_rdf_type: - name: Simulation_rdf_type - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/rdf_type - description: 'The type of simulation method as an ontology term (e.g. coremeta4cat:DFT, - - NCIT:C18097 for MD, coremeta4cat:Microkinetics). This is the primary - - machine-actionable classification of the simulation type.' - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + has_volume: + name: has_volume + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/has_volume + description: The slot to provide the Volume of a MaterialEntity. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ mappings: - - rdf:type - is_a: rdf_type - domain: Simulation - slot_uri: rdf:type - alias: rdf_type - owner: Simulation + - SIO:000008 + is_a: has_quantitative_attribute + slot_uri: SIO:000008 + owner: MaterialisticMixin domain_of: - - Simulation - is_usage_slot: true - usage_slot_name: rdf_type - range: DefinedTerm + - MaterialisticMixin + range: Volume recommended: true - inlined: true - inlined_as_list: false - Simulation_realized_plan: - name: Simulation_realized_plan - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/realized_plan - description: The SimulationMethod (protocol) realized in this Simulation. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - prov:used - is_a: realized_plan - domain: Simulation - slot_uri: prov:used - alias: realized_plan - owner: Simulation - domain_of: - - Simulation - is_usage_slot: true - usage_slot_name: realized_plan - range: SimulationMethod - required: true + multivalued: true inlined: true inlined_as_list: true - Simulation_carried_out_by: - name: Simulation_carried_out_by - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/carried_out_by - description: The simulation software used, provided as a Software agent instance. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + has_density: + name: has_density + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/has_density + description: The slot to provide the Density of a MaterialEntity. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ mappings: - - prov:wasAssociatedWith - is_a: carried_out_by - domain: Simulation - slot_uri: prov:wasAssociatedWith - alias: carried_out_by - owner: Simulation + - SIO:000008 + is_a: has_quantitative_attribute + slot_uri: SIO:000008 + owner: MaterialisticMixin domain_of: - - Simulation - is_usage_slot: true - usage_slot_name: carried_out_by - range: AgenticEntity + - MaterialisticMixin + range: Density recommended: true multivalued: true inlined: true inlined_as_list: true - Simulation_evaluated_entity: - name: Simulation_evaluated_entity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/evaluated_entity - description: The catalyst model, surface slab, or molecule being simulated. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + has_pressure: + name: has_pressure + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/has_pressure + description: The slot to provide data about the pressure of a MaterialEntity or + an Activity, whereas the Pressure of an Activity is ontologically a quality + borne by the material entities participating in the Activity. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ mappings: - - prov:used - is_a: evaluated_entity - domain: Simulation - slot_uri: prov:used - alias: evaluated_entity - owner: Simulation + - SIO:000008 + is_a: has_quantitative_attribute + slot_uri: SIO:000008 + owner: MaterialisticMixin domain_of: - - Simulation - is_usage_slot: true - usage_slot_name: evaluated_entity - range: EvaluatedEntity + - Microkinetics + - ChemicalReaction + - MaterialisticMixin + range: Pressure recommended: true multivalued: true inlined: true inlined_as_list: true - SubstanceSampleCharacterizationDataset_was_generated_by: - name: SubstanceSampleCharacterizationDataset_was_generated_by - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/was_generated_by - description: The slot to specify the SubstanceCharacterization activity that produced - this dataset. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + derived_from: + name: derived_from + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/derived_from + description: The slot to specify the Entity from which a Sample was derived. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ mappings: - - prov:wasGeneratedBy - is_a: was_generated_by - domain: SubstanceSampleCharacterizationDataset - slot_uri: prov:wasGeneratedBy - alias: was_generated_by - owner: SubstanceSampleCharacterizationDataset + - prov:wasDerivedFrom + exact_mappings: + - SIO:000244 + close_mappings: + - BFO:0000050 + - dcterms:partOf + slot_uri: prov:wasDerivedFrom + owner: MaterialSample domain_of: - - SubstanceSampleCharacterizationDataset - is_usage_slot: true - usage_slot_name: was_generated_by - range: SubstanceSampleCharacterization - multivalued: true + - MaterialSample + range: Entity inlined: true - inlined_as_list: true - SubstanceSampleCharacterizationDataset_is_about_entity: - name: SubstanceSampleCharacterizationDataset_is_about_entity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/is_about_entity - description: The slot to specify the SubstanceSample this dataset is about. + inlined_as_list: false + quantitativeRange__min_value: + name: quantitativeRange__min_value + description: Lower bound of the range. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ + mappings: + - coremeta4cat:minValue + slot_uri: coremeta4cat:minValue + alias: min_value + owner: QuantitativeRange + domain_of: + - QuantitativeRange + range: float + quantitativeRange__max_value: + name: quantitativeRange__max_value + description: Upper bound of the range. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ + mappings: + - coremeta4cat:maxValue + slot_uri: coremeta4cat:maxValue + alias: max_value + owner: QuantitativeRange + domain_of: + - QuantitativeRange + range: float + quantitativeRange__unit: + name: quantitativeRange__unit + description: 'Unit shared by both bounds, as a QUDT unit term + + (e.g. id: http://qudt.org/vocab/unit/DegreeCelsius, title: "Degree Celsius").' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ + mappings: + - qudt:unit + slot_uri: qudt:unit + alias: unit + owner: QuantitativeRange + domain_of: + - QuantitativeRange + range: DefinedTerm + quantitativeRange__has_quantity_type: + name: quantitativeRange__has_quantity_type + description: 'QUDT QuantityKind term for the kind of quantity this range describes + + (e.g. id: http://qudt.org/vocab/quantitykind/Temperature, title: "Temperature").' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ + mappings: + - qudt:hasQuantityKind + slot_uri: qudt:hasQuantityKind + alias: has_quantity_type + owner: QuantitativeRange + domain_of: + - QuantitativeRange + range: DefinedTerm + definedTerm__from_CV: + name: definedTerm__from_CV + description: The URL of the controlled vocabulary. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - schema:inDefinedTermSet + slot_uri: schema:inDefinedTermSet + alias: from_CV + owner: DefinedTerm + domain_of: + - DefinedTerm + range: uriorcurie + quantitativeAttribute__has_quantity_type: + name: quantitativeAttribute__has_quantity_type + description: The type of quality that is quantifiable according to the QUDT ontology. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - qudt:hasQuantityKind + slot_uri: qudt:hasQuantityKind + alias: has_quantity_type + owner: QuantitativeAttribute + domain_of: + - QuantitativeAttribute + range: DefinedTerm + bindings: + - range: QUDTQuantityKindEnum + obligation_level: + text: RECOMMENDED + description: The metadata element is recommended to be present in the model + binds_value_of: id + description: Binds the type of a quantifiable attribute to a QUDT Quantity Kind + instance from the QUDT Quantity Kind vocabulary. + required: true + quantitativeAttribute__unit: + name: quantitativeAttribute__unit + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - qudt:unit + slot_uri: qudt:unit + alias: unit + owner: QuantitativeAttribute + domain_of: + - QuantitativeAttribute + range: DefinedTerm + bindings: + - range: QUDTUnitEnum + obligation_level: + text: RECOMMENDED + description: The metadata element is recommended to be present in the model + binds_value_of: id + description: Restricts the allowable defined terms to the QUDT Unit vocabulary. + recommended: true + CatalysisDataset_rdf_type: + name: CatalysisDataset_rdf_type + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/rdf_type + description: 'The catalysis research field, provided as a voc4cat term from + + CatalysisResearchFieldEnum. This is the primary machine-actionable + + classification of the dataset''s domain.' in_subset: - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:subject - exact_mappings: - - IAO:0000136 - is_a: is_about_entity - domain: SubstanceSampleCharacterizationDataset - slot_uri: dcterms:subject - alias: is_about_entity - owner: SubstanceSampleCharacterizationDataset + - rdf:type + is_a: rdf_type + domain: CatalysisDataset + slot_uri: rdf:type + alias: rdf_type + owner: CatalysisDataset domain_of: - - SubstanceSampleCharacterizationDataset + - CatalysisDataset is_usage_slot: true - usage_slot_name: is_about_entity - range: SubstanceSample + usage_slot_name: rdf_type + range: DefinedTerm + bindings: + - range: CatalysisResearchFieldEnum + obligation_level: + text: RECOMMENDED + description: The metadata element is recommended to be present in the model + binds_value_of: id + description: Classify the dataset by catalysis research field using voc4cat. recommended: true - multivalued: true inlined: true - inlined_as_list: true - ReactionMonitoringDataset_was_generated_by: - name: ReactionMonitoringDataset_was_generated_by + inlined_as_list: false + CatalysisDataset_was_generated_by: + name: CatalysisDataset_was_generated_by definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/was_generated_by - description: The slot to specify the ReactionMonitoring activity that produced - this dataset. + description: 'The DataGeneratingActivity (Synthesis, Characterization, or Simulation) + + that produced this dataset.' from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - prov:wasGeneratedBy is_a: was_generated_by - domain: ReactionMonitoringDataset + domain: CatalysisDataset slot_uri: prov:wasGeneratedBy alias: was_generated_by - owner: ReactionMonitoringDataset + owner: CatalysisDataset domain_of: - - ReactionMonitoringDataset + - CatalysisDataset is_usage_slot: true usage_slot_name: was_generated_by - range: ReactionMonitoring + range: CatalysisDataGeneratingActivity + recommended: true multivalued: true inlined: true inlined_as_list: true - ReactionMonitoringDataset_is_about_activity: - name: ReactionMonitoringDataset_is_about_activity + CatalysisDataset_is_about_activity: + name: CatalysisDataset_is_about_activity definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/is_about_activity - description: The slot to specify the ChemicalReaction this dataset is about. + description: 'The catalytic Reaction that this dataset is about (e.g. a dataset + of + + catalytic performance measurements is about the Reaction being studied).' in_subset: - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ @@ -8073,1247 +8570,1193 @@ slots: exact_mappings: - IAO:0000136 is_a: is_about_activity - domain: ReactionMonitoringDataset + domain: CatalysisDataset slot_uri: dcterms:subject alias: is_about_activity - owner: ReactionMonitoringDataset + owner: CatalysisDataset domain_of: - - ReactionMonitoringDataset + - CatalysisDataset is_usage_slot: true usage_slot_name: is_about_activity - range: ChemicalReaction + range: CatalyticReaction recommended: true multivalued: true inlined: true inlined_as_list: true - SubstanceSampleCharacterization_evaluated_entity: - name: SubstanceSampleCharacterization_evaluated_entity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/evaluated_entity - description: The slot to specify the SubstanceSample being characterized. + CatalysisDataset_is_about_entity: + name: CatalysisDataset_is_about_entity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/is_about_entity + description: The catalyst sample, material, or other Entity that this dataset + is about. in_subset: - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - prov:used - is_a: evaluated_entity - domain: SubstanceSampleCharacterization - slot_uri: prov:used - alias: evaluated_entity - owner: SubstanceSampleCharacterization + - dcterms:subject + exact_mappings: + - IAO:0000136 + is_a: is_about_entity + domain: CatalysisDataset + slot_uri: dcterms:subject + alias: is_about_entity + owner: CatalysisDataset domain_of: - - SubstanceSampleCharacterization + - CatalysisDataset is_usage_slot: true - usage_slot_name: evaluated_entity - range: SubstanceSample + usage_slot_name: is_about_entity + range: EvaluatedEntity recommended: true multivalued: true inlined: true inlined_as_list: true - ReactionMonitoring_evaluated_activity: - name: ReactionMonitoring_evaluated_activity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/evaluated_activity - description: The slot to specify the ChemicalReaction being recorded. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + Synthesis_nominal_composition: + name: Synthesis_nominal_composition + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/nominal_composition + description: Nominal elemental or chemical composition of the catalyst (e.g. 5wt% + Pt/Al2O3). + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - prov:wasInformedBy - is_a: evaluated_activity - domain: ReactionMonitoring - slot_uri: prov:wasInformedBy - alias: evaluated_activity - owner: ReactionMonitoring + - coremeta4cat:nominal_composition + is_a: nominal_composition + domain: Synthesis + slot_uri: coremeta4cat:nominal_composition + alias: nominal_composition + owner: Synthesis domain_of: - - ReactionMonitoring - is_usage_slot: true - usage_slot_name: evaluated_activity - range: ChemicalReaction - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - Activity_title: - name: Activity_title - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/title - description: The slot to provide a title for the Activity. - notes: - - not in DCAT-AP - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcterms:title - is_a: title - domain: Activity - slot_uri: dcterms:title - alias: title - owner: Activity - domain_of: - - Activity + - Synthesis is_usage_slot: true - usage_slot_name: title + usage_slot_name: nominal_composition range: string + required: true + recommended: true multivalued: true inlined_as_list: true - Activity_description: - name: Activity_description - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/description - description: The slot to provide a description for the Activity. - notes: - - not in DCAT-AP - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + Synthesis_catalyst_measured_properties: + name: Synthesis_catalyst_measured_properties + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/catalyst_measured_properties + description: 'Key measured properties of the resulting catalyst + + (e.g. BET surface area, sieve fraction, molar ratio).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - dcterms:description - is_a: description - domain: Activity - slot_uri: dcterms:description - alias: description - owner: Activity + - coremeta4cat:catalyst_measured_properties + is_a: catalyst_measured_properties + domain: Synthesis + slot_uri: coremeta4cat:catalyst_measured_properties + alias: catalyst_measured_properties + owner: Synthesis domain_of: - - Activity + - Synthesis is_usage_slot: true - usage_slot_name: description + usage_slot_name: catalyst_measured_properties range: string + required: true + recommended: true multivalued: true inlined_as_list: true - Activity_has_part: - name: Activity_has_part - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_part - description: The slot to provide an Activity that is part of the Activity. - notes: - - not in DCAT-AP + Synthesis_had_input_entity: + name: Synthesis_had_input_entity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/had_input_entity + description: The Precursor(s) consumed during this Synthesis. + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:hasPart - is_a: has_part - domain: Activity - slot_uri: dcterms:hasPart - alias: has_part - owner: Activity + - prov:used + is_a: had_input_entity + domain: Synthesis + slot_uri: prov:used + alias: had_input_entity + owner: Synthesis domain_of: - - Activity + - Synthesis is_usage_slot: true - usage_slot_name: has_part - range: Activity + usage_slot_name: had_input_entity + range: Precursor + required: true + recommended: true multivalued: true inlined: true inlined_as_list: true - Activity_part_of: - name: Activity_part_of - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/part_of - description: The slot to provide an Activity of which the Activity is a part. - notes: - - not in DCAT-AP + Synthesis_had_output_entity: + name: Synthesis_had_output_entity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/had_output_entity + description: The CatalystSample produced by this Synthesis. in_subset: - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:isPartOf - is_a: part_of - domain: Activity - slot_uri: dcterms:isPartOf - alias: part_of - owner: Activity + - prov:generated + is_a: had_output_entity + domain: Synthesis + slot_uri: prov:generated + alias: had_output_entity + owner: Synthesis domain_of: - - Activity + - Synthesis is_usage_slot: true - usage_slot_name: part_of - range: Activity + usage_slot_name: had_output_entity + range: CatalystSample + recommended: true multivalued: true inlined: true inlined_as_list: true - Activity_other_identifier: - name: Activity_other_identifier - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/other_identifier - description: The slot to provide a secondary identifier of the Activity. - notes: - - not in DCAT-AP + Synthesis_realized_plan: + name: Synthesis_realized_plan + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/realized_plan + description: The PreparationMethod (protocol) realized in this Synthesis. + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - adms:identifier - is_a: other_identifier - domain: Activity - slot_uri: adms:identifier - alias: other_identifier - owner: Activity + - prov:used + is_a: realized_plan + domain: Synthesis + slot_uri: prov:used + alias: realized_plan + owner: Synthesis domain_of: - - Activity + - Synthesis is_usage_slot: true - usage_slot_name: other_identifier - range: Identifier - multivalued: true + usage_slot_name: realized_plan + range: PreparationMethod + required: true inlined: true - inlined_as_list: true - Activity_has_qualitative_attribute: - name: Activity_has_qualitative_attribute - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_qualitative_attribute - description: The slot to relate a qualitative attribute to an EvaluatedEntity, - EvaluatedActivity or AgenticEntity - notes: - - not in DCAT-AP - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + inlined_as_list: false + Synthesis_storage_conditions: + name: Synthesis_storage_conditions + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/storage_conditions + description: "Conditions under which the catalyst is stored (e.g. inert atmosphere,\ + \ 4\xB0C)." + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - dcterms:relation - is_a: has_qualitative_attribute - domain: Activity - slot_uri: dcterms:relation - alias: has_qualitative_attribute - owner: Activity + - VOC4CAT:0008105 + is_a: storage_conditions + domain: Synthesis + slot_uri: VOC4CAT:0008105 + alias: storage_conditions + owner: Synthesis domain_of: - - Activity + - Synthesis is_usage_slot: true - usage_slot_name: has_qualitative_attribute - range: QualitativeAttribute + usage_slot_name: storage_conditions + range: string recommended: true multivalued: true - inlined: true inlined_as_list: true - Activity_has_quantitative_attribute: - name: Activity_has_quantitative_attribute - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_quantitative_attribute - description: The slot to relate a quantitative attribute to an EvaluatedEntity, - EvaluatedActivity or AgenticEntity - notes: - - not in DCAT-AP + Synthesis_carried_out_by: + name: Synthesis_carried_out_by + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/carried_out_by + description: 'Equipment or synthesis device used to carry out this preparation + step. + + Provide a Device instance (e.g. rotary evaporator, autoclave, furnace).' in_subset: - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:relation - is_a: has_quantitative_attribute - domain: Activity - slot_uri: dcterms:relation - alias: has_quantitative_attribute - owner: Activity + - prov:wasAssociatedWith + is_a: carried_out_by + domain: Synthesis + slot_uri: prov:wasAssociatedWith + alias: carried_out_by + owner: Synthesis domain_of: - - Activity + - Synthesis is_usage_slot: true - usage_slot_name: has_quantitative_attribute - range: QuantitativeAttribute + usage_slot_name: carried_out_by + range: Device recommended: true multivalued: true inlined: true inlined_as_list: true - Activity_had_input_entity: - name: Activity_had_input_entity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/had_input_entity - description: The slot to specify the Entity that was used as an input of an Activity - that is to be changed, consumed or transformed. - notes: - - not in DCAT-AP - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + Precursor_precursor_quantity: + name: Precursor_precursor_quantity + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/precursor_quantity + description: Quantity of precursor used in synthesis. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - prov:used - is_a: had_input_entity - domain: Activity - slot_uri: prov:used - alias: had_input_entity - owner: Activity + - VOC4CAT:0008118 + is_a: precursor_quantity + domain: Precursor + slot_uri: VOC4CAT:0008118 + alias: precursor_quantity + owner: Precursor domain_of: - - Activity + - Precursor is_usage_slot: true - usage_slot_name: had_input_entity - range: Entity + usage_slot_name: precursor_quantity + range: Mass + required: true recommended: true multivalued: true inlined: true inlined_as_list: true - Activity_had_output_entity: - name: Activity_had_output_entity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/had_output_entity - description: The slot to specify the Entity that was generated as an output of - an Activity. - notes: - - not in DCAT-AP - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - prov:generated - is_a: had_output_entity - domain: Activity - slot_uri: prov:generated - alias: had_output_entity - owner: Activity - domain_of: - - Activity - is_usage_slot: true - usage_slot_name: had_output_entity - range: Entity - recommended: true - multivalued: true - inlined: true - inlined_as_list: true - Activity_had_input_activity: - name: Activity_had_input_activity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/had_input_activity - description: The slot to provide a previous Activity that informed the Activity - by being causally via a shared participant. - notes: - - not in DCAT-AP - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + CatalystSample_derived_from: + name: CatalystSample_derived_from + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/derived_from + description: 'The Precursor(s) or other MaterialSample from which this + + CatalystSample was produced.' + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ mappings: - - prov:wasInformedBy - is_a: had_input_activity - domain: Activity - slot_uri: prov:wasInformedBy - alias: had_input_activity - owner: Activity + - prov:wasDerivedFrom + exact_mappings: + - SIO:000244 + close_mappings: + - BFO:0000050 + - dcterms:partOf + is_a: derived_from + domain: CatalystSample + slot_uri: prov:wasDerivedFrom + alias: derived_from + owner: CatalystSample domain_of: - - Activity + - CatalystSample is_usage_slot: true - usage_slot_name: had_input_activity - range: Activity - recommended: true - multivalued: true + usage_slot_name: derived_from + range: MaterialSample inlined: true - inlined_as_list: true - Activity_carried_out_by: - name: Activity_carried_out_by + inlined_as_list: false + Characterization_carried_out_by: + name: Characterization_carried_out_by definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/carried_out_by - description: The slot to specify the AgenticEntity that played a certain part - in carrying out the Activity, either via having a specific role, function or - disposition that was realized in the Activity. - notes: - - not in DCAT-AP + description: 'The analytical instrument used to carry out this characterization. + + Provide a Device instance (e.g. XRD diffractometer, TEM, NMR spectrometer).' in_subset: - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - prov:wasAssociatedWith is_a: carried_out_by - domain: Activity + domain: Characterization slot_uri: prov:wasAssociatedWith alias: carried_out_by - owner: Activity + owner: Characterization domain_of: - - Activity + - Characterization is_usage_slot: true usage_slot_name: carried_out_by - range: AgenticEntity + range: Device + required: true recommended: true multivalued: true inlined: true inlined_as_list: true - Agent_name: - name: Agent_name - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/name - description: A name of the agent. + Characterization_evaluated_entity: + name: Characterization_evaluated_entity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/evaluated_entity + description: The catalyst sample or material being characterized. + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - foaf:name - is_a: name - domain: Agent - slot_uri: foaf:name - alias: name - owner: Agent + - prov:used + is_a: evaluated_entity + domain: Characterization + slot_uri: prov:used + alias: evaluated_entity + owner: Characterization domain_of: - - Agent + - Characterization is_usage_slot: true - usage_slot_name: name - range: string - required: true + usage_slot_name: evaluated_entity + range: EvaluatedEntity + recommended: true multivalued: true + inlined: true inlined_as_list: true - Agent_type: - name: Agent_type - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/type - description: The nature of the agent. + Characterization_realized_plan: + name: Characterization_realized_plan + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/realized_plan + description: The CharacterizationTechnique (protocol) realized in this Characterization. + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:type - is_a: type - domain: Agent - slot_uri: dcterms:type - alias: type - owner: Agent + - prov:used + is_a: realized_plan + domain: Characterization + slot_uri: prov:used + alias: realized_plan + owner: Characterization domain_of: - - Agent + - Characterization is_usage_slot: true - usage_slot_name: type - range: Concept - required: false - recommended: true - multivalued: false + usage_slot_name: realized_plan + range: CharacterizationTechnique + required: true inlined: true - inlined_as_list: true - AgenticEntity_has_part: - name: AgenticEntity_has_part - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_part - description: The slot to specify parts of an AgenticEntity that are themselves - AgenticEntities. + inlined_as_list: false + Characterization_rdf_type: + name: Characterization_rdf_type + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/rdf_type + description: 'The type of characterization technique as an ontology term, e.g. + + CHMO:0000158 (powder XRD), CHMO:0000404 (XPS), VOC4CAT:0000075 (SEM).' + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:hasPart - is_a: has_part - domain: AgenticEntity - slot_uri: dcterms:hasPart - alias: has_part - owner: AgenticEntity + - rdf:type + is_a: rdf_type + domain: Characterization + slot_uri: rdf:type + alias: rdf_type + owner: Characterization domain_of: - - AgenticEntity + - Characterization is_usage_slot: true - usage_slot_name: has_part - range: AgenticEntity - multivalued: true + usage_slot_name: rdf_type + range: DefinedTerm + recommended: true inlined: true - inlined_as_list: true - AgenticEntity_part_of: - name: AgenticEntity_part_of - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/part_of - description: The slot to provide the AgenticEntity of which theAgenticEntity is - a part. - notes: - - not in DCAT-AP + inlined_as_list: false + CatalyticReaction_rdf_type: + name: CatalyticReaction_rdf_type + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/rdf_type + description: 'The type of catalytic reaction as an ontology term (e.g. VOC4CAT:0007010 + + for a specific reaction type, or a ChemO/RXNO term). + + + This is the sole reaction-type classification mechanism (DCAT-AP-PLUS + + Pattern 3) -- deliberately not duplicated by a dedicated has_reaction_type + + slot + ReactionType class hierarchy (cf. PR #118, since superseded here). + + Kept `recommended` rather than `required` for the same reason as + + catalyst_type below: see nfdi4cat/CoreMeta4Cat#117 for the cardinality + + discussion and nfdi4cat/CoreMeta4Cat#116 for the classification-mechanism + + discussion.' in_subset: - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:isPartOf - is_a: part_of - domain: AgenticEntity - slot_uri: dcterms:isPartOf - alias: part_of - owner: AgenticEntity + - rdf:type + is_a: rdf_type + domain: CatalyticReaction + slot_uri: rdf:type + alias: rdf_type + owner: CatalyticReaction domain_of: - - AgenticEntity + - CatalyticReaction is_usage_slot: true - usage_slot_name: part_of - range: AgenticEntity - multivalued: true + usage_slot_name: rdf_type + range: DefinedTerm + recommended: true inlined: true - inlined_as_list: true - AgenticEntity_other_identifier: - name: AgenticEntity_other_identifier - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/other_identifier - description: A slot to provide a secondary identifier for an Instrument. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + inlined_as_list: false + CatalyticReaction_used_reactor: + name: CatalyticReaction_used_reactor + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/used_reactor + description: 'The reactor in which the Reaction takes place. + + Must be a ChemicalReactor instance (a Reactor subclass specific to + + catalytic reaction vessels, e.g. FixedBedReactor, CSTR, Autoclave).' + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ mappings: - - adms:identifier - is_a: other_identifier - domain: AgenticEntity - slot_uri: adms:identifier - alias: other_identifier - owner: AgenticEntity + - prov:wasAssociatedWith + is_a: used_reactor + domain: CatalyticReaction + slot_uri: prov:wasAssociatedWith + alias: used_reactor + owner: CatalyticReaction domain_of: - - AgenticEntity + - CatalyticReaction is_usage_slot: true - usage_slot_name: other_identifier - range: Identifier - required: false + usage_slot_name: used_reactor + range: ChemicalReactor + required: true + recommended: true multivalued: true inlined: true inlined_as_list: true - AnalysisDataset_was_generated_by: - name: AnalysisDataset_was_generated_by - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/was_generated_by - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + CatalyticReaction_product_identification_method: + name: CatalyticReaction_product_identification_method + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/product_identification_method + description: 'The analytical method used to identify and/or quantify reaction + products. + + Should reference a CharacterizationTechnique instance (e.g. GCMS, HPLC_MS). + + The abstract stub ProductIdentificationMethod is retained for backward compatibility.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - prov:wasGeneratedBy - is_a: was_generated_by - domain: AnalysisDataset - slot_uri: prov:wasGeneratedBy - alias: was_generated_by - owner: AnalysisDataset + - coremeta4cat:product_identification_method + is_a: product_identification_method + domain: CatalyticReaction + slot_uri: coremeta4cat:product_identification_method + alias: product_identification_method + owner: CatalyticReaction domain_of: - - AnalysisDataset + - CatalyticReaction is_usage_slot: true - usage_slot_name: was_generated_by - range: DataAnalysis + usage_slot_name: product_identification_method + range: ProductIdentificationMethod + required: true multivalued: true inlined: true inlined_as_list: true - AnalysisSourceData_was_generated_by: - name: AnalysisSourceData_was_generated_by - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/was_generated_by - description: A slot to provide the Activity which created the AnalysisSourceData. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + CatalyticReaction_has_reaction_step: + name: CatalyticReaction_has_reaction_step + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/has_reaction_step + description: 'A step (part) of this CatalyticReaction that is itself a CatalyticReaction. + + Narrowed from the inherited ChemicalReaction range so nested reaction + + steps keep their catalysis-specific fields (catalyst_type, used_reactor, + + product_identification_method, ...) when loaded.' + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ mappings: - - prov:wasGeneratedBy - is_a: was_generated_by - domain: AnalysisSourceData - slot_uri: prov:wasGeneratedBy - alias: was_generated_by - owner: AnalysisSourceData + - BFO:0000051 + is_a: has_reaction_step + domain: CatalyticReaction + slot_uri: BFO:0000051 + alias: has_reaction_step + owner: CatalyticReaction domain_of: - - AnalysisSourceData + - CatalyticReaction is_usage_slot: true - usage_slot_name: was_generated_by - range: DataGeneratingActivity + usage_slot_name: has_reaction_step + range: CatalyticReaction multivalued: true inlined: true inlined_as_list: true - Catalogue_applicable_legislation: - name: Catalogue_applicable_legislation - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/applicable_legislation - description: The legislation that mandates the creation or management of the Catalog. + Simulation_rdf_type: + name: Simulation_rdf_type + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/rdf_type + description: 'The type of simulation method as an ontology term (e.g. coremeta4cat:DFT, + + NCIT:C18097 for MD, coremeta4cat:Microkinetics). This is the primary + + machine-actionable classification of the simulation type.' + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcatap:applicableLegislation - is_a: applicable_legislation - domain: Catalogue - slot_uri: dcatap:applicableLegislation - alias: applicable_legislation - owner: Catalogue + - rdf:type + is_a: rdf_type + domain: Simulation + slot_uri: rdf:type + alias: rdf_type + owner: Simulation domain_of: - - Catalogue + - Simulation is_usage_slot: true - usage_slot_name: applicable_legislation - range: LegalResource - required: false - multivalued: true + usage_slot_name: rdf_type + range: DefinedTerm + recommended: true inlined: true - inlined_as_list: true - Catalogue_catalogue: - name: Catalogue_catalogue - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/catalogue - description: A catalogue whose contents are of interest in the context of this - catalogue. + inlined_as_list: false + Simulation_realized_plan: + name: Simulation_realized_plan + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/realized_plan + description: The SimulationMethod (protocol) realized in this Simulation. + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:catalog - is_a: catalogue - domain: Catalogue - slot_uri: dcat:catalog - alias: catalogue - owner: Catalogue + - prov:used + is_a: realized_plan + domain: Simulation + slot_uri: prov:used + alias: realized_plan + owner: Simulation domain_of: - - Catalogue + - Simulation is_usage_slot: true - usage_slot_name: catalogue - range: Catalogue - required: false - multivalued: true + usage_slot_name: realized_plan + range: SimulationMethod + required: true inlined: true - inlined_as_list: true - Catalogue_creator: - name: Catalogue_creator - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/creator - description: An entity responsible for the creation of the catalogue. + inlined_as_list: false + Simulation_carried_out_by: + name: Simulation_carried_out_by + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/carried_out_by + description: The simulation software used, provided as a Software agent instance. + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:creator - is_a: creator - domain: Catalogue - slot_uri: dcterms:creator - alias: creator - owner: Catalogue + - prov:wasAssociatedWith + is_a: carried_out_by + domain: Simulation + slot_uri: prov:wasAssociatedWith + alias: carried_out_by + owner: Simulation domain_of: - - Catalogue + - Simulation is_usage_slot: true - usage_slot_name: creator - range: Agent - required: false - multivalued: false + usage_slot_name: carried_out_by + range: AgenticEntity + recommended: true + multivalued: true inlined: true inlined_as_list: true - Catalogue_description: - name: Catalogue_description - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/description - description: A free-text account of the Catalogue. + Simulation_evaluated_entity: + name: Simulation_evaluated_entity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/evaluated_entity + description: The catalyst model, surface slab, or molecule being simulated. + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:description - is_a: description - domain: Catalogue - slot_uri: dcterms:description - alias: description - owner: Catalogue + - prov:used + is_a: evaluated_entity + domain: Simulation + slot_uri: prov:used + alias: evaluated_entity + owner: Simulation domain_of: - - Catalogue + - Simulation is_usage_slot: true - usage_slot_name: description - range: string - required: true + usage_slot_name: evaluated_entity + range: EvaluatedEntity + recommended: true multivalued: true + inlined: true inlined_as_list: true - Catalogue_geographical_coverage: - name: Catalogue_geographical_coverage - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/geographical_coverage - description: A geographical area covered by the Catalogue. + SubstanceSampleCharacterizationDataset_was_generated_by: + name: SubstanceSampleCharacterizationDataset_was_generated_by + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/was_generated_by + description: The slot to specify the SubstanceCharacterization activity that produced + this dataset. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:spatial - is_a: geographical_coverage - domain: Catalogue - slot_uri: dcterms:spatial - alias: geographical_coverage - owner: Catalogue + - prov:wasGeneratedBy + is_a: was_generated_by + domain: SubstanceSampleCharacterizationDataset + slot_uri: prov:wasGeneratedBy + alias: was_generated_by + owner: SubstanceSampleCharacterizationDataset domain_of: - - Catalogue + - SubstanceSampleCharacterizationDataset is_usage_slot: true - usage_slot_name: geographical_coverage - range: Location - required: false + usage_slot_name: was_generated_by + range: SubstanceSampleCharacterization multivalued: true inlined: true inlined_as_list: true - Catalogue_has_dataset: - name: Catalogue_has_dataset - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_dataset - description: A Dataset that is part of the Catalogue. + SubstanceSampleCharacterizationDataset_is_about_entity: + name: SubstanceSampleCharacterizationDataset_is_about_entity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/is_about_entity + description: The slot to specify the SubstanceSample this dataset is about. + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:dataset - is_a: has_dataset - domain: Catalogue - slot_uri: dcat:dataset - alias: has_dataset - owner: Catalogue + - dcterms:subject + exact_mappings: + - IAO:0000136 + is_a: is_about_entity + domain: SubstanceSampleCharacterizationDataset + slot_uri: dcterms:subject + alias: is_about_entity + owner: SubstanceSampleCharacterizationDataset domain_of: - - Catalogue + - SubstanceSampleCharacterizationDataset is_usage_slot: true - usage_slot_name: has_dataset - range: Dataset - required: false - multivalued: true + usage_slot_name: is_about_entity + range: SubstanceSample + recommended: true + multivalued: true inlined: true inlined_as_list: true - Catalogue_has_part: - name: Catalogue_has_part - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_part - description: A related Catalogue that is part of the described Catalogue. + ReactionMonitoringDataset_was_generated_by: + name: ReactionMonitoringDataset_was_generated_by + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/was_generated_by + description: The slot to specify the ReactionMonitoring activity that produced + this dataset. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:hasPart - is_a: has_part - domain: Catalogue - slot_uri: dcterms:hasPart - alias: has_part - owner: Catalogue + - prov:wasGeneratedBy + is_a: was_generated_by + domain: ReactionMonitoringDataset + slot_uri: prov:wasGeneratedBy + alias: was_generated_by + owner: ReactionMonitoringDataset domain_of: - - Catalogue + - ReactionMonitoringDataset is_usage_slot: true - usage_slot_name: has_part - range: Catalogue - required: false + usage_slot_name: was_generated_by + range: ReactionMonitoring multivalued: true inlined: true inlined_as_list: true - Catalogue_homepage: - name: Catalogue_homepage - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/homepage - description: A web page that acts as the main page for the Catalogue. + ReactionMonitoringDataset_is_about_activity: + name: ReactionMonitoringDataset_is_about_activity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/is_about_activity + description: The slot to specify the ChemicalReaction this dataset is about. + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - foaf:homepage - is_a: homepage - domain: Catalogue - slot_uri: foaf:homepage - alias: homepage - owner: Catalogue + - dcterms:subject + exact_mappings: + - IAO:0000136 + is_a: is_about_activity + domain: ReactionMonitoringDataset + slot_uri: dcterms:subject + alias: is_about_activity + owner: ReactionMonitoringDataset domain_of: - - Catalogue + - ReactionMonitoringDataset is_usage_slot: true - usage_slot_name: homepage - range: Document - required: false + usage_slot_name: is_about_activity + range: ChemicalReaction recommended: true - multivalued: false + multivalued: true inlined: true inlined_as_list: true - Catalogue_language: - name: Catalogue_language - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/language - description: A language used in the textual metadata describing titles, descriptions, - etc. of the Datasets in the Catalogue. + SubstanceSampleCharacterization_evaluated_entity: + name: SubstanceSampleCharacterization_evaluated_entity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/evaluated_entity + description: The slot to specify the SubstanceSample being characterized. + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:language - is_a: language - domain: Catalogue - slot_uri: dcterms:language - alias: language - owner: Catalogue + - prov:used + is_a: evaluated_entity + domain: SubstanceSampleCharacterization + slot_uri: prov:used + alias: evaluated_entity + owner: SubstanceSampleCharacterization domain_of: - - Catalogue + - SubstanceSampleCharacterization is_usage_slot: true - usage_slot_name: language - range: LinguisticSystem - required: false + usage_slot_name: evaluated_entity + range: SubstanceSample recommended: true multivalued: true inlined: true inlined_as_list: true - Catalogue_licence: - name: Catalogue_licence - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/licence - description: A licence under which the Catalogue can be used or reused. + ReactionMonitoring_evaluated_activity: + name: ReactionMonitoring_evaluated_activity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/evaluated_activity + description: The slot to specify the ChemicalReaction being recorded. + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:license - is_a: licence - domain: Catalogue - slot_uri: dcterms:license - alias: licence - owner: Catalogue + - prov:wasInformedBy + is_a: evaluated_activity + domain: ReactionMonitoring + slot_uri: prov:wasInformedBy + alias: evaluated_activity + owner: ReactionMonitoring domain_of: - - Catalogue + - ReactionMonitoring is_usage_slot: true - usage_slot_name: licence - range: LicenseDocument - required: false - multivalued: false + usage_slot_name: evaluated_activity + range: ChemicalReaction + recommended: true + multivalued: true inlined: true inlined_as_list: true - Catalogue_modification_date: - name: Catalogue_modification_date - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/modification_date - description: The most recent date on which the Catalogue was modified. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + ChemicalReaction_has_temperature: + name: ChemicalReaction_has_temperature + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/has_temperature + description: The slot to specify the Temperature at which a ChemicalReaction takes + place. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ mappings: - - dcterms:modified - is_a: modification_date - domain: Catalogue - slot_uri: dcterms:modified - alias: modification_date - owner: Catalogue + - SIO:000008 + is_a: has_temperature + domain: ChemicalReaction + slot_uri: SIO:000008 + alias: has_temperature + owner: ChemicalReaction domain_of: - - Catalogue + - ChemicalReaction is_usage_slot: true - usage_slot_name: modification_date - range: date - required: false + usage_slot_name: has_temperature + range: Temperature recommended: true - multivalued: false - inlined_as_list: false - Catalogue_publisher: - name: Catalogue_publisher - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/publisher - description: An entity (organisation) responsible for making the Catalogue available. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + multivalued: true + inlined: true + inlined_as_list: true + ChemicalReaction_has_pressure: + name: ChemicalReaction_has_pressure + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/has_pressure + description: The slot to specify the Pressure at which a ChemicalReaction takes + place. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ mappings: - - dcterms:publisher - is_a: publisher - domain: Catalogue - slot_uri: dcterms:publisher - alias: publisher - owner: Catalogue + - SIO:000008 + is_a: has_pressure + domain: ChemicalReaction + slot_uri: SIO:000008 + alias: has_pressure + owner: ChemicalReaction domain_of: - - Catalogue + - ChemicalReaction is_usage_slot: true - usage_slot_name: publisher - range: Agent - required: true - multivalued: false + usage_slot_name: has_pressure + range: Pressure + recommended: true + multivalued: true inlined: true inlined_as_list: true - Catalogue_record: - name: Catalogue_record - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/record - description: A Catalogue Record that is part of the Catalogue. + ChemicalReaction_related_resource: + name: ChemicalReaction_related_resource + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/related_resource + description: The slot to specify any Documents related to a ChemicalReaction. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:record - is_a: record - domain: Catalogue - slot_uri: dcat:record - alias: record - owner: Catalogue + - dcterms:relation + is_a: related_resource + domain: ChemicalReaction + slot_uri: dcterms:relation + alias: related_resource + owner: ChemicalReaction domain_of: - - Catalogue + - ChemicalReaction is_usage_slot: true - usage_slot_name: record - range: CatalogueRecord - required: false + usage_slot_name: related_resource + range: Resource multivalued: true inlined: true inlined_as_list: true - Catalogue_release_date: - name: Catalogue_release_date - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/release_date - description: The date of formal issuance (e.g., publication) of the Catalogue. + Activity_title: + name: Activity_title + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/title + description: The slot to provide a title for the Activity. + notes: + - not in DCAT-AP from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:issued - is_a: release_date - domain: Catalogue - slot_uri: dcterms:issued - alias: release_date - owner: Catalogue + - dcterms:title + is_a: title + domain: Activity + slot_uri: dcterms:title + alias: title + owner: Activity domain_of: - - Catalogue + - Activity is_usage_slot: true - usage_slot_name: release_date - range: date - required: false - recommended: true - multivalued: false - inlined_as_list: false - Catalogue_rights: - name: Catalogue_rights - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/rights - description: A statement that specifies rights associated with the Catalogue. + usage_slot_name: title + range: string + multivalued: true + inlined_as_list: true + Activity_description: + name: Activity_description + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/description + description: The slot to provide a description for the Activity. + notes: + - not in DCAT-AP from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:rights - is_a: rights - domain: Catalogue - slot_uri: dcterms:rights - alias: rights - owner: Catalogue + - dcterms:description + is_a: description + domain: Activity + slot_uri: dcterms:description + alias: description + owner: Activity domain_of: - - Catalogue + - Activity is_usage_slot: true - usage_slot_name: rights - range: RightsStatement - required: false - multivalued: false - inlined: true + usage_slot_name: description + range: string + multivalued: true inlined_as_list: true - Catalogue_service: - name: Catalogue_service - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/service - description: A site or end-point (Data Service) that is listed in the Catalogue. + Activity_has_part: + name: Activity_has_part + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_part + description: The slot to provide an Activity that is part of the Activity. + notes: + - not in DCAT-AP from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:service - is_a: service - domain: Catalogue - slot_uri: dcat:service - alias: service - owner: Catalogue + - dcterms:hasPart + is_a: has_part + domain: Activity + slot_uri: dcterms:hasPart + alias: has_part + owner: Activity domain_of: - - Catalogue + - Activity is_usage_slot: true - usage_slot_name: service - range: DataService - required: false + usage_slot_name: has_part + range: Activity multivalued: true inlined: true inlined_as_list: true - Catalogue_temporal_coverage: - name: Catalogue_temporal_coverage - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/temporal_coverage - description: A temporal period that the Catalogue covers. + Activity_part_of: + name: Activity_part_of + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/part_of + description: The slot to provide an Activity of which the Activity is a part. + notes: + - not in DCAT-AP + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:temporal - is_a: temporal_coverage - domain: Catalogue - slot_uri: dcterms:temporal - alias: temporal_coverage - owner: Catalogue + - dcterms:isPartOf + is_a: part_of + domain: Activity + slot_uri: dcterms:isPartOf + alias: part_of + owner: Activity domain_of: - - Catalogue + - Activity is_usage_slot: true - usage_slot_name: temporal_coverage - range: PeriodOfTime - required: false + usage_slot_name: part_of + range: Activity multivalued: true inlined: true inlined_as_list: true - Catalogue_themes: - name: Catalogue_themes - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/themes - description: A knowledge organization system used to classify the Resources that - are in the Catalogue. + Activity_other_identifier: + name: Activity_other_identifier + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/other_identifier + description: The slot to provide a secondary identifier of the Activity. + notes: + - not in DCAT-AP from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:themeTaxonomy - is_a: themes - domain: Catalogue - slot_uri: dcat:themeTaxonomy - alias: themes - owner: Catalogue + - adms:identifier + is_a: other_identifier + domain: Activity + slot_uri: adms:identifier + alias: other_identifier + owner: Activity domain_of: - - Catalogue + - Activity is_usage_slot: true - usage_slot_name: themes - range: ConceptScheme - required: false - recommended: true + usage_slot_name: other_identifier + range: Identifier multivalued: true inlined: true inlined_as_list: true - Catalogue_title: - name: Catalogue_title - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/title - description: A name given to the Catalogue. + Activity_has_qualitative_attribute: + name: Activity_has_qualitative_attribute + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_qualitative_attribute + description: The slot to relate a qualitative attribute to an EvaluatedEntity, + EvaluatedActivity or AgenticEntity + notes: + - not in DCAT-AP + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:title - is_a: title - domain: Catalogue - slot_uri: dcterms:title - alias: title - owner: Catalogue + - dcterms:relation + is_a: has_qualitative_attribute + domain: Activity + slot_uri: dcterms:relation + alias: has_qualitative_attribute + owner: Activity domain_of: - - Catalogue + - Activity is_usage_slot: true - usage_slot_name: title - range: string - required: true + usage_slot_name: has_qualitative_attribute + range: QualitativeAttribute + recommended: true multivalued: true + inlined: true inlined_as_list: true - CatalogueRecord_application_profile: - name: CatalogueRecord_application_profile - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/application_profile - description: An Application Profile that the Catalogued Resource's metadata - conforms to. + Activity_has_quantitative_attribute: + name: Activity_has_quantitative_attribute + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_quantitative_attribute + description: The slot to relate a quantitative attribute to an EvaluatedEntity, + EvaluatedActivity or AgenticEntity + notes: + - not in DCAT-AP + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:conformsTo - is_a: application_profile - domain: CatalogueRecord - slot_uri: dcterms:conformsTo - alias: application_profile - owner: CatalogueRecord + - dcterms:relation + is_a: has_quantitative_attribute + domain: Activity + slot_uri: dcterms:relation + alias: has_quantitative_attribute + owner: Activity domain_of: - - CatalogueRecord + - Activity is_usage_slot: true - usage_slot_name: application_profile - range: Standard - required: false + usage_slot_name: has_quantitative_attribute + range: QuantitativeAttribute recommended: true multivalued: true inlined: true inlined_as_list: true - CatalogueRecord_change_type: - name: CatalogueRecord_change_type - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/change_type - description: The status of the catalogue record in the context of editorial flow - of the dataset and data service descriptions. + Activity_had_input_entity: + name: Activity_had_input_entity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/had_input_entity + description: The slot to specify the Entity that was used as an input of an Activity + that is to be changed, consumed or transformed. + notes: + - not in DCAT-AP + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - adms:status - is_a: change_type - domain: CatalogueRecord - slot_uri: adms:status - alias: change_type - owner: CatalogueRecord + - prov:used + is_a: had_input_entity + domain: Activity + slot_uri: prov:used + alias: had_input_entity + owner: Activity domain_of: - - CatalogueRecord + - Activity is_usage_slot: true - usage_slot_name: change_type - range: Concept - required: false + usage_slot_name: had_input_entity + range: Entity recommended: true - multivalued: false + multivalued: true inlined: true inlined_as_list: true - CatalogueRecord_description: - name: CatalogueRecord_description - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/description - description: A free-text account of the record. This property can be repeated - for parallel language versions of the description. + Activity_had_output_entity: + name: Activity_had_output_entity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/had_output_entity + description: The slot to specify the Entity that was generated as an output of + an Activity. + notes: + - not in DCAT-AP + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:description - is_a: description - domain: CatalogueRecord - slot_uri: dcterms:description - alias: description - owner: CatalogueRecord + - prov:generated + is_a: had_output_entity + domain: Activity + slot_uri: prov:generated + alias: had_output_entity + owner: Activity domain_of: - - CatalogueRecord + - Activity is_usage_slot: true - usage_slot_name: description - range: string - required: false + usage_slot_name: had_output_entity + range: Entity + recommended: true multivalued: true + inlined: true inlined_as_list: true - CatalogueRecord_language: - name: CatalogueRecord_language - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/language - description: A language used in the textual metadata describing titles, descriptions, - etc. of the Catalogued Resource. + Activity_had_input_activity: + name: Activity_had_input_activity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/had_input_activity + description: The slot to provide a previous Activity that informed the Activity + by being causally via a shared participant. + notes: + - not in DCAT-AP + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:language - is_a: language - domain: CatalogueRecord - slot_uri: dcterms:language - alias: language - owner: CatalogueRecord + - prov:wasInformedBy + is_a: had_input_activity + domain: Activity + slot_uri: prov:wasInformedBy + alias: had_input_activity + owner: Activity domain_of: - - CatalogueRecord + - Activity is_usage_slot: true - usage_slot_name: language - range: LinguisticSystem - required: false + usage_slot_name: had_input_activity + range: Activity + recommended: true multivalued: true inlined: true inlined_as_list: true - CatalogueRecord_listing_date: - name: CatalogueRecord_listing_date - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/listing_date - description: The date on which the description of the Resource was included in - the Catalogue. + Activity_carried_out_by: + name: Activity_carried_out_by + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/carried_out_by + description: The slot to specify the AgenticEntity that played a certain part + in carrying out the Activity, either via having a specific role, function or + disposition that was realized in the Activity. + notes: + - not in DCAT-AP + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:issued - is_a: listing_date - domain: CatalogueRecord - slot_uri: dcterms:issued - alias: listing_date - owner: CatalogueRecord + - prov:wasAssociatedWith + is_a: carried_out_by + domain: Activity + slot_uri: prov:wasAssociatedWith + alias: carried_out_by + owner: Activity domain_of: - - CatalogueRecord + - Activity is_usage_slot: true - usage_slot_name: listing_date - range: date - required: false + usage_slot_name: carried_out_by + range: AgenticEntity recommended: true - multivalued: false + multivalued: true + inlined: true inlined_as_list: true - CatalogueRecord_modification_date: - name: CatalogueRecord_modification_date - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/modification_date - description: The most recent date on which the Catalogue entry was changed or - modified. + Agent_name: + name: Agent_name + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/name + description: A name of the agent. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:modified - is_a: modification_date - domain: CatalogueRecord - slot_uri: dcterms:modified - alias: modification_date - owner: CatalogueRecord + - foaf:name + is_a: name + domain: Agent + slot_uri: foaf:name + alias: name + owner: Agent domain_of: - - CatalogueRecord + - Agent is_usage_slot: true - usage_slot_name: modification_date - range: date + usage_slot_name: name + range: string required: true - multivalued: false - inlined_as_list: false - CatalogueRecord_primary_topic: - name: CatalogueRecord_primary_topic - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/primary_topic - description: A link to the Dataset, Data service or Catalog described in the record. + multivalued: true + inlined_as_list: true + Agent_type: + name: Agent_type + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/type + description: The nature of the agent. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - foaf:primaryTopic - is_a: primary_topic - domain: CatalogueRecord - slot_uri: foaf:primaryTopic - alias: primary_topic - owner: CatalogueRecord + - dcterms:type + is_a: type + domain: Agent + slot_uri: dcterms:type + alias: type + owner: Agent domain_of: - - CatalogueRecord + - Agent is_usage_slot: true - usage_slot_name: primary_topic - range: Any - required: true + usage_slot_name: type + range: Concept + required: false + recommended: true multivalued: false inlined: true - inlined_as_list: false - any_of: - - range: Catalogue - - range: Dataset - - range: DatasetSeries - - range: DataService - CatalogueRecord_source_metadata: - name: CatalogueRecord_source_metadata - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/source_metadata - description: The original metadata that was used in creating metadata for the - Dataset, Data Service or Dataset Series. + inlined_as_list: true + AgenticEntity_has_part: + name: AgenticEntity_has_part + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_part + description: The slot to specify parts of an AgenticEntity that are themselves + AgenticEntities. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:source - is_a: source_metadata - domain: CatalogueRecord - slot_uri: dcterms:source - alias: source_metadata - owner: CatalogueRecord + - dcterms:hasPart + is_a: has_part + domain: AgenticEntity + slot_uri: dcterms:hasPart + alias: has_part + owner: AgenticEntity domain_of: - - CatalogueRecord + - AgenticEntity is_usage_slot: true - usage_slot_name: source_metadata - range: CatalogueRecord - required: false - multivalued: false + usage_slot_name: has_part + range: AgenticEntity + multivalued: true inlined: true inlined_as_list: true - CatalogueRecord_title: - name: CatalogueRecord_title - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/title - description: A name given to the Catalogue Record. + AgenticEntity_part_of: + name: AgenticEntity_part_of + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/part_of + description: The slot to provide the AgenticEntity of which theAgenticEntity is + a part. + notes: + - not in DCAT-AP + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:title - is_a: title - domain: CatalogueRecord - slot_uri: dcterms:title - alias: title - owner: CatalogueRecord + - dcterms:isPartOf + is_a: part_of + domain: AgenticEntity + slot_uri: dcterms:isPartOf + alias: part_of + owner: AgenticEntity domain_of: - - CatalogueRecord + - AgenticEntity is_usage_slot: true - usage_slot_name: title - range: string - required: false + usage_slot_name: part_of + range: AgenticEntity multivalued: true + inlined: true inlined_as_list: true - Checksum_algorithm: - name: Checksum_algorithm - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/algorithm - description: The algorithm used to produce the subject Checksum. + AgenticEntity_other_identifier: + name: AgenticEntity_other_identifier + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/other_identifier + description: A slot to provide a secondary identifier for an Instrument. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - spdx:algorithm - is_a: algorithm - domain: Checksum - slot_uri: spdx:algorithm - alias: algorithm - owner: Checksum + - adms:identifier + is_a: other_identifier + domain: AgenticEntity + slot_uri: adms:identifier + alias: other_identifier + owner: AgenticEntity domain_of: - - Checksum + - AgenticEntity is_usage_slot: true - usage_slot_name: algorithm - range: ChecksumAlgorithm - required: true - multivalued: false + usage_slot_name: other_identifier + range: Identifier + required: false + multivalued: true inlined: true inlined_as_list: true - Checksum_checksum_value: - name: Checksum_checksum_value - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/checksum_value - description: A lower case hexadecimal encoded digest value produced using a specific - algorithm. + AnalysisDataset_was_generated_by: + name: AnalysisDataset_was_generated_by + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/was_generated_by + description: This slot is described in more detail within the class in which it + is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - spdx:checksumValue - is_a: checksum_value - domain: Checksum - slot_uri: spdx:checksumValue - alias: checksum_value - owner: Checksum - domain_of: - - Checksum - is_usage_slot: true - usage_slot_name: checksum_value - range: hexBinary - required: true - multivalued: false - inlined_as_list: true - ClassifierMixin_type: - name: ClassifierMixin_type - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/type - description: This slot is described in more detail within the class in which it - is used. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcterms:type - is_a: type - domain: ClassifierMixin - slot_uri: dcterms:type - alias: type - owner: ClassifierMixin - domain_of: - - ClassifierMixin - is_usage_slot: true - usage_slot_name: type - range: DefinedTerm - inlined: true - inlined_as_list: false - Concept_preferred_label: - name: Concept_preferred_label - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/preferred_label - description: A preferred label of the concept. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - skos:prefLabel - is_a: preferred_label - domain: Concept - slot_uri: skos:prefLabel - alias: preferred_label - owner: Concept - domain_of: - - Concept - is_usage_slot: true - usage_slot_name: preferred_label - range: string - required: true - multivalued: true - inlined_as_list: true - ConceptScheme_title: - name: ConceptScheme_title - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/title - description: A name of the concept scheme. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcterms:title - is_a: title - domain: ConceptScheme - slot_uri: dcterms:title - alias: title - owner: ConceptScheme - domain_of: - - ConceptScheme - is_usage_slot: true - usage_slot_name: title - range: string - required: true - multivalued: true - inlined_as_list: true - DataAnalysis_evaluated_entity: - name: DataAnalysis_evaluated_entity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/evaluated_entity - description: A slot to provide the data that was analysed by the DataAnalysis. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - prov:used - is_a: evaluated_entity - domain: DataAnalysis - slot_uri: prov:used - alias: evaluated_entity - owner: DataAnalysis + - prov:wasGeneratedBy + is_a: was_generated_by + domain: AnalysisDataset + slot_uri: prov:wasGeneratedBy + alias: was_generated_by + owner: AnalysisDataset domain_of: - - DataAnalysis + - AnalysisDataset is_usage_slot: true - usage_slot_name: evaluated_entity - range: AnalysisSourceData - recommended: true + usage_slot_name: was_generated_by + range: DataAnalysis multivalued: true inlined: true inlined_as_list: true - DataService_access_rights: - name: DataService_access_rights - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/access_rights - description: Information regarding access or restrictions based on privacy, security, - or other policies. + AnalysisSourceData_was_generated_by: + name: AnalysisSourceData_was_generated_by + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/was_generated_by + description: A slot to provide the Activity which created the AnalysisSourceData. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:accessRights - is_a: access_rights - domain: DataService - slot_uri: dcterms:accessRights - alias: access_rights - owner: DataService + - prov:wasGeneratedBy + is_a: was_generated_by + domain: AnalysisSourceData + slot_uri: prov:wasGeneratedBy + alias: was_generated_by + owner: AnalysisSourceData domain_of: - - DataService + - AnalysisSourceData is_usage_slot: true - usage_slot_name: access_rights - range: RightsStatement - required: false - multivalued: false + usage_slot_name: was_generated_by + range: DataGeneratingActivity + multivalued: true inlined: true inlined_as_list: true - DataService_applicable_legislation: - name: DataService_applicable_legislation + Catalogue_applicable_legislation: + name: Catalogue_applicable_legislation definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/applicable_legislation - description: The legislation that mandates the creation or management of the Data - Service. + description: The legislation that mandates the creation or management of the Catalog. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - dcatap:applicableLegislation is_a: applicable_legislation - domain: DataService + domain: Catalogue slot_uri: dcatap:applicableLegislation alias: applicable_legislation - owner: DataService + owner: Catalogue domain_of: - - DataService + - Catalogue is_usage_slot: true usage_slot_name: applicable_legislation range: LegalResource @@ -9321,214 +9764,191 @@ slots: multivalued: true inlined: true inlined_as_list: true - DataService_conforms_to: - name: DataService_conforms_to - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/conforms_to - description: An established (technical) standard to which the Data Service conforms. + Catalogue_catalogue: + name: Catalogue_catalogue + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/catalogue + description: A catalogue whose contents are of interest in the context of this + catalogue. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:conformsTo - is_a: conforms_to - domain: DataService - slot_uri: dcterms:conformsTo - alias: conforms_to - owner: DataService + - dcat:catalog + is_a: catalogue + domain: Catalogue + slot_uri: dcat:catalog + alias: catalogue + owner: Catalogue domain_of: - - DataService + - Catalogue is_usage_slot: true - usage_slot_name: conforms_to - range: Standard + usage_slot_name: catalogue + range: Catalogue required: false - recommended: true multivalued: true inlined: true inlined_as_list: true - DataService_contact_point: - name: DataService_contact_point - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/contact_point - description: Contact information that can be used for sending comments about the - Data Service. + Catalogue_creator: + name: Catalogue_creator + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/creator + description: An entity responsible for the creation of the catalogue. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:contactPoint - is_a: contact_point - domain: DataService - slot_uri: dcat:contactPoint - alias: contact_point - owner: DataService + - dcterms:creator + is_a: creator + domain: Catalogue + slot_uri: dcterms:creator + alias: creator + owner: Catalogue domain_of: - - DataService + - Catalogue is_usage_slot: true - usage_slot_name: contact_point - range: Kind + usage_slot_name: creator + range: Agent required: false - recommended: true - multivalued: true + multivalued: false inlined: true inlined_as_list: true - DataService_description: - name: DataService_description + Catalogue_description: + name: Catalogue_description definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/description - description: A free-text account of the Data Service. + description: A free-text account of the Catalogue. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - dcterms:description is_a: description - domain: DataService + domain: Catalogue slot_uri: dcterms:description alias: description - owner: DataService + owner: Catalogue domain_of: - - DataService + - Catalogue is_usage_slot: true usage_slot_name: description range: string - required: false + required: true multivalued: true inlined_as_list: true - DataService_documentation: - name: DataService_documentation - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/documentation - description: A page or document about this Data Service + Catalogue_geographical_coverage: + name: Catalogue_geographical_coverage + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/geographical_coverage + description: A geographical area covered by the Catalogue. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - foaf:page - is_a: documentation - domain: DataService - slot_uri: foaf:page - alias: documentation - owner: DataService + - dcterms:spatial + is_a: geographical_coverage + domain: Catalogue + slot_uri: dcterms:spatial + alias: geographical_coverage + owner: Catalogue domain_of: - - DataService + - Catalogue is_usage_slot: true - usage_slot_name: documentation - range: Document + usage_slot_name: geographical_coverage + range: Location required: false multivalued: true inlined: true inlined_as_list: true - DataService_endpoint_URL: - name: DataService_endpoint_URL - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/endpoint_URL - description: The root location or primary endpoint of the service (an IRI). + Catalogue_has_dataset: + name: Catalogue_has_dataset + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_dataset + description: A Dataset that is part of the Catalogue. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:endpointURL - is_a: endpoint_URL - domain: DataService - slot_uri: dcat:endpointURL - alias: endpoint_URL - owner: DataService + - dcat:dataset + is_a: has_dataset + domain: Catalogue + slot_uri: dcat:dataset + alias: has_dataset + owner: Catalogue domain_of: - - DataService + - Catalogue is_usage_slot: true - usage_slot_name: endpoint_URL - range: Resource - required: true - multivalued: true - inlined: true - inlined_as_list: true - DataService_endpoint_description: - name: DataService_endpoint_description - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/endpoint_description - description: A description of the services available via the end-points, including - their operations, parameters etc. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcat:endpointDescription - is_a: endpoint_description - domain: DataService - slot_uri: dcat:endpointDescription - alias: endpoint_description - owner: DataService - domain_of: - - DataService - is_usage_slot: true - usage_slot_name: endpoint_description - range: Resource + usage_slot_name: has_dataset + range: Dataset required: false - recommended: true multivalued: true inlined: true inlined_as_list: true - DataService_format: - name: DataService_format - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/format - description: The structure that can be returned by querying the endpointURL. + Catalogue_has_part: + name: Catalogue_has_part + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_part + description: A related Catalogue that is part of the described Catalogue. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:format - is_a: format - domain: DataService - slot_uri: dcterms:format - alias: format - owner: DataService + - dcterms:hasPart + is_a: has_part + domain: Catalogue + slot_uri: dcterms:hasPart + alias: has_part + owner: Catalogue domain_of: - - DataService + - Catalogue is_usage_slot: true - usage_slot_name: format - range: MediaTypeOrExtent + usage_slot_name: has_part + range: Catalogue required: false multivalued: true inlined: true inlined_as_list: true - DataService_keyword: - name: DataService_keyword - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/keyword - description: A keyword or tag describing the Data Service. + Catalogue_homepage: + name: Catalogue_homepage + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/homepage + description: A web page that acts as the main page for the Catalogue. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:keyword - is_a: keyword - domain: DataService - slot_uri: dcat:keyword - alias: keyword - owner: DataService + - foaf:homepage + is_a: homepage + domain: Catalogue + slot_uri: foaf:homepage + alias: homepage + owner: Catalogue domain_of: - - DataService + - Catalogue is_usage_slot: true - usage_slot_name: keyword - range: string + usage_slot_name: homepage + range: Document required: false recommended: true - multivalued: true + multivalued: false + inlined: true inlined_as_list: true - DataService_landing_page: - name: DataService_landing_page - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/landing_page - description: A web page that provides access to the Data Service and/or additional - information. + Catalogue_language: + name: Catalogue_language + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/language + description: A language used in the textual metadata describing titles, descriptions, + etc. of the Datasets in the Catalogue. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:landingPage - is_a: landing_page - domain: DataService - slot_uri: dcat:landingPage - alias: landing_page - owner: DataService + - dcterms:language + is_a: language + domain: Catalogue + slot_uri: dcterms:language + alias: language + owner: Catalogue domain_of: - - DataService + - Catalogue is_usage_slot: true - usage_slot_name: landing_page - range: Document + usage_slot_name: language + range: LinguisticSystem required: false + recommended: true multivalued: true inlined: true inlined_as_list: true - DataService_licence: - name: DataService_licence + Catalogue_licence: + name: Catalogue_licence definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/licence - description: A licence under which the Data service is made available. + description: A licence under which the Catalogue can be used or reused. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - dcterms:license is_a: licence - domain: DataService + domain: Catalogue slot_uri: dcterms:license alias: licence - owner: DataService + owner: Catalogue domain_of: - - DataService + - Catalogue is_usage_slot: true usage_slot_name: licence range: LicenseDocument @@ -9536,738 +9956,838 @@ slots: multivalued: false inlined: true inlined_as_list: true - DataService_publisher: - name: DataService_publisher + Catalogue_modification_date: + name: Catalogue_modification_date + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/modification_date + description: The most recent date on which the Catalogue was modified. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcterms:modified + is_a: modification_date + domain: Catalogue + slot_uri: dcterms:modified + alias: modification_date + owner: Catalogue + domain_of: + - Catalogue + is_usage_slot: true + usage_slot_name: modification_date + range: date + required: false + recommended: true + multivalued: false + inlined_as_list: false + Catalogue_publisher: + name: Catalogue_publisher definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/publisher - description: An entity (organisation) responsible for making the Data Service - available. + description: An entity (organisation) responsible for making the Catalogue available. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - dcterms:publisher is_a: publisher - domain: DataService + domain: Catalogue slot_uri: dcterms:publisher alias: publisher - owner: DataService + owner: Catalogue domain_of: - - DataService + - Catalogue is_usage_slot: true usage_slot_name: publisher range: Agent - required: false + required: true multivalued: false inlined: true inlined_as_list: true - DataService_serves_dataset: - name: DataService_serves_dataset - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/serves_dataset - description: This property refers to a collection of data that this data service - can distribute. + Catalogue_record: + name: Catalogue_record + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/record + description: A Catalogue Record that is part of the Catalogue. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:servesDataset - is_a: serves_dataset - domain: DataService - slot_uri: dcat:servesDataset - alias: serves_dataset - owner: DataService + - dcat:record + is_a: record + domain: Catalogue + slot_uri: dcat:record + alias: record + owner: Catalogue domain_of: - - DataService + - Catalogue is_usage_slot: true - usage_slot_name: serves_dataset - range: Dataset + usage_slot_name: record + range: CatalogueRecord required: false multivalued: true inlined: true inlined_as_list: true - DataService_theme: - name: DataService_theme - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/theme - description: A category of the Data Service. + Catalogue_release_date: + name: Catalogue_release_date + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/release_date + description: The date of formal issuance (e.g., publication) of the Catalogue. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:theme - is_a: theme - domain: DataService - slot_uri: dcat:theme - alias: theme - owner: DataService + - dcterms:issued + is_a: release_date + domain: Catalogue + slot_uri: dcterms:issued + alias: release_date + owner: Catalogue domain_of: - - DataService + - Catalogue is_usage_slot: true - usage_slot_name: theme - range: Concept + usage_slot_name: release_date + range: date required: false recommended: true - multivalued: true - inlined: true - inlined_as_list: true - DataService_title: - name: DataService_title - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/title - description: A name given to the Data Service. + multivalued: false + inlined_as_list: false + Catalogue_rights: + name: Catalogue_rights + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/rights + description: A statement that specifies rights associated with the Catalogue. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:title - is_a: title - domain: DataService - slot_uri: dcterms:title - alias: title - owner: DataService + - dcterms:rights + is_a: rights + domain: Catalogue + slot_uri: dcterms:rights + alias: rights + owner: Catalogue domain_of: - - DataService + - Catalogue is_usage_slot: true - usage_slot_name: title - range: string - required: true - multivalued: true + usage_slot_name: rights + range: RightsStatement + required: false + multivalued: false + inlined: true inlined_as_list: true - Dataset_access_rights: - name: Dataset_access_rights - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/access_rights - description: Information that indicates whether the Dataset is publicly accessible, - has access restrictions or is not public. + Catalogue_service: + name: Catalogue_service + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/service + description: A site or end-point (Data Service) that is listed in the Catalogue. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:accessRights - is_a: access_rights - domain: Dataset - slot_uri: dcterms:accessRights - alias: access_rights - owner: Dataset + - dcat:service + is_a: service + domain: Catalogue + slot_uri: dcat:service + alias: service + owner: Catalogue domain_of: - - Dataset + - Catalogue is_usage_slot: true - usage_slot_name: access_rights - range: RightsStatement + usage_slot_name: service + range: DataService required: false - multivalued: false + multivalued: true inlined: true inlined_as_list: true - Dataset_applicable_legislation: - name: Dataset_applicable_legislation - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/applicable_legislation - description: The legislation that mandates the creation or management of the Dataset. + Catalogue_temporal_coverage: + name: Catalogue_temporal_coverage + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/temporal_coverage + description: A temporal period that the Catalogue covers. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcatap:applicableLegislation - is_a: applicable_legislation - domain: Dataset - slot_uri: dcatap:applicableLegislation - alias: applicable_legislation - owner: Dataset + - dcterms:temporal + is_a: temporal_coverage + domain: Catalogue + slot_uri: dcterms:temporal + alias: temporal_coverage + owner: Catalogue domain_of: - - Dataset + - Catalogue is_usage_slot: true - usage_slot_name: applicable_legislation - range: LegalResource + usage_slot_name: temporal_coverage + range: PeriodOfTime required: false multivalued: true inlined: true inlined_as_list: true - Dataset_conforms_to: - name: Dataset_conforms_to - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/conforms_to - description: An implementing rule or other specification. + Catalogue_themes: + name: Catalogue_themes + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/themes + description: A knowledge organization system used to classify the Resources that + are in the Catalogue. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:conformsTo - is_a: conforms_to - domain: Dataset - slot_uri: dcterms:conformsTo - alias: conforms_to - owner: Dataset + - dcat:themeTaxonomy + is_a: themes + domain: Catalogue + slot_uri: dcat:themeTaxonomy + alias: themes + owner: Catalogue domain_of: - - Dataset + - Catalogue is_usage_slot: true - usage_slot_name: conforms_to - range: Standard + usage_slot_name: themes + range: ConceptScheme required: false + recommended: true multivalued: true inlined: true inlined_as_list: true - Dataset_contact_point: - name: Dataset_contact_point - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/contact_point - description: Contact information that can be used for sending comments about the - Dataset. + Catalogue_title: + name: Catalogue_title + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/title + description: A name given to the Catalogue. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:contactPoint - is_a: contact_point - domain: Dataset - slot_uri: dcat:contactPoint - alias: contact_point - owner: Dataset + - dcterms:title + is_a: title + domain: Catalogue + slot_uri: dcterms:title + alias: title + owner: Catalogue domain_of: - - Dataset + - Catalogue is_usage_slot: true - usage_slot_name: contact_point - range: Kind - required: false - recommended: true + usage_slot_name: title + range: string + required: true multivalued: true - inlined: true inlined_as_list: true - Dataset_creator: - name: Dataset_creator - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/creator - description: An entity responsible for producing the dataset. + CatalogueRecord_application_profile: + name: CatalogueRecord_application_profile + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/application_profile + description: An Application Profile that the Catalogued Resource's metadata + conforms to. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:creator - is_a: creator - domain: Dataset - slot_uri: dcterms:creator - alias: creator - owner: Dataset + - dcterms:conformsTo + is_a: application_profile + domain: CatalogueRecord + slot_uri: dcterms:conformsTo + alias: application_profile + owner: CatalogueRecord domain_of: - - Dataset + - CatalogueRecord is_usage_slot: true - usage_slot_name: creator - range: Agent + usage_slot_name: application_profile + range: Standard required: false + recommended: true multivalued: true inlined: true inlined_as_list: true - Dataset_dataset_distribution: - name: Dataset_dataset_distribution - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/dataset_distribution - description: An available Distribution for the Dataset. + CatalogueRecord_change_type: + name: CatalogueRecord_change_type + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/change_type + description: The status of the catalogue record in the context of editorial flow + of the dataset and data service descriptions. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:distribution - is_a: dataset_distribution - domain: Dataset - slot_uri: dcat:distribution - alias: dataset_distribution - owner: Dataset + - adms:status + is_a: change_type + domain: CatalogueRecord + slot_uri: adms:status + alias: change_type + owner: CatalogueRecord domain_of: - - Dataset + - CatalogueRecord is_usage_slot: true - usage_slot_name: dataset_distribution - range: Distribution + usage_slot_name: change_type + range: Concept required: false - multivalued: true + recommended: true + multivalued: false inlined: true inlined_as_list: true - Dataset_description: - name: Dataset_description + CatalogueRecord_description: + name: CatalogueRecord_description definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/description - description: A free-text account of the Dataset. + description: A free-text account of the record. This property can be repeated + for parallel language versions of the description. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - dcterms:description is_a: description - domain: Dataset + domain: CatalogueRecord slot_uri: dcterms:description alias: description - owner: Dataset + owner: CatalogueRecord domain_of: - - Dataset + - CatalogueRecord is_usage_slot: true usage_slot_name: description range: string - required: true + required: false multivalued: true inlined_as_list: true - Dataset_documentation: - name: Dataset_documentation - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/documentation - description: A page or document about this Dataset. + CatalogueRecord_language: + name: CatalogueRecord_language + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/language + description: A language used in the textual metadata describing titles, descriptions, + etc. of the Catalogued Resource. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - foaf:page - is_a: documentation - domain: Dataset - slot_uri: foaf:page - alias: documentation - owner: Dataset + - dcterms:language + is_a: language + domain: CatalogueRecord + slot_uri: dcterms:language + alias: language + owner: CatalogueRecord domain_of: - - Dataset + - CatalogueRecord is_usage_slot: true - usage_slot_name: documentation - range: Document + usage_slot_name: language + range: LinguisticSystem required: false multivalued: true inlined: true inlined_as_list: true - Dataset_frequency: - name: Dataset_frequency - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/frequency - description: The frequency at which the Dataset is updated. + CatalogueRecord_listing_date: + name: CatalogueRecord_listing_date + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/listing_date + description: The date on which the description of the Resource was included in + the Catalogue. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:accrualPeriodicity - is_a: frequency - domain: Dataset - slot_uri: dcterms:accrualPeriodicity - alias: frequency - owner: Dataset + - dcterms:issued + is_a: listing_date + domain: CatalogueRecord + slot_uri: dcterms:issued + alias: listing_date + owner: CatalogueRecord domain_of: - - Dataset + - CatalogueRecord is_usage_slot: true - usage_slot_name: frequency - range: Frequency + usage_slot_name: listing_date + range: date required: false + recommended: true multivalued: false - inlined: true - inlined_as_list: false - Dataset_geographical_coverage: - name: Dataset_geographical_coverage - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/geographical_coverage - description: A geographic region that is covered by the Dataset. + inlined_as_list: true + CatalogueRecord_modification_date: + name: CatalogueRecord_modification_date + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/modification_date + description: The most recent date on which the Catalogue entry was changed or + modified. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:spatial - is_a: geographical_coverage - domain: Dataset - slot_uri: dcterms:spatial - alias: geographical_coverage - owner: Dataset + - dcterms:modified + is_a: modification_date + domain: CatalogueRecord + slot_uri: dcterms:modified + alias: modification_date + owner: CatalogueRecord domain_of: - - Dataset + - CatalogueRecord is_usage_slot: true - usage_slot_name: geographical_coverage - range: Location - required: false - multivalued: true - inlined: true - inlined_as_list: true - Dataset_has_version: - name: Dataset_has_version - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_version - description: A related Dataset that is a version, edition, or adaptation of the - described Dataset. + usage_slot_name: modification_date + range: date + required: true + multivalued: false + inlined_as_list: false + CatalogueRecord_primary_topic: + name: CatalogueRecord_primary_topic + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/primary_topic + description: A link to the Dataset, Data service or Catalog described in the record. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:hasVersion - is_a: has_version - domain: Dataset - slot_uri: dcat:hasVersion - alias: has_version - owner: Dataset + - foaf:primaryTopic + is_a: primary_topic + domain: CatalogueRecord + slot_uri: foaf:primaryTopic + alias: primary_topic + owner: CatalogueRecord domain_of: - - Dataset + - CatalogueRecord is_usage_slot: true - usage_slot_name: has_version - range: Dataset - required: false - multivalued: true + usage_slot_name: primary_topic + range: Any + required: true + multivalued: false inlined: true - inlined_as_list: true - Dataset_identifier: - name: Dataset_identifier - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/identifier - description: The main identifier for the Dataset, e.g. the URI or other unique - identifier in the context of the Catalogue. + inlined_as_list: false + any_of: + - range: Catalogue + - range: Dataset + - range: DatasetSeries + - range: DataService + CatalogueRecord_source_metadata: + name: CatalogueRecord_source_metadata + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/source_metadata + description: The original metadata that was used in creating metadata for the + Dataset, Data Service or Dataset Series. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:identifier - is_a: identifier - domain: Dataset - slot_uri: dcterms:identifier - alias: identifier - owner: Dataset + - dcterms:source + is_a: source_metadata + domain: CatalogueRecord + slot_uri: dcterms:source + alias: source_metadata + owner: CatalogueRecord domain_of: - - Dataset + - CatalogueRecord is_usage_slot: true - usage_slot_name: identifier - range: string + usage_slot_name: source_metadata + range: CatalogueRecord required: false - multivalued: true + multivalued: false + inlined: true inlined_as_list: true - Dataset_in_series: - name: Dataset_in_series - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/in_series - description: A dataset series of which the dataset is part. + CatalogueRecord_title: + name: CatalogueRecord_title + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/title + description: A name given to the Catalogue Record. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:inSeries - is_a: in_series - domain: Dataset - slot_uri: dcat:inSeries - alias: in_series - owner: Dataset + - dcterms:title + is_a: title + domain: CatalogueRecord + slot_uri: dcterms:title + alias: title + owner: CatalogueRecord domain_of: - - Dataset + - CatalogueRecord is_usage_slot: true - usage_slot_name: in_series - range: DatasetSeries + usage_slot_name: title + range: string required: false multivalued: true - inlined: true inlined_as_list: true - Dataset_is_referenced_by: - name: Dataset_is_referenced_by - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/is_referenced_by - description: A related resource, such as a publication, that references, cites, - or otherwise points to the dataset. + Checksum_algorithm: + name: Checksum_algorithm + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/algorithm + description: The algorithm used to produce the subject Checksum. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:isReferencedBy - is_a: is_referenced_by - domain: Dataset - slot_uri: dcterms:isReferencedBy - alias: is_referenced_by - owner: Dataset + - spdx:algorithm + is_a: algorithm + domain: Checksum + slot_uri: spdx:algorithm + alias: algorithm + owner: Checksum domain_of: - - Dataset + - Checksum is_usage_slot: true - usage_slot_name: is_referenced_by - range: Resource - required: false - multivalued: true + usage_slot_name: algorithm + range: ChecksumAlgorithm + required: true + multivalued: false inlined: true inlined_as_list: true - Dataset_keyword: - name: Dataset_keyword - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/keyword - description: A keyword or tag describing the Dataset. + Checksum_checksum_value: + name: Checksum_checksum_value + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/checksum_value + description: A lower case hexadecimal encoded digest value produced using a specific + algorithm. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:keyword - is_a: keyword - domain: Dataset - slot_uri: dcat:keyword - alias: keyword - owner: Dataset + - spdx:checksumValue + is_a: checksum_value + domain: Checksum + slot_uri: spdx:checksumValue + alias: checksum_value + owner: Checksum domain_of: - - Dataset + - Checksum is_usage_slot: true - usage_slot_name: keyword - range: string - required: false - recommended: true - multivalued: true + usage_slot_name: checksum_value + range: hexBinary + required: true + multivalued: false inlined_as_list: true - Dataset_landing_page: - name: Dataset_landing_page - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/landing_page - description: A web page that provides access to the Dataset, its Distributions - and/or additional information. + ClassifierMixin_type: + name: ClassifierMixin_type + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/type + description: This slot is described in more detail within the class in which it + is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:landingPage - is_a: landing_page - domain: Dataset - slot_uri: dcat:landingPage - alias: landing_page - owner: Dataset + - dcterms:type + is_a: type + domain: ClassifierMixin + slot_uri: dcterms:type + alias: type + owner: ClassifierMixin domain_of: - - Dataset + - ClassifierMixin is_usage_slot: true - usage_slot_name: landing_page - range: Document - required: false - multivalued: true + usage_slot_name: type + range: DefinedTerm inlined: true - inlined_as_list: true - Dataset_language: - name: Dataset_language - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/language - description: A language of the Dataset. + inlined_as_list: false + Concept_preferred_label: + name: Concept_preferred_label + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/preferred_label + description: A preferred label of the concept. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:language - is_a: language - domain: Dataset - slot_uri: dcterms:language - alias: language - owner: Dataset + - skos:prefLabel + is_a: preferred_label + domain: Concept + slot_uri: skos:prefLabel + alias: preferred_label + owner: Concept domain_of: - - Dataset + - Concept is_usage_slot: true - usage_slot_name: language - range: LinguisticSystem - required: false + usage_slot_name: preferred_label + range: string + required: true multivalued: true - inlined: true inlined_as_list: true - Dataset_modification_date: - name: Dataset_modification_date - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/modification_date - description: The most recent date on which the Dataset was changed or modified. + ConceptScheme_title: + name: ConceptScheme_title + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/title + description: A name of the concept scheme. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:modified - is_a: modification_date - domain: Dataset - slot_uri: dcterms:modified - alias: modification_date - owner: Dataset + - dcterms:title + is_a: title + domain: ConceptScheme + slot_uri: dcterms:title + alias: title + owner: ConceptScheme domain_of: - - Dataset + - ConceptScheme is_usage_slot: true - usage_slot_name: modification_date - range: date - required: false - multivalued: false - inlined_as_list: false - Dataset_other_identifier: - name: Dataset_other_identifier - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/other_identifier - description: A secondary identifier of the Dataset - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - adms:identifier - is_a: other_identifier - domain: Dataset - slot_uri: adms:identifier - alias: other_identifier - owner: Dataset - domain_of: - - Dataset - is_usage_slot: true - usage_slot_name: other_identifier - range: Identifier - required: false + usage_slot_name: title + range: string + required: true multivalued: true - inlined: true inlined_as_list: true - Dataset_provenance: - name: Dataset_provenance - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/provenance - description: A statement about the lineage of a Dataset. + DataAnalysis_evaluated_entity: + name: DataAnalysis_evaluated_entity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/evaluated_entity + description: A slot to provide the data that was analysed by the DataAnalysis. + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:provenance - is_a: provenance - domain: Dataset - slot_uri: dcterms:provenance - alias: provenance - owner: Dataset + - prov:used + is_a: evaluated_entity + domain: DataAnalysis + slot_uri: prov:used + alias: evaluated_entity + owner: DataAnalysis domain_of: - - Dataset + - DataAnalysis is_usage_slot: true - usage_slot_name: provenance - range: ProvenanceStatement - required: false + usage_slot_name: evaluated_entity + range: AnalysisSourceData + recommended: true multivalued: true inlined: true inlined_as_list: true - Dataset_publisher: - name: Dataset_publisher - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/publisher - description: An entity (organisation) responsible for making the Dataset available. + DataService_access_rights: + name: DataService_access_rights + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/access_rights + description: Information regarding access or restrictions based on privacy, security, + or other policies. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:publisher - is_a: publisher - domain: Dataset - slot_uri: dcterms:publisher - alias: publisher - owner: Dataset + - dcterms:accessRights + is_a: access_rights + domain: DataService + slot_uri: dcterms:accessRights + alias: access_rights + owner: DataService domain_of: - - Dataset + - DataService is_usage_slot: true - usage_slot_name: publisher - range: Agent + usage_slot_name: access_rights + range: RightsStatement required: false multivalued: false inlined: true inlined_as_list: true - Dataset_qualified_attribution: - name: Dataset_qualified_attribution - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/qualified_attribution - description: An Agent having some form of responsibility for the resource. + DataService_applicable_legislation: + name: DataService_applicable_legislation + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/applicable_legislation + description: The legislation that mandates the creation or management of the Data + Service. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - prov:qualifiedAttribution - is_a: qualified_attribution - domain: Dataset - slot_uri: prov:qualifiedAttribution - alias: qualified_attribution - owner: Dataset + - dcatap:applicableLegislation + is_a: applicable_legislation + domain: DataService + slot_uri: dcatap:applicableLegislation + alias: applicable_legislation + owner: DataService domain_of: - - Dataset + - DataService is_usage_slot: true - usage_slot_name: qualified_attribution - range: Attribution + usage_slot_name: applicable_legislation + range: LegalResource required: false multivalued: true inlined: true inlined_as_list: true - Dataset_qualified_relation: - name: Dataset_qualified_relation - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/qualified_relation - description: A description of a relationship with another resource. + DataService_conforms_to: + name: DataService_conforms_to + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/conforms_to + description: An established (technical) standard to which the Data Service conforms. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:qualifiedRelation - is_a: qualified_relation - domain: Dataset - slot_uri: dcat:qualifiedRelation - alias: qualified_relation - owner: Dataset + - dcterms:conformsTo + is_a: conforms_to + domain: DataService + slot_uri: dcterms:conformsTo + alias: conforms_to + owner: DataService domain_of: - - Dataset + - DataService is_usage_slot: true - usage_slot_name: qualified_relation - range: Relationship + usage_slot_name: conforms_to + range: Standard required: false + recommended: true multivalued: true inlined: true inlined_as_list: true - Dataset_related_resource: - name: Dataset_related_resource - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/related_resource - description: A related resource. + DataService_contact_point: + name: DataService_contact_point + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/contact_point + description: Contact information that can be used for sending comments about the + Data Service. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:relation - is_a: related_resource - domain: Dataset - slot_uri: dcterms:relation - alias: related_resource - owner: Dataset + - dcat:contactPoint + is_a: contact_point + domain: DataService + slot_uri: dcat:contactPoint + alias: contact_point + owner: DataService domain_of: - - Dataset + - DataService is_usage_slot: true - usage_slot_name: related_resource - range: Resource + usage_slot_name: contact_point + range: Kind required: false + recommended: true multivalued: true inlined: true inlined_as_list: true - Dataset_release_date: - name: Dataset_release_date - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/release_date - description: The date of formal issuance (e.g., publication) of the Dataset. + DataService_description: + name: DataService_description + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/description + description: A free-text account of the Data Service. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:issued - is_a: release_date - domain: Dataset - slot_uri: dcterms:issued - alias: release_date - owner: Dataset + - dcterms:description + is_a: description + domain: DataService + slot_uri: dcterms:description + alias: description + owner: DataService domain_of: - - Dataset + - DataService is_usage_slot: true - usage_slot_name: release_date - range: date + usage_slot_name: description + range: string required: false - multivalued: false - inlined_as_list: false - Dataset_sample: - name: Dataset_sample - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/sample - description: A sample distribution of the dataset. + multivalued: true + inlined_as_list: true + DataService_documentation: + name: DataService_documentation + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/documentation + description: A page or document about this Data Service from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - adms:sample - is_a: sample - domain: Dataset - slot_uri: adms:sample - alias: sample - owner: Dataset + - foaf:page + is_a: documentation + domain: DataService + slot_uri: foaf:page + alias: documentation + owner: DataService domain_of: - - Dataset + - DataService is_usage_slot: true - usage_slot_name: sample - range: Distribution + usage_slot_name: documentation + range: Document required: false multivalued: true inlined: true inlined_as_list: true - Dataset_source: - name: Dataset_source - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/source - description: A related Dataset from which the described Dataset is derived. + DataService_endpoint_URL: + name: DataService_endpoint_URL + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/endpoint_URL + description: The root location or primary endpoint of the service (an IRI). from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:source - is_a: source - domain: Dataset - slot_uri: dcterms:source - alias: source - owner: Dataset + - dcat:endpointURL + is_a: endpoint_URL + domain: DataService + slot_uri: dcat:endpointURL + alias: endpoint_URL + owner: DataService domain_of: - - Dataset + - DataService is_usage_slot: true - usage_slot_name: source - range: Dataset - required: false + usage_slot_name: endpoint_URL + range: Resource + required: true multivalued: true inlined: true inlined_as_list: true - Dataset_spatial_resolution: - name: Dataset_spatial_resolution - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/spatial_resolution - description: The minimum spatial separation resolvable in a dataset, measured - in meters. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcat:spatialResolutionInMeters - is_a: spatial_resolution - domain: Dataset - slot_uri: dcat:spatialResolutionInMeters - alias: spatial_resolution - owner: Dataset + DataService_endpoint_description: + name: DataService_endpoint_description + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/endpoint_description + description: A description of the services available via the end-points, including + their operations, parameters etc. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcat:endpointDescription + is_a: endpoint_description + domain: DataService + slot_uri: dcat:endpointDescription + alias: endpoint_description + owner: DataService domain_of: - - Dataset + - DataService is_usage_slot: true - usage_slot_name: spatial_resolution - range: decimal + usage_slot_name: endpoint_description + range: Resource required: false - multivalued: false - inlined_as_list: false - Dataset_temporal_coverage: - name: Dataset_temporal_coverage - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/temporal_coverage - description: A temporal period that the Dataset covers. + recommended: true + multivalued: true + inlined: true + inlined_as_list: true + DataService_format: + name: DataService_format + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/format + description: The structure that can be returned by querying the endpointURL. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:temporal - is_a: temporal_coverage - domain: Dataset - slot_uri: dcterms:temporal - alias: temporal_coverage - owner: Dataset + - dcterms:format + is_a: format + domain: DataService + slot_uri: dcterms:format + alias: format + owner: DataService domain_of: - - Dataset + - DataService is_usage_slot: true - usage_slot_name: temporal_coverage - range: PeriodOfTime + usage_slot_name: format + range: MediaTypeOrExtent required: false multivalued: true inlined: true inlined_as_list: true - Dataset_temporal_resolution: - name: Dataset_temporal_resolution - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/temporal_resolution - description: The minimum time period resolvable in the dataset. + DataService_keyword: + name: DataService_keyword + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/keyword + description: A keyword or tag describing the Data Service. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:temporalResolution - is_a: temporal_resolution - domain: Dataset - slot_uri: dcat:temporalResolution - alias: temporal_resolution - owner: Dataset + - dcat:keyword + is_a: keyword + domain: DataService + slot_uri: dcat:keyword + alias: keyword + owner: DataService domain_of: - - Dataset + - DataService is_usage_slot: true - usage_slot_name: temporal_resolution - range: duration + usage_slot_name: keyword + range: string + required: false + recommended: true + multivalued: true + inlined_as_list: true + DataService_landing_page: + name: DataService_landing_page + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/landing_page + description: A web page that provides access to the Data Service and/or additional + information. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcat:landingPage + is_a: landing_page + domain: DataService + slot_uri: dcat:landingPage + alias: landing_page + owner: DataService + domain_of: + - DataService + is_usage_slot: true + usage_slot_name: landing_page + range: Document + required: false + multivalued: true + inlined: true + inlined_as_list: true + DataService_licence: + name: DataService_licence + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/licence + description: A licence under which the Data service is made available. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcterms:license + is_a: licence + domain: DataService + slot_uri: dcterms:license + alias: licence + owner: DataService + domain_of: + - DataService + is_usage_slot: true + usage_slot_name: licence + range: LicenseDocument required: false multivalued: false + inlined: true inlined_as_list: true - Dataset_theme: - name: Dataset_theme + DataService_publisher: + name: DataService_publisher + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/publisher + description: An entity (organisation) responsible for making the Data Service + available. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcterms:publisher + is_a: publisher + domain: DataService + slot_uri: dcterms:publisher + alias: publisher + owner: DataService + domain_of: + - DataService + is_usage_slot: true + usage_slot_name: publisher + range: Agent + required: false + multivalued: false + inlined: true + inlined_as_list: true + DataService_serves_dataset: + name: DataService_serves_dataset + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/serves_dataset + description: This property refers to a collection of data that this data service + can distribute. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcat:servesDataset + is_a: serves_dataset + domain: DataService + slot_uri: dcat:servesDataset + alias: serves_dataset + owner: DataService + domain_of: + - DataService + is_usage_slot: true + usage_slot_name: serves_dataset + range: Dataset + required: false + multivalued: true + inlined: true + inlined_as_list: true + DataService_theme: + name: DataService_theme definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/theme - description: A category of the Dataset. + description: A category of the Data Service. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - dcat:theme is_a: theme - domain: Dataset + domain: DataService slot_uri: dcat:theme alias: theme - owner: Dataset + owner: DataService domain_of: - - Dataset + - DataService is_usage_slot: true usage_slot_name: theme range: Concept @@ -10276,190 +10796,210 @@ slots: multivalued: true inlined: true inlined_as_list: true - Dataset_title: - name: Dataset_title + DataService_title: + name: DataService_title definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/title - description: A name given to the Dataset. + description: A name given to the Data Service. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - dcterms:title is_a: title - domain: Dataset + domain: DataService slot_uri: dcterms:title alias: title - owner: Dataset + owner: DataService domain_of: - - Dataset + - DataService is_usage_slot: true usage_slot_name: title range: string required: true multivalued: true inlined_as_list: true - Dataset_type: - name: Dataset_type - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/type - description: A type of the Dataset. + Dataset_access_rights: + name: Dataset_access_rights + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/access_rights + description: Information that indicates whether the Dataset is publicly accessible, + has access restrictions or is not public. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:type - is_a: type + - dcterms:accessRights + is_a: access_rights domain: Dataset - slot_uri: dcterms:type - alias: type + slot_uri: dcterms:accessRights + alias: access_rights owner: Dataset domain_of: - Dataset is_usage_slot: true - usage_slot_name: type - range: Concept + usage_slot_name: access_rights + range: RightsStatement required: false - multivalued: true + multivalued: false inlined: true inlined_as_list: true - Dataset_version: - name: Dataset_version - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/version - description: The version indicator (name or identifier) of a resource. + Dataset_applicable_legislation: + name: Dataset_applicable_legislation + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/applicable_legislation + description: The legislation that mandates the creation or management of the Dataset. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:version - is_a: version + - dcatap:applicableLegislation + is_a: applicable_legislation domain: Dataset - slot_uri: dcat:version - alias: version + slot_uri: dcatap:applicableLegislation + alias: applicable_legislation owner: Dataset domain_of: - Dataset is_usage_slot: true - usage_slot_name: version - range: string + usage_slot_name: applicable_legislation + range: LegalResource required: false - multivalued: false + multivalued: true + inlined: true inlined_as_list: true - Dataset_version_notes: - name: Dataset_version_notes - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/version_notes - description: A description of the differences between this version and a previous - version of the Dataset. + Dataset_conforms_to: + name: Dataset_conforms_to + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/conforms_to + description: An implementing rule or other specification. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - adms:versionNotes - is_a: version_notes + - dcterms:conformsTo + is_a: conforms_to domain: Dataset - slot_uri: adms:versionNotes - alias: version_notes + slot_uri: dcterms:conformsTo + alias: conforms_to owner: Dataset domain_of: - Dataset is_usage_slot: true - usage_slot_name: version_notes - range: string + usage_slot_name: conforms_to + range: Standard required: false multivalued: true + inlined: true inlined_as_list: true - Dataset_was_generated_by: - name: Dataset_was_generated_by - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/was_generated_by - description: An activity that generated, or provides the business context for, - the creation of the dataset. - notes: - - stricter than DCAT-AP + Dataset_contact_point: + name: Dataset_contact_point + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/contact_point + description: Contact information that can be used for sending comments about the + Dataset. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - prov:wasGeneratedBy - is_a: was_generated_by + - dcat:contactPoint + is_a: contact_point domain: Dataset - slot_uri: prov:wasGeneratedBy - alias: was_generated_by + slot_uri: dcat:contactPoint + alias: contact_point owner: Dataset domain_of: - Dataset is_usage_slot: true - usage_slot_name: was_generated_by - range: DataGeneratingActivity - required: true + usage_slot_name: contact_point + range: Kind + required: false + recommended: true multivalued: true inlined: true inlined_as_list: true - DatasetSeries_applicable_legislation: - name: DatasetSeries_applicable_legislation - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/applicable_legislation - description: The legislation that mandates the creation or management of the Dataset - Series. + Dataset_creator: + name: Dataset_creator + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/creator + description: An entity responsible for producing the dataset. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcatap:applicableLegislation - is_a: applicable_legislation - domain: DatasetSeries - slot_uri: dcatap:applicableLegislation - alias: applicable_legislation - owner: DatasetSeries + - dcterms:creator + is_a: creator + domain: Dataset + slot_uri: dcterms:creator + alias: creator + owner: Dataset domain_of: - - DatasetSeries + - Dataset is_usage_slot: true - usage_slot_name: applicable_legislation - range: LegalResource + usage_slot_name: creator + range: Agent required: false multivalued: true inlined: true inlined_as_list: true - DatasetSeries_contact_point: - name: DatasetSeries_contact_point - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/contact_point - description: Contact information that can be used for sending comments about the - Dataset Series. + Dataset_dataset_distribution: + name: Dataset_dataset_distribution + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/dataset_distribution + description: An available Distribution for the Dataset. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:contactPoint - is_a: contact_point - domain: DatasetSeries - slot_uri: dcat:contactPoint - alias: contact_point - owner: DatasetSeries + - dcat:distribution + is_a: dataset_distribution + domain: Dataset + slot_uri: dcat:distribution + alias: dataset_distribution + owner: Dataset domain_of: - - DatasetSeries + - Dataset is_usage_slot: true - usage_slot_name: contact_point - range: Kind + usage_slot_name: dataset_distribution + range: Distribution required: false multivalued: true inlined: true inlined_as_list: true - DatasetSeries_description: - name: DatasetSeries_description + Dataset_description: + name: Dataset_description definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/description - description: A free-text account of the Dataset Series. + description: A free-text account of the Dataset. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - dcterms:description is_a: description - domain: DatasetSeries + domain: Dataset slot_uri: dcterms:description alias: description - owner: DatasetSeries + owner: Dataset domain_of: - - DatasetSeries + - Dataset is_usage_slot: true usage_slot_name: description range: string required: true multivalued: true inlined_as_list: true - DatasetSeries_frequency: - name: DatasetSeries_frequency + Dataset_documentation: + name: Dataset_documentation + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/documentation + description: A page or document about this Dataset. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - foaf:page + is_a: documentation + domain: Dataset + slot_uri: foaf:page + alias: documentation + owner: Dataset + domain_of: + - Dataset + is_usage_slot: true + usage_slot_name: documentation + range: Document + required: false + multivalued: true + inlined: true + inlined_as_list: true + Dataset_frequency: + name: Dataset_frequency definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/frequency - description: The frequency at which the Dataset Series is updated. + description: The frequency at which the Dataset is updated. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - dcterms:accrualPeriodicity is_a: frequency - domain: DatasetSeries + domain: Dataset slot_uri: dcterms:accrualPeriodicity alias: frequency - owner: DatasetSeries + owner: Dataset domain_of: - - DatasetSeries + - Dataset is_usage_slot: true usage_slot_name: frequency range: Frequency @@ -10467,20 +11007,20 @@ slots: multivalued: false inlined: true inlined_as_list: false - DatasetSeries_geographical_coverage: - name: DatasetSeries_geographical_coverage + Dataset_geographical_coverage: + name: Dataset_geographical_coverage definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/geographical_coverage - description: A geographic region that is covered by the Dataset Series. + description: A geographic region that is covered by the Dataset. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - dcterms:spatial is_a: geographical_coverage - domain: DatasetSeries + domain: Dataset slot_uri: dcterms:spatial alias: geographical_coverage - owner: DatasetSeries + owner: Dataset domain_of: - - DatasetSeries + - Dataset is_usage_slot: true usage_slot_name: geographical_coverage range: Location @@ -10488,161 +11028,190 @@ slots: multivalued: true inlined: true inlined_as_list: true - DatasetSeries_modification_date: - name: DatasetSeries_modification_date - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/modification_date - description: The most recent date on which the Dataset Series was changed or modified. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcterms:modified - is_a: modification_date - domain: DatasetSeries - slot_uri: dcterms:modified - alias: modification_date - owner: DatasetSeries - domain_of: - - DatasetSeries - is_usage_slot: true - usage_slot_name: modification_date - range: date - required: false - multivalued: false - inlined_as_list: false - DatasetSeries_publisher: - name: DatasetSeries_publisher - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/publisher - description: 'An entity (organisation) responsible for ensuring the coherency - of the Dataset Series ' + Dataset_has_version: + name: Dataset_has_version + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_version + description: A related Dataset that is a version, edition, or adaptation of the + described Dataset. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:publisher - is_a: publisher - domain: DatasetSeries - slot_uri: dcterms:publisher - alias: publisher - owner: DatasetSeries + - dcat:hasVersion + is_a: has_version + domain: Dataset + slot_uri: dcat:hasVersion + alias: has_version + owner: Dataset domain_of: - - DatasetSeries + - Dataset is_usage_slot: true - usage_slot_name: publisher - range: Agent + usage_slot_name: has_version + range: Dataset required: false - multivalued: false + multivalued: true inlined: true inlined_as_list: true - DatasetSeries_release_date: - name: DatasetSeries_release_date - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/release_date - description: The date of formal issuance (e.g., publication) of the Dataset Series. + Dataset_identifier: + name: Dataset_identifier + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/identifier + description: The main identifier for the Dataset, e.g. the URI or other unique + identifier in the context of the Catalogue. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:issued - is_a: release_date - domain: DatasetSeries - slot_uri: dcterms:issued - alias: release_date - owner: DatasetSeries + - dcterms:identifier + is_a: identifier + domain: Dataset + slot_uri: dcterms:identifier + alias: identifier + owner: Dataset domain_of: - - DatasetSeries + - Dataset is_usage_slot: true - usage_slot_name: release_date - range: date + usage_slot_name: identifier + range: string required: false - multivalued: false - inlined_as_list: false - DatasetSeries_temporal_coverage: - name: DatasetSeries_temporal_coverage - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/temporal_coverage - description: A temporal period that the Dataset Series covers. + multivalued: true + inlined_as_list: true + Dataset_in_series: + name: Dataset_in_series + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/in_series + description: A dataset series of which the dataset is part. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:temporal - is_a: temporal_coverage - domain: DatasetSeries - slot_uri: dcterms:temporal - alias: temporal_coverage - owner: DatasetSeries + - dcat:inSeries + is_a: in_series + domain: Dataset + slot_uri: dcat:inSeries + alias: in_series + owner: Dataset domain_of: - - DatasetSeries + - Dataset is_usage_slot: true - usage_slot_name: temporal_coverage - range: PeriodOfTime + usage_slot_name: in_series + range: DatasetSeries required: false multivalued: true inlined: true inlined_as_list: true - DatasetSeries_title: - name: DatasetSeries_title - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/title - description: A name given to the Dataset Series. + Dataset_is_referenced_by: + name: Dataset_is_referenced_by + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/is_referenced_by + description: A related resource, such as a publication, that references, cites, + or otherwise points to the dataset. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:title - is_a: title - domain: DatasetSeries - slot_uri: dcterms:title - alias: title - owner: DatasetSeries + - dcterms:isReferencedBy + is_a: is_referenced_by + domain: Dataset + slot_uri: dcterms:isReferencedBy + alias: is_referenced_by + owner: Dataset domain_of: - - DatasetSeries + - Dataset is_usage_slot: true - usage_slot_name: title - range: string - required: true + usage_slot_name: is_referenced_by + range: Resource + required: false multivalued: true + inlined: true inlined_as_list: true - DefinedTerm_title: - name: DefinedTerm_title - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/title - description: This slot is described in more detail within the class in which it - is used. + Dataset_keyword: + name: Dataset_keyword + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/keyword + description: A keyword or tag describing the Dataset. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - schema:name - is_a: title - domain: DefinedTerm - slot_uri: schema:name - alias: title - owner: DefinedTerm + - dcat:keyword + is_a: keyword + domain: Dataset + slot_uri: dcat:keyword + alias: keyword + owner: Dataset domain_of: - - DefinedTerm + - Dataset is_usage_slot: true - usage_slot_name: title + usage_slot_name: keyword range: string - Device_has_part: - name: Device_has_part - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_part - description: The slot to specify parts of a Device that are themselves Devices. + required: false + recommended: true + multivalued: true + inlined_as_list: true + Dataset_landing_page: + name: Dataset_landing_page + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/landing_page + description: A web page that provides access to the Dataset, its Distributions + and/or additional information. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:hasPart - is_a: AgenticEntity_has_part - domain: Device - slot_uri: dcterms:hasPart - alias: has_part - owner: Device + - dcat:landingPage + is_a: landing_page + domain: Dataset + slot_uri: dcat:landingPage + alias: landing_page + owner: Dataset domain_of: - - Device + - Dataset is_usage_slot: true - usage_slot_name: has_part - range: Device + usage_slot_name: landing_page + range: Document + required: false multivalued: true inlined: true inlined_as_list: true - Device_other_identifier: - name: Device_other_identifier + Dataset_language: + name: Dataset_language + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/language + description: A language of the Dataset. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcterms:language + is_a: language + domain: Dataset + slot_uri: dcterms:language + alias: language + owner: Dataset + domain_of: + - Dataset + is_usage_slot: true + usage_slot_name: language + range: LinguisticSystem + required: false + multivalued: true + inlined: true + inlined_as_list: true + Dataset_modification_date: + name: Dataset_modification_date + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/modification_date + description: The most recent date on which the Dataset was changed or modified. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcterms:modified + is_a: modification_date + domain: Dataset + slot_uri: dcterms:modified + alias: modification_date + owner: Dataset + domain_of: + - Dataset + is_usage_slot: true + usage_slot_name: modification_date + range: date + required: false + multivalued: false + inlined_as_list: false + Dataset_other_identifier: + name: Dataset_other_identifier definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/other_identifier - description: A slot to provide a secondary identifier for a Device. + description: A secondary identifier of the Dataset from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - adms:identifier - is_a: AgenticEntity_other_identifier - domain: Device + is_a: other_identifier + domain: Dataset slot_uri: adms:identifier alias: other_identifier - owner: Device + owner: Dataset domain_of: - - Device + - Dataset is_usage_slot: true usage_slot_name: other_identifier range: Identifier @@ -10650,561 +11219,624 @@ slots: multivalued: true inlined: true inlined_as_list: true - Distribution_access_URL: - name: Distribution_access_URL - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/access_URL - description: A URL that gives access to a Distribution of the Dataset. + Dataset_provenance: + name: Dataset_provenance + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/provenance + description: A statement about the lineage of a Dataset. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:accessURL - is_a: access_URL - domain: Distribution - slot_uri: dcat:accessURL - alias: access_URL - owner: Distribution + - dcterms:provenance + is_a: provenance + domain: Dataset + slot_uri: dcterms:provenance + alias: provenance + owner: Dataset domain_of: - - Distribution + - Dataset is_usage_slot: true - usage_slot_name: access_URL - range: Resource - required: true + usage_slot_name: provenance + range: ProvenanceStatement + required: false multivalued: true inlined: true inlined_as_list: true - Distribution_access_service: - name: Distribution_access_service - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/access_service - description: A data service that gives access to the distribution of the dataset. + Dataset_publisher: + name: Dataset_publisher + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/publisher + description: An entity (organisation) responsible for making the Dataset available. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:accessService - is_a: access_service - domain: Distribution - slot_uri: dcat:accessService - alias: access_service - owner: Distribution + - dcterms:publisher + is_a: publisher + domain: Dataset + slot_uri: dcterms:publisher + alias: publisher + owner: Dataset domain_of: - - Distribution + - Dataset is_usage_slot: true - usage_slot_name: access_service - range: DataService + usage_slot_name: publisher + range: Agent required: false - multivalued: true + multivalued: false inlined: true inlined_as_list: true - Distribution_applicable_legislation: - name: Distribution_applicable_legislation - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/applicable_legislation - description: The legislation that mandates the creation or management of the Distribution. + Dataset_qualified_attribution: + name: Dataset_qualified_attribution + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/qualified_attribution + description: An Agent having some form of responsibility for the resource. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcatap:applicableLegislation - is_a: applicable_legislation - domain: Distribution - slot_uri: dcatap:applicableLegislation - alias: applicable_legislation - owner: Distribution + - prov:qualifiedAttribution + is_a: qualified_attribution + domain: Dataset + slot_uri: prov:qualifiedAttribution + alias: qualified_attribution + owner: Dataset domain_of: - - Distribution + - Dataset is_usage_slot: true - usage_slot_name: applicable_legislation - range: LegalResource + usage_slot_name: qualified_attribution + range: Attribution required: false multivalued: true inlined: true inlined_as_list: true - Distribution_availability: - name: Distribution_availability - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/availability - description: An indication how long it is planned to keep the Distribution of - the Dataset available. + Dataset_qualified_relation: + name: Dataset_qualified_relation + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/qualified_relation + description: A description of a relationship with another resource. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcatap:availability - is_a: availability - domain: Distribution - slot_uri: dcatap:availability - alias: availability - owner: Distribution + - dcat:qualifiedRelation + is_a: qualified_relation + domain: Dataset + slot_uri: dcat:qualifiedRelation + alias: qualified_relation + owner: Dataset domain_of: - - Distribution + - Dataset is_usage_slot: true - usage_slot_name: availability - range: Concept + usage_slot_name: qualified_relation + range: Relationship required: false - recommended: true - multivalued: false + multivalued: true inlined: true - inlined_as_list: false - Distribution_byte_size: - name: Distribution_byte_size - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/byte_size - description: The size of a Distribution in bytes. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcat:byteSize - is_a: byte_size - domain: Distribution - slot_uri: dcat:byteSize - alias: byte_size - owner: Distribution - domain_of: - - Distribution - is_usage_slot: true - usage_slot_name: byte_size - range: nonNegativeInteger - required: false - multivalued: false - inlined_as_list: false - Distribution_checksum: - name: Distribution_checksum - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/checksum - description: A mechanism that can be used to verify that the contents of a distribution - have not changed. + inlined_as_list: true + Dataset_related_resource: + name: Dataset_related_resource + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/related_resource + description: A related resource. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - spdx:checksum - is_a: checksum - domain: Distribution - slot_uri: spdx:checksum - alias: checksum - owner: Distribution + - dcterms:relation + is_a: related_resource + domain: Dataset + slot_uri: dcterms:relation + alias: related_resource + owner: Dataset domain_of: - - Distribution + - Dataset is_usage_slot: true - usage_slot_name: checksum - range: Checksum + usage_slot_name: related_resource + range: Resource required: false - multivalued: false + multivalued: true inlined: true inlined_as_list: true - Distribution_compression_format: - name: Distribution_compression_format - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/compression_format - description: The format of the file in which the data is contained in a compressed - form, e.g. to reduce the size of the downloadable file. + Dataset_release_date: + name: Dataset_release_date + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/release_date + description: The date of formal issuance (e.g., publication) of the Dataset. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:compressFormat - is_a: compression_format - domain: Distribution - slot_uri: dcat:compressFormat - alias: compression_format - owner: Distribution + - dcterms:issued + is_a: release_date + domain: Dataset + slot_uri: dcterms:issued + alias: release_date + owner: Dataset domain_of: - - Distribution + - Dataset is_usage_slot: true - usage_slot_name: compression_format - range: MediaType + usage_slot_name: release_date + range: date required: false multivalued: false - inlined: true - inlined_as_list: true - Distribution_description: - name: Distribution_description - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/description - description: A free-text account of the Distribution. + inlined_as_list: false + Dataset_sample: + name: Dataset_sample + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/sample + description: A sample distribution of the dataset. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:description - is_a: description - domain: Distribution - slot_uri: dcterms:description - alias: description - owner: Distribution + - adms:sample + is_a: sample + domain: Dataset + slot_uri: adms:sample + alias: sample + owner: Dataset domain_of: - - Distribution + - Dataset is_usage_slot: true - usage_slot_name: description - range: string + usage_slot_name: sample + range: Distribution required: false - recommended: true multivalued: true + inlined: true inlined_as_list: true - Distribution_documentation: - name: Distribution_documentation - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/documentation - description: A page or document about this Distribution. + Dataset_source: + name: Dataset_source + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/source + description: A related Dataset from which the described Dataset is derived. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - foaf:page - is_a: documentation - domain: Distribution - slot_uri: foaf:page - alias: documentation - owner: Distribution + - dcterms:source + is_a: source + domain: Dataset + slot_uri: dcterms:source + alias: source + owner: Dataset domain_of: - - Distribution + - Dataset is_usage_slot: true - usage_slot_name: documentation - range: Document + usage_slot_name: source + range: Dataset required: false multivalued: true inlined: true inlined_as_list: true - Distribution_download_URL: - name: Distribution_download_URL - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/download_URL - description: A URL that is a direct link to a downloadable file in a given format. + Dataset_spatial_resolution: + name: Dataset_spatial_resolution + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/spatial_resolution + description: The minimum spatial separation resolvable in a dataset, measured + in meters. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:downloadURL - is_a: download_URL - domain: Distribution - slot_uri: dcat:downloadURL - alias: download_URL - owner: Distribution + - dcat:spatialResolutionInMeters + is_a: spatial_resolution + domain: Dataset + slot_uri: dcat:spatialResolutionInMeters + alias: spatial_resolution + owner: Dataset domain_of: - - Distribution + - Dataset is_usage_slot: true - usage_slot_name: download_URL - range: Resource + usage_slot_name: spatial_resolution + range: decimal required: false - multivalued: true - inlined: true - inlined_as_list: true - Distribution_format: - name: Distribution_format - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/format - description: The file format of the Distribution. + multivalued: false + inlined_as_list: false + Dataset_temporal_coverage: + name: Dataset_temporal_coverage + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/temporal_coverage + description: A temporal period that the Dataset covers. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:format - is_a: format - domain: Distribution - slot_uri: dcterms:format - alias: format - owner: Distribution + - dcterms:temporal + is_a: temporal_coverage + domain: Dataset + slot_uri: dcterms:temporal + alias: temporal_coverage + owner: Dataset domain_of: - - Distribution + - Dataset is_usage_slot: true - usage_slot_name: format - range: MediaTypeOrExtent + usage_slot_name: temporal_coverage + range: PeriodOfTime required: false - recommended: true - multivalued: false + multivalued: true inlined: true inlined_as_list: true - Distribution_has_policy: - name: Distribution_has_policy - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_policy - description: The policy expressing the rights associated with the distribution - if using the [[ODRL]] vocabulary. + Dataset_temporal_resolution: + name: Dataset_temporal_resolution + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/temporal_resolution + description: The minimum time period resolvable in the dataset. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - odrl:hasPolicy - is_a: has_policy - domain: Distribution - slot_uri: odrl:hasPolicy - alias: has_policy - owner: Distribution + - dcat:temporalResolution + is_a: temporal_resolution + domain: Dataset + slot_uri: dcat:temporalResolution + alias: temporal_resolution + owner: Dataset domain_of: - - Distribution + - Dataset is_usage_slot: true - usage_slot_name: has_policy - range: Policy + usage_slot_name: temporal_resolution + range: duration required: false multivalued: false - inlined: true inlined_as_list: true - Distribution_language: - name: Distribution_language - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/language - description: A language used in the Distribution. + Dataset_theme: + name: Dataset_theme + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/theme + description: A category of the Dataset. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:language - is_a: language - domain: Distribution - slot_uri: dcterms:language - alias: language - owner: Distribution + - dcat:theme + is_a: theme + domain: Dataset + slot_uri: dcat:theme + alias: theme + owner: Dataset domain_of: - - Distribution + - Dataset is_usage_slot: true - usage_slot_name: language - range: LinguisticSystem + usage_slot_name: theme + range: Concept required: false + recommended: true multivalued: true inlined: true inlined_as_list: true - Distribution_licence: - name: Distribution_licence - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/licence - description: A licence under which the Distribution is made available. + Dataset_title: + name: Dataset_title + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/title + description: A name given to the Dataset. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:license - is_a: licence - domain: Distribution - slot_uri: dcterms:license - alias: licence - owner: Distribution + - dcterms:title + is_a: title + domain: Dataset + slot_uri: dcterms:title + alias: title + owner: Dataset domain_of: - - Distribution + - Dataset is_usage_slot: true - usage_slot_name: licence - range: LicenseDocument - required: false - multivalued: false - inlined: true + usage_slot_name: title + range: string + required: true + multivalued: true inlined_as_list: true - Distribution_linked_schemas: - name: Distribution_linked_schemas - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/linked_schemas - description: An established schema to which the described Distribution conforms. + Dataset_type: + name: Dataset_type + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/type + description: A type of the Dataset. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:conformsTo - is_a: linked_schemas - domain: Distribution - slot_uri: dcterms:conformsTo - alias: linked_schemas - owner: Distribution + - dcterms:type + is_a: type + domain: Dataset + slot_uri: dcterms:type + alias: type + owner: Dataset domain_of: - - Distribution + - Dataset is_usage_slot: true - usage_slot_name: linked_schemas - range: Standard + usage_slot_name: type + range: Concept required: false multivalued: true inlined: true inlined_as_list: true - Distribution_media_type: - name: Distribution_media_type - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/media_type - description: The media type of the Distribution as defined in the official register - of media types managed by IANA. + Dataset_version: + name: Dataset_version + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/version + description: The version indicator (name or identifier) of a resource. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:mediaType - is_a: media_type - domain: Distribution - slot_uri: dcat:mediaType - alias: media_type - owner: Distribution + - dcat:version + is_a: version + domain: Dataset + slot_uri: dcat:version + alias: version + owner: Dataset domain_of: - - Distribution + - Dataset is_usage_slot: true - usage_slot_name: media_type - range: MediaType + usage_slot_name: version + range: string required: false multivalued: false - inlined: true - inlined_as_list: false - Distribution_modification_date: - name: Distribution_modification_date - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/modification_date - description: The most recent date on which the Distribution was changed or modified. + inlined_as_list: true + Dataset_version_notes: + name: Dataset_version_notes + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/version_notes + description: A description of the differences between this version and a previous + version of the Dataset. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:modified - is_a: modification_date - domain: Distribution - slot_uri: dcterms:modified - alias: modification_date - owner: Distribution + - adms:versionNotes + is_a: version_notes + domain: Dataset + slot_uri: adms:versionNotes + alias: version_notes + owner: Dataset domain_of: - - Distribution + - Dataset is_usage_slot: true - usage_slot_name: modification_date - range: date + usage_slot_name: version_notes + range: string required: false - multivalued: false - inlined_as_list: false - Distribution_packaging_format: - name: Distribution_packaging_format - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/packaging_format - description: The format of the file in which one or more data files are grouped - together, e.g. to enable a set of related files to be downloaded together. + multivalued: true + inlined_as_list: true + Dataset_was_generated_by: + name: Dataset_was_generated_by + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/was_generated_by + description: An activity that generated, or provides the business context for, + the creation of the dataset. + notes: + - stricter than DCAT-AP from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:packageFormat - is_a: packaging_format - domain: Distribution - slot_uri: dcat:packageFormat - alias: packaging_format - owner: Distribution + - prov:wasGeneratedBy + is_a: was_generated_by + domain: Dataset + slot_uri: prov:wasGeneratedBy + alias: was_generated_by + owner: Dataset domain_of: - - Distribution + - Dataset is_usage_slot: true - usage_slot_name: packaging_format - range: MediaType - required: false - multivalued: false + usage_slot_name: was_generated_by + range: DataGeneratingActivity + required: true + multivalued: true inlined: true inlined_as_list: true - Distribution_release_date: - name: Distribution_release_date - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/release_date - description: The date of formal issuance (e.g., publication) of the Distribution. + DatasetSeries_applicable_legislation: + name: DatasetSeries_applicable_legislation + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/applicable_legislation + description: The legislation that mandates the creation or management of the Dataset + Series. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:issued - is_a: release_date - domain: Distribution - slot_uri: dcterms:issued - alias: release_date - owner: Distribution + - dcatap:applicableLegislation + is_a: applicable_legislation + domain: DatasetSeries + slot_uri: dcatap:applicableLegislation + alias: applicable_legislation + owner: DatasetSeries domain_of: - - Distribution + - DatasetSeries is_usage_slot: true - usage_slot_name: release_date - range: date + usage_slot_name: applicable_legislation + range: LegalResource required: false - multivalued: false - inlined_as_list: false - Distribution_rights: - name: Distribution_rights - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/rights - description: A statement that specifies rights associated with the Distribution. + multivalued: true + inlined: true + inlined_as_list: true + DatasetSeries_contact_point: + name: DatasetSeries_contact_point + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/contact_point + description: Contact information that can be used for sending comments about the + Dataset Series. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:rights - is_a: rights - domain: Distribution - slot_uri: dcterms:rights - alias: rights - owner: Distribution + - dcat:contactPoint + is_a: contact_point + domain: DatasetSeries + slot_uri: dcat:contactPoint + alias: contact_point + owner: DatasetSeries domain_of: - - Distribution + - DatasetSeries is_usage_slot: true - usage_slot_name: rights - range: RightsStatement + usage_slot_name: contact_point + range: Kind required: false - multivalued: false + multivalued: true inlined: true inlined_as_list: true - Distribution_spatial_resolution: - name: Distribution_spatial_resolution - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/spatial_resolution - description: The minimum spatial separation resolvable in a dataset distribution, - measured in meters. + DatasetSeries_description: + name: DatasetSeries_description + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/description + description: A free-text account of the Dataset Series. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:spatialResolutionInMeters - is_a: spatial_resolution - domain: Distribution - slot_uri: dcat:spatialResolutionInMeters - alias: spatial_resolution - owner: Distribution + - dcterms:description + is_a: description + domain: DatasetSeries + slot_uri: dcterms:description + alias: description + owner: DatasetSeries domain_of: - - Distribution + - DatasetSeries is_usage_slot: true - usage_slot_name: spatial_resolution - range: decimal - required: false - multivalued: false - inlined_as_list: false - Distribution_status: - name: Distribution_status - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/status - description: The status of the distribution in the context of maturity lifecycle. + usage_slot_name: description + range: string + required: true + multivalued: true + inlined_as_list: true + DatasetSeries_frequency: + name: DatasetSeries_frequency + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/frequency + description: The frequency at which the Dataset Series is updated. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - adms:status - is_a: status - domain: Distribution - slot_uri: adms:status - alias: status - owner: Distribution + - dcterms:accrualPeriodicity + is_a: frequency + domain: DatasetSeries + slot_uri: dcterms:accrualPeriodicity + alias: frequency + owner: DatasetSeries domain_of: - - Distribution + - DatasetSeries is_usage_slot: true - usage_slot_name: status - range: Concept + usage_slot_name: frequency + range: Frequency required: false multivalued: false inlined: true + inlined_as_list: false + DatasetSeries_geographical_coverage: + name: DatasetSeries_geographical_coverage + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/geographical_coverage + description: A geographic region that is covered by the Dataset Series. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcterms:spatial + is_a: geographical_coverage + domain: DatasetSeries + slot_uri: dcterms:spatial + alias: geographical_coverage + owner: DatasetSeries + domain_of: + - DatasetSeries + is_usage_slot: true + usage_slot_name: geographical_coverage + range: Location + required: false + multivalued: true + inlined: true inlined_as_list: true - Distribution_temporal_resolution: - name: Distribution_temporal_resolution - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/temporal_resolution - description: The minimum time period resolvable in the dataset distribution. + DatasetSeries_modification_date: + name: DatasetSeries_modification_date + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/modification_date + description: The most recent date on which the Dataset Series was changed or modified. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:temporalResolution - is_a: temporal_resolution - domain: Distribution - slot_uri: dcat:temporalResolution - alias: temporal_resolution - owner: Distribution + - dcterms:modified + is_a: modification_date + domain: DatasetSeries + slot_uri: dcterms:modified + alias: modification_date + owner: DatasetSeries domain_of: - - Distribution + - DatasetSeries is_usage_slot: true - usage_slot_name: temporal_resolution - range: duration + usage_slot_name: modification_date + range: date + required: false + multivalued: false + inlined_as_list: false + DatasetSeries_publisher: + name: DatasetSeries_publisher + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/publisher + description: 'An entity (organisation) responsible for ensuring the coherency + of the Dataset Series ' + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcterms:publisher + is_a: publisher + domain: DatasetSeries + slot_uri: dcterms:publisher + alias: publisher + owner: DatasetSeries + domain_of: + - DatasetSeries + is_usage_slot: true + usage_slot_name: publisher + range: Agent required: false multivalued: false + inlined: true inlined_as_list: true - Distribution_title: - name: Distribution_title + DatasetSeries_release_date: + name: DatasetSeries_release_date + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/release_date + description: The date of formal issuance (e.g., publication) of the Dataset Series. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcterms:issued + is_a: release_date + domain: DatasetSeries + slot_uri: dcterms:issued + alias: release_date + owner: DatasetSeries + domain_of: + - DatasetSeries + is_usage_slot: true + usage_slot_name: release_date + range: date + required: false + multivalued: false + inlined_as_list: false + DatasetSeries_temporal_coverage: + name: DatasetSeries_temporal_coverage + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/temporal_coverage + description: A temporal period that the Dataset Series covers. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcterms:temporal + is_a: temporal_coverage + domain: DatasetSeries + slot_uri: dcterms:temporal + alias: temporal_coverage + owner: DatasetSeries + domain_of: + - DatasetSeries + is_usage_slot: true + usage_slot_name: temporal_coverage + range: PeriodOfTime + required: false + multivalued: true + inlined: true + inlined_as_list: true + DatasetSeries_title: + name: DatasetSeries_title definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/title - description: A name given to the Distribution. + description: A name given to the Dataset Series. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - dcterms:title is_a: title - domain: Distribution + domain: DatasetSeries slot_uri: dcterms:title alias: title - owner: Distribution + owner: DatasetSeries domain_of: - - Distribution + - DatasetSeries is_usage_slot: true usage_slot_name: title range: string - required: false + required: true multivalued: true inlined_as_list: true - Entity_title: - name: Entity_title + DefinedTerm_title: + name: DefinedTerm_title definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/title - description: The slot to provide a title for the Entity. + description: This slot is described in more detail within the class in which it + is used. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:title + - schema:name is_a: title - domain: Entity - slot_uri: dcterms:title + domain: DefinedTerm + slot_uri: schema:name alias: title - owner: Entity + owner: DefinedTerm domain_of: - - Entity + - DefinedTerm is_usage_slot: true usage_slot_name: title range: string - Entity_description: - name: Entity_description - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/description - description: The slot to provide a description for the Entity. + Device_has_part: + name: Device_has_part + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_part + description: The slot to specify parts of a Device that are themselves Devices. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:description - is_a: description - domain: Entity - slot_uri: dcterms:description - alias: description - owner: Entity + - dcterms:hasPart + is_a: AgenticEntity_has_part + domain: Device + slot_uri: dcterms:hasPart + alias: has_part + owner: Device domain_of: - - Entity + - Device is_usage_slot: true - usage_slot_name: description - range: string - Entity_other_identifier: - name: Entity_other_identifier + usage_slot_name: has_part + range: Device + multivalued: true + inlined: true + inlined_as_list: true + Device_other_identifier: + name: Device_other_identifier definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/other_identifier - description: A slot to provide a secondary identifier of the Entity. + description: A slot to provide a secondary identifier for a Device. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - adms:identifier - is_a: other_identifier - domain: Entity + is_a: AgenticEntity_other_identifier + domain: Device slot_uri: adms:identifier alias: other_identifier - owner: Entity + owner: Device domain_of: - - Entity + - Device is_usage_slot: true usage_slot_name: other_identifier range: Identifier @@ -11212,454 +11844,561 @@ slots: multivalued: true inlined: true inlined_as_list: true - Entity_has_part: - name: Entity_has_part - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_part - description: A slot to provide a part of the Entity. + Distribution_access_URL: + name: Distribution_access_URL + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/access_URL + description: A URL that gives access to a Distribution of the Dataset. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:hasPart - is_a: has_part - domain: Entity - slot_uri: dcterms:hasPart - alias: has_part - owner: Entity + - dcat:accessURL + is_a: access_URL + domain: Distribution + slot_uri: dcat:accessURL + alias: access_URL + owner: Distribution domain_of: - - Entity + - Distribution is_usage_slot: true - usage_slot_name: has_part - range: Entity + usage_slot_name: access_URL + range: Resource + required: true multivalued: true inlined: true inlined_as_list: true - Entity_part_of: - name: Entity_part_of - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/part_of - description: The slot to specify an Entity of which the Entity is a part. - notes: - - not in DCAT-AP - in_subset: - - domain_agnostic_core + Distribution_access_service: + name: Distribution_access_service + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/access_service + description: A data service that gives access to the distribution of the dataset. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:isPartOf - is_a: part_of - domain: Entity - slot_uri: dcterms:isPartOf - alias: part_of - owner: Entity + - dcat:accessService + is_a: access_service + domain: Distribution + slot_uri: dcat:accessService + alias: access_service + owner: Distribution domain_of: - - Entity + - Distribution is_usage_slot: true - usage_slot_name: part_of - range: Entity + usage_slot_name: access_service + range: DataService + required: false multivalued: true inlined: true inlined_as_list: true - EvaluatedActivity_other_identifier: - name: EvaluatedActivity_other_identifier - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/other_identifier - description: A slot to provide a secondary identifier of the EvaluatedActivity. + Distribution_applicable_legislation: + name: Distribution_applicable_legislation + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/applicable_legislation + description: The legislation that mandates the creation or management of the Distribution. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - adms:identifier - is_a: Activity_other_identifier - domain: EvaluatedActivity - slot_uri: adms:identifier - alias: other_identifier - owner: EvaluatedActivity + - dcatap:applicableLegislation + is_a: applicable_legislation + domain: Distribution + slot_uri: dcatap:applicableLegislation + alias: applicable_legislation + owner: Distribution domain_of: - - EvaluatedActivity + - Distribution is_usage_slot: true - usage_slot_name: other_identifier - range: Identifier + usage_slot_name: applicable_legislation + range: LegalResource required: false multivalued: true inlined: true inlined_as_list: true - EvaluatedEntity_title: - name: EvaluatedEntity_title - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/title - description: The slot to provide a title for the EvaluatedEntity. + Distribution_availability: + name: Distribution_availability + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/availability + description: An indication how long it is planned to keep the Distribution of + the Dataset available. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:title - is_a: Entity_title - domain: EvaluatedEntity - slot_uri: dcterms:title - alias: title - owner: EvaluatedEntity + - dcatap:availability + is_a: availability + domain: Distribution + slot_uri: dcatap:availability + alias: availability + owner: Distribution domain_of: - - EvaluatedEntity + - Distribution is_usage_slot: true - usage_slot_name: title - range: string - EvaluatedEntity_description: - name: EvaluatedEntity_description - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/description - description: The slot to provide a description for the EvaluatedEntity. + usage_slot_name: availability + range: Concept + required: false + recommended: true + multivalued: false + inlined: true + inlined_as_list: false + Distribution_byte_size: + name: Distribution_byte_size + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/byte_size + description: The size of a Distribution in bytes. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:description - is_a: Entity_description - domain: EvaluatedEntity - slot_uri: dcterms:description - alias: description - owner: EvaluatedEntity + - dcat:byteSize + is_a: byte_size + domain: Distribution + slot_uri: dcat:byteSize + alias: byte_size + owner: Distribution domain_of: - - EvaluatedEntity + - Distribution is_usage_slot: true - usage_slot_name: description - range: string - EvaluatedEntity_was_generated_by: - name: EvaluatedEntity_was_generated_by - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/was_generated_by - description: A slot to provide the Activity which created the EvaluatedEntity. + usage_slot_name: byte_size + range: nonNegativeInteger + required: false + multivalued: false + inlined_as_list: false + Distribution_checksum: + name: Distribution_checksum + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/checksum + description: A mechanism that can be used to verify that the contents of a distribution + have not changed. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - prov:wasGeneratedBy - is_a: was_generated_by - domain: EvaluatedEntity - slot_uri: prov:wasGeneratedBy - alias: was_generated_by - owner: EvaluatedEntity + - spdx:checksum + is_a: checksum + domain: Distribution + slot_uri: spdx:checksum + alias: checksum + owner: Distribution domain_of: - - EvaluatedEntity + - Distribution is_usage_slot: true - usage_slot_name: was_generated_by - range: Activity - multivalued: true + usage_slot_name: checksum + range: Checksum + required: false + multivalued: false inlined: true inlined_as_list: true - EvaluatedEntity_other_identifier: - name: EvaluatedEntity_other_identifier - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/other_identifier - description: A slot to provide a secondary identifier of the EvaluatedEntity. + Distribution_compression_format: + name: Distribution_compression_format + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/compression_format + description: The format of the file in which the data is contained in a compressed + form, e.g. to reduce the size of the downloadable file. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - adms:identifier - is_a: Entity_other_identifier - domain: EvaluatedEntity - slot_uri: adms:identifier - alias: other_identifier - owner: EvaluatedEntity + - dcat:compressFormat + is_a: compression_format + domain: Distribution + slot_uri: dcat:compressFormat + alias: compression_format + owner: Distribution domain_of: - - EvaluatedEntity + - Distribution is_usage_slot: true - usage_slot_name: other_identifier - range: Identifier + usage_slot_name: compression_format + range: MediaType required: false - multivalued: true + multivalued: false inlined: true inlined_as_list: true - Identifier_notation: - name: Identifier_notation - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/notation - description: A string that is an identifier in the context of the identifier scheme - referenced by its datatype. + Distribution_description: + name: Distribution_description + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/description + description: A free-text account of the Distribution. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - skos:notation - is_a: notation - domain: Identifier - slot_uri: skos:notation - alias: notation - owner: Identifier + - dcterms:description + is_a: description + domain: Distribution + slot_uri: dcterms:description + alias: description + owner: Distribution domain_of: - - Identifier + - Distribution is_usage_slot: true - usage_slot_name: notation + usage_slot_name: description range: string - required: true - multivalued: false - inlined_as_list: false - LicenseDocument_type: - name: LicenseDocument_type - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/type - description: A type of licence, e.g. indicating 'public domain' or 'royalties - required'. + required: false + recommended: true + multivalued: true + inlined_as_list: true + Distribution_documentation: + name: Distribution_documentation + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/documentation + description: A page or document about this Distribution. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:type - is_a: type - domain: LicenseDocument - slot_uri: dcterms:type - alias: type - owner: LicenseDocument + - foaf:page + is_a: documentation + domain: Distribution + slot_uri: foaf:page + alias: documentation + owner: Distribution domain_of: - - LicenseDocument + - Distribution is_usage_slot: true - usage_slot_name: type - range: Concept + usage_slot_name: documentation + range: Document required: false - recommended: true multivalued: true inlined: true inlined_as_list: true - Location_bbox: - name: Location_bbox - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/bbox - description: The geographic bounding box of a resource. + Distribution_download_URL: + name: Distribution_download_URL + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/download_URL + description: A URL that is a direct link to a downloadable file in a given format. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:bbox - is_a: bbox - domain: Location - slot_uri: dcat:bbox - alias: bbox - owner: Location + - dcat:downloadURL + is_a: download_URL + domain: Distribution + slot_uri: dcat:downloadURL + alias: download_URL + owner: Distribution domain_of: - - Location + - Distribution is_usage_slot: true - usage_slot_name: bbox - range: string + usage_slot_name: download_URL + range: Resource required: false - recommended: true - multivalued: false - inlined_as_list: false - Location_centroid: - name: Location_centroid - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/centroid - description: The geographic center (centroid) of a resource. + multivalued: true + inlined: true + inlined_as_list: true + Distribution_format: + name: Distribution_format + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/format + description: The file format of the Distribution. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:centroid - is_a: centroid - domain: Location - slot_uri: dcat:centroid - alias: centroid - owner: Location + - dcterms:format + is_a: format + domain: Distribution + slot_uri: dcterms:format + alias: format + owner: Distribution domain_of: - - Location + - Distribution is_usage_slot: true - usage_slot_name: centroid - range: string + usage_slot_name: format + range: MediaTypeOrExtent required: false recommended: true multivalued: false - inlined_as_list: false - Location_geometry: - name: Location_geometry - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/geometry - description: The corresponding geometry for a resource. + inlined: true + inlined_as_list: true + Distribution_has_policy: + name: Distribution_has_policy + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_policy + description: The policy expressing the rights associated with the distribution + if using the [[ODRL]] vocabulary. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - locn:geometry - is_a: geometry - domain: Location - slot_uri: locn:geometry - alias: geometry - owner: Location + - odrl:hasPolicy + is_a: has_policy + domain: Distribution + slot_uri: odrl:hasPolicy + alias: has_policy + owner: Distribution domain_of: - - Location + - Distribution is_usage_slot: true - usage_slot_name: geometry - range: Geometry + usage_slot_name: has_policy + range: Policy required: false multivalued: false inlined: true - inlined_as_list: false - PeriodOfTime_beginning: - name: PeriodOfTime_beginning - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/beginning - description: The beginning of a period or interval. + inlined_as_list: true + Distribution_language: + name: Distribution_language + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/language + description: A language used in the Distribution. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - time:hasBeginning - is_a: beginning - domain: PeriodOfTime - slot_uri: time:hasBeginning - alias: beginning - owner: PeriodOfTime + - dcterms:language + is_a: language + domain: Distribution + slot_uri: dcterms:language + alias: language + owner: Distribution domain_of: - - PeriodOfTime + - Distribution is_usage_slot: true - usage_slot_name: beginning - range: TimeInstant + usage_slot_name: language + range: LinguisticSystem required: false - multivalued: false + multivalued: true inlined: true inlined_as_list: true - PeriodOfTime_end: - name: PeriodOfTime_end - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/end - description: The end of a period or interval. + Distribution_licence: + name: Distribution_licence + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/licence + description: A licence under which the Distribution is made available. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - time:hasEnd - is_a: end - domain: PeriodOfTime - slot_uri: time:hasEnd - alias: end - owner: PeriodOfTime + - dcterms:license + is_a: licence + domain: Distribution + slot_uri: dcterms:license + alias: licence + owner: Distribution domain_of: - - PeriodOfTime + - Distribution is_usage_slot: true - usage_slot_name: end - range: TimeInstant + usage_slot_name: licence + range: LicenseDocument required: false multivalued: false inlined: true inlined_as_list: true - PeriodOfTime_end_date: - name: PeriodOfTime_end_date - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/end_date - description: The end of the period. + Distribution_linked_schemas: + name: Distribution_linked_schemas + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/linked_schemas + description: An established schema to which the described Distribution conforms. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:endDate - is_a: end_date - domain: PeriodOfTime - slot_uri: dcat:endDate - alias: end_date - owner: PeriodOfTime + - dcterms:conformsTo + is_a: linked_schemas + domain: Distribution + slot_uri: dcterms:conformsTo + alias: linked_schemas + owner: Distribution domain_of: - - PeriodOfTime + - Distribution is_usage_slot: true - usage_slot_name: end_date - range: date + usage_slot_name: linked_schemas + range: Standard required: false - recommended: true - multivalued: false + multivalued: true + inlined: true inlined_as_list: true - PeriodOfTime_start_date: - name: PeriodOfTime_start_date - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/start_date - description: The start of the period. + Distribution_media_type: + name: Distribution_media_type + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/media_type + description: The media type of the Distribution as defined in the official register + of media types managed by IANA. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:startDate - is_a: start_date - domain: PeriodOfTime - slot_uri: dcat:startDate - alias: start_date - owner: PeriodOfTime + - dcat:mediaType + is_a: media_type + domain: Distribution + slot_uri: dcat:mediaType + alias: media_type + owner: Distribution domain_of: - - PeriodOfTime + - Distribution is_usage_slot: true - usage_slot_name: start_date - range: date + usage_slot_name: media_type + range: MediaType required: false - recommended: true multivalued: false + inlined: true inlined_as_list: false - QualitativeAttribute_value: - name: QualitativeAttribute_value - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/value - description: The slot to provide the literal value of the QualitativeAttribute. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - prov:value - is_a: value - domain: QualitativeAttribute - slot_uri: prov:value - alias: value - owner: QualitativeAttribute - domain_of: - - QualitativeAttribute - is_usage_slot: true - usage_slot_name: value - range: string - required: true - QuantitativeAttribute_value: - name: QuantitativeAttribute_value - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/value - description: The slot to provide the literal value of the QuantitativeAttribute. - in_subset: - - domain_agnostic_core + Distribution_modification_date: + name: Distribution_modification_date + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/modification_date + description: The most recent date on which the Distribution was changed or modified. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - prov:value - is_a: value - domain: QuantitativeAttribute - slot_uri: prov:value - alias: value - owner: QuantitativeAttribute + - dcterms:modified + is_a: modification_date + domain: Distribution + slot_uri: dcterms:modified + alias: modification_date + owner: Distribution domain_of: - - QuantitativeAttribute + - Distribution is_usage_slot: true - usage_slot_name: value - range: float - required: true - Relationship_had_role: - name: Relationship_had_role - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/had_role - description: A function of an entity or agent with respect to another entity or - resource. + usage_slot_name: modification_date + range: date + required: false + multivalued: false + inlined_as_list: false + Distribution_packaging_format: + name: Distribution_packaging_format + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/packaging_format + description: The format of the file in which one or more data files are grouped + together, e.g. to enable a set of related files to be downloaded together. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:hadRole - is_a: had_role - domain: Relationship - slot_uri: dcat:hadRole - alias: had_role - owner: Relationship + - dcat:packageFormat + is_a: packaging_format + domain: Distribution + slot_uri: dcat:packageFormat + alias: packaging_format + owner: Distribution domain_of: - - Relationship + - Distribution is_usage_slot: true - usage_slot_name: had_role - range: Role - required: true - multivalued: true + usage_slot_name: packaging_format + range: MediaType + required: false + multivalued: false inlined: true inlined_as_list: true - Relationship_relation: - name: Relationship_relation - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/relation - description: A resource related to the source resource. + Distribution_release_date: + name: Distribution_release_date + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/release_date + description: The date of formal issuance (e.g., publication) of the Distribution. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:relation - is_a: relation - domain: Relationship - slot_uri: dcterms:relation - alias: relation - owner: Relationship + - dcterms:issued + is_a: release_date + domain: Distribution + slot_uri: dcterms:issued + alias: release_date + owner: Distribution domain_of: - - Relationship + - Distribution is_usage_slot: true - usage_slot_name: relation - range: Resource - required: true - multivalued: true - inlined: true - inlined_as_list: true - Software_has_part: - name: Software_has_part - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_part - description: The slot to specify parts of a Software that are themselves Software. + usage_slot_name: release_date + range: date + required: false + multivalued: false + inlined_as_list: false + Distribution_rights: + name: Distribution_rights + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/rights + description: A statement that specifies rights associated with the Distribution. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:hasPart - is_a: AgenticEntity_has_part - domain: Software - slot_uri: dcterms:hasPart - alias: has_part - owner: Software + - dcterms:rights + is_a: rights + domain: Distribution + slot_uri: dcterms:rights + alias: rights + owner: Distribution domain_of: - - Software + - Distribution is_usage_slot: true - usage_slot_name: has_part - range: Software - multivalued: true + usage_slot_name: rights + range: RightsStatement + required: false + multivalued: false inlined: true inlined_as_list: true - Software_other_identifier: - name: Software_other_identifier + Distribution_spatial_resolution: + name: Distribution_spatial_resolution + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/spatial_resolution + description: The minimum spatial separation resolvable in a dataset distribution, + measured in meters. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcat:spatialResolutionInMeters + is_a: spatial_resolution + domain: Distribution + slot_uri: dcat:spatialResolutionInMeters + alias: spatial_resolution + owner: Distribution + domain_of: + - Distribution + is_usage_slot: true + usage_slot_name: spatial_resolution + range: decimal + required: false + multivalued: false + inlined_as_list: false + Distribution_status: + name: Distribution_status + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/status + description: The status of the distribution in the context of maturity lifecycle. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - adms:status + is_a: status + domain: Distribution + slot_uri: adms:status + alias: status + owner: Distribution + domain_of: + - Distribution + is_usage_slot: true + usage_slot_name: status + range: Concept + required: false + multivalued: false + inlined: true + inlined_as_list: true + Distribution_temporal_resolution: + name: Distribution_temporal_resolution + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/temporal_resolution + description: The minimum time period resolvable in the dataset distribution. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcat:temporalResolution + is_a: temporal_resolution + domain: Distribution + slot_uri: dcat:temporalResolution + alias: temporal_resolution + owner: Distribution + domain_of: + - Distribution + is_usage_slot: true + usage_slot_name: temporal_resolution + range: duration + required: false + multivalued: false + inlined_as_list: true + Distribution_title: + name: Distribution_title + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/title + description: A name given to the Distribution. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcterms:title + is_a: title + domain: Distribution + slot_uri: dcterms:title + alias: title + owner: Distribution + domain_of: + - Distribution + is_usage_slot: true + usage_slot_name: title + range: string + required: false + multivalued: true + inlined_as_list: true + Entity_title: + name: Entity_title + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/title + description: The slot to provide a title for the Entity. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcterms:title + is_a: title + domain: Entity + slot_uri: dcterms:title + alias: title + owner: Entity + domain_of: + - Entity + is_usage_slot: true + usage_slot_name: title + range: string + Entity_description: + name: Entity_description + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/description + description: The slot to provide a description for the Entity. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcterms:description + is_a: description + domain: Entity + slot_uri: dcterms:description + alias: description + owner: Entity + domain_of: + - Entity + is_usage_slot: true + usage_slot_name: description + range: string + Entity_other_identifier: + name: Entity_other_identifier definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/other_identifier - description: A slot to provide a secondary identifier for a Software. + description: A slot to provide a secondary identifier of the Entity. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - adms:identifier - is_a: AgenticEntity_other_identifier - domain: Software + is_a: other_identifier + domain: Entity slot_uri: adms:identifier alias: other_identifier - owner: Software + owner: Entity domain_of: - - Software + - Entity is_usage_slot: true usage_slot_name: other_identifier range: Identifier @@ -11667,4541 +12406,4358 @@ slots: multivalued: true inlined: true inlined_as_list: true - ChemicalEntity_has_part: - name: ChemicalEntity_has_part + Entity_has_part: + name: Entity_has_part definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_part - description: The slot to provide the parts of a ChemicalEntity that are themself - chemical entities. + description: A slot to provide a part of the Entity. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - BFO:0000051 - is_a: Entity_has_part - domain: ChemicalEntity - slot_uri: BFO:0000051 + - dcterms:hasPart + is_a: has_part + domain: Entity + slot_uri: dcterms:hasPart alias: has_part - owner: ChemicalEntity + owner: Entity domain_of: - - ChemicalEntity + - Entity is_usage_slot: true usage_slot_name: has_part - range: ChemicalEntity + range: Entity multivalued: true inlined: true inlined_as_list: true - Atom_rdf_type: - name: Atom_rdf_type - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/rdf_type - description: The slot to provide the Atom as a ChEBI ID from the atom (CHEBI:33250) - branch. + Entity_part_of: + name: Entity_part_of + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/part_of + description: The slot to specify an Entity of which the Entity is a part. + notes: + - not in DCAT-AP in_subset: - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - rdf:type - is_a: rdf_type - domain: Atom - slot_uri: rdf:type - alias: rdf_type - owner: Atom + - dcterms:isPartOf + is_a: part_of + domain: Entity + slot_uri: dcterms:isPartOf + alias: part_of + owner: Entity domain_of: - - Atom + - Entity is_usage_slot: true - usage_slot_name: rdf_type - range: DefinedTerm - required: true - recommended: true + usage_slot_name: part_of + range: Entity + multivalued: true inlined: true - inlined_as_list: false - ChemicalReaction_has_temperature: - name: ChemicalReaction_has_temperature - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/has_temperature - description: The slot to specify the Temperature at which a ChemicalReaction takes - place. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ + inlined_as_list: true + EvaluatedActivity_other_identifier: + name: EvaluatedActivity_other_identifier + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/other_identifier + description: A slot to provide a secondary identifier of the EvaluatedActivity. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:000008 - is_a: has_temperature - domain: ChemicalReaction - slot_uri: SIO:000008 - alias: has_temperature - owner: ChemicalReaction + - adms:identifier + is_a: Activity_other_identifier + domain: EvaluatedActivity + slot_uri: adms:identifier + alias: other_identifier + owner: EvaluatedActivity domain_of: - - ChemicalReaction + - EvaluatedActivity is_usage_slot: true - usage_slot_name: has_temperature - range: Temperature - recommended: true + usage_slot_name: other_identifier + range: Identifier + required: false multivalued: true inlined: true inlined_as_list: true - ChemicalReaction_has_pressure: - name: ChemicalReaction_has_pressure - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/has_pressure - description: The slot to specify the Pressure at which a ChemicalReaction takes - place. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ + EvaluatedEntity_title: + name: EvaluatedEntity_title + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/title + description: The slot to provide a title for the EvaluatedEntity. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:000008 - is_a: has_pressure - domain: ChemicalReaction - slot_uri: SIO:000008 - alias: has_pressure - owner: ChemicalReaction + - dcterms:title + is_a: Entity_title + domain: EvaluatedEntity + slot_uri: dcterms:title + alias: title + owner: EvaluatedEntity domain_of: - - ChemicalReaction + - EvaluatedEntity is_usage_slot: true - usage_slot_name: has_pressure - range: Pressure - recommended: true + usage_slot_name: title + range: string + EvaluatedEntity_description: + name: EvaluatedEntity_description + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/description + description: The slot to provide a description for the EvaluatedEntity. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcterms:description + is_a: Entity_description + domain: EvaluatedEntity + slot_uri: dcterms:description + alias: description + owner: EvaluatedEntity + domain_of: + - EvaluatedEntity + is_usage_slot: true + usage_slot_name: description + range: string + EvaluatedEntity_was_generated_by: + name: EvaluatedEntity_was_generated_by + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/was_generated_by + description: A slot to provide the Activity which created the EvaluatedEntity. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - prov:wasGeneratedBy + is_a: was_generated_by + domain: EvaluatedEntity + slot_uri: prov:wasGeneratedBy + alias: was_generated_by + owner: EvaluatedEntity + domain_of: + - EvaluatedEntity + is_usage_slot: true + usage_slot_name: was_generated_by + range: Activity multivalued: true inlined: true inlined_as_list: true - ChemicalReaction_related_resource: - name: ChemicalReaction_related_resource - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/related_resource - description: The slot to specify any Documents related to a ChemicalReaction. + EvaluatedEntity_other_identifier: + name: EvaluatedEntity_other_identifier + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/other_identifier + description: A slot to provide a secondary identifier of the EvaluatedEntity. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:relation - is_a: related_resource - domain: ChemicalReaction - slot_uri: dcterms:relation - alias: related_resource - owner: ChemicalReaction + - adms:identifier + is_a: Entity_other_identifier + domain: EvaluatedEntity + slot_uri: adms:identifier + alias: other_identifier + owner: EvaluatedEntity domain_of: - - ChemicalReaction + - EvaluatedEntity is_usage_slot: true - usage_slot_name: related_resource - range: Resource + usage_slot_name: other_identifier + range: Identifier + required: false multivalued: true inlined: true inlined_as_list: true - MaterialEntity_has_part: - name: MaterialEntity_has_part - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_part - description: The slot to provide the parts of a MaterialEntity. + Identifier_notation: + name: Identifier_notation + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/notation + description: A string that is an identifier in the context of the identifier scheme + referenced by its datatype. from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - BFO:0000051 - is_a: Entity_has_part - domain: MaterialEntity - slot_uri: BFO:0000051 - alias: has_part - owner: MaterialEntity + - skos:notation + is_a: notation + domain: Identifier + slot_uri: skos:notation + alias: notation + owner: Identifier domain_of: - - MaterialEntity + - Identifier is_usage_slot: true - usage_slot_name: has_part - range: MaterialEntity + usage_slot_name: notation + range: string + required: true + multivalued: false + inlined_as_list: false + LicenseDocument_type: + name: LicenseDocument_type + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/type + description: A type of licence, e.g. indicating 'public domain' or 'royalties + required'. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcterms:type + is_a: type + domain: LicenseDocument + slot_uri: dcterms:type + alias: type + owner: LicenseDocument + domain_of: + - LicenseDocument + is_usage_slot: true + usage_slot_name: type + range: Concept + required: false recommended: true multivalued: true inlined: true inlined_as_list: true - MaterialSample_derived_from: - name: MaterialSample_derived_from - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/derived_from - description: The slot to specify the MaterialEntity or MaterialSample from which - the MaterialSample was created. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ + Location_bbox: + name: Location_bbox + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/bbox + description: The geographic bounding box of a resource. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - prov:wasDerivedFrom - exact_mappings: - - SIO:000244 - close_mappings: - - BFO:0000050 - - dcterms:partOf - is_a: derived_from - domain: MaterialSample - slot_uri: prov:wasDerivedFrom - alias: derived_from - owner: MaterialSample + - dcat:bbox + is_a: bbox + domain: Location + slot_uri: dcat:bbox + alias: bbox + owner: Location domain_of: - - MaterialSample + - Location is_usage_slot: true - usage_slot_name: derived_from - range: Entity + usage_slot_name: bbox + range: string + required: false + recommended: true + multivalued: false + inlined_as_list: false + Location_centroid: + name: Location_centroid + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/centroid + description: The geographic center (centroid) of a resource. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcat:centroid + is_a: centroid + domain: Location + slot_uri: dcat:centroid + alias: centroid + owner: Location + domain_of: + - Location + is_usage_slot: true + usage_slot_name: centroid + range: string + required: false + recommended: true + multivalued: false + inlined_as_list: false + Location_geometry: + name: Location_geometry + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/geometry + description: The corresponding geometry for a resource. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - locn:geometry + is_a: geometry + domain: Location + slot_uri: locn:geometry + alias: geometry + owner: Location + domain_of: + - Location + is_usage_slot: true + usage_slot_name: geometry + range: Geometry + required: false + multivalued: false inlined: true inlined_as_list: false -classes: - CatalysisDataset: - name: CatalysisDataset - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CatalysisDataset - description: "A dcat:Dataset that contains research data in the field of catalysis.\n\ - \nThe catalysis research field is expressed via rdf_type using a voc4cat\nterm\ - \ from CatalysisResearchFieldEnum (following DCAT-AP-PLUS Pattern 3).\nFor example,\ - \ a dataset from heterogeneous catalysis research would carry:\n rdf_type:\n\ - \ id: VOC4CAT:0007001\n title: \"heterogeneous catalysis\"\n\nThe four\ - \ CoreMeta4Cat minimum information pillars are linked via the slots\nbelow,\ - \ each pointing to the corresponding DataGeneratingActivity or\nEvaluatedActivity\ - \ subclass defined in the CoreMeta4Cat subprofile modules." - from_schema: https://w3id.org/nfdi4cat/coremeta4cat + PeriodOfTime_beginning: + name: PeriodOfTime_beginning + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/beginning + description: The beginning of a period or interval. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:Dataset - is_a: Dataset - mixins: - - ClassifierMixin - slots: - - Dataset_access_rights - - Dataset_applicable_legislation - - Dataset_conforms_to - - Dataset_contact_point - - Dataset_creator - - Dataset_dataset_distribution - - Dataset_description - - Dataset_documentation - - Dataset_frequency - - Dataset_geographical_coverage - - Dataset_has_version - - Dataset_identifier - - Dataset_in_series - - Dataset_is_referenced_by - - Dataset_keyword - - Dataset_landing_page - - Dataset_language - - Dataset_modification_date - - Dataset_other_identifier - - Dataset_provenance - - Dataset_publisher - - Dataset_qualified_attribution - - Dataset_qualified_relation - - Dataset_related_resource - - Dataset_release_date - - Dataset_sample - - Dataset_source - - Dataset_spatial_resolution - - Dataset_temporal_coverage - - Dataset_temporal_resolution - - Dataset_theme - - Dataset_title - - Dataset_type - - Dataset_version - - Dataset_version_notes - - id - - CatalysisDataset_rdf_type - - CatalysisDataset_was_generated_by - - CatalysisDataset_is_about_activity - - CatalysisDataset_is_about_entity - slot_usage: - rdf_type: - name: rdf_type - description: 'The catalysis research field, provided as a voc4cat term from - - CatalysisResearchFieldEnum. This is the primary machine-actionable - - classification of the dataset''s domain.' - bindings: - - range: CatalysisResearchFieldEnum - obligation_level: - text: RECOMMENDED - description: The metadata element is recommended to be present in the - model - binds_value_of: id - description: Classify the dataset by catalysis research field using voc4cat. - recommended: true - was_generated_by: - name: was_generated_by - description: 'The DataGeneratingActivity (Synthesis, Characterization, or - Simulation) - - that produced this dataset.' - range: DataGeneratingActivity - recommended: true - multivalued: true - inlined_as_list: true - is_about_activity: - name: is_about_activity - description: 'The catalytic Reaction that this dataset is about (e.g. a dataset - of - - catalytic performance measurements is about the Reaction being studied).' - range: EvaluatedActivity - recommended: true - multivalued: true - inlined_as_list: true - is_about_entity: - name: is_about_entity - description: The catalyst sample, material, or other Entity that this dataset - is about. - range: EvaluatedEntity - recommended: true - multivalued: true - inlined_as_list: true - class_uri: dcat:Dataset - QuantitativeRange: - name: QuantitativeRange - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/QuantitativeRange - description: 'A quantitative property expressed as a range between a lower and - upper bound, - - sharing a common unit. Used where an experiment operates over a range of - - conditions (e.g. a temperature sweep, a feed concentration window). - - - Aligned to qudt:Quantity (as in the DCAT-AP-PLUS QuantitativeAttribute pattern) - - but with min_value / max_value instead of a single value to represent an - - interval rather than a point value. Provide the shared unit as a QUDT DefinedTerm.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - qudt:Quantity - mixins: - - ClassifierMixin - slots: - - title - - description - - quantitativeRange__min_value - - quantitativeRange__max_value - - quantitativeRange__unit - - quantitativeRange__has_quantity_type - - ClassifierMixin_type - - rdf_type - attributes: - min_value: - name: min_value - description: Lower bound of the range. - slot_uri: coremeta4cat:minValue - range: float - max_value: - name: max_value - description: Upper bound of the range. - slot_uri: coremeta4cat:maxValue - range: float - unit: - name: unit - description: 'Unit shared by both bounds, as a QUDT unit term - - (e.g. id: http://qudt.org/vocab/unit/DegreeCelsius, title: "Degree Celsius").' - slot_uri: qudt:unit - range: DefinedTerm - has_quantity_type: - name: has_quantity_type - description: 'QUDT QuantityKind term for the kind of quantity this range describes - - (e.g. id: http://qudt.org/vocab/quantitykind/Temperature, title: "Temperature").' - slot_uri: qudt:hasQuantityKind - range: DefinedTerm - class_uri: qudt:Quantity - Duration: - name: Duration - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Duration - description: A quantitative measure of elapsed time (duration of a process step). - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - VOC4CAT:0008120 - close_mappings: - - PATO:0001309 - is_a: QuantitativeAttribute - slots: - - title - - description - - QuantitativeAttribute_value - - quantitativeAttribute__has_quantity_type - - quantitativeAttribute__unit - - ClassifierMixin_type - - rdf_type - class_uri: VOC4CAT:0008120 - VolumeFlowRate: - name: VolumeFlowRate - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/VolumeFlowRate - description: Volume of fluid passing a given point per unit time. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - qudt:Quantity - close_mappings: - - PATO:0001574 - is_a: QuantitativeAttribute - slots: - - title - - description - - QuantitativeAttribute_value - - quantitativeAttribute__has_quantity_type - - quantitativeAttribute__unit - - ClassifierMixin_type - - rdf_type - class_uri: qudt:Quantity - HeatingRate: - name: HeatingRate - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/HeatingRate - description: Rate of temperature change per unit time during a thermal ramp. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - VOC4CAT:0008116 - is_a: QuantitativeAttribute - slots: - - title - - description - - QuantitativeAttribute_value - - quantitativeAttribute__has_quantity_type - - quantitativeAttribute__unit - - ClassifierMixin_type - - rdf_type - class_uri: VOC4CAT:0008116 - AngularVelocity: - name: AngularVelocity - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/AngularVelocity - description: Rate of rotational motion, typically expressed in revolutions per - minute. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - qudt:Quantity - close_mappings: - - PATO:0002154 - is_a: QuantitativeAttribute - slots: - - title - - description - - QuantitativeAttribute_value - - quantitativeAttribute__has_quantity_type - - quantitativeAttribute__unit - - ClassifierMixin_type - - rdf_type - class_uri: qudt:Quantity - EnergyQuantity: - name: EnergyQuantity - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/EnergyQuantity - description: A quantitative measure of energy (eV, keV, kJ/mol, etc.). - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - qudt:Quantity - close_mappings: - - PATO:0001021 - is_a: QuantitativeAttribute - slots: - - title - - description - - QuantitativeAttribute_value - - quantitativeAttribute__has_quantity_type - - quantitativeAttribute__unit - - ClassifierMixin_type - - rdf_type - class_uri: qudt:Quantity - ElectricPotential: - name: ElectricPotential - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ElectricPotential - description: A quantitative measure of electric potential difference or voltage. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - qudt:Quantity - close_mappings: - - PATO:0001464 - is_a: QuantitativeAttribute - slots: - - title - - description - - QuantitativeAttribute_value - - quantitativeAttribute__has_quantity_type - - quantitativeAttribute__unit - - ClassifierMixin_type - - rdf_type - class_uri: qudt:Quantity - PowerQuantity: - name: PowerQuantity - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PowerQuantity - description: Rate of energy transfer per unit time (e.g. laser power in mW). - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - qudt:Quantity - close_mappings: - - PATO:0001230 - is_a: QuantitativeAttribute - slots: - - title - - description - - QuantitativeAttribute_value - - quantitativeAttribute__has_quantity_type - - quantitativeAttribute__unit - - ClassifierMixin_type - - rdf_type - class_uri: qudt:Quantity - LengthQuantity: - name: LengthQuantity - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/LengthQuantity - description: A quantitative measure of length or spatial dimension (nm, mm, cm). - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - qudt:Quantity - close_mappings: - - PATO:0001708 - is_a: QuantitativeAttribute - slots: - - title - - description - - QuantitativeAttribute_value - - quantitativeAttribute__has_quantity_type - - quantitativeAttribute__unit - - ClassifierMixin_type - - rdf_type - class_uri: qudt:Quantity - PlaneAngle: - name: PlaneAngle - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PlaneAngle - description: A quantitative measure of a plane angle (e.g. scattering angle in - degrees). - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - qudt:Quantity - is_a: QuantitativeAttribute - slots: - - title - - description - - QuantitativeAttribute_value - - quantitativeAttribute__has_quantity_type - - quantitativeAttribute__unit - - ClassifierMixin_type - - rdf_type - class_uri: qudt:Quantity - Wavenumber: - name: Wavenumber - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Wavenumber - description: Reciprocal of wavelength; number of wave cycles per unit length (cm^-1). - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ - mappings: - - qudt:Quantity - is_a: QuantitativeAttribute - slots: - - title - - description - - QuantitativeAttribute_value - - quantitativeAttribute__has_quantity_type - - quantitativeAttribute__unit - - ClassifierMixin_type - - rdf_type - class_uri: qudt:Quantity - MassToChargeRatio: - name: MassToChargeRatio - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/MassToChargeRatio - description: Ratio of mass to electric charge (m/z) in mass spectrometry. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ + - time:hasBeginning + is_a: beginning + domain: PeriodOfTime + slot_uri: time:hasBeginning + alias: beginning + owner: PeriodOfTime + domain_of: + - PeriodOfTime + is_usage_slot: true + usage_slot_name: beginning + range: TimeInstant + required: false + multivalued: false + inlined: true + inlined_as_list: true + PeriodOfTime_end: + name: PeriodOfTime_end + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/end + description: The end of a period or interval. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - qudt:Quantity - is_a: QuantitativeAttribute - slots: - - title - - description - - QuantitativeAttribute_value - - quantitativeAttribute__has_quantity_type - - quantitativeAttribute__unit - - ClassifierMixin_type - - rdf_type - class_uri: qudt:Quantity - Atmosphere: - name: Atmosphere - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere - description: 'A qualitative descriptor of the gaseous environment or atmospheric - - conditions during a process (e.g. "air", "N2", "5% H2/Ar").' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ + - time:hasEnd + is_a: end + domain: PeriodOfTime + slot_uri: time:hasEnd + alias: end + owner: PeriodOfTime + domain_of: + - PeriodOfTime + is_usage_slot: true + usage_slot_name: end + range: TimeInstant + required: false + multivalued: false + inlined: true + inlined_as_list: true + PeriodOfTime_end_date: + name: PeriodOfTime_end_date + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/end_date + description: The end of the period. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - coremeta4cat:Atmosphere - is_a: QualitativeAttribute - slots: - - title - - description - - QualitativeAttribute_value - - ClassifierMixin_type - - rdf_type - class_uri: coremeta4cat:Atmosphere - CalcinationGaseousEnvironment: - name: CalcinationGaseousEnvironment - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CalcinationGaseousEnvironment - description: 'The specific gaseous environment maintained during a calcination - step - - (e.g. "air", "N2", "10% O2/N2").' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ + - dcat:endDate + is_a: end_date + domain: PeriodOfTime + slot_uri: dcat:endDate + alias: end_date + owner: PeriodOfTime + domain_of: + - PeriodOfTime + is_usage_slot: true + usage_slot_name: end_date + range: date + required: false + recommended: true + multivalued: false + inlined_as_list: true + PeriodOfTime_start_date: + name: PeriodOfTime_start_date + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/start_date + description: The start of the period. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - VOC4CAT:0000055 - is_a: Atmosphere - slots: - - title - - description - - QualitativeAttribute_value - - ClassifierMixin_type - - rdf_type - class_uri: VOC4CAT:0000055 - HeatingProcedure: - name: HeatingProcedure - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/HeatingProcedure - description: "A qualitative descriptor of the thermal programme or heating procedure\n\ - applied (e.g. \"isothermal\", \"ramp 5 \xB0C/min to 500 \xB0C, dwell 2 h\")." - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ + - dcat:startDate + is_a: start_date + domain: PeriodOfTime + slot_uri: dcat:startDate + alias: start_date + owner: PeriodOfTime + domain_of: + - PeriodOfTime + is_usage_slot: true + usage_slot_name: start_date + range: date + required: false + recommended: true + multivalued: false + inlined_as_list: false + QualitativeAttribute_value: + name: QualitativeAttribute_value + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/value + description: The slot to provide the literal value of the QualitativeAttribute. + in_subset: + - domain_agnostic_core + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - coremeta4cat:HeatingProcedure - is_a: QualitativeAttribute - slots: - - title - - description - - QualitativeAttribute_value - - ClassifierMixin_type - - rdf_type - class_uri: coremeta4cat:HeatingProcedure - SamplePretreatment: - name: SamplePretreatment - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/SamplePretreatment - description: "A qualitative descriptor of the pre-treatment applied to a sample\n\ - before a process or measurement (e.g. \"reduction at 300 \xB0C\", \"outgassing\"\ - )." - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ + - prov:value + is_a: value + domain: QualitativeAttribute + slot_uri: prov:value + alias: value + owner: QualitativeAttribute + domain_of: + - QualitativeAttribute + is_usage_slot: true + usage_slot_name: value + range: string + required: true + QuantitativeAttribute_value: + name: QuantitativeAttribute_value + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/value + description: The slot to provide the literal value of the QuantitativeAttribute. + in_subset: + - domain_agnostic_core + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - VOC4CAT:0000122 - is_a: QualitativeAttribute - slots: - - title - - description - - QualitativeAttribute_value - - ClassifierMixin_type - - rdf_type - class_uri: VOC4CAT:0000122 - VesselType: - name: VesselType - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/VesselType - description: 'A qualitative descriptor of the type of reaction or synthesis vessel - - used (e.g. "autoclave", "round-bottom flask", "Schlenk tube").' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ + - prov:value + is_a: value + domain: QuantitativeAttribute + slot_uri: prov:value + alias: value + owner: QuantitativeAttribute + domain_of: + - QuantitativeAttribute + is_usage_slot: true + usage_slot_name: value + range: float + required: true + Relationship_had_role: + name: Relationship_had_role + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/had_role + description: A function of an entity or agent with respect to another entity or + resource. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - coremeta4cat:VesselType - is_a: QualitativeAttribute - slots: - - title - - description - - QualitativeAttribute_value - - ClassifierMixin_type - - rdf_type - class_uri: coremeta4cat:VesselType - OperationMode: - name: OperationMode - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/OperationMode - description: 'A qualitative descriptor of the operation mode of an instrument - or - - process (e.g. "transmission", "reflection", "AC", "DC", "full-scan").' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ + - dcat:hadRole + is_a: had_role + domain: Relationship + slot_uri: dcat:hadRole + alias: had_role + owner: Relationship + domain_of: + - Relationship + is_usage_slot: true + usage_slot_name: had_role + range: Role + required: true + multivalued: true + inlined: true + inlined_as_list: true + Relationship_relation: + name: Relationship_relation + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/relation + description: A resource related to the source resource. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - VOC4CAT:0000108 - is_a: QualitativeAttribute - slots: - - title - - description - - QualitativeAttribute_value - - ClassifierMixin_type - - rdf_type - class_uri: VOC4CAT:0000108 - DryingMixin: - name: DryingMixin - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/DryingMixin - description: 'Mixin providing drying step parameters. Used by preparation methods - that - - include a drying step after synthesis or precipitation - - (Impregnation, CoPrecipitation, DepositionPrecipitation, - - SonochemicalSynthesis, MolecularSynthesis).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ - mixin: true - slots: - - drying_device - - has_drying_temperature - - has_drying_duration - - has_drying_atmosphere - class_uri: coremeta4cat:DryingMixin - CalcinationMixin: - name: CalcinationMixin - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CalcinationMixin - description: 'Mixin providing calcination step parameters. Used by preparation - methods - - that include a thermal calcination step - - (Impregnation, CoPrecipitation, DepositionPrecipitation, - - SonochemicalSynthesis, ExsolutionSynthesis).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ - mixin: true - slots: - - has_calcination_temperature_range - - has_calcination_dwelling_time - - number_of_cycles - - has_calcination_atmosphere - - has_calcination_heating_rate - - has_calcination_gas_flow_rate - class_uri: coremeta4cat:CalcinationMixin - PrecipitationMixin: - name: PrecipitationMixin - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PrecipitationMixin - description: 'Mixin providing precipitation and wet-chemistry step parameters. - Used by - - preparation methods based on precipitation from solution - - (CoPrecipitation, DepositionPrecipitation).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ - mixin: true - slots: - - precipitating_agent - - has_concentration - - has_ph_value - - has_mixing_speed - - has_mixing_duration - - has_mixing_temperature - - order_of_addition - - filtration - - purification - - has_aging_temperature - - has_aging_duration - class_uri: coremeta4cat:PrecipitationMixin - ThermalSynthesisMixin: - name: ThermalSynthesisMixin - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ThermalSynthesisMixin - description: 'Mixin providing thermal process parameters common to synthesis methods - - carried out at elevated temperature in a closed vessel or reactor - - (Solvothermal, PlasmaAssisted, CombustionSynthesis, - - MicrowaveAssisted, MechanochemicalSynthesis, Sublimation).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ - mixin: true - slots: - - synthesis_temperature - - synthesis_duration - - has_vessel_type - - has_atmosphere - class_uri: coremeta4cat:ThermalSynthesisMixin - Synthesis: - name: Synthesis - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Synthesis - description: 'A DataGeneratingActivity in which a catalyst is prepared. - - - The preparation protocol is linked via realized_plan using a - - PreparationMethod instance. Input materials (Precursors) are linked via - - had_input_entity. The resulting catalyst (CatalystSample) is linked via - - had_output_entity. - - - The type of synthesis is further specified via rdf_type using an ontology - - term (e.g. a VOC4CAT preparation method term), following DCAT-AP-PLUS - - Pattern 3.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ + - dcterms:relation + is_a: relation + domain: Relationship + slot_uri: dcterms:relation + alias: relation + owner: Relationship + domain_of: + - Relationship + is_usage_slot: true + usage_slot_name: relation + range: Resource + required: true + multivalued: true + inlined: true + inlined_as_list: true + Software_has_part: + name: Software_has_part + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_part + description: The slot to specify parts of a Software that are themselves Software. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcterms:hasPart + is_a: AgenticEntity_has_part + domain: Software + slot_uri: dcterms:hasPart + alias: has_part + owner: Software + domain_of: + - Software + is_usage_slot: true + usage_slot_name: has_part + range: Software + multivalued: true + inlined: true + inlined_as_list: true + Software_other_identifier: + name: Software_other_identifier + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/other_identifier + description: A slot to provide a secondary identifier for a Software. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - OBI:0000070 - is_a: DataGeneratingActivity - slots: - - id - - Activity_title - - Activity_description - - Activity_other_identifier - - Activity_has_part - - Activity_had_input_activity - - Activity_has_qualitative_attribute - - Activity_has_quantitative_attribute - - Activity_part_of - - ClassifierMixin_type - - rdf_type - - evaluated_entity - - evaluated_activity - - occurred_in - - Synthesis_nominal_composition - - Synthesis_catalyst_measured_properties - - Synthesis_storage_conditions - - catalyst_support - - solvent - - has_sample_pretreatment - - Synthesis_had_input_entity - - Synthesis_had_output_entity - - Synthesis_realized_plan - - Synthesis_carried_out_by - slot_usage: - nominal_composition: - name: nominal_composition - required: true - catalyst_measured_properties: - name: catalyst_measured_properties - required: true - had_input_entity: - name: had_input_entity - description: The Precursor(s) consumed during this Synthesis. - range: Precursor - required: true - multivalued: true - inlined_as_list: true - had_output_entity: - name: had_output_entity - description: The CatalystSample produced by this Synthesis. - range: CatalystSample - recommended: true - multivalued: true - inlined_as_list: true - realized_plan: - name: realized_plan - description: The PreparationMethod (protocol) realized in this Synthesis. - range: PreparationMethod - required: true - storage_conditions: - name: storage_conditions - recommended: true - carried_out_by: - name: carried_out_by - description: 'Equipment or synthesis device used to carry out this preparation - step. - - Provide a Device instance (e.g. rotary evaporator, autoclave, furnace).' - range: Device - multivalued: true - inlined_as_list: true - class_uri: OBI:0000070 - Precursor: - name: Precursor - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Precursor - description: 'A MaterialSample that serves as input material in a catalyst Synthesis. - - Precursors are consumed or transformed during the preparation process.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ + - adms:identifier + is_a: AgenticEntity_other_identifier + domain: Software + slot_uri: adms:identifier + alias: other_identifier + owner: Software + domain_of: + - Software + is_usage_slot: true + usage_slot_name: other_identifier + range: Identifier + required: false + multivalued: true + inlined: true + inlined_as_list: true + ChemicalEntity_has_part: + name: ChemicalEntity_has_part + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_part + description: The slot to provide the parts of a ChemicalEntity that are themself + chemical entities. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - VOC4CAT:0007794 - is_a: MaterialSample - slots: - - id - - has_qualitative_attribute - - has_quantitative_attribute - - Entity_has_part - - Entity_part_of - - ClassifierMixin_type - - rdf_type - - EvaluatedEntity_was_generated_by - - EvaluatedEntity_title - - EvaluatedEntity_description - - EvaluatedEntity_other_identifier - - MaterialSample_derived_from - - alternative_label - - has_physical_state - - has_temperature - - has_mass - - has_volume - - has_density - - has_pressure - - Precursor_precursor_quantity - slot_usage: - precursor_quantity: - name: precursor_quantity - slot_uri: VOC4CAT:0008118 - required: true - class_uri: VOC4CAT:0007794 - CatalystSample: - name: CatalystSample - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CatalystSample - description: 'A MaterialSample that is the product of a catalyst Synthesis. - - The specific type of catalyst (e.g. heterogeneous, supported metal) - - is expressed via rdf_type using a VOC4CAT term.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ + - BFO:0000051 + is_a: Entity_has_part + domain: ChemicalEntity + slot_uri: BFO:0000051 + alias: has_part + owner: ChemicalEntity + domain_of: + - ChemicalEntity + is_usage_slot: true + usage_slot_name: has_part + range: ChemicalEntity + multivalued: true + inlined: true + inlined_as_list: true + Atom_rdf_type: + name: Atom_rdf_type + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/rdf_type + description: The slot to provide the Atom as a ChEBI ID from the atom (CHEBI:33250) + branch. + in_subset: + - domain_agnostic_core + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - OBI:0000747 - is_a: MaterialSample + - rdf:type + is_a: rdf_type + domain: Atom + slot_uri: rdf:type + alias: rdf_type + owner: Atom + domain_of: + - Atom + is_usage_slot: true + usage_slot_name: rdf_type + range: DefinedTerm + required: true + recommended: true + inlined: true + inlined_as_list: false + MaterialEntity_has_part: + name: MaterialEntity_has_part + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/has_part + description: The slot to provide the parts of a MaterialEntity. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - BFO:0000051 + is_a: Entity_has_part + domain: MaterialEntity + slot_uri: BFO:0000051 + alias: has_part + owner: MaterialEntity + domain_of: + - MaterialEntity + is_usage_slot: true + usage_slot_name: has_part + range: MaterialEntity + recommended: true + multivalued: true + inlined: true + inlined_as_list: true + MaterialSample_derived_from: + name: MaterialSample_derived_from + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/derived_from + description: The slot to specify the MaterialEntity or MaterialSample from which + the MaterialSample was created. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/materials/ + mappings: + - prov:wasDerivedFrom + exact_mappings: + - SIO:000244 + close_mappings: + - BFO:0000050 + - dcterms:partOf + is_a: derived_from + domain: MaterialSample + slot_uri: prov:wasDerivedFrom + alias: derived_from + owner: MaterialSample + domain_of: + - MaterialSample + is_usage_slot: true + usage_slot_name: derived_from + range: Entity + inlined: true + inlined_as_list: false +classes: + CatalysisDataset: + name: CatalysisDataset + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CatalysisDataset + description: "A dcat:Dataset that contains research data in the field of catalysis.\n\ + \nThe catalysis research field is expressed via rdf_type using a voc4cat\nterm\ + \ from CatalysisResearchFieldEnum (following DCAT-AP-PLUS Pattern 3).\nFor example,\ + \ a dataset from heterogeneous catalysis research would carry:\n rdf_type:\n\ + \ id: VOC4CAT:0007001\n title: \"heterogeneous catalysis\"\n\nThe four\ + \ CoreMeta4Cat minimum information pillars are linked via the slots\nbelow,\ + \ each pointing to the corresponding DataGeneratingActivity or\nEvaluatedActivity\ + \ subclass defined in the CoreMeta4Cat subprofile modules." + from_schema: https://w3id.org/nfdi4cat/coremeta4cat + mappings: + - dcat:Dataset + is_a: Dataset + mixins: + - ClassifierMixin slots: + - Dataset_access_rights + - Dataset_applicable_legislation + - Dataset_conforms_to + - Dataset_contact_point + - Dataset_creator + - Dataset_dataset_distribution + - Dataset_description + - Dataset_documentation + - Dataset_frequency + - Dataset_geographical_coverage + - Dataset_has_version + - Dataset_identifier + - Dataset_in_series + - Dataset_is_referenced_by + - Dataset_keyword + - Dataset_landing_page + - Dataset_language + - Dataset_modification_date + - Dataset_other_identifier + - Dataset_provenance + - Dataset_publisher + - Dataset_qualified_attribution + - Dataset_qualified_relation + - Dataset_related_resource + - Dataset_release_date + - Dataset_sample + - Dataset_source + - Dataset_spatial_resolution + - Dataset_temporal_coverage + - Dataset_temporal_resolution + - Dataset_theme + - Dataset_title + - Dataset_type + - Dataset_version + - Dataset_version_notes - id - - has_qualitative_attribute - - has_quantitative_attribute - - Entity_has_part - - Entity_part_of - - ClassifierMixin_type - - rdf_type - - EvaluatedEntity_was_generated_by - - EvaluatedEntity_title - - EvaluatedEntity_description - - EvaluatedEntity_other_identifier - - alternative_label - - has_physical_state - - has_temperature - - has_mass - - has_volume - - has_density - - has_pressure - - CatalystSample_derived_from + - CatalysisDataset_rdf_type + - CatalysisDataset_was_generated_by + - CatalysisDataset_is_about_activity + - CatalysisDataset_is_about_entity slot_usage: - derived_from: - name: derived_from - description: 'The Precursor(s) or other MaterialSample from which this + rdf_type: + name: rdf_type + description: 'The catalysis research field, provided as a voc4cat term from - CatalystSample was produced.' - range: MaterialSample - class_uri: OBI:0000747 - PreparationMethod: - name: PreparationMethod - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PreparationMethod - description: "An abstract Plan describing the protocol used to prepare a catalyst.\n\ - Concrete subclasses (Impregnation, CoPrecipitation, \u2026) specify the\nmethod-specific\ - \ parameters. Linked from Synthesis via realized_plan.\n\nThe specific preparation\ - \ method type should additionally be expressed\nvia rdf_type on the Synthesis\ - \ activity using a voc4cat term\n(e.g. VOC4CAT:0007016 for preparation method)." - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ - mappings: - - VOC4CAT:0007016 - is_a: Plan - abstract: true - slots: - - title - - description - - ClassifierMixin_type - - rdf_type - class_uri: VOC4CAT:0007016 - Impregnation: - name: Impregnation - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Impregnation - description: 'Catalyst preparation by impregnation: a solution of the active phase + CatalysisResearchFieldEnum. This is the primary machine-actionable - precursor is brought into contact with the support material.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ - mappings: - - VOC4CAT:0007028 - is_a: PreparationMethod - mixins: - - DryingMixin - - CalcinationMixin - slots: - - title - - description - - ClassifierMixin_type - - rdf_type - - impregnation_type - - impregnation_duration - - impregnation_temperature - - drying_device - - has_drying_temperature - - has_drying_duration - - has_drying_atmosphere - - has_calcination_temperature_range - - has_calcination_dwelling_time - - number_of_cycles - - has_calcination_atmosphere - - has_calcination_heating_rate - - has_calcination_gas_flow_rate - class_uri: VOC4CAT:0007028 - CoPrecipitation: - name: CoPrecipitation - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CoPrecipitation - description: 'Catalyst preparation by co-precipitation: precursor salts are + classification of the dataset''s domain.' + bindings: + - range: CatalysisResearchFieldEnum + obligation_level: + text: RECOMMENDED + description: The metadata element is recommended to be present in the + model + binds_value_of: id + description: Classify the dataset by catalysis research field using voc4cat. + recommended: true + was_generated_by: + name: was_generated_by + description: 'The DataGeneratingActivity (Synthesis, Characterization, or + Simulation) - simultaneously precipitated from solution by a precipitating agent.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ - mappings: - - VOC4CAT:0007795 - is_a: PreparationMethod - mixins: - - PrecipitationMixin - - DryingMixin - - CalcinationMixin - slots: - - title - - description - - ClassifierMixin_type - - rdf_type - - precipitating_agent - - has_concentration - - has_ph_value - - has_mixing_speed - - has_mixing_duration - - has_mixing_temperature - - order_of_addition - - filtration - - purification - - has_aging_temperature - - has_aging_duration - - drying_device - - has_drying_temperature - - has_drying_duration - - has_drying_atmosphere - - has_calcination_temperature_range - - has_calcination_dwelling_time - - number_of_cycles - - has_calcination_atmosphere - - has_calcination_heating_rate - - has_calcination_gas_flow_rate - class_uri: VOC4CAT:0007795 - SolGel: - name: SolGel - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/SolGel - description: 'Catalyst preparation by the sol-gel process: hydrolysis and condensation + that produced this dataset.' + range: CatalysisDataGeneratingActivity + recommended: true + multivalued: true + inlined_as_list: true + is_about_activity: + name: is_about_activity + description: 'The catalytic Reaction that this dataset is about (e.g. a dataset + of - of precursor molecules to form a colloidal network (gel).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ - mappings: - - CHMO:0001313 - is_a: PreparationMethod - mixins: - - DryingMixin - slots: - - title - - description - - ClassifierMixin_type - - rdf_type - - hydrolysis_ratio - - has_aging_duration - - drying - - surfactant_template - - drying_device - - has_drying_temperature - - has_drying_duration - - has_drying_atmosphere - class_uri: CHMO:0001313 - Solvothermal: - name: Solvothermal - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Solvothermal - description: 'Catalyst preparation under elevated temperature and pressure in + catalytic performance measurements is about the Reaction being studied).' + range: CatalyticReaction + recommended: true + multivalued: true + inlined_as_list: true + is_about_entity: + name: is_about_entity + description: The catalyst sample, material, or other Entity that this dataset + is about. + range: EvaluatedEntity + recommended: true + multivalued: true + inlined_as_list: true + class_uri: dcat:Dataset + CatalysisPlan: + name: CatalysisPlan + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CatalysisPlan + description: 'A CoreMeta4Cat specialization of DCAT-AP-PLUS''s Plan that adds a - sealed vessel using a non-aqueous solvent.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ - mappings: - - CHMO:0001458 - is_a: PreparationMethod - mixins: - - ThermalSynthesisMixin - slots: - - title - - description - - ClassifierMixin_type - - rdf_type - - filling_volume - - stirrer_type - - cooling_rate - - synthesis_temperature - - synthesis_duration - - has_vessel_type - - has_atmosphere - class_uri: CHMO:0001458 - PlasmaAssisted: - name: PlasmaAssisted - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PlasmaAssisted - description: 'Catalyst preparation using plasma treatment to modify surface + persistent identifier (id). Plan itself (external, dcat-ap-plus) only - properties or deposit active components.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ - mappings: - - coremeta4cat:PlasmaAssisted - is_a: PreparationMethod - mixins: - - ThermalSynthesisMixin - slots: - - title - - description - - ClassifierMixin_type - - rdf_type - - plasma_type - - power_input - - exposure_time - - synthesis_pressure - - synthesis_temperature - - synthesis_duration - - has_vessel_type - - has_atmosphere - class_uri: coremeta4cat:PlasmaAssisted - CombustionSynthesis: - name: CombustionSynthesis - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CombustionSynthesis - description: 'Catalyst preparation by combustion of a fuel/oxidizer mixture, + lists title/description -- every CoreMeta4Cat protocol, technique, and + + method class needs to be independently citable and cross-referenceable + + (e.g. linked to from multiple Reaction/Characterization instances that - producing metal oxide catalysts in a single rapid step.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ - mappings: - - coremeta4cat:CombustionSynthesis - is_a: PreparationMethod - mixins: - - ThermalSynthesisMixin - slots: - - title - - description - - ClassifierMixin_type - - rdf_type - - fuel - - oxidizer - - fuel_to_oxidizer_ratio - - set_temperature - - post_treatment - - synthesis_temperature - - synthesis_duration - - has_vessel_type - - has_atmosphere - class_uri: coremeta4cat:CombustionSynthesis - AtomicLayerDeposition: - name: AtomicLayerDeposition - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/AtomicLayerDeposition - description: 'Catalyst preparation by atomic layer deposition (ALD): sequential + reuse the same protocol), so id is added once here rather than - self-limiting surface reactions deposit a conformal thin film + repeated on each of PreparationMethod, CharacterizationTechnique, - of active phase onto a substrate.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ - mappings: - - CHMO:0001311 - is_a: PreparationMethod + SimulationMethod, and ProductIdentificationMethod individually.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ + is_a: Plan + abstract: true slots: - title - description - ClassifierMixin_type - rdf_type - - substrate - - pulse_time - - purging_duration - - number_of_cycles - - deposition_temperature - - carrier_gas - class_uri: CHMO:0001311 - DepositionPrecipitation: - name: DepositionPrecipitation - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/DepositionPrecipitation - description: 'Catalyst preparation by deposition-precipitation: the active phase + - id + class_uri: coremeta4cat:CatalysisPlan + CatalysisDataGeneratingActivity: + name: CatalysisDataGeneratingActivity + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CatalysisDataGeneratingActivity + description: 'A CoreMeta4Cat specialization of DCAT-AP-PLUS''s DataGeneratingActivity - is precipitated directly onto the support surface.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ - mappings: - - coremeta4cat:DepositionPrecipitation - is_a: PreparationMethod - mixins: - - PrecipitationMixin - - DryingMixin - - CalcinationMixin - slots: - - title - - description - - ClassifierMixin_type - - rdf_type - - deposition_temperature - - deposition_time - - precipitating_agent - - has_concentration - - has_ph_value - - has_mixing_speed - - has_mixing_duration - - has_mixing_temperature - - order_of_addition - - filtration - - purification - - has_aging_temperature - - has_aging_duration - - drying_device - - has_drying_temperature - - has_drying_duration - - has_drying_atmosphere - - has_calcination_temperature_range - - has_calcination_dwelling_time - - number_of_cycles - - has_calcination_atmosphere - - has_calcination_heating_rate - - has_calcination_gas_flow_rate - class_uri: coremeta4cat:DepositionPrecipitation - MicrowaveAssisted: - name: MicrowaveAssisted - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/MicrowaveAssisted - description: 'Catalyst preparation using microwave irradiation to rapidly and + that adds a type designator (activity_designator). Synthesis, - uniformly heat the reaction mixture.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ - mappings: - - CHMO:0002906 - is_a: PreparationMethod - mixins: - - ThermalSynthesisMixin + Characterization, and Simulation all specialize this class instead of + + DataGeneratingActivity directly, so that when one of them is nested + + inside CatalysisDataset.was_generated_by, the LinkML Python loader can + + tell which concrete subclass a given entry is meant to be and keep its + + subclass-specific fields (e.g. Characterization.realized_plan) rather + + than falling back to DataGeneratingActivity''s own generic slot + + definitions. + + + activity_designator is filled in automatically by LinkML when a class + + is instantiated directly (e.g. loading a standalone Synthesis-NNN.yaml + + file) -- it does not need to be set by hand there. It only needs to be + + set explicitly in the source data when a Synthesis/Characterization/ + + Simulation instance is nested inside another object''s was_generated_by + + list (e.g. in a combined CatalysisDataset file), so the loader knows + + which of the three to construct.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ + is_a: DataGeneratingActivity + abstract: true slots: - - title - - description + - id + - Activity_title + - Activity_description + - Activity_other_identifier + - Activity_has_part + - Activity_had_input_entity + - Activity_had_output_entity + - Activity_had_input_activity + - Activity_carried_out_by + - Activity_has_qualitative_attribute + - Activity_has_quantitative_attribute + - Activity_part_of - ClassifierMixin_type - rdf_type - - power - - microwave_frequency - - synthesis_temperature - - synthesis_duration - - has_vessel_type - - has_atmosphere - class_uri: CHMO:0002906 - SonochemicalSynthesis: - name: SonochemicalSynthesis - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/SonochemicalSynthesis - description: 'Catalyst preparation using ultrasonic irradiation to drive chemical + - evaluated_entity + - evaluated_activity + - realized_plan + - occurred_in + - activity_designator + class_uri: coremeta4cat:CatalysisDataGeneratingActivity + QuantitativeRange: + name: QuantitativeRange + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/QuantitativeRange + description: 'A quantitative property expressed as a range between a lower and + upper bound, - reactions via acoustic cavitation.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ + sharing a common unit. Used where an experiment operates over a range of + + conditions (e.g. a temperature sweep, a feed concentration window). + + + Aligned to qudt:Quantity (as in the DCAT-AP-PLUS QuantitativeAttribute pattern) + + but with min_value / max_value instead of a single value to represent an + + interval rather than a point value. Provide the shared unit as a QUDT DefinedTerm.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - - coremeta4cat:SonochemicalSynthesis - is_a: PreparationMethod + - qudt:Quantity mixins: - - DryingMixin - - CalcinationMixin + - ClassifierMixin slots: - title - description + - quantitativeRange__min_value + - quantitativeRange__max_value + - quantitativeRange__unit + - quantitativeRange__has_quantity_type - ClassifierMixin_type - rdf_type - - sonication_power - - sonication_duration - - has_temperature - - drying_device - - has_drying_temperature - - has_drying_duration - - has_drying_atmosphere - - has_calcination_temperature_range - - has_calcination_dwelling_time - - number_of_cycles - - has_calcination_atmosphere - - has_calcination_heating_rate - - has_calcination_gas_flow_rate - class_uri: coremeta4cat:SonochemicalSynthesis - FlameSprayPyrolysis: - name: FlameSprayPyrolysis - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/FlameSprayPyrolysis - description: 'Catalyst preparation by flame spray pyrolysis (FSP): a liquid precursor + attributes: + min_value: + name: min_value + description: Lower bound of the range. + slot_uri: coremeta4cat:minValue + range: float + max_value: + name: max_value + description: Upper bound of the range. + slot_uri: coremeta4cat:maxValue + range: float + unit: + name: unit + description: 'Unit shared by both bounds, as a QUDT unit term - solution is atomised and combusted in a flame to produce nanoparticles.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ + (e.g. id: http://qudt.org/vocab/unit/DegreeCelsius, title: "Degree Celsius").' + slot_uri: qudt:unit + range: DefinedTerm + has_quantity_type: + name: has_quantity_type + description: 'QUDT QuantityKind term for the kind of quantity this range describes + + (e.g. id: http://qudt.org/vocab/quantitykind/Temperature, title: "Temperature").' + slot_uri: qudt:hasQuantityKind + range: DefinedTerm + class_uri: qudt:Quantity + Duration: + name: Duration + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Duration + description: A quantitative measure of elapsed time (duration of a process step). + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - - VOC4CAT:0007031 - is_a: PreparationMethod + - qudt:Quantity + close_mappings: + - PATO:0001309 + is_a: QuantitativeAttribute slots: - title - description + - QuantitativeAttribute_value + - quantitativeAttribute__has_quantity_type + - quantitativeAttribute__unit - ClassifierMixin_type - rdf_type - - flame_type - - has_flow_rate - - inlet_system - - flame_ring - - dispersant - - capillary_pressure - - fuel_dispersant_ratio - - filtration_device - - filter_type - class_uri: VOC4CAT:0007031 - MechanochemicalSynthesis: - name: MechanochemicalSynthesis - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/MechanochemicalSynthesis - description: 'Catalyst preparation by mechanical milling or grinding, optionally - - combined with thermal treatment.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ - mappings: - - coremeta4cat:MechanochemicalSynthesis - is_a: PreparationMethod - mixins: - - ThermalSynthesisMixin + class_uri: qudt:Quantity + VolumeFlowRate: + name: VolumeFlowRate + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/VolumeFlowRate + description: Volume of fluid passing a given point per unit time. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ + mappings: + - qudt:Quantity + close_mappings: + - PATO:0001574 + is_a: QuantitativeAttribute slots: - title - description + - QuantitativeAttribute_value + - quantitativeAttribute__has_quantity_type + - quantitativeAttribute__unit - ClassifierMixin_type - rdf_type - - vessel_volume - - size_and_material - - milling_speed - - milling_duration - - ball_material - - ball_size - - ball_to_powder_ratio - - synthesis_temperature - - synthesis_duration - - has_vessel_type - - has_atmosphere - class_uri: coremeta4cat:MechanochemicalSynthesis - Sublimation: - name: Sublimation - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Sublimation - description: 'Catalyst preparation by sublimation: a solid precursor is vaporised - - and deposited onto a substrate without passing through a liquid phase.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ + class_uri: qudt:Quantity + HeatingRate: + name: HeatingRate + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/HeatingRate + description: Rate of temperature change per unit time during a thermal ramp. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - - coremeta4cat:Sublimation - is_a: PreparationMethod - mixins: - - ThermalSynthesisMixin + - qudt:Quantity + exact_mappings: + - VOC4CAT:0008116 + is_a: QuantitativeAttribute slots: - title - description + - QuantitativeAttribute_value + - quantitativeAttribute__has_quantity_type + - quantitativeAttribute__unit - ClassifierMixin_type - rdf_type - - synthesis_pressure - - synthesis_temperature - - synthesis_duration - - has_vessel_type - - has_atmosphere - class_uri: coremeta4cat:Sublimation - MolecularSynthesis: - name: MolecularSynthesis - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/MolecularSynthesis - description: 'Catalyst preparation by molecular (organometallic or coordination) - - chemistry routes, including crystallisation and purification steps.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ + class_uri: qudt:Quantity + AngularVelocity: + name: AngularVelocity + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/AngularVelocity + description: Rate of rotational motion, typically expressed in revolutions per + minute. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - - coremeta4cat:MolecularSynthesis - is_a: PreparationMethod - mixins: - - DryingMixin + - qudt:Quantity + close_mappings: + - PATO:0002154 + is_a: QuantitativeAttribute slots: - title - description + - QuantitativeAttribute_value + - quantitativeAttribute__has_quantity_type + - quantitativeAttribute__unit - ClassifierMixin_type - rdf_type - - reaction_vessel - - mixing_device - - has_stirring_duration - - has_stirring_speed - - has_mixing_temperature - - filtration_device - - filter_type - - crystallisation_solvents - - precipitation_agent - - crystallisation_duration - - purification_solvent - - number_of_cycles - - temperature_ramp - - has_atmosphere - - drying_device - - has_drying_temperature - - has_drying_duration - - has_drying_atmosphere - class_uri: coremeta4cat:MolecularSynthesis - ExsolutionSynthesis: - name: ExsolutionSynthesis - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ExsolutionSynthesis - description: 'Catalyst preparation by exsolution: metal nanoparticles are grown - on - - a perovskite oxide surface by reduction/oxidation cycling.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ + class_uri: qudt:Quantity + EnergyQuantity: + name: EnergyQuantity + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/EnergyQuantity + description: A quantitative measure of energy (eV, keV, kJ/mol, etc.). + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - - coremeta4cat:ExsolutionSynthesis - is_a: PreparationMethod - mixins: - - CalcinationMixin + - qudt:Quantity + close_mappings: + - PATO:0001021 + is_a: QuantitativeAttribute slots: - title - description - - ClassifierMixin_type - - rdf_type - - has_calcination_temperature_range - - has_calcination_dwelling_time - - number_of_cycles - - has_calcination_atmosphere - - has_calcination_heating_rate - - has_calcination_gas_flow_rate - class_uri: coremeta4cat:ExsolutionSynthesis - XRaySourceMixin: - name: XRaySourceMixin - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/XRaySourceMixin - description: 'Mixin providing X-ray source and monochromator slots, shared by - all - - X-ray based techniques (PowderXRD, XRayAbsorptionSpectroscopy, XPS, - - SingleCrystalXRD).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ - mixin: true - slots: - - xray_source - - monochromator - class_uri: coremeta4cat:XRaySourceMixin - EnergyRangeMixin: - name: EnergyRangeMixin - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/EnergyRangeMixin - description: 'Mixin providing energy scan range slots, shared by X-ray spectroscopy - - techniques that scan over an energy range (XRayAbsorptionSpectroscopy, XPS).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ - mixin: true - slots: - - has_energy_range - class_uri: coremeta4cat:EnergyRangeMixin - ElectronMicroscopyMixin: - name: ElectronMicroscopyMixin - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ElectronMicroscopyMixin - description: 'Mixin providing electron gun and image parameters shared by electron - - microscopy techniques (TransmissionElectronMicroscopy, - - ScanningElectronMicroscopy).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ - mixin: true - slots: - - gun_type - - acceleration_voltage - - magnification_setting - class_uri: coremeta4cat:ElectronMicroscopyMixin - TemperatureProgramMixin: - name: TemperatureProgramMixin - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/TemperatureProgramMixin - description: 'Mixin providing temperature-programme parameters shared by thermal - - analysis and temperature-programmed reaction techniques - - (Thermogravimetry, TPO, TPR).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ - mixin: true - slots: - - has_temperature_range - - has_heating_rate - - has_heating_procedure - class_uri: coremeta4cat:TemperatureProgramMixin - ChromatographyMixin: - name: ChromatographyMixin - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ChromatographyMixin - description: 'Mixin providing chromatographic separation parameters shared by - - separation techniques (GCMS, SizeExclusionChromatography, HPLC_MS).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ - mixin: true - slots: - - column_type - - eluent - - has_flow_rate - - has_injection_volume - - external_standard - - internal_standard - class_uri: coremeta4cat:ChromatographyMixin - MassRangeMixin: - name: MassRangeMixin - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/MassRangeMixin - description: 'Mixin providing mass-to-charge scan range slots shared by mass - - spectrometry techniques (GCMS, ESI_MS).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ - mixin: true - slots: - - has_mz_range - class_uri: coremeta4cat:MassRangeMixin - PhotoluminescenceMixin: - name: PhotoluminescenceMixin - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PhotoluminescenceMixin - description: 'Mixin providing optical excitation/emission parameters shared by - - photoluminescence techniques (PhotoluminescenceSpectroscopy, - - PhotoluminescenceLifetime).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ - mixin: true - slots: - - excitation_wavelength - - emission_wavelength - - optical_filter - - has_temperature - class_uri: coremeta4cat:PhotoluminescenceMixin - ElectrochemistryMixin: - name: ElectrochemistryMixin - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ElectrochemistryMixin - description: 'Mixin providing electrochemical cell parameters shared by - - electrochemical characterization techniques (CyclicVoltammetry, - - ConductivityMeasurement).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ - mixin: true - slots: - - reference_electrode - - working_electrode - - counter_electrode - - electrolyte_composition - - electrolyte_concentration - - has_atmosphere - - has_temperature - class_uri: coremeta4cat:ElectrochemistryMixin - Characterization: - name: Characterization - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Characterization - description: "A DataGeneratingActivity in which a catalyst sample or catalytic\ - \ material\nis characterized using an analytical technique.\n\nThe catalyst\ - \ sample being characterized is linked via evaluated_entity.\nThe analytical\ - \ protocol is linked via realized_plan using a\nCharacterizationTechnique instance.\ - \ The instrument used is linked via\ncarried_out_by as a Device.\n\nThe specific\ - \ technique type is expressed via rdf_type using an ontology\nterm (e.g. CHMO:0000158\ - \ for powder XRD, CHMO:0000404 for XPS),\nfollowing DCAT-AP-PLUS Pattern 3 \u2014\ - \ exactly as NMRSpectroscopy uses\nrdf_type: CHMO:0000613." - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + - QuantitativeAttribute_value + - quantitativeAttribute__has_quantity_type + - quantitativeAttribute__unit + - ClassifierMixin_type + - rdf_type + class_uri: qudt:Quantity + ElectricPotential: + name: ElectricPotential + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ElectricPotential + description: A quantitative measure of electric potential difference or voltage. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - - OBI:0000070 - is_a: DataGeneratingActivity + - qudt:Quantity + close_mappings: + - PATO:0001464 + is_a: QuantitativeAttribute slots: - - id - - Activity_title - - Activity_description - - Activity_other_identifier - - Activity_has_part - - Activity_had_input_entity - - Activity_had_output_entity - - Activity_had_input_activity - - Activity_has_qualitative_attribute - - Activity_has_quantitative_attribute - - Activity_part_of + - title + - description + - QuantitativeAttribute_value + - quantitativeAttribute__has_quantity_type + - quantitativeAttribute__unit - ClassifierMixin_type - - evaluated_activity - - occurred_in - - sample_state - - sample_description - - sample_preparation - - has_sample_pretreatment - - detector_type - - Characterization_carried_out_by - - Characterization_evaluated_entity - - Characterization_realized_plan - - Characterization_rdf_type - slot_usage: - carried_out_by: - name: carried_out_by - description: 'The analytical instrument used to carry out this characterization. - - Provide a Device instance (e.g. XRD diffractometer, TEM, NMR spectrometer).' - range: Device - required: true - multivalued: true - inlined_as_list: true - evaluated_entity: - name: evaluated_entity - description: The catalyst sample or material being characterized. - range: EvaluatedEntity - recommended: true - multivalued: true - inlined_as_list: true - realized_plan: - name: realized_plan - description: The CharacterizationTechnique (protocol) realized in this Characterization. - range: CharacterizationTechnique - required: true - rdf_type: - name: rdf_type - description: 'The type of characterization technique as an ontology term, - e.g. - - CHMO:0000158 (powder XRD), CHMO:0000404 (XPS), VOC4CAT:0000075 (SEM).' - recommended: true - class_uri: OBI:0000070 - CharacterizationTechnique: - name: CharacterizationTechnique - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CharacterizationTechnique - description: 'An abstract Plan describing the analytical protocol used to characterize - - a catalyst. Concrete subclasses specify technique-specific parameters. - - Linked from Characterization via realized_plan.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + - rdf_type + class_uri: qudt:Quantity + ElectricCurrent: + name: ElectricCurrent + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ElectricCurrent + description: A quantitative measure of electric current (e.g. faradaic current + in an electrochemical cell). + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - - OBI:0000272 - is_a: Plan - abstract: true + - qudt:Quantity + is_a: QuantitativeAttribute slots: - title - description + - QuantitativeAttribute_value + - quantitativeAttribute__has_quantity_type + - quantitativeAttribute__unit - ClassifierMixin_type - rdf_type - class_uri: OBI:0000272 - PowderXRD: - name: PowderXRD - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PowderXRD - description: Powder X-ray diffraction for phase identification and structural - analysis. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + class_uri: qudt:Quantity + Area: + name: Area + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Area + description: A quantitative measure of surface area (e.g. active electrode area). + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - - CHMO:0000158 - is_a: CharacterizationTechnique - mixins: - - XRaySourceMixin + - qudt:Quantity + is_a: QuantitativeAttribute slots: - title - description + - QuantitativeAttribute_value + - quantitativeAttribute__has_quantity_type + - quantitativeAttribute__unit - ClassifierMixin_type - rdf_type - - has_two_theta_range - - step_size - - has_operation_mode - - has_atmosphere - - has_temperature - - sample_spinning_speed - - has_experiment_duration - - xray_source - - monochromator - class_uri: CHMO:0000158 - SingleCrystalXRD: - name: SingleCrystalXRD - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/SingleCrystalXRD - description: Single crystal X-ray diffraction for structure determination. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + class_uri: qudt:Quantity + PowerQuantity: + name: PowerQuantity + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PowerQuantity + description: Rate of energy transfer per unit time (e.g. laser power in mW). + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - - CHMO:0000852 - is_a: CharacterizationTechnique - mixins: - - XRaySourceMixin + - qudt:Quantity + close_mappings: + - PATO:0001230 + is_a: QuantitativeAttribute slots: - title - description + - QuantitativeAttribute_value + - quantitativeAttribute__has_quantity_type + - quantitativeAttribute__unit - ClassifierMixin_type - rdf_type - - has_temperature - - xray_source - - monochromator - class_uri: CHMO:0000852 - XRayAbsorptionSpectroscopy: - name: XRayAbsorptionSpectroscopy - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/XRayAbsorptionSpectroscopy - description: X-ray absorption spectroscopy (XAS/XANES/EXAFS) for electronic and - local structure analysis. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + class_uri: qudt:Quantity + LengthQuantity: + name: LengthQuantity + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/LengthQuantity + description: A quantitative measure of length or spatial dimension (nm, mm, cm). + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - - VOC4CAT:0000286 - is_a: CharacterizationTechnique - mixins: - - XRaySourceMixin - - EnergyRangeMixin + - qudt:Quantity + close_mappings: + - PATO:0001708 + is_a: QuantitativeAttribute slots: - title - description + - QuantitativeAttribute_value + - quantitativeAttribute__has_quantity_type + - quantitativeAttribute__unit - ClassifierMixin_type - rdf_type - - has_operation_mode - - element_analyzed - - absorption_edge - - energy_resolution - - has_temperature - - beamline_source - - noise_of_measurement - - number_of_cycles - - xray_source - - monochromator - - has_energy_range - class_uri: VOC4CAT:0000286 - XPS: - name: XPS - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/XPS - description: X-ray photoelectron spectroscopy for surface elemental and chemical - state analysis. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + class_uri: qudt:Quantity + PlaneAngle: + name: PlaneAngle + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PlaneAngle + description: A quantitative measure of a plane angle (e.g. scattering angle in + degrees). + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - - CHMO:0000404 - is_a: CharacterizationTechnique - mixins: - - XRaySourceMixin - - EnergyRangeMixin + - qudt:Quantity + is_a: QuantitativeAttribute slots: - title - description + - QuantitativeAttribute_value + - quantitativeAttribute__has_quantity_type + - quantitativeAttribute__unit - ClassifierMixin_type - rdf_type - - total_acquisition_time - - number_of_scans - - step_size - - pass_energy - - spot_size - - lense_mode - - charge_compensation - - has_atmosphere - - xray_source - - monochromator - - has_energy_range - class_uri: CHMO:0000404 - EDX: - name: EDX - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/EDX - description: Energy-dispersive X-ray spectroscopy for elemental mapping and quantification. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + class_uri: qudt:Quantity + Wavenumber: + name: Wavenumber + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Wavenumber + description: Reciprocal of wavelength; number of wave cycles per unit length (cm^-1). + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - - CHMO:0000309 - is_a: CharacterizationTechnique + - qudt:Quantity + is_a: QuantitativeAttribute slots: - title - description + - QuantitativeAttribute_value + - quantitativeAttribute__has_quantity_type + - quantitativeAttribute__unit - ClassifierMixin_type - rdf_type - - primary_energy - - counting_time - - resolution - - calibration_method - class_uri: CHMO:0000309 - InfraredSpectroscopy: - name: InfraredSpectroscopy - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/InfraredSpectroscopy - description: Infrared spectroscopy (FTIR/ATR) for functional group and surface - species identification. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + class_uri: qudt:Quantity + MassToChargeRatio: + name: MassToChargeRatio + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/MassToChargeRatio + description: Ratio of mass to electric charge (m/z) in mass spectrometry. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - - CHMO:0000630 - is_a: CharacterizationTechnique + - qudt:Quantity + is_a: QuantitativeAttribute slots: - title - description + - QuantitativeAttribute_value + - quantitativeAttribute__has_quantity_type + - quantitativeAttribute__unit - ClassifierMixin_type - rdf_type - - has_operation_mode - - has_wavenumber_range - - step_size - - has_temperature - - background_correction - - number_of_scans - - has_atmosphere - class_uri: CHMO:0000630 - DRIFTS: - name: DRIFTS - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/DRIFTS - description: 'Diffuse reflectance infrared Fourier transform spectroscopy for - in-situ + class_uri: qudt:Quantity + Atmosphere: + name: Atmosphere + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere + description: 'A qualitative descriptor of the gaseous environment or atmospheric - surface species identification under reactive gas conditions.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + conditions during a process (e.g. "air", "N2", "5% H2/Ar").' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - - CHMO:0000645 - is_a: CharacterizationTechnique + - coremeta4cat:Atmosphere + is_a: QualitativeAttribute slots: - title - description + - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - - adsorption_gas - - has_atmosphere - - has_flow_rate - - has_wavenumber_range - - diluting_reference - - ratio_reference_sample - - step_size - - resolution - - background_correction_method - - has_temperature - - number_of_scans - class_uri: CHMO:0000645 - RamanSpectroscopy: - name: RamanSpectroscopy - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/RamanSpectroscopy - description: Raman spectroscopy for vibrational and structural characterization. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + class_uri: coremeta4cat:Atmosphere + CalcinationGaseousEnvironment: + name: CalcinationGaseousEnvironment + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CalcinationGaseousEnvironment + description: 'The specific gaseous environment maintained during a calcination + step + + (e.g. "air", "N2", "10% O2/N2").' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - - VOC4CAT:0000069 - is_a: CharacterizationTechnique + - VOC4CAT:0000055 + is_a: Atmosphere slots: - title - description + - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - - excitation_laser_wavelength - - excitation_laser_power - - magnification_setting - - has_integration_time - - number_of_scans - - has_atmosphere - - has_temperature - - filter_or_grating - class_uri: VOC4CAT:0000069 - NMRSpectroscopy: - name: NMRSpectroscopy - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/NMRSpectroscopy - description: 'Nuclear magnetic resonance spectroscopy for structure elucidation. - - Note: for detailed liquid-state NMR minimum information, the dedicated - - nmr_dcat_ap profile (MARGARITAS) should be used in combination with - - this subprofile.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + class_uri: VOC4CAT:0000055 + HeatingProcedure: + name: HeatingProcedure + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/HeatingProcedure + description: "A qualitative descriptor of the thermal programme or heating procedure\n\ + applied (e.g. \"isothermal\", \"ramp 5 \xB0C/min to 500 \xB0C, dwell 2 h\")." + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - - VOC4CAT:0000073 - is_a: CharacterizationTechnique + - coremeta4cat:HeatingProcedure + is_a: QualitativeAttribute slots: - title - description + - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - - nucleus - - solvent - - irradiation_frequency - - has_temperature - - nmr_pulse_sequence - - nmr_sample_tube - - number_of_scans - - has_atmosphere - class_uri: VOC4CAT:0000073 - TransmissionElectronMicroscopy: - name: TransmissionElectronMicroscopy - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/TransmissionElectronMicroscopy - description: TEM for atomic-resolution imaging and diffraction of catalyst particles. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + class_uri: coremeta4cat:HeatingProcedure + SamplePretreatment: + name: SamplePretreatment + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/SamplePretreatment + description: "A qualitative descriptor of the pre-treatment applied to a sample\n\ + before a process or measurement (e.g. \"reduction at 300 \xB0C\", \"outgassing\"\ + )." + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - - VOC4CAT:0000078 - is_a: CharacterizationTechnique - mixins: - - ElectronMicroscopyMixin + - VOC4CAT:0000122 + is_a: QualitativeAttribute slots: - title - description + - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - - has_operation_mode - - gun_type - - acceleration_voltage - - magnification_setting - class_uri: VOC4CAT:0000078 - ScanningElectronMicroscopy: - name: ScanningElectronMicroscopy - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ScanningElectronMicroscopy - description: SEM for surface morphology and particle size/shape imaging. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + class_uri: VOC4CAT:0000122 + VesselType: + name: VesselType + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/VesselType + description: 'A qualitative descriptor of the type of reaction or synthesis vessel + + used (e.g. "autoclave", "round-bottom flask", "Schlenk tube").' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - - VOC4CAT:0000075 - is_a: CharacterizationTechnique - mixins: - - ElectronMicroscopyMixin + - coremeta4cat:VesselType + is_a: QualitativeAttribute slots: - title - description + - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - - image_resolution - - field_emitter - - gun_type - - acceleration_voltage - - magnification_setting - class_uri: VOC4CAT:0000075 - Thermogravimetry: - name: Thermogravimetry - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Thermogravimetry - description: Thermogravimetric analysis (TGA/DTG) for mass loss, decomposition, - and oxidation state characterization. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + class_uri: coremeta4cat:VesselType + OperationMode: + name: OperationMode + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/OperationMode + description: 'A qualitative descriptor of the operation mode of an instrument + or + + process (e.g. "transmission", "reflection", "AC", "DC", "full-scan").' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/common/ mappings: - - CHMO:0000690 - is_a: CharacterizationTechnique - mixins: - - TemperatureProgramMixin + - VOC4CAT:0000108 + is_a: QualitativeAttribute + slots: + - title + - description + - QualitativeAttribute_value + - ClassifierMixin_type + - rdf_type + class_uri: VOC4CAT:0000108 + DryingMixin: + name: DryingMixin + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/DryingMixin + description: 'Mixin providing drying step parameters. Used by preparation methods + that + + include a drying step after synthesis or precipitation + + (Impregnation, CoPrecipitation, DepositionPrecipitation, + + SonochemicalSynthesis, MolecularSynthesis).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ + mixin: true + slots: + - drying_device + - has_drying_temperature + - has_drying_duration + - has_drying_atmosphere + class_uri: coremeta4cat:DryingMixin + CalcinationMixin: + name: CalcinationMixin + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CalcinationMixin + description: 'Mixin providing calcination step parameters. Used by preparation + methods + + that include a thermal calcination step + + (Impregnation, CoPrecipitation, DepositionPrecipitation, + + SonochemicalSynthesis, ExsolutionSynthesis).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ + mixin: true + slots: + - has_calcination_temperature_range + - has_calcination_dwelling_time + - number_of_cycles + - has_calcination_atmosphere + - has_calcination_heating_rate + - has_calcination_gas_flow_rate + class_uri: coremeta4cat:CalcinationMixin + PrecipitationMixin: + name: PrecipitationMixin + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PrecipitationMixin + description: 'Mixin providing precipitation and wet-chemistry step parameters. + Used by + + preparation methods based on precipitation from solution + + (CoPrecipitation, DepositionPrecipitation).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ + mixin: true + slots: + - precipitating_agent + - precipitating_concentration + - has_ph_value + - has_mixing_speed + - has_mixing_duration + - has_mixing_temperature + - order_of_addition + - filtration + - purification + - has_aging_temperature + - has_aging_duration + class_uri: coremeta4cat:PrecipitationMixin + ThermalSynthesisMixin: + name: ThermalSynthesisMixin + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ThermalSynthesisMixin + description: 'Mixin providing thermal process parameters common to synthesis methods + + carried out at elevated temperature in a closed vessel or reactor + + (Solvothermal, PlasmaAssisted, CombustionSynthesis, + + MicrowaveAssisted, MechanochemicalSynthesis, Sublimation).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ + mixin: true slots: - - title - - description - - ClassifierMixin_type - - rdf_type - - has_operation_mode + - synthesis_temperature + - synthesis_duration + - has_vessel_type - has_atmosphere - - initial_temperature - - final_temperature - - has_sample_mass - - has_temperature_range - - has_heating_rate - - has_heating_procedure - class_uri: CHMO:0000690 - TPR: - name: TPR - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/TPR - description: Temperature-programmed reduction for reducibility and metal-support - interaction characterization. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ - mappings: - - CHMO:0002908 - is_a: CharacterizationTechnique - mixins: - - TemperatureProgramMixin - slots: - - title - - description - - ClassifierMixin_type - - rdf_type - - reducing_gas_composition - - has_temperature_range - - has_heating_rate - - has_heating_procedure - class_uri: CHMO:0002908 - TPO: - name: TPO - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/TPO - description: Temperature-programmed oxidation for coke quantification and reoxidation - characterization. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + class_uri: coremeta4cat:ThermalSynthesisMixin + Synthesis: + name: Synthesis + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Synthesis + description: 'A DataGeneratingActivity in which a catalyst is prepared. + + + The preparation protocol is linked via realized_plan using a + + PreparationMethod instance. Input materials (Precursors) are linked via + + had_input_entity. The resulting catalyst (CatalystSample) is linked via + + had_output_entity. + + + The type of synthesis is further specified via rdf_type using an ontology + + term (e.g. a VOC4CAT preparation method term), following DCAT-AP-PLUS + + Pattern 3.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - CHMO:0002907 - is_a: CharacterizationTechnique - mixins: - - TemperatureProgramMixin + - OBI:0000070 + is_a: CatalysisDataGeneratingActivity slots: - - title - - description + - id + - Activity_title + - Activity_description + - Activity_other_identifier + - Activity_has_part + - Activity_had_input_activity + - Activity_has_qualitative_attribute + - Activity_has_quantitative_attribute + - Activity_part_of - ClassifierMixin_type - rdf_type - - oxidizing_gas_composition - - has_temperature_range - - has_heating_rate - - has_heating_procedure - class_uri: CHMO:0002907 - BET: - name: BET - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/BET - description: Brunauer-Emmett-Teller analysis for specific surface area and pore - size distribution. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + - evaluated_entity + - evaluated_activity + - occurred_in + - activity_designator + - Synthesis_nominal_composition + - Synthesis_catalyst_measured_properties + - Synthesis_storage_conditions + - catalyst_support + - solvent + - has_sample_pretreatment + - Synthesis_had_input_entity + - Synthesis_had_output_entity + - Synthesis_realized_plan + - Synthesis_carried_out_by + slot_usage: + nominal_composition: + name: nominal_composition + required: true + catalyst_measured_properties: + name: catalyst_measured_properties + required: true + had_input_entity: + name: had_input_entity + description: The Precursor(s) consumed during this Synthesis. + range: Precursor + required: true + multivalued: true + inlined_as_list: true + had_output_entity: + name: had_output_entity + description: The CatalystSample produced by this Synthesis. + range: CatalystSample + recommended: true + multivalued: true + inlined_as_list: true + realized_plan: + name: realized_plan + description: The PreparationMethod (protocol) realized in this Synthesis. + range: PreparationMethod + required: true + inlined: true + storage_conditions: + name: storage_conditions + recommended: true + carried_out_by: + name: carried_out_by + description: 'Equipment or synthesis device used to carry out this preparation + step. + + Provide a Device instance (e.g. rotary evaporator, autoclave, furnace).' + range: Device + multivalued: true + inlined_as_list: true + class_uri: OBI:0000070 + Precursor: + name: Precursor + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Precursor + description: 'A MaterialSample that serves as input material in a catalyst Synthesis. + + Precursors are consumed or transformed during the preparation process.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - ENM:0000064 - is_a: CharacterizationTechnique + - VOC4CAT:0007794 + is_a: MaterialSample slots: - - title - - description + - id + - has_qualitative_attribute + - has_quantitative_attribute + - Entity_has_part + - Entity_part_of - ClassifierMixin_type - rdf_type - - adsorbate_gas - - degassing_temperature - - measurement_temperature - - pore_size_distribution_method - - has_sample_mass - class_uri: ENM:0000064 - ICPAES: - name: ICPAES - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ICPAES - description: Inductively coupled plasma atomic emission spectroscopy for bulk - elemental composition. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + - EvaluatedEntity_was_generated_by + - EvaluatedEntity_title + - EvaluatedEntity_description + - EvaluatedEntity_other_identifier + - MaterialSample_derived_from + - alternative_label + - has_physical_state + - has_temperature + - has_mass + - has_volume + - has_density + - has_pressure + - Precursor_precursor_quantity + slot_usage: + precursor_quantity: + name: precursor_quantity + required: true + class_uri: VOC4CAT:0007794 + CatalystSample: + name: CatalystSample + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CatalystSample + description: 'A MaterialSample that is the product of a catalyst Synthesis. + + The specific type of catalyst (e.g. heterogeneous, supported metal) + + is expressed via rdf_type using a VOC4CAT term.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - CHMO:0000267 - is_a: CharacterizationTechnique + - OBI:0000747 + is_a: MaterialSample slots: - - title - - description + - id + - has_qualitative_attribute + - has_quantitative_attribute + - Entity_has_part + - Entity_part_of - ClassifierMixin_type - rdf_type - - element_analyzed - - calibration_method - - detection_limit - - matrix_effect_correction - class_uri: CHMO:0000267 - ElementalAnalysis: - name: ElementalAnalysis - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ElementalAnalysis - description: Combustion elemental analysis (CHNS/O) for carbon, hydrogen, nitrogen, - sulfur content. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + - EvaluatedEntity_was_generated_by + - EvaluatedEntity_title + - EvaluatedEntity_description + - EvaluatedEntity_other_identifier + - alternative_label + - has_physical_state + - has_temperature + - has_mass + - has_volume + - has_density + - has_pressure + - CatalystSample_derived_from + slot_usage: + derived_from: + name: derived_from + description: 'The Precursor(s) or other MaterialSample from which this + + CatalystSample was produced.' + range: MaterialSample + class_uri: OBI:0000747 + PreparationMethod: + name: PreparationMethod + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PreparationMethod + description: "An abstract Plan describing the protocol used to prepare a catalyst.\n\ + Concrete subclasses (Impregnation, CoPrecipitation, \u2026) specify the\nmethod-specific\ + \ parameters. Linked from Synthesis via realized_plan.\n\nThe specific preparation\ + \ method type should additionally be expressed\nvia rdf_type on the Synthesis\ + \ activity using a voc4cat term\n(e.g. VOC4CAT:0007016 for preparation method)." + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - CHMO:0001075 - is_a: CharacterizationTechnique + - VOC4CAT:0007016 + is_a: CatalysisPlan + abstract: true slots: - title - description - ClassifierMixin_type - rdf_type - - elements_analyzed - - combustion_temperature - - carrier_gas - class_uri: CHMO:0001075 - UVVisSpectroscopy: - name: UVVisSpectroscopy - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/UVVisSpectroscopy - description: UV-Vis spectroscopy for electronic transitions, band gap, and concentration - determination. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + - id + class_uri: VOC4CAT:0007016 + Impregnation: + name: Impregnation + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Impregnation + description: 'Catalyst preparation by impregnation: a solution of the active phase + + precursor is brought into contact with the support material.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - VOC4CAT:0000079 - is_a: CharacterizationTechnique + - VOC4CAT:0007028 + is_a: PreparationMethod + mixins: + - DryingMixin + - CalcinationMixin slots: - title - description - ClassifierMixin_type - rdf_type - - minimum_wavelength - - maximum_wavelength - - path_length - - solvent - - has_concentration - class_uri: VOC4CAT:0000079 - PhotoluminescenceSpectroscopy: - name: PhotoluminescenceSpectroscopy - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PhotoluminescenceSpectroscopy - description: Photoluminescence spectroscopy for defect and charge carrier characterization. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + - id + - impregnation_type + - impregnation_duration + - impregnation_temperature + - drying_device + - has_drying_temperature + - has_drying_duration + - has_drying_atmosphere + - has_calcination_temperature_range + - has_calcination_dwelling_time + - number_of_cycles + - has_calcination_atmosphere + - has_calcination_heating_rate + - has_calcination_gas_flow_rate + class_uri: VOC4CAT:0007028 + CoPrecipitation: + name: CoPrecipitation + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CoPrecipitation + description: 'Catalyst preparation by co-precipitation: precursor salts are + + simultaneously precipitated from solution by a precipitating agent.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - CHMO:0000773 - is_a: CharacterizationTechnique + - VOC4CAT:0007795 + is_a: PreparationMethod mixins: - - PhotoluminescenceMixin + - PrecipitationMixin + - DryingMixin + - CalcinationMixin slots: - title - description - ClassifierMixin_type - rdf_type - - emission_range - - slit_width - - step_size - - has_integration_time - - excitation_wavelength - - emission_wavelength - - optical_filter - - has_temperature - class_uri: CHMO:0000773 - PhotoluminescenceLifetime: - name: PhotoluminescenceLifetime - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PhotoluminescenceLifetime - description: Time-resolved photoluminescence for charge carrier lifetime and recombination - dynamics. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + - id + - precipitating_agent + - precipitating_concentration + - has_ph_value + - has_mixing_speed + - has_mixing_duration + - has_mixing_temperature + - order_of_addition + - filtration + - purification + - has_aging_temperature + - has_aging_duration + - drying_device + - has_drying_temperature + - has_drying_duration + - has_drying_atmosphere + - has_calcination_temperature_range + - has_calcination_dwelling_time + - number_of_cycles + - has_calcination_atmosphere + - has_calcination_heating_rate + - has_calcination_gas_flow_rate + class_uri: VOC4CAT:0007795 + SolGel: + name: SolGel + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/SolGel + description: 'Catalyst preparation by the sol-gel process: hydrolysis and condensation + + of precursor molecules to form a colloidal network (gel).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - CHMO:0001917 - is_a: CharacterizationTechnique + - CHMO:0001313 + is_a: PreparationMethod mixins: - - PhotoluminescenceMixin + - DryingMixin slots: - title - description - ClassifierMixin_type - rdf_type - - lifetime_fitting_model - - number_of_shots - - excitation_wavelength - - emission_wavelength - - optical_filter - - has_temperature - class_uri: CHMO:0001917 - CyclicVoltammetry: - name: CyclicVoltammetry - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CyclicVoltammetry - description: Cyclic voltammetry for electrochemical activity, redox potential, - and capacitance characterization. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + - id + - hydrolysis_ratio + - has_aging_duration + - drying + - surfactant_template + - drying_device + - has_drying_temperature + - has_drying_duration + - has_drying_atmosphere + class_uri: CHMO:0001313 + Solvothermal: + name: Solvothermal + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Solvothermal + description: 'Catalyst preparation under elevated temperature and pressure in + a + + sealed vessel using a non-aqueous solvent.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - CHMO:0000025 - is_a: CharacterizationTechnique + - CHMO:0001458 + is_a: PreparationMethod mixins: - - ElectrochemistryMixin + - ThermalSynthesisMixin slots: - title - description - ClassifierMixin_type - rdf_type - - scan_rate - - minimum_potential - - maximum_potential - - step_size_potential - - number_of_cycles - - reference_electrode - - working_electrode - - counter_electrode - - electrolyte_composition - - electrolyte_concentration + - id + - filling_volume + - stirrer_type + - cooling_rate + - synthesis_temperature + - synthesis_duration + - has_vessel_type - has_atmosphere - - has_temperature - class_uri: CHMO:0000025 - ConductivityMeasurement: - name: ConductivityMeasurement - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ConductivityMeasurement - description: Electrical conductivity measurement for ionic and electronic transport - characterization. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + class_uri: CHMO:0001458 + PlasmaAssisted: + name: PlasmaAssisted + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PlasmaAssisted + description: 'Catalyst preparation using plasma treatment to modify surface + + properties or deposit active components.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - CHMO:0000010 - is_a: CharacterizationTechnique + - coremeta4cat:PlasmaAssisted + is_a: PreparationMethod mixins: - - ElectrochemistryMixin + - ThermalSynthesisMixin slots: - title - description - ClassifierMixin_type - rdf_type - - electrode_configuration - - ac_frequency - - ac_dc_mode - - sample_geometry - - reference_electrode - - working_electrode - - counter_electrode - - electrolyte_composition - - electrolyte_concentration + - id + - plasma_type + - power_input + - exposure_time + - synthesis_pressure + - synthesis_temperature + - synthesis_duration + - has_vessel_type - has_atmosphere - - has_temperature - class_uri: CHMO:0000010 - DynamicLightScattering: - name: DynamicLightScattering - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/DynamicLightScattering - description: Dynamic light scattering for hydrodynamic particle size distribution - in suspension. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + class_uri: coremeta4cat:PlasmaAssisted + CombustionSynthesis: + name: CombustionSynthesis + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CombustionSynthesis + description: 'Catalyst preparation by combustion of a fuel/oxidizer mixture, + + producing metal oxide catalysts in a single rapid step.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - CHMO:0000167 - is_a: CharacterizationTechnique + - coremeta4cat:CombustionSynthesis + is_a: PreparationMethod + mixins: + - ThermalSynthesisMixin slots: - title - description - ClassifierMixin_type - rdf_type - - solvent - - has_concentration - - light_wavelength - - scattering_angle - - refractive_index - - has_temperature - - dispersant - - measurement_duration - class_uri: CHMO:0000167 - ElectroSprayIonizationMassSpectrometry: - name: ElectroSprayIonizationMassSpectrometry - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ElectroSprayIonizationMassSpectrometry - description: Electrospray ionisation mass spectrometry for molecular mass and - identity determination. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + - id + - fuel + - oxidizer + - fuel_to_oxidizer_ratio + - set_temperature + - post_treatment + - synthesis_temperature + - synthesis_duration + - has_vessel_type + - has_atmosphere + class_uri: coremeta4cat:CombustionSynthesis + AtomicLayerDeposition: + name: AtomicLayerDeposition + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/AtomicLayerDeposition + description: 'Catalyst preparation by atomic layer deposition (ALD): sequential + + self-limiting surface reactions deposit a conformal thin film + + of active phase onto a substrate.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - CHMO:0000482 - is_a: CharacterizationTechnique - mixins: - - MassRangeMixin + - CHMO:0001311 + is_a: PreparationMethod slots: - title - description - ClassifierMixin_type - rdf_type - - has_operation_mode - - spray_voltage - - capillary_temperature - - solvent_composition - - has_flow_rate + - id + - substrate + - pulse_time + - purging_duration + - number_of_cycles + - deposition_temperature - carrier_gas - - has_concentration - - has_mz_range - class_uri: CHMO:0000482 - GCMS: - name: GCMS - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/GCMS - description: Gas chromatography-mass spectrometry for volatile compound identification - and quantification. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + class_uri: CHMO:0001311 + DepositionPrecipitation: + name: DepositionPrecipitation + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/DepositionPrecipitation + description: 'Catalyst preparation by deposition-precipitation: the active phase + + is precipitated directly onto the support surface.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - CHMO:0000497 - is_a: CharacterizationTechnique + - coremeta4cat:DepositionPrecipitation + is_a: PreparationMethod mixins: - - ChromatographyMixin - - MassRangeMixin + - PrecipitationMixin + - DryingMixin + - CalcinationMixin slots: - title - description - ClassifierMixin_type - rdf_type - - carrier_gas - - carrier_gas_purity - - inlet_temperature - - minimum_oven_temperature - - maximum_oven_temperature - - heating_ramp - - has_heating_procedure - - acquisition_mode - - solvent_delay - - trace_ion_detection - - split_ratio - - column_type - - eluent - - has_flow_rate - - has_injection_volume - - external_standard - - internal_standard - - has_mz_range - class_uri: CHMO:0000497 - SizeExclusionChromatography: - name: SizeExclusionChromatography - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/SizeExclusionChromatography - description: Size exclusion chromatography for molecular weight distribution determination. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + - id + - deposition_temperature + - deposition_time + - precipitating_agent + - precipitating_concentration + - has_ph_value + - has_mixing_speed + - has_mixing_duration + - has_mixing_temperature + - order_of_addition + - filtration + - purification + - has_aging_temperature + - has_aging_duration + - drying_device + - has_drying_temperature + - has_drying_duration + - has_drying_atmosphere + - has_calcination_temperature_range + - has_calcination_dwelling_time + - number_of_cycles + - has_calcination_atmosphere + - has_calcination_heating_rate + - has_calcination_gas_flow_rate + class_uri: coremeta4cat:DepositionPrecipitation + MicrowaveAssisted: + name: MicrowaveAssisted + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/MicrowaveAssisted + description: 'Catalyst preparation using microwave irradiation to rapidly and + + uniformly heat the reaction mixture.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - AFP:0000843 - is_a: CharacterizationTechnique + - CHMO:0002906 + is_a: PreparationMethod mixins: - - ChromatographyMixin + - ThermalSynthesisMixin slots: - title - description - ClassifierMixin_type - rdf_type - - has_temperature - - calibration_standard - - column_type - - eluent - - has_flow_rate - - has_injection_volume - - external_standard - - internal_standard - class_uri: AFP:0000843 - HighPerformanceLiquidChromatographyMassSpectrometry: - name: HighPerformanceLiquidChromatographyMassSpectrometry - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/HighPerformanceLiquidChromatographyMassSpectrometry - description: High-performance liquid chromatography-mass spectrometry for compound - identification and quantification. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + - id + - power + - microwave_frequency + - synthesis_temperature + - synthesis_duration + - has_vessel_type + - has_atmosphere + class_uri: CHMO:0002906 + SonochemicalSynthesis: + name: SonochemicalSynthesis + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/SonochemicalSynthesis + description: 'Catalyst preparation using ultrasonic irradiation to drive chemical + + reactions via acoustic cavitation.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - CHMO:0000796 - is_a: CharacterizationTechnique + - coremeta4cat:SonochemicalSynthesis + is_a: PreparationMethod mixins: - - ChromatographyMixin + - DryingMixin + - CalcinationMixin slots: - title - description - ClassifierMixin_type - rdf_type - - gradient_program - - ionization_mode - - has_temperature - - column_type - - eluent - - has_flow_rate - - has_injection_volume - - external_standard - - internal_standard - class_uri: CHMO:0000796 - CatalyticReaction: - name: CatalyticReaction - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CatalyticReaction - description: "An EvaluatedActivity representing the catalytic reaction being studied.\n\ - \nReaction is NOT a DataGeneratingActivity \u2014 it is the catalytic process\n\ - being observed, not the process that generates the dataset. A CatalysisDataset\n\ - is linked to the Reaction it is about via is_about_activity.\n\nFor operando\ - \ experiments (e.g. in-situ XRD during a reaction), the dataset\ncarries both:\n\ - \ was_generated_by: Characterization (the measurement producing data)\n is_about_activity:\ - \ Reaction (the catalytic process being monitored)\n\nThe reactor is\ - \ linked via carried_out_by as a Reactor (Device).\nReactants are linked via\ - \ had_input_entity. The type of catalytic reaction\n(e.g. ammonia synthesis,\ - \ CO oxidation) is expressed via rdf_type using a\nvoc4cat or ChemO term." - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ - mappings: - - SIO:010345 - is_a: EvaluatedActivity - slots: - id - - Activity_title - - Activity_description - - Activity_has_part - - Activity_had_output_entity - - Activity_had_input_activity - - Activity_has_qualitative_attribute - - Activity_has_quantitative_attribute - - Activity_part_of - - ClassifierMixin_type - - EvaluatedActivity_other_identifier - - catalyst_quantity - - reactant - - has_catalyst_type - - has_reaction_type - - reactor_temperature_range - - has_atmosphere - - experiment_pressure - - feed_composition_range - - has_experiment_duration - - CatalyticReaction_product_identification_method - - CatalyticReaction_rdf_type - - CatalyticReaction_carried_out_by - - CatalyticReaction_had_input_entity - slot_usage: - rdf_type: - name: rdf_type - description: 'The type of catalytic reaction as an ontology term (e.g. VOC4CAT:0007010 - - for a specific reaction type, or a ChemO/RXNO term).' - recommended: true - carried_out_by: - name: carried_out_by - description: 'The reactor in which the Reaction takes place. - - Must be a Reactor instance (a Device subclass specific to catalytic - - reaction vessels, e.g. FixedBedReactor, CSTR, Autoclave).' - range: ChemicalReactor - required: true - multivalued: true - inlined_as_list: true - had_input_entity: - name: had_input_entity - description: The reactant chemicals or feeds entering the reactor. - range: EvaluatedEntity - recommended: true - multivalued: true - inlined_as_list: true - product_identification_method: - name: product_identification_method - description: 'The analytical method used to identify and/or quantify reaction - products. - - Should reference a CharacterizationTechnique instance (e.g. GCMS, HPLC_MS). - - The abstract stub ProductIdentificationMethod is retained for backward compatibility.' - range: ProductIdentificationMethod - required: true - multivalued: true - inlined_as_list: true - class_uri: SIO:010345 - ProductIdentificationMethod: - name: ProductIdentificationMethod - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ProductIdentificationMethod - description: 'Abstract Plan representing the method used to identify and quantify - reaction - - products. In practice, users should reference a concrete CharacterizationTechnique - - subclass from coremeta4cat_characterization_ap (e.g. GCMS, HPLC_MS, NMRSpectroscopy). - - - This abstract class is retained for backward compatibility with the original - - CoreMeta4Cat monolith. It is a subclass of Plan (prov:Plan / OBI:0000272) so - that + - sonication_power + - sonication_duration + - has_temperature + - drying_device + - has_drying_temperature + - has_drying_duration + - has_drying_atmosphere + - has_calcination_temperature_range + - has_calcination_dwelling_time + - number_of_cycles + - has_calcination_atmosphere + - has_calcination_heating_rate + - has_calcination_gas_flow_rate + class_uri: coremeta4cat:SonochemicalSynthesis + FlameSprayPyrolysis: + name: FlameSprayPyrolysis + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/FlameSprayPyrolysis + description: 'Catalyst preparation by flame spray pyrolysis (FSP): a liquid precursor - it can participate in the realized_plan slot if needed.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + solution is atomised and combusted in a flame to produce nanoparticles.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - OBI:0000272 - is_a: Plan + - VOC4CAT:0007031 + is_a: PreparationMethod slots: - title - description - ClassifierMixin_type - rdf_type - class_uri: OBI:0000272 - ChemicalReactor: - name: ChemicalReactor - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ChemicalReactor - description: "Abstract Device subclass representing a catalytic reactor vessel.\n\ - \nReactor is more specific than the general Device (AgenticEntity): it restricts\n\ - carried_out_by on Reaction to dedicated reactor equipment. This semantic\ndistinction\ - \ separates analytical instruments (Device) from reaction vessels\n(Reactor)\ - \ in the carried_out_by relationship.\n\nConcrete subclasses (FixedBedReactor,\ - \ CSTR, PlugFlowReactor, \u2026) specify\nreactor geometry and operating mode.\n\ - Linked from Reaction via carried_out_by (restricted to range: Reactor)." - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - flame_type + - has_flow_rate + - inlet_system + - flame_ring + - dispersant + - capillary_pressure + - fuel_dispersant_ratio + - filtration_device + - filter_type + class_uri: VOC4CAT:0007031 + MechanochemicalSynthesis: + name: MechanochemicalSynthesis + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/MechanochemicalSynthesis + description: 'Catalyst preparation by mechanical milling or grinding, optionally + + combined with thermal treatment.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - VOC4CAT:0007018 - is_a: Device - abstract: true + - coremeta4cat:MechanochemicalSynthesis + is_a: PreparationMethod + mixins: + - ThermalSynthesisMixin slots: - - id - title - description - - has_qualitative_attribute - - has_quantitative_attribute - - AgenticEntity_part_of - ClassifierMixin_type - rdf_type - - Device_has_part - - Device_other_identifier - class_uri: VOC4CAT:0007018 - ElectrochemicalReactor: - name: ElectrochemicalReactor - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ElectrochemicalReactor - description: 'Electrochemical reactor used in electrocatalytic experiments, including + - id + - vessel_volume + - size_and_material + - milling_speed + - milling_duration + - ball_material + - ball_size + - ball_to_powder_ratio + - synthesis_temperature + - synthesis_duration + - has_vessel_type + - has_atmosphere + class_uri: coremeta4cat:MechanochemicalSynthesis + Sublimation: + name: Sublimation + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Sublimation + description: 'Catalyst preparation by sublimation: a solid precursor is vaporised - H-cells, flow cells, and membrane electrode assemblies.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + and deposited onto a substrate without passing through a liquid phase.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - VOC4CAT:0000193 - is_a: ChemicalReactor + - coremeta4cat:Sublimation + is_a: PreparationMethod + mixins: + - ThermalSynthesisMixin slots: - - id - title - description - - has_qualitative_attribute - - has_quantitative_attribute - - AgenticEntity_part_of - ClassifierMixin_type - rdf_type - - Device_has_part - - Device_other_identifier - - has_cathode - - has_anode - - has_cell_operating_mode - - has_active_area - - has_faradaic_current - class_uri: VOC4CAT:0000193 - CSTR: - name: CSTR - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CSTR - description: "Continuous stirred tank reactor (CSTR) \u2014 a well-mixed, continuous-flow\n\ - reactor operating at steady state." - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - synthesis_pressure + - synthesis_temperature + - synthesis_duration + - has_vessel_type + - has_atmosphere + class_uri: coremeta4cat:Sublimation + MolecularSynthesis: + name: MolecularSynthesis + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/MolecularSynthesis + description: 'Catalyst preparation by molecular (organometallic or coordination) + + chemistry routes, including crystallisation and purification steps.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - VOC4CAT:0007019 - is_a: ChemicalReactor + - coremeta4cat:MolecularSynthesis + is_a: PreparationMethod + mixins: + - DryingMixin slots: - - id - title - description - - has_qualitative_attribute - - has_quantitative_attribute - - AgenticEntity_part_of - ClassifierMixin_type - rdf_type - - Device_has_part - - Device_other_identifier + - id + - reaction_vessel + - mixing_device + - has_stirring_duration - has_stirring_speed - - has_volume - - has_stirrer_type - - has_stirrer_diameter - class_uri: VOC4CAT:0007019 - PlugFlowReactor: - name: PlugFlowReactor - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PlugFlowReactor - description: "Plug flow reactor (PFR) \u2014 a tubular reactor in which reactant\ - \ composition\nvaries along the axis with no axial mixing." - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - has_mixing_temperature + - filtration_device + - filter_type + - crystallisation_solvents + - precipitation_agent + - crystallisation_duration + - purification_solvent + - number_of_cycles + - temperature_ramp + - has_atmosphere + - drying_device + - has_drying_temperature + - has_drying_duration + - has_drying_atmosphere + class_uri: coremeta4cat:MolecularSynthesis + ExsolutionSynthesis: + name: ExsolutionSynthesis + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ExsolutionSynthesis + description: 'Catalyst preparation by exsolution: metal nanoparticles are grown + on + + a perovskite oxide surface by reduction/oxidation cycling.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/synthesis/ mappings: - - VOC4CAT:0007102 - is_a: ChemicalReactor + - coremeta4cat:ExsolutionSynthesis + is_a: PreparationMethod + mixins: + - CalcinationMixin slots: - - id - title - description - - has_qualitative_attribute - - has_quantitative_attribute - - AgenticEntity_part_of - ClassifierMixin_type - rdf_type - - Device_has_part - - Device_other_identifier - class_uri: VOC4CAT:0007102 - Autoclave: - name: Autoclave - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Autoclave - description: "Autoclave reactor \u2014 a sealed pressure vessel for batch reactions\ - \ at\nelevated temperature and/or pressure." - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ - mappings: - - NCIT:C93052 - is_a: ChemicalReactor - slots: - id - - title - - description - - has_qualitative_attribute - - has_quantitative_attribute - - AgenticEntity_part_of - - ClassifierMixin_type - - rdf_type - - Device_has_part - - Device_other_identifier - class_uri: NCIT:C93052 - SlurryReactor: - name: SlurryReactor - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/SlurryReactor - description: "Slurry reactor \u2014 a three-phase reactor in which catalyst particles\ - \ are\nsuspended in a liquid phase through which gas is bubbled." - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ - mappings: - - coremeta4cat:SlurryReactor - is_a: ChemicalReactor + - has_calcination_temperature_range + - has_calcination_dwelling_time + - number_of_cycles + - has_calcination_atmosphere + - has_calcination_heating_rate + - has_calcination_gas_flow_rate + class_uri: coremeta4cat:ExsolutionSynthesis + XRaySourceMixin: + name: XRaySourceMixin + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/XRaySourceMixin + description: 'Mixin providing X-ray source and monochromator slots, shared by + all + + X-ray based techniques (PowderXRD, XRayAbsorptionSpectroscopy, XPS, + + SingleCrystalXRD).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + mixin: true + slots: + - xray_source + - monochromator + class_uri: coremeta4cat:XRaySourceMixin + EnergyRangeMixin: + name: EnergyRangeMixin + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/EnergyRangeMixin + description: 'Mixin providing energy scan range slots, shared by X-ray spectroscopy + + techniques that scan over an energy range (XRayAbsorptionSpectroscopy, XPS).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + mixin: true + slots: + - has_energy_range + class_uri: coremeta4cat:EnergyRangeMixin + ElectronMicroscopyMixin: + name: ElectronMicroscopyMixin + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ElectronMicroscopyMixin + description: 'Mixin providing electron gun and image parameters shared by electron + + microscopy techniques (TransmissionElectronMicroscopy, + + ScanningElectronMicroscopy).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + mixin: true + slots: + - gun_type + - acceleration_voltage + - magnification_setting + class_uri: coremeta4cat:ElectronMicroscopyMixin + TemperatureProgramMixin: + name: TemperatureProgramMixin + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/TemperatureProgramMixin + description: 'Mixin providing temperature-programme parameters shared by thermal + + analysis and temperature-programmed reaction techniques + + (Thermogravimetry, TPO, TPR).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + mixin: true + slots: + - has_temperature_range + - has_heating_rate + - has_heating_procedure + class_uri: coremeta4cat:TemperatureProgramMixin + ChromatographyMixin: + name: ChromatographyMixin + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ChromatographyMixin + description: 'Mixin providing chromatographic separation parameters shared by + + separation techniques (GCMS, SizeExclusionChromatography, HPLC_MS).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + mixin: true slots: - - id - - title - - description - - has_qualitative_attribute - - has_quantitative_attribute - - AgenticEntity_part_of - - ClassifierMixin_type - - rdf_type - - Device_has_part - - Device_other_identifier - class_uri: coremeta4cat:SlurryReactor - Microreactor: - name: Microreactor - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Microreactor - description: "Microreactor \u2014 a miniaturised flow reactor with characteristic\ - \ dimensions\nin the sub-millimetre range, enabling precise thermal control\ - \ and rapid\nscreening." - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ - mappings: - - VOC4CAT:0000234 - is_a: ChemicalReactor + - column_type + - eluent + - has_flow_rate + - has_injection_volume + - external_standard + - internal_standard + class_uri: coremeta4cat:ChromatographyMixin + MassRangeMixin: + name: MassRangeMixin + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/MassRangeMixin + description: 'Mixin providing mass-to-charge scan range slots shared by mass + + spectrometry techniques (GCMS, ESI_MS).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + mixin: true slots: - - id - - title - - description - - has_qualitative_attribute - - has_quantitative_attribute - - AgenticEntity_part_of - - ClassifierMixin_type - - rdf_type - - Device_has_part - - Device_other_identifier - class_uri: VOC4CAT:0000234 - FixedBedReactor: - name: FixedBedReactor - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/FixedBedReactor - description: "Fixed bed reactor \u2014 a tubular reactor packed with a stationary\ - \ catalyst bed.\nThe most common reactor type in heterogeneous catalysis testing." - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ - mappings: - - coremeta4cat:FixedBedReactor - is_a: ChemicalReactor + - has_mz_range + class_uri: coremeta4cat:MassRangeMixin + PhotoluminescenceMixin: + name: PhotoluminescenceMixin + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PhotoluminescenceMixin + description: 'Mixin providing optical excitation/emission parameters shared by + + photoluminescence techniques (PhotoluminescenceSpectroscopy, + + PhotoluminescenceLifetime).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + mixin: true slots: - - id - - title - - description - - has_qualitative_attribute - - has_quantitative_attribute - - AgenticEntity_part_of - - ClassifierMixin_type - - rdf_type - - Device_has_part - - Device_other_identifier - - has_catalyst_particle_size - - has_catalyst_bed_volume - - has_catalyst_dilution_material - - has_catalyst_bed_height - class_uri: coremeta4cat:FixedBedReactor - FluidizedBedReactor: - name: FluidizedBedReactor - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/FluidizedBedReactor - description: "Fluidized bed reactor \u2014 a reactor in which the catalyst particles\ - \ are\nsuspended in an upward-flowing gas or liquid stream." - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - excitation_wavelength + - emission_wavelength + - optical_filter + - has_temperature + class_uri: coremeta4cat:PhotoluminescenceMixin + ElectrochemistryMixin: + name: ElectrochemistryMixin + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ElectrochemistryMixin + description: 'Mixin providing electrochemical cell parameters shared by + + electrochemical characterization techniques (CyclicVoltammetry, + + ConductivityMeasurement).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ + mixin: true + slots: + - reference_electrode + - working_electrode + - counter_electrode + - electrolyte_composition + - electrolyte_concentration + - has_atmosphere + - has_temperature + class_uri: coremeta4cat:ElectrochemistryMixin + Characterization: + name: Characterization + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Characterization + description: "A DataGeneratingActivity in which a catalyst sample or catalytic\ + \ material\nis characterized using an analytical technique.\n\nThe catalyst\ + \ sample being characterized is linked via evaluated_entity.\nThe analytical\ + \ protocol is linked via realized_plan using a\nCharacterizationTechnique instance.\ + \ The instrument used is linked via\ncarried_out_by as a Device.\n\nThe specific\ + \ technique type is expressed via rdf_type using an ontology\nterm (e.g. CHMO:0000158\ + \ for powder XRD, CHMO:0000404 for XPS),\nfollowing DCAT-AP-PLUS Pattern 3 \u2014\ + \ exactly as NMRSpectroscopy uses\nrdf_type: CHMO:0000613." + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - coremeta4cat:FluidizedBedReactor - is_a: ChemicalReactor + - OBI:0000070 + is_a: CatalysisDataGeneratingActivity slots: - id - - title - - description - - has_qualitative_attribute - - has_quantitative_attribute - - AgenticEntity_part_of + - Activity_title + - Activity_description + - Activity_other_identifier + - Activity_has_part + - Activity_had_input_entity + - Activity_had_output_entity + - Activity_had_input_activity + - Activity_has_qualitative_attribute + - Activity_has_quantitative_attribute + - Activity_part_of - ClassifierMixin_type - - rdf_type - - Device_has_part - - Device_other_identifier - - gas_distributor_type - - bed_expansion_height - - bubble_size_distribution - class_uri: coremeta4cat:FluidizedBedReactor - CatalystType: - name: CatalystType - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CatalystType - description: 'Type of catalyst used (e.g. heterogeneous, homogeneous, biocatalyst). + - evaluated_activity + - occurred_in + - activity_designator + - sample_state + - sample_description + - sample_preparation + - has_sample_pretreatment + - detector_type + - Characterization_carried_out_by + - Characterization_evaluated_entity + - Characterization_realized_plan + - Characterization_rdf_type + slot_usage: + carried_out_by: + name: carried_out_by + description: 'The analytical instrument used to carry out this characterization. - For heterogeneous catalysts, use voc4cat terms where available.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ - mappings: - - VOC4CAT:0007014 - is_a: QualitativeAttribute - slots: - - title - - description - - QualitativeAttribute_value - - ClassifierMixin_type - - rdf_type - class_uri: VOC4CAT:0007014 - HeterogeneousCatalyst: - name: HeterogeneousCatalyst - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/HeterogeneousCatalyst - description: A substance that increases the rate of a chemical reaction that is - in a different phase than the reagents. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + Provide a Device instance (e.g. XRD diffractometer, TEM, NMR spectrometer).' + range: Device + required: true + multivalued: true + inlined_as_list: true + evaluated_entity: + name: evaluated_entity + description: The catalyst sample or material being characterized. + range: EvaluatedEntity + recommended: true + multivalued: true + inlined_as_list: true + realized_plan: + name: realized_plan + description: The CharacterizationTechnique (protocol) realized in this Characterization. + range: CharacterizationTechnique + required: true + inlined: true + rdf_type: + name: rdf_type + description: 'The type of characterization technique as an ontology term, + e.g. + + CHMO:0000158 (powder XRD), CHMO:0000404 (XPS), VOC4CAT:0000075 (SEM).' + recommended: true + class_uri: OBI:0000070 + CharacterizationTechnique: + name: CharacterizationTechnique + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CharacterizationTechnique + description: 'An abstract Plan describing the analytical protocol used to characterize + + a catalyst. Concrete subclasses specify technique-specific parameters. + + Linked from Characterization via realized_plan.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0007003 - is_a: CatalystType + - OBI:0000272 + is_a: CatalysisPlan + abstract: true slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0007003 - HomogeneousCatalyst: - name: HomogeneousCatalyst - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/HomogeneousCatalyst - description: A substance that increses the rate of a chemical reaction that is - in the same phase as the reagents. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + class_uri: OBI:0000272 + PowderXRD: + name: PowderXRD + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PowderXRD + description: Powder X-ray diffraction for phase identification and structural + analysis. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - coremeta4cat:HomogeneousCatalyst - is_a: CatalystType + - CHMO:0000158 + is_a: CharacterizationTechnique + mixins: + - XRaySourceMixin slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: coremeta4cat:HomogeneousCatalyst - BioCatalyst: - name: BioCatalyst - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/BioCatalyst - description: An enzyme or cell that catalyzes a biocatalytic reaction. Subclass - of Catalyst (AgenticEntity). The physical form in which it is applied is described - by an associated BiocatalystPreparation. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - has_two_theta_range + - step_size + - has_operation_mode + - has_atmosphere + - has_temperature + - sample_spinning_speed + - has_experiment_duration + - xray_source + - monochromator + class_uri: CHMO:0000158 + SingleCrystalXRD: + name: SingleCrystalXRD + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/SingleCrystalXRD + description: Single crystal X-ray diffraction for structure determination. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - coremeta4cat:BioCatalyst - is_a: CatalystType + - CHMO:0000852 + is_a: CharacterizationTechnique + mixins: + - XRaySourceMixin slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: coremeta4cat:BioCatalyst - ElectroCatalyst: - name: ElectroCatalyst - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ElectroCatalyst - description: The characteristics of a material or substance that determine how - it interacts or responds to a magnetic field. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - has_temperature + - xray_source + - monochromator + class_uri: CHMO:0000852 + XRayAbsorptionSpectroscopy: + name: XRayAbsorptionSpectroscopy + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/XRayAbsorptionSpectroscopy + description: X-ray absorption spectroscopy (XAS/XANES/EXAFS) for electronic and + local structure analysis. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0000255 - is_a: CatalystType + - VOC4CAT:0000286 + is_a: CharacterizationTechnique + mixins: + - XRaySourceMixin + - EnergyRangeMixin slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0000255 - ThinFilmCatalyst: - name: ThinFilmCatalyst - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ThinFilmCatalyst - description: A catalyst introduced to the reaction chamber in the form of a thin - film. To form a thin film, a (powdered) catalyst is deposited on a substrate - (e.g., glass or metal) using an appropriate deposition technique. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - has_operation_mode + - element_analyzed + - absorption_edge + - energy_resolution + - has_temperature + - beamline_source + - noise_of_measurement + - number_of_cycles + - xray_source + - monochromator + - has_energy_range + class_uri: VOC4CAT:0000286 + XPS: + name: XPS + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/XPS + description: X-ray photoelectron spectroscopy for surface elemental and chemical + state analysis. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0000019 - is_a: CatalystType + - CHMO:0000404 + is_a: CharacterizationTechnique + mixins: + - XRaySourceMixin + - EnergyRangeMixin slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0000019 - BulkCatalyst: - name: BulkCatalyst - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/BulkCatalyst - description: A catalyst that consists mainly of the active ingredient or phase. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - total_acquisition_time + - number_of_scans + - step_size + - pass_energy + - spot_size + - lense_mode + - charge_compensation + - has_atmosphere + - xray_source + - monochromator + - has_energy_range + class_uri: CHMO:0000404 + EDX: + name: EDX + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/EDX + description: Energy-dispersive X-ray spectroscopy for elemental mapping and quantification. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0007015 - is_a: CatalystType + - CHMO:0000309 + is_a: CharacterizationTechnique slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0007015 - PowerderedCatalyst: - name: PowerderedCatalyst - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PowerderedCatalyst - description: A catalyst introduced to the reaction chamber in the form of a powder. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - primary_energy + - counting_time + - resolution + - calibration_method + class_uri: CHMO:0000309 + InfraredSpectroscopy: + name: InfraredSpectroscopy + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/InfraredSpectroscopy + description: Infrared spectroscopy (FTIR/ATR) for functional group and surface + species identification. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0000017 - is_a: CatalystType + - CHMO:0000630 + is_a: CharacterizationTechnique slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0000017 - DepositedSampleCatalyst: - name: DepositedSampleCatalyst - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/DepositedSampleCatalyst - description: A thin film of the catalyst deposited on an appropriate for the application - substrate. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - has_operation_mode + - has_wavenumber_range + - step_size + - has_temperature + - background_correction + - number_of_scans + - has_atmosphere + class_uri: CHMO:0000630 + DRIFTS: + name: DRIFTS + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/DRIFTS + description: 'Diffuse reflectance infrared Fourier transform spectroscopy for + in-situ + + surface species identification under reactive gas conditions.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0000038 - is_a: CatalystType + - CHMO:0000645 + is_a: CharacterizationTechnique slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0000038 - PhotoCatalyst: - name: PhotoCatalyst - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PhotoCatalyst - description: A material that absorbs photons (light) of appropriate energy and - initiates or accelerates a photochemical reaction, while it regenerates itself - after each reaction cycle. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - adsorption_gas + - has_atmosphere + - has_flow_rate + - has_wavenumber_range + - diluting_reference + - ratio_reference_sample + - step_size + - resolution + - background_correction_method + - has_temperature + - number_of_scans + class_uri: CHMO:0000645 + RamanSpectroscopy: + name: RamanSpectroscopy + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/RamanSpectroscopy + description: Raman spectroscopy for vibrational and structural characterization. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0000002 - is_a: CatalystType + - VOC4CAT:0000069 + is_a: CharacterizationTechnique slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0000002 - SupportedCatalsyt: - name: SupportedCatalsyt - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/SupportedCatalsyt - description: A catalyst where the active material is usually the minority phase - and fixed on a high surface area, relatively inert solid. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - excitation_laser_wavelength + - excitation_laser_power + - magnification_setting + - has_integration_time + - number_of_scans + - has_atmosphere + - has_temperature + - filter_or_grating + class_uri: VOC4CAT:0000069 + NMRSpectroscopy: + name: NMRSpectroscopy + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/NMRSpectroscopy + description: 'Nuclear magnetic resonance spectroscopy for structure elucidation. + + Note: for detailed liquid-state NMR minimum information, the dedicated + + nmr_dcat_ap profile (MARGARITAS) should be used in combination with + + this subprofile.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0007034 - is_a: CatalystType + - VOC4CAT:0000073 + is_a: CharacterizationTechnique slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0007034 - ReactorPerformanceMeasures: - name: ReactorPerformanceMeasures - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ReactorPerformanceMeasures - description: A measure to quantify how fast and selective a chemical converison - occurs in a reactor. A chemical conversion may include multiples reactions. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - nucleus + - solvent + - irradiation_frequency + - has_temperature + - nmr_pulse_sequence + - nmr_sample_tube + - number_of_scans + - has_atmosphere + class_uri: VOC4CAT:0000073 + TransmissionElectronMicroscopy: + name: TransmissionElectronMicroscopy + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/TransmissionElectronMicroscopy + description: TEM for atomic-resolution imaging and diffraction of catalyst particles. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:005001 - is_a: QuantitativeAttribute + - VOC4CAT:0000078 + is_a: CharacterizationTechnique + mixins: + - ElectronMicroscopyMixin slots: - title - description - - QuantitativeAttribute_value - - quantitativeAttribute__has_quantity_type - - quantitativeAttribute__unit - ClassifierMixin_type - rdf_type - - has_yield - - has_conversion - - has_space_time_yield - - has_selectivity - class_uri: VOC4CAT:005001 - Conversion: - name: Conversion - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Conversion - description: A dimensionless physical quantity describing the fraction of a reactant - that reacts in a chemical conversion. If a reactant is consumed completely its - conversion is 1 (or 100 %). - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - has_operation_mode + - gun_type + - acceleration_voltage + - magnification_setting + class_uri: VOC4CAT:0000078 + ScanningElectronMicroscopy: + name: ScanningElectronMicroscopy + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ScanningElectronMicroscopy + description: SEM for surface morphology and particle size/shape imaging. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0005004 - is_a: QuantitativeAttribute + - VOC4CAT:0000075 + is_a: CharacterizationTechnique + mixins: + - ElectronMicroscopyMixin slots: - title - description - - QuantitativeAttribute_value - - quantitativeAttribute__has_quantity_type - - quantitativeAttribute__unit - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0005004 - SpaceTimeYield: - name: SpaceTimeYield - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/SpaceTimeYield - description: 'A physical quantity that describes the amount of product produced - per unit of time and unit of producing entity. The producing entity is for example - the volume of a chemical reactor or in catalysis the mass or volume or moles - of catalyst. Example unit: kg{product} / (hour * cubicmeter{catalyst})' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - image_resolution + - field_emitter + - gun_type + - acceleration_voltage + - magnification_setting + class_uri: VOC4CAT:0000075 + Thermogravimetry: + name: Thermogravimetry + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Thermogravimetry + description: Thermogravimetric analysis (TGA/DTG) for mass loss, decomposition, + and oxidation state characterization. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0005006 - is_a: QuantitativeAttribute + - CHMO:0000690 + is_a: CharacterizationTechnique + mixins: + - TemperatureProgramMixin slots: - title - description - - QuantitativeAttribute_value - - quantitativeAttribute__has_quantity_type - - quantitativeAttribute__unit - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0005006 - Selectivity: - name: Selectivity - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Selectivity - description: A dimensionless physical quantity describing how effective a reactant - is converted to the desired product in a chemical conversion. It is calculated - as the ratio between the amount of the desired product and the amount of the - desired product that could have been formed if all reactants were converted - to the desired product. The selectivity is 1 (or 100 %) if no other than the - desired product is formed. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - has_operation_mode + - has_atmosphere + - initial_temperature + - final_temperature + - has_sample_mass + - has_temperature_range + - has_heating_rate + - has_heating_procedure + class_uri: CHMO:0000690 + TPR: + name: TPR + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/TPR + description: Temperature-programmed reduction for reducibility and metal-support + interaction characterization. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0000125 - is_a: QuantitativeAttribute + - CHMO:0002908 + is_a: CharacterizationTechnique + mixins: + - TemperatureProgramMixin slots: - title - description - - QuantitativeAttribute_value - - quantitativeAttribute__has_quantity_type - - quantitativeAttribute__unit - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0000125 - ReactionType: - name: ReactionType - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ReactionType - description: A group of chemical reactions with common conditions or reactants, - e.g. Oxidation, Hydrogenation, Reduction, Cracking. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - reducing_gas_composition + - has_temperature_range + - has_heating_rate + - has_heating_procedure + class_uri: CHMO:0002908 + TPO: + name: TPO + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/TPO + description: Temperature-programmed oxidation for coke quantification and reoxidation + characterization. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0007010 - is_a: QualitativeAttribute + - CHMO:0002907 + is_a: CharacterizationTechnique + mixins: + - TemperatureProgramMixin slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0007010 - Hydrogenation: - name: Hydrogenation - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Hydrogenation - description: A chemical reaction of molecular hydrogen (H2) and another chemical - species, typically facilitated by a catalyst. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - oxidizing_gas_composition + - has_temperature_range + - has_heating_rate + - has_heating_procedure + class_uri: CHMO:0002907 + BET: + name: BET + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/BET + description: Brunauer-Emmett-Teller analysis for specific surface area and pore + size distribution. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0000260 - is_a: ReactionType + - ENM:0000064 + is_a: CharacterizationTechnique slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0000260 - Oxidation: - name: Oxidation - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Oxidation - description: The loss of electrons or an increase in the oxidation state of a - species. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - adsorbate_gas + - degassing_temperature + - measurement_temperature + - pore_size_distribution_method + - has_sample_mass + class_uri: ENM:0000064 + ICPAES: + name: ICPAES + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ICPAES + description: Inductively coupled plasma atomic emission spectroscopy for bulk + elemental composition. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0000097 - is_a: ReactionType + - CHMO:0000267 + is_a: CharacterizationTechnique slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0000097 - Dehydrogenation: - name: Dehydrogenation - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Dehydrogenation - description: A chemical reaction that involves the removal of two or more hydrogen - atoms from a molecule. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - element_analyzed + - calibration_method + - detection_limit + - matrix_effect_correction + class_uri: CHMO:0000267 + ElementalAnalysis: + name: ElementalAnalysis + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ElementalAnalysis + description: Combustion elemental analysis (CHNS/O) for carbon, hydrogen, nitrogen, + sulfur content. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0000297 - is_a: ReactionType + - CHMO:0001075 + is_a: CharacterizationTechnique slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0000297 - CarbonCouplingReaction: - name: CarbonCouplingReaction - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CarbonCouplingReaction - description: A chemical reaction where a carbon-carbon bond is formed from two - carbon-containing fragments. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - elements_analyzed + - combustion_temperature + - carrier_gas + class_uri: CHMO:0001075 + UVVisSpectroscopy: + name: UVVisSpectroscopy + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/UVVisSpectroscopy + description: UV-Vis spectroscopy for electronic transitions, band gap, and concentration + determination. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0000223 - is_a: ReactionType + - VOC4CAT:0000079 + is_a: CharacterizationTechnique slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0000223 - Hydrodeoxygenation: - name: Hydrodeoxygenation - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Hydrodeoxygenation - description: A catalytic process in which oxygen is removed from oxygenated organic - compounds using hydrogen. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - wavelength_range + - path_length + - solvent + - has_concentration + class_uri: VOC4CAT:0000079 + PhotoluminescenceSpectroscopy: + name: PhotoluminescenceSpectroscopy + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PhotoluminescenceSpectroscopy + description: Photoluminescence spectroscopy for defect and charge carrier characterization. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0000226 - is_a: ReactionType + - CHMO:0000773 + is_a: CharacterizationTechnique + mixins: + - PhotoluminescenceMixin slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0000226 - OxygenEvolutionReaction: - name: OxygenEvolutionReaction - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/OxygenEvolutionReaction - description: A chemical reaction of generating molecular oxygen in electrochemistry. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - emission_range + - slit_width + - step_size + - has_integration_time + - excitation_wavelength + - emission_wavelength + - optical_filter + - has_temperature + class_uri: CHMO:0000773 + PhotoluminescenceLifetime: + name: PhotoluminescenceLifetime + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PhotoluminescenceLifetime + description: Time-resolved photoluminescence for charge carrier lifetime and recombination + dynamics. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0000236 - is_a: ReactionType + - CHMO:0001917 + is_a: CharacterizationTechnique + mixins: + - PhotoluminescenceMixin slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0000236 - Carbonylation: - name: Carbonylation - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Carbonylation - description: A chemical reaction in which a carbonyl group (C=O) is introduced - into a molecule, typically through the addition of carbon monoxide (CO) to a - substrate. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ - mappings: - - VOC4CAT:0000247 - class_uri: VOC4CAT:0000247 - Hydroxylation: - name: Hydroxylation - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Hydroxylation - description: The addition of a hydroxyl group (-OH) to a molecule, typically by - replacing a hydrogen atom. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - lifetime_fitting_model + - number_of_shots + - excitation_wavelength + - emission_wavelength + - optical_filter + - has_temperature + class_uri: CHMO:0001917 + CyclicVoltammetry: + name: CyclicVoltammetry + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CyclicVoltammetry + description: Cyclic voltammetry for electrochemical activity, redox potential, + and capacitance characterization. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0000258 - is_a: ReactionType + - CHMO:0000025 + is_a: CharacterizationTechnique + mixins: + - ElectrochemistryMixin slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0000258 - FischerTropschSynthesis: - name: FischerTropschSynthesis - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/FischerTropschSynthesis - description: "A catalytic chemical reaction in which a mixture of carbon monoxide\ - \ (CO) and hydrogen (H2), is converted via a chain-growth mechanism into long-chain\ - \ hydrocarbons (e.g., alkanes, alkenes or alcohols)\u2014typically using iron\ - \ or cobalt catalysts under moderate to high pressures and temperatures." - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - scan_rate + - scan_potential_range + - step_size_potential + - number_of_cycles + - reference_electrode + - working_electrode + - counter_electrode + - electrolyte_composition + - electrolyte_concentration + - has_atmosphere + - has_temperature + class_uri: CHMO:0000025 + ConductivityMeasurement: + name: ConductivityMeasurement + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ConductivityMeasurement + description: Electrical conductivity measurement for ionic and electronic transport + characterization. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0000280 - is_a: ReactionType + - CHMO:0000010 + is_a: CharacterizationTechnique + mixins: + - ElectrochemistryMixin slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0000280 - CarbonDioxideHydrogenation: - name: CarbonDioxideHydrogenation - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CarbonDioxideHydrogenation - description: The reaction of carbon dioxide (CO2) with molecular hydrogen (H2) - to produce value-added hydrocarbons or alcohols. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - electrode_configuration + - ac_frequency + - ac_dc_mode + - sample_geometry + - reference_electrode + - working_electrode + - counter_electrode + - electrolyte_composition + - electrolyte_concentration + - has_atmosphere + - has_temperature + class_uri: CHMO:0000010 + DynamicLightScattering: + name: DynamicLightScattering + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/DynamicLightScattering + description: Dynamic light scattering for hydrodynamic particle size distribution + in suspension. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0000259 - is_a: Hydrogenation + - CHMO:0000167 + is_a: CharacterizationTechnique slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0000259 - SelectiveOxidation: - name: SelectiveOxidation - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/SelectiveOxidation - description: The targeted oxidation of a specific bond or functional group in - a molecule leaving other sites unaffected, often directed by a catalyst. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - solvent + - has_concentration + - light_wavelength + - scattering_angle + - refractive_index + - has_temperature + - dispersant + - measurement_duration + class_uri: CHMO:0000167 + ElectroSprayIonizationMassSpectrometry: + name: ElectroSprayIonizationMassSpectrometry + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ElectroSprayIonizationMassSpectrometry + description: Electrospray ionisation mass spectrometry for molecular mass and + identity determination. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0000261 - is_a: Oxidation + - CHMO:0000482 + is_a: CharacterizationTechnique + mixins: + - MassRangeMixin slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0000261 - CarbonMonoxideOxidation: - name: CarbonMonoxideOxidation - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CarbonMonoxideOxidation - description: The reaction in which carbon monoxide (CO) is converted to carbon - dioxide (CO2) through interaction with an oxidizing agent, typically oxygen - (O2). - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - has_operation_mode + - spray_voltage + - capillary_temperature + - solvent_composition + - has_flow_rate + - carrier_gas + - has_concentration + - has_mz_range + class_uri: CHMO:0000482 + GCMS: + name: GCMS + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/GCMS + description: Gas chromatography-mass spectrometry for volatile compound identification + and quantification. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0000289 - is_a: Oxidation + - CHMO:0000497 + is_a: CharacterizationTechnique + mixins: + - ChromatographyMixin + - MassRangeMixin slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0000289 - LiquidPhaseAnalysis: - name: LiquidPhaseAnalysis - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/LiquidPhaseAnalysis - description: Analysis of the liquid sample from a catalytic test. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - carrier_gas + - carrier_gas_purity + - inlet_temperature + - oven_temperature_range + - heating_ramp + - has_heating_procedure + - acquisition_mode + - solvent_delay + - trace_ion_detection + - split_ratio + - column_type + - eluent + - has_flow_rate + - has_injection_volume + - external_standard + - internal_standard + - has_mz_range + class_uri: CHMO:0000497 + SizeExclusionChromatography: + name: SizeExclusionChromatography + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/SizeExclusionChromatography + description: Size exclusion chromatography for molecular weight distribution determination. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0007813 - is_a: ProductIdentificationMethod + - AFP:0000843 + is_a: CharacterizationTechnique + mixins: + - ChromatographyMixin slots: - title - description - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0007813 - GasPhaseAnalysis: - name: GasPhaseAnalysis - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/GasPhaseAnalysis - description: Analysis of the liquid sample from a catalytic test. - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + - id + - has_temperature + - calibration_standard + - column_type + - eluent + - has_flow_rate + - has_injection_volume + - external_standard + - internal_standard + class_uri: AFP:0000843 + HighPerformanceLiquidChromatographyMassSpectrometry: + name: HighPerformanceLiquidChromatographyMassSpectrometry + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/HighPerformanceLiquidChromatographyMassSpectrometry + description: High-performance liquid chromatography-mass spectrometry for compound + identification and quantification. + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/characterization/ mappings: - - VOC4CAT:0007814 - is_a: ProductIdentificationMethod + - CHMO:0000796 + is_a: CharacterizationTechnique + mixins: + - ChromatographyMixin slots: - title - description - ClassifierMixin_type - rdf_type - class_uri: VOC4CAT:0007814 - MaterialDescriptorMixin: - name: MaterialDescriptorMixin - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/MaterialDescriptorMixin - description: 'Mixin providing material identity slots shared by CalculatedProperty - - subclasses that target a specific material composition and crystal - - structure (DielectricTensors, PhononDispersion, EquationsOfState, - - AqueousStability, GrainBoundaries, ElectronicStructure, Ferroelectrics, - - BandGap).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mixin: true - slots: - - material_composition - - crystal_structure - class_uri: coremeta4cat:MaterialDescriptorMixin - DFTSettingsMixin: - name: DFTSettingsMixin - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/DFTSettingsMixin - description: 'Mixin providing plane-wave DFT numerical settings shared by CalculatedProperty - - subclasses that are computed with periodic DFT (DielectricTensors, - - EquationsOfState, ElectronicStructure, BandGap).' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mixin: true - slots: - - energy_cutoff - - convergence_criteria - - k_point_mesh - class_uri: coremeta4cat:DFTSettingsMixin - Simulation: - name: Simulation - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Simulation - description: 'A DataGeneratingActivity in which a catalyst, catalytic material, - or - - catalytic process is modelled computationally. - - - The simulation software is linked via carried_out_by as a Software agent. - - The simulation method (protocol) is linked via realized_plan using a - - SimulationMethod instance. The catalyst model or reaction being simulated - - is linked via evaluated_entity or evaluated_activity. - - - The specific simulation type is expressed via rdf_type (e.g. coremeta4cat:DFT, - - NCIT:C18097 for molecular dynamics), following DCAT-AP-PLUS Pattern 3.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - NCIT:C48936 - is_a: DataGeneratingActivity + - id + - gradient_program + - ionization_mode + - has_temperature + - column_type + - eluent + - has_flow_rate + - has_injection_volume + - external_standard + - internal_standard + class_uri: CHMO:0000796 + CatalyticReaction: + name: CatalyticReaction + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CatalyticReaction + description: "A ChemicalReaction (chemdcat-ap) specialization representing the\n\ + catalytic reaction being studied. Inherits the generic reaction slots\n(starting\ + \ materials, reactants, products, catalyst, solvent, reactor,\ntemperature,\ + \ pressure, yield, reaction steps) from ChemicalReaction and\nadds catalysis-specific\ + \ operating-condition slots.\n\nReaction is NOT a DataGeneratingActivity \u2014\ + \ it is the catalytic process\nbeing observed, not the process that generates\ + \ the dataset. A CatalysisDataset\nis linked to the Reaction it is about via\ + \ is_about_activity.\n\nFor operando experiments (e.g. in-situ XRD during a\ + \ reaction), the dataset\ncarries both:\n was_generated_by: Characterization\ + \ (the measurement producing data)\n is_about_activity: Reaction (the\ + \ catalytic process being monitored)\n\nThe reactor is linked via the inherited\ + \ used_reactor slot (is_a:\ncarried_out_by), narrowed here to require a ChemicalReactor\ + \ instance\nrather than touching the generic carried_out_by relation directly.\n\ + Reactants are linked via the inherited used_reactant slot (range:\nReagent)\ + \ -- CatalyticReaction does not declare its own reactant slot.\nThe type of\ + \ catalytic reaction (e.g. ammonia synthesis, CO oxidation)\nis expressed via\ + \ rdf_type using a voc4cat or ChemO term." + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ + is_a: ChemicalReaction slots: - id - Activity_title - Activity_description - - Activity_other_identifier - Activity_has_part - Activity_had_input_entity - Activity_had_output_entity - Activity_had_input_activity + - Activity_carried_out_by - Activity_has_qualitative_attribute - Activity_has_quantitative_attribute - Activity_part_of - ClassifierMixin_type - - evaluated_activity - - occurred_in - - software_package - - calculated_property - - Simulation_rdf_type - - Simulation_realized_plan - - Simulation_carried_out_by - - Simulation_evaluated_entity + - EvaluatedActivity_other_identifier + - used_starting_material + - used_reactant + - generated_product + - used_catalyst + - used_solvent + - has_duration + - ChemicalReaction_has_temperature + - ChemicalReaction_has_pressure + - has_yield + - ChemicalReaction_related_resource + - catalyst_quantity + - catalyst_type + - catalyst_form + - reaction_name + - reactor_temperature_range + - has_atmosphere + - experiment_pressure + - feed_composition_range + - has_experiment_duration + - CatalyticReaction_product_identification_method + - CatalyticReaction_rdf_type + - CatalyticReaction_used_reactor + - CatalyticReaction_has_reaction_step slot_usage: rdf_type: name: rdf_type - description: 'The type of simulation method as an ontology term (e.g. coremeta4cat:DFT, + description: 'The type of catalytic reaction as an ontology term (e.g. VOC4CAT:0007010 - NCIT:C18097 for MD, coremeta4cat:Microkinetics). This is the primary + for a specific reaction type, or a ChemO/RXNO term). - machine-actionable classification of the simulation type.' + + This is the sole reaction-type classification mechanism (DCAT-AP-PLUS + + Pattern 3) -- deliberately not duplicated by a dedicated has_reaction_type + + slot + ReactionType class hierarchy (cf. PR #118, since superseded here). + + Kept `recommended` rather than `required` for the same reason as + + catalyst_type below: see nfdi4cat/CoreMeta4Cat#117 for the cardinality + + discussion and nfdi4cat/CoreMeta4Cat#116 for the classification-mechanism + + discussion.' recommended: true - realized_plan: - name: realized_plan - description: The SimulationMethod (protocol) realized in this Simulation. - range: SimulationMethod + used_reactor: + name: used_reactor + description: 'The reactor in which the Reaction takes place. + + Must be a ChemicalReactor instance (a Reactor subclass specific to + + catalytic reaction vessels, e.g. FixedBedReactor, CSTR, Autoclave).' + range: ChemicalReactor required: true - carried_out_by: - name: carried_out_by - description: The simulation software used, provided as a Software agent instance. - range: AgenticEntity - recommended: true multivalued: true inlined_as_list: true - evaluated_entity: - name: evaluated_entity - description: The catalyst model, surface slab, or molecule being simulated. - range: EvaluatedEntity - recommended: true + product_identification_method: + name: product_identification_method + description: 'The analytical method used to identify and/or quantify reaction + products. + + Should reference a CharacterizationTechnique instance (e.g. GCMS, HPLC_MS). + + The abstract stub ProductIdentificationMethod is retained for backward compatibility.' + range: ProductIdentificationMethod + required: true multivalued: true inlined_as_list: true - class_uri: NCIT:C48936 - SimulationMethod: - name: SimulationMethod - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/SimulationMethod - description: 'Abstract Plan describing the computational method (protocol) used - in a + has_reaction_step: + name: has_reaction_step + description: 'A step (part) of this CatalyticReaction that is itself a CatalyticReaction. - Simulation. Concrete subclasses carry method-specific parameter slots. + Narrowed from the inherited ChemicalReaction range so nested reaction - Linked from Simulation via realized_plan.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + steps keep their catalysis-specific fields (catalyst_type, used_reactor, + + product_identification_method, ...) when loaded.' + range: CatalyticReaction + class_uri: coremeta4cat:CatalyticReaction + ProductIdentificationMethod: + name: ProductIdentificationMethod + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ProductIdentificationMethod + description: 'Abstract Plan representing the method used to identify and quantify + reaction + + products. In practice, users should reference a concrete CharacterizationTechnique + + subclass from coremeta4cat_characterization_ap (e.g. GCMS, HPLC_MS, NMRSpectroscopy). + + + This abstract class is retained for backward compatibility with the original + + CoreMeta4Cat monolith. It is a subclass of CatalysisPlan (which is itself a + Plan, + + prov:Plan / OBI:0000272) so that it can participate in the realized_plan slot, + + and so it (and every other CoreMeta4Cat protocol/technique class) can carry + a + + persistent id.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - OBI:0000272 - is_a: Plan - abstract: true + is_a: CatalysisPlan slots: - title - description - ClassifierMixin_type - rdf_type + - id class_uri: OBI:0000272 - DFT: - name: DFT - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/DFT - description: "Density functional theory \u2014 a quantum mechanical method for\ - \ calculating\nthe electronic structure of atoms, molecules, and periodic solids.\n\ - The most widely used ab initio method in computational catalysis." - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:DFT - is_a: SimulationMethod - slots: - - title - - description - - ClassifierMixin_type - - rdf_type - - exchange_correlation_functional - - energy_cutoff - - convergence_criteria - - dft_u_parameters - - spin_polarization - - total_energy_per_atom - class_uri: coremeta4cat:DFT - MolecularDynamics: - name: MolecularDynamics - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/MolecularDynamics - description: "Molecular dynamics simulation \u2014 a method for computing the\ - \ time evolution\nof a system of interacting particles by integrating the equations\ - \ of motion.\nUsed to study diffusion, reaction kinetics, and thermal properties." - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + ChemicalReactor: + name: ChemicalReactor + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ChemicalReactor + description: "Abstract Reactor (chemdcat-ap) subclass representing a catalytic\ + \ reactor\nvessel.\n\nReactor is more specific than the general Device (AgenticEntity):\ + \ it restricts\nthe used_reactor relation (is_a: carried_out_by) on Reaction\ + \ to dedicated\nreactor equipment. This semantic distinction separates analytical\n\ + instruments (Device) from reaction vessels (Reactor). ChemicalReactor\nfurther\ + \ specializes chemdcat-ap's generic Reactor for catalysis use cases.\n\nConcrete\ + \ subclasses (FixedBedReactor, CSTR, PlugFlowReactor, \u2026) specify\nreactor\ + \ geometry and operating mode.\nLinked from Reaction via used_reactor (restricted\ + \ to range: ChemicalReactor)." + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - NCIT:C18097 - is_a: SimulationMethod + - VOC4CAT:0007018 + is_a: Reactor + abstract: true slots: + - id - title - description + - has_qualitative_attribute + - has_quantitative_attribute + - AgenticEntity_part_of - ClassifierMixin_type - rdf_type - - force_field - - simulation_timestep - - simulation_time - - ensemble_type - - number_of_atoms - class_uri: NCIT:C18097 - Microkinetics: - name: Microkinetics - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Microkinetics - description: "Microkinetic modelling \u2014 a mean-field kinetic approach that\ - \ integrates\nelementary reaction steps and their rate constants to predict\ - \ catalytic\nactivity and selectivity under reaction conditions." - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + - Device_has_part + - Device_other_identifier + - alternative_label + - has_physical_state + - has_temperature + - has_mass + - has_volume + - has_density + - has_pressure + class_uri: VOC4CAT:0007018 + ElectrochemicalReactor: + name: ElectrochemicalReactor + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ElectrochemicalReactor + description: 'Electrochemical reactor used in electrocatalytic experiments, including + + H-cells, flow cells, and membrane electrode assemblies.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:Microkinetics - is_a: SimulationMethod + - VOC4CAT:0000193 + is_a: ChemicalReactor slots: + - id - title - description + - has_qualitative_attribute + - has_quantitative_attribute + - AgenticEntity_part_of - ClassifierMixin_type - rdf_type - - rate_constants - - solver_type + - Device_has_part + - Device_other_identifier + - alternative_label + - has_physical_state - has_temperature + - has_mass + - has_volume + - has_density - has_pressure - - surface_coverage - - activation_energy - class_uri: coremeta4cat:Microkinetics - MonteCarlo: - name: MonteCarlo - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/MonteCarlo - description: "Monte Carlo simulation \u2014 a stochastic method that samples configuration\n\ - space using random moves accepted or rejected according to a statistical\ncriterion\ - \ (e.g. Metropolis). Used for adsorption isotherms, phase diagrams,\nand lattice-based\ - \ kinetics." - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + - has_cathode + - has_anode + - cell_operating_mode + - has_active_area + - faradaic_current + class_uri: VOC4CAT:0000193 + CSTR: + name: CSTR + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CSTR + description: "Continuous stirred tank reactor (CSTR) \u2014 a well-mixed, continuous-flow\n\ + reactor operating at steady state." + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:MonteCarlo - is_a: SimulationMethod + - VOC4CAT:0007019 + is_a: ChemicalReactor slots: + - id - title - description + - has_qualitative_attribute + - has_quantitative_attribute + - AgenticEntity_part_of - ClassifierMixin_type - rdf_type - - interaction_potential - - number_of_steps + - Device_has_part + - Device_other_identifier + - alternative_label + - has_physical_state - has_temperature - - lattice_size_type - - acceptance_criteria - - equilibration_steps - - sampling_interval - class_uri: coremeta4cat:MonteCarlo - CalculatedProperty: - name: CalculatedProperty - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CalculatedProperty - description: 'Abstract QualitativeAttribute representing a property computed by - a - - Simulation. Concrete subclasses carry the property-specific output - - values and the computational settings used to produce them. - - Linked from Simulation via the calculated_property slot.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + - has_mass + - has_volume + - has_density + - has_pressure + - stirring_rate + - residence_time + - reactor_working_volume + - reactor_diameter + - stirrer_diameter + - reactor_stirrer_type + class_uri: VOC4CAT:0007019 + PlugFlowReactor: + name: PlugFlowReactor + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PlugFlowReactor + description: "Plug flow reactor (PFR) \u2014 a tubular reactor in which reactant\ + \ composition\nvaries along the axis with no axial mixing." + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - IAO:0000109 - is_a: QualitativeAttribute - abstract: true + - VOC4CAT:0007102 + is_a: ChemicalReactor slots: + - id - title - description - - QualitativeAttribute_value + - has_qualitative_attribute + - has_quantitative_attribute + - AgenticEntity_part_of - ClassifierMixin_type - rdf_type - class_uri: IAO:0000109 - ThermodynamicStability: - name: ThermodynamicStability - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ThermodynamicStability - description: 'Thermodynamic stability of a material or phase, characterised by - formation - - energy, convex hull distance, and competing phases. Used to screen catalyst - - stability and predict synthesis feasibility.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + - Device_has_part + - Device_other_identifier + - alternative_label + - has_physical_state + - has_temperature + - has_mass + - has_volume + - has_density + - has_pressure + - tube_length + - tube_internal_diameter + - flow_direction + - number_of_tubes + - tube_material + - catalyst_particle_size + class_uri: VOC4CAT:0007102 + Autoclave: + name: Autoclave + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Autoclave + description: "Autoclave reactor \u2014 a sealed pressure vessel for batch reactions\ + \ at\nelevated temperature and/or pressure." + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:ThermodynamicStability - is_a: CalculatedProperty + - NCIT:C93052 + is_a: ChemicalReactor slots: + - id - title - description - - QualitativeAttribute_value + - has_qualitative_attribute + - has_quantitative_attribute + - AgenticEntity_part_of - ClassifierMixin_type - rdf_type - - formation_energy - - reference_energies - - energy_above_hull - - phase_diagram_type - - competing_phases - class_uri: coremeta4cat:ThermodynamicStability - Piezoelectricity: - name: Piezoelectricity - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Piezoelectricity - description: 'Piezoelectric response of a non-centrosymmetric material, described - by the - - piezoelectric tensor. Relevant for piezocatalysis applications.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + - Device_has_part + - Device_other_identifier + - alternative_label + - has_physical_state + - has_temperature + - has_mass + - has_volume + - has_density + - has_pressure + - agitation_type + - reaction_chamber_material + - vessel_internal_volume + - vessel_material + - batch_duration + class_uri: NCIT:C93052 + SlurryReactor: + name: SlurryReactor + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/SlurryReactor + description: "Slurry reactor \u2014 a three-phase reactor in which catalyst particles\ + \ are\nsuspended in a liquid phase through which gas is bubbled." + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:Piezoelectricity - is_a: CalculatedProperty + - coremeta4cat:SlurryReactor + is_a: ChemicalReactor slots: + - id - title - description - - QualitativeAttribute_value + - has_qualitative_attribute + - has_quantitative_attribute + - AgenticEntity_part_of - ClassifierMixin_type - rdf_type - - piezoelectric_tensor - - crystal_symmetry - - strain_applied - - ionic_electronic_contributions - class_uri: coremeta4cat:Piezoelectricity - ElasticConstants: - name: ElasticConstants - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ElasticConstants - description: 'Elastic mechanical properties of a material derived from the elastic - tensor, - - including bulk modulus, shear modulus, and Young''s modulus.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + - Device_has_part + - Device_other_identifier + - alternative_label + - has_physical_state + - has_temperature + - has_mass + - has_volume + - has_density + - has_pressure + - catalyst_particle_size + - gas_liquid_ratio + - agitation_sparging_rate + - impeller_type + - agitation_speed + class_uri: coremeta4cat:SlurryReactor + Microreactor: + name: Microreactor + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Microreactor + description: "Microreactor \u2014 a miniaturised flow reactor with characteristic\ + \ dimensions\nin the sub-millimetre range, enabling precise thermal control\ + \ and rapid\nscreening." + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:ElasticConstants - is_a: CalculatedProperty + - VOC4CAT:0000234 + is_a: ChemicalReactor slots: + - id - title - description - - QualitativeAttribute_value + - has_qualitative_attribute + - has_quantitative_attribute + - AgenticEntity_part_of - ClassifierMixin_type - rdf_type - - elastic_tensor - - bulk_modulus - - shear_modulus - - poisson_ratio - - young_modulus - class_uri: coremeta4cat:ElasticConstants - Surfaces: - name: Surfaces - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Surfaces - description: 'Surface properties of a catalyst computed from a periodic slab model, - - including surface energy, Miller index, slab thickness, and vacuum spacing. - - Central to heterogeneous catalysis modelling.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + - Device_has_part + - Device_other_identifier + - alternative_label + - has_physical_state + - has_temperature + - has_mass + - has_volume + - has_density + - has_pressure + - channel_material + - channel_dimensions + - number_of_channels + class_uri: VOC4CAT:0000234 + FixedBedReactor: + name: FixedBedReactor + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/FixedBedReactor + description: "Fixed bed reactor \u2014 a tubular reactor packed with a stationary\ + \ catalyst bed.\nThe most common reactor type in heterogeneous catalysis testing." + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:Surfaces - is_a: CalculatedProperty + - coremeta4cat:FixedBedReactor + is_a: ChemicalReactor slots: + - id - title - description - - QualitativeAttribute_value + - has_qualitative_attribute + - has_quantitative_attribute + - AgenticEntity_part_of - ClassifierMixin_type - rdf_type - - surface_energy - - miller_indices - - slab_thickness - - vacuum_spacing - - surface_termination_method - class_uri: coremeta4cat:Surfaces - DielectricTensors: - name: DielectricTensors - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/DielectricTensors - description: 'Dielectric tensor computed from density functional perturbation - theory (DFPT). - - Characterises the optical and static dielectric response of a material.' - from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + - Device_has_part + - Device_other_identifier + - alternative_label + - has_physical_state + - has_temperature + - has_mass + - has_volume + - has_density + - has_pressure + - catalyst_particle_size + - catalyst_bed_diameter + - catalyst_bed_volume + - catalyst_dilution_material + - catalyst_bed_height + class_uri: coremeta4cat:FixedBedReactor + FluidizedBedReactor: + name: FluidizedBedReactor + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/FluidizedBedReactor + description: "Fluidized bed reactor \u2014 a reactor in which the catalyst particles\ + \ are\nsuspended in an upward-flowing gas or liquid stream." + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/reaction/ mappings: - - coremeta4cat:DielectricTensors - is_a: CalculatedProperty - mixins: - - MaterialDescriptorMixin - - DFTSettingsMixin + - coremeta4cat:FluidizedBedReactor + is_a: ChemicalReactor slots: + - id - title - description - - QualitativeAttribute_value + - has_qualitative_attribute + - has_quantitative_attribute + - AgenticEntity_part_of - ClassifierMixin_type - rdf_type - - dielectric_tensor - - born_effective_charges - - material_composition - - crystal_structure - - energy_cutoff - - convergence_criteria - - k_point_mesh - class_uri: coremeta4cat:DielectricTensors - PhononDispersion: - name: PhononDispersion - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PhononDispersion - description: 'Phonon dispersion relations computed from interatomic force constants, + - Device_has_part + - Device_other_identifier + - alternative_label + - has_physical_state + - has_temperature + - has_mass + - has_volume + - has_density + - has_pressure + - gas_distributor_type + - bed_expansion_height + - bubble_size_distribution + class_uri: coremeta4cat:FluidizedBedReactor + MaterialDescriptorMixin: + name: MaterialDescriptorMixin + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/MaterialDescriptorMixin + description: 'Mixin providing material identity slots shared by CalculatedProperty - providing access to vibrational frequencies, thermodynamic quantities, + subclasses that target a specific material composition and crystal - and dynamical stability (imaginary modes).' + structure (DielectricTensors, PhononDispersion, EquationsOfState, + + AqueousStability, GrainBoundaries, ElectronicStructure, Ferroelectrics, + + BandGap).' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:PhononDispersion - is_a: CalculatedProperty - mixins: - - MaterialDescriptorMixin + mixin: true slots: - - title - - description - - QualitativeAttribute_value - - ClassifierMixin_type - - rdf_type - - force_constant_method - - kq_point_mesh - - smearing_parameter - - imaginary_modes - material_composition - crystal_structure - class_uri: coremeta4cat:PhononDispersion - EquationsOfState: - name: EquationsOfState - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/EquationsOfState - description: 'Equation of state relating energy (or enthalpy) to volume, fitted - to a + class_uri: coremeta4cat:MaterialDescriptorMixin + DFTSettingsMixin: + name: DFTSettingsMixin + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/DFTSettingsMixin + description: 'Mixin providing plane-wave DFT numerical settings shared by CalculatedProperty - parametric model (e.g. Birch-Murnaghan). Used to extract equilibrium + subclasses that are computed with periodic DFT (DielectricTensors, - volume, bulk modulus, and its pressure derivative.' + EquationsOfState, ElectronicStructure, BandGap).' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ - mappings: - - coremeta4cat:EquationsOfState - is_a: CalculatedProperty - mixins: - - MaterialDescriptorMixin - - DFTSettingsMixin + mixin: true slots: - - title - - description - - QualitativeAttribute_value - - ClassifierMixin_type - - rdf_type - - fit_method - - bulk_modulus - - pressure_derivative - - fit_residuals - - material_composition - - crystal_structure - energy_cutoff - convergence_criteria - k_point_mesh - class_uri: coremeta4cat:EquationsOfState - AqueousStability: - name: AqueousStability - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/AqueousStability - description: 'Electrochemical (Pourbaix) stability of a catalyst in aqueous solution - as + class_uri: coremeta4cat:DFTSettingsMixin + Simulation: + name: Simulation + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Simulation + description: 'A DataGeneratingActivity in which a catalyst, catalytic material, + or - a function of pH and electrode potential. Critical for electrocatalyst + catalytic process is modelled computationally. - stability screening.' + + The simulation software is linked via carried_out_by as a Software agent. + + The simulation method (protocol) is linked via realized_plan using a + + SimulationMethod instance. The catalyst model or reaction being simulated + + is linked via evaluated_entity or evaluated_activity. + + + The specific simulation type is expressed via rdf_type (e.g. coremeta4cat:DFT, + + NCIT:C18097 for molecular dynamics), following DCAT-AP-PLUS Pattern 3.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:AqueousStability - is_a: CalculatedProperty - mixins: - - MaterialDescriptorMixin + - NCIT:C48936 + is_a: CatalysisDataGeneratingActivity slots: - - title - - description - - QualitativeAttribute_value + - id + - Activity_title + - Activity_description + - Activity_other_identifier + - Activity_has_part + - Activity_had_input_entity + - Activity_had_output_entity + - Activity_had_input_activity + - Activity_has_qualitative_attribute + - Activity_has_quantitative_attribute + - Activity_part_of - ClassifierMixin_type - - rdf_type - - ph_range - - potential_range - - solvation_model - - ionic_strength - - has_temperature - - material_composition - - crystal_structure - class_uri: coremeta4cat:AqueousStability - GrainBoundaries: - name: GrainBoundaries - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/GrainBoundaries - description: 'Grain boundary structure and energetics from atomistic simulation. + - evaluated_activity + - occurred_in + - activity_designator + - software_package + - calculated_property + - Simulation_rdf_type + - Simulation_realized_plan + - Simulation_carried_out_by + - Simulation_evaluated_entity + slot_usage: + rdf_type: + name: rdf_type + description: 'The type of simulation method as an ontology term (e.g. coremeta4cat:DFT, - Relevant for understanding polycrystalline catalyst behaviour, + NCIT:C18097 for MD, coremeta4cat:Microkinetics). This is the primary - sintering, and charge/defect segregation.' + machine-actionable classification of the simulation type.' + recommended: true + realized_plan: + name: realized_plan + description: The SimulationMethod (protocol) realized in this Simulation. + range: SimulationMethod + required: true + inlined: true + carried_out_by: + name: carried_out_by + description: The simulation software used, provided as a Software agent instance. + range: AgenticEntity + recommended: true + multivalued: true + inlined_as_list: true + evaluated_entity: + name: evaluated_entity + description: The catalyst model, surface slab, or molecule being simulated. + range: EvaluatedEntity + recommended: true + multivalued: true + inlined_as_list: true + class_uri: NCIT:C48936 + SimulationMethod: + name: SimulationMethod + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/SimulationMethod + description: 'Abstract Plan describing the computational method (protocol) used + in a + + Simulation. Concrete subclasses carry method-specific parameter slots. + + Linked from Simulation via realized_plan.' from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:GrainBoundaries - is_a: CalculatedProperty - mixins: - - MaterialDescriptorMixin + - OBI:0000272 + is_a: CatalysisPlan + abstract: true slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - - grain_boundary_plane - - misorientation_angle - - grain_boundary_energy - - simulation_cell_size - - gb_excess_volume - - gb_structural_units - - charge_defect_segregation - - material_composition - - crystal_structure - class_uri: coremeta4cat:GrainBoundaries - ElectronicStructure: - name: ElectronicStructure - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ElectronicStructure - description: 'Electronic band structure and density of states, characterising - the - - electronic properties of a catalyst relevant to activity descriptors - - (d-band centre, band gap, Fermi energy).' + - id + class_uri: OBI:0000272 + DFT: + name: DFT + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/DFT + description: "Density functional theory \u2014 a quantum mechanical method for\ + \ calculating\nthe electronic structure of atoms, molecules, and periodic solids.\n\ + The most widely used ab initio method in computational catalysis." from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:ElectronicStructure - is_a: CalculatedProperty - mixins: - - MaterialDescriptorMixin - - DFTSettingsMixin + - coremeta4cat:DFT + is_a: SimulationMethod slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - - smearing_method - - spin_polarized - - band_path - - fermi_energy - - material_composition - - crystal_structure + - id + - exchange_correlation_functional - energy_cutoff - convergence_criteria - - k_point_mesh - class_uri: coremeta4cat:ElectronicStructure - Ferroelectrics: - name: Ferroelectrics - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Ferroelectrics - description: 'Ferroelectric properties computed from DFT, including spontaneous - - polarization, switching barrier, and coercive field. Relevant for - - ferroelectric-photocatalyst design.' + - dft_u_parameters + - spin_polarization + - total_energy_per_atom + class_uri: coremeta4cat:DFT + MolecularDynamics: + name: MolecularDynamics + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/MolecularDynamics + description: "Molecular dynamics simulation \u2014 a method for computing the\ + \ time evolution\nof a system of interacting particles by integrating the equations\ + \ of motion.\nUsed to study diffusion, reaction kinetics, and thermal properties." from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:Ferroelectrics - is_a: CalculatedProperty - mixins: - - MaterialDescriptorMixin + - NCIT:C18097 + is_a: SimulationMethod slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - - polarization_direction - - spontaneous_polarization - - reference_structure - - switching_barrier - - coercive_field - - temperature_dependence - - material_composition - - crystal_structure - class_uri: coremeta4cat:Ferroelectrics - BandGap: - name: BandGap - definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/BandGap - description: 'Electronic band gap and its character (direct/indirect), with optional - - many-body (GW) or excitonic corrections. Critical for photocatalyst - - and semiconductor catalyst screening.' + - id + - force_field + - simulation_timestep + - simulation_time + - ensemble_type + - number_of_atoms + class_uri: NCIT:C18097 + Microkinetics: + name: Microkinetics + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Microkinetics + description: "Microkinetic modelling \u2014 a mean-field kinetic approach that\ + \ integrates\nelementary reaction steps and their rate constants to predict\ + \ catalytic\nactivity and selectivity under reaction conditions." from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - coremeta4cat:BandGap - is_a: CalculatedProperty - mixins: - - MaterialDescriptorMixin - - DFTSettingsMixin + - coremeta4cat:Microkinetics + is_a: SimulationMethod slots: - title - description - - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - - material_sample - - structure_model - - smearing_broadening - - direct_indirect - - experimental_reference - - gw_hybrid_correction - - excitonic_correction - - material_composition - - crystal_structure - - energy_cutoff - - convergence_criteria - - k_point_mesh - class_uri: coremeta4cat:BandGap - SubstanceSampleCharacterizationDataset: - name: SubstanceSampleCharacterizationDataset - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/SubstanceSampleCharacterizationDataset - description: A Dataset about a SubstanceSample that was produced by a SubstanceSampleCharacterization - activity. This is a coarse-grained convenience shape that conflates measurement - and analysis into a single data-generating activity. Domain-specific sub-profiles - that need to distinguish raw measurement from post-processing or structure assignment - should define their own Dataset subclasses, potentially using the DCAT-AP+ DataAnalysis/AnalysisDataset - chain instead of reusing this class. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/ - mappings: - - dcat:Dataset - is_a: Dataset - slots: - - Dataset_access_rights - - Dataset_applicable_legislation - - Dataset_conforms_to - - Dataset_contact_point - - Dataset_creator - - Dataset_dataset_distribution - - Dataset_description - - Dataset_documentation - - Dataset_frequency - - Dataset_geographical_coverage - - Dataset_has_version - - Dataset_identifier - - Dataset_in_series - - Dataset_is_referenced_by - - Dataset_keyword - - Dataset_landing_page - - Dataset_language - - Dataset_modification_date - - Dataset_other_identifier - - Dataset_provenance - - Dataset_publisher - - Dataset_qualified_attribution - - Dataset_qualified_relation - - Dataset_related_resource - - Dataset_release_date - - Dataset_sample - - Dataset_source - - Dataset_spatial_resolution - - Dataset_temporal_coverage - - Dataset_temporal_resolution - - Dataset_theme - - Dataset_title - - Dataset_type - - Dataset_version - - Dataset_version_notes - id - - is_about_activity - - SubstanceSampleCharacterizationDataset_was_generated_by - - SubstanceSampleCharacterizationDataset_is_about_entity - slot_usage: - was_generated_by: - name: was_generated_by - description: The slot to specify the SubstanceCharacterization activity that - produced this dataset. - range: SubstanceSampleCharacterization - multivalued: true - inlined_as_list: true - is_about_entity: - name: is_about_entity - description: The slot to specify the SubstanceSample this dataset is about. - range: SubstanceSample - multivalued: true - inlined_as_list: true - class_uri: dcat:Dataset - ReactionMonitoringDataset: - name: ReactionMonitoringDataset - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/ReactionMonitoringDataset - description: A Dataset about a ChemicalReaction that was produced by a ReactionMonitoring - activity. This is a coarse-grained convenience shape that conflates experimental - documentation and analysis into a single data-generating activity. Domain-specific - sub-profiles that need to distinguish reaction monitoring from subsequent data - evaluation should define their own Dataset subclasses, potentially using the - DCAT-AP+ DataAnalysis/AnalysisDataset chain instead of reusing this class. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/ + - rate_constants + - solver_type + - has_temperature + - has_pressure + - surface_coverage + - activation_energy + class_uri: coremeta4cat:Microkinetics + MonteCarlo: + name: MonteCarlo + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/MonteCarlo + description: "Monte Carlo simulation \u2014 a stochastic method that samples configuration\n\ + space using random moves accepted or rejected according to a statistical\ncriterion\ + \ (e.g. Metropolis). Used for adsorption isotherms, phase diagrams,\nand lattice-based\ + \ kinetics." + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcat:Dataset - is_a: Dataset + - coremeta4cat:MonteCarlo + is_a: SimulationMethod slots: - - Dataset_access_rights - - Dataset_applicable_legislation - - Dataset_conforms_to - - Dataset_contact_point - - Dataset_creator - - Dataset_dataset_distribution - - Dataset_description - - Dataset_documentation - - Dataset_frequency - - Dataset_geographical_coverage - - Dataset_has_version - - Dataset_identifier - - Dataset_in_series - - Dataset_is_referenced_by - - Dataset_keyword - - Dataset_landing_page - - Dataset_language - - Dataset_modification_date - - Dataset_other_identifier - - Dataset_provenance - - Dataset_publisher - - Dataset_qualified_attribution - - Dataset_qualified_relation - - Dataset_related_resource - - Dataset_release_date - - Dataset_sample - - Dataset_source - - Dataset_spatial_resolution - - Dataset_temporal_coverage - - Dataset_temporal_resolution - - Dataset_theme - - Dataset_title - - Dataset_type - - Dataset_version - - Dataset_version_notes + - title + - description + - ClassifierMixin_type + - rdf_type - id - - is_about_entity - - ReactionMonitoringDataset_was_generated_by - - ReactionMonitoringDataset_is_about_activity - slot_usage: - was_generated_by: - name: was_generated_by - description: The slot to specify the ReactionMonitoring activity that produced - this dataset. - range: ReactionMonitoring - multivalued: true - inlined_as_list: true - is_about_activity: - name: is_about_activity - description: The slot to specify the ChemicalReaction this dataset is about. - range: ChemicalReaction - class_uri: dcat:Dataset - SubstanceSampleCharacterization: - name: SubstanceSampleCharacterization - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/SubstanceSampleCharacterization - description: A DataGeneratingActivity that produces data about a SubstanceSample, - such as a spectroscopic measurement, a physical property determination, or a - combined measurement-and-analysis workflow. This is a coarse-grained convenience - shape that does not distinguish between raw data acquisition and subsequent - data processing or analysis. Domain-specific sub-profiles that need this distinction - should define their own DataGeneratingActivity subclasses and use the DCAT-AP+ - DataAnalysis chain to separate raw measurement from derived results. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/ + - interaction_potential + - number_of_steps + - has_temperature + - lattice_size_type + - acceptance_criteria + - equilibration_steps + - sampling_interval + class_uri: coremeta4cat:MonteCarlo + CalculatedProperty: + name: CalculatedProperty + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/CalculatedProperty + description: 'Abstract QualitativeAttribute representing a property computed by + a + + Simulation. Concrete subclasses carry the property-specific output + + values and the computational settings used to produce them. + + Linked from Simulation via the calculated_property slot.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - prov:Activity - broad_mappings: - - OBI:0000070 - is_a: DataGeneratingActivity + - IAO:0000109 + is_a: QualitativeAttribute + abstract: true slots: - - id - - Activity_title - - Activity_description - - Activity_other_identifier - - Activity_has_part - - Activity_had_input_entity - - Activity_had_output_entity - - Activity_had_input_activity - - Activity_carried_out_by - - Activity_has_qualitative_attribute - - Activity_has_quantitative_attribute - - Activity_part_of + - title + - description + - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - - evaluated_activity - - realized_plan - - occurred_in - - SubstanceSampleCharacterization_evaluated_entity - slot_usage: - evaluated_entity: - name: evaluated_entity - description: The slot to specify the SubstanceSample being characterized. - range: SubstanceSample - multivalued: true - inlined_as_list: true - class_uri: prov:Activity - ReactionMonitoring: - name: ReactionMonitoring - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/ReactionMonitoring - description: A DataGeneratingActivity that produces data about a ChemicalReaction, - such as reaction monitoring, experimental documentation, or a combined recording-and-evaluation - workflow. This is a coarse-grained convenience shape that does not distinguish - between raw experimental recording and subsequent data evaluation. Domain-specific - sub-profiles that need this distinction should define their own DataGeneratingActivity - subclasses and use the DCAT-AP+ DataAnalysis chain to separate raw data from - derived results. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/ + class_uri: IAO:0000109 + ThermodynamicStability: + name: ThermodynamicStability + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ThermodynamicStability + description: 'Thermodynamic stability of a material or phase, characterised by + formation + + energy, convex hull distance, and competing phases. Used to screen catalyst + + stability and predict synthesis feasibility.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - prov:Activity - is_a: DataGeneratingActivity + - coremeta4cat:ThermodynamicStability + is_a: CalculatedProperty slots: - - id - - Activity_title - - Activity_description - - Activity_other_identifier - - Activity_has_part - - Activity_had_input_entity - - Activity_had_output_entity - - Activity_had_input_activity - - Activity_carried_out_by - - Activity_has_qualitative_attribute - - Activity_has_quantitative_attribute - - Activity_part_of + - title + - description + - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - - evaluated_entity - - realized_plan - - occurred_in - - ReactionMonitoring_evaluated_activity - slot_usage: - evaluated_activity: - name: evaluated_activity - description: The slot to specify the ChemicalReaction being recorded. - range: ChemicalReaction - multivalued: true - inlined_as_list: true - class_uri: prov:Activity - Laboratory: - name: Laboratory - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/Laboratory - description: A facility that provides controlled conditions in which scientific - or technological research, experiments, and measurement may be performed. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/ + - formation_energy + - reference_energies + - energy_above_hull + - phase_diagram_type + - competing_phases + class_uri: coremeta4cat:ThermodynamicStability + Piezoelectricity: + name: Piezoelectricity + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Piezoelectricity + description: 'Piezoelectric response of a non-centrosymmetric material, described + by the + + piezoelectric tensor. Relevant for piezocatalysis applications.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - ENVO:01001405 - is_a: Surrounding + - coremeta4cat:Piezoelectricity + is_a: CalculatedProperty slots: - title - description + - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: ENVO:01001405 - Activity: - name: Activity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Activity - description: See [DCAT-AP specs:Activity](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Activity) - notes: - - The specified properties (slots) of this class are part of our extension of - the DCAT-AP. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - piezoelectric_tensor + - crystal_symmetry + - strain_applied + - ionic_electronic_contributions + class_uri: coremeta4cat:Piezoelectricity + ElasticConstants: + name: ElasticConstants + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ElasticConstants + description: 'Elastic mechanical properties of a material derived from the elastic + tensor, + + including bulk modulus, shear modulus, and Young''s modulus.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - prov:Activity - mixins: - - ClassifierMixin + - coremeta4cat:ElasticConstants + is_a: CalculatedProperty slots: - - id - - Activity_title - - Activity_description - - Activity_other_identifier - - Activity_has_part - - Activity_had_input_entity - - Activity_had_output_entity - - Activity_had_input_activity - - Activity_carried_out_by - - Activity_has_qualitative_attribute - - Activity_has_quantitative_attribute - - Activity_part_of + - title + - description + - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - slot_usage: - title: - name: title - description: The slot to provide a title for the Activity. - notes: - - not in DCAT-AP - multivalued: true - inlined_as_list: true - description: - name: description - description: The slot to provide a description for the Activity. - notes: - - not in DCAT-AP - multivalued: true - inlined_as_list: true - has_part: - name: has_part - description: The slot to provide an Activity that is part of the Activity. - notes: - - not in DCAT-AP - range: Activity - multivalued: true - inlined_as_list: true - part_of: - name: part_of - description: The slot to provide an Activity of which the Activity is a part. - notes: - - not in DCAT-AP - range: Activity - multivalued: true - inlined_as_list: true - other_identifier: - name: other_identifier - description: The slot to provide a secondary identifier of the Activity. - notes: - - not in DCAT-AP - range: Identifier - multivalued: true - inlined_as_list: true - has_qualitative_attribute: - name: has_qualitative_attribute - notes: - - not in DCAT-AP - has_quantitative_attribute: - name: has_quantitative_attribute - notes: - - not in DCAT-AP - had_input_entity: - name: had_input_entity - notes: - - not in DCAT-AP - had_output_entity: - name: had_output_entity - notes: - - not in DCAT-AP - had_input_activity: - name: had_input_activity - notes: - - not in DCAT-AP - carried_out_by: - name: carried_out_by - notes: - - not in DCAT-AP - class_uri: prov:Activity - Agent: - name: Agent - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Agent - description: See [DCAT-AP specs:Agent](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Agent) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - elastic_tensor + - bulk_modulus + - shear_modulus + - poisson_ratio + - young_modulus + class_uri: coremeta4cat:ElasticConstants + Surfaces: + name: Surfaces + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Surfaces + description: 'Surface properties of a catalyst computed from a periodic slab model, + + including surface energy, Miller index, slab thickness, and vacuum spacing. + + Central to heterogeneous catalysis modelling.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + mappings: + - coremeta4cat:Surfaces + is_a: CalculatedProperty + slots: + - title + - description + - QualitativeAttribute_value + - ClassifierMixin_type + - rdf_type + - surface_energy + - miller_indices + - slab_thickness + - vacuum_spacing + - surface_termination_method + class_uri: coremeta4cat:Surfaces + DielectricTensors: + name: DielectricTensors + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/DielectricTensors + description: 'Dielectric tensor computed from density functional perturbation + theory (DFPT). + + Characterises the optical and static dielectric response of a material.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - foaf:Agent + - coremeta4cat:DielectricTensors + is_a: CalculatedProperty + mixins: + - MaterialDescriptorMixin + - DFTSettingsMixin slots: - - Agent_name - - Agent_type - slot_usage: - name: - name: name - description: A name of the agent. - slot_uri: foaf:name - range: string - required: true - multivalued: true - inlined_as_list: true - type: - name: type - description: The nature of the agent. - slot_uri: dcterms:type - range: Concept - required: false - recommended: true - multivalued: false - inlined_as_list: true - class_uri: foaf:Agent - AgenticEntity: - name: AgenticEntity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/AgenticEntity - description: An entity that is somehow responsible for an Activity to take place. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - title + - description + - QualitativeAttribute_value + - ClassifierMixin_type + - rdf_type + - dielectric_tensor + - born_effective_charges + - material_composition + - crystal_structure + - energy_cutoff + - convergence_criteria + - k_point_mesh + class_uri: coremeta4cat:DielectricTensors + PhononDispersion: + name: PhononDispersion + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/PhononDispersion + description: 'Phonon dispersion relations computed from interatomic force constants, + + providing access to vibrational frequencies, thermodynamic quantities, + + and dynamical stability (imaginary modes).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - prov:Agent + - coremeta4cat:PhononDispersion + is_a: CalculatedProperty mixins: - - ClassifierMixin + - MaterialDescriptorMixin slots: - - id - title - description - - AgenticEntity_other_identifier - - has_qualitative_attribute - - has_quantitative_attribute - - AgenticEntity_has_part - - AgenticEntity_part_of + - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - slot_usage: - has_part: - name: has_part - description: The slot to specify parts of an AgenticEntity that are themselves - AgenticEntities. - range: AgenticEntity - multivalued: true - inlined: true - inlined_as_list: true - part_of: - name: part_of - description: The slot to provide the AgenticEntity of which theAgenticEntity - is a part. - notes: - - not in DCAT-AP - range: AgenticEntity - multivalued: true - inlined_as_list: true - other_identifier: - name: other_identifier - description: A slot to provide a secondary identifier for an Instrument. - range: Identifier - required: false - multivalued: true - inlined_as_list: true - class_uri: prov:Agent - AnalysisDataset: - name: AnalysisDataset - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/AnalysisDataset - description: A Dataset that was generated by an analysis of some previously generated - data. For example, a dataset that contains the data of an assignment of a chemical - structure to a sample based on the spectral data obtained from the sample is - an AnalyticalDataset. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - force_constant_method + - kq_point_mesh + - smearing_parameter + - imaginary_modes + - material_composition + - crystal_structure + class_uri: coremeta4cat:PhononDispersion + EquationsOfState: + name: EquationsOfState + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/EquationsOfState + description: 'Equation of state relating energy (or enthalpy) to volume, fitted + to a + + parametric model (e.g. Birch-Murnaghan). Used to extract equilibrium + + volume, bulk modulus, and its pressure derivative.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcat:Dataset - is_a: Dataset + - coremeta4cat:EquationsOfState + is_a: CalculatedProperty + mixins: + - MaterialDescriptorMixin + - DFTSettingsMixin slots: - - Dataset_access_rights - - Dataset_applicable_legislation - - Dataset_conforms_to - - Dataset_contact_point - - Dataset_creator - - Dataset_dataset_distribution - - Dataset_description - - Dataset_documentation - - Dataset_frequency - - Dataset_geographical_coverage - - Dataset_has_version - - Dataset_identifier - - Dataset_in_series - - Dataset_is_referenced_by - - Dataset_keyword - - Dataset_landing_page - - Dataset_language - - Dataset_modification_date - - Dataset_other_identifier - - Dataset_provenance - - Dataset_publisher - - Dataset_qualified_attribution - - Dataset_qualified_relation - - Dataset_related_resource - - Dataset_release_date - - Dataset_sample - - Dataset_source - - Dataset_spatial_resolution - - Dataset_temporal_coverage - - Dataset_temporal_resolution - - Dataset_theme - - Dataset_title - - Dataset_type - - Dataset_version - - Dataset_version_notes - - id - - is_about_entity - - is_about_activity - - AnalysisDataset_was_generated_by - slot_usage: - was_generated_by: - name: was_generated_by - range: DataAnalysis - multivalued: true - inlined_as_list: true - class_uri: dcat:Dataset - AnalysisSourceData: - name: AnalysisSourceData - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/AnalysisSourceData - description: Information that was evaluated within a DataAnalysis. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - title + - description + - QualitativeAttribute_value + - ClassifierMixin_type + - rdf_type + - fit_method + - bulk_modulus + - pressure_derivative + - fit_residuals + - material_composition + - crystal_structure + - energy_cutoff + - convergence_criteria + - k_point_mesh + class_uri: coremeta4cat:EquationsOfState + AqueousStability: + name: AqueousStability + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/AqueousStability + description: 'Electrochemical (Pourbaix) stability of a catalyst in aqueous solution + as + + a function of pH and electrode potential. Critical for electrocatalyst + + stability screening.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - prov:Entity - is_a: EvaluatedEntity + - coremeta4cat:AqueousStability + is_a: CalculatedProperty + mixins: + - MaterialDescriptorMixin + slots: + - title + - description + - QualitativeAttribute_value + - ClassifierMixin_type + - rdf_type + - ph_range + - potential_range + - solvation_model + - ionic_strength + - has_temperature + - material_composition + - crystal_structure + class_uri: coremeta4cat:AqueousStability + GrainBoundaries: + name: GrainBoundaries + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/GrainBoundaries + description: 'Grain boundary structure and energetics from atomistic simulation. + + Relevant for understanding polycrystalline catalyst behaviour, + + sintering, and charge/defect segregation.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ + mappings: + - coremeta4cat:GrainBoundaries + is_a: CalculatedProperty + mixins: + - MaterialDescriptorMixin slots: - - id - - has_qualitative_attribute - - has_quantitative_attribute - - Entity_has_part - - Entity_part_of + - title + - description + - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - - EvaluatedEntity_title - - EvaluatedEntity_description - - EvaluatedEntity_other_identifier - - AnalysisSourceData_was_generated_by - slot_usage: - was_generated_by: - name: was_generated_by - description: A slot to provide the Activity which created the AnalysisSourceData. - range: DataGeneratingActivity - multivalued: true - inlined_as_list: true - class_uri: prov:Entity - Any: - name: Any - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Any - description: This abstract class is needed to create the union of Dataset, DatasetSeries, - Catalogue and DataService for the range of the slot [primary_topic](https://nfdi-de.github.io/chem-dcat-ap/elements/primary_topic/). - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - grain_boundary_plane + - misorientation_angle + - grain_boundary_energy + - simulation_cell_size + - gb_excess_volume + - gb_structural_units + - charge_defect_segregation + - material_composition + - crystal_structure + class_uri: coremeta4cat:GrainBoundaries + ElectronicStructure: + name: ElectronicStructure + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/ElectronicStructure + description: 'Electronic band structure and density of states, characterising + the + + electronic properties of a catalyst relevant to activity descriptors + + (d-band centre, band gap, Fermi energy).' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - linkml:Any + - coremeta4cat:ElectronicStructure + is_a: CalculatedProperty + mixins: + - MaterialDescriptorMixin + - DFTSettingsMixin slots: - title - description - class_uri: linkml:Any - Attribution: - name: Attribution - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Attribution - description: See [DCAT-AP specs:Attribution](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Attribution) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - QualitativeAttribute_value + - ClassifierMixin_type + - rdf_type + - smearing_method + - spin_polarized + - band_path + - fermi_energy + - material_composition + - crystal_structure + - energy_cutoff + - convergence_criteria + - k_point_mesh + class_uri: coremeta4cat:ElectronicStructure + Ferroelectrics: + name: Ferroelectrics + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/Ferroelectrics + description: 'Ferroelectric properties computed from DFT, including spontaneous + + polarization, switching barrier, and coercive field. Relevant for + + ferroelectric-photocatalyst design.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - prov:Attribution - is_a: SupportiveEntity + - coremeta4cat:Ferroelectrics + is_a: CalculatedProperty + mixins: + - MaterialDescriptorMixin slots: - title - description - class_uri: prov:Attribution - Catalogue: - name: Catalogue - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Catalogue - description: See [DCAT-AP specs:Catalogue](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Catalogue) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - QualitativeAttribute_value + - ClassifierMixin_type + - rdf_type + - polarization_direction + - spontaneous_polarization + - reference_structure + - switching_barrier + - coercive_field + - temperature_dependence + - material_composition + - crystal_structure + class_uri: coremeta4cat:Ferroelectrics + BandGap: + name: BandGap + definition_uri: https://w3id.org/nfdi4cat/coremeta4cat/BandGap + description: 'Electronic band gap and its character (direct/indirect), with optional + + many-body (GW) or excitonic corrections. Critical for photocatalyst + + and semiconductor catalyst screening.' + from_schema: https://w3id.org/nfdi4cat/coremeta4cat/simulation/ mappings: - - dcat:Catalog + - coremeta4cat:BandGap + is_a: CalculatedProperty + mixins: + - MaterialDescriptorMixin + - DFTSettingsMixin slots: - - Catalogue_applicable_legislation - - Catalogue_catalogue - - Catalogue_creator - - Catalogue_description - - Catalogue_geographical_coverage - - Catalogue_has_dataset - - Catalogue_has_part - - Catalogue_homepage - - Catalogue_language - - Catalogue_licence - - Catalogue_modification_date - - Catalogue_publisher - - Catalogue_record - - Catalogue_release_date - - Catalogue_rights - - Catalogue_service - - Catalogue_temporal_coverage - - Catalogue_themes - - Catalogue_title - slot_usage: - applicable_legislation: - name: applicable_legislation - description: The legislation that mandates the creation or management of the - Catalog. - slot_uri: dcatap:applicableLegislation - range: LegalResource - required: false - multivalued: true - inlined_as_list: true - catalogue: - name: catalogue - description: A catalogue whose contents are of interest in the context of - this catalogue. - slot_uri: dcat:catalog - range: Catalogue - required: false - multivalued: true - inlined_as_list: true - creator: - name: creator - description: An entity responsible for the creation of the catalogue. - slot_uri: dcterms:creator - range: Agent - required: false - multivalued: false - inlined_as_list: true - description: - name: description - description: A free-text account of the Catalogue. - slot_uri: dcterms:description - range: string - required: true - multivalued: true - inlined_as_list: true - geographical_coverage: - name: geographical_coverage - description: A geographical area covered by the Catalogue. - slot_uri: dcterms:spatial - range: Location - required: false - multivalued: true - inlined_as_list: true - has_dataset: - name: has_dataset - description: A Dataset that is part of the Catalogue. - slot_uri: dcat:dataset - range: Dataset - required: false - multivalued: true - inlined_as_list: true - has_part: - name: has_part - description: A related Catalogue that is part of the described Catalogue. - slot_uri: dcterms:hasPart - range: Catalogue - required: false - multivalued: true - inlined_as_list: true - homepage: - name: homepage - description: A web page that acts as the main page for the Catalogue. - slot_uri: foaf:homepage - range: Document - required: false - recommended: true - multivalued: false - inlined_as_list: true - language: - name: language - description: A language used in the textual metadata describing titles, descriptions, - etc. of the Datasets in the Catalogue. - slot_uri: dcterms:language - range: LinguisticSystem - required: false - recommended: true - multivalued: true - inlined_as_list: true - licence: - name: licence - description: A licence under which the Catalogue can be used or reused. - slot_uri: dcterms:license - range: LicenseDocument - required: false - multivalued: false - inlined_as_list: true - modification_date: - name: modification_date - description: The most recent date on which the Catalogue was modified. - slot_uri: dcterms:modified - range: date - required: false - recommended: true - multivalued: false - inlined_as_list: false - publisher: - name: publisher - description: An entity (organisation) responsible for making the Catalogue - available. - slot_uri: dcterms:publisher - range: Agent - required: true - multivalued: false - inlined_as_list: true - record: - name: record - description: A Catalogue Record that is part of the Catalogue. - slot_uri: dcat:record - range: CatalogueRecord - required: false + - title + - description + - QualitativeAttribute_value + - ClassifierMixin_type + - rdf_type + - material_sample + - structure_model + - smearing_broadening + - direct_indirect + - experimental_reference + - gw_hybrid_correction + - excitonic_correction + - material_composition + - crystal_structure + - energy_cutoff + - convergence_criteria + - k_point_mesh + class_uri: coremeta4cat:BandGap + SubstanceSampleCharacterizationDataset: + name: SubstanceSampleCharacterizationDataset + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/SubstanceSampleCharacterizationDataset + description: A Dataset about a SubstanceSample that was produced by a SubstanceSampleCharacterization + activity. This is a coarse-grained convenience shape that conflates measurement + and analysis into a single data-generating activity. Domain-specific sub-profiles + that need to distinguish raw measurement from post-processing or structure assignment + should define their own Dataset subclasses, potentially using the DCAT-AP+ DataAnalysis/AnalysisDataset + chain instead of reusing this class. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/ + mappings: + - dcat:Dataset + is_a: Dataset + slots: + - Dataset_access_rights + - Dataset_applicable_legislation + - Dataset_conforms_to + - Dataset_contact_point + - Dataset_creator + - Dataset_dataset_distribution + - Dataset_description + - Dataset_documentation + - Dataset_frequency + - Dataset_geographical_coverage + - Dataset_has_version + - Dataset_identifier + - Dataset_in_series + - Dataset_is_referenced_by + - Dataset_keyword + - Dataset_landing_page + - Dataset_language + - Dataset_modification_date + - Dataset_other_identifier + - Dataset_provenance + - Dataset_publisher + - Dataset_qualified_attribution + - Dataset_qualified_relation + - Dataset_related_resource + - Dataset_release_date + - Dataset_sample + - Dataset_source + - Dataset_spatial_resolution + - Dataset_temporal_coverage + - Dataset_temporal_resolution + - Dataset_theme + - Dataset_title + - Dataset_type + - Dataset_version + - Dataset_version_notes + - id + - is_about_activity + - SubstanceSampleCharacterizationDataset_was_generated_by + - SubstanceSampleCharacterizationDataset_is_about_entity + slot_usage: + was_generated_by: + name: was_generated_by + description: The slot to specify the SubstanceCharacterization activity that + produced this dataset. + range: SubstanceSampleCharacterization multivalued: true inlined_as_list: true - release_date: - name: release_date - description: The date of formal issuance (e.g., publication) of the Catalogue. - slot_uri: dcterms:issued - range: date - required: false - recommended: true - multivalued: false - inlined_as_list: false - rights: - name: rights - description: A statement that specifies rights associated with the Catalogue. - slot_uri: dcterms:rights - range: RightsStatement - required: false - multivalued: false - inlined_as_list: true - service: - name: service - description: A site or end-point (Data Service) that is listed in the Catalogue. - slot_uri: dcat:service - range: DataService - required: false + is_about_entity: + name: is_about_entity + description: The slot to specify the SubstanceSample this dataset is about. + range: SubstanceSample multivalued: true inlined_as_list: true - temporal_coverage: - name: temporal_coverage - description: A temporal period that the Catalogue covers. - slot_uri: dcterms:temporal - range: PeriodOfTime - required: false + class_uri: dcat:Dataset + ReactionMonitoringDataset: + name: ReactionMonitoringDataset + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/ReactionMonitoringDataset + description: A Dataset about a ChemicalReaction that was produced by a ReactionMonitoring + activity. This is a coarse-grained convenience shape that conflates experimental + documentation and analysis into a single data-generating activity. Domain-specific + sub-profiles that need to distinguish reaction monitoring from subsequent data + evaluation should define their own Dataset subclasses, potentially using the + DCAT-AP+ DataAnalysis/AnalysisDataset chain instead of reusing this class. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/ + mappings: + - dcat:Dataset + is_a: Dataset + slots: + - Dataset_access_rights + - Dataset_applicable_legislation + - Dataset_conforms_to + - Dataset_contact_point + - Dataset_creator + - Dataset_dataset_distribution + - Dataset_description + - Dataset_documentation + - Dataset_frequency + - Dataset_geographical_coverage + - Dataset_has_version + - Dataset_identifier + - Dataset_in_series + - Dataset_is_referenced_by + - Dataset_keyword + - Dataset_landing_page + - Dataset_language + - Dataset_modification_date + - Dataset_other_identifier + - Dataset_provenance + - Dataset_publisher + - Dataset_qualified_attribution + - Dataset_qualified_relation + - Dataset_related_resource + - Dataset_release_date + - Dataset_sample + - Dataset_source + - Dataset_spatial_resolution + - Dataset_temporal_coverage + - Dataset_temporal_resolution + - Dataset_theme + - Dataset_title + - Dataset_type + - Dataset_version + - Dataset_version_notes + - id + - is_about_entity + - ReactionMonitoringDataset_was_generated_by + - ReactionMonitoringDataset_is_about_activity + slot_usage: + was_generated_by: + name: was_generated_by + description: The slot to specify the ReactionMonitoring activity that produced + this dataset. + range: ReactionMonitoring multivalued: true inlined_as_list: true - themes: - name: themes - description: A knowledge organization system used to classify the Resources - that are in the Catalogue. - slot_uri: dcat:themeTaxonomy - range: ConceptScheme - required: false - recommended: true + is_about_activity: + name: is_about_activity + description: The slot to specify the ChemicalReaction this dataset is about. + range: ChemicalReaction + class_uri: dcat:Dataset + SubstanceSampleCharacterization: + name: SubstanceSampleCharacterization + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/SubstanceSampleCharacterization + description: A DataGeneratingActivity that produces data about a SubstanceSample, + such as a spectroscopic measurement, a physical property determination, or a + combined measurement-and-analysis workflow. This is a coarse-grained convenience + shape that does not distinguish between raw data acquisition and subsequent + data processing or analysis. Domain-specific sub-profiles that need this distinction + should define their own DataGeneratingActivity subclasses and use the DCAT-AP+ + DataAnalysis chain to separate raw measurement from derived results. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/ + mappings: + - prov:Activity + broad_mappings: + - OBI:0000070 + is_a: DataGeneratingActivity + slots: + - id + - Activity_title + - Activity_description + - Activity_other_identifier + - Activity_has_part + - Activity_had_input_entity + - Activity_had_output_entity + - Activity_had_input_activity + - Activity_carried_out_by + - Activity_has_qualitative_attribute + - Activity_has_quantitative_attribute + - Activity_part_of + - ClassifierMixin_type + - rdf_type + - evaluated_activity + - realized_plan + - occurred_in + - SubstanceSampleCharacterization_evaluated_entity + slot_usage: + evaluated_entity: + name: evaluated_entity + description: The slot to specify the SubstanceSample being characterized. + range: SubstanceSample multivalued: true inlined_as_list: true - title: - name: title - description: A name given to the Catalogue. - slot_uri: dcterms:title - range: string - required: true + class_uri: prov:Activity + ReactionMonitoring: + name: ReactionMonitoring + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/ReactionMonitoring + description: A DataGeneratingActivity that produces data about a ChemicalReaction, + such as reaction monitoring, experimental documentation, or a combined recording-and-evaluation + workflow. This is a coarse-grained convenience shape that does not distinguish + between raw experimental recording and subsequent data evaluation. Domain-specific + sub-profiles that need this distinction should define their own DataGeneratingActivity + subclasses and use the DCAT-AP+ DataAnalysis chain to separate raw data from + derived results. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/ + mappings: + - prov:Activity + is_a: DataGeneratingActivity + slots: + - id + - Activity_title + - Activity_description + - Activity_other_identifier + - Activity_has_part + - Activity_had_input_entity + - Activity_had_output_entity + - Activity_had_input_activity + - Activity_carried_out_by + - Activity_has_qualitative_attribute + - Activity_has_quantitative_attribute + - Activity_part_of + - ClassifierMixin_type + - rdf_type + - evaluated_entity + - realized_plan + - occurred_in + - ReactionMonitoring_evaluated_activity + slot_usage: + evaluated_activity: + name: evaluated_activity + description: The slot to specify the ChemicalReaction being recorded. + range: ChemicalReaction multivalued: true inlined_as_list: true - class_uri: dcat:Catalog - CatalogueRecord: - name: CatalogueRecord - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/CatalogueRecord - description: See [DCAT-AP specs:CatalogueRecord](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#CatalogueRecord) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + class_uri: prov:Activity + Laboratory: + name: Laboratory + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/Laboratory + description: A facility that provides controlled conditions in which scientific + or technological research, experiments, and measurement may be performed. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/ mappings: - - dcat:CatalogRecord + - ENVO:01001405 + is_a: Surrounding slots: - - CatalogueRecord_application_profile - - CatalogueRecord_change_type - - CatalogueRecord_description - - CatalogueRecord_language - - CatalogueRecord_listing_date - - CatalogueRecord_modification_date - - CatalogueRecord_primary_topic - - CatalogueRecord_source_metadata - - CatalogueRecord_title + - title + - description + - ClassifierMixin_type + - rdf_type + class_uri: ENVO:01001405 + ChemicalReaction: + name: ChemicalReaction + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ChemicalReaction + description: A process that leads to the transformation of one set of chemical + substances to another and that is the subject matter of a DataGeneratingActivity. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + mappings: + - SIO:010345 + exact_mappings: + - MOP:0000543 + - REX:0000002 + - AFP:0003711 + narrow_mappings: + - RXNO:0000329 + is_a: EvaluatedActivity + slots: + - id + - Activity_title + - Activity_description + - Activity_has_part + - Activity_had_input_entity + - Activity_had_output_entity + - Activity_had_input_activity + - Activity_carried_out_by + - Activity_has_qualitative_attribute + - Activity_has_quantitative_attribute + - Activity_part_of + - ClassifierMixin_type + - rdf_type + - EvaluatedActivity_other_identifier + - used_starting_material + - used_reactant + - generated_product + - used_catalyst + - used_solvent + - has_duration + - used_reactor + - ChemicalReaction_has_temperature + - ChemicalReaction_has_pressure + - has_yield + - has_reaction_step + - ChemicalReaction_related_resource slot_usage: - application_profile: - name: application_profile - description: An Application Profile that the Catalogued Resource's metadata - conforms to. - slot_uri: dcterms:conformsTo - range: Standard - required: false - recommended: true - multivalued: true - inlined_as_list: true - change_type: - name: change_type - description: The status of the catalogue record in the context of editorial - flow of the dataset and data service descriptions. - slot_uri: adms:status - range: Concept - required: false - recommended: true - multivalued: false - inlined_as_list: true - description: - name: description - description: A free-text account of the record. This property can be repeated - for parallel language versions of the description. - slot_uri: dcterms:description - range: string - required: false - multivalued: true - inlined_as_list: true - language: - name: language - description: A language used in the textual metadata describing titles, descriptions, - etc. of the Catalogued Resource. - slot_uri: dcterms:language - range: LinguisticSystem - required: false - multivalued: true - inlined_as_list: true - listing_date: - name: listing_date - description: The date on which the description of the Resource was included - in the Catalogue. - slot_uri: dcterms:issued - range: date - required: false - recommended: true - multivalued: false - inlined_as_list: true - modification_date: - name: modification_date - description: The most recent date on which the Catalogue entry was changed - or modified. - slot_uri: dcterms:modified - range: date - required: true - multivalued: false - inlined_as_list: false - primary_topic: - name: primary_topic - description: A link to the Dataset, Data service or Catalog described in the - record. - slot_uri: foaf:primaryTopic - range: Any - required: true - multivalued: false - inlined_as_list: false - any_of: - - range: Catalogue - - range: Dataset - - range: DatasetSeries - - range: DataService - source_metadata: - name: source_metadata - description: The original metadata that was used in creating metadata for - the Dataset, Data Service or Dataset Series. - slot_uri: dcterms:source - range: CatalogueRecord - required: false - multivalued: false + has_temperature: + name: has_temperature + description: The slot to specify the Temperature at which a ChemicalReaction + takes place. inlined_as_list: true - title: - name: title - description: A name given to the Catalogue Record. - slot_uri: dcterms:title - range: string - required: false + has_pressure: + name: has_pressure + description: The slot to specify the Pressure at which a ChemicalReaction + takes place. + related_resource: + name: related_resource + description: The slot to specify any Documents related to a ChemicalReaction. + range: Resource multivalued: true + inlined: true inlined_as_list: true - class_uri: dcat:CatalogRecord - Checksum: - name: Checksum - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Checksum - description: See [DCAT-AP specs:Checksum](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Checksum) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + class_uri: SIO:010345 + StartingMaterial: + name: StartingMaterial + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/StartingMaterial + description: A ChemicalSubstance with that has a starting material role in a synthesis. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + mappings: + - PROCO:0000029 + is_a: MaterialEntity + mixins: + - ChemicalSubstanceMixin + slots: + - Entity_title + - Entity_description + - id + - Entity_other_identifier + - has_qualitative_attribute + - has_quantitative_attribute + - Entity_part_of + - ClassifierMixin_type + - rdf_type + - MaterialEntity_has_part + - alternative_label + - has_physical_state + - has_temperature + - has_mass + - has_volume + - has_density + - has_pressure + - has_molar_equivalent + - has_concentration + - has_ph_value + - composed_of + - has_amount + class_uri: PROCO:0000029 + DissolvingSubstance: + name: DissolvingSubstance + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/DissolvingSubstance + description: A liquid ChemicalSubstance that dissolves or that is capable of dissolving + a ChemicalSubstance. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + aliases: + - solvent + mappings: + - SIO:010417 + exact_mappings: + - VOC4CAT:0007246 + - NCIT:C45790 + is_a: AgenticEntity + mixins: + - ChemicalSubstanceMixin + slots: + - id + - title + - description + - AgenticEntity_other_identifier + - has_qualitative_attribute + - has_quantitative_attribute + - AgenticEntity_has_part + - AgenticEntity_part_of + - ClassifierMixin_type + - rdf_type + - has_percentage_of_total + - alternative_label + - has_physical_state + - has_temperature + - has_mass + - has_volume + - has_density + - has_pressure + - has_concentration + - has_ph_value + - composed_of + - has_amount + class_uri: SIO:010417 + Reagent: + name: Reagent + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/Reagent + description: A ChemicalSubstance that is consumed or transformed in a ChemicalReaction. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ mappings: - - spdx:Checksum + - SIO:010411 + exact_mappings: + - NCIT:C802 + - VOC4CAT:0000101 + close_mappings: + - OBI:0001879 + - PROCO:0000029 + is_a: MaterialEntity + mixins: + - ChemicalSubstanceMixin slots: - - Checksum_algorithm - - Checksum_checksum_value - slot_usage: - algorithm: - name: algorithm - description: The algorithm used to produce the subject Checksum. - slot_uri: spdx:algorithm - range: ChecksumAlgorithm - required: true - multivalued: false - inlined_as_list: true - checksum_value: - name: checksum_value - description: A lower case hexadecimal encoded digest value produced using - a specific algorithm. - slot_uri: spdx:checksumValue - range: hexBinary - required: true - multivalued: false - inlined_as_list: true - class_uri: spdx:Checksum - ChecksumAlgorithm: - name: ChecksumAlgorithm - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/ChecksumAlgorithm - description: See [DCAT-AP specs:ChecksumAlgorithm](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#ChecksumAlgorithm) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - Entity_title + - Entity_description + - id + - Entity_other_identifier + - has_qualitative_attribute + - has_quantitative_attribute + - Entity_part_of + - ClassifierMixin_type + - rdf_type + - MaterialEntity_has_part + - alternative_label + - has_physical_state + - has_temperature + - has_mass + - has_volume + - has_density + - has_pressure + - has_molar_equivalent + - has_concentration + - has_ph_value + - composed_of + - has_amount + class_uri: SIO:010411 + ChemicalProduct: + name: ChemicalProduct + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ChemicalProduct + description: A chemical substance that is produced by a ChemicalReaction. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ mappings: - - spdx:ChecksumAlgorithm - is_a: SupportiveEntity + - NCIT:C48810 + close_mappings: + - ENVO:2000000 + is_a: MaterialEntity + mixins: + - ChemicalSubstanceMixin + slots: + - Entity_title + - Entity_description + - id + - Entity_other_identifier + - has_qualitative_attribute + - has_quantitative_attribute + - Entity_part_of + - ClassifierMixin_type + - rdf_type + - MaterialEntity_has_part + - alternative_label + - has_physical_state + - has_temperature + - has_mass + - has_volume + - has_density + - has_pressure + - has_concentration + - has_ph_value + - composed_of + - has_amount + class_uri: NCIT:C48810 + Catalyst: + name: Catalyst + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/Catalyst + description: A ChemicalSubstance or MaterialEntity that initiates or accelerates + a ChemicalReaction without itself being affected. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + mappings: + - SIO:010344 + exact_mappings: + - VOC4CAT:0000194 + close_mappings: + - CHEBI:35223 + is_a: AgenticEntity + mixins: + - ChemicalSubstanceMixin slots: + - id - title - description - class_uri: spdx:ChecksumAlgorithm - ClassifierMixin: - name: ClassifierMixin - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/ClassifierMixin - description: A mixin with which an entity of this schema can be classified via - an additional rdf:type or dcterms:type assertion. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - abstract: true - mixin: true - slots: + - AgenticEntity_other_identifier + - has_qualitative_attribute + - has_quantitative_attribute + - AgenticEntity_has_part + - AgenticEntity_part_of - ClassifierMixin_type - rdf_type - slot_usage: - type: - name: type - range: DefinedTerm - inlined: true - class_uri: dcatapplus:ClassifierMixin - Concept: - name: Concept - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Concept - description: See [DCAT-AP specs:Concept](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Concept) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - has_molar_equivalent + - alternative_label + - has_physical_state + - has_temperature + - has_mass + - has_volume + - has_density + - has_pressure + - has_concentration + - has_ph_value + - composed_of + - has_amount + class_uri: SIO:010344 + Reactor: + name: Reactor + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/Reactor + description: A reactor is a container for controlling a biological or chemical + reaction or process. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ mappings: - - skos:Concept - is_a: SupportiveEntity + - AFE:0000153 + exact_mappings: + - VOC4CAT:0007017 + is_a: Device + mixins: + - MaterialisticMixin slots: - - Concept_preferred_label + - id - title - description - slot_usage: - preferred_label: - name: preferred_label - description: A preferred label of the concept. - slot_uri: skos:prefLabel - range: string - required: true - multivalued: true - inlined_as_list: true - class_uri: skos:Concept - ConceptScheme: - name: ConceptScheme - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/ConceptScheme - description: See [DCAT-AP specs:ConceptScheme](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#ConceptScheme) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - has_qualitative_attribute + - has_quantitative_attribute + - AgenticEntity_part_of + - ClassifierMixin_type + - rdf_type + - Device_has_part + - Device_other_identifier + - alternative_label + - has_physical_state + - has_temperature + - has_mass + - has_volume + - has_density + - has_pressure + class_uri: AFE:0000153 + Yield: + name: Yield + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/Yield + description: A dimensionless physical quantity describing the fraction of a product + B that is formed from a reactant A taking into account the stoichiometry. If + A fully reacts to B without side-reactions, the yield of product B is 1 (or + 100 %). + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ mappings: - - skos:ConceptScheme - is_a: SupportiveEntity + - CHMO:0002855 + exact_mappings: + - VOC4CAT:0005005 + is_a: QuantitativeAttribute slots: - - ConceptScheme_title + - title - description - slot_usage: - title: - name: title - description: A name of the concept scheme. - slot_uri: dcterms:title - range: string - required: true - multivalued: true - inlined_as_list: true - class_uri: skos:ConceptScheme - DataAnalysis: - name: DataAnalysis - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/DataAnalysis - description: An Activity that evaluates the data produced by another Activity. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + - QuantitativeAttribute_value + - quantitativeAttribute__has_quantity_type + - quantitativeAttribute__unit + - ClassifierMixin_type + - rdf_type + class_uri: CHMO:0002855 + MolarEquivalent: + name: MolarEquivalent + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/MolarEquivalent + description: A dimensionless ratio that quantifies the stoichiometric proportion + of a chemical substance relative to a reference substance in a chemical reaction. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + mappings: + - qudt:Quantity + is_a: QuantitativeAttribute + slots: + - title + - description + - QuantitativeAttribute_value + - quantitativeAttribute__has_quantity_type + - quantitativeAttribute__unit + - ClassifierMixin_type + - rdf_type + class_uri: qudt:Quantity + PercentageOfTotal: + name: PercentageOfTotal + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/PercentageOfTotal + description: A dimensionless ratio that quantifies the stoichiometric proportion + of a chemical substance relative to a reference substance in a chemical reaction. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ mappings: - - prov:Activity - exact_mappings: - - OBI:0200000 - close_mappings: - - NCIT:C25391 - is_a: DataGeneratingActivity + - qudt:Quantity + is_a: QuantitativeAttribute slots: - - id - - Activity_title - - Activity_description - - Activity_other_identifier - - Activity_has_part - - Activity_had_input_entity - - Activity_had_output_entity - - Activity_had_input_activity - - Activity_carried_out_by - - Activity_has_qualitative_attribute - - Activity_has_quantitative_attribute - - Activity_part_of + - title + - description + - QuantitativeAttribute_value + - quantitativeAttribute__has_quantity_type + - quantitativeAttribute__unit - ClassifierMixin_type - rdf_type - - evaluated_activity - - realized_plan - - occurred_in - - DataAnalysis_evaluated_entity - slot_usage: - evaluated_entity: - name: evaluated_entity - description: A slot to provide the data that was analysed by the DataAnalysis. - range: AnalysisSourceData - multivalued: true - inlined_as_list: true - class_uri: prov:Activity - DataGeneratingActivity: - name: DataGeneratingActivity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/DataGeneratingActivity - description: An Activity (process) that has the objective to produce information - (in form of a dataset) about another Activity or Entity. + class_uri: qudt:Quantity + Activity: + name: Activity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Activity + description: See [DCAT-AP specs:Activity](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Activity) + notes: + - The specified properties (slots) of this class are part of our extension of + the DCAT-AP. in_subset: - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - prov:Activity - is_a: Activity + mixins: + - ClassifierMixin slots: - id - Activity_title @@ -16217,188 +16773,160 @@ classes: - Activity_part_of - ClassifierMixin_type - rdf_type - - evaluated_entity - - evaluated_activity - - realized_plan - - occurred_in - class_uri: prov:Activity - DataService: - name: DataService - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/DataService - description: See [DCAT-AP specs:DataService](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#DataService) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcat:DataService - slots: - - DataService_access_rights - - DataService_applicable_legislation - - DataService_conforms_to - - DataService_contact_point - - DataService_description - - DataService_documentation - - DataService_endpoint_URL - - DataService_endpoint_description - - DataService_format - - DataService_keyword - - DataService_landing_page - - DataService_licence - - DataService_publisher - - DataService_serves_dataset - - DataService_theme - - DataService_title slot_usage: - access_rights: - name: access_rights - description: Information regarding access or restrictions based on privacy, - security, or other policies. - slot_uri: dcterms:accessRights - range: RightsStatement - required: false - multivalued: false - inlined_as_list: true - applicable_legislation: - name: applicable_legislation - description: The legislation that mandates the creation or management of the - Data Service. - slot_uri: dcatap:applicableLegislation - range: LegalResource - required: false - multivalued: true - inlined_as_list: true - conforms_to: - name: conforms_to - description: An established (technical) standard to which the Data Service - conforms. - slot_uri: dcterms:conformsTo - range: Standard - required: false - recommended: true - multivalued: true - inlined_as_list: true - contact_point: - name: contact_point - description: Contact information that can be used for sending comments about - the Data Service. - slot_uri: dcat:contactPoint - range: Kind - required: false - recommended: true + title: + name: title + description: The slot to provide a title for the Activity. + notes: + - not in DCAT-AP multivalued: true inlined_as_list: true description: name: description - description: A free-text account of the Data Service. - slot_uri: dcterms:description - range: string - required: false - multivalued: true - inlined_as_list: true - documentation: - name: documentation - description: A page or document about this Data Service - slot_uri: foaf:page - range: Document - required: false - multivalued: true - inlined_as_list: true - endpoint_URL: - name: endpoint_URL - description: The root location or primary endpoint of the service (an IRI). - slot_uri: dcat:endpointURL - range: Resource - required: true - multivalued: true - inlined_as_list: true - endpoint_description: - name: endpoint_description - description: A description of the services available via the end-points, including - their operations, parameters etc. - slot_uri: dcat:endpointDescription - range: Resource - required: false - recommended: true + description: The slot to provide a description for the Activity. + notes: + - not in DCAT-AP multivalued: true inlined_as_list: true - format: - name: format - description: The structure that can be returned by querying the endpointURL. - slot_uri: dcterms:format - range: MediaTypeOrExtent - required: false + has_part: + name: has_part + description: The slot to provide an Activity that is part of the Activity. + notes: + - not in DCAT-AP + range: Activity multivalued: true inlined_as_list: true - keyword: - name: keyword - description: A keyword or tag describing the Data Service. - slot_uri: dcat:keyword - range: string - required: false - recommended: true + part_of: + name: part_of + description: The slot to provide an Activity of which the Activity is a part. + notes: + - not in DCAT-AP + range: Activity multivalued: true inlined_as_list: true - landing_page: - name: landing_page - description: A web page that provides access to the Data Service and/or additional - information. - slot_uri: dcat:landingPage - range: Document - required: false + other_identifier: + name: other_identifier + description: The slot to provide a secondary identifier of the Activity. + notes: + - not in DCAT-AP + range: Identifier multivalued: true inlined_as_list: true - licence: - name: licence - description: A licence under which the Data service is made available. - slot_uri: dcterms:license - range: LicenseDocument - required: false - multivalued: false + has_qualitative_attribute: + name: has_qualitative_attribute + notes: + - not in DCAT-AP + has_quantitative_attribute: + name: has_quantitative_attribute + notes: + - not in DCAT-AP + had_input_entity: + name: had_input_entity + notes: + - not in DCAT-AP + had_output_entity: + name: had_output_entity + notes: + - not in DCAT-AP + had_input_activity: + name: had_input_activity + notes: + - not in DCAT-AP + carried_out_by: + name: carried_out_by + notes: + - not in DCAT-AP + class_uri: prov:Activity + Agent: + name: Agent + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Agent + description: See [DCAT-AP specs:Agent](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Agent) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - foaf:Agent + slots: + - Agent_name + - Agent_type + slot_usage: + name: + name: name + description: A name of the agent. + slot_uri: foaf:name + range: string + required: true + multivalued: true inlined_as_list: true - publisher: - name: publisher - description: An entity (organisation) responsible for making the Data Service - available. - slot_uri: dcterms:publisher - range: Agent + type: + name: type + description: The nature of the agent. + slot_uri: dcterms:type + range: Concept required: false + recommended: true multivalued: false inlined_as_list: true - serves_dataset: - name: serves_dataset - description: This property refers to a collection of data that this data service - can distribute. - slot_uri: dcat:servesDataset - range: Dataset - required: false + class_uri: foaf:Agent + AgenticEntity: + name: AgenticEntity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/AgenticEntity + description: An entity that is somehow responsible for an Activity to take place. + in_subset: + - domain_agnostic_core + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - prov:Agent + mixins: + - ClassifierMixin + slots: + - id + - title + - description + - AgenticEntity_other_identifier + - has_qualitative_attribute + - has_quantitative_attribute + - AgenticEntity_has_part + - AgenticEntity_part_of + - ClassifierMixin_type + - rdf_type + slot_usage: + has_part: + name: has_part + description: The slot to specify parts of an AgenticEntity that are themselves + AgenticEntities. + range: AgenticEntity multivalued: true + inlined: true inlined_as_list: true - theme: - name: theme - description: A category of the Data Service. - slot_uri: dcat:theme - range: Concept - required: false - recommended: true + part_of: + name: part_of + description: The slot to provide the AgenticEntity of which theAgenticEntity + is a part. + notes: + - not in DCAT-AP + range: AgenticEntity multivalued: true inlined_as_list: true - title: - name: title - description: A name given to the Data Service. - slot_uri: dcterms:title - range: string - required: true + other_identifier: + name: other_identifier + description: A slot to provide a secondary identifier for an Instrument. + range: Identifier + required: false multivalued: true inlined_as_list: true - class_uri: dcat:DataService - Dataset: - name: Dataset - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Dataset - description: A collection of data, published or curated by a single agent, and - available for access or download in one or more representations. + class_uri: prov:Agent + AnalysisDataset: + name: AnalysisDataset + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/AnalysisDataset + description: A Dataset that was generated by an analysis of some previously generated + data. For example, a dataset that contains the data of an assignment of a chemical + structure to a sample based on the spectral data obtained from the sample is + an AnalyticalDataset. in_subset: - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - dcat:Dataset + is_a: Dataset slots: - Dataset_access_rights - Dataset_applicable_legislation @@ -16435,1148 +16963,1500 @@ classes: - Dataset_type - Dataset_version - Dataset_version_notes - - Dataset_was_generated_by - id - is_about_entity - is_about_activity + - AnalysisDataset_was_generated_by slot_usage: - access_rights: - name: access_rights - description: Information that indicates whether the Dataset is publicly accessible, - has access restrictions or is not public. - slot_uri: dcterms:accessRights - range: RightsStatement - required: false - multivalued: false + was_generated_by: + name: was_generated_by + range: DataAnalysis + multivalued: true + inlined_as_list: true + class_uri: dcat:Dataset + AnalysisSourceData: + name: AnalysisSourceData + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/AnalysisSourceData + description: Information that was evaluated within a DataAnalysis. + in_subset: + - domain_agnostic_core + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - prov:Entity + is_a: EvaluatedEntity + slots: + - id + - has_qualitative_attribute + - has_quantitative_attribute + - Entity_has_part + - Entity_part_of + - ClassifierMixin_type + - rdf_type + - EvaluatedEntity_title + - EvaluatedEntity_description + - EvaluatedEntity_other_identifier + - AnalysisSourceData_was_generated_by + slot_usage: + was_generated_by: + name: was_generated_by + description: A slot to provide the Activity which created the AnalysisSourceData. + range: DataGeneratingActivity + multivalued: true inlined_as_list: true + class_uri: prov:Entity + Any: + name: Any + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Any + description: This abstract class is needed to create the union of Dataset, DatasetSeries, + Catalogue and DataService for the range of the slot [primary_topic](https://nfdi-de.github.io/chem-dcat-ap/elements/primary_topic/). + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - linkml:Any + slots: + - title + - description + class_uri: linkml:Any + Attribution: + name: Attribution + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Attribution + description: See [DCAT-AP specs:Attribution](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Attribution) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - prov:Attribution + is_a: SupportiveEntity + slots: + - title + - description + class_uri: prov:Attribution + Catalogue: + name: Catalogue + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Catalogue + description: See [DCAT-AP specs:Catalogue](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Catalogue) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcat:Catalog + slots: + - Catalogue_applicable_legislation + - Catalogue_catalogue + - Catalogue_creator + - Catalogue_description + - Catalogue_geographical_coverage + - Catalogue_has_dataset + - Catalogue_has_part + - Catalogue_homepage + - Catalogue_language + - Catalogue_licence + - Catalogue_modification_date + - Catalogue_publisher + - Catalogue_record + - Catalogue_release_date + - Catalogue_rights + - Catalogue_service + - Catalogue_temporal_coverage + - Catalogue_themes + - Catalogue_title + slot_usage: applicable_legislation: name: applicable_legislation description: The legislation that mandates the creation or management of the - Dataset. + Catalog. slot_uri: dcatap:applicableLegislation range: LegalResource required: false multivalued: true inlined_as_list: true - conforms_to: - name: conforms_to - description: An implementing rule or other specification. - slot_uri: dcterms:conformsTo - range: Standard - required: false - multivalued: true - inlined_as_list: true - contact_point: - name: contact_point - description: Contact information that can be used for sending comments about - the Dataset. - slot_uri: dcat:contactPoint - range: Kind - required: false - recommended: true - multivalued: true - inlined_as_list: true - creator: - name: creator - description: An entity responsible for producing the dataset. - slot_uri: dcterms:creator - range: Agent - required: false - multivalued: true - inlined_as_list: true - dataset_distribution: - name: dataset_distribution - description: An available Distribution for the Dataset. - slot_uri: dcat:distribution - range: Distribution - required: false - multivalued: true - inlined_as_list: true - description: - name: description - description: A free-text account of the Dataset. - slot_uri: dcterms:description - range: string - required: true - multivalued: true - inlined_as_list: true - documentation: - name: documentation - description: A page or document about this Dataset. - slot_uri: foaf:page - range: Document - required: false - multivalued: true - inlined_as_list: true - frequency: - name: frequency - description: The frequency at which the Dataset is updated. - slot_uri: dcterms:accrualPeriodicity - range: Frequency - required: false - multivalued: false - inlined_as_list: false - geographical_coverage: - name: geographical_coverage - description: A geographic region that is covered by the Dataset. - slot_uri: dcterms:spatial - range: Location + catalogue: + name: catalogue + description: A catalogue whose contents are of interest in the context of + this catalogue. + slot_uri: dcat:catalog + range: Catalogue required: false multivalued: true inlined_as_list: true - has_version: - name: has_version - description: A related Dataset that is a version, edition, or adaptation of - the described Dataset. - slot_uri: dcat:hasVersion - range: Dataset + creator: + name: creator + description: An entity responsible for the creation of the catalogue. + slot_uri: dcterms:creator + range: Agent required: false - multivalued: true + multivalued: false inlined_as_list: true - identifier: - name: identifier - description: The main identifier for the Dataset, e.g. the URI or other unique - identifier in the context of the Catalogue. - slot_uri: dcterms:identifier + description: + name: description + description: A free-text account of the Catalogue. + slot_uri: dcterms:description range: string - required: false + required: true multivalued: true inlined_as_list: true - in_series: - name: in_series - description: A dataset series of which the dataset is part. - slot_uri: dcat:inSeries - range: DatasetSeries + geographical_coverage: + name: geographical_coverage + description: A geographical area covered by the Catalogue. + slot_uri: dcterms:spatial + range: Location required: false multivalued: true inlined_as_list: true - is_referenced_by: - name: is_referenced_by - description: A related resource, such as a publication, that references, cites, - or otherwise points to the dataset. - slot_uri: dcterms:isReferencedBy - range: Resource + has_dataset: + name: has_dataset + description: A Dataset that is part of the Catalogue. + slot_uri: dcat:dataset + range: Dataset required: false multivalued: true inlined_as_list: true - keyword: - name: keyword - description: A keyword or tag describing the Dataset. - slot_uri: dcat:keyword - range: string + has_part: + name: has_part + description: A related Catalogue that is part of the described Catalogue. + slot_uri: dcterms:hasPart + range: Catalogue required: false - recommended: true multivalued: true inlined_as_list: true - landing_page: - name: landing_page - description: A web page that provides access to the Dataset, its Distributions - and/or additional information. - slot_uri: dcat:landingPage + homepage: + name: homepage + description: A web page that acts as the main page for the Catalogue. + slot_uri: foaf:homepage range: Document required: false - multivalued: true + recommended: true + multivalued: false inlined_as_list: true language: name: language - description: A language of the Dataset. + description: A language used in the textual metadata describing titles, descriptions, + etc. of the Datasets in the Catalogue. slot_uri: dcterms:language range: LinguisticSystem required: false + recommended: true multivalued: true inlined_as_list: true + licence: + name: licence + description: A licence under which the Catalogue can be used or reused. + slot_uri: dcterms:license + range: LicenseDocument + required: false + multivalued: false + inlined_as_list: true modification_date: name: modification_date - description: The most recent date on which the Dataset was changed or modified. + description: The most recent date on which the Catalogue was modified. slot_uri: dcterms:modified range: date required: false + recommended: true multivalued: false inlined_as_list: false - other_identifier: - name: other_identifier - description: A secondary identifier of the Dataset - slot_uri: adms:identifier - range: Identifier - required: false - multivalued: true - inlined_as_list: true - provenance: - name: provenance - description: A statement about the lineage of a Dataset. - slot_uri: dcterms:provenance - range: ProvenanceStatement - required: false - multivalued: true - inlined_as_list: true publisher: name: publisher - description: An entity (organisation) responsible for making the Dataset available. + description: An entity (organisation) responsible for making the Catalogue + available. slot_uri: dcterms:publisher range: Agent - required: false + required: true multivalued: false inlined_as_list: true - qualified_attribution: - name: qualified_attribution - description: An Agent having some form of responsibility for the resource. - slot_uri: prov:qualifiedAttribution - range: Attribution - required: false - multivalued: true - inlined_as_list: true - qualified_relation: - name: qualified_relation - description: A description of a relationship with another resource. - slot_uri: dcat:qualifiedRelation - range: Relationship - required: false - multivalued: true - inlined_as_list: true - related_resource: - name: related_resource - description: A related resource. - slot_uri: dcterms:relation - range: Resource + record: + name: record + description: A Catalogue Record that is part of the Catalogue. + slot_uri: dcat:record + range: CatalogueRecord required: false multivalued: true inlined_as_list: true release_date: name: release_date - description: The date of formal issuance (e.g., publication) of the Dataset. + description: The date of formal issuance (e.g., publication) of the Catalogue. slot_uri: dcterms:issued range: date required: false + recommended: true multivalued: false inlined_as_list: false - sample: - name: sample - description: A sample distribution of the dataset. - slot_uri: adms:sample - range: Distribution + rights: + name: rights + description: A statement that specifies rights associated with the Catalogue. + slot_uri: dcterms:rights + range: RightsStatement required: false - multivalued: true + multivalued: false inlined_as_list: true - source: - name: source - description: A related Dataset from which the described Dataset is derived. - slot_uri: dcterms:source - range: Dataset + service: + name: service + description: A site or end-point (Data Service) that is listed in the Catalogue. + slot_uri: dcat:service + range: DataService required: false multivalued: true inlined_as_list: true - spatial_resolution: - name: spatial_resolution - description: The minimum spatial separation resolvable in a dataset, measured - in meters. - slot_uri: dcat:spatialResolutionInMeters - range: decimal - required: false - multivalued: false - inlined_as_list: false temporal_coverage: name: temporal_coverage - description: A temporal period that the Dataset covers. + description: A temporal period that the Catalogue covers. slot_uri: dcterms:temporal range: PeriodOfTime required: false multivalued: true inlined_as_list: true - temporal_resolution: - name: temporal_resolution - description: The minimum time period resolvable in the dataset. - slot_uri: dcat:temporalResolution - range: duration + themes: + name: themes + description: A knowledge organization system used to classify the Resources + that are in the Catalogue. + slot_uri: dcat:themeTaxonomy + range: ConceptScheme + required: false + recommended: true + multivalued: true + inlined_as_list: true + title: + name: title + description: A name given to the Catalogue. + slot_uri: dcterms:title + range: string + required: true + multivalued: true + inlined_as_list: true + class_uri: dcat:Catalog + CatalogueRecord: + name: CatalogueRecord + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/CatalogueRecord + description: See [DCAT-AP specs:CatalogueRecord](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#CatalogueRecord) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcat:CatalogRecord + slots: + - CatalogueRecord_application_profile + - CatalogueRecord_change_type + - CatalogueRecord_description + - CatalogueRecord_language + - CatalogueRecord_listing_date + - CatalogueRecord_modification_date + - CatalogueRecord_primary_topic + - CatalogueRecord_source_metadata + - CatalogueRecord_title + slot_usage: + application_profile: + name: application_profile + description: An Application Profile that the Catalogued Resource's metadata + conforms to. + slot_uri: dcterms:conformsTo + range: Standard + required: false + recommended: true + multivalued: true + inlined_as_list: true + change_type: + name: change_type + description: The status of the catalogue record in the context of editorial + flow of the dataset and data service descriptions. + slot_uri: adms:status + range: Concept + required: false + recommended: true + multivalued: false + inlined_as_list: true + description: + name: description + description: A free-text account of the record. This property can be repeated + for parallel language versions of the description. + slot_uri: dcterms:description + range: string + required: false + multivalued: true + inlined_as_list: true + language: + name: language + description: A language used in the textual metadata describing titles, descriptions, + etc. of the Catalogued Resource. + slot_uri: dcterms:language + range: LinguisticSystem + required: false + multivalued: true + inlined_as_list: true + listing_date: + name: listing_date + description: The date on which the description of the Resource was included + in the Catalogue. + slot_uri: dcterms:issued + range: date required: false + recommended: true multivalued: false inlined_as_list: true - theme: - name: theme - description: A category of the Dataset. - slot_uri: dcat:theme - range: Concept + modification_date: + name: modification_date + description: The most recent date on which the Catalogue entry was changed + or modified. + slot_uri: dcterms:modified + range: date + required: true + multivalued: false + inlined_as_list: false + primary_topic: + name: primary_topic + description: A link to the Dataset, Data service or Catalog described in the + record. + slot_uri: foaf:primaryTopic + range: Any + required: true + multivalued: false + inlined_as_list: false + any_of: + - range: Catalogue + - range: Dataset + - range: DatasetSeries + - range: DataService + source_metadata: + name: source_metadata + description: The original metadata that was used in creating metadata for + the Dataset, Data Service or Dataset Series. + slot_uri: dcterms:source + range: CatalogueRecord required: false - recommended: true - multivalued: true + multivalued: false inlined_as_list: true title: name: title - description: A name given to the Dataset. + description: A name given to the Catalogue Record. slot_uri: dcterms:title range: string - required: true - multivalued: true - inlined_as_list: true - type: - name: type - description: A type of the Dataset. - slot_uri: dcterms:type - range: Concept required: false multivalued: true inlined_as_list: true - version: - name: version - description: The version indicator (name or identifier) of a resource. - slot_uri: dcat:version - range: string - required: false + class_uri: dcat:CatalogRecord + Checksum: + name: Checksum + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Checksum + description: See [DCAT-AP specs:Checksum](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Checksum) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - spdx:Checksum + slots: + - Checksum_algorithm + - Checksum_checksum_value + slot_usage: + algorithm: + name: algorithm + description: The algorithm used to produce the subject Checksum. + slot_uri: spdx:algorithm + range: ChecksumAlgorithm + required: true multivalued: false inlined_as_list: true - version_notes: - name: version_notes - description: A description of the differences between this version and a previous - version of the Dataset. - slot_uri: adms:versionNotes + checksum_value: + name: checksum_value + description: A lower case hexadecimal encoded digest value produced using + a specific algorithm. + slot_uri: spdx:checksumValue + range: hexBinary + required: true + multivalued: false + inlined_as_list: true + class_uri: spdx:Checksum + ChecksumAlgorithm: + name: ChecksumAlgorithm + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/ChecksumAlgorithm + description: See [DCAT-AP specs:ChecksumAlgorithm](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#ChecksumAlgorithm) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - spdx:ChecksumAlgorithm + is_a: SupportiveEntity + slots: + - title + - description + class_uri: spdx:ChecksumAlgorithm + ClassifierMixin: + name: ClassifierMixin + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/ClassifierMixin + description: A mixin with which an entity of this schema can be classified via + an additional rdf:type or dcterms:type assertion. + in_subset: + - domain_agnostic_core + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + abstract: true + mixin: true + slots: + - ClassifierMixin_type + - rdf_type + slot_usage: + type: + name: type + range: DefinedTerm + inlined: true + class_uri: dcatapplus:ClassifierMixin + Concept: + name: Concept + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Concept + description: See [DCAT-AP specs:Concept](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Concept) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - skos:Concept + is_a: SupportiveEntity + slots: + - Concept_preferred_label + - title + - description + slot_usage: + preferred_label: + name: preferred_label + description: A preferred label of the concept. + slot_uri: skos:prefLabel range: string - required: false + required: true multivalued: true inlined_as_list: true - was_generated_by: - name: was_generated_by - description: An activity that generated, or provides the business context - for, the creation of the dataset. - notes: - - stricter than DCAT-AP - slot_uri: prov:wasGeneratedBy - range: DataGeneratingActivity + class_uri: skos:Concept + ConceptScheme: + name: ConceptScheme + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/ConceptScheme + description: See [DCAT-AP specs:ConceptScheme](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#ConceptScheme) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - skos:ConceptScheme + is_a: SupportiveEntity + slots: + - ConceptScheme_title + - description + slot_usage: + title: + name: title + description: A name of the concept scheme. + slot_uri: dcterms:title + range: string required: true multivalued: true inlined_as_list: true - class_uri: dcat:Dataset - DatasetSeries: - name: DatasetSeries - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/DatasetSeries - description: See [DCAT-AP specs:DatasetSeries](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#DatasetSeries) + class_uri: skos:ConceptScheme + DataAnalysis: + name: DataAnalysis + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/DataAnalysis + description: An Activity that evaluates the data produced by another Activity. + in_subset: + - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:DatasetSeries + - prov:Activity + exact_mappings: + - OBI:0200000 + close_mappings: + - NCIT:C25391 + is_a: DataGeneratingActivity slots: - - DatasetSeries_applicable_legislation - - DatasetSeries_contact_point - - DatasetSeries_description - - DatasetSeries_frequency - - DatasetSeries_geographical_coverage - - DatasetSeries_modification_date - - DatasetSeries_publisher - - DatasetSeries_release_date - - DatasetSeries_temporal_coverage - - DatasetSeries_title + - id + - Activity_title + - Activity_description + - Activity_other_identifier + - Activity_has_part + - Activity_had_input_entity + - Activity_had_output_entity + - Activity_had_input_activity + - Activity_carried_out_by + - Activity_has_qualitative_attribute + - Activity_has_quantitative_attribute + - Activity_part_of + - ClassifierMixin_type + - rdf_type + - evaluated_activity + - realized_plan + - occurred_in + - DataAnalysis_evaluated_entity + slot_usage: + evaluated_entity: + name: evaluated_entity + description: A slot to provide the data that was analysed by the DataAnalysis. + range: AnalysisSourceData + multivalued: true + inlined_as_list: true + class_uri: prov:Activity + DataGeneratingActivity: + name: DataGeneratingActivity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/DataGeneratingActivity + description: An Activity (process) that has the objective to produce information + (in form of a dataset) about another Activity or Entity. + in_subset: + - domain_agnostic_core + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - prov:Activity + is_a: Activity + slots: + - id + - Activity_title + - Activity_description + - Activity_other_identifier + - Activity_has_part + - Activity_had_input_entity + - Activity_had_output_entity + - Activity_had_input_activity + - Activity_carried_out_by + - Activity_has_qualitative_attribute + - Activity_has_quantitative_attribute + - Activity_part_of + - ClassifierMixin_type + - rdf_type + - evaluated_entity + - evaluated_activity + - realized_plan + - occurred_in + class_uri: prov:Activity + DataService: + name: DataService + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/DataService + description: See [DCAT-AP specs:DataService](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#DataService) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcat:DataService + slots: + - DataService_access_rights + - DataService_applicable_legislation + - DataService_conforms_to + - DataService_contact_point + - DataService_description + - DataService_documentation + - DataService_endpoint_URL + - DataService_endpoint_description + - DataService_format + - DataService_keyword + - DataService_landing_page + - DataService_licence + - DataService_publisher + - DataService_serves_dataset + - DataService_theme + - DataService_title slot_usage: + access_rights: + name: access_rights + description: Information regarding access or restrictions based on privacy, + security, or other policies. + slot_uri: dcterms:accessRights + range: RightsStatement + required: false + multivalued: false + inlined_as_list: true applicable_legislation: name: applicable_legislation description: The legislation that mandates the creation or management of the - Dataset Series. + Data Service. slot_uri: dcatap:applicableLegislation range: LegalResource required: false multivalued: true inlined_as_list: true + conforms_to: + name: conforms_to + description: An established (technical) standard to which the Data Service + conforms. + slot_uri: dcterms:conformsTo + range: Standard + required: false + recommended: true + multivalued: true + inlined_as_list: true contact_point: name: contact_point description: Contact information that can be used for sending comments about - the Dataset Series. + the Data Service. slot_uri: dcat:contactPoint range: Kind required: false + recommended: true multivalued: true inlined_as_list: true description: name: description - description: A free-text account of the Dataset Series. + description: A free-text account of the Data Service. slot_uri: dcterms:description range: string + required: false + multivalued: true + inlined_as_list: true + documentation: + name: documentation + description: A page or document about this Data Service + slot_uri: foaf:page + range: Document + required: false + multivalued: true + inlined_as_list: true + endpoint_URL: + name: endpoint_URL + description: The root location or primary endpoint of the service (an IRI). + slot_uri: dcat:endpointURL + range: Resource required: true multivalued: true inlined_as_list: true - frequency: - name: frequency - description: The frequency at which the Dataset Series is updated. - slot_uri: dcterms:accrualPeriodicity - range: Frequency + endpoint_description: + name: endpoint_description + description: A description of the services available via the end-points, including + their operations, parameters etc. + slot_uri: dcat:endpointDescription + range: Resource required: false - multivalued: false - inlined_as_list: false - geographical_coverage: - name: geographical_coverage - description: A geographic region that is covered by the Dataset Series. - slot_uri: dcterms:spatial - range: Location + recommended: true + multivalued: true + inlined_as_list: true + format: + name: format + description: The structure that can be returned by querying the endpointURL. + slot_uri: dcterms:format + range: MediaTypeOrExtent required: false multivalued: true inlined_as_list: true - modification_date: - name: modification_date - description: The most recent date on which the Dataset Series was changed - or modified. - slot_uri: dcterms:modified - range: date + keyword: + name: keyword + description: A keyword or tag describing the Data Service. + slot_uri: dcat:keyword + range: string + required: false + recommended: true + multivalued: true + inlined_as_list: true + landing_page: + name: landing_page + description: A web page that provides access to the Data Service and/or additional + information. + slot_uri: dcat:landingPage + range: Document + required: false + multivalued: true + inlined_as_list: true + licence: + name: licence + description: A licence under which the Data service is made available. + slot_uri: dcterms:license + range: LicenseDocument required: false multivalued: false - inlined_as_list: false + inlined_as_list: true publisher: name: publisher - description: 'An entity (organisation) responsible for ensuring the coherency - of the Dataset Series ' + description: An entity (organisation) responsible for making the Data Service + available. slot_uri: dcterms:publisher range: Agent required: false multivalued: false inlined_as_list: true - release_date: - name: release_date - description: The date of formal issuance (e.g., publication) of the Dataset - Series. - slot_uri: dcterms:issued - range: date + serves_dataset: + name: serves_dataset + description: This property refers to a collection of data that this data service + can distribute. + slot_uri: dcat:servesDataset + range: Dataset required: false - multivalued: false - inlined_as_list: false - temporal_coverage: - name: temporal_coverage - description: A temporal period that the Dataset Series covers. - slot_uri: dcterms:temporal - range: PeriodOfTime + multivalued: true + inlined_as_list: true + theme: + name: theme + description: A category of the Data Service. + slot_uri: dcat:theme + range: Concept required: false + recommended: true multivalued: true inlined_as_list: true title: name: title - description: A name given to the Dataset Series. + description: A name given to the Data Service. slot_uri: dcterms:title range: string required: true multivalued: true inlined_as_list: true - class_uri: dcat:DatasetSeries - DefinedTerm: - name: DefinedTerm - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/DefinedTerm - description: A word, name, acronym or phrase that is defined in a controlled vocabulary - (CV) and that is used to provide an additional rdf:type or dcterms:type of a - class within this schema. - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - schema:DefinedTerm - slots: - - id - - DefinedTerm_title - - definedTerm__from_CV - slot_usage: - title: - name: title - slot_uri: schema:name - attributes: - from_CV: - name: from_CV - description: The URL of the controlled vocabulary. - slot_uri: schema:inDefinedTermSet - range: uriorcurie - class_uri: schema:DefinedTerm - Device: - name: Device - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Device - description: A material instrument that is designed to perform a function primarily - by means of its mechanical or electrical nature. + class_uri: dcat:DataService + Dataset: + name: Dataset + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Dataset + description: A collection of data, published or curated by a single agent, and + available for access or download in one or more representations. in_subset: - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - aliases: - - hardware instrument - mappings: - - prov:Agent - exact_mappings: - - epos:Equipment - - OBI:0000968 - - http://purl.obolibrary.org/obo/NCIT_C62103 - - http://semanticscience.org/resource/SIO_000956 - - http://purl.allotrope.org/ontologies/equipment#AFE_0000354 - is_a: AgenticEntity - slots: - - id - - title - - description - - has_qualitative_attribute - - has_quantitative_attribute - - AgenticEntity_part_of - - ClassifierMixin_type - - rdf_type - - Device_has_part - - Device_other_identifier - slot_usage: - has_part: - name: has_part - description: The slot to specify parts of a Device that are themselves Devices. - range: Device - multivalued: true - inlined: true - inlined_as_list: true - other_identifier: - name: other_identifier - description: A slot to provide a secondary identifier for a Device. - range: Identifier - required: false - multivalued: true - inlined_as_list: true - class_uri: prov:Agent - Distribution: - name: Distribution - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Distribution - description: See [DCAT-AP specs:Distribution](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Distribution) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcat:Distribution + - dcat:Dataset slots: - - Distribution_access_URL - - Distribution_access_service - - Distribution_applicable_legislation - - Distribution_availability - - Distribution_byte_size - - Distribution_checksum - - Distribution_compression_format - - Distribution_description - - Distribution_documentation - - Distribution_download_URL - - Distribution_format - - Distribution_has_policy - - Distribution_language - - Distribution_licence - - Distribution_linked_schemas - - Distribution_media_type - - Distribution_modification_date - - Distribution_packaging_format - - Distribution_release_date - - Distribution_rights - - Distribution_spatial_resolution - - Distribution_status - - Distribution_temporal_resolution - - Distribution_title + - Dataset_access_rights + - Dataset_applicable_legislation + - Dataset_conforms_to + - Dataset_contact_point + - Dataset_creator + - Dataset_dataset_distribution + - Dataset_description + - Dataset_documentation + - Dataset_frequency + - Dataset_geographical_coverage + - Dataset_has_version + - Dataset_identifier + - Dataset_in_series + - Dataset_is_referenced_by + - Dataset_keyword + - Dataset_landing_page + - Dataset_language + - Dataset_modification_date + - Dataset_other_identifier + - Dataset_provenance + - Dataset_publisher + - Dataset_qualified_attribution + - Dataset_qualified_relation + - Dataset_related_resource + - Dataset_release_date + - Dataset_sample + - Dataset_source + - Dataset_spatial_resolution + - Dataset_temporal_coverage + - Dataset_temporal_resolution + - Dataset_theme + - Dataset_title + - Dataset_type + - Dataset_version + - Dataset_version_notes + - Dataset_was_generated_by + - id + - is_about_entity + - is_about_activity slot_usage: - access_URL: - name: access_URL - description: A URL that gives access to a Distribution of the Dataset. - slot_uri: dcat:accessURL - range: Resource - required: true - multivalued: true - inlined_as_list: true - access_service: - name: access_service - description: A data service that gives access to the distribution of the dataset. - slot_uri: dcat:accessService - range: DataService + access_rights: + name: access_rights + description: Information that indicates whether the Dataset is publicly accessible, + has access restrictions or is not public. + slot_uri: dcterms:accessRights + range: RightsStatement required: false - multivalued: true + multivalued: false inlined_as_list: true applicable_legislation: name: applicable_legislation description: The legislation that mandates the creation or management of the - Distribution. + Dataset. slot_uri: dcatap:applicableLegislation range: LegalResource required: false multivalued: true inlined_as_list: true - availability: - name: availability - description: An indication how long it is planned to keep the Distribution - of the Dataset available. - slot_uri: dcatap:availability - range: Concept + conforms_to: + name: conforms_to + description: An implementing rule or other specification. + slot_uri: dcterms:conformsTo + range: Standard required: false - recommended: true - multivalued: false - inlined_as_list: false - byte_size: - name: byte_size - description: The size of a Distribution in bytes. - slot_uri: dcat:byteSize - range: nonNegativeInteger + multivalued: true + inlined_as_list: true + contact_point: + name: contact_point + description: Contact information that can be used for sending comments about + the Dataset. + slot_uri: dcat:contactPoint + range: Kind required: false - multivalued: false - inlined_as_list: false - checksum: - name: checksum - description: A mechanism that can be used to verify that the contents of a - distribution have not changed. - slot_uri: spdx:checksum - range: Checksum + recommended: true + multivalued: true + inlined_as_list: true + creator: + name: creator + description: An entity responsible for producing the dataset. + slot_uri: dcterms:creator + range: Agent required: false - multivalued: false + multivalued: true inlined_as_list: true - compression_format: - name: compression_format - description: The format of the file in which the data is contained in a compressed - form, e.g. to reduce the size of the downloadable file. - slot_uri: dcat:compressFormat - range: MediaType + dataset_distribution: + name: dataset_distribution + description: An available Distribution for the Dataset. + slot_uri: dcat:distribution + range: Distribution required: false - multivalued: false + multivalued: true inlined_as_list: true description: name: description - description: A free-text account of the Distribution. + description: A free-text account of the Dataset. slot_uri: dcterms:description range: string - required: false - recommended: true + required: true multivalued: true inlined_as_list: true documentation: name: documentation - description: A page or document about this Distribution. + description: A page or document about this Dataset. slot_uri: foaf:page range: Document required: false multivalued: true inlined_as_list: true - download_URL: - name: download_URL - description: A URL that is a direct link to a downloadable file in a given - format. - slot_uri: dcat:downloadURL - range: Resource + frequency: + name: frequency + description: The frequency at which the Dataset is updated. + slot_uri: dcterms:accrualPeriodicity + range: Frequency + required: false + multivalued: false + inlined_as_list: false + geographical_coverage: + name: geographical_coverage + description: A geographic region that is covered by the Dataset. + slot_uri: dcterms:spatial + range: Location required: false multivalued: true inlined_as_list: true - format: - name: format - description: The file format of the Distribution. - slot_uri: dcterms:format - range: MediaTypeOrExtent + has_version: + name: has_version + description: A related Dataset that is a version, edition, or adaptation of + the described Dataset. + slot_uri: dcat:hasVersion + range: Dataset required: false - recommended: true - multivalued: false + multivalued: true inlined_as_list: true - has_policy: - name: has_policy - description: The policy expressing the rights associated with the distribution - if using the [[ODRL]] vocabulary. - slot_uri: odrl:hasPolicy - range: Policy + identifier: + name: identifier + description: The main identifier for the Dataset, e.g. the URI or other unique + identifier in the context of the Catalogue. + slot_uri: dcterms:identifier + range: string required: false - multivalued: false + multivalued: true inlined_as_list: true - language: - name: language - description: A language used in the Distribution. - slot_uri: dcterms:language - range: LinguisticSystem + in_series: + name: in_series + description: A dataset series of which the dataset is part. + slot_uri: dcat:inSeries + range: DatasetSeries required: false multivalued: true inlined_as_list: true - licence: - name: licence - description: A licence under which the Distribution is made available. - slot_uri: dcterms:license - range: LicenseDocument + is_referenced_by: + name: is_referenced_by + description: A related resource, such as a publication, that references, cites, + or otherwise points to the dataset. + slot_uri: dcterms:isReferencedBy + range: Resource required: false - multivalued: false + multivalued: true inlined_as_list: true - linked_schemas: - name: linked_schemas - description: An established schema to which the described Distribution conforms. - slot_uri: dcterms:conformsTo - range: Standard + keyword: + name: keyword + description: A keyword or tag describing the Dataset. + slot_uri: dcat:keyword + range: string required: false + recommended: true multivalued: true inlined_as_list: true - media_type: - name: media_type - description: The media type of the Distribution as defined in the official - register of media types managed by IANA. - slot_uri: dcat:mediaType - range: MediaType + landing_page: + name: landing_page + description: A web page that provides access to the Dataset, its Distributions + and/or additional information. + slot_uri: dcat:landingPage + range: Document required: false - multivalued: false - inlined_as_list: false + multivalued: true + inlined_as_list: true + language: + name: language + description: A language of the Dataset. + slot_uri: dcterms:language + range: LinguisticSystem + required: false + multivalued: true + inlined_as_list: true modification_date: name: modification_date - description: The most recent date on which the Distribution was changed or - modified. + description: The most recent date on which the Dataset was changed or modified. slot_uri: dcterms:modified range: date required: false multivalued: false inlined_as_list: false - packaging_format: - name: packaging_format - description: The format of the file in which one or more data files are grouped - together, e.g. to enable a set of related files to be downloaded together. - slot_uri: dcat:packageFormat - range: MediaType + other_identifier: + name: other_identifier + description: A secondary identifier of the Dataset + slot_uri: adms:identifier + range: Identifier + required: false + multivalued: true + inlined_as_list: true + provenance: + name: provenance + description: A statement about the lineage of a Dataset. + slot_uri: dcterms:provenance + range: ProvenanceStatement + required: false + multivalued: true + inlined_as_list: true + publisher: + name: publisher + description: An entity (organisation) responsible for making the Dataset available. + slot_uri: dcterms:publisher + range: Agent required: false multivalued: false inlined_as_list: true + qualified_attribution: + name: qualified_attribution + description: An Agent having some form of responsibility for the resource. + slot_uri: prov:qualifiedAttribution + range: Attribution + required: false + multivalued: true + inlined_as_list: true + qualified_relation: + name: qualified_relation + description: A description of a relationship with another resource. + slot_uri: dcat:qualifiedRelation + range: Relationship + required: false + multivalued: true + inlined_as_list: true + related_resource: + name: related_resource + description: A related resource. + slot_uri: dcterms:relation + range: Resource + required: false + multivalued: true + inlined_as_list: true release_date: name: release_date - description: The date of formal issuance (e.g., publication) of the Distribution. + description: The date of formal issuance (e.g., publication) of the Dataset. slot_uri: dcterms:issued range: date required: false multivalued: false inlined_as_list: false - rights: - name: rights - description: A statement that specifies rights associated with the Distribution. - slot_uri: dcterms:rights - range: RightsStatement + sample: + name: sample + description: A sample distribution of the dataset. + slot_uri: adms:sample + range: Distribution required: false - multivalued: false + multivalued: true + inlined_as_list: true + source: + name: source + description: A related Dataset from which the described Dataset is derived. + slot_uri: dcterms:source + range: Dataset + required: false + multivalued: true inlined_as_list: true spatial_resolution: name: spatial_resolution - description: The minimum spatial separation resolvable in a dataset distribution, - measured in meters. + description: The minimum spatial separation resolvable in a dataset, measured + in meters. slot_uri: dcat:spatialResolutionInMeters range: decimal required: false multivalued: false inlined_as_list: false - status: - name: status - description: The status of the distribution in the context of maturity lifecycle. - slot_uri: adms:status - range: Concept + temporal_coverage: + name: temporal_coverage + description: A temporal period that the Dataset covers. + slot_uri: dcterms:temporal + range: PeriodOfTime required: false - multivalued: false + multivalued: true inlined_as_list: true temporal_resolution: name: temporal_resolution - description: The minimum time period resolvable in the dataset distribution. + description: The minimum time period resolvable in the dataset. slot_uri: dcat:temporalResolution range: duration required: false multivalued: false inlined_as_list: true + theme: + name: theme + description: A category of the Dataset. + slot_uri: dcat:theme + range: Concept + required: false + recommended: true + multivalued: true + inlined_as_list: true title: name: title - description: A name given to the Distribution. + description: A name given to the Dataset. slot_uri: dcterms:title range: string + required: true + multivalued: true + inlined_as_list: true + type: + name: type + description: A type of the Dataset. + slot_uri: dcterms:type + range: Concept required: false multivalued: true inlined_as_list: true - class_uri: dcat:Distribution - Document: - name: Document - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Document - description: See [DCAT-AP specs:Document](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Document) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - foaf:Document - is_a: SupportiveEntity - slots: - - id - - title - - description - class_uri: foaf:Document - Entity: - name: Entity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Entity - description: A physical, digital, conceptual, or other kind of thing with some - fixed aspects; entities may be real or imaginary. - in_subset: - - domain_agnostic_core + version: + name: version + description: The version indicator (name or identifier) of a resource. + slot_uri: dcat:version + range: string + required: false + multivalued: false + inlined_as_list: true + version_notes: + name: version_notes + description: A description of the differences between this version and a previous + version of the Dataset. + slot_uri: adms:versionNotes + range: string + required: false + multivalued: true + inlined_as_list: true + was_generated_by: + name: was_generated_by + description: An activity that generated, or provides the business context + for, the creation of the dataset. + notes: + - stricter than DCAT-AP + slot_uri: prov:wasGeneratedBy + range: DataGeneratingActivity + required: true + multivalued: true + inlined_as_list: true + class_uri: dcat:Dataset + DatasetSeries: + name: DatasetSeries + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/DatasetSeries + description: See [DCAT-AP specs:DatasetSeries](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#DatasetSeries) from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - prov:Entity - mixins: - - ClassifierMixin + - dcat:DatasetSeries slots: - - Entity_title - - Entity_description - - id - - Entity_other_identifier - - has_qualitative_attribute - - has_quantitative_attribute - - Entity_has_part - - Entity_part_of - - ClassifierMixin_type - - rdf_type + - DatasetSeries_applicable_legislation + - DatasetSeries_contact_point + - DatasetSeries_description + - DatasetSeries_frequency + - DatasetSeries_geographical_coverage + - DatasetSeries_modification_date + - DatasetSeries_publisher + - DatasetSeries_release_date + - DatasetSeries_temporal_coverage + - DatasetSeries_title slot_usage: - title: - name: title - description: The slot to provide a title for the Entity. + applicable_legislation: + name: applicable_legislation + description: The legislation that mandates the creation or management of the + Dataset Series. + slot_uri: dcatap:applicableLegislation + range: LegalResource + required: false + multivalued: true + inlined_as_list: true + contact_point: + name: contact_point + description: Contact information that can be used for sending comments about + the Dataset Series. + slot_uri: dcat:contactPoint + range: Kind + required: false + multivalued: true + inlined_as_list: true description: name: description - description: The slot to provide a description for the Entity. - other_identifier: - name: other_identifier - description: A slot to provide a secondary identifier of the Entity. - range: Identifier - required: false + description: A free-text account of the Dataset Series. + slot_uri: dcterms:description + range: string + required: true multivalued: true inlined_as_list: true - has_part: - name: has_part - description: A slot to provide a part of the Entity. - range: Entity + frequency: + name: frequency + description: The frequency at which the Dataset Series is updated. + slot_uri: dcterms:accrualPeriodicity + range: Frequency + required: false + multivalued: false + inlined_as_list: false + geographical_coverage: + name: geographical_coverage + description: A geographic region that is covered by the Dataset Series. + slot_uri: dcterms:spatial + range: Location + required: false multivalued: true inlined_as_list: true - part_of: - name: part_of - description: The slot to specify an Entity of which the Entity is a part. - notes: - - not in DCAT-AP - range: Entity + modification_date: + name: modification_date + description: The most recent date on which the Dataset Series was changed + or modified. + slot_uri: dcterms:modified + range: date + required: false + multivalued: false + inlined_as_list: false + publisher: + name: publisher + description: 'An entity (organisation) responsible for ensuring the coherency + of the Dataset Series ' + slot_uri: dcterms:publisher + range: Agent + required: false + multivalued: false + inlined_as_list: true + release_date: + name: release_date + description: The date of formal issuance (e.g., publication) of the Dataset + Series. + slot_uri: dcterms:issued + range: date + required: false + multivalued: false + inlined_as_list: false + temporal_coverage: + name: temporal_coverage + description: A temporal period that the Dataset Series covers. + slot_uri: dcterms:temporal + range: PeriodOfTime + required: false + multivalued: true + inlined_as_list: true + title: + name: title + description: A name given to the Dataset Series. + slot_uri: dcterms:title + range: string + required: true multivalued: true inlined_as_list: true - class_uri: prov:Entity - EvaluatedActivity: - name: EvaluatedActivity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/EvaluatedActivity - description: An activity or process that is being evaluated in a DataGeneratingActivity. + class_uri: dcat:DatasetSeries + DefinedTerm: + name: DefinedTerm + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/DefinedTerm + description: A word, name, acronym or phrase that is defined in a controlled vocabulary + (CV) and that is used to provide an additional rdf:type or dcterms:type of a + class within this schema. in_subset: - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - prov:Activity - is_a: Activity + - schema:DefinedTerm slots: - id - - Activity_title - - Activity_description - - Activity_has_part - - Activity_had_input_entity - - Activity_had_output_entity - - Activity_had_input_activity - - Activity_carried_out_by - - Activity_has_qualitative_attribute - - Activity_has_quantitative_attribute - - Activity_part_of - - ClassifierMixin_type - - rdf_type - - EvaluatedActivity_other_identifier + - DefinedTerm_title + - definedTerm__from_CV slot_usage: - other_identifier: - name: other_identifier - description: A slot to provide a secondary identifier of the EvaluatedActivity. - range: Identifier - required: false - multivalued: true - inlined_as_list: true - class_uri: prov:Activity - EvaluatedEntity: - name: EvaluatedEntity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/EvaluatedEntity - description: An Entity that is being evaluated in a DataGeneratingActivity. + title: + name: title + slot_uri: schema:name + attributes: + from_CV: + name: from_CV + description: The URL of the controlled vocabulary. + slot_uri: schema:inDefinedTermSet + range: uriorcurie + class_uri: schema:DefinedTerm + Device: + name: Device + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Device + description: A material instrument that is designed to perform a function primarily + by means of its mechanical or electrical nature. in_subset: - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + aliases: + - hardware instrument mappings: - - prov:Entity - is_a: Entity + - prov:Agent + exact_mappings: + - epos:Equipment + - OBI:0000968 + - http://purl.obolibrary.org/obo/NCIT_C62103 + - http://semanticscience.org/resource/SIO_000956 + - http://purl.allotrope.org/ontologies/equipment#AFE_0000354 + is_a: AgenticEntity slots: - id + - title + - description - has_qualitative_attribute - has_quantitative_attribute - - Entity_has_part - - Entity_part_of + - AgenticEntity_part_of - ClassifierMixin_type - rdf_type - - EvaluatedEntity_was_generated_by - - EvaluatedEntity_title - - EvaluatedEntity_description - - EvaluatedEntity_other_identifier + - Device_has_part + - Device_other_identifier slot_usage: - title: - name: title - description: The slot to provide a title for the EvaluatedEntity. - description: - name: description - description: The slot to provide a description for the EvaluatedEntity. - was_generated_by: - name: was_generated_by - description: A slot to provide the Activity which created the EvaluatedEntity. - range: Activity + has_part: + name: has_part + description: The slot to specify parts of a Device that are themselves Devices. + range: Device multivalued: true + inlined: true inlined_as_list: true other_identifier: name: other_identifier - description: A slot to provide a secondary identifier of the EvaluatedEntity. + description: A slot to provide a secondary identifier for a Device. range: Identifier required: false multivalued: true inlined_as_list: true - class_uri: prov:Entity - Frequency: - name: Frequency - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Frequency - description: See [DCAT-AP specs:Frequency](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Frequency) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcterms:Frequency - is_a: SupportiveEntity - slots: - - title - - description - class_uri: dcterms:Frequency - Geometry: - name: Geometry - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Geometry - description: See [DCAT-AP specs:Geometry](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Geometry) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - locn:Geometry - is_a: SupportiveEntity - slots: - - title - - description - class_uri: locn:Geometry - Identifier: - name: Identifier - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Identifier - description: See [DCAT-AP specs:Identifier](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Identifier) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - adms:Identifier - is_a: SupportiveEntity - slots: - - Identifier_notation - - title - - description - slot_usage: - notation: - name: notation - description: A string that is an identifier in the context of the identifier - scheme referenced by its datatype. - slot_uri: skos:notation - range: string - required: true - multivalued: false - inlined_as_list: false - class_uri: adms:Identifier - Kind: - name: Kind - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Kind - description: See [DCAT-AP specs:Kind](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Kind) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - vcard:Kind - class_uri: vcard:Kind - LegalResource: - name: LegalResource - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/LegalResource - description: See [DCAT-AP specs:LegalResource](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#LegalResource) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - eli:LegalResource - is_a: SupportiveEntity - slots: - - id - - title - - description - class_uri: eli:LegalResource - LicenseDocument: - name: LicenseDocument - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/LicenseDocument - description: See [DCAT-AP specs:LicenseDocument](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#LicenseDocument) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcterms:LicenseDocument - is_a: SupportiveEntity - slots: - - LicenseDocument_type - - id - - title - - description - slot_usage: - type: - name: type - description: A type of licence, e.g. indicating 'public domain' or 'royalties - required'. - slot_uri: dcterms:type - range: Concept - required: false - recommended: true - multivalued: true - inlined_as_list: true - class_uri: dcterms:LicenseDocument - LinguisticSystem: - name: LinguisticSystem - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/LinguisticSystem - description: See [DCAT-AP specs:LinguisticSystem](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#LinguisticSystem) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcterms:LinguisticSystem - is_a: SupportiveEntity - slots: - - title - - description - class_uri: dcterms:LinguisticSystem - Location: - name: Location - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Location - description: See [DCAT-AP specs:Location](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Location) + class_uri: prov:Agent + Distribution: + name: Distribution + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Distribution + description: See [DCAT-AP specs:Distribution](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Distribution) from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:Location + - dcat:Distribution slots: - - Location_bbox - - Location_centroid - - Location_geometry + - Distribution_access_URL + - Distribution_access_service + - Distribution_applicable_legislation + - Distribution_availability + - Distribution_byte_size + - Distribution_checksum + - Distribution_compression_format + - Distribution_description + - Distribution_documentation + - Distribution_download_URL + - Distribution_format + - Distribution_has_policy + - Distribution_language + - Distribution_licence + - Distribution_linked_schemas + - Distribution_media_type + - Distribution_modification_date + - Distribution_packaging_format + - Distribution_release_date + - Distribution_rights + - Distribution_spatial_resolution + - Distribution_status + - Distribution_temporal_resolution + - Distribution_title slot_usage: - bbox: - name: bbox - description: The geographic bounding box of a resource. - slot_uri: dcat:bbox - range: string + access_URL: + name: access_URL + description: A URL that gives access to a Distribution of the Dataset. + slot_uri: dcat:accessURL + range: Resource + required: true + multivalued: true + inlined_as_list: true + access_service: + name: access_service + description: A data service that gives access to the distribution of the dataset. + slot_uri: dcat:accessService + range: DataService + required: false + multivalued: true + inlined_as_list: true + applicable_legislation: + name: applicable_legislation + description: The legislation that mandates the creation or management of the + Distribution. + slot_uri: dcatap:applicableLegislation + range: LegalResource + required: false + multivalued: true + inlined_as_list: true + availability: + name: availability + description: An indication how long it is planned to keep the Distribution + of the Dataset available. + slot_uri: dcatap:availability + range: Concept required: false recommended: true multivalued: false inlined_as_list: false - centroid: - name: centroid - description: The geographic center (centroid) of a resource. - slot_uri: dcat:centroid - range: string + byte_size: + name: byte_size + description: The size of a Distribution in bytes. + slot_uri: dcat:byteSize + range: nonNegativeInteger required: false - recommended: true multivalued: false inlined_as_list: false - geometry: - name: geometry - description: The corresponding geometry for a resource. - slot_uri: locn:geometry - range: Geometry + checksum: + name: checksum + description: A mechanism that can be used to verify that the contents of a + distribution have not changed. + slot_uri: spdx:checksum + range: Checksum required: false multivalued: false - inlined_as_list: false - class_uri: dcterms:Location - MediaType: - name: MediaType - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/MediaType - description: See [DCAT-AP specs:MediaType](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#MediaType) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcterms:MediaType - is_a: SupportiveEntity - slots: - - title - - description - class_uri: dcterms:MediaType - MediaTypeOrExtent: - name: MediaTypeOrExtent - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/MediaTypeOrExtent - description: See [DCAT-AP specs:MediaTypeOrExtent](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#MediaTypeOrExtent) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcterms:MediaTypeOrExtent - is_a: SupportiveEntity - slots: - - title - - description - class_uri: dcterms:MediaTypeOrExtent - PeriodOfTime: - name: PeriodOfTime - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/PeriodOfTime - description: See [DCAT-AP specs:PeriodOfTime](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#PeriodOfTime) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcterms:PeriodOfTime - is_a: SupportiveEntity - slots: - - PeriodOfTime_beginning - - PeriodOfTime_end - - PeriodOfTime_end_date - - PeriodOfTime_start_date - - title - - description - slot_usage: - beginning: - name: beginning - description: The beginning of a period or interval. - slot_uri: time:hasBeginning - range: TimeInstant + inlined_as_list: true + compression_format: + name: compression_format + description: The format of the file in which the data is contained in a compressed + form, e.g. to reduce the size of the downloadable file. + slot_uri: dcat:compressFormat + range: MediaType required: false multivalued: false inlined_as_list: true - end: - name: end - description: The end of a period or interval. - slot_uri: time:hasEnd - range: TimeInstant + description: + name: description + description: A free-text account of the Distribution. + slot_uri: dcterms:description + range: string + required: false + recommended: true + multivalued: true + inlined_as_list: true + documentation: + name: documentation + description: A page or document about this Distribution. + slot_uri: foaf:page + range: Document + required: false + multivalued: true + inlined_as_list: true + download_URL: + name: download_URL + description: A URL that is a direct link to a downloadable file in a given + format. + slot_uri: dcat:downloadURL + range: Resource + required: false + multivalued: true + inlined_as_list: true + format: + name: format + description: The file format of the Distribution. + slot_uri: dcterms:format + range: MediaTypeOrExtent required: false + recommended: true multivalued: false inlined_as_list: true - end_date: - name: end_date - description: The end of the period. - slot_uri: dcat:endDate + has_policy: + name: has_policy + description: The policy expressing the rights associated with the distribution + if using the [[ODRL]] vocabulary. + slot_uri: odrl:hasPolicy + range: Policy + required: false + multivalued: false + inlined_as_list: true + language: + name: language + description: A language used in the Distribution. + slot_uri: dcterms:language + range: LinguisticSystem + required: false + multivalued: true + inlined_as_list: true + licence: + name: licence + description: A licence under which the Distribution is made available. + slot_uri: dcterms:license + range: LicenseDocument + required: false + multivalued: false + inlined_as_list: true + linked_schemas: + name: linked_schemas + description: An established schema to which the described Distribution conforms. + slot_uri: dcterms:conformsTo + range: Standard + required: false + multivalued: true + inlined_as_list: true + media_type: + name: media_type + description: The media type of the Distribution as defined in the official + register of media types managed by IANA. + slot_uri: dcat:mediaType + range: MediaType + required: false + multivalued: false + inlined_as_list: false + modification_date: + name: modification_date + description: The most recent date on which the Distribution was changed or + modified. + slot_uri: dcterms:modified range: date required: false - recommended: true + multivalued: false + inlined_as_list: false + packaging_format: + name: packaging_format + description: The format of the file in which one or more data files are grouped + together, e.g. to enable a set of related files to be downloaded together. + slot_uri: dcat:packageFormat + range: MediaType + required: false multivalued: false inlined_as_list: true - start_date: - name: start_date - description: The start of the period. - slot_uri: dcat:startDate + release_date: + name: release_date + description: The date of formal issuance (e.g., publication) of the Distribution. + slot_uri: dcterms:issued range: date required: false - recommended: true multivalued: false inlined_as_list: false - class_uri: dcterms:PeriodOfTime - Plan: - name: Plan - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Plan - description: A piece of information that specifies how an activity has to be carried - out by its agents including what kind of steps have to be taken and what kind - of parameters have to be met/set. - examples: - - description: 'We assigned the structure of sample CRS-37013 using a 13C NMR - (CHMO:0000595) and the settings: pulse sequence: zgpg30, temperature: 298.0 - K, number of scans: 1024, Solvent : chloroform-D1 (CDCl3).' - in_subset: - - domain_agnostic_core - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - aliases: - - Plan Specification - - Method - - Procedure - mappings: - - prov:Plan - mixins: - - ClassifierMixin - slots: - - title - - description - - ClassifierMixin_type - - rdf_type - class_uri: prov:Plan - Policy: - name: Policy - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Policy - description: See [DCAT-AP specs:Policy](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Policy) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - odrl:Policy - is_a: SupportiveEntity - slots: - - title - - description - class_uri: odrl:Policy - ProvenanceStatement: - name: ProvenanceStatement - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/ProvenanceStatement - description: See [DCAT-AP specs:ProvenanceStatement](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#ProvenanceStatement) + rights: + name: rights + description: A statement that specifies rights associated with the Distribution. + slot_uri: dcterms:rights + range: RightsStatement + required: false + multivalued: false + inlined_as_list: true + spatial_resolution: + name: spatial_resolution + description: The minimum spatial separation resolvable in a dataset distribution, + measured in meters. + slot_uri: dcat:spatialResolutionInMeters + range: decimal + required: false + multivalued: false + inlined_as_list: false + status: + name: status + description: The status of the distribution in the context of maturity lifecycle. + slot_uri: adms:status + range: Concept + required: false + multivalued: false + inlined_as_list: true + temporal_resolution: + name: temporal_resolution + description: The minimum time period resolvable in the dataset distribution. + slot_uri: dcat:temporalResolution + range: duration + required: false + multivalued: false + inlined_as_list: true + title: + name: title + description: A name given to the Distribution. + slot_uri: dcterms:title + range: string + required: false + multivalued: true + inlined_as_list: true + class_uri: dcat:Distribution + Document: + name: Document + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Document + description: See [DCAT-AP specs:Document](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Document) from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:ProvenanceStatement + - foaf:Document is_a: SupportiveEntity slots: + - id - title - description - class_uri: dcterms:ProvenanceStatement - QualitativeAttribute: - name: QualitativeAttribute - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/QualitativeAttribute - description: A piece of information that is attributed to an Entity, Activity - or AgenticEntity. + class_uri: foaf:Document + Entity: + name: Entity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Entity + description: A physical, digital, conceptual, or other kind of thing with some + fixed aspects; entities may be real or imaginary. in_subset: - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ @@ -17585,712 +18465,658 @@ classes: mixins: - ClassifierMixin slots: - - title - - description - - QualitativeAttribute_value + - Entity_title + - Entity_description + - id + - Entity_other_identifier + - has_qualitative_attribute + - has_quantitative_attribute + - Entity_has_part + - Entity_part_of - ClassifierMixin_type - rdf_type slot_usage: - value: - name: value - description: The slot to provide the literal value of the QualitativeAttribute. - required: true + title: + name: title + description: The slot to provide a title for the Entity. + description: + name: description + description: The slot to provide a description for the Entity. + other_identifier: + name: other_identifier + description: A slot to provide a secondary identifier of the Entity. + range: Identifier + required: false + multivalued: true + inlined_as_list: true + has_part: + name: has_part + description: A slot to provide a part of the Entity. + range: Entity + multivalued: true + inlined_as_list: true + part_of: + name: part_of + description: The slot to specify an Entity of which the Entity is a part. + notes: + - not in DCAT-AP + range: Entity + multivalued: true + inlined_as_list: true class_uri: prov:Entity - QuantitativeAttribute: - name: QuantitativeAttribute - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/QuantitativeAttribute - description: A quantifiable piece of information that is attributed to an Entity, - Activity or AgenticEntity. + EvaluatedActivity: + name: EvaluatedActivity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/EvaluatedActivity + description: An activity or process that is being evaluated in a DataGeneratingActivity. in_subset: - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - qudt:Quantity - mixins: - - ClassifierMixin + - prov:Activity + is_a: Activity slots: - - title - - description - - QuantitativeAttribute_value - - quantitativeAttribute__has_quantity_type - - quantitativeAttribute__unit + - id + - Activity_title + - Activity_description + - Activity_has_part + - Activity_had_input_entity + - Activity_had_output_entity + - Activity_had_input_activity + - Activity_carried_out_by + - Activity_has_qualitative_attribute + - Activity_has_quantitative_attribute + - Activity_part_of - ClassifierMixin_type - rdf_type + - EvaluatedActivity_other_identifier slot_usage: - value: - name: value - description: The slot to provide the literal value of the QuantitativeAttribute. - range: float - required: true - attributes: - has_quantity_type: - name: has_quantity_type - description: The type of quality that is quantifiable according to the QUDT - ontology. - slot_uri: qudt:hasQuantityKind - range: DefinedTerm - bindings: - - range: QUDTQuantityKindEnum - obligation_level: - text: RECOMMENDED - description: The metadata element is recommended to be present in the - model - binds_value_of: id - description: Binds the type of a quantifiable attribute to a QUDT Quantity - Kind instance from the QUDT Quantity Kind vocabulary. - required: true - unit: - name: unit - slot_uri: qudt:unit - range: DefinedTerm - bindings: - - range: QUDTUnitEnum - obligation_level: - text: RECOMMENDED - description: The metadata element is recommended to be present in the - model - binds_value_of: id - description: Restricts the allowable defined terms to the QUDT Unit vocabulary. - recommended: true - class_uri: qudt:Quantity - Relationship: - name: Relationship - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Relationship - description: See [DCAT-AP specs:Relationship](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Relationship) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcat:Relationship - slots: - - Relationship_had_role - - Relationship_relation - slot_usage: - had_role: - name: had_role - description: A function of an entity or agent with respect to another entity - or resource. - slot_uri: dcat:hadRole - range: Role - required: true - multivalued: true - inlined_as_list: true - relation: - name: relation - description: A resource related to the source resource. - slot_uri: dcterms:relation - range: Resource - required: true + other_identifier: + name: other_identifier + description: A slot to provide a secondary identifier of the EvaluatedActivity. + range: Identifier + required: false multivalued: true inlined_as_list: true - class_uri: dcat:Relationship - Resource: - name: Resource - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Resource - description: See [DCAT-AP specs:Resource](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Resource) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - rdfs:Resource - is_a: SupportiveEntity - slots: - - id - - title - - description - class_uri: rdfs:Resource - RightsStatement: - name: RightsStatement - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/RightsStatement - description: See [DCAT-AP specs:RightsStatement](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#RightsStatement) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcterms:RightsStatement - is_a: SupportiveEntity - slots: - - title - - description - class_uri: dcterms:RightsStatement - Role: - name: Role - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Role - description: See [DCAT-AP specs:Role](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Role) - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - mappings: - - dcat:Role - is_a: SupportiveEntity - slots: - - title - - description - class_uri: dcat:Role - Software: - name: Software - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Software - description: An instrument composed of a series of instructions that can be interpreted - by or directly executed by a computer. + class_uri: prov:Activity + EvaluatedEntity: + name: EvaluatedEntity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/EvaluatedEntity + description: An Entity that is being evaluated in a DataGeneratingActivity. in_subset: - domain_agnostic_core from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - prov:SoftwareAgent - exact_mappings: - - schema:SoftwareApplication - is_a: AgenticEntity + - prov:Entity + is_a: Entity slots: - id - - title - - description - has_qualitative_attribute - has_quantitative_attribute - - AgenticEntity_part_of + - Entity_has_part + - Entity_part_of - ClassifierMixin_type - rdf_type - - Software_has_part - - Software_other_identifier + - EvaluatedEntity_was_generated_by + - EvaluatedEntity_title + - EvaluatedEntity_description + - EvaluatedEntity_other_identifier slot_usage: - has_part: - name: has_part - description: The slot to specify parts of a Software that are themselves Software. - range: Software + title: + name: title + description: The slot to provide a title for the EvaluatedEntity. + description: + name: description + description: The slot to provide a description for the EvaluatedEntity. + was_generated_by: + name: was_generated_by + description: A slot to provide the Activity which created the EvaluatedEntity. + range: Activity multivalued: true - inlined: true inlined_as_list: true other_identifier: name: other_identifier - description: A slot to provide a secondary identifier for a Software. + description: A slot to provide a secondary identifier of the EvaluatedEntity. range: Identifier required: false multivalued: true inlined_as_list: true - class_uri: prov:SoftwareAgent - Standard: - name: Standard - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Standard - description: See [DCAT-AP specs:Standard](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Standard) + class_uri: prov:Entity + Frequency: + name: Frequency + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Frequency + description: See [DCAT-AP specs:Frequency](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Frequency) from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - dcterms:Standard + - dcterms:Frequency is_a: SupportiveEntity slots: - title - description - class_uri: dcterms:Standard - SupportiveEntity: - name: SupportiveEntity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/SupportiveEntity - description: The supportive entities are supporting the main entities in the Application - Profile. They are included in the Application Profile because they form the - range of properties. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ - slots: - - title - - description - class_uri: dcatapplus:SupportiveEntity - Surrounding: - name: Surrounding - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Surrounding - description: The surrounding in which the dataset creating activity took place - (e.g. a lab). - in_subset: - - domain_agnostic_core + class_uri: dcterms:Frequency + Geometry: + name: Geometry + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Geometry + description: See [DCAT-AP specs:Geometry](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Geometry) from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - prov:Location - mixins: - - ClassifierMixin + - locn:Geometry + is_a: SupportiveEntity slots: - title - description - - ClassifierMixin_type - - rdf_type - class_uri: prov:Location - TimeInstant: - name: TimeInstant - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/TimeInstant - description: See [DCAT-AP specs:TimeInstant](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#TimeInstant) + class_uri: locn:Geometry + Identifier: + name: Identifier + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Identifier + description: See [DCAT-AP specs:Identifier](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Identifier) from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - time:Instant + - adms:Identifier is_a: SupportiveEntity slots: + - Identifier_notation - title - description - class_uri: time:Instant - SubstanceSample: - name: SubstanceSample - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/SubstanceSample - description: A MaterialSample derived from a chemical substance that is of interest - in an analytical procedure. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ - aliases: - - analyte + slot_usage: + notation: + name: notation + description: A string that is an identifier in the context of the identifier + scheme referenced by its datatype. + slot_uri: skos:notation + range: string + required: true + multivalued: false + inlined_as_list: false + class_uri: adms:Identifier + Kind: + name: Kind + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Kind + description: See [DCAT-AP specs:Kind](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Kind) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:001378 - is_a: MaterialSample - mixins: - - ChemicalSubstanceMixin - slots: - - id - - has_qualitative_attribute - - has_quantitative_attribute - - Entity_has_part - - Entity_part_of - - ClassifierMixin_type - - rdf_type - - EvaluatedEntity_was_generated_by - - EvaluatedEntity_title - - EvaluatedEntity_description - - EvaluatedEntity_other_identifier - - MaterialSample_derived_from - - alternative_label - - has_physical_state - - has_temperature - - has_mass - - has_volume - - has_density - - has_pressure - - has_concentration - - has_ph_value - - composed_of - - has_amount - class_uri: SIO:001378 - PolymerSample: - name: PolymerSample - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/PolymerSample - description: A SubstanceSample derived from a Polymer. - todos: - - Find a better mapping, as it is currently mapped to same ontology class as its - parent. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + - vcard:Kind + class_uri: vcard:Kind + LegalResource: + name: LegalResource + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/LegalResource + description: See [DCAT-AP specs:LegalResource](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#LegalResource) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:001378 - is_a: SubstanceSample - mixins: - - PolymerMixin + - eli:LegalResource + is_a: SupportiveEntity slots: - id - - has_qualitative_attribute - - has_quantitative_attribute - - Entity_has_part - - Entity_part_of - - ClassifierMixin_type - - rdf_type - - EvaluatedEntity_was_generated_by - - EvaluatedEntity_title - - EvaluatedEntity_description - - EvaluatedEntity_other_identifier - - MaterialSample_derived_from - - alternative_label - - has_physical_state - - has_temperature - - has_mass - - has_volume - - has_density - - has_pressure - - has_concentration - - has_ph_value - - composed_of - - has_amount - class_uri: SIO:001378 - ChemicalEntity: - name: ChemicalEntity - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ChemicalEntity - description: Any constitutionally or isotopically distinct atom, molecule, ion, - ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately - distinguishable entity. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ - aliases: - - molecular entity + - title + - description + class_uri: eli:LegalResource + LicenseDocument: + name: LicenseDocument + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/LicenseDocument + description: See [DCAT-AP specs:LicenseDocument](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#LicenseDocument) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - CHEBI:23367 - is_a: Entity + - dcterms:LicenseDocument + is_a: SupportiveEntity slots: - - Entity_title - - Entity_description + - LicenseDocument_type - id - - Entity_other_identifier - - has_qualitative_attribute - - has_quantitative_attribute - - Entity_part_of - - ClassifierMixin_type - - rdf_type - - inchi - - inchikey - - smiles - - molecular_formula - - iupac_name - - has_molar_mass - - ChemicalEntity_has_part + - title + - description slot_usage: - has_part: - name: has_part - description: The slot to provide the parts of a ChemicalEntity that are themself - chemical entities. - slot_uri: BFO:0000051 - range: ChemicalEntity + type: + name: type + description: A type of licence, e.g. indicating 'public domain' or 'royalties + required'. + slot_uri: dcterms:type + range: Concept + required: false + recommended: true multivalued: true inlined_as_list: true - class_uri: CHEBI:23367 - Atom: - name: Atom - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/Atom - description: An Entity constituting the smallest component of a chemical element - having the chemical properties of the element. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + class_uri: dcterms:LicenseDocument + LinguisticSystem: + name: LinguisticSystem + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/LinguisticSystem + description: See [DCAT-AP specs:LinguisticSystem](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#LinguisticSystem) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcterms:LinguisticSystem + is_a: SupportiveEntity + slots: + - title + - description + class_uri: dcterms:LinguisticSystem + Location: + name: Location + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Location + description: See [DCAT-AP specs:Location](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Location) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - CHEBI:33250 - is_a: Entity + - dcterms:Location slots: - - Entity_title - - Entity_description - - id - - Entity_other_identifier - - has_qualitative_attribute - - has_quantitative_attribute - - Entity_has_part - - Entity_part_of - - ClassifierMixin_type - - Atom_rdf_type + - Location_bbox + - Location_centroid + - Location_geometry slot_usage: - rdf_type: - name: rdf_type - description: The slot to provide the Atom as a ChEBI ID from the atom (CHEBI:33250) - branch. - required: true - class_uri: CHEBI:33250 - MolarMass: - name: MolarMass - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/MolarMass - description: A Mass (physical quality) that quantifies the mass of a homogeneous - ChemicalSubstance containing 6.02 x 10^23 atoms or molecules. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + bbox: + name: bbox + description: The geographic bounding box of a resource. + slot_uri: dcat:bbox + range: string + required: false + recommended: true + multivalued: false + inlined_as_list: false + centroid: + name: centroid + description: The geographic center (centroid) of a resource. + slot_uri: dcat:centroid + range: string + required: false + recommended: true + multivalued: false + inlined_as_list: false + geometry: + name: geometry + description: The corresponding geometry for a resource. + slot_uri: locn:geometry + range: Geometry + required: false + multivalued: false + inlined_as_list: false + class_uri: dcterms:Location + MediaType: + name: MediaType + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/MediaType + description: See [DCAT-AP specs:MediaType](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#MediaType) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - AFR:0002409 - close_mappings: - - PATO:0001681 - is_a: Mass + - dcterms:MediaType + is_a: SupportiveEntity slots: - title - description - - QuantitativeAttribute_value - - quantitativeAttribute__has_quantity_type - - quantitativeAttribute__unit - - ClassifierMixin_type - - rdf_type - class_uri: AFR:0002409 - Concentration: - name: Concentration - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/Concentration - description: A QuantitativeAttribute of a ChemicalSubstance that represents the - amount of a constituent divided by the volume of the mixture. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + class_uri: dcterms:MediaType + MediaTypeOrExtent: + name: MediaTypeOrExtent + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/MediaTypeOrExtent + description: See [DCAT-AP specs:MediaTypeOrExtent](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#MediaTypeOrExtent) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - CHMO:0002820 - exact_mappings: - - EDAM:2140 - - NCIT:C41185 - - VOC4CAT:0007244 - - AFR:0002036 - close_mappings: - - PATO:0000033 - narrow_mappings: - - CHMO:0002822 - is_a: QuantitativeAttribute + - dcterms:MediaTypeOrExtent + is_a: SupportiveEntity slots: - title - description - - QuantitativeAttribute_value - - quantitativeAttribute__has_quantity_type - - quantitativeAttribute__unit - - ClassifierMixin_type - - rdf_type - class_uri: CHMO:0002820 - AmountOfSubstance: - name: AmountOfSubstance - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/AmountOfSubstance - description: The total amount of substance used in a ChemicalReaction. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ - aliases: - - SubstanceAmount + class_uri: dcterms:MediaTypeOrExtent + PeriodOfTime: + name: PeriodOfTime + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/PeriodOfTime + description: See [DCAT-AP specs:PeriodOfTime](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#PeriodOfTime) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - qudt:Quantity - close_mappings: - - PATO:0000070 - is_a: QuantitativeAttribute + - dcterms:PeriodOfTime + is_a: SupportiveEntity slots: + - PeriodOfTime_beginning + - PeriodOfTime_end + - PeriodOfTime_end_date + - PeriodOfTime_start_date - title - description - - QuantitativeAttribute_value - - quantitativeAttribute__has_quantity_type - - quantitativeAttribute__unit - - ClassifierMixin_type - - rdf_type - class_uri: qudt:Quantity - PHValue: - name: PHValue - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/PHValue - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + slot_usage: + beginning: + name: beginning + description: The beginning of a period or interval. + slot_uri: time:hasBeginning + range: TimeInstant + required: false + multivalued: false + inlined_as_list: true + end: + name: end + description: The end of a period or interval. + slot_uri: time:hasEnd + range: TimeInstant + required: false + multivalued: false + inlined_as_list: true + end_date: + name: end_date + description: The end of the period. + slot_uri: dcat:endDate + range: date + required: false + recommended: true + multivalued: false + inlined_as_list: true + start_date: + name: start_date + description: The start of the period. + slot_uri: dcat:startDate + range: date + required: false + recommended: true + multivalued: false + inlined_as_list: false + class_uri: dcterms:PeriodOfTime + Plan: + name: Plan + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Plan + description: A piece of information that specifies how an activity has to be carried + out by its agents including what kind of steps have to be taken and what kind + of parameters have to be met/set. + examples: + - description: 'We assigned the structure of sample CRS-37013 using a 13C NMR + (CHMO:0000595) and the settings: pulse sequence: zgpg30, temperature: 298.0 + K, number of scans: 1024, Solvent : chloroform-D1 (CDCl3).' + in_subset: + - domain_agnostic_core + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + aliases: + - Plan Specification + - Method + - Procedure mappings: - - SIO:001089 - exact_mappings: - - NCIT:C45997 - - AFR:0001142 - close_mappings: - - PATO:0001842 - is_a: QuantitativeAttribute + - prov:Plan + mixins: + - ClassifierMixin slots: - title - description - - QuantitativeAttribute_value - - quantitativeAttribute__has_quantity_type - - quantitativeAttribute__unit - ClassifierMixin_type - rdf_type - class_uri: SIO:001089 - InChIKey: - name: InChIKey - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/InChIKey - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + class_uri: prov:Plan + Policy: + name: Policy + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Policy + description: See [DCAT-AP specs:Policy](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Policy) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - CHEMINF:000059 - is_a: QualitativeAttribute + - odrl:Policy + is_a: SupportiveEntity slots: - title - description - - QualitativeAttribute_value - - ClassifierMixin_type - - rdf_type - class_uri: CHEMINF:000059 - InChi: - name: InChi - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/InChi - description: A structure descriptor which conforms to the InChI format specification. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + class_uri: odrl:Policy + ProvenanceStatement: + name: ProvenanceStatement + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/ProvenanceStatement + description: See [DCAT-AP specs:ProvenanceStatement](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#ProvenanceStatement) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - CHEMINF:000113 - is_a: QualitativeAttribute + - dcterms:ProvenanceStatement + is_a: SupportiveEntity slots: - title - description - - QualitativeAttribute_value - - ClassifierMixin_type - - rdf_type - class_uri: CHEMINF:000113 - MolecularFormula: - name: MolecularFormula - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/MolecularFormula - description: A structure descriptor which identifies each constituent element - by its chemical symbol and indicates the number of atoms of each element found - in each discrete molecule of that compound. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + class_uri: dcterms:ProvenanceStatement + QualitativeAttribute: + name: QualitativeAttribute + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/QualitativeAttribute + description: A piece of information that is attributed to an Entity, Activity + or AgenticEntity. + in_subset: + - domain_agnostic_core + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - CHEMINF:000042 - is_a: QualitativeAttribute + - prov:Entity + mixins: + - ClassifierMixin slots: - title - description - QualitativeAttribute_value - ClassifierMixin_type - rdf_type - class_uri: CHEMINF:000042 - IUPACName: - name: IUPACName - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/IUPACName - description: A systematic name which is formulated according to the rules and - recommendations for chemical nomenclature set out by the International Union - of Pure and Applied Chemistry (IUPAC). - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + slot_usage: + value: + name: value + description: The slot to provide the literal value of the QualitativeAttribute. + required: true + class_uri: prov:Entity + QuantitativeAttribute: + name: QuantitativeAttribute + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/QuantitativeAttribute + description: A quantifiable piece of information that is attributed to an Entity, + Activity or AgenticEntity. + in_subset: + - domain_agnostic_core + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - CHEMINF:000107 - is_a: QualitativeAttribute + - qudt:Quantity + mixins: + - ClassifierMixin slots: - title - description - - QualitativeAttribute_value + - QuantitativeAttribute_value + - quantitativeAttribute__has_quantity_type + - quantitativeAttribute__unit - ClassifierMixin_type - rdf_type - class_uri: CHEMINF:000107 - SMILES: - name: SMILES - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/SMILES - description: A structure descriptor that denotes a molecular structure as a graph - and conforms to the SMILES format specification. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + slot_usage: + value: + name: value + description: The slot to provide the literal value of the QuantitativeAttribute. + range: float + required: true + attributes: + has_quantity_type: + name: has_quantity_type + description: The type of quality that is quantifiable according to the QUDT + ontology. + slot_uri: qudt:hasQuantityKind + range: DefinedTerm + bindings: + - range: QUDTQuantityKindEnum + obligation_level: + text: RECOMMENDED + description: The metadata element is recommended to be present in the + model + binds_value_of: id + description: Binds the type of a quantifiable attribute to a QUDT Quantity + Kind instance from the QUDT Quantity Kind vocabulary. + required: true + unit: + name: unit + slot_uri: qudt:unit + range: DefinedTerm + bindings: + - range: QUDTUnitEnum + obligation_level: + text: RECOMMENDED + description: The metadata element is recommended to be present in the + model + binds_value_of: id + description: Restricts the allowable defined terms to the QUDT Unit vocabulary. + recommended: true + class_uri: qudt:Quantity + Relationship: + name: Relationship + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Relationship + description: See [DCAT-AP specs:Relationship](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Relationship) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - CHEMINF:000018 - is_a: QualitativeAttribute + - dcat:Relationship + slots: + - Relationship_had_role + - Relationship_relation + slot_usage: + had_role: + name: had_role + description: A function of an entity or agent with respect to another entity + or resource. + slot_uri: dcat:hadRole + range: Role + required: true + multivalued: true + inlined_as_list: true + relation: + name: relation + description: A resource related to the source resource. + slot_uri: dcterms:relation + range: Resource + required: true + multivalued: true + inlined_as_list: true + class_uri: dcat:Relationship + Resource: + name: Resource + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Resource + description: See [DCAT-AP specs:Resource](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Resource) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - rdfs:Resource + is_a: SupportiveEntity slots: + - id - title - description - - QualitativeAttribute_value - - ClassifierMixin_type - - rdf_type - class_uri: CHEMINF:000018 - ChemicalSubstanceMixin: - name: ChemicalSubstanceMixin - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ChemicalSubstanceMixin - description: A LinkML mixin used to pass down properties common to all material - entities that are described in a chemical context via being composed of chemical - entities (e.g. atom, molecule, ion, ion pair, radical, complex, conformer etc., - ) of the same type or of different types. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ - is_a: MaterialisticMixin - abstract: true - mixin: true + class_uri: rdfs:Resource + RightsStatement: + name: RightsStatement + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/RightsStatement + description: See [DCAT-AP specs:RightsStatement](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#RightsStatement) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcterms:RightsStatement + is_a: SupportiveEntity slots: - - alternative_label - - has_physical_state - - has_temperature - - has_mass - - has_volume - - has_density - - has_pressure - - has_concentration - - has_ph_value - - composed_of - - has_amount - class_uri: chemical_entities_ap:ChemicalSubstanceMixin - PolymerMixin: - name: PolymerMixin - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/PolymerMixin - description: A LinkML mixin used to pass down properties common to all chemical - substances that are composed of macromolecules of different kinds and which - may be differentiated by composition, length, degree of branching etc.. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ - is_a: ChemicalSubstanceMixin - abstract: true - mixin: true + - title + - description + class_uri: dcterms:RightsStatement + Role: + name: Role + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Role + description: See [DCAT-AP specs:Role](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Role) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - dcat:Role + is_a: SupportiveEntity slots: - - alternative_label - - has_physical_state - - has_temperature - - has_mass - - has_volume - - has_density - - has_pressure - - has_concentration - - has_ph_value - - composed_of - - has_amount - class_uri: chemical_entities_ap:PolymerMixin - ChemicalReaction: - name: ChemicalReaction - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ChemicalReaction - description: A process that leads to the transformation of one set of chemical - substances to another and that is the subject matter of a DataGeneratingActivity. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + - title + - description + class_uri: dcat:Role + Software: + name: Software + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Software + description: An instrument composed of a series of instructions that can be interpreted + by or directly executed by a computer. + in_subset: + - domain_agnostic_core + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - SIO:010345 + - prov:SoftwareAgent exact_mappings: - - MOP:0000543 - - REX:0000002 - - AFP:0003711 - narrow_mappings: - - RXNO:0000329 - is_a: EvaluatedActivity + - schema:SoftwareApplication + is_a: AgenticEntity slots: - id - - Activity_title - - Activity_description - - Activity_has_part - - Activity_had_input_entity - - Activity_had_output_entity - - Activity_had_input_activity - - Activity_carried_out_by - - Activity_has_qualitative_attribute - - Activity_has_quantitative_attribute - - Activity_part_of - - ClassifierMixin_type - - rdf_type - - EvaluatedActivity_other_identifier - - used_starting_material - - used_reactant - - generated_product - - used_catalyst - - used_solvent - - has_duration - - used_reactor - - ChemicalReaction_has_temperature - - ChemicalReaction_has_pressure - - has_yield - - has_reaction_step - - ChemicalReaction_related_resource - slot_usage: - has_temperature: - name: has_temperature - description: The slot to specify the Temperature at which a ChemicalReaction - takes place. - inlined_as_list: true - has_pressure: - name: has_pressure - description: The slot to specify the Pressure at which a ChemicalReaction - takes place. - related_resource: - name: related_resource - description: The slot to specify any Documents related to a ChemicalReaction. - range: Resource + - title + - description + - has_qualitative_attribute + - has_quantitative_attribute + - AgenticEntity_part_of + - ClassifierMixin_type + - rdf_type + - Software_has_part + - Software_other_identifier + slot_usage: + has_part: + name: has_part + description: The slot to specify parts of a Software that are themselves Software. + range: Software multivalued: true inlined: true inlined_as_list: true - class_uri: SIO:010345 - StartingMaterial: - name: StartingMaterial - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/StartingMaterial - description: A ChemicalSubstance with that has a starting material role in a synthesis. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + other_identifier: + name: other_identifier + description: A slot to provide a secondary identifier for a Software. + range: Identifier + required: false + multivalued: true + inlined_as_list: true + class_uri: prov:SoftwareAgent + Standard: + name: Standard + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Standard + description: See [DCAT-AP specs:Standard](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Standard) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ mappings: - - PROCO:0000029 - is_a: MaterialEntity + - dcterms:Standard + is_a: SupportiveEntity + slots: + - title + - description + class_uri: dcterms:Standard + SupportiveEntity: + name: SupportiveEntity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/SupportiveEntity + description: The supportive entities are supporting the main entities in the Application + Profile. They are included in the Application Profile because they form the + range of properties. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + slots: + - title + - description + class_uri: dcatapplus:SupportiveEntity + Surrounding: + name: Surrounding + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/Surrounding + description: The surrounding in which the dataset creating activity took place + (e.g. a lab). + in_subset: + - domain_agnostic_core + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - prov:Location mixins: - - ChemicalSubstanceMixin + - ClassifierMixin slots: - - Entity_title - - Entity_description - - id - - Entity_other_identifier - - has_qualitative_attribute - - has_quantitative_attribute - - Entity_part_of + - title + - description - ClassifierMixin_type - rdf_type - - MaterialEntity_has_part - - alternative_label - - has_physical_state - - has_temperature - - has_mass - - has_volume - - has_density - - has_pressure - - has_molar_equivalent - - has_concentration - - has_ph_value - - composed_of - - has_amount - class_uri: PROCO:0000029 - DissolvingSubstance: - name: DissolvingSubstance - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/DissolvingSubstance - description: A liquid ChemicalSubstance that dissolves or that is capable of dissolving - a ChemicalSubstance. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + class_uri: prov:Location + TimeInstant: + name: TimeInstant + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/TimeInstant + description: See [DCAT-AP specs:TimeInstant](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#TimeInstant) + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/ + mappings: + - time:Instant + is_a: SupportiveEntity + slots: + - title + - description + class_uri: time:Instant + SubstanceSample: + name: SubstanceSample + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/SubstanceSample + description: A MaterialSample derived from a chemical substance that is of interest + in an analytical procedure. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ aliases: - - solvent + - analyte mappings: - - SIO:010417 - exact_mappings: - - VOC4CAT:0007246 - - NCIT:C45790 - is_a: AgenticEntity + - SIO:001378 + is_a: MaterialSample mixins: - ChemicalSubstanceMixin slots: - id - - title - - description - - AgenticEntity_other_identifier - has_qualitative_attribute - has_quantitative_attribute - - AgenticEntity_has_part - - AgenticEntity_part_of + - Entity_has_part + - Entity_part_of - ClassifierMixin_type - rdf_type - - has_percentage_of_total + - EvaluatedEntity_was_generated_by + - EvaluatedEntity_title + - EvaluatedEntity_description + - EvaluatedEntity_other_identifier + - MaterialSample_derived_from - alternative_label - has_physical_state - has_temperature @@ -18302,34 +19128,33 @@ classes: - has_ph_value - composed_of - has_amount - class_uri: SIO:010417 - Reagent: - name: Reagent - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/Reagent - description: A ChemicalSubstance that is consumed or transformed in a ChemicalReaction. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + class_uri: SIO:001378 + PolymerSample: + name: PolymerSample + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/PolymerSample + description: A SubstanceSample derived from a Polymer. + todos: + - Find a better mapping, as it is currently mapped to same ontology class as its + parent. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ mappings: - - SIO:010411 - exact_mappings: - - NCIT:C802 - - VOC4CAT:0000101 - close_mappings: - - OBI:0001879 - - PROCO:0000029 - is_a: MaterialEntity + - SIO:001378 + is_a: SubstanceSample mixins: - - ChemicalSubstanceMixin + - PolymerMixin slots: - - Entity_title - - Entity_description - id - - Entity_other_identifier - has_qualitative_attribute - has_quantitative_attribute + - Entity_has_part - Entity_part_of - ClassifierMixin_type - rdf_type - - MaterialEntity_has_part + - EvaluatedEntity_was_generated_by + - EvaluatedEntity_title + - EvaluatedEntity_description + - EvaluatedEntity_other_identifier + - MaterialSample_derived_from - alternative_label - has_physical_state - has_temperature @@ -18337,26 +19162,23 @@ classes: - has_volume - has_density - has_pressure - - has_molar_equivalent - has_concentration - has_ph_value - composed_of - has_amount - class_uri: SIO:010411 - ChemicalProduct: - name: ChemicalProduct - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ChemicalProduct - description: A chemical substance that is produced by a ChemicalReaction. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + class_uri: SIO:001378 + ChemicalEntity: + name: ChemicalEntity + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ChemicalEntity + description: Any constitutionally or isotopically distinct atom, molecule, ion, + ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately + distinguishable entity. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + aliases: + - molecular entity mappings: - - NCIT:C48810 - exact_mappings: - - VOC4CAT:0000194 - close_mappings: - - ENVO:2000000 - is_a: MaterialEntity - mixins: - - ChemicalSubstanceMixin + - CHEBI:23367 + is_a: Entity slots: - Entity_title - Entity_description @@ -18367,103 +19189,87 @@ classes: - Entity_part_of - ClassifierMixin_type - rdf_type - - MaterialEntity_has_part - - alternative_label - - has_physical_state - - has_temperature - - has_mass - - has_volume - - has_density - - has_pressure - - has_concentration - - has_ph_value - - composed_of - - has_amount - class_uri: NCIT:C48810 - Catalyst: - name: Catalyst - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/Catalyst - description: A ChemicalSubstance or MaterialEntity that initiates or accelerates - a ChemicalReaction without itself being affected. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + - inchi + - inchikey + - smiles + - molecular_formula + - iupac_name + - has_molar_mass + - ChemicalEntity_has_part + slot_usage: + has_part: + name: has_part + description: The slot to provide the parts of a ChemicalEntity that are themself + chemical entities. + slot_uri: BFO:0000051 + range: ChemicalEntity + multivalued: true + inlined_as_list: true + class_uri: CHEBI:23367 + Atom: + name: Atom + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/Atom + description: An Entity constituting the smallest component of a chemical element + having the chemical properties of the element. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ mappings: - - SIO:010344 - exact_mappings: - - VOC4CAT:0000194 - - NCIT:C48810 - close_mappings: - - CHEBI:35223 - is_a: AgenticEntity - mixins: - - ChemicalSubstanceMixin + - CHEBI:33250 + is_a: Entity slots: - - id - - title - - description - - AgenticEntity_other_identifier + - Entity_title + - Entity_description + - id + - Entity_other_identifier - has_qualitative_attribute - has_quantitative_attribute - - AgenticEntity_has_part - - AgenticEntity_part_of + - Entity_has_part + - Entity_part_of - ClassifierMixin_type - - rdf_type - - has_molar_equivalent - - alternative_label - - has_physical_state - - has_temperature - - has_mass - - has_volume - - has_density - - has_pressure - - has_concentration - - has_ph_value - - composed_of - - has_amount - class_uri: SIO:010344 - Reactor: - name: Reactor - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/Reactor - description: A reactor is a container for controlling a biological or chemical - reaction or process. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + - Atom_rdf_type + slot_usage: + rdf_type: + name: rdf_type + description: The slot to provide the Atom as a ChEBI ID from the atom (CHEBI:33250) + branch. + required: true + class_uri: CHEBI:33250 + MolarMass: + name: MolarMass + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/MolarMass + description: A Mass (physical quality) that quantifies the mass of a homogeneous + ChemicalSubstance containing 6.02 x 10^23 atoms or molecules. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ mappings: - - AFE:0000153 - exact_mappings: - - VOC4CAT:0007017 - is_a: Device - mixins: - - MaterialisticMixin + - AFR:0002409 + close_mappings: + - PATO:0001681 + is_a: Mass slots: - - id - title - description - - has_qualitative_attribute - - has_quantitative_attribute - - AgenticEntity_part_of + - QuantitativeAttribute_value + - quantitativeAttribute__has_quantity_type + - quantitativeAttribute__unit - ClassifierMixin_type - rdf_type - - Device_has_part - - Device_other_identifier - - alternative_label - - has_physical_state - - has_temperature - - has_mass - - has_volume - - has_density - - has_pressure - class_uri: AFE:0000153 - Yield: - name: Yield - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/Yield - description: A dimensionless physical quantity describing the fraction of a product - B that is formed from a reactant A taking into account the stoichiometry. If - A fully reacts to B without side-reactions, the yield of product B is 1 (or - 100 %). - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + class_uri: AFR:0002409 + Concentration: + name: Concentration + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/Concentration + description: A QuantitativeAttribute of a ChemicalSubstance that represents the + amount of a constituent divided by the volume of the mixture. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ mappings: - - CHMO:0002855 + - CHMO:0002820 exact_mappings: - - VOC4CAT:0005005 + - EDAM:2140 + - NCIT:C41185 + - VOC4CAT:0007244 + - AFR:0002036 + close_mappings: + - PATO:0000033 + narrow_mappings: + - CHMO:0002822 is_a: QuantitativeAttribute slots: - title @@ -18473,15 +19279,18 @@ classes: - quantitativeAttribute__unit - ClassifierMixin_type - rdf_type - class_uri: CHMO:0002855 - MolarEquivalent: - name: MolarEquivalent - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/MolarEquivalent - description: A dimensionless ratio that quantifies the stoichiometric proportion - of a chemical substance relative to a reference substance in a chemical reaction. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + class_uri: CHMO:0002820 + AmountOfSubstance: + name: AmountOfSubstance + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/AmountOfSubstance + description: The total amount of substance used in a ChemicalReaction. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + aliases: + - SubstanceAmount mappings: - qudt:Quantity + close_mappings: + - PATO:0000070 is_a: QuantitativeAttribute slots: - title @@ -18492,14 +19301,17 @@ classes: - ClassifierMixin_type - rdf_type class_uri: qudt:Quantity - PercentageOfTotal: - name: PercentageOfTotal - definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/PercentageOfTotal - description: A dimensionless ratio that quantifies the stoichiometric proportion - of a chemical substance relative to a reference substance in a chemical reaction. - from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/ + PHValue: + name: PHValue + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/PHValue + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ mappings: - - qudt:Quantity + - SIO:001089 + exact_mappings: + - NCIT:C45997 + - AFR:0001142 + close_mappings: + - PATO:0001842 is_a: QuantitativeAttribute slots: - title @@ -18509,7 +19321,133 @@ classes: - quantitativeAttribute__unit - ClassifierMixin_type - rdf_type - class_uri: qudt:Quantity + class_uri: SIO:001089 + InChIKey: + name: InChIKey + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/InChIKey + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + mappings: + - CHEMINF:000059 + is_a: QualitativeAttribute + slots: + - title + - description + - QualitativeAttribute_value + - ClassifierMixin_type + - rdf_type + class_uri: CHEMINF:000059 + InChi: + name: InChi + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/InChi + description: A structure descriptor which conforms to the InChI format specification. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + mappings: + - CHEMINF:000113 + is_a: QualitativeAttribute + slots: + - title + - description + - QualitativeAttribute_value + - ClassifierMixin_type + - rdf_type + class_uri: CHEMINF:000113 + MolecularFormula: + name: MolecularFormula + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/MolecularFormula + description: A structure descriptor which identifies each constituent element + by its chemical symbol and indicates the number of atoms of each element found + in each discrete molecule of that compound. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + mappings: + - CHEMINF:000042 + is_a: QualitativeAttribute + slots: + - title + - description + - QualitativeAttribute_value + - ClassifierMixin_type + - rdf_type + class_uri: CHEMINF:000042 + IUPACName: + name: IUPACName + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/IUPACName + description: A systematic name which is formulated according to the rules and + recommendations for chemical nomenclature set out by the International Union + of Pure and Applied Chemistry (IUPAC). + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + mappings: + - CHEMINF:000107 + is_a: QualitativeAttribute + slots: + - title + - description + - QualitativeAttribute_value + - ClassifierMixin_type + - rdf_type + class_uri: CHEMINF:000107 + SMILES: + name: SMILES + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/SMILES + description: A structure descriptor that denotes a molecular structure as a graph + and conforms to the SMILES format specification. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + mappings: + - CHEMINF:000018 + is_a: QualitativeAttribute + slots: + - title + - description + - QualitativeAttribute_value + - ClassifierMixin_type + - rdf_type + class_uri: CHEMINF:000018 + ChemicalSubstanceMixin: + name: ChemicalSubstanceMixin + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ChemicalSubstanceMixin + description: A LinkML mixin used to pass down properties common to all material + entities that are described in a chemical context via being composed of chemical + entities (e.g. atom, molecule, ion, ion pair, radical, complex, conformer etc., + ) of the same type or of different types. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + is_a: MaterialisticMixin + abstract: true + mixin: true + slots: + - alternative_label + - has_physical_state + - has_temperature + - has_mass + - has_volume + - has_density + - has_pressure + - has_concentration + - has_ph_value + - composed_of + - has_amount + class_uri: chemical_entities_ap:ChemicalSubstanceMixin + PolymerMixin: + name: PolymerMixin + definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/PolymerMixin + description: A LinkML mixin used to pass down properties common to all chemical + substances that are composed of macromolecules of different kinds and which + may be differentiated by composition, length, degree of branching etc.. + from_schema: https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/ + is_a: ChemicalSubstanceMixin + abstract: true + mixin: true + slots: + - alternative_label + - has_physical_state + - has_temperature + - has_mass + - has_volume + - has_density + - has_pressure + - has_concentration + - has_ph_value + - composed_of + - has_amount + class_uri: chemical_entities_ap:PolymerMixin MaterialisticMixin: name: MaterialisticMixin definition_uri: https://w3id.org/nfdi-de/dcat-ap-plus/materials/MaterialisticMixin @@ -18704,7 +19642,7 @@ classes: class_uri: qudt:Quantity metamodel_version: 1.7.0 source_file: coremeta4cat.yaml -source_file_date: '2026-07-10T09:33:48' -source_file_size: 6791 -generation_date: '2026-07-13T14:27:53' +source_file_date: '2026-07-14T14:52:46' +source_file_size: 7440 +generation_date: '2026-07-14T14:59:29' diff --git a/docs/simulation.md b/docs/simulation.md index 5074a3831..49c993a28 100644 --- a/docs/simulation.md +++ b/docs/simulation.md @@ -68,7 +68,7 @@ instance. Multiple properties may be computed in a single simulation run. **Data Type Class Details:** -
+
CalculatedProperty **Abstract Class** @@ -90,7 +90,7 @@ Linked from Simulation via the calculated_property slot. **Possible Subclasses / Enumerations of CalculatedProperty:** -
+
ThermodynamicStability **Description:** Thermodynamic stability of a material or phase, characterised by formation @@ -211,7 +211,7 @@ metric). Zero for phases on the hull; positive values indicate metastability.

-
+
Piezoelectricity **Description:** Piezoelectric response of a non-centrosymmetric material, described by the @@ -307,7 +307,7 @@ describing the coupling between stress and electric polarization.

-
+
ElasticConstants **Description:** Elastic mechanical properties of a material derived from the elastic tensor, @@ -427,7 +427,7 @@ elastic response of the material.

-
+
Surfaces **Description:** Surface properties of a catalyst computed from a periodic slab model, @@ -550,7 +550,7 @@ periodic interactions between slab images.

-
+
DielectricTensors **Description:** Dielectric tensor computed from density functional perturbation theory (DFPT). @@ -709,7 +709,7 @@ geometry optimisation (e.g. energy < 1e-5 eV, forces < 0.02 eV/A).

-
+
PhononDispersion **Description:** Phonon dispersion relations computed from interatomic force constants, @@ -784,14 +784,14 @@ Distinct from the electronic k-point mesh.

-imaginary modes (Optional, Multivalued) +imaginary modes (Optional) **Description:** Whether imaginary (soft) phonon modes are present in the dispersion. Imaginary modes indicate dynamical instability of the structure. **Data Type:** boolean -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`coremeta4cat:imaginary_modes`](https://w3id.org/nfdi4cat/coremeta4cat/imaginary_modes) @@ -849,7 +849,7 @@ lattice parameters (e.g. "Fm-3m, a=3.92 A for Pt").

-
+
EquationsOfState **Description:** Equation of state relating energy (or enthalpy) to volume, fitted to a @@ -1048,7 +1048,7 @@ geometry optimisation (e.g. energy < 1e-5 eV, forces < 0.02 eV/A).

-
+
AqueousStability **Description:** Electrochemical (Pourbaix) stability of a catalyst in aqueous solution as @@ -1144,14 +1144,33 @@ stability screening.
has temperature (Optional) -**Description:** No description available +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. -**Data Type:** string +**Data Type:** Temperature **Cardinality:** Optional +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + **Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +**Schema Reference:** [Temperature](./elements/classes/Temperature.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback @@ -1204,7 +1223,7 @@ lattice parameters (e.g. "Fm-3m, a=3.92 A for Pt").

-
+
GrainBoundaries **Description:** Grain boundary structure and energetics from atomistic simulation. @@ -1404,7 +1423,7 @@ lattice parameters (e.g. "Fm-3m, a=3.92 A for Pt").

-
+
ElectronicStructure **Description:** Electronic band structure and density of states, characterising the @@ -1438,14 +1457,14 @@ electronic properties of a catalyst relevant to activity descriptors

-spin polarized (Optional, Multivalued) +spin polarized (Optional) **Description:** Whether the electronic structure calculation is spin-polarized (accounts for spin-up and spin-down electrons separately). **Data Type:** boolean -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`coremeta4cat:spin_polarized`](https://w3id.org/nfdi4cat/coremeta4cat/spin_polarized) @@ -1605,7 +1624,7 @@ geometry optimisation (e.g. energy < 1e-5 eV, forces < 0.02 eV/A).

-
+
Ferroelectrics **Description:** Ferroelectric properties computed from DFT, including spontaneous @@ -1786,7 +1805,7 @@ lattice parameters (e.g. "Fm-3m, a=3.92 A for Pt").

-
+
BandGap **Description:** Electronic band gap and its character (direct/indirect), with optional @@ -1902,14 +1921,14 @@ surface slab, defect supercell).

-gw hybrid correction (Optional, Multivalued) +gw hybrid correction (Optional) **Description:** Whether a many-body GW correction or hybrid functional (e.g. HSE06) was applied to correct the DFT band gap underestimation. **Data Type:** boolean -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`coremeta4cat:gw_hybrid_correction`](https://w3id.org/nfdi4cat/coremeta4cat/gw_hybrid_correction) @@ -2056,6 +2075,29 @@ geometry optimisation (e.g. energy < 1e-5 eV, forces < 0.02 eV/A).

+
+activity designator (Optional) + +**Description:** Internal type designator for CatalysisDataGeneratingActivity subclasses +(Synthesis, Characterization, Simulation). Only needs to be set by hand +when nesting one of these inside another object's was_generated_by list +(e.g. in a combined CatalysisDataset file) -- LinkML fills it in +automatically when a class is instantiated directly. + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`rdf:type`](http://www.w3.org/1999/02/22-rdf-syntax-ns#type) + +**Schema Reference:** [activity_designator](./elements/slots/activity_designator.md) + +

+ + 💡 Submit Term Feedback + +

+
realized plan (Mandatory) @@ -2069,7 +2111,7 @@ geometry optimisation (e.g. energy < 1e-5 eV, forces < 0.02 eV/A). **Data Type Class Details:** -
+
SimulationMethod **Abstract Class** @@ -2082,6 +2124,25 @@ Linked from Simulation via realized_plan. **Schema Reference:** [SimulationMethod](./elements/classes/SimulationMethod.md) +**Slots** + +
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback @@ -2090,7 +2151,7 @@ Linked from Simulation via realized_plan. **Possible Subclasses / Enumerations of SimulationMethod:** -

+
DFT **Description:** Density functional theory — a quantum mechanical method for calculating @@ -2185,14 +2246,14 @@ U value (e.g. "Fe d: U=4.0 eV, J=0.0 eV").

-spin polarization (Optional, Multivalued) +spin polarization (Optional) **Description:** Whether spin polarization (collinear magnetism) is included in the DFT calculation. Set to true for systems containing magnetic elements. **Data Type:** boolean -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`coremeta4cat:spin_polarization`](https://w3id.org/nfdi4cat/coremeta4cat/spin_polarization) @@ -2225,13 +2286,30 @@ calculation. Set to true for systems containing magnetic elements.

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback

-
+
MolecularDynamics **Description:** Molecular dynamics simulation — a method for computing the time evolution @@ -2327,13 +2405,13 @@ thermodynamic quantities are conserved.

-number of atoms (Optional, Multivalued) +number of atoms (Optional) **Description:** Number of atoms in the simulation cell or supercell. **Data Type:** integer -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`coremeta4cat:number_of_atoms`](https://w3id.org/nfdi4cat/coremeta4cat/number_of_atoms) @@ -2345,13 +2423,30 @@ thermodynamic quantities are conserved.

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback

-
+
Microkinetics **Description:** Microkinetic modelling — a mean-field kinetic approach that integrates @@ -2407,14 +2502,29 @@ stiff ODE solver, steady-state Newton method).
has temperature (Optional) -**Description:** No description available +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. -**Data Type:** string +**Data Type:** Temperature **Cardinality:** Optional +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + **Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -2424,14 +2534,33 @@ stiff ODE solver, steady-state Newton method).

has pressure (Optional) -**Description:** No description available +**Description:** The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity. -**Data Type:** string +**Data Type:** Pressure **Cardinality:** Optional +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + **Schema Reference:** [has_pressure](./elements/slots/has_pressure.md) +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +**Schema Reference:** [Pressure](./elements/classes/Pressure.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback @@ -2478,13 +2607,30 @@ stiff ODE solver, steady-state Newton method).

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback

-
+
MonteCarlo **Description:** Monte Carlo simulation — a stochastic method that samples configuration @@ -2518,13 +2664,13 @@ and lattice-based kinetics.

-number of steps (Optional, Multivalued) +number of steps (Optional) **Description:** Total number of Monte Carlo moves or trial configurations generated. **Data Type:** integer -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`coremeta4cat:number_of_steps`](https://w3id.org/nfdi4cat/coremeta4cat/number_of_steps) @@ -2539,14 +2685,29 @@ and lattice-based kinetics.
has temperature (Optional) -**Description:** No description available +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. -**Data Type:** string +**Data Type:** Temperature **Cardinality:** Optional +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + **Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -2594,13 +2755,13 @@ Kawasaki, heat-bath algorithm).

-equilibration steps (Optional, Multivalued) +equilibration steps (Optional) **Description:** Number of MC steps used for equilibration before data collection begins. **Data Type:** integer -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`coremeta4cat:equilibration_steps`](https://w3id.org/nfdi4cat/coremeta4cat/equilibration_steps) @@ -2613,13 +2774,13 @@ Kawasaki, heat-bath algorithm).

-sampling interval (Optional, Multivalued) +sampling interval (Optional) **Description:** Interval between successive MC snapshots used for property averaging. **Data Type:** integer -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`coremeta4cat:sampling_interval`](https://w3id.org/nfdi4cat/coremeta4cat/sampling_interval) @@ -2631,6 +2792,23 @@ Kawasaki, heat-bath algorithm).

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback diff --git a/docs/synthesis.md b/docs/synthesis.md index bcc0b3f7e..c16e1f878 100644 --- a/docs/synthesis.md +++ b/docs/synthesis.md @@ -123,6 +123,241 @@ Metadata are organized hierarchically based on the selected synthesis method. Me **Schema Reference:** [solvent](./elements/slots/solvent.md) +**Data Type Class Details:** + +

+ChemicalEntity + +**Description:** Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. + +**CURIE:** [`CHEBI:23367`](http://purl.obolibrary.org/obo/CHEBI_23367) + +**Schema Reference:** [ChemicalEntity](./elements/classes/ChemicalEntity.md) + +**Slots** + +
+inchi (Recommended) + +**Description:** The slot to provide the InChi descriptor of a ChemicalEntity. + +**Data Type:** InChi + +**Cardinality:** Recommended + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [inchi](./elements/slots/inchi.md) + +**Data Type Class Details:** + +
+InChi + +**Description:** A structure descriptor which conforms to the InChI format specification. + +**CURIE:** [`CHEMINF:000113`](http://semanticscience.org/resource/CHEMINF_000113) + +**Schema Reference:** [InChi](./elements/classes/InChi.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+inchikey (Recommended) + +**Description:** The slot to provide the InChiKey of a ChemicalEntity. + +**Data Type:** InChIKey + +**Cardinality:** Recommended + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [inchikey](./elements/slots/inchikey.md) + +**Data Type Class Details:** + +
+InChIKey + +**Description:** No description available + +**CURIE:** [`CHEMINF:000059`](http://semanticscience.org/resource/CHEMINF_000059) + +**Schema Reference:** [InChIKey](./elements/classes/InChIKey.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+smiles (Recommended) + +**Description:** The slot to provide the canonical SMILES descriptor of a ChemicalEntity. + +**Data Type:** SMILES + +**Cardinality:** Recommended + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [smiles](./elements/slots/smiles.md) + +**Data Type Class Details:** + +
+SMILES + +**Description:** A structure descriptor that denotes a molecular structure as a graph and conforms to the SMILES format specification. + +**CURIE:** [`CHEMINF:000018`](http://semanticscience.org/resource/CHEMINF_000018) + +**Schema Reference:** [SMILES](./elements/classes/SMILES.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+molecular formula (Recommended) + +**Description:** The slot to provide the IUPAC formula of a ChemicalEntity. + +**Data Type:** MolecularFormula + +**Cardinality:** Recommended + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [molecular_formula](./elements/slots/molecular_formula.md) + +**Data Type Class Details:** + +
+MolecularFormula + +**Description:** A structure descriptor which identifies each constituent element by its chemical symbol and indicates the number of atoms of each element found in each discrete molecule of that compound. + +**CURIE:** [`CHEMINF:000042`](http://semanticscience.org/resource/CHEMINF_000042) + +**Schema Reference:** [MolecularFormula](./elements/classes/MolecularFormula.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+iupac name (Recommended) + +**Description:** The slot to provide the IUPAC name of a ChemicalEntity. + +**Data Type:** IUPACName + +**Cardinality:** Recommended + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [iupac_name](./elements/slots/iupac_name.md) + +**Data Type Class Details:** + +
+IUPACName + +**Description:** A systematic name which is formulated according to the rules and recommendations for chemical nomenclature set out by the International Union of Pure and Applied Chemistry (IUPAC). + +**CURIE:** [`CHEMINF:000107`](http://semanticscience.org/resource/CHEMINF_000107) + +**Schema Reference:** [IUPACName](./elements/classes/IUPACName.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+has molar mass (Recommended) + +**Description:** The slot to provide the MolarMass of a ChemicalEntity. + +**Data Type:** MolarMass + +**Cardinality:** Recommended + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_molar_mass](./elements/slots/has_molar_mass.md) + +**Data Type Class Details:** + +
+MolarMass + +**Description:** A Mass (physical quality) that quantifies the mass of a homogeneous ChemicalSubstance containing 6.02 x 10^23 atoms or molecules. + +**CURIE:** [`AFR:0002409`](http://purl.allotrope.org/ontologies/result#AFR_0002409) + +**Schema Reference:** [MolarMass](./elements/classes/MolarMass.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback @@ -144,7 +379,7 @@ Metadata are organized hierarchically based on the selected synthesis method. Me **Data Type Class Details:** -

+
SamplePretreatment **Description:** A qualitative descriptor of the pre-treatment applied to a sample @@ -166,6 +401,29 @@ before a process or measurement (e.g. "reduction at 300 °C", "outgassing").

+
+activity designator (Optional) + +**Description:** Internal type designator for CatalysisDataGeneratingActivity subclasses +(Synthesis, Characterization, Simulation). Only needs to be set by hand +when nesting one of these inside another object's was_generated_by list +(e.g. in a combined CatalysisDataset file) -- LinkML fills it in +automatically when a class is instantiated directly. + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`rdf:type`](http://www.w3.org/1999/02/22-rdf-syntax-ns#type) + +**Schema Reference:** [activity_designator](./elements/slots/activity_designator.md) + +

+ + 💡 Submit Term Feedback + +

+
had input entity (Mandatory, Multivalued) @@ -179,13 +437,13 @@ before a process or measurement (e.g. "reduction at 300 °C", "outgassing"). **Data Type Class Details:** -
+
Precursor **Description:** A MaterialSample that serves as input material in a catalyst Synthesis. Precursors are consumed or transformed during the preparation process. -**CURIE:** [`CHEBI:52717`](http://purl.obolibrary.org/obo/CHEBI_52717) +**CURIE:** [`VOC4CAT:0007794`](https://w3id.org/nfdi4cat/voc4cat_0007794) **Schema Reference:** [Precursor](./elements/classes/Precursor.md) @@ -200,51 +458,520 @@ Precursors are consumed or transformed during the preparation process. **Cardinality:** Mandatory, Multivalued -**CURIE:** [`coremeta4cat:precursor_quantity`](https://w3id.org/nfdi4cat/coremeta4cat/precursor_quantity) +**CURIE:** [`VOC4CAT:0008118`](https://w3id.org/nfdi4cat/voc4cat_0008118) **Schema Reference:** [precursor_quantity](./elements/slots/precursor_quantity.md) -

- - 💡 Submit Term Feedback - -

+**Data Type Class Details:** + +
+Mass + +**Description:** The strength of a body's gravitational attraction to other bodies. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +**Schema Reference:** [Mass](./elements/classes/Mass.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+derived from (Optional) + +**Description:** The slot to specify the Entity from which a Sample was derived. + +**Data Type:** Entity + +**Cardinality:** Optional + +**CURIE:** [`prov:wasDerivedFrom`](http://www.w3.org/ns/prov#wasDerivedFrom) + +**Schema Reference:** [derived_from](./elements/slots/derived_from.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+alternative label (Optional) + +**Description:** The slot to specify an alternative label, name or title for a MaterialEntity. + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`skos:altLabel`](http://www.w3.org/2004/02/skos/core#altLabel) + +**Schema Reference:** [alternative_label](./elements/slots/alternative_label.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has physical state (Optional) + +**Description:** The slot to specify the physical state of a MaterialEntity. + +**Data Type:** PhysicalStateEnum + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_physical_state](./elements/slots/has_physical_state.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has temperature (Optional) + +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. + +**Data Type:** Temperature + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) + +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +**Schema Reference:** [Temperature](./elements/classes/Temperature.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+has mass (Optional) + +**Description:** The slot to provide the Mass of a MaterialEntity. + +**Data Type:** Mass + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_mass](./elements/slots/has_mass.md) + +**Data Type Class Details:** + +
+Mass + +**Description:** The strength of a body's gravitational attraction to other bodies. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Mass) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has volume (Optional) + +**Description:** The slot to provide the Volume of a MaterialEntity. + +**Data Type:** Volume + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_volume](./elements/slots/has_volume.md) + +**Data Type Class Details:** + +
+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +**Schema Reference:** [Volume](./elements/classes/Volume.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+has density (Optional) + +**Description:** The slot to provide the Density of a MaterialEntity. + +**Data Type:** Density + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_density](./elements/slots/has_density.md) + +**Data Type Class Details:** + +
+Density + +**Description:** A measure of the mass per unit volume of a substance. + +**CURIE:** [`SIO:001406`](http://semanticscience.org/resource/SIO_001406) + +**Schema Reference:** [Density](./elements/classes/Density.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+has pressure (Optional) + +**Description:** The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity. + +**Data Type:** Pressure + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_pressure](./elements/slots/has_pressure.md) + +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +**Schema Reference:** [Pressure](./elements/classes/Pressure.md) + +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +

+ + 💡 Submit Term Feedback + +

+ +
+had output entity (Recommended, Multivalued) + +**Description:** The CatalystSample produced by this Synthesis. + +**Data Type:** CatalystSample + +**Cardinality:** Recommended, Multivalued + +**Schema Reference:** [had_output_entity](./elements/slots/had_output_entity.md) + +**Data Type Class Details:** + +
+CatalystSample + +**Description:** A MaterialSample that is the product of a catalyst Synthesis. +The specific type of catalyst (e.g. heterogeneous, supported metal) +is expressed via rdf_type using a VOC4CAT term. + +**CURIE:** [`OBI:0000747`](http://purl.obolibrary.org/obo/OBI_0000747) + +**Schema Reference:** [CatalystSample](./elements/classes/CatalystSample.md) + +**Slots** + +
+derived from (Optional) + +**Description:** The slot to specify the Entity from which a Sample was derived. + +**Data Type:** Entity + +**Cardinality:** Optional + +**CURIE:** [`prov:wasDerivedFrom`](http://www.w3.org/ns/prov#wasDerivedFrom) + +**Schema Reference:** [derived_from](./elements/slots/derived_from.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+alternative label (Optional) + +**Description:** The slot to specify an alternative label, name or title for a MaterialEntity. + +**Data Type:** string + +**Cardinality:** Optional + +**CURIE:** [`skos:altLabel`](http://www.w3.org/2004/02/skos/core#altLabel) + +**Schema Reference:** [alternative_label](./elements/slots/alternative_label.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has physical state (Optional) + +**Description:** The slot to specify the physical state of a MaterialEntity. + +**Data Type:** PhysicalStateEnum + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_physical_state](./elements/slots/has_physical_state.md) + +

+ + 💡 Submit Term Feedback + +

+ +
+has temperature (Optional) + +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. + +**Data Type:** Temperature + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) + +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has mass (Optional) + +**Description:** The slot to provide the Mass of a MaterialEntity. + +**Data Type:** Mass + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_mass](./elements/slots/has_mass.md) + +**Data Type Class Details:** + +
+Mass + +**Description:** The strength of a body's gravitational attraction to other bodies. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Mass) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has volume (Optional) + +**Description:** The slot to provide the Volume of a MaterialEntity. + +**Data Type:** Volume + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_volume](./elements/slots/has_volume.md) + +**Data Type Class Details:** + +
+Volume + +**Description:** A measure of regions in three-dimensional space. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Volume) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+has density (Optional) + +**Description:** The slot to provide the Density of a MaterialEntity. + +**Data Type:** Density + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_density](./elements/slots/has_density.md) + +**Data Type Class Details:** + +
+Density + +**Description:** A measure of the mass per unit volume of a substance. + +**CURIE:** [`SIO:001406`](http://semanticscience.org/resource/SIO_001406) + +*Full field list already shown [earlier on this page](#schema-class-Density) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

- + 💡 Submit Term Feedback

-
-had output entity (Recommended, Multivalued) +
+has pressure (Optional) -**Description:** The CatalystSample produced by this Synthesis. +**Description:** The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity. -**Data Type:** CatalystSample +**Data Type:** Pressure -**Cardinality:** Recommended, Multivalued +**Cardinality:** Optional -**Schema Reference:** [had_output_entity](./elements/slots/had_output_entity.md) +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_pressure](./elements/slots/has_pressure.md) **Data Type Class Details:** -
-CatalystSample +
+Pressure -**Description:** A MaterialSample that is the product of a catalyst Synthesis. -The specific type of catalyst (e.g. heterogeneous, supported metal) -is expressed via rdf_type using a VOC4CAT term. +**Description:** No description available -**CURIE:** [`OBI:0000747`](http://purl.obolibrary.org/obo/OBI_0000747) +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [CatalystSample](./elements/classes/CatalystSample.md) +*Full field list already shown [earlier on this page](#schema-class-Pressure) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

@@ -271,7 +998,7 @@ is expressed via rdf_type using a VOC4CAT term. **Data Type Class Details:** -

+
PreparationMethod **Abstract Class** @@ -284,10 +1011,29 @@ The specific preparation method type should additionally be expressed via rdf_type on the Synthesis activity using a voc4cat term (e.g. VOC4CAT:0007016 for preparation method). -**CURIE:** [`OBI:0000272`](http://purl.obolibrary.org/obo/OBI_0000272) +**CURIE:** [`VOC4CAT:0007016`](https://w3id.org/nfdi4cat/voc4cat_0007016) **Schema Reference:** [PreparationMethod](./elements/classes/PreparationMethod.md) +**Slots** + +
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback @@ -296,7 +1042,7 @@ via rdf_type on the Synthesis activity using a voc4cat term **Possible Subclasses / Enumerations of PreparationMethod:** -

+
Impregnation **Description:** Catalyst preparation by impregnation: a solution of the active phase @@ -342,7 +1088,7 @@ precursor is brought into contact with the support material. **Data Type Class Details:** -
+
Duration **Description:** A quantitative measure of elapsed time (duration of a process step). @@ -376,12 +1122,42 @@ precursor is brought into contact with the support material. **Schema Reference:** [impregnation_temperature](./elements/slots/impregnation_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
drying device (Optional, Multivalued) @@ -391,7 +1167,7 @@ precursor is brought into contact with the support material. **Cardinality:** Optional, Multivalued -**CURIE:** [`coremeta4cat:drying_device`](https://w3id.org/nfdi4cat/coremeta4cat/drying_device) +**CURIE:** [`VOC4CAT:0008122`](https://w3id.org/nfdi4cat/voc4cat_0008122) **Schema Reference:** [drying_device](./elements/slots/drying_device.md) @@ -410,10 +1186,23 @@ precursor is brought into contact with the support material. **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0008207`](https://w3id.org/nfdi4cat/voc4cat_0008207) **Schema Reference:** [has_drying_temperature](./elements/slots/has_drying_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -429,7 +1218,7 @@ precursor is brought into contact with the support material. **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0008206`](https://w3id.org/nfdi4cat/voc4cat_0008206) **Schema Reference:** [has_drying_duration](./elements/slots/has_drying_duration.md) @@ -442,13 +1231,9 @@ precursor is brought into contact with the support material. **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -465,13 +1250,13 @@ precursor is brought into contact with the support material. **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0008208`](https://w3id.org/nfdi4cat/voc4cat_0008208) **Schema Reference:** [has_drying_atmosphere](./elements/slots/has_drying_atmosphere.md) **Data Type Class Details:** -

+
Atmosphere **Description:** A qualitative descriptor of the gaseous environment or atmospheric @@ -489,7 +1274,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **Possible Subclasses / Enumerations of Atmosphere:** -
+
CalcinationGaseousEnvironment **Description:** The specific gaseous environment maintained during a calcination step @@ -527,7 +1312,7 @@ provided as a QuantitativeRange. Unit: Degree Celsius. **Data Type Class Details:** -
+
QuantitativeRange **Description:** A quantitative property expressed as a range between a lower and upper bound, @@ -599,7 +1384,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0000060`](https://w3id.org/nfdi4cat/voc4cat_0000060) **Schema Reference:** [has_calcination_dwelling_time](./elements/slots/has_calcination_dwelling_time.md) @@ -612,13 +1397,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -627,13 +1408,13 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

-number of cycles (Optional, Multivalued) +number of cycles (Optional) **Description:** Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles). **Data Type:** integer -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`VOC4CAT:0008123`](https://w3id.org/nfdi4cat/voc4cat_0008123) @@ -668,13 +1449,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +*Full field list already shown [earlier on this page](#schema-class-CalcinationGaseousEnvironment) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -697,7 +1474,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Data Type Class Details:** -

+
HeatingRate **Description:** Rate of temperature change per unit time during a thermal ramp. @@ -727,13 +1504,13 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0000056`](https://w3id.org/nfdi4cat/voc4cat_0000056) **Schema Reference:** [has_calcination_gas_flow_rate](./elements/slots/has_calcination_gas_flow_rate.md) **Data Type Class Details:** -
+
VolumeFlowRate **Description:** Volume of fluid passing a given point per unit time. @@ -760,7 +1537,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

-
+
CoPrecipitation **Description:** Catalyst preparation by co-precipitation: precursor salts are @@ -772,6 +1549,23 @@ simultaneously precipitated from solution by a precipitating agent. **Slots** +
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
precipitating agent (Optional, Multivalued) @@ -785,6 +1579,19 @@ simultaneously precipitated from solution by a precipitating agent. **Schema Reference:** [precipitating_agent](./elements/slots/precipitating_agent.md) +**Data Type Class Details:** + +
+ChemicalEntity + +**Description:** Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. + +**CURIE:** [`CHEBI:23367`](http://purl.obolibrary.org/obo/CHEBI_23367) + +*Full field list already shown [earlier on this page](#schema-class-ChemicalEntity) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -792,18 +1599,37 @@ simultaneously precipitated from solution by a precipitating agent.

-has concentration (Optional) +precipitating concentration (Optional, Multivalued) -**Description:** No description available +**Description:** Concentration of the precipitating agent/solution used to induce precipitation. -**Data Type:** string +**Data Type:** Concentration -**Cardinality:** Optional +**Cardinality:** Optional, Multivalued + +**CURIE:** [`VOC4CAT:0008125`](https://w3id.org/nfdi4cat/voc4cat_0008125) + +**Schema Reference:** [precipitating_concentration](./elements/slots/precipitating_concentration.md) + +**Data Type Class Details:** + +
+Concentration + +**Description:** A QuantitativeAttribute of a ChemicalSubstance that represents the amount of a constituent divided by the volume of the mixture. -**Schema Reference:** [has_concentration](./elements/slots/has_concentration.md) +**CURIE:** [`CHMO:0002820`](http://purl.obolibrary.org/obo/CHMO_0002820) + +**Schema Reference:** [Concentration](./elements/classes/Concentration.md) + +

+ + 💡 Submit Term Feedback + +

- + 💡 Submit Term Feedback

@@ -811,14 +1637,33 @@ simultaneously precipitated from solution by a precipitating agent.
has ph value (Optional) -**Description:** No description available +**Description:** The slot to provide the PHValue of a ChemicalSubstance. -**Data Type:** string +**Data Type:** PHValue **Cardinality:** Optional +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + **Schema Reference:** [has_ph_value](./elements/slots/has_ph_value.md) +**Data Type Class Details:** + +
+PHValue + +**Description:** No description available + +**CURIE:** [`SIO:001089`](http://semanticscience.org/resource/SIO_001089) + +**Schema Reference:** [PHValue](./elements/classes/PHValue.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback @@ -840,7 +1685,7 @@ simultaneously precipitated from solution by a precipitating agent. **Data Type Class Details:** -

+
AngularVelocity **Description:** Rate of rotational motion, typically expressed in revolutions per minute. @@ -883,13 +1728,9 @@ simultaneously precipitated from solution by a precipitating agent. **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -910,6 +1751,19 @@ simultaneously precipitated from solution by a precipitating agent. **Schema Reference:** [has_mixing_temperature](./elements/slots/has_mixing_temperature.md) +**Data Type Class Details:** + +

+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -986,6 +1840,19 @@ simultaneously precipitated from solution by a precipitating agent. **Schema Reference:** [has_aging_temperature](./elements/slots/has_aging_temperature.md) +**Data Type Class Details:** + +

+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -1001,7 +1868,7 @@ simultaneously precipitated from solution by a precipitating agent. **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0008204`](https://w3id.org/nfdi4cat/voc4cat_0008204) **Schema Reference:** [has_aging_duration](./elements/slots/has_aging_duration.md) @@ -1014,13 +1881,9 @@ simultaneously precipitated from solution by a precipitating agent. **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -1037,7 +1900,7 @@ simultaneously precipitated from solution by a precipitating agent. **Cardinality:** Optional, Multivalued -**CURIE:** [`coremeta4cat:drying_device`](https://w3id.org/nfdi4cat/coremeta4cat/drying_device) +**CURIE:** [`VOC4CAT:0008122`](https://w3id.org/nfdi4cat/voc4cat_0008122) **Schema Reference:** [drying_device](./elements/slots/drying_device.md) @@ -1056,10 +1919,23 @@ simultaneously precipitated from solution by a precipitating agent. **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0008207`](https://w3id.org/nfdi4cat/voc4cat_0008207) **Schema Reference:** [has_drying_temperature](./elements/slots/has_drying_temperature.md) +**Data Type Class Details:** + +

+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -1075,7 +1951,7 @@ simultaneously precipitated from solution by a precipitating agent. **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0008206`](https://w3id.org/nfdi4cat/voc4cat_0008206) **Schema Reference:** [has_drying_duration](./elements/slots/has_drying_duration.md) @@ -1088,13 +1964,9 @@ simultaneously precipitated from solution by a precipitating agent. **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -1111,7 +1983,7 @@ simultaneously precipitated from solution by a precipitating agent. **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0008208`](https://w3id.org/nfdi4cat/voc4cat_0008208) **Schema Reference:** [has_drying_atmosphere](./elements/slots/has_drying_atmosphere.md) @@ -1120,36 +1992,14 @@ simultaneously precipitated from solution by a precipitating agent.

Atmosphere -**Description:** A qualitative descriptor of the gaseous environment or atmospheric -conditions during a process (e.g. "air", "N2", "5% H2/Ar"). - -**CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) - -**Schema Reference:** [Atmosphere](./elements/classes/Atmosphere.md) - -

- - 💡 Submit Term Feedback - -

- -**Possible Subclasses / Enumerations of Atmosphere:** - -
-CalcinationGaseousEnvironment - -**Description:** The specific gaseous environment maintained during a calcination step -(e.g. "air", "N2", "10% O2/N2"). +**Description:** A qualitative descriptor of the gaseous environment or atmospheric +conditions during a process (e.g. "air", "N2", "5% H2/Ar"). -**CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) +**CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +*Full field list already shown [earlier on this page](#schema-class-Atmosphere) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -1186,49 +2036,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [QuantitativeRange](./elements/classes/QuantitativeRange.md) - -**Slots** - -

-title (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional - -**Schema Reference:** [title](./elements/slots/title.md) - -

- - 💡 Submit Term Feedback - -

- -
-description (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional - -**Schema Reference:** [description](./elements/slots/description.md) - -

- - 💡 Submit Term Feedback - -

+*Full field list already shown [earlier on this page](#schema-class-QuantitativeRange) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -1245,7 +2055,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0000060`](https://w3id.org/nfdi4cat/voc4cat_0000060) **Schema Reference:** [has_calcination_dwelling_time](./elements/slots/has_calcination_dwelling_time.md) @@ -1258,13 +2068,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -1273,13 +2079,13 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

-number of cycles (Optional, Multivalued) +number of cycles (Optional) **Description:** Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles). **Data Type:** integer -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`VOC4CAT:0008123`](https://w3id.org/nfdi4cat/voc4cat_0008123) @@ -1314,13 +2120,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +*Full field list already shown [earlier on this page](#schema-class-CalcinationGaseousEnvironment) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -1350,13 +2152,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [HeatingRate](./elements/classes/HeatingRate.md) +*Full field list already shown [earlier on this page](#schema-class-HeatingRate) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -1373,7 +2171,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0000056`](https://w3id.org/nfdi4cat/voc4cat_0000056) **Schema Reference:** [has_calcination_gas_flow_rate](./elements/slots/has_calcination_gas_flow_rate.md) @@ -1386,13 +2184,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [VolumeFlowRate](./elements/classes/VolumeFlowRate.md) +*Full field list already shown [earlier on this page](#schema-class-VolumeFlowRate) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -1406,7 +2200,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

-
+
SolGel **Description:** Catalyst preparation by the sol-gel process: hydrolysis and condensation @@ -1446,7 +2240,7 @@ of precursor molecules to form a colloidal network (gel). **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0008204`](https://w3id.org/nfdi4cat/voc4cat_0008204) **Schema Reference:** [has_aging_duration](./elements/slots/has_aging_duration.md) @@ -1459,13 +2253,9 @@ of precursor molecules to form a colloidal network (gel). **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -1511,6 +2301,23 @@ of precursor molecules to form a colloidal network (gel).

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
drying device (Optional, Multivalued) @@ -1520,7 +2327,7 @@ of precursor molecules to form a colloidal network (gel). **Cardinality:** Optional, Multivalued -**CURIE:** [`coremeta4cat:drying_device`](https://w3id.org/nfdi4cat/coremeta4cat/drying_device) +**CURIE:** [`VOC4CAT:0008122`](https://w3id.org/nfdi4cat/voc4cat_0008122) **Schema Reference:** [drying_device](./elements/slots/drying_device.md) @@ -1539,10 +2346,23 @@ of precursor molecules to form a colloidal network (gel). **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0008207`](https://w3id.org/nfdi4cat/voc4cat_0008207) **Schema Reference:** [has_drying_temperature](./elements/slots/has_drying_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -1558,7 +2378,7 @@ of precursor molecules to form a colloidal network (gel). **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0008206`](https://w3id.org/nfdi4cat/voc4cat_0008206) **Schema Reference:** [has_drying_duration](./elements/slots/has_drying_duration.md) @@ -1571,13 +2391,9 @@ of precursor molecules to form a colloidal network (gel). **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -1594,7 +2410,7 @@ of precursor molecules to form a colloidal network (gel). **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0008208`](https://w3id.org/nfdi4cat/voc4cat_0008208) **Schema Reference:** [has_drying_atmosphere](./elements/slots/has_drying_atmosphere.md) @@ -1608,31 +2424,9 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) -**Schema Reference:** [Atmosphere](./elements/classes/Atmosphere.md) - -

- - 💡 Submit Term Feedback - -

- -**Possible Subclasses / Enumerations of Atmosphere:** - -
-CalcinationGaseousEnvironment - -**Description:** The specific gaseous environment maintained during a calcination step -(e.g. "air", "N2", "10% O2/N2"). - -**CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) +*Full field list already shown [earlier on this page](#schema-class-Atmosphere) -- this class is reached from multiple fields.* -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) - -

- - 💡 Submit Term Feedback - -

+

@@ -1646,7 +2440,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").

-
+
Solvothermal **Description:** Catalyst preparation under elevated temperature and pressure in a @@ -1688,7 +2482,7 @@ sealed vessel using a non-aqueous solvent. **Cardinality:** Optional, Multivalued -**CURIE:** [`coremeta4cat:stirrer_type`](https://w3id.org/nfdi4cat/coremeta4cat/stirrer_type) +**CURIE:** [`VOC4CAT:0008113`](https://w3id.org/nfdi4cat/voc4cat_0008113) **Schema Reference:** [stirrer_type](./elements/slots/stirrer_type.md) @@ -1720,13 +2514,9 @@ sealed vessel using a non-aqueous solvent. **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [HeatingRate](./elements/classes/HeatingRate.md) +*Full field list already shown [earlier on this page](#schema-class-HeatingRate) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -1734,6 +2524,23 @@ sealed vessel using a non-aqueous solvent.

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
synthesis temperature (Optional, Multivalued) @@ -1747,6 +2554,19 @@ sealed vessel using a non-aqueous solvent. **Schema Reference:** [synthesis_temperature](./elements/slots/synthesis_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -1775,13 +2595,9 @@ sealed vessel using a non-aqueous solvent. **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -1804,7 +2620,7 @@ sealed vessel using a non-aqueous solvent. **Data Type Class Details:** -

+
VesselType **Description:** A qualitative descriptor of the type of reaction or synthesis vessel @@ -1835,7 +2651,7 @@ used (e.g. "autoclave", "round-bottom flask", "Schlenk tube"). **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0007809`](https://w3id.org/nfdi4cat/voc4cat_0007809) **Schema Reference:** [has_atmosphere](./elements/slots/has_atmosphere.md) @@ -1849,31 +2665,9 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) -**Schema Reference:** [Atmosphere](./elements/classes/Atmosphere.md) - -

- - 💡 Submit Term Feedback - -

- -**Possible Subclasses / Enumerations of Atmosphere:** - -
-CalcinationGaseousEnvironment - -**Description:** The specific gaseous environment maintained during a calcination step -(e.g. "air", "N2", "10% O2/N2"). - -**CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) - -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +*Full field list already shown [earlier on this page](#schema-class-Atmosphere) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -1887,7 +2681,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").

-
+
PlasmaAssisted **Description:** Catalyst preparation using plasma treatment to modify surface @@ -1933,7 +2727,7 @@ properties or deposit active components. **Data Type Class Details:** -
+
PowerQuantity **Description:** Rate of energy transfer per unit time (e.g. laser power in mW). @@ -1976,35 +2770,61 @@ properties or deposit active components. **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* + +

- - 💡 Submit Term Feedback - -

+ + 💡 Submit Term Feedback + +

+ +
+synthesis pressure (Optional, Multivalued) + +**Description:** Pressure applied during synthesis (e.g. in autoclave or plasma reactor). + +**Data Type:** Pressure + +**Cardinality:** Optional, Multivalued + +**CURIE:** [`VOC4CAT:0000053`](https://w3id.org/nfdi4cat/voc4cat_0000053) + +**Schema Reference:** [synthesis_pressure](./elements/slots/synthesis_pressure.md) + +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Pressure) -- this class is reached from multiple fields.* + +

- + 💡 Submit Term Feedback

-synthesis pressure (Optional, Multivalued) - -**Description:** Pressure applied during synthesis (e.g. in autoclave or plasma reactor). +id (Optional) -**Data Type:** Pressure +**Description:** No description available -**Cardinality:** Optional, Multivalued +**Data Type:** string -**CURIE:** [`VOC4CAT:0000053`](https://w3id.org/nfdi4cat/voc4cat_0000053) +**Cardinality:** Optional -**Schema Reference:** [synthesis_pressure](./elements/slots/synthesis_pressure.md) +**Schema Reference:** [id](./elements/slots/id.md)

- + 💡 Submit Term Feedback

@@ -2022,6 +2842,19 @@ properties or deposit active components. **Schema Reference:** [synthesis_temperature](./elements/slots/synthesis_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -2050,13 +2883,9 @@ properties or deposit active components. **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -2087,13 +2916,9 @@ used (e.g. "autoclave", "round-bottom flask", "Schlenk tube"). **CURIE:** [`coremeta4cat:VesselType`](https://w3id.org/nfdi4cat/coremeta4cat/VesselType) -**Schema Reference:** [VesselType](./elements/classes/VesselType.md) +*Full field list already shown [earlier on this page](#schema-class-VesselType) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -2110,7 +2935,7 @@ used (e.g. "autoclave", "round-bottom flask", "Schlenk tube"). **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0007809`](https://w3id.org/nfdi4cat/voc4cat_0007809) **Schema Reference:** [has_atmosphere](./elements/slots/has_atmosphere.md) @@ -2124,31 +2949,9 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) -**Schema Reference:** [Atmosphere](./elements/classes/Atmosphere.md) - -

- - 💡 Submit Term Feedback - -

- -**Possible Subclasses / Enumerations of Atmosphere:** - -
-CalcinationGaseousEnvironment - -**Description:** The specific gaseous environment maintained during a calcination step -(e.g. "air", "N2", "10% O2/N2"). - -**CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) - -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +*Full field list already shown [earlier on this page](#schema-class-Atmosphere) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -2162,7 +2965,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").

-
+
CombustionSynthesis **Description:** Catalyst preparation by combustion of a fuel/oxidizer mixture, @@ -2244,6 +3047,19 @@ producing metal oxide catalysts in a single rapid step. **Schema Reference:** [set_temperature](./elements/slots/set_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -2269,6 +3085,23 @@ producing metal oxide catalysts in a single rapid step.

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
synthesis temperature (Optional, Multivalued) @@ -2282,6 +3115,19 @@ producing metal oxide catalysts in a single rapid step. **Schema Reference:** [synthesis_temperature](./elements/slots/synthesis_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -2310,13 +3156,9 @@ producing metal oxide catalysts in a single rapid step. **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -2347,13 +3189,9 @@ used (e.g. "autoclave", "round-bottom flask", "Schlenk tube"). **CURIE:** [`coremeta4cat:VesselType`](https://w3id.org/nfdi4cat/coremeta4cat/VesselType) -**Schema Reference:** [VesselType](./elements/classes/VesselType.md) +*Full field list already shown [earlier on this page](#schema-class-VesselType) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -2370,7 +3208,7 @@ used (e.g. "autoclave", "round-bottom flask", "Schlenk tube"). **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0007809`](https://w3id.org/nfdi4cat/voc4cat_0007809) **Schema Reference:** [has_atmosphere](./elements/slots/has_atmosphere.md) @@ -2384,31 +3222,9 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) -**Schema Reference:** [Atmosphere](./elements/classes/Atmosphere.md) - -

- - 💡 Submit Term Feedback - -

- -**Possible Subclasses / Enumerations of Atmosphere:** - -
-CalcinationGaseousEnvironment - -**Description:** The specific gaseous environment maintained during a calcination step -(e.g. "air", "N2", "10% O2/N2"). - -**CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) - -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +*Full field list already shown [earlier on this page](#schema-class-Atmosphere) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -2422,7 +3238,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").

-
+
AtomicLayerDeposition **Description:** Catalyst preparation by atomic layer deposition (ALD): sequential @@ -2497,13 +3313,13 @@ of active phase onto a substrate.

-number of cycles (Optional, Multivalued) +number of cycles (Optional) **Description:** Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles). **Data Type:** integer -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`VOC4CAT:0008123`](https://w3id.org/nfdi4cat/voc4cat_0008123) @@ -2528,6 +3344,19 @@ of active phase onto a substrate. **Schema Reference:** [deposition_temperature](./elements/slots/deposition_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -2547,19 +3376,49 @@ of active phase onto a substrate. **Schema Reference:** [carrier_gas](./elements/slots/carrier_gas.md) +**Data Type Class Details:** + +

+ChemicalEntity + +**Description:** Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. + +**CURIE:** [`CHEBI:23367`](http://purl.obolibrary.org/obo/CHEBI_23367) + +*Full field list already shown [earlier on this page](#schema-class-ChemicalEntity) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback

-
+
DepositionPrecipitation **Description:** Catalyst preparation by deposition-precipitation: the active phase @@ -2584,6 +3443,19 @@ is precipitated directly onto the support surface. **Schema Reference:** [deposition_temperature](./elements/slots/deposition_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -2612,13 +3484,9 @@ is precipitated directly onto the support surface. **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -2626,6 +3494,23 @@ is precipitated directly onto the support surface.

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
precipitating agent (Optional, Multivalued) @@ -2639,6 +3524,19 @@ is precipitated directly onto the support surface. **Schema Reference:** [precipitating_agent](./elements/slots/precipitating_agent.md) +**Data Type Class Details:** + +
+ChemicalEntity + +**Description:** Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. + +**CURIE:** [`CHEBI:23367`](http://purl.obolibrary.org/obo/CHEBI_23367) + +*Full field list already shown [earlier on this page](#schema-class-ChemicalEntity) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -2646,18 +3544,33 @@ is precipitated directly onto the support surface.

-has concentration (Optional) +precipitating concentration (Optional, Multivalued) -**Description:** No description available +**Description:** Concentration of the precipitating agent/solution used to induce precipitation. -**Data Type:** string +**Data Type:** Concentration -**Cardinality:** Optional +**Cardinality:** Optional, Multivalued + +**CURIE:** [`VOC4CAT:0008125`](https://w3id.org/nfdi4cat/voc4cat_0008125) + +**Schema Reference:** [precipitating_concentration](./elements/slots/precipitating_concentration.md) -**Schema Reference:** [has_concentration](./elements/slots/has_concentration.md) +**Data Type Class Details:** + +
+Concentration + +**Description:** A QuantitativeAttribute of a ChemicalSubstance that represents the amount of a constituent divided by the volume of the mixture. + +**CURIE:** [`CHMO:0002820`](http://purl.obolibrary.org/obo/CHMO_0002820) + +*Full field list already shown [earlier on this page](#schema-class-Concentration) -- this class is reached from multiple fields.* + +

- + 💡 Submit Term Feedback

@@ -2665,14 +3578,29 @@ is precipitated directly onto the support surface.
has ph value (Optional) -**Description:** No description available +**Description:** The slot to provide the PHValue of a ChemicalSubstance. -**Data Type:** string +**Data Type:** PHValue **Cardinality:** Optional +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + **Schema Reference:** [has_ph_value](./elements/slots/has_ph_value.md) +**Data Type Class Details:** + +
+PHValue + +**Description:** No description available + +**CURIE:** [`SIO:001089`](http://semanticscience.org/resource/SIO_001089) + +*Full field list already shown [earlier on this page](#schema-class-PHValue) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -2699,16 +3627,12 @@ is precipitated directly onto the support surface. **Description:** Rate of rotational motion, typically expressed in revolutions per minute. -**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) - -**Schema Reference:** [AngularVelocity](./elements/classes/AngularVelocity.md) - -

- - 💡 Submit Term Feedback - -

- +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-AngularVelocity) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -2737,13 +3661,9 @@ is precipitated directly onto the support surface. **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -2764,6 +3684,19 @@ is precipitated directly onto the support surface. **Schema Reference:** [has_mixing_temperature](./elements/slots/has_mixing_temperature.md) +**Data Type Class Details:** + +

+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -2840,6 +3773,19 @@ is precipitated directly onto the support surface. **Schema Reference:** [has_aging_temperature](./elements/slots/has_aging_temperature.md) +**Data Type Class Details:** + +

+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -2855,7 +3801,7 @@ is precipitated directly onto the support surface. **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0008204`](https://w3id.org/nfdi4cat/voc4cat_0008204) **Schema Reference:** [has_aging_duration](./elements/slots/has_aging_duration.md) @@ -2868,13 +3814,9 @@ is precipitated directly onto the support surface. **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -2891,7 +3833,7 @@ is precipitated directly onto the support surface. **Cardinality:** Optional, Multivalued -**CURIE:** [`coremeta4cat:drying_device`](https://w3id.org/nfdi4cat/coremeta4cat/drying_device) +**CURIE:** [`VOC4CAT:0008122`](https://w3id.org/nfdi4cat/voc4cat_0008122) **Schema Reference:** [drying_device](./elements/slots/drying_device.md) @@ -2910,10 +3852,23 @@ is precipitated directly onto the support surface. **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0008207`](https://w3id.org/nfdi4cat/voc4cat_0008207) **Schema Reference:** [has_drying_temperature](./elements/slots/has_drying_temperature.md) +**Data Type Class Details:** + +

+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -2929,7 +3884,7 @@ is precipitated directly onto the support surface. **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0008206`](https://w3id.org/nfdi4cat/voc4cat_0008206) **Schema Reference:** [has_drying_duration](./elements/slots/has_drying_duration.md) @@ -2942,13 +3897,9 @@ is precipitated directly onto the support surface. **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -2965,7 +3916,7 @@ is precipitated directly onto the support surface. **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0008208`](https://w3id.org/nfdi4cat/voc4cat_0008208) **Schema Reference:** [has_drying_atmosphere](./elements/slots/has_drying_atmosphere.md) @@ -2979,31 +3930,9 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) -**Schema Reference:** [Atmosphere](./elements/classes/Atmosphere.md) - -

- - 💡 Submit Term Feedback - -

- -**Possible Subclasses / Enumerations of Atmosphere:** - -
-CalcinationGaseousEnvironment - -**Description:** The specific gaseous environment maintained during a calcination step -(e.g. "air", "N2", "10% O2/N2"). - -**CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) - -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +*Full field list already shown [earlier on this page](#schema-class-Atmosphere) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3040,49 +3969,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [QuantitativeRange](./elements/classes/QuantitativeRange.md) - -**Slots** - -

-title (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional - -**Schema Reference:** [title](./elements/slots/title.md) - -

- - 💡 Submit Term Feedback - -

- -
-description (Optional) - -**Description:** No description available - -**Data Type:** string +*Full field list already shown [earlier on this page](#schema-class-QuantitativeRange) -- this class is reached from multiple fields.* -**Cardinality:** Optional - -**Schema Reference:** [description](./elements/slots/description.md) - -

- - 💡 Submit Term Feedback - -

- -

- - 💡 Submit Term Feedback - -

+

@@ -3099,7 +3988,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0000060`](https://w3id.org/nfdi4cat/voc4cat_0000060) **Schema Reference:** [has_calcination_dwelling_time](./elements/slots/has_calcination_dwelling_time.md) @@ -3112,13 +4001,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3127,13 +4012,13 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

-number of cycles (Optional, Multivalued) +number of cycles (Optional) **Description:** Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles). **Data Type:** integer -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`VOC4CAT:0008123`](https://w3id.org/nfdi4cat/voc4cat_0008123) @@ -3168,13 +4053,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +*Full field list already shown [earlier on this page](#schema-class-CalcinationGaseousEnvironment) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3204,13 +4085,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [HeatingRate](./elements/classes/HeatingRate.md) +*Full field list already shown [earlier on this page](#schema-class-HeatingRate) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3227,7 +4104,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0000056`](https://w3id.org/nfdi4cat/voc4cat_0000056) **Schema Reference:** [has_calcination_gas_flow_rate](./elements/slots/has_calcination_gas_flow_rate.md) @@ -3240,13 +4117,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [VolumeFlowRate](./elements/classes/VolumeFlowRate.md) +*Full field list already shown [earlier on this page](#schema-class-VolumeFlowRate) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3260,7 +4133,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

-
+
MicrowaveAssisted **Description:** Catalyst preparation using microwave irradiation to rapidly and @@ -3314,6 +4187,23 @@ uniformly heat the reaction mixture.

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
synthesis temperature (Optional, Multivalued) @@ -3327,6 +4217,19 @@ uniformly heat the reaction mixture. **Schema Reference:** [synthesis_temperature](./elements/slots/synthesis_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -3355,13 +4258,9 @@ uniformly heat the reaction mixture. **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3392,13 +4291,9 @@ used (e.g. "autoclave", "round-bottom flask", "Schlenk tube"). **CURIE:** [`coremeta4cat:VesselType`](https://w3id.org/nfdi4cat/coremeta4cat/VesselType) -**Schema Reference:** [VesselType](./elements/classes/VesselType.md) +*Full field list already shown [earlier on this page](#schema-class-VesselType) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3415,7 +4310,7 @@ used (e.g. "autoclave", "round-bottom flask", "Schlenk tube"). **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0007809`](https://w3id.org/nfdi4cat/voc4cat_0007809) **Schema Reference:** [has_atmosphere](./elements/slots/has_atmosphere.md) @@ -3429,31 +4324,9 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) -**Schema Reference:** [Atmosphere](./elements/classes/Atmosphere.md) - -

- - 💡 Submit Term Feedback - -

- -**Possible Subclasses / Enumerations of Atmosphere:** - -
-CalcinationGaseousEnvironment - -**Description:** The specific gaseous environment maintained during a calcination step -(e.g. "air", "N2", "10% O2/N2"). - -**CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) - -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +*Full field list already shown [earlier on this page](#schema-class-Atmosphere) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3467,7 +4340,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").

-
+
SonochemicalSynthesis **Description:** Catalyst preparation using ultrasonic irradiation to drive chemical @@ -3505,24 +4378,56 @@ reactions via acoustic cavitation. **Description:** Duration of ultrasonic irradiation. -**Data Type:** float +**Data Type:** float + +**Cardinality:** Optional, Multivalued + +**CURIE:** [`coremeta4cat:sonication_duration`](https://w3id.org/nfdi4cat/coremeta4cat/sonication_duration) + +**Schema Reference:** [sonication_duration](./elements/slots/sonication_duration.md) + +**Unit:** min + +

+ + 💡 Submit Term Feedback + +

+ +
+has temperature (Optional) + +**Description:** The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity. + +**Data Type:** Temperature + +**Cardinality:** Optional + +**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) + +**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) + +**Data Type Class Details:** + +
+Temperature -**Cardinality:** Optional, Multivalued +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. -**CURIE:** [`coremeta4cat:sonication_duration`](https://w3id.org/nfdi4cat/coremeta4cat/sonication_duration) +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [sonication_duration](./elements/slots/sonication_duration.md) +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* -**Unit:** min +

- + 💡 Submit Term Feedback

-has temperature (Optional) +id (Optional) **Description:** No description available @@ -3530,10 +4435,10 @@ reactions via acoustic cavitation. **Cardinality:** Optional -**Schema Reference:** [has_temperature](./elements/slots/has_temperature.md) +**Schema Reference:** [id](./elements/slots/id.md)

- + 💡 Submit Term Feedback

@@ -3547,7 +4452,7 @@ reactions via acoustic cavitation. **Cardinality:** Optional, Multivalued -**CURIE:** [`coremeta4cat:drying_device`](https://w3id.org/nfdi4cat/coremeta4cat/drying_device) +**CURIE:** [`VOC4CAT:0008122`](https://w3id.org/nfdi4cat/voc4cat_0008122) **Schema Reference:** [drying_device](./elements/slots/drying_device.md) @@ -3566,10 +4471,23 @@ reactions via acoustic cavitation. **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0008207`](https://w3id.org/nfdi4cat/voc4cat_0008207) **Schema Reference:** [has_drying_temperature](./elements/slots/has_drying_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -3585,7 +4503,7 @@ reactions via acoustic cavitation. **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0008206`](https://w3id.org/nfdi4cat/voc4cat_0008206) **Schema Reference:** [has_drying_duration](./elements/slots/has_drying_duration.md) @@ -3598,13 +4516,9 @@ reactions via acoustic cavitation. **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3621,7 +4535,7 @@ reactions via acoustic cavitation. **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0008208`](https://w3id.org/nfdi4cat/voc4cat_0008208) **Schema Reference:** [has_drying_atmosphere](./elements/slots/has_drying_atmosphere.md) @@ -3635,31 +4549,9 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) -**Schema Reference:** [Atmosphere](./elements/classes/Atmosphere.md) - -

- - 💡 Submit Term Feedback - -

- -**Possible Subclasses / Enumerations of Atmosphere:** - -
-CalcinationGaseousEnvironment - -**Description:** The specific gaseous environment maintained during a calcination step -(e.g. "air", "N2", "10% O2/N2"). - -**CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) - -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +*Full field list already shown [earlier on this page](#schema-class-Atmosphere) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3696,49 +4588,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [QuantitativeRange](./elements/classes/QuantitativeRange.md) - -**Slots** - -

-title (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional - -**Schema Reference:** [title](./elements/slots/title.md) - -

- - 💡 Submit Term Feedback - -

- -
-description (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional - -**Schema Reference:** [description](./elements/slots/description.md) - -

- - 💡 Submit Term Feedback - -

+*Full field list already shown [earlier on this page](#schema-class-QuantitativeRange) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3755,7 +4607,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0000060`](https://w3id.org/nfdi4cat/voc4cat_0000060) **Schema Reference:** [has_calcination_dwelling_time](./elements/slots/has_calcination_dwelling_time.md) @@ -3768,13 +4620,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3783,13 +4631,13 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

-number of cycles (Optional, Multivalued) +number of cycles (Optional) **Description:** Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles). **Data Type:** integer -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`VOC4CAT:0008123`](https://w3id.org/nfdi4cat/voc4cat_0008123) @@ -3824,13 +4672,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +*Full field list already shown [earlier on this page](#schema-class-CalcinationGaseousEnvironment) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3860,13 +4704,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [HeatingRate](./elements/classes/HeatingRate.md) +*Full field list already shown [earlier on this page](#schema-class-HeatingRate) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3883,7 +4723,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0000056`](https://w3id.org/nfdi4cat/voc4cat_0000056) **Schema Reference:** [has_calcination_gas_flow_rate](./elements/slots/has_calcination_gas_flow_rate.md) @@ -3896,13 +4736,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [VolumeFlowRate](./elements/classes/VolumeFlowRate.md) +*Full field list already shown [earlier on this page](#schema-class-VolumeFlowRate) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -3916,7 +4752,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

-
+
FlameSprayPyrolysis **Description:** Catalyst preparation by flame spray pyrolysis (FSP): a liquid precursor @@ -3969,13 +4805,9 @@ solution is atomised and combusted in a flame to produce nanoparticles. **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [VolumeFlowRate](./elements/classes/VolumeFlowRate.md) +*Full field list already shown [earlier on this page](#schema-class-VolumeFlowRate) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -4034,6 +4866,19 @@ solution is atomised and combusted in a flame to produce nanoparticles. **Schema Reference:** [dispersant](./elements/slots/dispersant.md) +**Data Type Class Details:** + +

+ChemicalEntity + +**Description:** Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. + +**CURIE:** [`CHEBI:23367`](http://purl.obolibrary.org/obo/CHEBI_23367) + +*Full field list already shown [earlier on this page](#schema-class-ChemicalEntity) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -4118,13 +4963,30 @@ solution is atomised and combusted in a flame to produce nanoparticles.

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+

💡 Submit Term Feedback

-
+
MechanochemicalSynthesis **Description:** Catalyst preparation by mechanical milling or grinding, optionally @@ -4277,6 +5139,23 @@ combined with thermal treatment.

+
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
synthesis temperature (Optional, Multivalued) @@ -4290,6 +5169,19 @@ combined with thermal treatment. **Schema Reference:** [synthesis_temperature](./elements/slots/synthesis_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -4318,13 +5210,9 @@ combined with thermal treatment. **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -4355,13 +5243,9 @@ used (e.g. "autoclave", "round-bottom flask", "Schlenk tube"). **CURIE:** [`coremeta4cat:VesselType`](https://w3id.org/nfdi4cat/coremeta4cat/VesselType) -**Schema Reference:** [VesselType](./elements/classes/VesselType.md) +*Full field list already shown [earlier on this page](#schema-class-VesselType) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -4378,7 +5262,7 @@ used (e.g. "autoclave", "round-bottom flask", "Schlenk tube"). **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0007809`](https://w3id.org/nfdi4cat/voc4cat_0007809) **Schema Reference:** [has_atmosphere](./elements/slots/has_atmosphere.md) @@ -4392,31 +5276,9 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) -**Schema Reference:** [Atmosphere](./elements/classes/Atmosphere.md) - -

- - 💡 Submit Term Feedback - -

- -**Possible Subclasses / Enumerations of Atmosphere:** - -
-CalcinationGaseousEnvironment - -**Description:** The specific gaseous environment maintained during a calcination step -(e.g. "air", "N2", "10% O2/N2"). - -**CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) - -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +*Full field list already shown [earlier on this page](#schema-class-Atmosphere) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -4430,7 +5292,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").

-
+
Sublimation **Description:** Catalyst preparation by sublimation: a solid precursor is vaporised @@ -4443,20 +5305,50 @@ and deposited onto a substrate without passing through a liquid phase. **Slots**
-synthesis pressure (Optional, Multivalued) - -**Description:** Pressure applied during synthesis (e.g. in autoclave or plasma reactor). +synthesis pressure (Optional, Multivalued) + +**Description:** Pressure applied during synthesis (e.g. in autoclave or plasma reactor). + +**Data Type:** Pressure + +**Cardinality:** Optional, Multivalued + +**CURIE:** [`VOC4CAT:0000053`](https://w3id.org/nfdi4cat/voc4cat_0000053) + +**Schema Reference:** [synthesis_pressure](./elements/slots/synthesis_pressure.md) + +**Data Type Class Details:** + +
+Pressure + +**Description:** No description available + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Pressure) -- this class is reached from multiple fields.* + +
+ +

+ + 💡 Submit Term Feedback + +

+ +
+id (Optional) -**Data Type:** Pressure +**Description:** No description available -**Cardinality:** Optional, Multivalued +**Data Type:** string -**CURIE:** [`VOC4CAT:0000053`](https://w3id.org/nfdi4cat/voc4cat_0000053) +**Cardinality:** Optional -**Schema Reference:** [synthesis_pressure](./elements/slots/synthesis_pressure.md) +**Schema Reference:** [id](./elements/slots/id.md)

- + 💡 Submit Term Feedback

@@ -4474,6 +5366,19 @@ and deposited onto a substrate without passing through a liquid phase. **Schema Reference:** [synthesis_temperature](./elements/slots/synthesis_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -4502,13 +5407,9 @@ and deposited onto a substrate without passing through a liquid phase. **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -4539,13 +5440,9 @@ used (e.g. "autoclave", "round-bottom flask", "Schlenk tube"). **CURIE:** [`coremeta4cat:VesselType`](https://w3id.org/nfdi4cat/coremeta4cat/VesselType) -**Schema Reference:** [VesselType](./elements/classes/VesselType.md) +*Full field list already shown [earlier on this page](#schema-class-VesselType) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -4562,7 +5459,7 @@ used (e.g. "autoclave", "round-bottom flask", "Schlenk tube"). **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0007809`](https://w3id.org/nfdi4cat/voc4cat_0007809) **Schema Reference:** [has_atmosphere](./elements/slots/has_atmosphere.md) @@ -4576,31 +5473,9 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) -**Schema Reference:** [Atmosphere](./elements/classes/Atmosphere.md) - -

- - 💡 Submit Term Feedback - -

- -**Possible Subclasses / Enumerations of Atmosphere:** - -
-CalcinationGaseousEnvironment - -**Description:** The specific gaseous environment maintained during a calcination step -(e.g. "air", "N2", "10% O2/N2"). - -**CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) - -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +*Full field list already shown [earlier on this page](#schema-class-Atmosphere) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -4614,7 +5489,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").

-
+
MolecularSynthesis **Description:** Catalyst preparation by molecular (organometallic or coordination) @@ -4686,13 +5561,9 @@ chemistry routes, including crystallisation and purification steps. **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -4722,13 +5593,9 @@ chemistry routes, including crystallisation and purification steps. **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [AngularVelocity](./elements/classes/AngularVelocity.md) +*Full field list already shown [earlier on this page](#schema-class-AngularVelocity) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -4749,6 +5616,19 @@ chemistry routes, including crystallisation and purification steps. **Schema Reference:** [has_mixing_temperature](./elements/slots/has_mixing_temperature.md) +**Data Type Class Details:** + +

+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -4821,7 +5701,7 @@ chemistry routes, including crystallisation and purification steps. **Cardinality:** Optional, Multivalued -**CURIE:** [`coremeta4cat:precipitation_agent`](https://w3id.org/nfdi4cat/coremeta4cat/precipitation_agent) +**CURIE:** [`VOC4CAT:0008203`](https://w3id.org/nfdi4cat/voc4cat_0008203) **Schema Reference:** [precipitation_agent](./elements/slots/precipitation_agent.md) @@ -4872,13 +5752,13 @@ chemistry routes, including crystallisation and purification steps.

-number of cycles (Optional, Multivalued) +number of cycles (Optional) **Description:** Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles). **Data Type:** integer -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`VOC4CAT:0008123`](https://w3id.org/nfdi4cat/voc4cat_0008123) @@ -4920,7 +5800,7 @@ chemistry routes, including crystallisation and purification steps. **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0007809`](https://w3id.org/nfdi4cat/voc4cat_0007809) **Schema Reference:** [has_atmosphere](./elements/slots/has_atmosphere.md) @@ -4934,34 +5814,29 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) -**Schema Reference:** [Atmosphere](./elements/classes/Atmosphere.md) +*Full field list already shown [earlier on this page](#schema-class-Atmosphere) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+ -**Possible Subclasses / Enumerations of Atmosphere:** +

+ + 💡 Submit Term Feedback + +

-CalcinationGaseousEnvironment +id (Optional) -**Description:** The specific gaseous environment maintained during a calcination step -(e.g. "air", "N2", "10% O2/N2"). +**Description:** No description available -**CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) +**Data Type:** string -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +**Cardinality:** Optional -

- - 💡 Submit Term Feedback - -

+**Schema Reference:** [id](./elements/slots/id.md)

- + 💡 Submit Term Feedback

@@ -4975,7 +5850,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **Cardinality:** Optional, Multivalued -**CURIE:** [`coremeta4cat:drying_device`](https://w3id.org/nfdi4cat/coremeta4cat/drying_device) +**CURIE:** [`VOC4CAT:0008122`](https://w3id.org/nfdi4cat/voc4cat_0008122) **Schema Reference:** [drying_device](./elements/slots/drying_device.md) @@ -4994,10 +5869,23 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0008207`](https://w3id.org/nfdi4cat/voc4cat_0008207) **Schema Reference:** [has_drying_temperature](./elements/slots/has_drying_temperature.md) +**Data Type Class Details:** + +
+Temperature + +**Description:** A physical quantity that quantitatively expresses the attribute of hotness or coldness. + +**CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) + +*Full field list already shown [earlier on this page](#schema-class-Temperature) -- this class is reached from multiple fields.* + +
+

💡 Submit Term Feedback @@ -5013,7 +5901,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0008206`](https://w3id.org/nfdi4cat/voc4cat_0008206) **Schema Reference:** [has_drying_duration](./elements/slots/has_drying_duration.md) @@ -5026,13 +5914,9 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -5049,7 +5933,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **Cardinality:** Optional, Multivalued -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0008208`](https://w3id.org/nfdi4cat/voc4cat_0008208) **Schema Reference:** [has_drying_atmosphere](./elements/slots/has_drying_atmosphere.md) @@ -5063,31 +5947,9 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar"). **CURIE:** [`coremeta4cat:Atmosphere`](https://w3id.org/nfdi4cat/coremeta4cat/Atmosphere) -**Schema Reference:** [Atmosphere](./elements/classes/Atmosphere.md) - -

- - 💡 Submit Term Feedback - -

- -**Possible Subclasses / Enumerations of Atmosphere:** - -
-CalcinationGaseousEnvironment - -**Description:** The specific gaseous environment maintained during a calcination step -(e.g. "air", "N2", "10% O2/N2"). - -**CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) - -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +*Full field list already shown [earlier on this page](#schema-class-Atmosphere) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -5101,7 +5963,7 @@ conditions during a process (e.g. "air", "N2", "5% H2/Ar").

-
+
ExsolutionSynthesis **Description:** Catalyst preparation by exsolution: metal nanoparticles are grown on @@ -5113,6 +5975,23 @@ a perovskite oxide surface by reduction/oxidation cycling. **Slots** +
+id (Optional) + +**Description:** No description available + +**Data Type:** string + +**Cardinality:** Optional + +**Schema Reference:** [id](./elements/slots/id.md) + +

+ + 💡 Submit Term Feedback + +

+
has calcination temperature range (Optional) @@ -5142,49 +6021,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [QuantitativeRange](./elements/classes/QuantitativeRange.md) - -**Slots** - -
-title (Optional) - -**Description:** No description available - -**Data Type:** string - -**Cardinality:** Optional - -**Schema Reference:** [title](./elements/slots/title.md) - -

- - 💡 Submit Term Feedback - -

- -
-description (Optional) - -**Description:** No description available - -**Data Type:** string +*Full field list already shown [earlier on this page](#schema-class-QuantitativeRange) -- this class is reached from multiple fields.* -**Cardinality:** Optional - -**Schema Reference:** [description](./elements/slots/description.md) - -

- - 💡 Submit Term Feedback - -

- -

- - 💡 Submit Term Feedback - -

+

@@ -5201,7 +6040,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0000060`](https://w3id.org/nfdi4cat/voc4cat_0000060) **Schema Reference:** [has_calcination_dwelling_time](./elements/slots/has_calcination_dwelling_time.md) @@ -5214,13 +6053,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [Duration](./elements/classes/Duration.md) +*Full field list already shown [earlier on this page](#schema-class-Duration) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -5229,13 +6064,13 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer

-number of cycles (Optional, Multivalued) +number of cycles (Optional) **Description:** Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles). **Data Type:** integer -**Cardinality:** Optional, Multivalued +**Cardinality:** Optional **CURIE:** [`VOC4CAT:0008123`](https://w3id.org/nfdi4cat/voc4cat_0008123) @@ -5270,13 +6105,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`VOC4CAT:0000055`](https://w3id.org/nfdi4cat/voc4cat_0000055) -**Schema Reference:** [CalcinationGaseousEnvironment](./elements/classes/CalcinationGaseousEnvironment.md) +*Full field list already shown [earlier on this page](#schema-class-CalcinationGaseousEnvironment) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -5306,13 +6137,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [HeatingRate](./elements/classes/HeatingRate.md) +*Full field list already shown [earlier on this page](#schema-class-HeatingRate) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

@@ -5329,7 +6156,7 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **Cardinality:** Optional -**CURIE:** [`SIO:000008`](http://semanticscience.org/resource/SIO_000008) +**CURIE:** [`VOC4CAT:0000056`](https://w3id.org/nfdi4cat/voc4cat_0000056) **Schema Reference:** [has_calcination_gas_flow_rate](./elements/slots/has_calcination_gas_flow_rate.md) @@ -5342,13 +6169,9 @@ interval rather than a point value. Provide the shared unit as a QUDT DefinedTer **CURIE:** [`qudt:Quantity`](http://qudt.org/schema/qudt/Quantity) -**Schema Reference:** [VolumeFlowRate](./elements/classes/VolumeFlowRate.md) +*Full field list already shown [earlier on this page](#schema-class-VolumeFlowRate) -- this class is reached from multiple fields.* -

- - 💡 Submit Term Feedback - -

+

diff --git a/src/coremeta4cat/datamodel/coremeta4cat.py b/src/coremeta4cat/datamodel/coremeta4cat.py index 135eba854..dc6b64dd4 100644 --- a/src/coremeta4cat/datamodel/coremeta4cat.py +++ b/src/coremeta4cat/datamodel/coremeta4cat.py @@ -1,5 +1,5 @@ # Auto generated from coremeta4cat.yaml by pythongen.py version: 0.0.1 -# Generation date: 2026-07-13T15:23:09 +# Generation date: 2026-07-14T10:36:33 # Schema: coremeta4cat-metadata # # id: https://w3id.org/nfdi4cat/coremeta4cat @@ -18,24 +18,31 @@ # rdf_type: CHMO:0000613 to classify the measurement type. # # - The four CoreMeta4Cat pillars are modelled as DCAT-AP-PLUS Activity subclasses, -# following the same pattern as NMRSpectroscopy (is_a: DataGeneratingActivity): +# following the same pattern as NMRSpectroscopy (is_a: DataGeneratingActivity). +# Synthesis, Characterization, and Simulation specialize CatalysisDataGeneratingActivity +# (is_a: DataGeneratingActivity) rather than DataGeneratingActivity directly -- this +# coremeta4cat-owned intermediate adds a type designator (activity_designator) so that +# was_generated_by (typed CatalysisDataGeneratingActivity) can hold any of the three and +# still resolve to the right concrete Python class when loaded. Likewise, is_about_activity +# is typed CatalyticReaction directly (not the wider EvaluatedActivity) so it needs no +# designator at all: # -# Synthesis --> is_a: DataGeneratingActivity +# Synthesis --> is_a: CatalysisDataGeneratingActivity # Produces a catalyst (MaterialSample) as had_output_entity. # The PreparationMethod (protocol) is linked via realized_plan. # -# Characterization --> is_a: DataGeneratingActivity +# Characterization --> is_a: CatalysisDataGeneratingActivity # Produces measurement data about a catalyst or reaction. # The catalyst/sample is the evaluated_entity. # The CharacterizationTechnique is linked via realized_plan. # -# Reaction --> is_a: EvaluatedActivity +# Reaction --> is_a: CatalyticReaction (via ChemicalReaction, EvaluatedActivity) # The catalytic process being studied, NOT a data-generating # activity itself. Characterization datasets are about this. # Analogous to the reaction being observed in a reaction # monitoring dataset. # -# Simulation --> is_a: DataGeneratingActivity +# Simulation --> is_a: CatalysisDataGeneratingActivity # Generates computational data about a catalyst or reaction. # The SimulationMethod (protocol) is linked via realized_plan. # The simulation software is carried_out_by: Software. @@ -212,19 +219,31 @@ class AgenticEntityId(URIorCURIE): pass +class DissolvingSubstanceId(AgenticEntityId): + pass + + +class CatalystId(AgenticEntityId): + pass + + class DataGeneratingActivityId(ActivityId): pass -class SynthesisId(DataGeneratingActivityId): +class CatalysisDataGeneratingActivityId(DataGeneratingActivityId): pass -class CharacterizationId(DataGeneratingActivityId): +class SynthesisId(CatalysisDataGeneratingActivityId): pass -class SimulationId(DataGeneratingActivityId): +class CharacterizationId(CatalysisDataGeneratingActivityId): + pass + + +class SimulationId(CatalysisDataGeneratingActivityId): pass @@ -268,7 +287,11 @@ class DeviceId(AgenticEntityId): pass -class ChemicalReactorId(DeviceId): +class ReactorId(DeviceId): + pass + + +class ChemicalReactorId(ReactorId): pass @@ -312,7 +335,11 @@ class EvaluatedActivityId(ActivityId): pass -class CatalyticReactionId(EvaluatedActivityId): +class ChemicalReactionId(EvaluatedActivityId): + pass + + +class CatalyticReactionId(ChemicalReactionId): pass @@ -324,47 +351,235 @@ class AnalysisSourceDataId(EvaluatedEntityId): pass -class SoftwareId(AgenticEntityId): +class CatalysisPlanId(URIorCURIE): pass -class DocumentId(URIorCURIE): +class PreparationMethodId(CatalysisPlanId): pass -class LegalResourceId(URIorCURIE): +class ImpregnationId(PreparationMethodId): pass -class LicenseDocumentId(URIorCURIE): +class CoPrecipitationId(PreparationMethodId): pass -class ResourceId(URIorCURIE): +class SolGelId(PreparationMethodId): pass -class ChemicalEntityId(EntityId): +class SolvothermalId(PreparationMethodId): pass -class AtomId(EntityId): +class PlasmaAssistedId(PreparationMethodId): pass -class ChemicalReactionId(EvaluatedActivityId): +class CombustionSynthesisId(PreparationMethodId): pass -class DissolvingSubstanceId(AgenticEntityId): +class AtomicLayerDepositionId(PreparationMethodId): pass -class CatalystId(AgenticEntityId): +class DepositionPrecipitationId(PreparationMethodId): pass -class ReactorId(DeviceId): +class MicrowaveAssistedId(PreparationMethodId): + pass + + +class SonochemicalSynthesisId(PreparationMethodId): + pass + + +class FlameSprayPyrolysisId(PreparationMethodId): + pass + + +class MechanochemicalSynthesisId(PreparationMethodId): + pass + + +class SublimationId(PreparationMethodId): + pass + + +class MolecularSynthesisId(PreparationMethodId): + pass + + +class ExsolutionSynthesisId(PreparationMethodId): + pass + + +class CharacterizationTechniqueId(CatalysisPlanId): + pass + + +class PowderXRDId(CharacterizationTechniqueId): + pass + + +class SingleCrystalXRDId(CharacterizationTechniqueId): + pass + + +class XRayAbsorptionSpectroscopyId(CharacterizationTechniqueId): + pass + + +class XPSId(CharacterizationTechniqueId): + pass + + +class EDXId(CharacterizationTechniqueId): + pass + + +class InfraredSpectroscopyId(CharacterizationTechniqueId): + pass + + +class DRIFTSId(CharacterizationTechniqueId): + pass + + +class RamanSpectroscopyId(CharacterizationTechniqueId): + pass + + +class NMRSpectroscopyId(CharacterizationTechniqueId): + pass + + +class TransmissionElectronMicroscopyId(CharacterizationTechniqueId): + pass + + +class ScanningElectronMicroscopyId(CharacterizationTechniqueId): + pass + + +class ThermogravimetryId(CharacterizationTechniqueId): + pass + + +class TPRId(CharacterizationTechniqueId): + pass + + +class TPOId(CharacterizationTechniqueId): + pass + + +class BETId(CharacterizationTechniqueId): + pass + + +class ICPAESId(CharacterizationTechniqueId): + pass + + +class ElementalAnalysisId(CharacterizationTechniqueId): + pass + + +class UVVisSpectroscopyId(CharacterizationTechniqueId): + pass + + +class PhotoluminescenceSpectroscopyId(CharacterizationTechniqueId): + pass + + +class PhotoluminescenceLifetimeId(CharacterizationTechniqueId): + pass + + +class CyclicVoltammetryId(CharacterizationTechniqueId): + pass + + +class ConductivityMeasurementId(CharacterizationTechniqueId): + pass + + +class DynamicLightScatteringId(CharacterizationTechniqueId): + pass + + +class ElectroSprayIonizationMassSpectrometryId(CharacterizationTechniqueId): + pass + + +class GCMSId(CharacterizationTechniqueId): + pass + + +class SizeExclusionChromatographyId(CharacterizationTechniqueId): + pass + + +class HighPerformanceLiquidChromatographyMassSpectrometryId(CharacterizationTechniqueId): + pass + + +class ProductIdentificationMethodId(CatalysisPlanId): + pass + + +class SimulationMethodId(CatalysisPlanId): + pass + + +class DFTId(SimulationMethodId): + pass + + +class MolecularDynamicsId(SimulationMethodId): + pass + + +class MicrokineticsId(SimulationMethodId): + pass + + +class MonteCarloId(SimulationMethodId): + pass + + +class SoftwareId(AgenticEntityId): + pass + + +class DocumentId(URIorCURIE): + pass + + +class LegalResourceId(URIorCURIE): + pass + + +class LicenseDocumentId(URIorCURIE): + pass + + +class ResourceId(URIorCURIE): + pass + + +class ChemicalEntityId(EntityId): + pass + + +class AtomId(EntityId): pass @@ -513,7 +728,7 @@ class CalcinationMixin(YAMLRoot): class_name: ClassVar[str] = "CalcinationMixin" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.CalcinationMixin - has_calcination_temperature_range: Optional[Union[dict, QuantitativeRange]] = None + has_calcination_temperature_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() has_calcination_dwelling_time: Optional[Union[dict, "Duration"]] = None number_of_cycles: Optional[Union[int, list[int]]] = empty_list() has_calcination_atmosphere: Optional[Union[Union[dict, "CalcinationGaseousEnvironment"], list[Union[dict, "CalcinationGaseousEnvironment"]]]] = empty_list() @@ -521,8 +736,9 @@ class CalcinationMixin(YAMLRoot): has_calcination_gas_flow_rate: Optional[Union[Union[dict, "VolumeFlowRate"], list[Union[dict, "VolumeFlowRate"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): - if self.has_calcination_temperature_range is not None and not isinstance(self.has_calcination_temperature_range, QuantitativeRange): - self.has_calcination_temperature_range = QuantitativeRange(**as_dict(self.has_calcination_temperature_range)) + if not isinstance(self.has_calcination_temperature_range, list): + self.has_calcination_temperature_range = [self.has_calcination_temperature_range] if self.has_calcination_temperature_range is not None else [] + self.has_calcination_temperature_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.has_calcination_temperature_range] if self.has_calcination_dwelling_time is not None and not isinstance(self.has_calcination_dwelling_time, Duration): self.has_calcination_dwelling_time = Duration(**as_dict(self.has_calcination_dwelling_time)) @@ -698,11 +914,12 @@ class EnergyRangeMixin(YAMLRoot): class_name: ClassVar[str] = "EnergyRangeMixin" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.EnergyRangeMixin - has_energy_range: Optional[Union[dict, QuantitativeRange]] = None + has_energy_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): - if self.has_energy_range is not None and not isinstance(self.has_energy_range, QuantitativeRange): - self.has_energy_range = QuantitativeRange(**as_dict(self.has_energy_range)) + if not isinstance(self.has_energy_range, list): + self.has_energy_range = [self.has_energy_range] if self.has_energy_range is not None else [] + self.has_energy_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.has_energy_range] super().__post_init__(**kwargs) @@ -755,13 +972,14 @@ class TemperatureProgramMixin(YAMLRoot): class_name: ClassVar[str] = "TemperatureProgramMixin" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.TemperatureProgramMixin - has_temperature_range: Optional[Union[dict, QuantitativeRange]] = None + has_temperature_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() has_heating_rate: Optional[Union[Union[dict, "HeatingRate"], list[Union[dict, "HeatingRate"]]]] = empty_list() has_heating_procedure: Optional[Union[Union[dict, "HeatingProcedure"], list[Union[dict, "HeatingProcedure"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): - if self.has_temperature_range is not None and not isinstance(self.has_temperature_range, QuantitativeRange): - self.has_temperature_range = QuantitativeRange(**as_dict(self.has_temperature_range)) + if not isinstance(self.has_temperature_range, list): + self.has_temperature_range = [self.has_temperature_range] if self.has_temperature_range is not None else [] + self.has_temperature_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.has_temperature_range] if not isinstance(self.has_heating_rate, list): self.has_heating_rate = [self.has_heating_rate] if self.has_heating_rate is not None else [] @@ -833,11 +1051,12 @@ class MassRangeMixin(YAMLRoot): class_name: ClassVar[str] = "MassRangeMixin" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.MassRangeMixin - has_mz_range: Optional[Union[dict, QuantitativeRange]] = None + has_mz_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): - if self.has_mz_range is not None and not isinstance(self.has_mz_range, QuantitativeRange): - self.has_mz_range = QuantitativeRange(**as_dict(self.has_mz_range)) + if not isinstance(self.has_mz_range, list): + self.has_mz_range = [self.has_mz_range] if self.has_mz_range is not None else [] + self.has_mz_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.has_mz_range] super().__post_init__(**kwargs) @@ -935,19 +1154,6 @@ def __post_init__(self, *_: str, **kwargs: Any): super().__post_init__(**kwargs) -class Carbonylation(YAMLRoot): - """ - A chemical reaction in which a carbonyl group (C=O) is introduced into a molecule, typically through the addition - of carbon monoxide (CO) to a substrate. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0000247"] - class_class_curie: ClassVar[str] = "VOC4CAT:0000247" - class_name: ClassVar[str] = "Carbonylation" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Carbonylation - - @dataclass(repr=False) class MaterialDescriptorMixin(YAMLRoot): """ @@ -1175,62 +1381,221 @@ def __post_init__(self, *_: str, **kwargs: Any): super().__post_init__(**kwargs) -Any = Any - @dataclass(repr=False) -class Catalogue(YAMLRoot): +class DissolvingSubstance(AgenticEntity): """ - See [DCAT-AP specs:Catalogue](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Catalogue) + A liquid ChemicalSubstance that dissolves or that is capable of dissolving a ChemicalSubstance. """ _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = DCAT["Catalog"] - class_class_curie: ClassVar[str] = "dcat:Catalog" - class_name: ClassVar[str] = "Catalogue" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Catalogue + class_class_uri: ClassVar[URIRef] = SIO["010417"] + class_class_curie: ClassVar[str] = "SIO:010417" + class_name: ClassVar[str] = "DissolvingSubstance" + class_model_uri: ClassVar[URIRef] = COREMETA4CAT.DissolvingSubstance - description: Union[str, list[str]] = None - publisher: Union[dict, Agent] = None - title: Union[str, list[str]] = None - applicable_legislation: Optional[Union[dict[Union[str, LegalResourceId], Union[dict, "LegalResource"]], list[Union[dict, "LegalResource"]]]] = empty_dict() - catalogue: Optional[Union[Union[dict, "Catalogue"], list[Union[dict, "Catalogue"]]]] = empty_list() - creator: Optional[Union[dict, Agent]] = None - geographical_coverage: Optional[Union[Union[dict, "Location"], list[Union[dict, "Location"]]]] = empty_list() - has_dataset: Optional[Union[dict[Union[str, DatasetId], Union[dict, "Dataset"]], list[Union[dict, "Dataset"]]]] = empty_dict() - has_part: Optional[Union[Union[dict, "Catalogue"], list[Union[dict, "Catalogue"]]]] = empty_list() - homepage: Optional[Union[dict, "Document"]] = None - language: Optional[Union[Union[dict, "LinguisticSystem"], list[Union[dict, "LinguisticSystem"]]]] = empty_list() - licence: Optional[Union[dict, "LicenseDocument"]] = None - modification_date: Optional[Union[str, XSDDate]] = None - record: Optional[Union[Union[dict, "CatalogueRecord"], list[Union[dict, "CatalogueRecord"]]]] = empty_list() - release_date: Optional[Union[str, XSDDate]] = None - rights: Optional[Union[dict, "RightsStatement"]] = None - service: Optional[Union[Union[dict, "DataService"], list[Union[dict, "DataService"]]]] = empty_list() - temporal_coverage: Optional[Union[Union[dict, "PeriodOfTime"], list[Union[dict, "PeriodOfTime"]]]] = empty_list() - themes: Optional[Union[Union[dict, "ConceptScheme"], list[Union[dict, "ConceptScheme"]]]] = empty_list() + id: Union[str, DissolvingSubstanceId] = None + has_percentage_of_total: Optional[Union[Union[dict, "PercentageOfTotal"], list[Union[dict, "PercentageOfTotal"]]]] = empty_list() + alternative_label: Optional[str] = None + has_physical_state: Optional[Union[str, "PhysicalStateEnum"]] = None + has_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() + has_mass: Optional[Union[Union[dict, "Mass"], list[Union[dict, "Mass"]]]] = empty_list() + has_volume: Optional[Union[Union[dict, "Volume"], list[Union[dict, "Volume"]]]] = empty_list() + has_density: Optional[Union[Union[dict, "Density"], list[Union[dict, "Density"]]]] = empty_list() + has_pressure: Optional[Union[Union[dict, "Pressure"], list[Union[dict, "Pressure"]]]] = empty_list() + has_concentration: Optional[Union[Union[dict, "Concentration"], list[Union[dict, "Concentration"]]]] = empty_list() + has_ph_value: Optional[Union[Union[dict, "PHValue"], list[Union[dict, "PHValue"]]]] = empty_list() + composed_of: Optional[Union[dict[Union[str, ChemicalEntityId], Union[dict, "ChemicalEntity"]], list[Union[dict, "ChemicalEntity"]]]] = empty_dict() + has_amount: Optional[Union[Union[dict, "AmountOfSubstance"], list[Union[dict, "AmountOfSubstance"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): - if self._is_empty(self.description): - self.MissingRequiredField("description") - if not isinstance(self.description, list): - self.description = [self.description] if self.description is not None else [] - self.description = [v if isinstance(v, str) else str(v) for v in self.description] + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, DissolvingSubstanceId): + self.id = DissolvingSubstanceId(self.id) - if self._is_empty(self.publisher): - self.MissingRequiredField("publisher") - if not isinstance(self.publisher, Agent): - self.publisher = Agent(**as_dict(self.publisher)) + if not isinstance(self.has_percentage_of_total, list): + self.has_percentage_of_total = [self.has_percentage_of_total] if self.has_percentage_of_total is not None else [] + self.has_percentage_of_total = [v if isinstance(v, PercentageOfTotal) else PercentageOfTotal(**as_dict(v)) for v in self.has_percentage_of_total] - if self._is_empty(self.title): - self.MissingRequiredField("title") - if not isinstance(self.title, list): - self.title = [self.title] if self.title is not None else [] - self.title = [v if isinstance(v, str) else str(v) for v in self.title] + if self.alternative_label is not None and not isinstance(self.alternative_label, str): + self.alternative_label = str(self.alternative_label) - self._normalize_inlined_as_list(slot_name="applicable_legislation", slot_type=LegalResource, key_name="id", keyed=True) + if self.has_physical_state is not None and not isinstance(self.has_physical_state, PhysicalStateEnum): + self.has_physical_state = PhysicalStateEnum(self.has_physical_state) - if not isinstance(self.catalogue, list): - self.catalogue = [self.catalogue] if self.catalogue is not None else [] + if not isinstance(self.has_temperature, list): + self.has_temperature = [self.has_temperature] if self.has_temperature is not None else [] + self.has_temperature = [v if isinstance(v, Temperature) else Temperature(**as_dict(v)) for v in self.has_temperature] + + if not isinstance(self.has_mass, list): + self.has_mass = [self.has_mass] if self.has_mass is not None else [] + self.has_mass = [v if isinstance(v, Mass) else Mass(**as_dict(v)) for v in self.has_mass] + + if not isinstance(self.has_volume, list): + self.has_volume = [self.has_volume] if self.has_volume is not None else [] + self.has_volume = [v if isinstance(v, Volume) else Volume(**as_dict(v)) for v in self.has_volume] + + if not isinstance(self.has_density, list): + self.has_density = [self.has_density] if self.has_density is not None else [] + self.has_density = [v if isinstance(v, Density) else Density(**as_dict(v)) for v in self.has_density] + + if not isinstance(self.has_pressure, list): + self.has_pressure = [self.has_pressure] if self.has_pressure is not None else [] + self.has_pressure = [v if isinstance(v, Pressure) else Pressure(**as_dict(v)) for v in self.has_pressure] + + if not isinstance(self.has_concentration, list): + self.has_concentration = [self.has_concentration] if self.has_concentration is not None else [] + self.has_concentration = [v if isinstance(v, Concentration) else Concentration(**as_dict(v)) for v in self.has_concentration] + + if not isinstance(self.has_ph_value, list): + self.has_ph_value = [self.has_ph_value] if self.has_ph_value is not None else [] + self.has_ph_value = [v if isinstance(v, PHValue) else PHValue(**as_dict(v)) for v in self.has_ph_value] + + self._normalize_inlined_as_list(slot_name="composed_of", slot_type=ChemicalEntity, key_name="id", keyed=True) + + if not isinstance(self.has_amount, list): + self.has_amount = [self.has_amount] if self.has_amount is not None else [] + self.has_amount = [v if isinstance(v, AmountOfSubstance) else AmountOfSubstance(**as_dict(v)) for v in self.has_amount] + + super().__post_init__(**kwargs) + + +@dataclass(repr=False) +class Catalyst(AgenticEntity): + """ + A ChemicalSubstance or MaterialEntity that initiates or accelerates a ChemicalReaction without itself being + affected. + """ + _inherited_slots: ClassVar[list[str]] = [] + + class_class_uri: ClassVar[URIRef] = SIO["010344"] + class_class_curie: ClassVar[str] = "SIO:010344" + class_name: ClassVar[str] = "Catalyst" + class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Catalyst + + id: Union[str, CatalystId] = None + has_molar_equivalent: Optional[Union[Union[dict, "MolarEquivalent"], list[Union[dict, "MolarEquivalent"]]]] = empty_list() + alternative_label: Optional[str] = None + has_physical_state: Optional[Union[str, "PhysicalStateEnum"]] = None + has_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() + has_mass: Optional[Union[Union[dict, "Mass"], list[Union[dict, "Mass"]]]] = empty_list() + has_volume: Optional[Union[Union[dict, "Volume"], list[Union[dict, "Volume"]]]] = empty_list() + has_density: Optional[Union[Union[dict, "Density"], list[Union[dict, "Density"]]]] = empty_list() + has_pressure: Optional[Union[Union[dict, "Pressure"], list[Union[dict, "Pressure"]]]] = empty_list() + has_concentration: Optional[Union[Union[dict, "Concentration"], list[Union[dict, "Concentration"]]]] = empty_list() + has_ph_value: Optional[Union[Union[dict, "PHValue"], list[Union[dict, "PHValue"]]]] = empty_list() + composed_of: Optional[Union[dict[Union[str, ChemicalEntityId], Union[dict, "ChemicalEntity"]], list[Union[dict, "ChemicalEntity"]]]] = empty_dict() + has_amount: Optional[Union[Union[dict, "AmountOfSubstance"], list[Union[dict, "AmountOfSubstance"]]]] = empty_list() + + def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, CatalystId): + self.id = CatalystId(self.id) + + if not isinstance(self.has_molar_equivalent, list): + self.has_molar_equivalent = [self.has_molar_equivalent] if self.has_molar_equivalent is not None else [] + self.has_molar_equivalent = [v if isinstance(v, MolarEquivalent) else MolarEquivalent(**as_dict(v)) for v in self.has_molar_equivalent] + + if self.alternative_label is not None and not isinstance(self.alternative_label, str): + self.alternative_label = str(self.alternative_label) + + if self.has_physical_state is not None and not isinstance(self.has_physical_state, PhysicalStateEnum): + self.has_physical_state = PhysicalStateEnum(self.has_physical_state) + + if not isinstance(self.has_temperature, list): + self.has_temperature = [self.has_temperature] if self.has_temperature is not None else [] + self.has_temperature = [v if isinstance(v, Temperature) else Temperature(**as_dict(v)) for v in self.has_temperature] + + if not isinstance(self.has_mass, list): + self.has_mass = [self.has_mass] if self.has_mass is not None else [] + self.has_mass = [v if isinstance(v, Mass) else Mass(**as_dict(v)) for v in self.has_mass] + + if not isinstance(self.has_volume, list): + self.has_volume = [self.has_volume] if self.has_volume is not None else [] + self.has_volume = [v if isinstance(v, Volume) else Volume(**as_dict(v)) for v in self.has_volume] + + if not isinstance(self.has_density, list): + self.has_density = [self.has_density] if self.has_density is not None else [] + self.has_density = [v if isinstance(v, Density) else Density(**as_dict(v)) for v in self.has_density] + + if not isinstance(self.has_pressure, list): + self.has_pressure = [self.has_pressure] if self.has_pressure is not None else [] + self.has_pressure = [v if isinstance(v, Pressure) else Pressure(**as_dict(v)) for v in self.has_pressure] + + if not isinstance(self.has_concentration, list): + self.has_concentration = [self.has_concentration] if self.has_concentration is not None else [] + self.has_concentration = [v if isinstance(v, Concentration) else Concentration(**as_dict(v)) for v in self.has_concentration] + + if not isinstance(self.has_ph_value, list): + self.has_ph_value = [self.has_ph_value] if self.has_ph_value is not None else [] + self.has_ph_value = [v if isinstance(v, PHValue) else PHValue(**as_dict(v)) for v in self.has_ph_value] + + self._normalize_inlined_as_list(slot_name="composed_of", slot_type=ChemicalEntity, key_name="id", keyed=True) + + if not isinstance(self.has_amount, list): + self.has_amount = [self.has_amount] if self.has_amount is not None else [] + self.has_amount = [v if isinstance(v, AmountOfSubstance) else AmountOfSubstance(**as_dict(v)) for v in self.has_amount] + + super().__post_init__(**kwargs) + + +Any = Any + +@dataclass(repr=False) +class Catalogue(YAMLRoot): + """ + See [DCAT-AP specs:Catalogue](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Catalogue) + """ + _inherited_slots: ClassVar[list[str]] = [] + + class_class_uri: ClassVar[URIRef] = DCAT["Catalog"] + class_class_curie: ClassVar[str] = "dcat:Catalog" + class_name: ClassVar[str] = "Catalogue" + class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Catalogue + + description: Union[str, list[str]] = None + publisher: Union[dict, Agent] = None + title: Union[str, list[str]] = None + applicable_legislation: Optional[Union[dict[Union[str, LegalResourceId], Union[dict, "LegalResource"]], list[Union[dict, "LegalResource"]]]] = empty_dict() + catalogue: Optional[Union[Union[dict, "Catalogue"], list[Union[dict, "Catalogue"]]]] = empty_list() + creator: Optional[Union[dict, Agent]] = None + geographical_coverage: Optional[Union[Union[dict, "Location"], list[Union[dict, "Location"]]]] = empty_list() + has_dataset: Optional[Union[dict[Union[str, DatasetId], Union[dict, "Dataset"]], list[Union[dict, "Dataset"]]]] = empty_dict() + has_part: Optional[Union[Union[dict, "Catalogue"], list[Union[dict, "Catalogue"]]]] = empty_list() + homepage: Optional[Union[dict, "Document"]] = None + language: Optional[Union[Union[dict, "LinguisticSystem"], list[Union[dict, "LinguisticSystem"]]]] = empty_list() + licence: Optional[Union[dict, "LicenseDocument"]] = None + modification_date: Optional[Union[str, XSDDate]] = None + record: Optional[Union[Union[dict, "CatalogueRecord"], list[Union[dict, "CatalogueRecord"]]]] = empty_list() + release_date: Optional[Union[str, XSDDate]] = None + rights: Optional[Union[dict, "RightsStatement"]] = None + service: Optional[Union[Union[dict, "DataService"], list[Union[dict, "DataService"]]]] = empty_list() + temporal_coverage: Optional[Union[Union[dict, "PeriodOfTime"], list[Union[dict, "PeriodOfTime"]]]] = empty_list() + themes: Optional[Union[Union[dict, "ConceptScheme"], list[Union[dict, "ConceptScheme"]]]] = empty_list() + + def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.description): + self.MissingRequiredField("description") + if not isinstance(self.description, list): + self.description = [self.description] if self.description is not None else [] + self.description = [v if isinstance(v, str) else str(v) for v in self.description] + + if self._is_empty(self.publisher): + self.MissingRequiredField("publisher") + if not isinstance(self.publisher, Agent): + self.publisher = Agent(**as_dict(self.publisher)) + + if self._is_empty(self.title): + self.MissingRequiredField("title") + if not isinstance(self.title, list): + self.title = [self.title] if self.title is not None else [] + self.title = [v if isinstance(v, str) else str(v) for v in self.title] + + self._normalize_inlined_as_list(slot_name="applicable_legislation", slot_type=LegalResource, key_name="id", keyed=True) + + if not isinstance(self.catalogue, list): + self.catalogue = [self.catalogue] if self.catalogue is not None else [] self.catalogue = [v if isinstance(v, Catalogue) else Catalogue(**as_dict(v)) for v in self.catalogue] if self.creator is not None and not isinstance(self.creator, Agent): @@ -1433,7 +1798,61 @@ def __post_init__(self, *_: str, **kwargs: Any): @dataclass(repr=False) -class Synthesis(DataGeneratingActivity): +class CatalysisDataGeneratingActivity(DataGeneratingActivity): + """ + A CoreMeta4Cat specialization of DCAT-AP-PLUS's DataGeneratingActivity + that adds a type designator (activity_designator). Synthesis, + Characterization, and Simulation all specialize this class instead of + DataGeneratingActivity directly, so that when one of them is nested + inside CatalysisDataset.was_generated_by, the LinkML Python loader can + tell which concrete subclass a given entry is meant to be and keep its + subclass-specific fields (e.g. Characterization.realized_plan) rather + than falling back to DataGeneratingActivity's own generic slot + definitions. + + activity_designator is filled in automatically by LinkML when a class + is instantiated directly (e.g. loading a standalone Synthesis-NNN.yaml + file) -- it does not need to be set by hand there. It only needs to be + set explicitly in the source data when a Synthesis/Characterization/ + Simulation instance is nested inside another object's was_generated_by + list (e.g. in a combined CatalysisDataset file), so the loader knows + which of the three to construct. + """ + _inherited_slots: ClassVar[list[str]] = [] + + class_class_uri: ClassVar[URIRef] = COREMETA4CAT["CatalysisDataGeneratingActivity"] + class_class_curie: ClassVar[str] = "coremeta4cat:CatalysisDataGeneratingActivity" + class_name: ClassVar[str] = "CatalysisDataGeneratingActivity" + class_model_uri: ClassVar[URIRef] = COREMETA4CAT.CatalysisDataGeneratingActivity + + id: Union[str, CatalysisDataGeneratingActivityId] = None + activity_designator: Optional[str] = None + + def __post_init__(self, *_: str, **kwargs: Any): + self.activity_designator = str(self.class_name) + + super().__post_init__(**kwargs) + + + def __new__(cls, *args, **kwargs): + + type_designator = "activity_designator" + if not type_designator in kwargs: + return super().__new__(cls,*args,**kwargs) + else: + type_designator_value = kwargs[type_designator] + target_cls = cls._class_for("class_name", type_designator_value) + + + if target_cls is None: + raise ValueError(f"Wrong type designator value: class {cls.__name__} " + f"has no subclass with ['class_name']='{kwargs[type_designator]}'") + return super().__new__(target_cls,*args,**kwargs) + + + +@dataclass(repr=False) +class Synthesis(CatalysisDataGeneratingActivity): """ A DataGeneratingActivity in which a catalyst is prepared. @@ -1511,10 +1930,11 @@ def __post_init__(self, *_: str, **kwargs: Any): self._normalize_inlined_as_list(slot_name="carried_out_by", slot_type=Device, key_name="id", keyed=True) super().__post_init__(**kwargs) + self.activity_designator = str(self.class_name) @dataclass(repr=False) -class Characterization(DataGeneratingActivity): +class Characterization(CatalysisDataGeneratingActivity): """ A DataGeneratingActivity in which a catalyst sample or catalytic material is characterized using an analytical technique. @@ -1588,10 +2008,11 @@ def __post_init__(self, *_: str, **kwargs: Any): self.rdf_type = DefinedTerm(**as_dict(self.rdf_type)) super().__post_init__(**kwargs) + self.activity_designator = str(self.class_name) @dataclass(repr=False) -class Simulation(DataGeneratingActivity): +class Simulation(CatalysisDataGeneratingActivity): """ A DataGeneratingActivity in which a catalyst, catalytic material, or catalytic process is modelled computationally. @@ -1650,6 +2071,7 @@ def __post_init__(self, *_: str, **kwargs: Any): self._normalize_inlined_as_list(slot_name="evaluated_entity", slot_type=EvaluatedEntity, key_name="id", keyed=True) super().__post_init__(**kwargs) + self.activity_designator = str(self.class_name) @dataclass(repr=False) @@ -2043,8 +2465,8 @@ class CatalysisDataset(Dataset): description: Union[str, list[str]] = None title: Union[str, list[str]] = None rdf_type: Optional[Union[dict, "DefinedTerm"]] = None - was_generated_by: Optional[Union[dict[Union[str, DataGeneratingActivityId], Union[dict, DataGeneratingActivity]], list[Union[dict, DataGeneratingActivity]]]] = empty_dict() - is_about_activity: Optional[Union[dict[Union[str, EvaluatedActivityId], Union[dict, "EvaluatedActivity"]], list[Union[dict, "EvaluatedActivity"]]]] = empty_dict() + was_generated_by: Optional[Union[dict[Union[str, CatalysisDataGeneratingActivityId], Union[dict, CatalysisDataGeneratingActivity]], list[Union[dict, CatalysisDataGeneratingActivity]]]] = empty_dict() + is_about_activity: Optional[Union[dict[Union[str, CatalyticReactionId], Union[dict, "CatalyticReaction"]], list[Union[dict, "CatalyticReaction"]]]] = empty_dict() is_about_entity: Optional[Union[dict[Union[str, EvaluatedEntityId], Union[dict, "EvaluatedEntity"]], list[Union[dict, "EvaluatedEntity"]]]] = empty_dict() def __post_init__(self, *_: str, **kwargs: Any): @@ -2056,9 +2478,9 @@ def __post_init__(self, *_: str, **kwargs: Any): if self.rdf_type is not None and not isinstance(self.rdf_type, DefinedTerm): self.rdf_type = DefinedTerm(**as_dict(self.rdf_type)) - self._normalize_inlined_as_list(slot_name="was_generated_by", slot_type=DataGeneratingActivity, key_name="id", keyed=True) + self._normalize_inlined_as_list(slot_name="was_generated_by", slot_type=CatalysisDataGeneratingActivity, key_name="id", keyed=True) - self._normalize_inlined_as_list(slot_name="is_about_activity", slot_type=EvaluatedActivity, key_name="id", keyed=True) + self._normalize_inlined_as_list(slot_name="is_about_activity", slot_type=CatalyticReaction, key_name="id", keyed=True) self._normalize_inlined_as_list(slot_name="is_about_entity", slot_type=EvaluatedEntity, key_name="id", keyed=True) @@ -2295,18 +2717,76 @@ def __post_init__(self, *_: str, **kwargs: Any): @dataclass(repr=False) -class ChemicalReactor(Device): +class Reactor(Device): + """ + A reactor is a container for controlling a biological or chemical reaction or process. + """ + _inherited_slots: ClassVar[list[str]] = [] + + class_class_uri: ClassVar[URIRef] = AFE["0000153"] + class_class_curie: ClassVar[str] = "AFE:0000153" + class_name: ClassVar[str] = "Reactor" + class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Reactor + + id: Union[str, ReactorId] = None + alternative_label: Optional[str] = None + has_physical_state: Optional[Union[str, "PhysicalStateEnum"]] = None + has_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() + has_mass: Optional[Union[Union[dict, "Mass"], list[Union[dict, "Mass"]]]] = empty_list() + has_volume: Optional[Union[Union[dict, "Volume"], list[Union[dict, "Volume"]]]] = empty_list() + has_density: Optional[Union[Union[dict, "Density"], list[Union[dict, "Density"]]]] = empty_list() + has_pressure: Optional[Union[Union[dict, "Pressure"], list[Union[dict, "Pressure"]]]] = empty_list() + + def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ReactorId): + self.id = ReactorId(self.id) + + if self.alternative_label is not None and not isinstance(self.alternative_label, str): + self.alternative_label = str(self.alternative_label) + + if self.has_physical_state is not None and not isinstance(self.has_physical_state, PhysicalStateEnum): + self.has_physical_state = PhysicalStateEnum(self.has_physical_state) + + if not isinstance(self.has_temperature, list): + self.has_temperature = [self.has_temperature] if self.has_temperature is not None else [] + self.has_temperature = [v if isinstance(v, Temperature) else Temperature(**as_dict(v)) for v in self.has_temperature] + + if not isinstance(self.has_mass, list): + self.has_mass = [self.has_mass] if self.has_mass is not None else [] + self.has_mass = [v if isinstance(v, Mass) else Mass(**as_dict(v)) for v in self.has_mass] + + if not isinstance(self.has_volume, list): + self.has_volume = [self.has_volume] if self.has_volume is not None else [] + self.has_volume = [v if isinstance(v, Volume) else Volume(**as_dict(v)) for v in self.has_volume] + + if not isinstance(self.has_density, list): + self.has_density = [self.has_density] if self.has_density is not None else [] + self.has_density = [v if isinstance(v, Density) else Density(**as_dict(v)) for v in self.has_density] + + if not isinstance(self.has_pressure, list): + self.has_pressure = [self.has_pressure] if self.has_pressure is not None else [] + self.has_pressure = [v if isinstance(v, Pressure) else Pressure(**as_dict(v)) for v in self.has_pressure] + + super().__post_init__(**kwargs) + + +@dataclass(repr=False) +class ChemicalReactor(Reactor): """ - Abstract Device subclass representing a catalytic reactor vessel. + Abstract Reactor (chemdcat-ap) subclass representing a catalytic reactor + vessel. Reactor is more specific than the general Device (AgenticEntity): it restricts - carried_out_by on Reaction to dedicated reactor equipment. This semantic - distinction separates analytical instruments (Device) from reaction vessels - (Reactor) in the carried_out_by relationship. + the used_reactor relation (is_a: carried_out_by) on Reaction to dedicated + reactor equipment. This semantic distinction separates analytical + instruments (Device) from reaction vessels (Reactor). ChemicalReactor + further specializes chemdcat-ap's generic Reactor for catalysis use cases. Concrete subclasses (FixedBedReactor, CSTR, PlugFlowReactor, …) specify reactor geometry and operating mode. - Linked from Reaction via carried_out_by (restricted to range: Reactor). + Linked from Reaction via used_reactor (restricted to range: ChemicalReactor). """ _inherited_slots: ClassVar[list[str]] = [] @@ -2333,9 +2813,9 @@ class ElectrochemicalReactor(ChemicalReactor): id: Union[str, ElectrochemicalReactorId] = None has_cathode: Optional[Union[str, list[str]]] = empty_list() has_anode: Optional[Union[str, list[str]]] = empty_list() - has_cell_operating_mode: Optional[Union[str, list[str]]] = empty_list() - has_active_area: Optional[Union[Union[dict, "QuantitativeAttribute"], list[Union[dict, "QuantitativeAttribute"]]]] = empty_list() - has_faradaic_current: Optional[Union[Union[dict, "QuantitativeAttribute"], list[Union[dict, "QuantitativeAttribute"]]]] = empty_list() + cell_operating_mode: Optional[Union[str, "CellOperatingModeEnum"]] = None + has_active_area: Optional[Union[Union[dict, "Area"], list[Union[dict, "Area"]]]] = empty_list() + faradaic_current: Optional[Union[Union[dict, "ElectricCurrent"], list[Union[dict, "ElectricCurrent"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): if self._is_empty(self.id): @@ -2351,17 +2831,16 @@ def __post_init__(self, *_: str, **kwargs: Any): self.has_anode = [self.has_anode] if self.has_anode is not None else [] self.has_anode = [v if isinstance(v, str) else str(v) for v in self.has_anode] - if not isinstance(self.has_cell_operating_mode, list): - self.has_cell_operating_mode = [self.has_cell_operating_mode] if self.has_cell_operating_mode is not None else [] - self.has_cell_operating_mode = [v if isinstance(v, str) else str(v) for v in self.has_cell_operating_mode] + if self.cell_operating_mode is not None and not isinstance(self.cell_operating_mode, CellOperatingModeEnum): + self.cell_operating_mode = CellOperatingModeEnum(self.cell_operating_mode) if not isinstance(self.has_active_area, list): self.has_active_area = [self.has_active_area] if self.has_active_area is not None else [] - self.has_active_area = [v if isinstance(v, QuantitativeAttribute) else QuantitativeAttribute(**as_dict(v)) for v in self.has_active_area] + self.has_active_area = [v if isinstance(v, Area) else Area(**as_dict(v)) for v in self.has_active_area] - if not isinstance(self.has_faradaic_current, list): - self.has_faradaic_current = [self.has_faradaic_current] if self.has_faradaic_current is not None else [] - self.has_faradaic_current = [v if isinstance(v, QuantitativeAttribute) else QuantitativeAttribute(**as_dict(v)) for v in self.has_faradaic_current] + if not isinstance(self.faradaic_current, list): + self.faradaic_current = [self.faradaic_current] if self.faradaic_current is not None else [] + self.faradaic_current = [v if isinstance(v, ElectricCurrent) else ElectricCurrent(**as_dict(v)) for v in self.faradaic_current] super().__post_init__(**kwargs) @@ -2380,10 +2859,12 @@ class CSTR(ChemicalReactor): class_model_uri: ClassVar[URIRef] = COREMETA4CAT.CSTR id: Union[str, CSTRId] = None - has_stirring_speed: Optional[Union[Union[dict, "AngularVelocity"], list[Union[dict, "AngularVelocity"]]]] = empty_list() - has_volume: Optional[Union[Union[dict, "Volume"], list[Union[dict, "Volume"]]]] = empty_list() - has_stirrer_type: Optional[Union[str, list[str]]] = empty_list() - has_stirrer_diameter: Optional[Union[Union[dict, "QuantitativeAttribute"], list[Union[dict, "QuantitativeAttribute"]]]] = empty_list() + stirring_rate: Optional[Union[Union[dict, "AngularVelocity"], list[Union[dict, "AngularVelocity"]]]] = empty_list() + residence_time: Optional[Union[dict, "Duration"]] = None + reactor_working_volume: Optional[Union[Union[dict, "Volume"], list[Union[dict, "Volume"]]]] = empty_list() + reactor_diameter: Optional[Union[Union[dict, "LengthQuantity"], list[Union[dict, "LengthQuantity"]]]] = empty_list() + stirrer_diameter: Optional[Union[Union[dict, "LengthQuantity"], list[Union[dict, "LengthQuantity"]]]] = empty_list() + reactor_stirrer_type: Optional[Union[str, list[str]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): if self._is_empty(self.id): @@ -2391,21 +2872,28 @@ def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.id, CSTRId): self.id = CSTRId(self.id) - if not isinstance(self.has_stirring_speed, list): - self.has_stirring_speed = [self.has_stirring_speed] if self.has_stirring_speed is not None else [] - self.has_stirring_speed = [v if isinstance(v, AngularVelocity) else AngularVelocity(**as_dict(v)) for v in self.has_stirring_speed] + if not isinstance(self.stirring_rate, list): + self.stirring_rate = [self.stirring_rate] if self.stirring_rate is not None else [] + self.stirring_rate = [v if isinstance(v, AngularVelocity) else AngularVelocity(**as_dict(v)) for v in self.stirring_rate] - if not isinstance(self.has_volume, list): - self.has_volume = [self.has_volume] if self.has_volume is not None else [] - self.has_volume = [v if isinstance(v, Volume) else Volume(**as_dict(v)) for v in self.has_volume] + if self.residence_time is not None and not isinstance(self.residence_time, Duration): + self.residence_time = Duration(**as_dict(self.residence_time)) + + if not isinstance(self.reactor_working_volume, list): + self.reactor_working_volume = [self.reactor_working_volume] if self.reactor_working_volume is not None else [] + self.reactor_working_volume = [v if isinstance(v, Volume) else Volume(**as_dict(v)) for v in self.reactor_working_volume] + + if not isinstance(self.reactor_diameter, list): + self.reactor_diameter = [self.reactor_diameter] if self.reactor_diameter is not None else [] + self.reactor_diameter = [v if isinstance(v, LengthQuantity) else LengthQuantity(**as_dict(v)) for v in self.reactor_diameter] - if not isinstance(self.has_stirrer_type, list): - self.has_stirrer_type = [self.has_stirrer_type] if self.has_stirrer_type is not None else [] - self.has_stirrer_type = [v if isinstance(v, str) else str(v) for v in self.has_stirrer_type] + if not isinstance(self.stirrer_diameter, list): + self.stirrer_diameter = [self.stirrer_diameter] if self.stirrer_diameter is not None else [] + self.stirrer_diameter = [v if isinstance(v, LengthQuantity) else LengthQuantity(**as_dict(v)) for v in self.stirrer_diameter] - if not isinstance(self.has_stirrer_diameter, list): - self.has_stirrer_diameter = [self.has_stirrer_diameter] if self.has_stirrer_diameter is not None else [] - self.has_stirrer_diameter = [v if isinstance(v, QuantitativeAttribute) else QuantitativeAttribute(**as_dict(v)) for v in self.has_stirrer_diameter] + if not isinstance(self.reactor_stirrer_type, list): + self.reactor_stirrer_type = [self.reactor_stirrer_type] if self.reactor_stirrer_type is not None else [] + self.reactor_stirrer_type = [v if isinstance(v, str) else str(v) for v in self.reactor_stirrer_type] super().__post_init__(**kwargs) @@ -2424,6 +2912,12 @@ class PlugFlowReactor(ChemicalReactor): class_model_uri: ClassVar[URIRef] = COREMETA4CAT.PlugFlowReactor id: Union[str, PlugFlowReactorId] = None + tube_length: Optional[Union[Union[dict, "LengthQuantity"], list[Union[dict, "LengthQuantity"]]]] = empty_list() + tube_internal_diameter: Optional[Union[Union[dict, "LengthQuantity"], list[Union[dict, "LengthQuantity"]]]] = empty_list() + flow_direction: Optional[Union[str, list[str]]] = empty_list() + number_of_tubes: Optional[Union[int, list[int]]] = empty_list() + tube_material: Optional[Union[str, list[str]]] = empty_list() + catalyst_particle_size: Optional[Union[Union[dict, "LengthQuantity"], list[Union[dict, "LengthQuantity"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): if self._is_empty(self.id): @@ -2431,6 +2925,30 @@ def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.id, PlugFlowReactorId): self.id = PlugFlowReactorId(self.id) + if not isinstance(self.tube_length, list): + self.tube_length = [self.tube_length] if self.tube_length is not None else [] + self.tube_length = [v if isinstance(v, LengthQuantity) else LengthQuantity(**as_dict(v)) for v in self.tube_length] + + if not isinstance(self.tube_internal_diameter, list): + self.tube_internal_diameter = [self.tube_internal_diameter] if self.tube_internal_diameter is not None else [] + self.tube_internal_diameter = [v if isinstance(v, LengthQuantity) else LengthQuantity(**as_dict(v)) for v in self.tube_internal_diameter] + + if not isinstance(self.flow_direction, list): + self.flow_direction = [self.flow_direction] if self.flow_direction is not None else [] + self.flow_direction = [v if isinstance(v, str) else str(v) for v in self.flow_direction] + + if not isinstance(self.number_of_tubes, list): + self.number_of_tubes = [self.number_of_tubes] if self.number_of_tubes is not None else [] + self.number_of_tubes = [v if isinstance(v, int) else int(v) for v in self.number_of_tubes] + + if not isinstance(self.tube_material, list): + self.tube_material = [self.tube_material] if self.tube_material is not None else [] + self.tube_material = [v if isinstance(v, str) else str(v) for v in self.tube_material] + + if not isinstance(self.catalyst_particle_size, list): + self.catalyst_particle_size = [self.catalyst_particle_size] if self.catalyst_particle_size is not None else [] + self.catalyst_particle_size = [v if isinstance(v, LengthQuantity) else LengthQuantity(**as_dict(v)) for v in self.catalyst_particle_size] + super().__post_init__(**kwargs) @@ -2448,6 +2966,11 @@ class Autoclave(ChemicalReactor): class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Autoclave id: Union[str, AutoclaveId] = None + agitation_type: Optional[Union[str, list[str]]] = empty_list() + reaction_chamber_material: Optional[Union[str, list[str]]] = empty_list() + vessel_internal_volume: Optional[Union[Union[dict, "Volume"], list[Union[dict, "Volume"]]]] = empty_list() + vessel_material: Optional[Union[str, list[str]]] = empty_list() + batch_duration: Optional[Union[dict, "Duration"]] = None def __post_init__(self, *_: str, **kwargs: Any): if self._is_empty(self.id): @@ -2455,6 +2978,25 @@ def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.id, AutoclaveId): self.id = AutoclaveId(self.id) + if not isinstance(self.agitation_type, list): + self.agitation_type = [self.agitation_type] if self.agitation_type is not None else [] + self.agitation_type = [v if isinstance(v, str) else str(v) for v in self.agitation_type] + + if not isinstance(self.reaction_chamber_material, list): + self.reaction_chamber_material = [self.reaction_chamber_material] if self.reaction_chamber_material is not None else [] + self.reaction_chamber_material = [v if isinstance(v, str) else str(v) for v in self.reaction_chamber_material] + + if not isinstance(self.vessel_internal_volume, list): + self.vessel_internal_volume = [self.vessel_internal_volume] if self.vessel_internal_volume is not None else [] + self.vessel_internal_volume = [v if isinstance(v, Volume) else Volume(**as_dict(v)) for v in self.vessel_internal_volume] + + if not isinstance(self.vessel_material, list): + self.vessel_material = [self.vessel_material] if self.vessel_material is not None else [] + self.vessel_material = [v if isinstance(v, str) else str(v) for v in self.vessel_material] + + if self.batch_duration is not None and not isinstance(self.batch_duration, Duration): + self.batch_duration = Duration(**as_dict(self.batch_duration)) + super().__post_init__(**kwargs) @@ -2472,6 +3014,11 @@ class SlurryReactor(ChemicalReactor): class_model_uri: ClassVar[URIRef] = COREMETA4CAT.SlurryReactor id: Union[str, SlurryReactorId] = None + catalyst_particle_size: Optional[Union[Union[dict, "LengthQuantity"], list[Union[dict, "LengthQuantity"]]]] = empty_list() + gas_liquid_ratio: Optional[Union[float, list[float]]] = empty_list() + agitation_sparging_rate: Optional[Union[Union[dict, "VolumeFlowRate"], list[Union[dict, "VolumeFlowRate"]]]] = empty_list() + impeller_type: Optional[Union[str, list[str]]] = empty_list() + agitation_speed: Optional[Union[Union[dict, "AngularVelocity"], list[Union[dict, "AngularVelocity"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): if self._is_empty(self.id): @@ -2479,6 +3026,26 @@ def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.id, SlurryReactorId): self.id = SlurryReactorId(self.id) + if not isinstance(self.catalyst_particle_size, list): + self.catalyst_particle_size = [self.catalyst_particle_size] if self.catalyst_particle_size is not None else [] + self.catalyst_particle_size = [v if isinstance(v, LengthQuantity) else LengthQuantity(**as_dict(v)) for v in self.catalyst_particle_size] + + if not isinstance(self.gas_liquid_ratio, list): + self.gas_liquid_ratio = [self.gas_liquid_ratio] if self.gas_liquid_ratio is not None else [] + self.gas_liquid_ratio = [v if isinstance(v, float) else float(v) for v in self.gas_liquid_ratio] + + if not isinstance(self.agitation_sparging_rate, list): + self.agitation_sparging_rate = [self.agitation_sparging_rate] if self.agitation_sparging_rate is not None else [] + self.agitation_sparging_rate = [v if isinstance(v, VolumeFlowRate) else VolumeFlowRate(**as_dict(v)) for v in self.agitation_sparging_rate] + + if not isinstance(self.impeller_type, list): + self.impeller_type = [self.impeller_type] if self.impeller_type is not None else [] + self.impeller_type = [v if isinstance(v, str) else str(v) for v in self.impeller_type] + + if not isinstance(self.agitation_speed, list): + self.agitation_speed = [self.agitation_speed] if self.agitation_speed is not None else [] + self.agitation_speed = [v if isinstance(v, AngularVelocity) else AngularVelocity(**as_dict(v)) for v in self.agitation_speed] + super().__post_init__(**kwargs) @@ -2497,6 +3064,9 @@ class Microreactor(ChemicalReactor): class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Microreactor id: Union[str, MicroreactorId] = None + channel_material: Optional[Union[str, list[str]]] = empty_list() + channel_dimensions: Optional[Union[Union[dict, "LengthQuantity"], list[Union[dict, "LengthQuantity"]]]] = empty_list() + number_of_channels: Optional[Union[int, list[int]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): if self._is_empty(self.id): @@ -2504,6 +3074,18 @@ def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.id, MicroreactorId): self.id = MicroreactorId(self.id) + if not isinstance(self.channel_material, list): + self.channel_material = [self.channel_material] if self.channel_material is not None else [] + self.channel_material = [v if isinstance(v, str) else str(v) for v in self.channel_material] + + if not isinstance(self.channel_dimensions, list): + self.channel_dimensions = [self.channel_dimensions] if self.channel_dimensions is not None else [] + self.channel_dimensions = [v if isinstance(v, LengthQuantity) else LengthQuantity(**as_dict(v)) for v in self.channel_dimensions] + + if not isinstance(self.number_of_channels, list): + self.number_of_channels = [self.number_of_channels] if self.number_of_channels is not None else [] + self.number_of_channels = [v if isinstance(v, int) else int(v) for v in self.number_of_channels] + super().__post_init__(**kwargs) @@ -2521,10 +3103,11 @@ class FixedBedReactor(ChemicalReactor): class_model_uri: ClassVar[URIRef] = COREMETA4CAT.FixedBedReactor id: Union[str, FixedBedReactorId] = None - has_catalyst_particle_size: Optional[Union[Union[dict, "QuantitativeAttribute"], list[Union[dict, "QuantitativeAttribute"]]]] = empty_list() - has_catalyst_bed_volume: Optional[Union[Union[dict, "QuantitativeAttribute"], list[Union[dict, "QuantitativeAttribute"]]]] = empty_list() - has_catalyst_dilution_material: Optional[Union[Union[dict, "QualitativeAttribute"], list[Union[dict, "QualitativeAttribute"]]]] = empty_list() - has_catalyst_bed_height: Optional[Union[Union[dict, "QuantitativeAttribute"], list[Union[dict, "QuantitativeAttribute"]]]] = empty_list() + catalyst_particle_size: Optional[Union[Union[dict, "LengthQuantity"], list[Union[dict, "LengthQuantity"]]]] = empty_list() + catalyst_bed_diameter: Optional[Union[Union[dict, "LengthQuantity"], list[Union[dict, "LengthQuantity"]]]] = empty_list() + catalyst_bed_volume: Optional[Union[Union[dict, "Volume"], list[Union[dict, "Volume"]]]] = empty_list() + catalyst_dilution_material: Optional[Union[str, list[str]]] = empty_list() + catalyst_bed_height: Optional[Union[Union[dict, "LengthQuantity"], list[Union[dict, "LengthQuantity"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): if self._is_empty(self.id): @@ -2532,19 +3115,25 @@ def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.id, FixedBedReactorId): self.id = FixedBedReactorId(self.id) - if not isinstance(self.has_catalyst_particle_size, list): - self.has_catalyst_particle_size = [self.has_catalyst_particle_size] if self.has_catalyst_particle_size is not None else [] - self.has_catalyst_particle_size = [v if isinstance(v, QuantitativeAttribute) else QuantitativeAttribute(**as_dict(v)) for v in self.has_catalyst_particle_size] + if not isinstance(self.catalyst_particle_size, list): + self.catalyst_particle_size = [self.catalyst_particle_size] if self.catalyst_particle_size is not None else [] + self.catalyst_particle_size = [v if isinstance(v, LengthQuantity) else LengthQuantity(**as_dict(v)) for v in self.catalyst_particle_size] + + if not isinstance(self.catalyst_bed_diameter, list): + self.catalyst_bed_diameter = [self.catalyst_bed_diameter] if self.catalyst_bed_diameter is not None else [] + self.catalyst_bed_diameter = [v if isinstance(v, LengthQuantity) else LengthQuantity(**as_dict(v)) for v in self.catalyst_bed_diameter] - if not isinstance(self.has_catalyst_bed_volume, list): - self.has_catalyst_bed_volume = [self.has_catalyst_bed_volume] if self.has_catalyst_bed_volume is not None else [] - self.has_catalyst_bed_volume = [v if isinstance(v, QuantitativeAttribute) else QuantitativeAttribute(**as_dict(v)) for v in self.has_catalyst_bed_volume] + if not isinstance(self.catalyst_bed_volume, list): + self.catalyst_bed_volume = [self.catalyst_bed_volume] if self.catalyst_bed_volume is not None else [] + self.catalyst_bed_volume = [v if isinstance(v, Volume) else Volume(**as_dict(v)) for v in self.catalyst_bed_volume] - self._normalize_inlined_as_dict(slot_name="has_catalyst_dilution_material", slot_type=QualitativeAttribute, key_name="value", keyed=False) + if not isinstance(self.catalyst_dilution_material, list): + self.catalyst_dilution_material = [self.catalyst_dilution_material] if self.catalyst_dilution_material is not None else [] + self.catalyst_dilution_material = [v if isinstance(v, str) else str(v) for v in self.catalyst_dilution_material] - if not isinstance(self.has_catalyst_bed_height, list): - self.has_catalyst_bed_height = [self.has_catalyst_bed_height] if self.has_catalyst_bed_height is not None else [] - self.has_catalyst_bed_height = [v if isinstance(v, QuantitativeAttribute) else QuantitativeAttribute(**as_dict(v)) for v in self.has_catalyst_bed_height] + if not isinstance(self.catalyst_bed_height, list): + self.catalyst_bed_height = [self.catalyst_bed_height] if self.catalyst_bed_height is not None else [] + self.catalyst_bed_height = [v if isinstance(v, LengthQuantity) else LengthQuantity(**as_dict(v)) for v in self.catalyst_bed_height] super().__post_init__(**kwargs) @@ -2565,7 +3154,7 @@ class FluidizedBedReactor(ChemicalReactor): id: Union[str, FluidizedBedReactorId] = None gas_distributor_type: Optional[Union[str, list[str]]] = empty_list() bed_expansion_height: Optional[Union[float, list[float]]] = empty_list() - bubble_size_distribution: Optional[str] = None + bubble_size_distribution: Optional[Union[str, list[str]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): if self._is_empty(self.id): @@ -2581,8 +3170,9 @@ def __post_init__(self, *_: str, **kwargs: Any): self.bed_expansion_height = [self.bed_expansion_height] if self.bed_expansion_height is not None else [] self.bed_expansion_height = [v if isinstance(v, float) else float(v) for v in self.bed_expansion_height] - if self.bubble_size_distribution is not None and not isinstance(self.bubble_size_distribution, str): - self.bubble_size_distribution = str(self.bubble_size_distribution) + if not isinstance(self.bubble_size_distribution, list): + self.bubble_size_distribution = [self.bubble_size_distribution] if self.bubble_size_distribution is not None else [] + self.bubble_size_distribution = [v if isinstance(v, str) else str(v) for v in self.bubble_size_distribution] super().__post_init__(**kwargs) @@ -2792,9 +3382,80 @@ def __post_init__(self, *_: str, **kwargs: Any): @dataclass(repr=False) -class CatalyticReaction(EvaluatedActivity): +class ChemicalReaction(EvaluatedActivity): + """ + A process that leads to the transformation of one set of chemical substances to another and that is the subject + matter of a DataGeneratingActivity. + """ + _inherited_slots: ClassVar[list[str]] = [] + + class_class_uri: ClassVar[URIRef] = SIO["010345"] + class_class_curie: ClassVar[str] = "SIO:010345" + class_name: ClassVar[str] = "ChemicalReaction" + class_model_uri: ClassVar[URIRef] = COREMETA4CAT.ChemicalReaction + + id: Union[str, ChemicalReactionId] = None + used_starting_material: Optional[Union[dict[Union[str, StartingMaterialId], Union[dict, "StartingMaterial"]], list[Union[dict, "StartingMaterial"]]]] = empty_dict() + used_reactant: Optional[Union[dict[Union[str, ReagentId], Union[dict, "Reagent"]], list[Union[dict, "Reagent"]]]] = empty_dict() + generated_product: Optional[Union[dict[Union[str, ChemicalProductId], Union[dict, "ChemicalProduct"]], list[Union[dict, "ChemicalProduct"]]]] = empty_dict() + used_catalyst: Optional[Union[dict[Union[str, CatalystId], Union[dict, Catalyst]], list[Union[dict, Catalyst]]]] = empty_dict() + used_solvent: Optional[Union[dict[Union[str, DissolvingSubstanceId], Union[dict, DissolvingSubstance]], list[Union[dict, DissolvingSubstance]]]] = empty_dict() + has_duration: Optional[str] = None + used_reactor: Optional[Union[dict[Union[str, ReactorId], Union[dict, Reactor]], list[Union[dict, Reactor]]]] = empty_dict() + has_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() + has_pressure: Optional[Union[Union[dict, "Pressure"], list[Union[dict, "Pressure"]]]] = empty_list() + has_yield: Optional[Union[Union[dict, "Yield"], list[Union[dict, "Yield"]]]] = empty_list() + has_reaction_step: Optional[Union[dict[Union[str, ChemicalReactionId], Union[dict, "ChemicalReaction"]], list[Union[dict, "ChemicalReaction"]]]] = empty_dict() + related_resource: Optional[Union[dict[Union[str, ResourceId], Union[dict, "Resource"]], list[Union[dict, "Resource"]]]] = empty_dict() + + def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ChemicalReactionId): + self.id = ChemicalReactionId(self.id) + + self._normalize_inlined_as_list(slot_name="used_starting_material", slot_type=StartingMaterial, key_name="id", keyed=True) + + self._normalize_inlined_as_list(slot_name="used_reactant", slot_type=Reagent, key_name="id", keyed=True) + + self._normalize_inlined_as_list(slot_name="generated_product", slot_type=ChemicalProduct, key_name="id", keyed=True) + + self._normalize_inlined_as_list(slot_name="used_catalyst", slot_type=Catalyst, key_name="id", keyed=True) + + self._normalize_inlined_as_list(slot_name="used_solvent", slot_type=DissolvingSubstance, key_name="id", keyed=True) + + if self.has_duration is not None and not isinstance(self.has_duration, str): + self.has_duration = str(self.has_duration) + + self._normalize_inlined_as_list(slot_name="used_reactor", slot_type=Reactor, key_name="id", keyed=True) + + if not isinstance(self.has_temperature, list): + self.has_temperature = [self.has_temperature] if self.has_temperature is not None else [] + self.has_temperature = [v if isinstance(v, Temperature) else Temperature(**as_dict(v)) for v in self.has_temperature] + + if not isinstance(self.has_pressure, list): + self.has_pressure = [self.has_pressure] if self.has_pressure is not None else [] + self.has_pressure = [v if isinstance(v, Pressure) else Pressure(**as_dict(v)) for v in self.has_pressure] + + if not isinstance(self.has_yield, list): + self.has_yield = [self.has_yield] if self.has_yield is not None else [] + self.has_yield = [v if isinstance(v, Yield) else Yield(**as_dict(v)) for v in self.has_yield] + + self._normalize_inlined_as_list(slot_name="has_reaction_step", slot_type=ChemicalReaction, key_name="id", keyed=True) + + self._normalize_inlined_as_list(slot_name="related_resource", slot_type=Resource, key_name="id", keyed=True) + + super().__post_init__(**kwargs) + + +@dataclass(repr=False) +class CatalyticReaction(ChemicalReaction): """ - An EvaluatedActivity representing the catalytic reaction being studied. + A ChemicalReaction (chemdcat-ap) specialization representing the + catalytic reaction being studied. Inherits the generic reaction slots + (starting materials, reactants, products, catalyst, solvent, reactor, + temperature, pressure, yield, reaction steps) from ChemicalReaction and + adds catalysis-specific operating-condition slots. Reaction is NOT a DataGeneratingActivity — it is the catalytic process being observed, not the process that generates the dataset. A CatalysisDataset @@ -2805,32 +3466,35 @@ class CatalyticReaction(EvaluatedActivity): was_generated_by: Characterization (the measurement producing data) is_about_activity: Reaction (the catalytic process being monitored) - The reactor is linked via carried_out_by as a Reactor (Device). - Reactants are linked via had_input_entity. The type of catalytic reaction - (e.g. ammonia synthesis, CO oxidation) is expressed via rdf_type using a - voc4cat or ChemO term. + The reactor is linked via the inherited used_reactor slot (is_a: + carried_out_by), narrowed here to require a ChemicalReactor instance + rather than touching the generic carried_out_by relation directly. + Reactants are linked via the inherited used_reactant slot (range: + Reagent) -- CatalyticReaction does not declare its own reactant slot. + The type of catalytic reaction (e.g. ammonia synthesis, CO oxidation) + is expressed via rdf_type using a voc4cat or ChemO term. """ _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = SIO["010345"] - class_class_curie: ClassVar[str] = "SIO:010345" + class_class_uri: ClassVar[URIRef] = COREMETA4CAT["CatalyticReaction"] + class_class_curie: ClassVar[str] = "coremeta4cat:CatalyticReaction" class_name: ClassVar[str] = "CatalyticReaction" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.CatalyticReaction id: Union[str, CatalyticReactionId] = None - catalyst_quantity: Union[Union[dict, "Mass"], list[Union[dict, "Mass"]]] = None - reactant: Union[dict[Union[str, ChemicalEntityId], Union[dict, "ChemicalEntity"]], list[Union[dict, "ChemicalEntity"]]] = empty_dict() - product_identification_method: Union[Union[dict, "ProductIdentificationMethod"], list[Union[dict, "ProductIdentificationMethod"]]] = None - carried_out_by: Union[dict[Union[str, ChemicalReactorId], Union[dict, ChemicalReactor]], list[Union[dict, ChemicalReactor]]] = empty_dict() - has_catalyst_type: Optional[Union[Union[dict, "CatalystType"], list[Union[dict, "CatalystType"]]]] = empty_list() - has_reaction_type: Optional[Union[Union[dict, "ReactionType"], list[Union[dict, "ReactionType"]]]] = empty_list() + product_identification_method: Union[dict[Union[str, ProductIdentificationMethodId], Union[dict, "ProductIdentificationMethod"]], list[Union[dict, "ProductIdentificationMethod"]]] = empty_dict() + used_reactor: Union[dict[Union[str, ChemicalReactorId], Union[dict, ChemicalReactor]], list[Union[dict, ChemicalReactor]]] = empty_dict() + catalyst_quantity: Optional[Union[Union[dict, "Mass"], list[Union[dict, "Mass"]]]] = empty_list() + catalyst_type: Optional[Union[Union[str, "CatalysisResearchFieldEnum"], list[Union[str, "CatalysisResearchFieldEnum"]]]] = empty_list() + catalyst_form: Optional[Union[Union[str, "CatalystFormEnum"], list[Union[str, "CatalystFormEnum"]]]] = empty_list() + reaction_name: Optional[Union[str, list[str]]] = empty_list() reactor_temperature_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() has_atmosphere: Optional[Union[Union[dict, "Atmosphere"], list[Union[dict, "Atmosphere"]]]] = empty_list() experiment_pressure: Optional[Union[Union[dict, "Pressure"], list[Union[dict, "Pressure"]]]] = empty_list() feed_composition_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() has_experiment_duration: Optional[Union[dict, "Duration"]] = None rdf_type: Optional[Union[dict, DefinedTerm]] = None - had_input_entity: Optional[Union[dict[Union[str, EvaluatedEntityId], Union[dict, "EvaluatedEntity"]], list[Union[dict, "EvaluatedEntity"]]]] = empty_dict() + has_reaction_step: Optional[Union[dict[Union[str, CatalyticReactionId], Union[dict, "CatalyticReaction"]], list[Union[dict, "CatalyticReaction"]]]] = empty_dict() def __post_init__(self, *_: str, **kwargs: Any): if self._is_empty(self.id): @@ -2838,33 +3502,29 @@ def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.id, CatalyticReactionId): self.id = CatalyticReactionId(self.id) - if self._is_empty(self.catalyst_quantity): - self.MissingRequiredField("catalyst_quantity") + if self._is_empty(self.product_identification_method): + self.MissingRequiredField("product_identification_method") + self._normalize_inlined_as_list(slot_name="product_identification_method", slot_type=ProductIdentificationMethod, key_name="id", keyed=True) + + if self._is_empty(self.used_reactor): + self.MissingRequiredField("used_reactor") + self._normalize_inlined_as_list(slot_name="used_reactor", slot_type=ChemicalReactor, key_name="id", keyed=True) + if not isinstance(self.catalyst_quantity, list): self.catalyst_quantity = [self.catalyst_quantity] if self.catalyst_quantity is not None else [] self.catalyst_quantity = [v if isinstance(v, Mass) else Mass(**as_dict(v)) for v in self.catalyst_quantity] - if self._is_empty(self.reactant): - self.MissingRequiredField("reactant") - self._normalize_inlined_as_list(slot_name="reactant", slot_type=ChemicalEntity, key_name="id", keyed=True) - - if self._is_empty(self.product_identification_method): - self.MissingRequiredField("product_identification_method") - if not isinstance(self.product_identification_method, list): - self.product_identification_method = [self.product_identification_method] if self.product_identification_method is not None else [] - self.product_identification_method = [v if isinstance(v, ProductIdentificationMethod) else ProductIdentificationMethod(**as_dict(v)) for v in self.product_identification_method] - - if self._is_empty(self.carried_out_by): - self.MissingRequiredField("carried_out_by") - self._normalize_inlined_as_list(slot_name="carried_out_by", slot_type=ChemicalReactor, key_name="id", keyed=True) + if not isinstance(self.catalyst_type, list): + self.catalyst_type = [self.catalyst_type] if self.catalyst_type is not None else [] + self.catalyst_type = [v if isinstance(v, CatalysisResearchFieldEnum) else CatalysisResearchFieldEnum(v) for v in self.catalyst_type] - if not isinstance(self.has_catalyst_type, list): - self.has_catalyst_type = [self.has_catalyst_type] if self.has_catalyst_type is not None else [] - self.has_catalyst_type = [v if isinstance(v, CatalystType) else CatalystType(**as_dict(v)) for v in self.has_catalyst_type] + if not isinstance(self.catalyst_form, list): + self.catalyst_form = [self.catalyst_form] if self.catalyst_form is not None else [] + self.catalyst_form = [v if isinstance(v, CatalystFormEnum) else CatalystFormEnum(v) for v in self.catalyst_form] - if not isinstance(self.has_reaction_type, list): - self.has_reaction_type = [self.has_reaction_type] if self.has_reaction_type is not None else [] - self.has_reaction_type = [v if isinstance(v, ReactionType) else ReactionType(**as_dict(v)) for v in self.has_reaction_type] + if not isinstance(self.reaction_name, list): + self.reaction_name = [self.reaction_name] if self.reaction_name is not None else [] + self.reaction_name = [v if isinstance(v, str) else str(v) for v in self.reaction_name] if not isinstance(self.reactor_temperature_range, list): self.reactor_temperature_range = [self.reactor_temperature_range] if self.reactor_temperature_range is not None else [] @@ -2888,7 +3548,7 @@ def __post_init__(self, *_: str, **kwargs: Any): if self.rdf_type is not None and not isinstance(self.rdf_type, DefinedTerm): self.rdf_type = DefinedTerm(**as_dict(self.rdf_type)) - self._normalize_inlined_as_list(slot_name="had_input_entity", slot_type=EvaluatedEntity, key_name="id", keyed=True) + self._normalize_inlined_as_list(slot_name="has_reaction_step", slot_type=CatalyticReaction, key_name="id", keyed=True) super().__post_init__(**kwargs) @@ -3033,7 +3693,38 @@ def __post_init__(self, *_: str, **kwargs: Any): super().__post_init__(**kwargs) -class PreparationMethod(Plan): +@dataclass(repr=False) +class CatalysisPlan(Plan): + """ + A CoreMeta4Cat specialization of DCAT-AP-PLUS's Plan that adds a + persistent identifier (id). Plan itself (external, dcat-ap-plus) only + lists title/description -- every CoreMeta4Cat protocol, technique, and + method class needs to be independently citable and cross-referenceable + (e.g. linked to from multiple Reaction/Characterization instances that + reuse the same protocol), so id is added once here rather than + repeated on each of PreparationMethod, CharacterizationTechnique, + SimulationMethod, and ProductIdentificationMethod individually. + """ + _inherited_slots: ClassVar[list[str]] = [] + + class_class_uri: ClassVar[URIRef] = COREMETA4CAT["CatalysisPlan"] + class_class_curie: ClassVar[str] = "coremeta4cat:CatalysisPlan" + class_name: ClassVar[str] = "CatalysisPlan" + class_model_uri: ClassVar[URIRef] = COREMETA4CAT.CatalysisPlan + + id: Union[str, CatalysisPlanId] = None + + def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, CatalysisPlanId): + self.id = CatalysisPlanId(self.id) + + super().__post_init__(**kwargs) + + +@dataclass(repr=False) +class PreparationMethod(CatalysisPlan): """ An abstract Plan describing the protocol used to prepare a catalyst. Concrete subclasses (Impregnation, CoPrecipitation, …) specify the @@ -3050,6 +3741,7 @@ class PreparationMethod(Plan): class_name: ClassVar[str] = "PreparationMethod" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.PreparationMethod + id: Union[str, PreparationMethodId] = None @dataclass(repr=False) class Impregnation(PreparationMethod): @@ -3064,6 +3756,7 @@ class Impregnation(PreparationMethod): class_name: ClassVar[str] = "Impregnation" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Impregnation + id: Union[str, ImpregnationId] = None impregnation_type: Optional[Union[Union[str, "ImpregnationTypeEnum"], list[Union[str, "ImpregnationTypeEnum"]]]] = empty_list() impregnation_duration: Optional[Union[Union[dict, "Duration"], list[Union[dict, "Duration"]]]] = empty_list() impregnation_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() @@ -3071,7 +3764,7 @@ class Impregnation(PreparationMethod): has_drying_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() has_drying_duration: Optional[Union[dict, "Duration"]] = None has_drying_atmosphere: Optional[Union[Union[dict, "Atmosphere"], list[Union[dict, "Atmosphere"]]]] = empty_list() - has_calcination_temperature_range: Optional[Union[dict, QuantitativeRange]] = None + has_calcination_temperature_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() has_calcination_dwelling_time: Optional[Union[dict, "Duration"]] = None number_of_cycles: Optional[Union[int, list[int]]] = empty_list() has_calcination_atmosphere: Optional[Union[Union[dict, "CalcinationGaseousEnvironment"], list[Union[dict, "CalcinationGaseousEnvironment"]]]] = empty_list() @@ -3079,6 +3772,11 @@ class Impregnation(PreparationMethod): has_calcination_gas_flow_rate: Optional[Union[Union[dict, "VolumeFlowRate"], list[Union[dict, "VolumeFlowRate"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ImpregnationId): + self.id = ImpregnationId(self.id) + if not isinstance(self.impregnation_type, list): self.impregnation_type = [self.impregnation_type] if self.impregnation_type is not None else [] self.impregnation_type = [v if isinstance(v, ImpregnationTypeEnum) else ImpregnationTypeEnum(v) for v in self.impregnation_type] @@ -3106,8 +3804,9 @@ def __post_init__(self, *_: str, **kwargs: Any): self.has_drying_atmosphere = [self.has_drying_atmosphere] if self.has_drying_atmosphere is not None else [] self.has_drying_atmosphere = [v if isinstance(v, Atmosphere) else Atmosphere(**as_dict(v)) for v in self.has_drying_atmosphere] - if self.has_calcination_temperature_range is not None and not isinstance(self.has_calcination_temperature_range, QuantitativeRange): - self.has_calcination_temperature_range = QuantitativeRange(**as_dict(self.has_calcination_temperature_range)) + if not isinstance(self.has_calcination_temperature_range, list): + self.has_calcination_temperature_range = [self.has_calcination_temperature_range] if self.has_calcination_temperature_range is not None else [] + self.has_calcination_temperature_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.has_calcination_temperature_range] if self.has_calcination_dwelling_time is not None and not isinstance(self.has_calcination_dwelling_time, Duration): self.has_calcination_dwelling_time = Duration(**as_dict(self.has_calcination_dwelling_time)) @@ -3144,6 +3843,7 @@ class CoPrecipitation(PreparationMethod): class_name: ClassVar[str] = "CoPrecipitation" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.CoPrecipitation + id: Union[str, CoPrecipitationId] = None precipitating_agent: Optional[Union[dict[Union[str, ChemicalEntityId], Union[dict, "ChemicalEntity"]], list[Union[dict, "ChemicalEntity"]]]] = empty_dict() has_concentration: Optional[Union[Union[dict, "Concentration"], list[Union[dict, "Concentration"]]]] = empty_list() has_ph_value: Optional[Union[Union[dict, "PHValue"], list[Union[dict, "PHValue"]]]] = empty_list() @@ -3159,7 +3859,7 @@ class CoPrecipitation(PreparationMethod): has_drying_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() has_drying_duration: Optional[Union[dict, "Duration"]] = None has_drying_atmosphere: Optional[Union[Union[dict, "Atmosphere"], list[Union[dict, "Atmosphere"]]]] = empty_list() - has_calcination_temperature_range: Optional[Union[dict, QuantitativeRange]] = None + has_calcination_temperature_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() has_calcination_dwelling_time: Optional[Union[dict, "Duration"]] = None number_of_cycles: Optional[Union[int, list[int]]] = empty_list() has_calcination_atmosphere: Optional[Union[Union[dict, "CalcinationGaseousEnvironment"], list[Union[dict, "CalcinationGaseousEnvironment"]]]] = empty_list() @@ -3167,6 +3867,11 @@ class CoPrecipitation(PreparationMethod): has_calcination_gas_flow_rate: Optional[Union[Union[dict, "VolumeFlowRate"], list[Union[dict, "VolumeFlowRate"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, CoPrecipitationId): + self.id = CoPrecipitationId(self.id) + self._normalize_inlined_as_list(slot_name="precipitating_agent", slot_type=ChemicalEntity, key_name="id", keyed=True) if not isinstance(self.has_concentration, list): @@ -3222,8 +3927,9 @@ def __post_init__(self, *_: str, **kwargs: Any): self.has_drying_atmosphere = [self.has_drying_atmosphere] if self.has_drying_atmosphere is not None else [] self.has_drying_atmosphere = [v if isinstance(v, Atmosphere) else Atmosphere(**as_dict(v)) for v in self.has_drying_atmosphere] - if self.has_calcination_temperature_range is not None and not isinstance(self.has_calcination_temperature_range, QuantitativeRange): - self.has_calcination_temperature_range = QuantitativeRange(**as_dict(self.has_calcination_temperature_range)) + if not isinstance(self.has_calcination_temperature_range, list): + self.has_calcination_temperature_range = [self.has_calcination_temperature_range] if self.has_calcination_temperature_range is not None else [] + self.has_calcination_temperature_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.has_calcination_temperature_range] if self.has_calcination_dwelling_time is not None and not isinstance(self.has_calcination_dwelling_time, Duration): self.has_calcination_dwelling_time = Duration(**as_dict(self.has_calcination_dwelling_time)) @@ -3260,6 +3966,7 @@ class SolGel(PreparationMethod): class_name: ClassVar[str] = "SolGel" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.SolGel + id: Union[str, SolGelId] = None hydrolysis_ratio: Optional[Union[float, list[float]]] = empty_list() has_aging_duration: Optional[Union[dict, "Duration"]] = None drying: Optional[Union[str, list[str]]] = empty_list() @@ -3270,6 +3977,11 @@ class SolGel(PreparationMethod): has_drying_atmosphere: Optional[Union[Union[dict, "Atmosphere"], list[Union[dict, "Atmosphere"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, SolGelId): + self.id = SolGelId(self.id) + if not isinstance(self.hydrolysis_ratio, list): self.hydrolysis_ratio = [self.hydrolysis_ratio] if self.hydrolysis_ratio is not None else [] self.hydrolysis_ratio = [v if isinstance(v, float) else float(v) for v in self.hydrolysis_ratio] @@ -3316,6 +4028,7 @@ class Solvothermal(PreparationMethod): class_name: ClassVar[str] = "Solvothermal" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Solvothermal + id: Union[str, SolvothermalId] = None filling_volume: Optional[Union[float, list[float]]] = empty_list() stirrer_type: Optional[Union[str, list[str]]] = empty_list() cooling_rate: Optional[Union[Union[dict, "HeatingRate"], list[Union[dict, "HeatingRate"]]]] = empty_list() @@ -3325,6 +4038,11 @@ class Solvothermal(PreparationMethod): has_atmosphere: Optional[Union[Union[dict, "Atmosphere"], list[Union[dict, "Atmosphere"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, SolvothermalId): + self.id = SolvothermalId(self.id) + if not isinstance(self.filling_volume, list): self.filling_volume = [self.filling_volume] if self.filling_volume is not None else [] self.filling_volume = [v if isinstance(v, float) else float(v) for v in self.filling_volume] @@ -3369,6 +4087,7 @@ class PlasmaAssisted(PreparationMethod): class_name: ClassVar[str] = "PlasmaAssisted" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.PlasmaAssisted + id: Union[str, PlasmaAssistedId] = None plasma_type: Optional[Union[str, list[str]]] = empty_list() power_input: Optional[Union[Union[dict, "PowerQuantity"], list[Union[dict, "PowerQuantity"]]]] = empty_list() exposure_time: Optional[Union[Union[dict, "Duration"], list[Union[dict, "Duration"]]]] = empty_list() @@ -3379,6 +4098,11 @@ class PlasmaAssisted(PreparationMethod): has_atmosphere: Optional[Union[Union[dict, "Atmosphere"], list[Union[dict, "Atmosphere"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, PlasmaAssistedId): + self.id = PlasmaAssistedId(self.id) + if not isinstance(self.plasma_type, list): self.plasma_type = [self.plasma_type] if self.plasma_type is not None else [] self.plasma_type = [v if isinstance(v, str) else str(v) for v in self.plasma_type] @@ -3427,6 +4151,7 @@ class CombustionSynthesis(PreparationMethod): class_name: ClassVar[str] = "CombustionSynthesis" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.CombustionSynthesis + id: Union[str, CombustionSynthesisId] = None fuel: Optional[Union[str, list[str]]] = empty_list() oxidizer: Optional[Union[str, list[str]]] = empty_list() fuel_to_oxidizer_ratio: Optional[Union[float, list[float]]] = empty_list() @@ -3438,6 +4163,11 @@ class CombustionSynthesis(PreparationMethod): has_atmosphere: Optional[Union[Union[dict, "Atmosphere"], list[Union[dict, "Atmosphere"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, CombustionSynthesisId): + self.id = CombustionSynthesisId(self.id) + if not isinstance(self.fuel, list): self.fuel = [self.fuel] if self.fuel is not None else [] self.fuel = [v if isinstance(v, str) else str(v) for v in self.fuel] @@ -3491,6 +4221,7 @@ class AtomicLayerDeposition(PreparationMethod): class_name: ClassVar[str] = "AtomicLayerDeposition" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.AtomicLayerDeposition + id: Union[str, AtomicLayerDepositionId] = None substrate: Optional[Union[str, list[str]]] = empty_list() pulse_time: Optional[Union[float, list[float]]] = empty_list() purging_duration: Optional[Union[float, list[float]]] = empty_list() @@ -3499,6 +4230,11 @@ class AtomicLayerDeposition(PreparationMethod): carrier_gas: Optional[Union[dict[Union[str, ChemicalEntityId], Union[dict, "ChemicalEntity"]], list[Union[dict, "ChemicalEntity"]]]] = empty_dict() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, AtomicLayerDepositionId): + self.id = AtomicLayerDepositionId(self.id) + if not isinstance(self.substrate, list): self.substrate = [self.substrate] if self.substrate is not None else [] self.substrate = [v if isinstance(v, str) else str(v) for v in self.substrate] @@ -3537,6 +4273,7 @@ class DepositionPrecipitation(PreparationMethod): class_name: ClassVar[str] = "DepositionPrecipitation" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.DepositionPrecipitation + id: Union[str, DepositionPrecipitationId] = None deposition_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() deposition_time: Optional[Union[Union[dict, "Duration"], list[Union[dict, "Duration"]]]] = empty_list() precipitating_agent: Optional[Union[dict[Union[str, ChemicalEntityId], Union[dict, "ChemicalEntity"]], list[Union[dict, "ChemicalEntity"]]]] = empty_dict() @@ -3554,7 +4291,7 @@ class DepositionPrecipitation(PreparationMethod): has_drying_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() has_drying_duration: Optional[Union[dict, "Duration"]] = None has_drying_atmosphere: Optional[Union[Union[dict, "Atmosphere"], list[Union[dict, "Atmosphere"]]]] = empty_list() - has_calcination_temperature_range: Optional[Union[dict, QuantitativeRange]] = None + has_calcination_temperature_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() has_calcination_dwelling_time: Optional[Union[dict, "Duration"]] = None number_of_cycles: Optional[Union[int, list[int]]] = empty_list() has_calcination_atmosphere: Optional[Union[Union[dict, "CalcinationGaseousEnvironment"], list[Union[dict, "CalcinationGaseousEnvironment"]]]] = empty_list() @@ -3562,6 +4299,11 @@ class DepositionPrecipitation(PreparationMethod): has_calcination_gas_flow_rate: Optional[Union[Union[dict, "VolumeFlowRate"], list[Union[dict, "VolumeFlowRate"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, DepositionPrecipitationId): + self.id = DepositionPrecipitationId(self.id) + if not isinstance(self.deposition_temperature, list): self.deposition_temperature = [self.deposition_temperature] if self.deposition_temperature is not None else [] self.deposition_temperature = [v if isinstance(v, Temperature) else Temperature(**as_dict(v)) for v in self.deposition_temperature] @@ -3625,8 +4367,9 @@ def __post_init__(self, *_: str, **kwargs: Any): self.has_drying_atmosphere = [self.has_drying_atmosphere] if self.has_drying_atmosphere is not None else [] self.has_drying_atmosphere = [v if isinstance(v, Atmosphere) else Atmosphere(**as_dict(v)) for v in self.has_drying_atmosphere] - if self.has_calcination_temperature_range is not None and not isinstance(self.has_calcination_temperature_range, QuantitativeRange): - self.has_calcination_temperature_range = QuantitativeRange(**as_dict(self.has_calcination_temperature_range)) + if not isinstance(self.has_calcination_temperature_range, list): + self.has_calcination_temperature_range = [self.has_calcination_temperature_range] if self.has_calcination_temperature_range is not None else [] + self.has_calcination_temperature_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.has_calcination_temperature_range] if self.has_calcination_dwelling_time is not None and not isinstance(self.has_calcination_dwelling_time, Duration): self.has_calcination_dwelling_time = Duration(**as_dict(self.has_calcination_dwelling_time)) @@ -3663,6 +4406,7 @@ class MicrowaveAssisted(PreparationMethod): class_name: ClassVar[str] = "MicrowaveAssisted" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.MicrowaveAssisted + id: Union[str, MicrowaveAssistedId] = None power: Optional[Union[float, list[float]]] = empty_list() microwave_frequency: Optional[Union[float, list[float]]] = empty_list() synthesis_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() @@ -3671,6 +4415,11 @@ class MicrowaveAssisted(PreparationMethod): has_atmosphere: Optional[Union[Union[dict, "Atmosphere"], list[Union[dict, "Atmosphere"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, MicrowaveAssistedId): + self.id = MicrowaveAssistedId(self.id) + if not isinstance(self.power, list): self.power = [self.power] if self.power is not None else [] self.power = [v if isinstance(v, float) else float(v) for v in self.power] @@ -3711,6 +4460,7 @@ class SonochemicalSynthesis(PreparationMethod): class_name: ClassVar[str] = "SonochemicalSynthesis" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.SonochemicalSynthesis + id: Union[str, SonochemicalSynthesisId] = None sonication_power: Optional[Union[float, list[float]]] = empty_list() sonication_duration: Optional[Union[float, list[float]]] = empty_list() has_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() @@ -3718,7 +4468,7 @@ class SonochemicalSynthesis(PreparationMethod): has_drying_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() has_drying_duration: Optional[Union[dict, "Duration"]] = None has_drying_atmosphere: Optional[Union[Union[dict, "Atmosphere"], list[Union[dict, "Atmosphere"]]]] = empty_list() - has_calcination_temperature_range: Optional[Union[dict, QuantitativeRange]] = None + has_calcination_temperature_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() has_calcination_dwelling_time: Optional[Union[dict, "Duration"]] = None number_of_cycles: Optional[Union[int, list[int]]] = empty_list() has_calcination_atmosphere: Optional[Union[Union[dict, "CalcinationGaseousEnvironment"], list[Union[dict, "CalcinationGaseousEnvironment"]]]] = empty_list() @@ -3726,6 +4476,11 @@ class SonochemicalSynthesis(PreparationMethod): has_calcination_gas_flow_rate: Optional[Union[Union[dict, "VolumeFlowRate"], list[Union[dict, "VolumeFlowRate"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, SonochemicalSynthesisId): + self.id = SonochemicalSynthesisId(self.id) + if not isinstance(self.sonication_power, list): self.sonication_power = [self.sonication_power] if self.sonication_power is not None else [] self.sonication_power = [v if isinstance(v, float) else float(v) for v in self.sonication_power] @@ -3753,8 +4508,9 @@ def __post_init__(self, *_: str, **kwargs: Any): self.has_drying_atmosphere = [self.has_drying_atmosphere] if self.has_drying_atmosphere is not None else [] self.has_drying_atmosphere = [v if isinstance(v, Atmosphere) else Atmosphere(**as_dict(v)) for v in self.has_drying_atmosphere] - if self.has_calcination_temperature_range is not None and not isinstance(self.has_calcination_temperature_range, QuantitativeRange): - self.has_calcination_temperature_range = QuantitativeRange(**as_dict(self.has_calcination_temperature_range)) + if not isinstance(self.has_calcination_temperature_range, list): + self.has_calcination_temperature_range = [self.has_calcination_temperature_range] if self.has_calcination_temperature_range is not None else [] + self.has_calcination_temperature_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.has_calcination_temperature_range] if self.has_calcination_dwelling_time is not None and not isinstance(self.has_calcination_dwelling_time, Duration): self.has_calcination_dwelling_time = Duration(**as_dict(self.has_calcination_dwelling_time)) @@ -3791,6 +4547,7 @@ class FlameSprayPyrolysis(PreparationMethod): class_name: ClassVar[str] = "FlameSprayPyrolysis" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.FlameSprayPyrolysis + id: Union[str, FlameSprayPyrolysisId] = None flame_type: Optional[Union[str, list[str]]] = empty_list() has_flow_rate: Optional[Union[Union[dict, "VolumeFlowRate"], list[Union[dict, "VolumeFlowRate"]]]] = empty_list() inlet_system: Optional[Union[str, list[str]]] = empty_list() @@ -3802,6 +4559,11 @@ class FlameSprayPyrolysis(PreparationMethod): filter_type: Optional[Union[str, list[str]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, FlameSprayPyrolysisId): + self.id = FlameSprayPyrolysisId(self.id) + if not isinstance(self.flame_type, list): self.flame_type = [self.flame_type] if self.flame_type is not None else [] self.flame_type = [v if isinstance(v, str) else str(v) for v in self.flame_type] @@ -3852,6 +4614,7 @@ class MechanochemicalSynthesis(PreparationMethod): class_name: ClassVar[str] = "MechanochemicalSynthesis" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.MechanochemicalSynthesis + id: Union[str, MechanochemicalSynthesisId] = None vessel_volume: Optional[Union[float, list[float]]] = empty_list() size_and_material: Optional[Union[str, list[str]]] = empty_list() milling_speed: Optional[Union[float, list[float]]] = empty_list() @@ -3865,6 +4628,11 @@ class MechanochemicalSynthesis(PreparationMethod): has_atmosphere: Optional[Union[Union[dict, "Atmosphere"], list[Union[dict, "Atmosphere"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, MechanochemicalSynthesisId): + self.id = MechanochemicalSynthesisId(self.id) + if not isinstance(self.vessel_volume, list): self.vessel_volume = [self.vessel_volume] if self.vessel_volume is not None else [] self.vessel_volume = [v if isinstance(v, float) else float(v) for v in self.vessel_volume] @@ -3925,6 +4693,7 @@ class Sublimation(PreparationMethod): class_name: ClassVar[str] = "Sublimation" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Sublimation + id: Union[str, SublimationId] = None synthesis_pressure: Optional[Union[Union[dict, "Pressure"], list[Union[dict, "Pressure"]]]] = empty_list() synthesis_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() synthesis_duration: Optional[Union[Union[dict, "Duration"], list[Union[dict, "Duration"]]]] = empty_list() @@ -3932,6 +4701,11 @@ class Sublimation(PreparationMethod): has_atmosphere: Optional[Union[Union[dict, "Atmosphere"], list[Union[dict, "Atmosphere"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, SublimationId): + self.id = SublimationId(self.id) + if not isinstance(self.synthesis_pressure, list): self.synthesis_pressure = [self.synthesis_pressure] if self.synthesis_pressure is not None else [] self.synthesis_pressure = [v if isinstance(v, Pressure) else Pressure(**as_dict(v)) for v in self.synthesis_pressure] @@ -3968,6 +4742,7 @@ class MolecularSynthesis(PreparationMethod): class_name: ClassVar[str] = "MolecularSynthesis" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.MolecularSynthesis + id: Union[str, MolecularSynthesisId] = None reaction_vessel: Optional[Union[str, list[str]]] = empty_list() mixing_device: Optional[Union[str, list[str]]] = empty_list() has_stirring_duration: Optional[Union[dict, "Duration"]] = None @@ -3988,6 +4763,11 @@ class MolecularSynthesis(PreparationMethod): has_drying_atmosphere: Optional[Union[Union[dict, "Atmosphere"], list[Union[dict, "Atmosphere"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, MolecularSynthesisId): + self.id = MolecularSynthesisId(self.id) + if not isinstance(self.reaction_vessel, list): self.reaction_vessel = [self.reaction_vessel] if self.reaction_vessel is not None else [] self.reaction_vessel = [v if isinstance(v, str) else str(v) for v in self.reaction_vessel] @@ -4074,7 +4854,8 @@ class ExsolutionSynthesis(PreparationMethod): class_name: ClassVar[str] = "ExsolutionSynthesis" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.ExsolutionSynthesis - has_calcination_temperature_range: Optional[Union[dict, QuantitativeRange]] = None + id: Union[str, ExsolutionSynthesisId] = None + has_calcination_temperature_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() has_calcination_dwelling_time: Optional[Union[dict, "Duration"]] = None number_of_cycles: Optional[Union[int, list[int]]] = empty_list() has_calcination_atmosphere: Optional[Union[Union[dict, "CalcinationGaseousEnvironment"], list[Union[dict, "CalcinationGaseousEnvironment"]]]] = empty_list() @@ -4082,8 +4863,14 @@ class ExsolutionSynthesis(PreparationMethod): has_calcination_gas_flow_rate: Optional[Union[Union[dict, "VolumeFlowRate"], list[Union[dict, "VolumeFlowRate"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): - if self.has_calcination_temperature_range is not None and not isinstance(self.has_calcination_temperature_range, QuantitativeRange): - self.has_calcination_temperature_range = QuantitativeRange(**as_dict(self.has_calcination_temperature_range)) + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ExsolutionSynthesisId): + self.id = ExsolutionSynthesisId(self.id) + + if not isinstance(self.has_calcination_temperature_range, list): + self.has_calcination_temperature_range = [self.has_calcination_temperature_range] if self.has_calcination_temperature_range is not None else [] + self.has_calcination_temperature_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.has_calcination_temperature_range] if self.has_calcination_dwelling_time is not None and not isinstance(self.has_calcination_dwelling_time, Duration): self.has_calcination_dwelling_time = Duration(**as_dict(self.has_calcination_dwelling_time)) @@ -4107,7 +4894,8 @@ def __post_init__(self, *_: str, **kwargs: Any): super().__post_init__(**kwargs) -class CharacterizationTechnique(Plan): +@dataclass(repr=False) +class CharacterizationTechnique(CatalysisPlan): """ An abstract Plan describing the analytical protocol used to characterize a catalyst. Concrete subclasses specify technique-specific parameters. @@ -4120,6 +4908,7 @@ class CharacterizationTechnique(Plan): class_name: ClassVar[str] = "CharacterizationTechnique" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.CharacterizationTechnique + id: Union[str, CharacterizationTechniqueId] = None @dataclass(repr=False) class PowderXRD(CharacterizationTechnique): @@ -4133,7 +4922,8 @@ class PowderXRD(CharacterizationTechnique): class_name: ClassVar[str] = "PowderXRD" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.PowderXRD - has_two_theta_range: Optional[Union[dict, QuantitativeRange]] = None + id: Union[str, PowderXRDId] = None + has_two_theta_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() step_size: Optional[Union[float, list[float]]] = empty_list() has_operation_mode: Optional[Union[Union[dict, "OperationMode"], list[Union[dict, "OperationMode"]]]] = empty_list() has_atmosphere: Optional[Union[Union[dict, "Atmosphere"], list[Union[dict, "Atmosphere"]]]] = empty_list() @@ -4144,8 +4934,14 @@ class PowderXRD(CharacterizationTechnique): monochromator: Optional[Union[str, list[str]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): - if self.has_two_theta_range is not None and not isinstance(self.has_two_theta_range, QuantitativeRange): - self.has_two_theta_range = QuantitativeRange(**as_dict(self.has_two_theta_range)) + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, PowderXRDId): + self.id = PowderXRDId(self.id) + + if not isinstance(self.has_two_theta_range, list): + self.has_two_theta_range = [self.has_two_theta_range] if self.has_two_theta_range is not None else [] + self.has_two_theta_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.has_two_theta_range] if not isinstance(self.step_size, list): self.step_size = [self.step_size] if self.step_size is not None else [] @@ -4193,11 +4989,17 @@ class SingleCrystalXRD(CharacterizationTechnique): class_name: ClassVar[str] = "SingleCrystalXRD" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.SingleCrystalXRD + id: Union[str, SingleCrystalXRDId] = None has_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() xray_source: Optional[Union[str, list[str]]] = empty_list() monochromator: Optional[Union[str, list[str]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, SingleCrystalXRDId): + self.id = SingleCrystalXRDId(self.id) + if not isinstance(self.has_temperature, list): self.has_temperature = [self.has_temperature] if self.has_temperature is not None else [] self.has_temperature = [v if isinstance(v, Temperature) else Temperature(**as_dict(v)) for v in self.has_temperature] @@ -4225,6 +5027,7 @@ class XRayAbsorptionSpectroscopy(CharacterizationTechnique): class_name: ClassVar[str] = "XRayAbsorptionSpectroscopy" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.XRayAbsorptionSpectroscopy + id: Union[str, XRayAbsorptionSpectroscopyId] = None has_operation_mode: Optional[Union[Union[dict, "OperationMode"], list[Union[dict, "OperationMode"]]]] = empty_list() element_analyzed: Optional[Union[str, list[str]]] = empty_list() absorption_edge: Optional[Union[str, list[str]]] = empty_list() @@ -4235,9 +5038,14 @@ class XRayAbsorptionSpectroscopy(CharacterizationTechnique): number_of_cycles: Optional[Union[int, list[int]]] = empty_list() xray_source: Optional[Union[str, list[str]]] = empty_list() monochromator: Optional[Union[str, list[str]]] = empty_list() - has_energy_range: Optional[Union[dict, QuantitativeRange]] = None + has_energy_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, XRayAbsorptionSpectroscopyId): + self.id = XRayAbsorptionSpectroscopyId(self.id) + if not isinstance(self.has_operation_mode, list): self.has_operation_mode = [self.has_operation_mode] if self.has_operation_mode is not None else [] self.has_operation_mode = [v if isinstance(v, OperationMode) else OperationMode(**as_dict(v)) for v in self.has_operation_mode] @@ -4278,8 +5086,9 @@ def __post_init__(self, *_: str, **kwargs: Any): self.monochromator = [self.monochromator] if self.monochromator is not None else [] self.monochromator = [v if isinstance(v, str) else str(v) for v in self.monochromator] - if self.has_energy_range is not None and not isinstance(self.has_energy_range, QuantitativeRange): - self.has_energy_range = QuantitativeRange(**as_dict(self.has_energy_range)) + if not isinstance(self.has_energy_range, list): + self.has_energy_range = [self.has_energy_range] if self.has_energy_range is not None else [] + self.has_energy_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.has_energy_range] super().__post_init__(**kwargs) @@ -4296,6 +5105,7 @@ class XPS(CharacterizationTechnique): class_name: ClassVar[str] = "XPS" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.XPS + id: Union[str, XPSId] = None total_acquisition_time: Optional[Union[Union[dict, "Duration"], list[Union[dict, "Duration"]]]] = empty_list() number_of_scans: Optional[Union[int, list[int]]] = empty_list() step_size: Optional[Union[float, list[float]]] = empty_list() @@ -4306,9 +5116,14 @@ class XPS(CharacterizationTechnique): has_atmosphere: Optional[Union[Union[dict, "Atmosphere"], list[Union[dict, "Atmosphere"]]]] = empty_list() xray_source: Optional[Union[str, list[str]]] = empty_list() monochromator: Optional[Union[str, list[str]]] = empty_list() - has_energy_range: Optional[Union[dict, QuantitativeRange]] = None + has_energy_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, XPSId): + self.id = XPSId(self.id) + if not isinstance(self.total_acquisition_time, list): self.total_acquisition_time = [self.total_acquisition_time] if self.total_acquisition_time is not None else [] self.total_acquisition_time = [v if isinstance(v, Duration) else Duration(**as_dict(v)) for v in self.total_acquisition_time] @@ -4349,8 +5164,9 @@ def __post_init__(self, *_: str, **kwargs: Any): self.monochromator = [self.monochromator] if self.monochromator is not None else [] self.monochromator = [v if isinstance(v, str) else str(v) for v in self.monochromator] - if self.has_energy_range is not None and not isinstance(self.has_energy_range, QuantitativeRange): - self.has_energy_range = QuantitativeRange(**as_dict(self.has_energy_range)) + if not isinstance(self.has_energy_range, list): + self.has_energy_range = [self.has_energy_range] if self.has_energy_range is not None else [] + self.has_energy_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.has_energy_range] super().__post_init__(**kwargs) @@ -4367,12 +5183,18 @@ class EDX(CharacterizationTechnique): class_name: ClassVar[str] = "EDX" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.EDX + id: Union[str, EDXId] = None primary_energy: Optional[Union[Union[dict, "EnergyQuantity"], list[Union[dict, "EnergyQuantity"]]]] = empty_list() counting_time: Optional[Union[Union[dict, "Duration"], list[Union[dict, "Duration"]]]] = empty_list() resolution: Optional[Union[float, list[float]]] = empty_list() calibration_method: Optional[Union[str, list[str]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, EDXId): + self.id = EDXId(self.id) + if not isinstance(self.primary_energy, list): self.primary_energy = [self.primary_energy] if self.primary_energy is not None else [] self.primary_energy = [v if isinstance(v, EnergyQuantity) else EnergyQuantity(**as_dict(v)) for v in self.primary_energy] @@ -4404,8 +5226,9 @@ class InfraredSpectroscopy(CharacterizationTechnique): class_name: ClassVar[str] = "InfraredSpectroscopy" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.InfraredSpectroscopy + id: Union[str, InfraredSpectroscopyId] = None has_operation_mode: Optional[Union[Union[dict, "OperationMode"], list[Union[dict, "OperationMode"]]]] = empty_list() - has_wavenumber_range: Optional[Union[dict, QuantitativeRange]] = None + has_wavenumber_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() step_size: Optional[Union[float, list[float]]] = empty_list() has_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() background_correction: Optional[Union[str, list[str]]] = empty_list() @@ -4413,12 +5236,18 @@ class InfraredSpectroscopy(CharacterizationTechnique): has_atmosphere: Optional[Union[Union[dict, "Atmosphere"], list[Union[dict, "Atmosphere"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, InfraredSpectroscopyId): + self.id = InfraredSpectroscopyId(self.id) + if not isinstance(self.has_operation_mode, list): self.has_operation_mode = [self.has_operation_mode] if self.has_operation_mode is not None else [] self.has_operation_mode = [v if isinstance(v, OperationMode) else OperationMode(**as_dict(v)) for v in self.has_operation_mode] - if self.has_wavenumber_range is not None and not isinstance(self.has_wavenumber_range, QuantitativeRange): - self.has_wavenumber_range = QuantitativeRange(**as_dict(self.has_wavenumber_range)) + if not isinstance(self.has_wavenumber_range, list): + self.has_wavenumber_range = [self.has_wavenumber_range] if self.has_wavenumber_range is not None else [] + self.has_wavenumber_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.has_wavenumber_range] if not isinstance(self.step_size, list): self.step_size = [self.step_size] if self.step_size is not None else [] @@ -4456,10 +5285,11 @@ class DRIFTS(CharacterizationTechnique): class_name: ClassVar[str] = "DRIFTS" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.DRIFTS + id: Union[str, DRIFTSId] = None adsorption_gas: Optional[Union[dict[Union[str, ChemicalEntityId], Union[dict, "ChemicalEntity"]], list[Union[dict, "ChemicalEntity"]]]] = empty_dict() has_atmosphere: Optional[Union[Union[dict, "Atmosphere"], list[Union[dict, "Atmosphere"]]]] = empty_list() has_flow_rate: Optional[Union[Union[dict, "VolumeFlowRate"], list[Union[dict, "VolumeFlowRate"]]]] = empty_list() - has_wavenumber_range: Optional[Union[dict, QuantitativeRange]] = None + has_wavenumber_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() diluting_reference: Optional[Union[str, list[str]]] = empty_list() ratio_reference_sample: Optional[Union[float, list[float]]] = empty_list() step_size: Optional[Union[float, list[float]]] = empty_list() @@ -4469,6 +5299,11 @@ class DRIFTS(CharacterizationTechnique): number_of_scans: Optional[Union[int, list[int]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, DRIFTSId): + self.id = DRIFTSId(self.id) + self._normalize_inlined_as_list(slot_name="adsorption_gas", slot_type=ChemicalEntity, key_name="id", keyed=True) if not isinstance(self.has_atmosphere, list): @@ -4479,8 +5314,9 @@ def __post_init__(self, *_: str, **kwargs: Any): self.has_flow_rate = [self.has_flow_rate] if self.has_flow_rate is not None else [] self.has_flow_rate = [v if isinstance(v, VolumeFlowRate) else VolumeFlowRate(**as_dict(v)) for v in self.has_flow_rate] - if self.has_wavenumber_range is not None and not isinstance(self.has_wavenumber_range, QuantitativeRange): - self.has_wavenumber_range = QuantitativeRange(**as_dict(self.has_wavenumber_range)) + if not isinstance(self.has_wavenumber_range, list): + self.has_wavenumber_range = [self.has_wavenumber_range] if self.has_wavenumber_range is not None else [] + self.has_wavenumber_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.has_wavenumber_range] if not isinstance(self.diluting_reference, list): self.diluting_reference = [self.diluting_reference] if self.diluting_reference is not None else [] @@ -4525,6 +5361,7 @@ class RamanSpectroscopy(CharacterizationTechnique): class_name: ClassVar[str] = "RamanSpectroscopy" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.RamanSpectroscopy + id: Union[str, RamanSpectroscopyId] = None excitation_laser_wavelength: Optional[Union[Union[dict, "LengthQuantity"], list[Union[dict, "LengthQuantity"]]]] = empty_list() excitation_laser_power: Optional[Union[Union[dict, "PowerQuantity"], list[Union[dict, "PowerQuantity"]]]] = empty_list() magnification_setting: Optional[Union[float, list[float]]] = empty_list() @@ -4535,6 +5372,11 @@ class RamanSpectroscopy(CharacterizationTechnique): filter_or_grating: Optional[Union[str, list[str]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, RamanSpectroscopyId): + self.id = RamanSpectroscopyId(self.id) + if not isinstance(self.excitation_laser_wavelength, list): self.excitation_laser_wavelength = [self.excitation_laser_wavelength] if self.excitation_laser_wavelength is not None else [] self.excitation_laser_wavelength = [v if isinstance(v, LengthQuantity) else LengthQuantity(**as_dict(v)) for v in self.excitation_laser_wavelength] @@ -4584,6 +5426,7 @@ class NMRSpectroscopy(CharacterizationTechnique): class_name: ClassVar[str] = "NMRSpectroscopy" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.NMRSpectroscopy + id: Union[str, NMRSpectroscopyId] = None nucleus: Optional[Union[str, list[str]]] = empty_list() solvent: Optional[Union[dict[Union[str, ChemicalEntityId], Union[dict, "ChemicalEntity"]], list[Union[dict, "ChemicalEntity"]]]] = empty_dict() irradiation_frequency: Optional[Union[float, list[float]]] = empty_list() @@ -4594,6 +5437,11 @@ class NMRSpectroscopy(CharacterizationTechnique): has_atmosphere: Optional[Union[Union[dict, "Atmosphere"], list[Union[dict, "Atmosphere"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, NMRSpectroscopyId): + self.id = NMRSpectroscopyId(self.id) + if not isinstance(self.nucleus, list): self.nucleus = [self.nucleus] if self.nucleus is not None else [] self.nucleus = [v if isinstance(v, str) else str(v) for v in self.nucleus] @@ -4639,12 +5487,18 @@ class TransmissionElectronMicroscopy(CharacterizationTechnique): class_name: ClassVar[str] = "TransmissionElectronMicroscopy" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.TransmissionElectronMicroscopy + id: Union[str, TransmissionElectronMicroscopyId] = None has_operation_mode: Optional[Union[Union[dict, "OperationMode"], list[Union[dict, "OperationMode"]]]] = empty_list() gun_type: Optional[Union[str, list[str]]] = empty_list() acceleration_voltage: Optional[Union[Union[dict, "ElectricPotential"], list[Union[dict, "ElectricPotential"]]]] = empty_list() magnification_setting: Optional[Union[float, list[float]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, TransmissionElectronMicroscopyId): + self.id = TransmissionElectronMicroscopyId(self.id) + if not isinstance(self.has_operation_mode, list): self.has_operation_mode = [self.has_operation_mode] if self.has_operation_mode is not None else [] self.has_operation_mode = [v if isinstance(v, OperationMode) else OperationMode(**as_dict(v)) for v in self.has_operation_mode] @@ -4676,6 +5530,7 @@ class ScanningElectronMicroscopy(CharacterizationTechnique): class_name: ClassVar[str] = "ScanningElectronMicroscopy" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.ScanningElectronMicroscopy + id: Union[str, ScanningElectronMicroscopyId] = None image_resolution: Optional[Union[float, list[float]]] = empty_list() field_emitter: Optional[Union[str, list[str]]] = empty_list() gun_type: Optional[Union[str, list[str]]] = empty_list() @@ -4683,6 +5538,11 @@ class ScanningElectronMicroscopy(CharacterizationTechnique): magnification_setting: Optional[Union[float, list[float]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ScanningElectronMicroscopyId): + self.id = ScanningElectronMicroscopyId(self.id) + if not isinstance(self.image_resolution, list): self.image_resolution = [self.image_resolution] if self.image_resolution is not None else [] self.image_resolution = [v if isinstance(v, float) else float(v) for v in self.image_resolution] @@ -4718,16 +5578,22 @@ class Thermogravimetry(CharacterizationTechnique): class_name: ClassVar[str] = "Thermogravimetry" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Thermogravimetry + id: Union[str, ThermogravimetryId] = None has_operation_mode: Optional[Union[Union[dict, "OperationMode"], list[Union[dict, "OperationMode"]]]] = empty_list() has_atmosphere: Optional[Union[Union[dict, "Atmosphere"], list[Union[dict, "Atmosphere"]]]] = empty_list() initial_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() final_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() has_sample_mass: Optional[Union[Union[dict, "Mass"], list[Union[dict, "Mass"]]]] = empty_list() - has_temperature_range: Optional[Union[dict, QuantitativeRange]] = None + has_temperature_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() has_heating_rate: Optional[Union[Union[dict, "HeatingRate"], list[Union[dict, "HeatingRate"]]]] = empty_list() has_heating_procedure: Optional[Union[Union[dict, "HeatingProcedure"], list[Union[dict, "HeatingProcedure"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ThermogravimetryId): + self.id = ThermogravimetryId(self.id) + if not isinstance(self.has_operation_mode, list): self.has_operation_mode = [self.has_operation_mode] if self.has_operation_mode is not None else [] self.has_operation_mode = [v if isinstance(v, OperationMode) else OperationMode(**as_dict(v)) for v in self.has_operation_mode] @@ -4748,8 +5614,9 @@ def __post_init__(self, *_: str, **kwargs: Any): self.has_sample_mass = [self.has_sample_mass] if self.has_sample_mass is not None else [] self.has_sample_mass = [v if isinstance(v, Mass) else Mass(**as_dict(v)) for v in self.has_sample_mass] - if self.has_temperature_range is not None and not isinstance(self.has_temperature_range, QuantitativeRange): - self.has_temperature_range = QuantitativeRange(**as_dict(self.has_temperature_range)) + if not isinstance(self.has_temperature_range, list): + self.has_temperature_range = [self.has_temperature_range] if self.has_temperature_range is not None else [] + self.has_temperature_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.has_temperature_range] if not isinstance(self.has_heating_rate, list): self.has_heating_rate = [self.has_heating_rate] if self.has_heating_rate is not None else [] @@ -4774,18 +5641,25 @@ class TPR(CharacterizationTechnique): class_name: ClassVar[str] = "TPR" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.TPR + id: Union[str, TPRId] = None reducing_gas_composition: Optional[Union[str, list[str]]] = empty_list() - has_temperature_range: Optional[Union[dict, QuantitativeRange]] = None + has_temperature_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() has_heating_rate: Optional[Union[Union[dict, "HeatingRate"], list[Union[dict, "HeatingRate"]]]] = empty_list() has_heating_procedure: Optional[Union[Union[dict, "HeatingProcedure"], list[Union[dict, "HeatingProcedure"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, TPRId): + self.id = TPRId(self.id) + if not isinstance(self.reducing_gas_composition, list): self.reducing_gas_composition = [self.reducing_gas_composition] if self.reducing_gas_composition is not None else [] self.reducing_gas_composition = [v if isinstance(v, str) else str(v) for v in self.reducing_gas_composition] - if self.has_temperature_range is not None and not isinstance(self.has_temperature_range, QuantitativeRange): - self.has_temperature_range = QuantitativeRange(**as_dict(self.has_temperature_range)) + if not isinstance(self.has_temperature_range, list): + self.has_temperature_range = [self.has_temperature_range] if self.has_temperature_range is not None else [] + self.has_temperature_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.has_temperature_range] if not isinstance(self.has_heating_rate, list): self.has_heating_rate = [self.has_heating_rate] if self.has_heating_rate is not None else [] @@ -4810,18 +5684,25 @@ class TPO(CharacterizationTechnique): class_name: ClassVar[str] = "TPO" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.TPO + id: Union[str, TPOId] = None oxidizing_gas_composition: Optional[Union[str, list[str]]] = empty_list() - has_temperature_range: Optional[Union[dict, QuantitativeRange]] = None + has_temperature_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() has_heating_rate: Optional[Union[Union[dict, "HeatingRate"], list[Union[dict, "HeatingRate"]]]] = empty_list() has_heating_procedure: Optional[Union[Union[dict, "HeatingProcedure"], list[Union[dict, "HeatingProcedure"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, TPOId): + self.id = TPOId(self.id) + if not isinstance(self.oxidizing_gas_composition, list): self.oxidizing_gas_composition = [self.oxidizing_gas_composition] if self.oxidizing_gas_composition is not None else [] self.oxidizing_gas_composition = [v if isinstance(v, str) else str(v) for v in self.oxidizing_gas_composition] - if self.has_temperature_range is not None and not isinstance(self.has_temperature_range, QuantitativeRange): - self.has_temperature_range = QuantitativeRange(**as_dict(self.has_temperature_range)) + if not isinstance(self.has_temperature_range, list): + self.has_temperature_range = [self.has_temperature_range] if self.has_temperature_range is not None else [] + self.has_temperature_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.has_temperature_range] if not isinstance(self.has_heating_rate, list): self.has_heating_rate = [self.has_heating_rate] if self.has_heating_rate is not None else [] @@ -4846,6 +5727,7 @@ class BET(CharacterizationTechnique): class_name: ClassVar[str] = "BET" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.BET + id: Union[str, BETId] = None adsorbate_gas: Optional[Union[str, list[str]]] = empty_list() degassing_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() measurement_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() @@ -4853,6 +5735,11 @@ class BET(CharacterizationTechnique): has_sample_mass: Optional[Union[Union[dict, "Mass"], list[Union[dict, "Mass"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, BETId): + self.id = BETId(self.id) + if not isinstance(self.adsorbate_gas, list): self.adsorbate_gas = [self.adsorbate_gas] if self.adsorbate_gas is not None else [] self.adsorbate_gas = [v if isinstance(v, str) else str(v) for v in self.adsorbate_gas] @@ -4888,12 +5775,18 @@ class ICPAES(CharacterizationTechnique): class_name: ClassVar[str] = "ICPAES" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.ICPAES + id: Union[str, ICPAESId] = None element_analyzed: Optional[Union[str, list[str]]] = empty_list() calibration_method: Optional[Union[str, list[str]]] = empty_list() detection_limit: Optional[Union[float, list[float]]] = empty_list() matrix_effect_correction: Optional[Union[str, list[str]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ICPAESId): + self.id = ICPAESId(self.id) + if not isinstance(self.element_analyzed, list): self.element_analyzed = [self.element_analyzed] if self.element_analyzed is not None else [] self.element_analyzed = [v if isinstance(v, str) else str(v) for v in self.element_analyzed] @@ -4925,11 +5818,17 @@ class ElementalAnalysis(CharacterizationTechnique): class_name: ClassVar[str] = "ElementalAnalysis" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.ElementalAnalysis + id: Union[str, ElementalAnalysisId] = None elements_analyzed: Optional[Union[str, list[str]]] = empty_list() combustion_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() carrier_gas: Optional[Union[dict[Union[str, ChemicalEntityId], Union[dict, "ChemicalEntity"]], list[Union[dict, "ChemicalEntity"]]]] = empty_dict() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ElementalAnalysisId): + self.id = ElementalAnalysisId(self.id) + if not isinstance(self.elements_analyzed, list): self.elements_analyzed = [self.elements_analyzed] if self.elements_analyzed is not None else [] self.elements_analyzed = [v if isinstance(v, str) else str(v) for v in self.elements_analyzed] @@ -4955,20 +5854,21 @@ class UVVisSpectroscopy(CharacterizationTechnique): class_name: ClassVar[str] = "UVVisSpectroscopy" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.UVVisSpectroscopy - minimum_wavelength: Optional[Union[float, list[float]]] = empty_list() - maximum_wavelength: Optional[Union[float, list[float]]] = empty_list() + id: Union[str, UVVisSpectroscopyId] = None + wavelength_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() path_length: Optional[Union[float, list[float]]] = empty_list() solvent: Optional[Union[dict[Union[str, ChemicalEntityId], Union[dict, "ChemicalEntity"]], list[Union[dict, "ChemicalEntity"]]]] = empty_dict() has_concentration: Optional[Union[Union[dict, "Concentration"], list[Union[dict, "Concentration"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): - if not isinstance(self.minimum_wavelength, list): - self.minimum_wavelength = [self.minimum_wavelength] if self.minimum_wavelength is not None else [] - self.minimum_wavelength = [v if isinstance(v, float) else float(v) for v in self.minimum_wavelength] + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, UVVisSpectroscopyId): + self.id = UVVisSpectroscopyId(self.id) - if not isinstance(self.maximum_wavelength, list): - self.maximum_wavelength = [self.maximum_wavelength] if self.maximum_wavelength is not None else [] - self.maximum_wavelength = [v if isinstance(v, float) else float(v) for v in self.maximum_wavelength] + if not isinstance(self.wavelength_range, list): + self.wavelength_range = [self.wavelength_range] if self.wavelength_range is not None else [] + self.wavelength_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.wavelength_range] if not isinstance(self.path_length, list): self.path_length = [self.path_length] if self.path_length is not None else [] @@ -4995,6 +5895,7 @@ class PhotoluminescenceSpectroscopy(CharacterizationTechnique): class_name: ClassVar[str] = "PhotoluminescenceSpectroscopy" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.PhotoluminescenceSpectroscopy + id: Union[str, PhotoluminescenceSpectroscopyId] = None emission_range: Optional[Union[str, list[str]]] = empty_list() slit_width: Optional[Union[float, list[float]]] = empty_list() step_size: Optional[Union[float, list[float]]] = empty_list() @@ -5005,6 +5906,11 @@ class PhotoluminescenceSpectroscopy(CharacterizationTechnique): has_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, PhotoluminescenceSpectroscopyId): + self.id = PhotoluminescenceSpectroscopyId(self.id) + if not isinstance(self.emission_range, list): self.emission_range = [self.emission_range] if self.emission_range is not None else [] self.emission_range = [v if isinstance(v, str) else str(v) for v in self.emission_range] @@ -5051,6 +5957,7 @@ class PhotoluminescenceLifetime(CharacterizationTechnique): class_name: ClassVar[str] = "PhotoluminescenceLifetime" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.PhotoluminescenceLifetime + id: Union[str, PhotoluminescenceLifetimeId] = None lifetime_fitting_model: Optional[Union[str, list[str]]] = empty_list() number_of_shots: Optional[Union[int, list[int]]] = empty_list() excitation_wavelength: Optional[Union[Union[dict, "LengthQuantity"], list[Union[dict, "LengthQuantity"]]]] = empty_list() @@ -5059,6 +5966,11 @@ class PhotoluminescenceLifetime(CharacterizationTechnique): has_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, PhotoluminescenceLifetimeId): + self.id = PhotoluminescenceLifetimeId(self.id) + if not isinstance(self.lifetime_fitting_model, list): self.lifetime_fitting_model = [self.lifetime_fitting_model] if self.lifetime_fitting_model is not None else [] self.lifetime_fitting_model = [v if isinstance(v, str) else str(v) for v in self.lifetime_fitting_model] @@ -5098,9 +6010,9 @@ class CyclicVoltammetry(CharacterizationTechnique): class_name: ClassVar[str] = "CyclicVoltammetry" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.CyclicVoltammetry + id: Union[str, CyclicVoltammetryId] = None scan_rate: Optional[Union[float, list[float]]] = empty_list() - minimum_potential: Optional[Union[float, list[float]]] = empty_list() - maximum_potential: Optional[Union[float, list[float]]] = empty_list() + scan_potential_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() step_size_potential: Optional[Union[float, list[float]]] = empty_list() number_of_cycles: Optional[Union[int, list[int]]] = empty_list() reference_electrode: Optional[Union[str, list[str]]] = empty_list() @@ -5112,17 +6024,18 @@ class CyclicVoltammetry(CharacterizationTechnique): has_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, CyclicVoltammetryId): + self.id = CyclicVoltammetryId(self.id) + if not isinstance(self.scan_rate, list): self.scan_rate = [self.scan_rate] if self.scan_rate is not None else [] self.scan_rate = [v if isinstance(v, float) else float(v) for v in self.scan_rate] - if not isinstance(self.minimum_potential, list): - self.minimum_potential = [self.minimum_potential] if self.minimum_potential is not None else [] - self.minimum_potential = [v if isinstance(v, float) else float(v) for v in self.minimum_potential] - - if not isinstance(self.maximum_potential, list): - self.maximum_potential = [self.maximum_potential] if self.maximum_potential is not None else [] - self.maximum_potential = [v if isinstance(v, float) else float(v) for v in self.maximum_potential] + if not isinstance(self.scan_potential_range, list): + self.scan_potential_range = [self.scan_potential_range] if self.scan_potential_range is not None else [] + self.scan_potential_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.scan_potential_range] if not isinstance(self.step_size_potential, list): self.step_size_potential = [self.step_size_potential] if self.step_size_potential is not None else [] @@ -5175,6 +6088,7 @@ class ConductivityMeasurement(CharacterizationTechnique): class_name: ClassVar[str] = "ConductivityMeasurement" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.ConductivityMeasurement + id: Union[str, ConductivityMeasurementId] = None electrode_configuration: Optional[Union[str, list[str]]] = empty_list() ac_frequency: Optional[Union[float, list[float]]] = empty_list() ac_dc_mode: Optional[Union[str, list[str]]] = empty_list() @@ -5188,6 +6102,11 @@ class ConductivityMeasurement(CharacterizationTechnique): has_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ConductivityMeasurementId): + self.id = ConductivityMeasurementId(self.id) + if not isinstance(self.electrode_configuration, list): self.electrode_configuration = [self.electrode_configuration] if self.electrode_configuration is not None else [] self.electrode_configuration = [v if isinstance(v, str) else str(v) for v in self.electrode_configuration] @@ -5247,6 +6166,7 @@ class DynamicLightScattering(CharacterizationTechnique): class_name: ClassVar[str] = "DynamicLightScattering" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.DynamicLightScattering + id: Union[str, DynamicLightScatteringId] = None solvent: Optional[Union[dict[Union[str, ChemicalEntityId], Union[dict, "ChemicalEntity"]], list[Union[dict, "ChemicalEntity"]]]] = empty_dict() has_concentration: Optional[Union[Union[dict, "Concentration"], list[Union[dict, "Concentration"]]]] = empty_list() light_wavelength: Optional[Union[Union[dict, "LengthQuantity"], list[Union[dict, "LengthQuantity"]]]] = empty_list() @@ -5257,6 +6177,11 @@ class DynamicLightScattering(CharacterizationTechnique): measurement_duration: Optional[Union[Union[dict, "Duration"], list[Union[dict, "Duration"]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, DynamicLightScatteringId): + self.id = DynamicLightScatteringId(self.id) + self._normalize_inlined_as_list(slot_name="solvent", slot_type=ChemicalEntity, key_name="id", keyed=True) if not isinstance(self.has_concentration, list): @@ -5300,6 +6225,7 @@ class ElectroSprayIonizationMassSpectrometry(CharacterizationTechnique): class_name: ClassVar[str] = "ElectroSprayIonizationMassSpectrometry" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.ElectroSprayIonizationMassSpectrometry + id: Union[str, ElectroSprayIonizationMassSpectrometryId] = None has_operation_mode: Optional[Union[Union[dict, "OperationMode"], list[Union[dict, "OperationMode"]]]] = empty_list() spray_voltage: Optional[Union[Union[dict, "ElectricPotential"], list[Union[dict, "ElectricPotential"]]]] = empty_list() capillary_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() @@ -5307,9 +6233,14 @@ class ElectroSprayIonizationMassSpectrometry(CharacterizationTechnique): has_flow_rate: Optional[Union[Union[dict, "VolumeFlowRate"], list[Union[dict, "VolumeFlowRate"]]]] = empty_list() carrier_gas: Optional[Union[dict[Union[str, ChemicalEntityId], Union[dict, "ChemicalEntity"]], list[Union[dict, "ChemicalEntity"]]]] = empty_dict() has_concentration: Optional[Union[Union[dict, "Concentration"], list[Union[dict, "Concentration"]]]] = empty_list() - has_mz_range: Optional[Union[dict, QuantitativeRange]] = None + has_mz_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ElectroSprayIonizationMassSpectrometryId): + self.id = ElectroSprayIonizationMassSpectrometryId(self.id) + if not isinstance(self.has_operation_mode, list): self.has_operation_mode = [self.has_operation_mode] if self.has_operation_mode is not None else [] self.has_operation_mode = [v if isinstance(v, OperationMode) else OperationMode(**as_dict(v)) for v in self.has_operation_mode] @@ -5336,8 +6267,9 @@ def __post_init__(self, *_: str, **kwargs: Any): self.has_concentration = [self.has_concentration] if self.has_concentration is not None else [] self.has_concentration = [v if isinstance(v, Concentration) else Concentration(**as_dict(v)) for v in self.has_concentration] - if self.has_mz_range is not None and not isinstance(self.has_mz_range, QuantitativeRange): - self.has_mz_range = QuantitativeRange(**as_dict(self.has_mz_range)) + if not isinstance(self.has_mz_range, list): + self.has_mz_range = [self.has_mz_range] if self.has_mz_range is not None else [] + self.has_mz_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.has_mz_range] super().__post_init__(**kwargs) @@ -5354,11 +6286,11 @@ class GCMS(CharacterizationTechnique): class_name: ClassVar[str] = "GCMS" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.GCMS + id: Union[str, GCMSId] = None carrier_gas: Optional[Union[dict[Union[str, ChemicalEntityId], Union[dict, "ChemicalEntity"]], list[Union[dict, "ChemicalEntity"]]]] = empty_dict() carrier_gas_purity: Optional[Union[str, list[str]]] = empty_list() inlet_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() - minimum_oven_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() - maximum_oven_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() + oven_temperature_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() heating_ramp: Optional[Union[Union[dict, "HeatingRate"], list[Union[dict, "HeatingRate"]]]] = empty_list() has_heating_procedure: Optional[Union[Union[dict, "HeatingProcedure"], list[Union[dict, "HeatingProcedure"]]]] = empty_list() acquisition_mode: Optional[Union[str, list[str]]] = empty_list() @@ -5371,9 +6303,14 @@ class GCMS(CharacterizationTechnique): has_injection_volume: Optional[Union[Union[dict, "Volume"], list[Union[dict, "Volume"]]]] = empty_list() external_standard: Optional[Union[str, list[str]]] = empty_list() internal_standard: Optional[Union[str, list[str]]] = empty_list() - has_mz_range: Optional[Union[dict, QuantitativeRange]] = None + has_mz_range: Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, GCMSId): + self.id = GCMSId(self.id) + self._normalize_inlined_as_list(slot_name="carrier_gas", slot_type=ChemicalEntity, key_name="id", keyed=True) if not isinstance(self.carrier_gas_purity, list): @@ -5384,13 +6321,9 @@ def __post_init__(self, *_: str, **kwargs: Any): self.inlet_temperature = [self.inlet_temperature] if self.inlet_temperature is not None else [] self.inlet_temperature = [v if isinstance(v, Temperature) else Temperature(**as_dict(v)) for v in self.inlet_temperature] - if not isinstance(self.minimum_oven_temperature, list): - self.minimum_oven_temperature = [self.minimum_oven_temperature] if self.minimum_oven_temperature is not None else [] - self.minimum_oven_temperature = [v if isinstance(v, Temperature) else Temperature(**as_dict(v)) for v in self.minimum_oven_temperature] - - if not isinstance(self.maximum_oven_temperature, list): - self.maximum_oven_temperature = [self.maximum_oven_temperature] if self.maximum_oven_temperature is not None else [] - self.maximum_oven_temperature = [v if isinstance(v, Temperature) else Temperature(**as_dict(v)) for v in self.maximum_oven_temperature] + if not isinstance(self.oven_temperature_range, list): + self.oven_temperature_range = [self.oven_temperature_range] if self.oven_temperature_range is not None else [] + self.oven_temperature_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.oven_temperature_range] if not isinstance(self.heating_ramp, list): self.heating_ramp = [self.heating_ramp] if self.heating_ramp is not None else [] @@ -5438,8 +6371,9 @@ def __post_init__(self, *_: str, **kwargs: Any): self.internal_standard = [self.internal_standard] if self.internal_standard is not None else [] self.internal_standard = [v if isinstance(v, str) else str(v) for v in self.internal_standard] - if self.has_mz_range is not None and not isinstance(self.has_mz_range, QuantitativeRange): - self.has_mz_range = QuantitativeRange(**as_dict(self.has_mz_range)) + if not isinstance(self.has_mz_range, list): + self.has_mz_range = [self.has_mz_range] if self.has_mz_range is not None else [] + self.has_mz_range = [v if isinstance(v, QuantitativeRange) else QuantitativeRange(**as_dict(v)) for v in self.has_mz_range] super().__post_init__(**kwargs) @@ -5456,6 +6390,7 @@ class SizeExclusionChromatography(CharacterizationTechnique): class_name: ClassVar[str] = "SizeExclusionChromatography" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.SizeExclusionChromatography + id: Union[str, SizeExclusionChromatographyId] = None has_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() calibration_standard: Optional[Union[str, list[str]]] = empty_list() column_type: Optional[Union[str, list[str]]] = empty_list() @@ -5466,6 +6401,11 @@ class SizeExclusionChromatography(CharacterizationTechnique): internal_standard: Optional[Union[str, list[str]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, SizeExclusionChromatographyId): + self.id = SizeExclusionChromatographyId(self.id) + if not isinstance(self.has_temperature, list): self.has_temperature = [self.has_temperature] if self.has_temperature is not None else [] self.has_temperature = [v if isinstance(v, Temperature) else Temperature(**as_dict(v)) for v in self.has_temperature] @@ -5511,6 +6451,7 @@ class HighPerformanceLiquidChromatographyMassSpectrometry(CharacterizationTechni class_name: ClassVar[str] = "HighPerformanceLiquidChromatographyMassSpectrometry" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.HighPerformanceLiquidChromatographyMassSpectrometry + id: Union[str, HighPerformanceLiquidChromatographyMassSpectrometryId] = None gradient_program: Optional[Union[str, list[str]]] = empty_list() ionization_mode: Optional[Union[str, list[str]]] = empty_list() has_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() @@ -5522,6 +6463,11 @@ class HighPerformanceLiquidChromatographyMassSpectrometry(CharacterizationTechni internal_standard: Optional[Union[str, list[str]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, HighPerformanceLiquidChromatographyMassSpectrometryId): + self.id = HighPerformanceLiquidChromatographyMassSpectrometryId(self.id) + if not isinstance(self.gradient_program, list): self.gradient_program = [self.gradient_program] if self.gradient_program is not None else [] self.gradient_program = [v if isinstance(v, str) else str(v) for v in self.gradient_program] @@ -5559,15 +6505,18 @@ def __post_init__(self, *_: str, **kwargs: Any): super().__post_init__(**kwargs) -class ProductIdentificationMethod(Plan): +@dataclass(repr=False) +class ProductIdentificationMethod(CatalysisPlan): """ Abstract Plan representing the method used to identify and quantify reaction products. In practice, users should reference a concrete CharacterizationTechnique subclass from coremeta4cat_characterization_ap (e.g. GCMS, HPLC_MS, NMRSpectroscopy). This abstract class is retained for backward compatibility with the original - CoreMeta4Cat monolith. It is a subclass of Plan (prov:Plan / OBI:0000272) so that - it can participate in the realized_plan slot if needed. + CoreMeta4Cat monolith. It is a subclass of CatalysisPlan (which is itself a Plan, + prov:Plan / OBI:0000272) so that it can participate in the realized_plan slot, + and so it (and every other CoreMeta4Cat protocol/technique class) can carry a + persistent id. """ _inherited_slots: ClassVar[list[str]] = [] @@ -5576,36 +6525,23 @@ class ProductIdentificationMethod(Plan): class_name: ClassVar[str] = "ProductIdentificationMethod" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.ProductIdentificationMethod + id: Union[str, ProductIdentificationMethodId] = None -class LiquidPhaseAnalysis(ProductIdentificationMethod): - """ - Analysis of the liquid sample from a catalytic test. - """ - _inherited_slots: ClassVar[list[str]] = [] + def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ProductIdentificationMethodId): + self.id = ProductIdentificationMethodId(self.id) - class_class_uri: ClassVar[URIRef] = VOC4CAT["0007813"] - class_class_curie: ClassVar[str] = "VOC4CAT:0007813" - class_name: ClassVar[str] = "LiquidPhaseAnalysis" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.LiquidPhaseAnalysis + super().__post_init__(**kwargs) -class GasPhaseAnalysis(ProductIdentificationMethod): +@dataclass(repr=False) +class SimulationMethod(CatalysisPlan): """ - Analysis of the liquid sample from a catalytic test. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0007814"] - class_class_curie: ClassVar[str] = "VOC4CAT:0007814" - class_name: ClassVar[str] = "GasPhaseAnalysis" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.GasPhaseAnalysis - - -class SimulationMethod(Plan): - """ - Abstract Plan describing the computational method (protocol) used in a - Simulation. Concrete subclasses carry method-specific parameter slots. - Linked from Simulation via realized_plan. + Abstract Plan describing the computational method (protocol) used in a + Simulation. Concrete subclasses carry method-specific parameter slots. + Linked from Simulation via realized_plan. """ _inherited_slots: ClassVar[list[str]] = [] @@ -5614,6 +6550,7 @@ class SimulationMethod(Plan): class_name: ClassVar[str] = "SimulationMethod" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.SimulationMethod + id: Union[str, SimulationMethodId] = None @dataclass(repr=False) class DFT(SimulationMethod): @@ -5629,6 +6566,7 @@ class DFT(SimulationMethod): class_name: ClassVar[str] = "DFT" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.DFT + id: Union[str, DFTId] = None exchange_correlation_functional: Optional[Union[str, list[str]]] = empty_list() energy_cutoff: Optional[Union[float, list[float]]] = empty_list() convergence_criteria: Optional[Union[str, list[str]]] = empty_list() @@ -5637,6 +6575,11 @@ class DFT(SimulationMethod): total_energy_per_atom: Optional[Union[float, list[float]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, DFTId): + self.id = DFTId(self.id) + if not isinstance(self.exchange_correlation_functional, list): self.exchange_correlation_functional = [self.exchange_correlation_functional] if self.exchange_correlation_functional is not None else [] self.exchange_correlation_functional = [v if isinstance(v, str) else str(v) for v in self.exchange_correlation_functional] @@ -5678,6 +6621,7 @@ class MolecularDynamics(SimulationMethod): class_name: ClassVar[str] = "MolecularDynamics" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.MolecularDynamics + id: Union[str, MolecularDynamicsId] = None force_field: Optional[Union[str, list[str]]] = empty_list() simulation_timestep: Optional[Union[float, list[float]]] = empty_list() simulation_time: Optional[Union[float, list[float]]] = empty_list() @@ -5685,6 +6629,11 @@ class MolecularDynamics(SimulationMethod): number_of_atoms: Optional[Union[int, list[int]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, MolecularDynamicsId): + self.id = MolecularDynamicsId(self.id) + if not isinstance(self.force_field, list): self.force_field = [self.force_field] if self.force_field is not None else [] self.force_field = [v if isinstance(v, str) else str(v) for v in self.force_field] @@ -5722,6 +6671,7 @@ class Microkinetics(SimulationMethod): class_name: ClassVar[str] = "Microkinetics" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Microkinetics + id: Union[str, MicrokineticsId] = None rate_constants: Optional[Union[str, list[str]]] = empty_list() solver_type: Optional[Union[str, list[str]]] = empty_list() has_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() @@ -5730,6 +6680,11 @@ class Microkinetics(SimulationMethod): activation_energy: Optional[Union[float, list[float]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, MicrokineticsId): + self.id = MicrokineticsId(self.id) + if not isinstance(self.rate_constants, list): self.rate_constants = [self.rate_constants] if self.rate_constants is not None else [] self.rate_constants = [v if isinstance(v, str) else str(v) for v in self.rate_constants] @@ -5772,6 +6727,7 @@ class MonteCarlo(SimulationMethod): class_name: ClassVar[str] = "MonteCarlo" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.MonteCarlo + id: Union[str, MonteCarloId] = None interaction_potential: Optional[Union[str, list[str]]] = empty_list() number_of_steps: Optional[Union[int, list[int]]] = empty_list() has_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() @@ -5781,6 +6737,11 @@ class MonteCarlo(SimulationMethod): sampling_interval: Optional[Union[int, list[int]]] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, MonteCarloId): + self.id = MonteCarloId(self.id) + if not isinstance(self.interaction_potential, list): self.interaction_potential = [self.interaction_potential] if self.interaction_potential is not None else [] self.interaction_potential = [v if isinstance(v, str) else str(v) for v in self.interaction_potential] @@ -5941,338 +6902,6 @@ class OperationMode(QualitativeAttribute): value: str = None -@dataclass(repr=False) -class CatalystType(QualitativeAttribute): - """ - Type of catalyst used (e.g. heterogeneous, homogeneous, biocatalyst). - For heterogeneous catalysts, use voc4cat terms where available. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0007014"] - class_class_curie: ClassVar[str] = "VOC4CAT:0007014" - class_name: ClassVar[str] = "CatalystType" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.CatalystType - - value: str = None - -@dataclass(repr=False) -class HeterogeneousCatalyst(CatalystType): - """ - A substance that increases the rate of a chemical reaction that is in a different phase than the reagents. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0007003"] - class_class_curie: ClassVar[str] = "VOC4CAT:0007003" - class_name: ClassVar[str] = "HeterogeneousCatalyst" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.HeterogeneousCatalyst - - value: str = None - -@dataclass(repr=False) -class HomogeneousCatalyst(CatalystType): - """ - A substance that increses the rate of a chemical reaction that is in the same phase as the reagents. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = COREMETA4CAT["HomogeneousCatalyst"] - class_class_curie: ClassVar[str] = "coremeta4cat:HomogeneousCatalyst" - class_name: ClassVar[str] = "HomogeneousCatalyst" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.HomogeneousCatalyst - - value: str = None - -@dataclass(repr=False) -class BioCatalyst(CatalystType): - """ - An enzyme or cell that catalyzes a biocatalytic reaction. Subclass of Catalyst (AgenticEntity). The physical form - in which it is applied is described by an associated BiocatalystPreparation. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = COREMETA4CAT["BioCatalyst"] - class_class_curie: ClassVar[str] = "coremeta4cat:BioCatalyst" - class_name: ClassVar[str] = "BioCatalyst" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.BioCatalyst - - value: str = None - -@dataclass(repr=False) -class ElectroCatalyst(CatalystType): - """ - The characteristics of a material or substance that determine how it interacts or responds to a magnetic field. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0000255"] - class_class_curie: ClassVar[str] = "VOC4CAT:0000255" - class_name: ClassVar[str] = "ElectroCatalyst" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.ElectroCatalyst - - value: str = None - -@dataclass(repr=False) -class ThinFilmCatalyst(CatalystType): - """ - A catalyst introduced to the reaction chamber in the form of a thin film. To form a thin film, a (powdered) - catalyst is deposited on a substrate (e.g., glass or metal) using an appropriate deposition technique. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0000019"] - class_class_curie: ClassVar[str] = "VOC4CAT:0000019" - class_name: ClassVar[str] = "ThinFilmCatalyst" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.ThinFilmCatalyst - - value: str = None - -@dataclass(repr=False) -class BulkCatalyst(CatalystType): - """ - A catalyst that consists mainly of the active ingredient or phase. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0007015"] - class_class_curie: ClassVar[str] = "VOC4CAT:0007015" - class_name: ClassVar[str] = "BulkCatalyst" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.BulkCatalyst - - value: str = None - -@dataclass(repr=False) -class PowerderedCatalyst(CatalystType): - """ - A catalyst introduced to the reaction chamber in the form of a powder. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0000017"] - class_class_curie: ClassVar[str] = "VOC4CAT:0000017" - class_name: ClassVar[str] = "PowerderedCatalyst" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.PowerderedCatalyst - - value: str = None - -@dataclass(repr=False) -class DepositedSampleCatalyst(CatalystType): - """ - A thin film of the catalyst deposited on an appropriate for the application substrate. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0000038"] - class_class_curie: ClassVar[str] = "VOC4CAT:0000038" - class_name: ClassVar[str] = "DepositedSampleCatalyst" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.DepositedSampleCatalyst - - value: str = None - -@dataclass(repr=False) -class PhotoCatalyst(CatalystType): - """ - A material that absorbs photons (light) of appropriate energy and initiates or accelerates a photochemical - reaction, while it regenerates itself after each reaction cycle. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0000002"] - class_class_curie: ClassVar[str] = "VOC4CAT:0000002" - class_name: ClassVar[str] = "PhotoCatalyst" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.PhotoCatalyst - - value: str = None - -@dataclass(repr=False) -class SupportedCatalsyt(CatalystType): - """ - A catalyst where the active material is usually the minority phase and fixed on a high surface area, relatively - inert solid. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0007034"] - class_class_curie: ClassVar[str] = "VOC4CAT:0007034" - class_name: ClassVar[str] = "SupportedCatalsyt" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.SupportedCatalsyt - - value: str = None - -@dataclass(repr=False) -class ReactionType(QualitativeAttribute): - """ - A group of chemical reactions with common conditions or reactants, e.g. Oxidation, Hydrogenation, Reduction, - Cracking. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0007010"] - class_class_curie: ClassVar[str] = "VOC4CAT:0007010" - class_name: ClassVar[str] = "ReactionType" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.ReactionType - - value: str = None - -@dataclass(repr=False) -class Hydrogenation(ReactionType): - """ - A chemical reaction of molecular hydrogen (H2) and another chemical species, typically facilitated by a catalyst. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0000260"] - class_class_curie: ClassVar[str] = "VOC4CAT:0000260" - class_name: ClassVar[str] = "Hydrogenation" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Hydrogenation - - value: str = None - -@dataclass(repr=False) -class Oxidation(ReactionType): - """ - The loss of electrons or an increase in the oxidation state of a species. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0000097"] - class_class_curie: ClassVar[str] = "VOC4CAT:0000097" - class_name: ClassVar[str] = "Oxidation" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Oxidation - - value: str = None - -@dataclass(repr=False) -class Dehydrogenation(ReactionType): - """ - A chemical reaction that involves the removal of two or more hydrogen atoms from a molecule. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0000297"] - class_class_curie: ClassVar[str] = "VOC4CAT:0000297" - class_name: ClassVar[str] = "Dehydrogenation" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Dehydrogenation - - value: str = None - -@dataclass(repr=False) -class CarbonCouplingReaction(ReactionType): - """ - A chemical reaction where a carbon-carbon bond is formed from two carbon-containing fragments. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0000223"] - class_class_curie: ClassVar[str] = "VOC4CAT:0000223" - class_name: ClassVar[str] = "CarbonCouplingReaction" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.CarbonCouplingReaction - - value: str = None - -@dataclass(repr=False) -class Hydrodeoxygenation(ReactionType): - """ - A catalytic process in which oxygen is removed from oxygenated organic compounds using hydrogen. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0000226"] - class_class_curie: ClassVar[str] = "VOC4CAT:0000226" - class_name: ClassVar[str] = "Hydrodeoxygenation" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Hydrodeoxygenation - - value: str = None - -@dataclass(repr=False) -class OxygenEvolutionReaction(ReactionType): - """ - A chemical reaction of generating molecular oxygen in electrochemistry. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0000236"] - class_class_curie: ClassVar[str] = "VOC4CAT:0000236" - class_name: ClassVar[str] = "OxygenEvolutionReaction" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.OxygenEvolutionReaction - - value: str = None - -@dataclass(repr=False) -class Hydroxylation(ReactionType): - """ - The addition of a hydroxyl group (-OH) to a molecule, typically by replacing a hydrogen atom. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0000258"] - class_class_curie: ClassVar[str] = "VOC4CAT:0000258" - class_name: ClassVar[str] = "Hydroxylation" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Hydroxylation - - value: str = None - -@dataclass(repr=False) -class FischerTropschSynthesis(ReactionType): - """ - A catalytic chemical reaction in which a mixture of carbon monoxide (CO) and hydrogen (H2), is converted via a - chain-growth mechanism into long-chain hydrocarbons (e.g., alkanes, alkenes or alcohols)—typically using iron or - cobalt catalysts under moderate to high pressures and temperatures. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0000280"] - class_class_curie: ClassVar[str] = "VOC4CAT:0000280" - class_name: ClassVar[str] = "FischerTropschSynthesis" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.FischerTropschSynthesis - - value: str = None - -@dataclass(repr=False) -class CarbonDioxideHydrogenation(Hydrogenation): - """ - The reaction of carbon dioxide (CO2) with molecular hydrogen (H2) to produce value-added hydrocarbons or alcohols. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0000259"] - class_class_curie: ClassVar[str] = "VOC4CAT:0000259" - class_name: ClassVar[str] = "CarbonDioxideHydrogenation" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.CarbonDioxideHydrogenation - - value: str = None - -@dataclass(repr=False) -class SelectiveOxidation(Oxidation): - """ - The targeted oxidation of a specific bond or functional group in a molecule leaving other sites unaffected, often - directed by a catalyst. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0000261"] - class_class_curie: ClassVar[str] = "VOC4CAT:0000261" - class_name: ClassVar[str] = "SelectiveOxidation" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.SelectiveOxidation - - value: str = None - -@dataclass(repr=False) -class CarbonMonoxideOxidation(Oxidation): - """ - The reaction in which carbon monoxide (CO) is converted to carbon dioxide (CO2) through interaction with an - oxidizing agent, typically oxygen (O2). - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0000289"] - class_class_curie: ClassVar[str] = "VOC4CAT:0000289" - class_name: ClassVar[str] = "CarbonMonoxideOxidation" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.CarbonMonoxideOxidation - - value: str = None - @dataclass(repr=False) class CalculatedProperty(QualitativeAttribute): """ @@ -7013,8 +7642,8 @@ class Duration(QuantitativeAttribute): """ _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = VOC4CAT["0008120"] - class_class_curie: ClassVar[str] = "VOC4CAT:0008120" + class_class_uri: ClassVar[URIRef] = QUDT["Quantity"] + class_class_curie: ClassVar[str] = "qudt:Quantity" class_name: ClassVar[str] = "Duration" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Duration @@ -7043,8 +7672,8 @@ class HeatingRate(QuantitativeAttribute): """ _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = VOC4CAT["0008116"] - class_class_curie: ClassVar[str] = "VOC4CAT:0008116" + class_class_uri: ClassVar[URIRef] = QUDT["Quantity"] + class_class_curie: ClassVar[str] = "qudt:Quantity" class_name: ClassVar[str] = "HeatingRate" class_model_uri: ClassVar[URIRef] = COREMETA4CAT.HeatingRate @@ -7096,6 +7725,36 @@ class ElectricPotential(QuantitativeAttribute): value: float = None has_quantity_type: Union[str, DefinedTermId] = None +@dataclass(repr=False) +class ElectricCurrent(QuantitativeAttribute): + """ + A quantitative measure of electric current (e.g. faradaic current in an electrochemical cell). + """ + _inherited_slots: ClassVar[list[str]] = [] + + class_class_uri: ClassVar[URIRef] = QUDT["Quantity"] + class_class_curie: ClassVar[str] = "qudt:Quantity" + class_name: ClassVar[str] = "ElectricCurrent" + class_model_uri: ClassVar[URIRef] = COREMETA4CAT.ElectricCurrent + + value: float = None + has_quantity_type: Union[str, DefinedTermId] = None + +@dataclass(repr=False) +class Area(QuantitativeAttribute): + """ + A quantitative measure of surface area (e.g. active electrode area). + """ + _inherited_slots: ClassVar[list[str]] = [] + + class_class_uri: ClassVar[URIRef] = QUDT["Quantity"] + class_class_curie: ClassVar[str] = "qudt:Quantity" + class_name: ClassVar[str] = "Area" + class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Area + + value: float = None + has_quantity_type: Union[str, DefinedTermId] = None + @dataclass(repr=False) class PowerQuantity(QuantitativeAttribute): """ @@ -7172,92 +7831,50 @@ class MassToChargeRatio(QuantitativeAttribute): has_quantity_type: Union[str, DefinedTermId] = None @dataclass(repr=False) -class ReactorPerformanceMeasures(QuantitativeAttribute): +class Yield(QuantitativeAttribute): """ - A measure to quantify how fast and selective a chemical converison occurs in a reactor. A chemical conversion may - include multiples reactions. + A dimensionless physical quantity describing the fraction of a product B that is formed from a reactant A taking + into account the stoichiometry. If A fully reacts to B without side-reactions, the yield of product B is 1 (or 100 + %). """ _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = VOC4CAT["005001"] - class_class_curie: ClassVar[str] = "VOC4CAT:005001" - class_name: ClassVar[str] = "ReactorPerformanceMeasures" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.ReactorPerformanceMeasures + class_class_uri: ClassVar[URIRef] = CHMO["0002855"] + class_class_curie: ClassVar[str] = "CHMO:0002855" + class_name: ClassVar[str] = "Yield" + class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Yield value: float = None has_quantity_type: Union[str, DefinedTermId] = None - has_yield: Optional[Union[Union[dict, "Yield"], list[Union[dict, "Yield"]]]] = empty_list() - has_conversion: Optional[Union[Union[dict, "Conversion"], list[Union[dict, "Conversion"]]]] = empty_list() - has_space_time_yield: Optional[Union[Union[dict, "SpaceTimeYield"], list[Union[dict, "SpaceTimeYield"]]]] = empty_list() - has_selectivity: Optional[Union[Union[dict, "Selectivity"], list[Union[dict, "Selectivity"]]]] = empty_list() - - def __post_init__(self, *_: str, **kwargs: Any): - if not isinstance(self.has_yield, list): - self.has_yield = [self.has_yield] if self.has_yield is not None else [] - self.has_yield = [v if isinstance(v, Yield) else Yield(**as_dict(v)) for v in self.has_yield] - - if not isinstance(self.has_conversion, list): - self.has_conversion = [self.has_conversion] if self.has_conversion is not None else [] - self.has_conversion = [v if isinstance(v, Conversion) else Conversion(**as_dict(v)) for v in self.has_conversion] - - if not isinstance(self.has_space_time_yield, list): - self.has_space_time_yield = [self.has_space_time_yield] if self.has_space_time_yield is not None else [] - self.has_space_time_yield = [v if isinstance(v, SpaceTimeYield) else SpaceTimeYield(**as_dict(v)) for v in self.has_space_time_yield] - - if not isinstance(self.has_selectivity, list): - self.has_selectivity = [self.has_selectivity] if self.has_selectivity is not None else [] - self.has_selectivity = [v if isinstance(v, Selectivity) else Selectivity(**as_dict(v)) for v in self.has_selectivity] - - super().__post_init__(**kwargs) - @dataclass(repr=False) -class Conversion(QuantitativeAttribute): +class MolarEquivalent(QuantitativeAttribute): """ - A dimensionless physical quantity describing the fraction of a reactant that reacts in a chemical conversion. If a - reactant is consumed completely its conversion is 1 (or 100 %). + A dimensionless ratio that quantifies the stoichiometric proportion of a chemical substance relative to a + reference substance in a chemical reaction. """ _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = VOC4CAT["0005004"] - class_class_curie: ClassVar[str] = "VOC4CAT:0005004" - class_name: ClassVar[str] = "Conversion" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Conversion - - value: float = None - has_quantity_type: Union[str, DefinedTermId] = None - -@dataclass(repr=False) -class SpaceTimeYield(QuantitativeAttribute): - """ - A physical quantity that describes the amount of product produced per unit of time and unit of producing entity. - The producing entity is for example the volume of a chemical reactor or in catalysis the mass or volume or moles - of catalyst. Example unit: kg{product} / (hour * cubicmeter{catalyst}) - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = VOC4CAT["0005006"] - class_class_curie: ClassVar[str] = "VOC4CAT:0005006" - class_name: ClassVar[str] = "SpaceTimeYield" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.SpaceTimeYield + class_class_uri: ClassVar[URIRef] = QUDT["Quantity"] + class_class_curie: ClassVar[str] = "qudt:Quantity" + class_name: ClassVar[str] = "MolarEquivalent" + class_model_uri: ClassVar[URIRef] = COREMETA4CAT.MolarEquivalent value: float = None has_quantity_type: Union[str, DefinedTermId] = None @dataclass(repr=False) -class Selectivity(QuantitativeAttribute): +class PercentageOfTotal(QuantitativeAttribute): """ - A dimensionless physical quantity describing how effective a reactant is converted to the desired product in a - chemical conversion. It is calculated as the ratio between the amount of the desired product and the amount of the - desired product that could have been formed if all reactants were converted to the desired product. The - selectivity is 1 (or 100 %) if no other than the desired product is formed. + A dimensionless ratio that quantifies the stoichiometric proportion of a chemical substance relative to a + reference substance in a chemical reaction. """ _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = VOC4CAT["0000125"] - class_class_curie: ClassVar[str] = "VOC4CAT:0000125" - class_name: ClassVar[str] = "Selectivity" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Selectivity + class_class_uri: ClassVar[URIRef] = QUDT["Quantity"] + class_class_curie: ClassVar[str] = "qudt:Quantity" + class_name: ClassVar[str] = "PercentageOfTotal" + class_model_uri: ClassVar[URIRef] = COREMETA4CAT.PercentageOfTotal value: float = None has_quantity_type: Union[str, DefinedTermId] = None @@ -8101,414 +8718,83 @@ class AmountOfSubstance(QuantitativeAttribute): class PHValue(QuantitativeAttribute): _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = SIO["001089"] - class_class_curie: ClassVar[str] = "SIO:001089" - class_name: ClassVar[str] = "PHValue" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.PHValue - - value: float = None - has_quantity_type: Union[str, DefinedTermId] = None - -@dataclass(repr=False) -class InChIKey(QualitativeAttribute): - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = CHEMINF["000059"] - class_class_curie: ClassVar[str] = "CHEMINF:000059" - class_name: ClassVar[str] = "InChIKey" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.InChIKey - - value: str = None - -@dataclass(repr=False) -class InChi(QualitativeAttribute): - """ - A structure descriptor which conforms to the InChI format specification. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = CHEMINF["000113"] - class_class_curie: ClassVar[str] = "CHEMINF:000113" - class_name: ClassVar[str] = "InChi" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.InChi - - value: str = None - -@dataclass(repr=False) -class MolecularFormula(QualitativeAttribute): - """ - A structure descriptor which identifies each constituent element by its chemical symbol and indicates the number - of atoms of each element found in each discrete molecule of that compound. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = CHEMINF["000042"] - class_class_curie: ClassVar[str] = "CHEMINF:000042" - class_name: ClassVar[str] = "MolecularFormula" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.MolecularFormula - - value: str = None - -@dataclass(repr=False) -class IUPACName(QualitativeAttribute): - """ - A systematic name which is formulated according to the rules and recommendations for chemical nomenclature set out - by the International Union of Pure and Applied Chemistry (IUPAC). - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = CHEMINF["000107"] - class_class_curie: ClassVar[str] = "CHEMINF:000107" - class_name: ClassVar[str] = "IUPACName" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.IUPACName - - value: str = None - -@dataclass(repr=False) -class SMILES(QualitativeAttribute): - """ - A structure descriptor that denotes a molecular structure as a graph and conforms to the SMILES format - specification. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = CHEMINF["000018"] - class_class_curie: ClassVar[str] = "CHEMINF:000018" - class_name: ClassVar[str] = "SMILES" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.SMILES - - value: str = None - -@dataclass(repr=False) -class ChemicalReaction(EvaluatedActivity): - """ - A process that leads to the transformation of one set of chemical substances to another and that is the subject - matter of a DataGeneratingActivity. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = SIO["010345"] - class_class_curie: ClassVar[str] = "SIO:010345" - class_name: ClassVar[str] = "ChemicalReaction" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.ChemicalReaction - - id: Union[str, ChemicalReactionId] = None - used_starting_material: Optional[Union[dict[Union[str, StartingMaterialId], Union[dict, "StartingMaterial"]], list[Union[dict, "StartingMaterial"]]]] = empty_dict() - used_reactant: Optional[Union[dict[Union[str, ReagentId], Union[dict, "Reagent"]], list[Union[dict, "Reagent"]]]] = empty_dict() - generated_product: Optional[Union[dict[Union[str, ChemicalProductId], Union[dict, "ChemicalProduct"]], list[Union[dict, "ChemicalProduct"]]]] = empty_dict() - used_catalyst: Optional[Union[dict[Union[str, CatalystId], Union[dict, "Catalyst"]], list[Union[dict, "Catalyst"]]]] = empty_dict() - used_solvent: Optional[Union[dict[Union[str, DissolvingSubstanceId], Union[dict, "DissolvingSubstance"]], list[Union[dict, "DissolvingSubstance"]]]] = empty_dict() - has_duration: Optional[str] = None - used_reactor: Optional[Union[dict[Union[str, ReactorId], Union[dict, "Reactor"]], list[Union[dict, "Reactor"]]]] = empty_dict() - has_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() - has_pressure: Optional[Union[Union[dict, "Pressure"], list[Union[dict, "Pressure"]]]] = empty_list() - has_yield: Optional[Union[Union[dict, "Yield"], list[Union[dict, "Yield"]]]] = empty_list() - has_reaction_step: Optional[Union[dict[Union[str, ChemicalReactionId], Union[dict, "ChemicalReaction"]], list[Union[dict, "ChemicalReaction"]]]] = empty_dict() - related_resource: Optional[Union[dict[Union[str, ResourceId], Union[dict, Resource]], list[Union[dict, Resource]]]] = empty_dict() - - def __post_init__(self, *_: str, **kwargs: Any): - if self._is_empty(self.id): - self.MissingRequiredField("id") - if not isinstance(self.id, ChemicalReactionId): - self.id = ChemicalReactionId(self.id) - - self._normalize_inlined_as_list(slot_name="used_starting_material", slot_type=StartingMaterial, key_name="id", keyed=True) - - self._normalize_inlined_as_list(slot_name="used_reactant", slot_type=Reagent, key_name="id", keyed=True) - - self._normalize_inlined_as_list(slot_name="generated_product", slot_type=ChemicalProduct, key_name="id", keyed=True) - - self._normalize_inlined_as_list(slot_name="used_catalyst", slot_type=Catalyst, key_name="id", keyed=True) - - self._normalize_inlined_as_list(slot_name="used_solvent", slot_type=DissolvingSubstance, key_name="id", keyed=True) - - if self.has_duration is not None and not isinstance(self.has_duration, str): - self.has_duration = str(self.has_duration) - - self._normalize_inlined_as_list(slot_name="used_reactor", slot_type=Reactor, key_name="id", keyed=True) - - if not isinstance(self.has_temperature, list): - self.has_temperature = [self.has_temperature] if self.has_temperature is not None else [] - self.has_temperature = [v if isinstance(v, Temperature) else Temperature(**as_dict(v)) for v in self.has_temperature] - - if not isinstance(self.has_pressure, list): - self.has_pressure = [self.has_pressure] if self.has_pressure is not None else [] - self.has_pressure = [v if isinstance(v, Pressure) else Pressure(**as_dict(v)) for v in self.has_pressure] - - if not isinstance(self.has_yield, list): - self.has_yield = [self.has_yield] if self.has_yield is not None else [] - self.has_yield = [v if isinstance(v, Yield) else Yield(**as_dict(v)) for v in self.has_yield] - - self._normalize_inlined_as_list(slot_name="has_reaction_step", slot_type=ChemicalReaction, key_name="id", keyed=True) - - self._normalize_inlined_as_list(slot_name="related_resource", slot_type=Resource, key_name="id", keyed=True) - - super().__post_init__(**kwargs) - - -@dataclass(repr=False) -class DissolvingSubstance(AgenticEntity): - """ - A liquid ChemicalSubstance that dissolves or that is capable of dissolving a ChemicalSubstance. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = SIO["010417"] - class_class_curie: ClassVar[str] = "SIO:010417" - class_name: ClassVar[str] = "DissolvingSubstance" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.DissolvingSubstance - - id: Union[str, DissolvingSubstanceId] = None - has_percentage_of_total: Optional[Union[Union[dict, "PercentageOfTotal"], list[Union[dict, "PercentageOfTotal"]]]] = empty_list() - alternative_label: Optional[str] = None - has_physical_state: Optional[Union[str, "PhysicalStateEnum"]] = None - has_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() - has_mass: Optional[Union[Union[dict, "Mass"], list[Union[dict, "Mass"]]]] = empty_list() - has_volume: Optional[Union[Union[dict, "Volume"], list[Union[dict, "Volume"]]]] = empty_list() - has_density: Optional[Union[Union[dict, "Density"], list[Union[dict, "Density"]]]] = empty_list() - has_pressure: Optional[Union[Union[dict, "Pressure"], list[Union[dict, "Pressure"]]]] = empty_list() - has_concentration: Optional[Union[Union[dict, Concentration], list[Union[dict, Concentration]]]] = empty_list() - has_ph_value: Optional[Union[Union[dict, PHValue], list[Union[dict, PHValue]]]] = empty_list() - composed_of: Optional[Union[dict[Union[str, ChemicalEntityId], Union[dict, ChemicalEntity]], list[Union[dict, ChemicalEntity]]]] = empty_dict() - has_amount: Optional[Union[Union[dict, AmountOfSubstance], list[Union[dict, AmountOfSubstance]]]] = empty_list() - - def __post_init__(self, *_: str, **kwargs: Any): - if self._is_empty(self.id): - self.MissingRequiredField("id") - if not isinstance(self.id, DissolvingSubstanceId): - self.id = DissolvingSubstanceId(self.id) - - if not isinstance(self.has_percentage_of_total, list): - self.has_percentage_of_total = [self.has_percentage_of_total] if self.has_percentage_of_total is not None else [] - self.has_percentage_of_total = [v if isinstance(v, PercentageOfTotal) else PercentageOfTotal(**as_dict(v)) for v in self.has_percentage_of_total] - - if self.alternative_label is not None and not isinstance(self.alternative_label, str): - self.alternative_label = str(self.alternative_label) - - if self.has_physical_state is not None and not isinstance(self.has_physical_state, PhysicalStateEnum): - self.has_physical_state = PhysicalStateEnum(self.has_physical_state) - - if not isinstance(self.has_temperature, list): - self.has_temperature = [self.has_temperature] if self.has_temperature is not None else [] - self.has_temperature = [v if isinstance(v, Temperature) else Temperature(**as_dict(v)) for v in self.has_temperature] - - if not isinstance(self.has_mass, list): - self.has_mass = [self.has_mass] if self.has_mass is not None else [] - self.has_mass = [v if isinstance(v, Mass) else Mass(**as_dict(v)) for v in self.has_mass] - - if not isinstance(self.has_volume, list): - self.has_volume = [self.has_volume] if self.has_volume is not None else [] - self.has_volume = [v if isinstance(v, Volume) else Volume(**as_dict(v)) for v in self.has_volume] - - if not isinstance(self.has_density, list): - self.has_density = [self.has_density] if self.has_density is not None else [] - self.has_density = [v if isinstance(v, Density) else Density(**as_dict(v)) for v in self.has_density] - - if not isinstance(self.has_pressure, list): - self.has_pressure = [self.has_pressure] if self.has_pressure is not None else [] - self.has_pressure = [v if isinstance(v, Pressure) else Pressure(**as_dict(v)) for v in self.has_pressure] - - if not isinstance(self.has_concentration, list): - self.has_concentration = [self.has_concentration] if self.has_concentration is not None else [] - self.has_concentration = [v if isinstance(v, Concentration) else Concentration(**as_dict(v)) for v in self.has_concentration] - - if not isinstance(self.has_ph_value, list): - self.has_ph_value = [self.has_ph_value] if self.has_ph_value is not None else [] - self.has_ph_value = [v if isinstance(v, PHValue) else PHValue(**as_dict(v)) for v in self.has_ph_value] - - self._normalize_inlined_as_list(slot_name="composed_of", slot_type=ChemicalEntity, key_name="id", keyed=True) - - if not isinstance(self.has_amount, list): - self.has_amount = [self.has_amount] if self.has_amount is not None else [] - self.has_amount = [v if isinstance(v, AmountOfSubstance) else AmountOfSubstance(**as_dict(v)) for v in self.has_amount] - - super().__post_init__(**kwargs) - - -@dataclass(repr=False) -class Catalyst(AgenticEntity): - """ - A ChemicalSubstance or MaterialEntity that initiates or accelerates a ChemicalReaction without itself being - affected. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = SIO["010344"] - class_class_curie: ClassVar[str] = "SIO:010344" - class_name: ClassVar[str] = "Catalyst" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Catalyst - - id: Union[str, CatalystId] = None - has_molar_equivalent: Optional[Union[Union[dict, "MolarEquivalent"], list[Union[dict, "MolarEquivalent"]]]] = empty_list() - alternative_label: Optional[str] = None - has_physical_state: Optional[Union[str, "PhysicalStateEnum"]] = None - has_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() - has_mass: Optional[Union[Union[dict, "Mass"], list[Union[dict, "Mass"]]]] = empty_list() - has_volume: Optional[Union[Union[dict, "Volume"], list[Union[dict, "Volume"]]]] = empty_list() - has_density: Optional[Union[Union[dict, "Density"], list[Union[dict, "Density"]]]] = empty_list() - has_pressure: Optional[Union[Union[dict, "Pressure"], list[Union[dict, "Pressure"]]]] = empty_list() - has_concentration: Optional[Union[Union[dict, Concentration], list[Union[dict, Concentration]]]] = empty_list() - has_ph_value: Optional[Union[Union[dict, PHValue], list[Union[dict, PHValue]]]] = empty_list() - composed_of: Optional[Union[dict[Union[str, ChemicalEntityId], Union[dict, ChemicalEntity]], list[Union[dict, ChemicalEntity]]]] = empty_dict() - has_amount: Optional[Union[Union[dict, AmountOfSubstance], list[Union[dict, AmountOfSubstance]]]] = empty_list() - - def __post_init__(self, *_: str, **kwargs: Any): - if self._is_empty(self.id): - self.MissingRequiredField("id") - if not isinstance(self.id, CatalystId): - self.id = CatalystId(self.id) - - if not isinstance(self.has_molar_equivalent, list): - self.has_molar_equivalent = [self.has_molar_equivalent] if self.has_molar_equivalent is not None else [] - self.has_molar_equivalent = [v if isinstance(v, MolarEquivalent) else MolarEquivalent(**as_dict(v)) for v in self.has_molar_equivalent] - - if self.alternative_label is not None and not isinstance(self.alternative_label, str): - self.alternative_label = str(self.alternative_label) - - if self.has_physical_state is not None and not isinstance(self.has_physical_state, PhysicalStateEnum): - self.has_physical_state = PhysicalStateEnum(self.has_physical_state) - - if not isinstance(self.has_temperature, list): - self.has_temperature = [self.has_temperature] if self.has_temperature is not None else [] - self.has_temperature = [v if isinstance(v, Temperature) else Temperature(**as_dict(v)) for v in self.has_temperature] - - if not isinstance(self.has_mass, list): - self.has_mass = [self.has_mass] if self.has_mass is not None else [] - self.has_mass = [v if isinstance(v, Mass) else Mass(**as_dict(v)) for v in self.has_mass] - - if not isinstance(self.has_volume, list): - self.has_volume = [self.has_volume] if self.has_volume is not None else [] - self.has_volume = [v if isinstance(v, Volume) else Volume(**as_dict(v)) for v in self.has_volume] - - if not isinstance(self.has_density, list): - self.has_density = [self.has_density] if self.has_density is not None else [] - self.has_density = [v if isinstance(v, Density) else Density(**as_dict(v)) for v in self.has_density] - - if not isinstance(self.has_pressure, list): - self.has_pressure = [self.has_pressure] if self.has_pressure is not None else [] - self.has_pressure = [v if isinstance(v, Pressure) else Pressure(**as_dict(v)) for v in self.has_pressure] - - if not isinstance(self.has_concentration, list): - self.has_concentration = [self.has_concentration] if self.has_concentration is not None else [] - self.has_concentration = [v if isinstance(v, Concentration) else Concentration(**as_dict(v)) for v in self.has_concentration] - - if not isinstance(self.has_ph_value, list): - self.has_ph_value = [self.has_ph_value] if self.has_ph_value is not None else [] - self.has_ph_value = [v if isinstance(v, PHValue) else PHValue(**as_dict(v)) for v in self.has_ph_value] - - self._normalize_inlined_as_list(slot_name="composed_of", slot_type=ChemicalEntity, key_name="id", keyed=True) - - if not isinstance(self.has_amount, list): - self.has_amount = [self.has_amount] if self.has_amount is not None else [] - self.has_amount = [v if isinstance(v, AmountOfSubstance) else AmountOfSubstance(**as_dict(v)) for v in self.has_amount] - - super().__post_init__(**kwargs) - - -@dataclass(repr=False) -class Reactor(Device): - """ - A reactor is a container for controlling a biological or chemical reaction or process. - """ - _inherited_slots: ClassVar[list[str]] = [] - - class_class_uri: ClassVar[URIRef] = AFE["0000153"] - class_class_curie: ClassVar[str] = "AFE:0000153" - class_name: ClassVar[str] = "Reactor" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Reactor - - id: Union[str, ReactorId] = None - alternative_label: Optional[str] = None - has_physical_state: Optional[Union[str, "PhysicalStateEnum"]] = None - has_temperature: Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]] = empty_list() - has_mass: Optional[Union[Union[dict, "Mass"], list[Union[dict, "Mass"]]]] = empty_list() - has_volume: Optional[Union[Union[dict, "Volume"], list[Union[dict, "Volume"]]]] = empty_list() - has_density: Optional[Union[Union[dict, "Density"], list[Union[dict, "Density"]]]] = empty_list() - has_pressure: Optional[Union[Union[dict, "Pressure"], list[Union[dict, "Pressure"]]]] = empty_list() - - def __post_init__(self, *_: str, **kwargs: Any): - if self._is_empty(self.id): - self.MissingRequiredField("id") - if not isinstance(self.id, ReactorId): - self.id = ReactorId(self.id) - - if self.alternative_label is not None and not isinstance(self.alternative_label, str): - self.alternative_label = str(self.alternative_label) - - if self.has_physical_state is not None and not isinstance(self.has_physical_state, PhysicalStateEnum): - self.has_physical_state = PhysicalStateEnum(self.has_physical_state) + class_class_uri: ClassVar[URIRef] = SIO["001089"] + class_class_curie: ClassVar[str] = "SIO:001089" + class_name: ClassVar[str] = "PHValue" + class_model_uri: ClassVar[URIRef] = COREMETA4CAT.PHValue - if not isinstance(self.has_temperature, list): - self.has_temperature = [self.has_temperature] if self.has_temperature is not None else [] - self.has_temperature = [v if isinstance(v, Temperature) else Temperature(**as_dict(v)) for v in self.has_temperature] + value: float = None + has_quantity_type: Union[str, DefinedTermId] = None - if not isinstance(self.has_mass, list): - self.has_mass = [self.has_mass] if self.has_mass is not None else [] - self.has_mass = [v if isinstance(v, Mass) else Mass(**as_dict(v)) for v in self.has_mass] +@dataclass(repr=False) +class InChIKey(QualitativeAttribute): + _inherited_slots: ClassVar[list[str]] = [] - if not isinstance(self.has_volume, list): - self.has_volume = [self.has_volume] if self.has_volume is not None else [] - self.has_volume = [v if isinstance(v, Volume) else Volume(**as_dict(v)) for v in self.has_volume] + class_class_uri: ClassVar[URIRef] = CHEMINF["000059"] + class_class_curie: ClassVar[str] = "CHEMINF:000059" + class_name: ClassVar[str] = "InChIKey" + class_model_uri: ClassVar[URIRef] = COREMETA4CAT.InChIKey - if not isinstance(self.has_density, list): - self.has_density = [self.has_density] if self.has_density is not None else [] - self.has_density = [v if isinstance(v, Density) else Density(**as_dict(v)) for v in self.has_density] + value: str = None - if not isinstance(self.has_pressure, list): - self.has_pressure = [self.has_pressure] if self.has_pressure is not None else [] - self.has_pressure = [v if isinstance(v, Pressure) else Pressure(**as_dict(v)) for v in self.has_pressure] +@dataclass(repr=False) +class InChi(QualitativeAttribute): + """ + A structure descriptor which conforms to the InChI format specification. + """ + _inherited_slots: ClassVar[list[str]] = [] - super().__post_init__(**kwargs) + class_class_uri: ClassVar[URIRef] = CHEMINF["000113"] + class_class_curie: ClassVar[str] = "CHEMINF:000113" + class_name: ClassVar[str] = "InChi" + class_model_uri: ClassVar[URIRef] = COREMETA4CAT.InChi + value: str = None @dataclass(repr=False) -class Yield(QuantitativeAttribute): +class MolecularFormula(QualitativeAttribute): """ - A dimensionless physical quantity describing the fraction of a product B that is formed from a reactant A taking - into account the stoichiometry. If A fully reacts to B without side-reactions, the yield of product B is 1 (or 100 - %). + A structure descriptor which identifies each constituent element by its chemical symbol and indicates the number + of atoms of each element found in each discrete molecule of that compound. """ _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = CHMO["0002855"] - class_class_curie: ClassVar[str] = "CHMO:0002855" - class_name: ClassVar[str] = "Yield" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.Yield + class_class_uri: ClassVar[URIRef] = CHEMINF["000042"] + class_class_curie: ClassVar[str] = "CHEMINF:000042" + class_name: ClassVar[str] = "MolecularFormula" + class_model_uri: ClassVar[URIRef] = COREMETA4CAT.MolecularFormula - value: float = None - has_quantity_type: Union[str, DefinedTermId] = None + value: str = None @dataclass(repr=False) -class MolarEquivalent(QuantitativeAttribute): +class IUPACName(QualitativeAttribute): """ - A dimensionless ratio that quantifies the stoichiometric proportion of a chemical substance relative to a - reference substance in a chemical reaction. + A systematic name which is formulated according to the rules and recommendations for chemical nomenclature set out + by the International Union of Pure and Applied Chemistry (IUPAC). """ _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = QUDT["Quantity"] - class_class_curie: ClassVar[str] = "qudt:Quantity" - class_name: ClassVar[str] = "MolarEquivalent" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.MolarEquivalent + class_class_uri: ClassVar[URIRef] = CHEMINF["000107"] + class_class_curie: ClassVar[str] = "CHEMINF:000107" + class_name: ClassVar[str] = "IUPACName" + class_model_uri: ClassVar[URIRef] = COREMETA4CAT.IUPACName - value: float = None - has_quantity_type: Union[str, DefinedTermId] = None + value: str = None @dataclass(repr=False) -class PercentageOfTotal(QuantitativeAttribute): +class SMILES(QualitativeAttribute): """ - A dimensionless ratio that quantifies the stoichiometric proportion of a chemical substance relative to a - reference substance in a chemical reaction. + A structure descriptor that denotes a molecular structure as a graph and conforms to the SMILES format + specification. """ _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = QUDT["Quantity"] - class_class_curie: ClassVar[str] = "qudt:Quantity" - class_name: ClassVar[str] = "PercentageOfTotal" - class_model_uri: ClassVar[URIRef] = COREMETA4CAT.PercentageOfTotal + class_class_uri: ClassVar[URIRef] = CHEMINF["000018"] + class_class_curie: ClassVar[str] = "CHEMINF:000018" + class_name: ClassVar[str] = "SMILES" + class_model_uri: ClassVar[URIRef] = COREMETA4CAT.SMILES - value: float = None - has_quantity_type: Union[str, DefinedTermId] = None + value: str = None @dataclass(repr=False) class MaterialisticMixin(YAMLRoot): @@ -9283,6 +9569,11 @@ class CatalysisResearchFieldEnum(EnumDefinitionImpl): text="electrocatalysis", description="Electrocatalysis — catalysis of electrochemical reactions.", meaning=VOC4CAT["0000216"]) + photocatalysis = PermissibleValue( + text="photocatalysis", + description="""Photocatalysis — catalysis of a chemical reaction through the +absorption of sufficient light energy by a photocatalyst.""", + meaning=VOC4CAT["0000001"]) hybrid_catalysis = PermissibleValue( text="hybrid_catalysis", description="Hybrid catalysis — combination of two or more catalytic approaches.") @@ -9354,6 +9645,67 @@ class SampleStateEnum(EnumDefinitionImpl): description="Enumeration of physical states in which a catalyst sample may be present.", ) +class CatalystFormEnum(EnumDefinitionImpl): + """ + Enumeration of the physical form/presentation of a catalyst as loaded + into a reactor -- a separate axis from CatalysisResearchFieldEnum + (which describes the catalytic regime, e.g. heterogeneous/homogeneous). + """ + thin_film = PermissibleValue( + text="thin_film", + description="A catalyst introduced to the reaction chamber as a thin film on a substrate.", + meaning=VOC4CAT["0000019"]) + bulk = PermissibleValue( + text="bulk", + description="A catalyst that consists mainly of the active material throughout its volume.", + meaning=VOC4CAT["0007015"]) + powdered = PermissibleValue( + text="powdered", + description="A catalyst introduced to the reaction chamber as a loose powder.", + meaning=VOC4CAT["0000017"]) + deposited_sample = PermissibleValue( + text="deposited_sample", + description="A thin film of the catalyst deposited on a substrate for characterization purposes.", + meaning=VOC4CAT["0000038"]) + supported = PermissibleValue( + text="supported", + description="A catalyst where the active material is dispersed on a support material.", + meaning=VOC4CAT["0007034"]) + other = PermissibleValue( + text="other", + description="Other catalyst form not covered by the above terms.") + + _defn = EnumDefinition( + name="CatalystFormEnum", + description="""Enumeration of the physical form/presentation of a catalyst as loaded +into a reactor -- a separate axis from CatalysisResearchFieldEnum +(which describes the catalytic regime, e.g. heterogeneous/homogeneous).""", + ) + +class CellOperatingModeEnum(EnumDefinitionImpl): + """ + Enumeration of the functional mode of an electrochemical cell, based + on the direction of energy conversion. + """ + galvanic = PermissibleValue( + text="galvanic", + description="""An electrochemical cell that converts chemical energy into +electrical energy via a spontaneous reaction.""", + meaning=VOC4CAT["0007256"]) + electrolytic = PermissibleValue( + text="electrolytic", + description="""An electrochemical cell that consumes electrical energy to drive +a non-spontaneous reaction.""") + other = PermissibleValue( + text="other", + description="Other cell operating mode.") + + _defn = EnumDefinition( + name="CellOperatingModeEnum", + description="""Enumeration of the functional mode of an electrochemical cell, based +on the direction of energy conversion.""", + ) + class DatasetThemes(EnumDefinitionImpl): AGRI = PermissibleValue( @@ -9480,6 +9832,9 @@ class PhysicalStateEnum(EnumDefinitionImpl): class slots: pass +slots.activity_designator = Slot(uri=RDF.type, name="activity_designator", curie=RDF.curie('type'), + model_uri=COREMETA4CAT.activity_designator, domain=None, range=Optional[str]) + slots.has_flow_rate = Slot(uri=SIO['000008'], name="has_flow_rate", curie=SIO.curie('000008'), model_uri=COREMETA4CAT.has_flow_rate, domain=None, range=Optional[Union[Union[dict, VolumeFlowRate], list[Union[dict, VolumeFlowRate]]]]) @@ -9513,15 +9868,6 @@ class slots: slots.has_mz_quantity = Slot(uri=SIO['000008'], name="has_mz_quantity", curie=SIO.curie('000008'), model_uri=COREMETA4CAT.has_mz_quantity, domain=None, range=Optional[Union[Union[dict, MassToChargeRatio], list[Union[dict, MassToChargeRatio]]]]) -slots.has_conversion = Slot(uri=SIO['000008'], name="has_conversion", curie=SIO.curie('000008'), - model_uri=COREMETA4CAT.has_conversion, domain=None, range=Optional[Union[Union[dict, Conversion], list[Union[dict, Conversion]]]]) - -slots.has_space_time_yield = Slot(uri=SIO['000008'], name="has_space_time_yield", curie=SIO.curie('000008'), - model_uri=COREMETA4CAT.has_space_time_yield, domain=None, range=Optional[Union[Union[dict, SpaceTimeYield], list[Union[dict, SpaceTimeYield]]]]) - -slots.has_selectivity = Slot(uri=SIO['000008'], name="has_selectivity", curie=SIO.curie('000008'), - model_uri=COREMETA4CAT.has_selectivity, domain=None, range=Optional[Union[Union[dict, Selectivity], list[Union[dict, Selectivity]]]]) - slots.has_drying_temperature = Slot(uri=VOC4CAT['0008207'], name="has_drying_temperature", curie=VOC4CAT.curie('0008207'), model_uri=COREMETA4CAT.has_drying_temperature, domain=None, range=Optional[Union[Union[dict, Temperature], list[Union[dict, Temperature]]]]) @@ -9529,7 +9875,7 @@ class slots: model_uri=COREMETA4CAT.has_drying_duration, domain=None, range=Optional[Union[dict, Duration]]) slots.has_calcination_temperature_range = Slot(uri=COREMETA4CAT.hasCalcinationTemperatureRange, name="has_calcination_temperature_range", curie=COREMETA4CAT.curie('hasCalcinationTemperatureRange'), - model_uri=COREMETA4CAT.has_calcination_temperature_range, domain=None, range=Optional[Union[dict, QuantitativeRange]]) + model_uri=COREMETA4CAT.has_calcination_temperature_range, domain=None, range=Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]]) slots.has_calcination_dwelling_time = Slot(uri=VOC4CAT['0000060'], name="has_calcination_dwelling_time", curie=VOC4CAT.curie('0000060'), model_uri=COREMETA4CAT.has_calcination_dwelling_time, domain=None, range=Optional[Union[dict, Duration]]) @@ -9558,39 +9904,6 @@ class slots: slots.has_integration_time = Slot(uri=SIO['000008'], name="has_integration_time", curie=SIO.curie('000008'), model_uri=COREMETA4CAT.has_integration_time, domain=None, range=Optional[Union[dict, Duration]]) -slots.has_cathode = Slot(uri=VOC4CAT['0007254'], name="has_cathode", curie=VOC4CAT.curie('0007254'), - model_uri=COREMETA4CAT.has_cathode, domain=None, range=Optional[Union[str, list[str]]]) - -slots.has_anode = Slot(uri=VOC4CAT['0007255'], name="has_anode", curie=VOC4CAT.curie('0007255'), - model_uri=COREMETA4CAT.has_anode, domain=None, range=Optional[Union[str, list[str]]]) - -slots.has_cell_operating_mode = Slot(uri=SIO['000008'], name="has_cell_operating_mode", curie=SIO.curie('000008'), - model_uri=COREMETA4CAT.has_cell_operating_mode, domain=None, range=Optional[Union[str, list[str]]]) - -slots.has_active_area = Slot(uri=SIO['000008'], name="has_active_area", curie=SIO.curie('000008'), - model_uri=COREMETA4CAT.has_active_area, domain=None, range=Optional[Union[Union[dict, QuantitativeAttribute], list[Union[dict, QuantitativeAttribute]]]]) - -slots.has_faradaic_current = Slot(uri=SIO['000008'], name="has_faradaic_current", curie=SIO.curie('000008'), - model_uri=COREMETA4CAT.has_faradaic_current, domain=None, range=Optional[Union[Union[dict, QuantitativeAttribute], list[Union[dict, QuantitativeAttribute]]]]) - -slots.has_stirrer_type = Slot(uri=VOC4CAT['0008113'], name="has_stirrer_type", curie=VOC4CAT.curie('0008113'), - model_uri=COREMETA4CAT.has_stirrer_type, domain=None, range=Optional[Union[str, list[str]]]) - -slots.has_stirrer_diameter = Slot(uri=VOC4CAT['0008115'], name="has_stirrer_diameter", curie=VOC4CAT.curie('0008115'), - model_uri=COREMETA4CAT.has_stirrer_diameter, domain=None, range=Optional[Union[Union[dict, QuantitativeAttribute], list[Union[dict, QuantitativeAttribute]]]]) - -slots.has_catalyst_particle_size = Slot(uri=VOC4CAT['0008212'], name="has_catalyst_particle_size", curie=VOC4CAT.curie('0008212'), - model_uri=COREMETA4CAT.has_catalyst_particle_size, domain=None, range=Optional[Union[Union[dict, QuantitativeAttribute], list[Union[dict, QuantitativeAttribute]]]]) - -slots.has_catalyst_bed_volume = Slot(uri=VOC4CAT['0007021'], name="has_catalyst_bed_volume", curie=VOC4CAT.curie('0007021'), - model_uri=COREMETA4CAT.has_catalyst_bed_volume, domain=None, range=Optional[Union[Union[dict, QuantitativeAttribute], list[Union[dict, QuantitativeAttribute]]]]) - -slots.has_catalyst_dilution_material = Slot(uri=VOC4CAT['0008218'], name="has_catalyst_dilution_material", curie=VOC4CAT.curie('0008218'), - model_uri=COREMETA4CAT.has_catalyst_dilution_material, domain=None, range=Optional[Union[Union[dict, QualitativeAttribute], list[Union[dict, QualitativeAttribute]]]]) - -slots.has_catalyst_bed_height = Slot(uri=VOC4CAT['0008217'], name="has_catalyst_bed_height", curie=VOC4CAT.curie('0008217'), - model_uri=COREMETA4CAT.has_catalyst_bed_height, domain=None, range=Optional[Union[Union[dict, QuantitativeAttribute], list[Union[dict, QuantitativeAttribute]]]]) - slots.has_atmosphere = Slot(uri=VOC4CAT['0007809'], name="has_atmosphere", curie=VOC4CAT.curie('0007809'), model_uri=COREMETA4CAT.has_atmosphere, domain=None, range=Optional[Union[Union[dict, Atmosphere], list[Union[dict, Atmosphere]]]]) @@ -9859,7 +10172,7 @@ class slots: model_uri=COREMETA4CAT.monochromator, domain=None, range=Optional[Union[str, list[str]]]) slots.has_energy_range = Slot(uri=COREMETA4CAT.hasEnergyRange, name="has_energy_range", curie=COREMETA4CAT.curie('hasEnergyRange'), - model_uri=COREMETA4CAT.has_energy_range, domain=None, range=Optional[Union[dict, QuantitativeRange]]) + model_uri=COREMETA4CAT.has_energy_range, domain=None, range=Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]]) slots.gun_type = Slot(uri=COREMETA4CAT.gun_type, name="gun_type", curie=COREMETA4CAT.curie('gun_type'), model_uri=COREMETA4CAT.gun_type, domain=None, range=Optional[Union[str, list[str]]]) @@ -9871,7 +10184,7 @@ class slots: model_uri=COREMETA4CAT.magnification_setting, domain=None, range=Optional[Union[float, list[float]]]) slots.has_temperature_range = Slot(uri=COREMETA4CAT.hasTemperatureRange, name="has_temperature_range", curie=COREMETA4CAT.curie('hasTemperatureRange'), - model_uri=COREMETA4CAT.has_temperature_range, domain=None, range=Optional[Union[dict, QuantitativeRange]]) + model_uri=COREMETA4CAT.has_temperature_range, domain=None, range=Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]]) slots.initial_temperature = Slot(uri=NCIT.C164644, name="initial_temperature", curie=NCIT.curie('C164644'), model_uri=COREMETA4CAT.initial_temperature, domain=None, range=Optional[Union[Union[dict, Temperature], list[Union[dict, Temperature]]]]) @@ -9880,7 +10193,7 @@ class slots: model_uri=COREMETA4CAT.final_temperature, domain=None, range=Optional[Union[Union[dict, Temperature], list[Union[dict, Temperature]]]]) slots.has_mz_range = Slot(uri=COREMETA4CAT.hasMzRange, name="has_mz_range", curie=COREMETA4CAT.curie('hasMzRange'), - model_uri=COREMETA4CAT.has_mz_range, domain=None, range=Optional[Union[dict, QuantitativeRange]]) + model_uri=COREMETA4CAT.has_mz_range, domain=None, range=Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]]) slots.excitation_wavelength = Slot(uri=AFR['0002479'], name="excitation_wavelength", curie=AFR.curie('0002479'), model_uri=COREMETA4CAT.excitation_wavelength, domain=None, range=Optional[Union[Union[dict, LengthQuantity], list[Union[dict, LengthQuantity]]]]) @@ -9907,7 +10220,7 @@ class slots: model_uri=COREMETA4CAT.electrolyte_concentration, domain=None, range=Optional[Union[Union[dict, Concentration], list[Union[dict, Concentration]]]]) slots.has_two_theta_range = Slot(uri=COREMETA4CAT.hasTwoThetaRange, name="has_two_theta_range", curie=COREMETA4CAT.curie('hasTwoThetaRange'), - model_uri=COREMETA4CAT.has_two_theta_range, domain=None, range=Optional[Union[dict, QuantitativeRange]]) + model_uri=COREMETA4CAT.has_two_theta_range, domain=None, range=Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]]) slots.sample_spinning_speed = Slot(uri=COREMETA4CAT.sample_spinning_speed, name="sample_spinning_speed", curie=COREMETA4CAT.curie('sample_spinning_speed'), model_uri=COREMETA4CAT.sample_spinning_speed, domain=None, range=Optional[Union[Union[dict, AngularVelocity], list[Union[dict, AngularVelocity]]]]) @@ -9936,7 +10249,7 @@ class slots: slots.spot_size = Slot(uri=COREMETA4CAT.spot_size, name="spot_size", curie=COREMETA4CAT.curie('spot_size'), model_uri=COREMETA4CAT.spot_size, domain=None, range=Optional[Union[Union[dict, LengthQuantity], list[Union[dict, LengthQuantity]]]]) -slots.lense_mode = Slot(uri=VOC4CAT['0000108'], name="lense_mode", curie=VOC4CAT.curie('0000108'), +slots.lense_mode = Slot(uri=COREMETA4CAT.lense_mode, name="lense_mode", curie=COREMETA4CAT.curie('lense_mode'), model_uri=COREMETA4CAT.lense_mode, domain=None, range=Optional[Union[str, list[str]]]) slots.charge_compensation = Slot(uri=COREMETA4CAT.charge_compensation, name="charge_compensation", curie=COREMETA4CAT.curie('charge_compensation'), @@ -9949,7 +10262,7 @@ class slots: model_uri=COREMETA4CAT.counting_time, domain=None, range=Optional[Union[Union[dict, Duration], list[Union[dict, Duration]]]]) slots.has_wavenumber_range = Slot(uri=COREMETA4CAT.hasWavenumberRange, name="has_wavenumber_range", curie=COREMETA4CAT.curie('hasWavenumberRange'), - model_uri=COREMETA4CAT.has_wavenumber_range, domain=None, range=Optional[Union[dict, QuantitativeRange]]) + model_uri=COREMETA4CAT.has_wavenumber_range, domain=None, range=Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]]) slots.background_correction = Slot(uri=AFP['0003721'], name="background_correction", curie=AFP.curie('0003721'), model_uri=COREMETA4CAT.background_correction, domain=None, range=Optional[Union[str, list[str]]]) @@ -10023,11 +10336,8 @@ class slots: slots.matrix_effect_correction = Slot(uri=COREMETA4CAT.matrix_effect_correction, name="matrix_effect_correction", curie=COREMETA4CAT.curie('matrix_effect_correction'), model_uri=COREMETA4CAT.matrix_effect_correction, domain=None, range=Optional[Union[str, list[str]]]) -slots.minimum_wavelength = Slot(uri=COREMETA4CAT.minimum_wavelength, name="minimum_wavelength", curie=COREMETA4CAT.curie('minimum_wavelength'), - model_uri=COREMETA4CAT.minimum_wavelength, domain=None, range=Optional[Union[float, list[float]]]) - -slots.maximum_wavelength = Slot(uri=COREMETA4CAT.maximum_wavelength, name="maximum_wavelength", curie=COREMETA4CAT.curie('maximum_wavelength'), - model_uri=COREMETA4CAT.maximum_wavelength, domain=None, range=Optional[Union[float, list[float]]]) +slots.wavelength_range = Slot(uri=COREMETA4CAT.wavelength_range, name="wavelength_range", curie=COREMETA4CAT.curie('wavelength_range'), + model_uri=COREMETA4CAT.wavelength_range, domain=None, range=Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]]) slots.path_length = Slot(uri=AFQ['0000268'], name="path_length", curie=AFQ.curie('0000268'), model_uri=COREMETA4CAT.path_length, domain=None, range=Optional[Union[float, list[float]]]) @@ -10047,11 +10357,8 @@ class slots: slots.scan_rate = Slot(uri=VOC4CAT['0007213'], name="scan_rate", curie=VOC4CAT.curie('0007213'), model_uri=COREMETA4CAT.scan_rate, domain=None, range=Optional[Union[float, list[float]]]) -slots.minimum_potential = Slot(uri=COREMETA4CAT.minimum_potential, name="minimum_potential", curie=COREMETA4CAT.curie('minimum_potential'), - model_uri=COREMETA4CAT.minimum_potential, domain=None, range=Optional[Union[float, list[float]]]) - -slots.maximum_potential = Slot(uri=COREMETA4CAT.maximum_potential, name="maximum_potential", curie=COREMETA4CAT.curie('maximum_potential'), - model_uri=COREMETA4CAT.maximum_potential, domain=None, range=Optional[Union[float, list[float]]]) +slots.scan_potential_range = Slot(uri=COREMETA4CAT.scan_potential_range, name="scan_potential_range", curie=COREMETA4CAT.curie('scan_potential_range'), + model_uri=COREMETA4CAT.scan_potential_range, domain=None, range=Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]]) slots.step_size_potential = Slot(uri=VOC4CAT['0007218'], name="step_size_potential", curie=VOC4CAT.curie('0007218'), model_uri=COREMETA4CAT.step_size_potential, domain=None, range=Optional[Union[float, list[float]]]) @@ -10095,11 +10402,8 @@ class slots: slots.inlet_temperature = Slot(uri=COREMETA4CAT.inlet_temperature, name="inlet_temperature", curie=COREMETA4CAT.curie('inlet_temperature'), model_uri=COREMETA4CAT.inlet_temperature, domain=None, range=Optional[Union[Union[dict, Temperature], list[Union[dict, Temperature]]]]) -slots.minimum_oven_temperature = Slot(uri=COREMETA4CAT.minimum_oven_temperature, name="minimum_oven_temperature", curie=COREMETA4CAT.curie('minimum_oven_temperature'), - model_uri=COREMETA4CAT.minimum_oven_temperature, domain=None, range=Optional[Union[Union[dict, Temperature], list[Union[dict, Temperature]]]]) - -slots.maximum_oven_temperature = Slot(uri=COREMETA4CAT.maximum_oven_temperature, name="maximum_oven_temperature", curie=COREMETA4CAT.curie('maximum_oven_temperature'), - model_uri=COREMETA4CAT.maximum_oven_temperature, domain=None, range=Optional[Union[Union[dict, Temperature], list[Union[dict, Temperature]]]]) +slots.oven_temperature_range = Slot(uri=COREMETA4CAT.oven_temperature_range, name="oven_temperature_range", curie=COREMETA4CAT.curie('oven_temperature_range'), + model_uri=COREMETA4CAT.oven_temperature_range, domain=None, range=Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]]) slots.heating_ramp = Slot(uri=VOC4CAT['0008116'], name="heating_ramp", curie=VOC4CAT.curie('0008116'), model_uri=COREMETA4CAT.heating_ramp, domain=None, range=Optional[Union[Union[dict, HeatingRate], list[Union[dict, HeatingRate]]]]) @@ -10129,16 +10433,16 @@ class slots: model_uri=COREMETA4CAT.ionization_mode, domain=None, range=Optional[Union[str, list[str]]]) slots.catalyst_quantity = Slot(uri=COREMETA4CAT.catalyst_quantity, name="catalyst_quantity", curie=COREMETA4CAT.curie('catalyst_quantity'), - model_uri=COREMETA4CAT.catalyst_quantity, domain=None, range=Union[Union[dict, Mass], list[Union[dict, Mass]]]) + model_uri=COREMETA4CAT.catalyst_quantity, domain=None, range=Optional[Union[Union[dict, Mass], list[Union[dict, Mass]]]]) -slots.reactant = Slot(uri=VOC4CAT['0000101'], name="reactant", curie=VOC4CAT.curie('0000101'), - model_uri=COREMETA4CAT.reactant, domain=None, range=Union[dict[Union[str, ChemicalEntityId], Union[dict, ChemicalEntity]], list[Union[dict, ChemicalEntity]]]) +slots.catalyst_type = Slot(uri=VOC4CAT['0007014'], name="catalyst_type", curie=VOC4CAT.curie('0007014'), + model_uri=COREMETA4CAT.catalyst_type, domain=None, range=Optional[Union[Union[str, "CatalysisResearchFieldEnum"], list[Union[str, "CatalysisResearchFieldEnum"]]]]) -slots.has_catalyst_type = Slot(uri=VOC4CAT['0007014'], name="has_catalyst_type", curie=VOC4CAT.curie('0007014'), - model_uri=COREMETA4CAT.has_catalyst_type, domain=None, range=Optional[Union[Union[dict, CatalystType], list[Union[dict, CatalystType]]]]) +slots.catalyst_form = Slot(uri=COREMETA4CAT.catalyst_form, name="catalyst_form", curie=COREMETA4CAT.curie('catalyst_form'), + model_uri=COREMETA4CAT.catalyst_form, domain=None, range=Optional[Union[Union[str, "CatalystFormEnum"], list[Union[str, "CatalystFormEnum"]]]]) -slots.has_reaction_type = Slot(uri=VOC4CAT['0007010'], name="has_reaction_type", curie=VOC4CAT.curie('0007010'), - model_uri=COREMETA4CAT.has_reaction_type, domain=None, range=Optional[Union[Union[dict, ReactionType], list[Union[dict, ReactionType]]]]) +slots.reaction_name = Slot(uri=VOC4CAT['0007009'], name="reaction_name", curie=VOC4CAT.curie('0007009'), + model_uri=COREMETA4CAT.reaction_name, domain=None, range=Optional[Union[str, list[str]]]) slots.reactor_temperature_range = Slot(uri=VOC4CAT['0007032'], name="reactor_temperature_range", curie=VOC4CAT.curie('0007032'), model_uri=COREMETA4CAT.reactor_temperature_range, domain=None, range=Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]]) @@ -10149,6 +10453,105 @@ class slots: slots.feed_composition_range = Slot(uri=COREMETA4CAT.feed_composition_range, name="feed_composition_range", curie=COREMETA4CAT.curie('feed_composition_range'), model_uri=COREMETA4CAT.feed_composition_range, domain=None, range=Optional[Union[Union[dict, QuantitativeRange], list[Union[dict, QuantitativeRange]]]]) +slots.has_cathode = Slot(uri=VOC4CAT['0007254'], name="has_cathode", curie=VOC4CAT.curie('0007254'), + model_uri=COREMETA4CAT.has_cathode, domain=None, range=Optional[Union[str, list[str]]]) + +slots.has_anode = Slot(uri=VOC4CAT['0007255'], name="has_anode", curie=VOC4CAT.curie('0007255'), + model_uri=COREMETA4CAT.has_anode, domain=None, range=Optional[Union[str, list[str]]]) + +slots.cell_operating_mode = Slot(uri=COREMETA4CAT.cell_operating_mode, name="cell_operating_mode", curie=COREMETA4CAT.curie('cell_operating_mode'), + model_uri=COREMETA4CAT.cell_operating_mode, domain=None, range=Optional[Union[str, "CellOperatingModeEnum"]]) + +slots.has_active_area = Slot(uri=VOC4CAT['0007258'], name="has_active_area", curie=VOC4CAT.curie('0007258'), + model_uri=COREMETA4CAT.has_active_area, domain=None, range=Optional[Union[Union[dict, Area], list[Union[dict, Area]]]]) + +slots.faradaic_current = Slot(uri=VOC4CAT['0007259'], name="faradaic_current", curie=VOC4CAT.curie('0007259'), + model_uri=COREMETA4CAT.faradaic_current, domain=None, range=Optional[Union[Union[dict, ElectricCurrent], list[Union[dict, ElectricCurrent]]]]) + +slots.stirring_rate = Slot(uri=VOC4CAT['0008114'], name="stirring_rate", curie=VOC4CAT.curie('0008114'), + model_uri=COREMETA4CAT.stirring_rate, domain=None, range=Optional[Union[Union[dict, AngularVelocity], list[Union[dict, AngularVelocity]]]]) + +slots.residence_time = Slot(uri=COREMETA4CAT.residence_time, name="residence_time", curie=COREMETA4CAT.curie('residence_time'), + model_uri=COREMETA4CAT.residence_time, domain=None, range=Optional[Union[dict, Duration]]) + +slots.reactor_working_volume = Slot(uri=VOC4CAT['0000153'], name="reactor_working_volume", curie=VOC4CAT.curie('0000153'), + model_uri=COREMETA4CAT.reactor_working_volume, domain=None, range=Optional[Union[Union[dict, Volume], list[Union[dict, Volume]]]]) + +slots.reactor_diameter = Slot(uri=COREMETA4CAT.reactor_diameter, name="reactor_diameter", curie=COREMETA4CAT.curie('reactor_diameter'), + model_uri=COREMETA4CAT.reactor_diameter, domain=None, range=Optional[Union[Union[dict, LengthQuantity], list[Union[dict, LengthQuantity]]]]) + +slots.stirrer_diameter = Slot(uri=VOC4CAT['0008115'], name="stirrer_diameter", curie=VOC4CAT.curie('0008115'), + model_uri=COREMETA4CAT.stirrer_diameter, domain=None, range=Optional[Union[Union[dict, LengthQuantity], list[Union[dict, LengthQuantity]]]]) + +slots.reactor_stirrer_type = Slot(uri=VOC4CAT['0008113'], name="reactor_stirrer_type", curie=VOC4CAT.curie('0008113'), + model_uri=COREMETA4CAT.reactor_stirrer_type, domain=None, range=Optional[Union[str, list[str]]]) + +slots.tube_length = Slot(uri=COREMETA4CAT.tube_length, name="tube_length", curie=COREMETA4CAT.curie('tube_length'), + model_uri=COREMETA4CAT.tube_length, domain=None, range=Optional[Union[Union[dict, LengthQuantity], list[Union[dict, LengthQuantity]]]]) + +slots.tube_internal_diameter = Slot(uri=COREMETA4CAT.tube_internal_diameter, name="tube_internal_diameter", curie=COREMETA4CAT.curie('tube_internal_diameter'), + model_uri=COREMETA4CAT.tube_internal_diameter, domain=None, range=Optional[Union[Union[dict, LengthQuantity], list[Union[dict, LengthQuantity]]]]) + +slots.flow_direction = Slot(uri=COREMETA4CAT.flow_direction, name="flow_direction", curie=COREMETA4CAT.curie('flow_direction'), + model_uri=COREMETA4CAT.flow_direction, domain=None, range=Optional[Union[str, list[str]]]) + +slots.number_of_tubes = Slot(uri=COREMETA4CAT.number_of_tubes, name="number_of_tubes", curie=COREMETA4CAT.curie('number_of_tubes'), + model_uri=COREMETA4CAT.number_of_tubes, domain=None, range=Optional[Union[int, list[int]]]) + +slots.tube_material = Slot(uri=COREMETA4CAT.tube_material, name="tube_material", curie=COREMETA4CAT.curie('tube_material'), + model_uri=COREMETA4CAT.tube_material, domain=None, range=Optional[Union[str, list[str]]]) + +slots.catalyst_particle_size = Slot(uri=VOC4CAT['0008212'], name="catalyst_particle_size", curie=VOC4CAT.curie('0008212'), + model_uri=COREMETA4CAT.catalyst_particle_size, domain=None, range=Optional[Union[Union[dict, LengthQuantity], list[Union[dict, LengthQuantity]]]]) + +slots.agitation_type = Slot(uri=COREMETA4CAT.agitation_type, name="agitation_type", curie=COREMETA4CAT.curie('agitation_type'), + model_uri=COREMETA4CAT.agitation_type, domain=None, range=Optional[Union[str, list[str]]]) + +slots.reaction_chamber_material = Slot(uri=VOC4CAT['0000156'], name="reaction_chamber_material", curie=VOC4CAT.curie('0000156'), + model_uri=COREMETA4CAT.reaction_chamber_material, domain=None, range=Optional[Union[str, list[str]]]) + +slots.vessel_internal_volume = Slot(uri=COREMETA4CAT.vessel_internal_volume, name="vessel_internal_volume", curie=COREMETA4CAT.curie('vessel_internal_volume'), + model_uri=COREMETA4CAT.vessel_internal_volume, domain=None, range=Optional[Union[Union[dict, Volume], list[Union[dict, Volume]]]]) + +slots.vessel_material = Slot(uri=COREMETA4CAT.vessel_material, name="vessel_material", curie=COREMETA4CAT.curie('vessel_material'), + model_uri=COREMETA4CAT.vessel_material, domain=None, range=Optional[Union[str, list[str]]]) + +slots.batch_duration = Slot(uri=COREMETA4CAT.batch_duration, name="batch_duration", curie=COREMETA4CAT.curie('batch_duration'), + model_uri=COREMETA4CAT.batch_duration, domain=None, range=Optional[Union[dict, Duration]]) + +slots.gas_liquid_ratio = Slot(uri=COREMETA4CAT.gas_liquid_ratio, name="gas_liquid_ratio", curie=COREMETA4CAT.curie('gas_liquid_ratio'), + model_uri=COREMETA4CAT.gas_liquid_ratio, domain=None, range=Optional[Union[float, list[float]]]) + +slots.agitation_sparging_rate = Slot(uri=COREMETA4CAT.agitation_sparging_rate, name="agitation_sparging_rate", curie=COREMETA4CAT.curie('agitation_sparging_rate'), + model_uri=COREMETA4CAT.agitation_sparging_rate, domain=None, range=Optional[Union[Union[dict, VolumeFlowRate], list[Union[dict, VolumeFlowRate]]]]) + +slots.impeller_type = Slot(uri=COREMETA4CAT.impeller_type, name="impeller_type", curie=COREMETA4CAT.curie('impeller_type'), + model_uri=COREMETA4CAT.impeller_type, domain=None, range=Optional[Union[str, list[str]]]) + +slots.agitation_speed = Slot(uri=COREMETA4CAT.agitation_speed, name="agitation_speed", curie=COREMETA4CAT.curie('agitation_speed'), + model_uri=COREMETA4CAT.agitation_speed, domain=None, range=Optional[Union[Union[dict, AngularVelocity], list[Union[dict, AngularVelocity]]]]) + +slots.channel_material = Slot(uri=COREMETA4CAT.channel_material, name="channel_material", curie=COREMETA4CAT.curie('channel_material'), + model_uri=COREMETA4CAT.channel_material, domain=None, range=Optional[Union[str, list[str]]]) + +slots.channel_dimensions = Slot(uri=COREMETA4CAT.channel_dimensions, name="channel_dimensions", curie=COREMETA4CAT.curie('channel_dimensions'), + model_uri=COREMETA4CAT.channel_dimensions, domain=None, range=Optional[Union[Union[dict, LengthQuantity], list[Union[dict, LengthQuantity]]]]) + +slots.number_of_channels = Slot(uri=COREMETA4CAT.number_of_channels, name="number_of_channels", curie=COREMETA4CAT.curie('number_of_channels'), + model_uri=COREMETA4CAT.number_of_channels, domain=None, range=Optional[Union[int, list[int]]]) + +slots.catalyst_bed_diameter = Slot(uri=COREMETA4CAT.catalyst_bed_diameter, name="catalyst_bed_diameter", curie=COREMETA4CAT.curie('catalyst_bed_diameter'), + model_uri=COREMETA4CAT.catalyst_bed_diameter, domain=None, range=Optional[Union[Union[dict, LengthQuantity], list[Union[dict, LengthQuantity]]]]) + +slots.catalyst_bed_volume = Slot(uri=VOC4CAT['0007021'], name="catalyst_bed_volume", curie=VOC4CAT.curie('0007021'), + model_uri=COREMETA4CAT.catalyst_bed_volume, domain=None, range=Optional[Union[Union[dict, Volume], list[Union[dict, Volume]]]]) + +slots.catalyst_dilution_material = Slot(uri=VOC4CAT['0008218'], name="catalyst_dilution_material", curie=VOC4CAT.curie('0008218'), + model_uri=COREMETA4CAT.catalyst_dilution_material, domain=None, range=Optional[Union[str, list[str]]]) + +slots.catalyst_bed_height = Slot(uri=VOC4CAT['0008217'], name="catalyst_bed_height", curie=VOC4CAT.curie('0008217'), + model_uri=COREMETA4CAT.catalyst_bed_height, domain=None, range=Optional[Union[Union[dict, LengthQuantity], list[Union[dict, LengthQuantity]]]]) + slots.gas_distributor_type = Slot(uri=COREMETA4CAT.gas_distributor_type, name="gas_distributor_type", curie=COREMETA4CAT.curie('gas_distributor_type'), model_uri=COREMETA4CAT.gas_distributor_type, domain=None, range=Optional[Union[str, list[str]]]) @@ -10156,10 +10559,10 @@ class slots: model_uri=COREMETA4CAT.bed_expansion_height, domain=None, range=Optional[Union[float, list[float]]]) slots.bubble_size_distribution = Slot(uri=COREMETA4CAT.bubble_size_distribution, name="bubble_size_distribution", curie=COREMETA4CAT.curie('bubble_size_distribution'), - model_uri=COREMETA4CAT.bubble_size_distribution, domain=None, range=Optional[str]) + model_uri=COREMETA4CAT.bubble_size_distribution, domain=None, range=Optional[Union[str, list[str]]]) slots.product_identification_method = Slot(uri=COREMETA4CAT.product_identification_method, name="product_identification_method", curie=COREMETA4CAT.curie('product_identification_method'), - model_uri=COREMETA4CAT.product_identification_method, domain=None, range=Union[Union[dict, ProductIdentificationMethod], list[Union[dict, ProductIdentificationMethod]]]) + model_uri=COREMETA4CAT.product_identification_method, domain=None, range=Union[dict[Union[str, ProductIdentificationMethodId], Union[dict, ProductIdentificationMethod]], list[Union[dict, ProductIdentificationMethod]]]) slots.software_package = Slot(uri=COREMETA4CAT.software_package, name="software_package", curie=COREMETA4CAT.curie('software_package'), model_uri=COREMETA4CAT.software_package, domain=None, range=Union[str, list[str]]) @@ -10407,6 +10810,39 @@ class slots: slots.excitonic_correction = Slot(uri=COREMETA4CAT.excitonic_correction, name="excitonic_correction", curie=COREMETA4CAT.curie('excitonic_correction'), model_uri=COREMETA4CAT.excitonic_correction, domain=None, range=Optional[Union[float, list[float]]]) +slots.used_starting_material = Slot(uri=RO['0004009'], name="used_starting_material", curie=RO.curie('0004009'), + model_uri=COREMETA4CAT.used_starting_material, domain=None, range=Optional[Union[dict[Union[str, StartingMaterialId], Union[dict, StartingMaterial]], list[Union[dict, StartingMaterial]]]]) + +slots.used_reactant = Slot(uri=RO['0004009'], name="used_reactant", curie=RO.curie('0004009'), + model_uri=COREMETA4CAT.used_reactant, domain=None, range=Optional[Union[dict[Union[str, ReagentId], Union[dict, Reagent]], list[Union[dict, Reagent]]]]) + +slots.generated_product = Slot(uri=RO['0004008'], name="generated_product", curie=RO.curie('0004008'), + model_uri=COREMETA4CAT.generated_product, domain=None, range=Optional[Union[dict[Union[str, ChemicalProductId], Union[dict, ChemicalProduct]], list[Union[dict, ChemicalProduct]]]]) + +slots.used_catalyst = Slot(uri=RXNO['0000425'], name="used_catalyst", curie=RXNO.curie('0000425'), + model_uri=COREMETA4CAT.used_catalyst, domain=None, range=Optional[Union[dict[Union[str, CatalystId], Union[dict, Catalyst]], list[Union[dict, Catalyst]]]]) + +slots.used_solvent = Slot(uri=PROV.wasAssociatedWith, name="used_solvent", curie=PROV.curie('wasAssociatedWith'), + model_uri=COREMETA4CAT.used_solvent, domain=None, range=Optional[Union[dict[Union[str, DissolvingSubstanceId], Union[dict, DissolvingSubstance]], list[Union[dict, DissolvingSubstance]]]]) + +slots.has_duration = Slot(uri=SCHEMA.duration, name="has_duration", curie=SCHEMA.curie('duration'), + model_uri=COREMETA4CAT.has_duration, domain=None, range=Optional[str]) + +slots.used_reactor = Slot(uri=PROV.wasAssociatedWith, name="used_reactor", curie=PROV.curie('wasAssociatedWith'), + model_uri=COREMETA4CAT.used_reactor, domain=None, range=Optional[Union[dict[Union[str, ReactorId], Union[dict, Reactor]], list[Union[dict, Reactor]]]]) + +slots.has_yield = Slot(uri=SIO['000008'], name="has_yield", curie=SIO.curie('000008'), + model_uri=COREMETA4CAT.has_yield, domain=None, range=Optional[Union[Union[dict, Yield], list[Union[dict, Yield]]]]) + +slots.has_molar_equivalent = Slot(uri=SIO['000008'], name="has_molar_equivalent", curie=SIO.curie('000008'), + model_uri=COREMETA4CAT.has_molar_equivalent, domain=None, range=Optional[Union[Union[dict, MolarEquivalent], list[Union[dict, MolarEquivalent]]]]) + +slots.has_percentage_of_total = Slot(uri=SIO['000008'], name="has_percentage_of_total", curie=SIO.curie('000008'), + model_uri=COREMETA4CAT.has_percentage_of_total, domain=None, range=Optional[Union[Union[dict, PercentageOfTotal], list[Union[dict, PercentageOfTotal]]]]) + +slots.has_reaction_step = Slot(uri=BFO['0000051'], name="has_reaction_step", curie=BFO.curie('0000051'), + model_uri=COREMETA4CAT.has_reaction_step, domain=None, range=Optional[Union[dict[Union[str, ChemicalReactionId], Union[dict, ChemicalReaction]], list[Union[dict, ChemicalReaction]]]]) + slots.access_URL = Slot(uri=DCAT.accessURL, name="access_URL", curie=DCAT.curie('accessURL'), model_uri=COREMETA4CAT.access_URL, domain=None, range=Optional[str]) @@ -10725,39 +11161,6 @@ class slots: slots.has_molar_mass = Slot(uri=SIO['000008'], name="has_molar_mass", curie=SIO.curie('000008'), model_uri=COREMETA4CAT.has_molar_mass, domain=None, range=Optional[Union[Union[dict, MolarMass], list[Union[dict, MolarMass]]]]) -slots.used_starting_material = Slot(uri=RO['0004009'], name="used_starting_material", curie=RO.curie('0004009'), - model_uri=COREMETA4CAT.used_starting_material, domain=None, range=Optional[Union[dict[Union[str, StartingMaterialId], Union[dict, StartingMaterial]], list[Union[dict, StartingMaterial]]]]) - -slots.used_reactant = Slot(uri=RO['0004009'], name="used_reactant", curie=RO.curie('0004009'), - model_uri=COREMETA4CAT.used_reactant, domain=None, range=Optional[Union[dict[Union[str, ReagentId], Union[dict, Reagent]], list[Union[dict, Reagent]]]]) - -slots.generated_product = Slot(uri=RO['0004008'], name="generated_product", curie=RO.curie('0004008'), - model_uri=COREMETA4CAT.generated_product, domain=None, range=Optional[Union[dict[Union[str, ChemicalProductId], Union[dict, ChemicalProduct]], list[Union[dict, ChemicalProduct]]]]) - -slots.used_catalyst = Slot(uri=RXNO['0000425'], name="used_catalyst", curie=RXNO.curie('0000425'), - model_uri=COREMETA4CAT.used_catalyst, domain=None, range=Optional[Union[dict[Union[str, CatalystId], Union[dict, Catalyst]], list[Union[dict, Catalyst]]]]) - -slots.used_solvent = Slot(uri=PROV.wasAssociatedWith, name="used_solvent", curie=PROV.curie('wasAssociatedWith'), - model_uri=COREMETA4CAT.used_solvent, domain=None, range=Optional[Union[dict[Union[str, DissolvingSubstanceId], Union[dict, DissolvingSubstance]], list[Union[dict, DissolvingSubstance]]]]) - -slots.has_duration = Slot(uri=SCHEMA.duration, name="has_duration", curie=SCHEMA.curie('duration'), - model_uri=COREMETA4CAT.has_duration, domain=None, range=Optional[str]) - -slots.used_reactor = Slot(uri=PROV.wasAssociatedWith, name="used_reactor", curie=PROV.curie('wasAssociatedWith'), - model_uri=COREMETA4CAT.used_reactor, domain=None, range=Optional[Union[dict[Union[str, ReactorId], Union[dict, Reactor]], list[Union[dict, Reactor]]]]) - -slots.has_yield = Slot(uri=SIO['000008'], name="has_yield", curie=SIO.curie('000008'), - model_uri=COREMETA4CAT.has_yield, domain=None, range=Optional[Union[Union[dict, Yield], list[Union[dict, Yield]]]]) - -slots.has_molar_equivalent = Slot(uri=SIO['000008'], name="has_molar_equivalent", curie=SIO.curie('000008'), - model_uri=COREMETA4CAT.has_molar_equivalent, domain=None, range=Optional[Union[Union[dict, MolarEquivalent], list[Union[dict, MolarEquivalent]]]]) - -slots.has_percentage_of_total = Slot(uri=SIO['000008'], name="has_percentage_of_total", curie=SIO.curie('000008'), - model_uri=COREMETA4CAT.has_percentage_of_total, domain=None, range=Optional[Union[Union[dict, PercentageOfTotal], list[Union[dict, PercentageOfTotal]]]]) - -slots.has_reaction_step = Slot(uri=BFO['0000051'], name="has_reaction_step", curie=BFO.curie('0000051'), - model_uri=COREMETA4CAT.has_reaction_step, domain=None, range=Optional[Union[dict[Union[str, ChemicalReactionId], Union[dict, ChemicalReaction]], list[Union[dict, ChemicalReaction]]]]) - slots.alternative_label = Slot(uri=SKOS.altLabel, name="alternative_label", curie=SKOS.curie('altLabel'), model_uri=COREMETA4CAT.alternative_label, domain=None, range=Optional[str]) @@ -10807,10 +11210,10 @@ class slots: model_uri=COREMETA4CAT.CatalysisDataset_rdf_type, domain=CatalysisDataset, range=Optional[Union[dict, "DefinedTerm"]]) slots.CatalysisDataset_was_generated_by = Slot(uri=PROV.wasGeneratedBy, name="CatalysisDataset_was_generated_by", curie=PROV.curie('wasGeneratedBy'), - model_uri=COREMETA4CAT.CatalysisDataset_was_generated_by, domain=CatalysisDataset, range=Optional[Union[dict[Union[str, DataGeneratingActivityId], Union[dict, DataGeneratingActivity]], list[Union[dict, DataGeneratingActivity]]]]) + model_uri=COREMETA4CAT.CatalysisDataset_was_generated_by, domain=CatalysisDataset, range=Optional[Union[dict[Union[str, CatalysisDataGeneratingActivityId], Union[dict, CatalysisDataGeneratingActivity]], list[Union[dict, CatalysisDataGeneratingActivity]]]]) slots.CatalysisDataset_is_about_activity = Slot(uri=DCTERMS.subject, name="CatalysisDataset_is_about_activity", curie=DCTERMS.curie('subject'), - model_uri=COREMETA4CAT.CatalysisDataset_is_about_activity, domain=CatalysisDataset, range=Optional[Union[dict[Union[str, EvaluatedActivityId], Union[dict, "EvaluatedActivity"]], list[Union[dict, "EvaluatedActivity"]]]]) + model_uri=COREMETA4CAT.CatalysisDataset_is_about_activity, domain=CatalysisDataset, range=Optional[Union[dict[Union[str, CatalyticReactionId], Union[dict, "CatalyticReaction"]], list[Union[dict, "CatalyticReaction"]]]]) slots.CatalysisDataset_is_about_entity = Slot(uri=DCTERMS.subject, name="CatalysisDataset_is_about_entity", curie=DCTERMS.curie('subject'), model_uri=COREMETA4CAT.CatalysisDataset_is_about_entity, domain=CatalysisDataset, range=Optional[Union[dict[Union[str, EvaluatedEntityId], Union[dict, "EvaluatedEntity"]], list[Union[dict, "EvaluatedEntity"]]]]) @@ -10857,14 +11260,14 @@ class slots: slots.CatalyticReaction_rdf_type = Slot(uri=RDF.type, name="CatalyticReaction_rdf_type", curie=RDF.curie('type'), model_uri=COREMETA4CAT.CatalyticReaction_rdf_type, domain=CatalyticReaction, range=Optional[Union[dict, DefinedTerm]]) -slots.CatalyticReaction_carried_out_by = Slot(uri=PROV.wasAssociatedWith, name="CatalyticReaction_carried_out_by", curie=PROV.curie('wasAssociatedWith'), - model_uri=COREMETA4CAT.CatalyticReaction_carried_out_by, domain=CatalyticReaction, range=Union[dict[Union[str, ChemicalReactorId], Union[dict, ChemicalReactor]], list[Union[dict, ChemicalReactor]]]) - -slots.CatalyticReaction_had_input_entity = Slot(uri=PROV.used, name="CatalyticReaction_had_input_entity", curie=PROV.curie('used'), - model_uri=COREMETA4CAT.CatalyticReaction_had_input_entity, domain=CatalyticReaction, range=Optional[Union[dict[Union[str, EvaluatedEntityId], Union[dict, "EvaluatedEntity"]], list[Union[dict, "EvaluatedEntity"]]]]) +slots.CatalyticReaction_used_reactor = Slot(uri=PROV.wasAssociatedWith, name="CatalyticReaction_used_reactor", curie=PROV.curie('wasAssociatedWith'), + model_uri=COREMETA4CAT.CatalyticReaction_used_reactor, domain=CatalyticReaction, range=Union[dict[Union[str, ChemicalReactorId], Union[dict, ChemicalReactor]], list[Union[dict, ChemicalReactor]]]) slots.CatalyticReaction_product_identification_method = Slot(uri=COREMETA4CAT.product_identification_method, name="CatalyticReaction_product_identification_method", curie=COREMETA4CAT.curie('product_identification_method'), - model_uri=COREMETA4CAT.CatalyticReaction_product_identification_method, domain=CatalyticReaction, range=Union[Union[dict, "ProductIdentificationMethod"], list[Union[dict, "ProductIdentificationMethod"]]]) + model_uri=COREMETA4CAT.CatalyticReaction_product_identification_method, domain=CatalyticReaction, range=Union[dict[Union[str, ProductIdentificationMethodId], Union[dict, "ProductIdentificationMethod"]], list[Union[dict, "ProductIdentificationMethod"]]]) + +slots.CatalyticReaction_has_reaction_step = Slot(uri=BFO['0000051'], name="CatalyticReaction_has_reaction_step", curie=BFO.curie('0000051'), + model_uri=COREMETA4CAT.CatalyticReaction_has_reaction_step, domain=CatalyticReaction, range=Optional[Union[dict[Union[str, CatalyticReactionId], Union[dict, "CatalyticReaction"]], list[Union[dict, "CatalyticReaction"]]]]) slots.Simulation_rdf_type = Slot(uri=RDF.type, name="Simulation_rdf_type", curie=RDF.curie('type'), model_uri=COREMETA4CAT.Simulation_rdf_type, domain=Simulation, range=Optional[Union[dict, "DefinedTerm"]]) @@ -10896,6 +11299,15 @@ class slots: slots.ReactionMonitoring_evaluated_activity = Slot(uri=PROV.wasInformedBy, name="ReactionMonitoring_evaluated_activity", curie=PROV.curie('wasInformedBy'), model_uri=COREMETA4CAT.ReactionMonitoring_evaluated_activity, domain=ReactionMonitoring, range=Optional[Union[dict[Union[str, ChemicalReactionId], Union[dict, "ChemicalReaction"]], list[Union[dict, "ChemicalReaction"]]]]) +slots.ChemicalReaction_has_temperature = Slot(uri=SIO['000008'], name="ChemicalReaction_has_temperature", curie=SIO.curie('000008'), + model_uri=COREMETA4CAT.ChemicalReaction_has_temperature, domain=ChemicalReaction, range=Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]]) + +slots.ChemicalReaction_has_pressure = Slot(uri=SIO['000008'], name="ChemicalReaction_has_pressure", curie=SIO.curie('000008'), + model_uri=COREMETA4CAT.ChemicalReaction_has_pressure, domain=ChemicalReaction, range=Optional[Union[Union[dict, "Pressure"], list[Union[dict, "Pressure"]]]]) + +slots.ChemicalReaction_related_resource = Slot(uri=DCTERMS.relation, name="ChemicalReaction_related_resource", curie=DCTERMS.curie('relation'), + model_uri=COREMETA4CAT.ChemicalReaction_related_resource, domain=ChemicalReaction, range=Optional[Union[dict[Union[str, ResourceId], Union[dict, "Resource"]], list[Union[dict, "Resource"]]]]) + slots.Activity_title = Slot(uri=DCTERMS.title, name="Activity_title", curie=DCTERMS.curie('title'), model_uri=COREMETA4CAT.Activity_title, domain=Activity, range=Optional[Union[str, list[str]]]) @@ -11400,15 +11812,6 @@ class slots: slots.Atom_rdf_type = Slot(uri=RDF.type, name="Atom_rdf_type", curie=RDF.curie('type'), model_uri=COREMETA4CAT.Atom_rdf_type, domain=Atom, range=Union[dict, DefinedTerm]) -slots.ChemicalReaction_has_temperature = Slot(uri=SIO['000008'], name="ChemicalReaction_has_temperature", curie=SIO.curie('000008'), - model_uri=COREMETA4CAT.ChemicalReaction_has_temperature, domain=ChemicalReaction, range=Optional[Union[Union[dict, "Temperature"], list[Union[dict, "Temperature"]]]]) - -slots.ChemicalReaction_has_pressure = Slot(uri=SIO['000008'], name="ChemicalReaction_has_pressure", curie=SIO.curie('000008'), - model_uri=COREMETA4CAT.ChemicalReaction_has_pressure, domain=ChemicalReaction, range=Optional[Union[Union[dict, "Pressure"], list[Union[dict, "Pressure"]]]]) - -slots.ChemicalReaction_related_resource = Slot(uri=DCTERMS.relation, name="ChemicalReaction_related_resource", curie=DCTERMS.curie('relation'), - model_uri=COREMETA4CAT.ChemicalReaction_related_resource, domain=ChemicalReaction, range=Optional[Union[dict[Union[str, ResourceId], Union[dict, Resource]], list[Union[dict, Resource]]]]) - slots.MaterialEntity_has_part = Slot(uri=BFO['0000051'], name="MaterialEntity_has_part", curie=BFO.curie('0000051'), model_uri=COREMETA4CAT.MaterialEntity_has_part, domain=MaterialEntity, range=Optional[Union[dict[Union[str, MaterialEntityId], Union[dict, "MaterialEntity"]], list[Union[dict, "MaterialEntity"]]]]) diff --git a/src/coremeta4cat/datamodel/coremeta4cat_pydantic.py b/src/coremeta4cat/datamodel/coremeta4cat_pydantic.py index 5ccd88065..1203bef4d 100644 --- a/src/coremeta4cat/datamodel/coremeta4cat_pydantic.py +++ b/src/coremeta4cat/datamodel/coremeta4cat_pydantic.py @@ -97,22 +97,36 @@ def __contains__(self, key:str) -> bool: 'CatalysisDataset.\n' ' The catalysis research field is expressed via rdf_type ' '(ClassifierMixin,\n' - ' Pattern 3) using voc4cat terms � analogous to how ' + ' Pattern 3) using voc4cat terms — analogous to how ' 'NMRSpectroscopy uses\n' ' rdf_type: CHMO:0000613 to classify the measurement type.\n' '\n' '- The four CoreMeta4Cat pillars are modelled as DCAT-AP-PLUS ' 'Activity subclasses,\n' ' following the same pattern as NMRSpectroscopy (is_a: ' - 'DataGeneratingActivity):\n' + 'DataGeneratingActivity).\n' + ' Synthesis, Characterization, and Simulation specialize ' + 'CatalysisDataGeneratingActivity\n' + ' (is_a: DataGeneratingActivity) rather than ' + 'DataGeneratingActivity directly -- this\n' + ' coremeta4cat-owned intermediate adds a type designator ' + '(activity_designator) so that\n' + ' was_generated_by (typed CatalysisDataGeneratingActivity) ' + 'can hold any of the three and\n' + ' still resolve to the right concrete Python class when ' + 'loaded. Likewise, is_about_activity\n' + ' is typed CatalyticReaction directly (not the wider ' + 'EvaluatedActivity) so it needs no\n' + ' designator at all:\n' '\n' - ' Synthesis --> is_a: DataGeneratingActivity\n' + ' Synthesis --> is_a: CatalysisDataGeneratingActivity\n' ' Produces a catalyst (MaterialSample) as ' 'had_output_entity.\n' ' The PreparationMethod (protocol) is ' 'linked via realized_plan.\n' '\n' - ' Characterization --> is_a: DataGeneratingActivity\n' + ' Characterization --> is_a: ' + 'CatalysisDataGeneratingActivity\n' ' Produces measurement data about a ' 'catalyst or reaction.\n' ' The catalyst/sample is the ' @@ -120,7 +134,8 @@ def __contains__(self, key:str) -> bool: ' The CharacterizationTechnique is ' 'linked via realized_plan.\n' '\n' - ' Reaction --> is_a: EvaluatedActivity\n' + ' Reaction --> is_a: CatalyticReaction (via ' + 'ChemicalReaction, EvaluatedActivity)\n' ' The catalytic process being studied, NOT ' 'a data-generating\n' ' activity itself. Characterization ' @@ -129,7 +144,7 @@ def __contains__(self, key:str) -> bool: 'in a reaction\n' ' monitoring dataset.\n' '\n' - ' Simulation --> is_a: DataGeneratingActivity\n' + ' Simulation --> is_a: CatalysisDataGeneratingActivity\n' ' Generates computational data about a ' 'catalyst or reaction.\n' ' The SimulationMethod (protocol) is ' @@ -156,24 +171,24 @@ def __contains__(self, key:str) -> bool: '\n' 'Full import hierarchy:\n' '```\n' - ' coremeta4cat.yaml (this file � aggregator + ' + ' coremeta4cat.yaml (this file — aggregator + ' 'CatalysisDataset entry point)\n' ' +-- coremeta4cat_common.yaml (shared slots, ' 'enums)\n' ' +-- chem_dcat_ap (SubstanceSample, ' - 'ChemicalSubstance, �)\n' + 'ChemicalSubstance, …)\n' ' +-- chemical_reaction_ap\n' ' +-- chemical_entities_ap\n' ' +-- material_entities_ap\n' ' +-- dcat_ap_plus ' '(DCAT-AP-PLUS base)\n' - ' +-- coremeta4cat_synthesis_ap (Step 3 � ' + ' +-- coremeta4cat_synthesis_ap (Step 3 — ' 'Synthesis, PreparationMethod, mixins)\n' - ' +-- coremeta4cat_characterization_ap (Step 4 � ' + ' +-- coremeta4cat_characterization_ap (Step 4 — ' 'Characterization, 24 techniques, mixins)\n' - ' +-- coremeta4cat_reaction_ap (Step 5 � Reaction, ' + ' +-- coremeta4cat_reaction_ap (Step 5 — Reaction, ' '8 Reactor subclasses)\n' - ' +-- coremeta4cat_simulation_ap (Step 6 � ' + ' +-- coremeta4cat_simulation_ap (Step 6 — ' 'Simulation, 4 methods, 12 properties, mixins)\n' '```', 'id': 'https://w3id.org/nfdi4cat/coremeta4cat', @@ -223,23 +238,28 @@ class CatalysisResearchFieldEnum(str, Enum): """ heterogeneous_catalysis = "heterogeneous_catalysis" """ - Heterogeneous catalysis � catalyst and reactants are in different phases. + Heterogeneous catalysis — catalyst and reactants are in different phases. """ homogeneous_catalysis = "homogeneous_catalysis" """ - Homogeneous catalysis � catalyst and reactants are in the same phase. + Homogeneous catalysis — catalyst and reactants are in the same phase. """ biocatalysis = "biocatalysis" """ - Biocatalysis � use of enzymes or whole cells as catalysts. + Biocatalysis — use of enzymes or whole cells as catalysts. """ electrocatalysis = "electrocatalysis" """ - Electrocatalysis � catalysis of electrochemical reactions. + Electrocatalysis — catalysis of electrochemical reactions. + """ + photocatalysis = "photocatalysis" + """ + Photocatalysis — catalysis of a chemical reaction through the + absorption of sufficient light energy by a photocatalyst. """ hybrid_catalysis = "hybrid_catalysis" """ - Hybrid catalysis � combination of two or more catalytic approaches. + Hybrid catalysis — combination of two or more catalytic approaches. """ other = "other" """ @@ -253,15 +273,15 @@ class ImpregnationTypeEnum(str, Enum): """ wet_impregnation = "wet_impregnation" """ - Wet impregnation � excess solution is used to impregnate the support. + Wet impregnation — excess solution is used to impregnate the support. """ dry_impregnation = "dry_impregnation" """ - Dry impregnation � solution volume equals the pore volume of the support. + Dry impregnation — solution volume equals the pore volume of the support. """ incipient_wetness = "incipient_wetness" """ - Incipient wetness impregnation � synonym for dry impregnation. + Incipient wetness impregnation — synonym for dry impregnation. """ other = "other" """ @@ -307,6 +327,59 @@ class SampleStateEnum(str, Enum): """ +class CatalystFormEnum(str, Enum): + """ + Enumeration of the physical form/presentation of a catalyst as loaded +into a reactor -- a separate axis from CatalysisResearchFieldEnum +(which describes the catalytic regime, e.g. heterogeneous/homogeneous). + """ + thin_film = "thin_film" + """ + A catalyst introduced to the reaction chamber as a thin film on a substrate. + """ + bulk = "bulk" + """ + A catalyst that consists mainly of the active material throughout its volume. + """ + powdered = "powdered" + """ + A catalyst introduced to the reaction chamber as a loose powder. + """ + deposited_sample = "deposited_sample" + """ + A thin film of the catalyst deposited on a substrate for characterization purposes. + """ + supported = "supported" + """ + A catalyst where the active material is dispersed on a support material. + """ + other = "other" + """ + Other catalyst form not covered by the above terms. + """ + + +class CellOperatingModeEnum(str, Enum): + """ + Enumeration of the functional mode of an electrochemical cell, based +on the direction of energy conversion. + """ + galvanic = "galvanic" + """ + An electrochemical cell that converts chemical energy into + electrical energy via a spontaneous reaction. + """ + electrolytic = "electrolytic" + """ + An electrochemical cell that consumes electrical energy to drive + a non-spontaneous reaction. + """ + other = "other" + """ + Other cell operating mode. + """ + + class DatasetThemes(str, Enum): AGRI = "AGRI" """ @@ -424,7 +497,10 @@ class DryingMixin(ConfiguredBaseModel): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', 'mixin': True}) - drying_device: Optional[list[str]] = Field(default=[], description="""Device used for drying (e.g. oven, rotary evaporator).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], 'slot_uri': 'VOC4CAT:0008122'} }) + drying_device: Optional[list[str]] = Field(default=[], description="""Device used for drying (e.g. oven, rotary evaporator).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008122'} }) has_drying_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], 'is_a': 'has_temperature', 'recommended': True, @@ -448,8 +524,10 @@ class CalcinationMixin(ConfiguredBaseModel): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', 'mixin': True}) - has_calcination_temperature_range: Optional[QuantitativeRange] = Field(default=None, description="""Temperature range of the calcination programme (initial -> final temperature), + has_calcination_temperature_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Temperature range of the calcination programme (initial -> final temperature), provided as a QuantitativeRange. Unit: Degree Celsius.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:hasCalcinationTemperatureRange'} }) has_calcination_dwelling_time: Optional[Duration] = Field(default=None, description="""Time held at the final calcination temperature.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], 'is_a': 'has_duration', @@ -459,6 +537,8 @@ class CalcinationMixin(ConfiguredBaseModel): 'MolecularSynthesis', 'XRayAbsorptionSpectroscopy', 'CyclicVoltammetry'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'VOC4CAT:0008123'} }) has_calcination_atmosphere: Optional[list[CalcinationGaseousEnvironment]] = Field(default=[], description="""Gaseous environment maintained during the calcination step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], 'is_a': 'has_atmosphere', @@ -483,7 +563,10 @@ class PrecipitationMixin(ConfiguredBaseModel): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', 'mixin': True}) - precipitating_agent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Chemical agent used to induce precipitation (e.g. NaOH, NH3).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], 'slot_uri': 'VOC4CAT:0008203'} }) + precipitating_agent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Chemical agent used to induce precipitation (e.g. NaOH, NH3).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008203'} }) has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'UVVisSpectroscopy', 'DynamicLightScattering', @@ -507,9 +590,18 @@ class PrecipitationMixin(ConfiguredBaseModel): 'is_a': 'has_temperature', 'recommended': True, 'slot_uri': 'VOC4CAT:0008127'} }) - order_of_addition: Optional[list[str]] = Field(default=[], description="""Order in which reagents or components are combined.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], 'slot_uri': 'VOC4CAT:0008128'} }) - filtration: Optional[list[str]] = Field(default=[], description="""Filtration method used to separate the precipitate (e.g. vacuum filtration).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], 'slot_uri': 'VOC4CAT:0008129'} }) - purification: Optional[list[str]] = Field(default=[], description="""Purification method applied after synthesis (e.g. washing, dialysis).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], 'slot_uri': 'VOC4CAT:0008130'} }) + order_of_addition: Optional[list[str]] = Field(default=[], description="""Order in which reagents or components are combined.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008128'} }) + filtration: Optional[list[str]] = Field(default=[], description="""Filtration method used to separate the precipitate (e.g. vacuum filtration).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008129'} }) + purification: Optional[list[str]] = Field(default=[], description="""Purification method applied after synthesis (e.g. washing, dialysis).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008130'} }) has_aging_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature maintained during the aging step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], 'is_a': 'has_temperature', 'recommended': True, @@ -529,8 +621,13 @@ class ThermalSynthesisMixin(ConfiguredBaseModel): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', 'mixin': True}) - synthesis_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], 'slot_uri': 'VOC4CAT:0000051'} }) - synthesis_duration: Optional[list[Duration]] = Field(default=[], description="""Total duration of the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], 'slot_uri': 'VOC4CAT:0000050'} }) + synthesis_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0000051'} }) + synthesis_duration: Optional[list[Duration]] = Field(default=[], description="""Total duration of the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0000050'} }) has_vessel_type: Optional[list[VesselType]] = Field(default=[], description="""Type of reaction or synthesis vessel used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], 'is_a': 'has_qualitative_attribute', 'recommended': True, @@ -560,8 +657,14 @@ class XRaySourceMixin(ConfiguredBaseModel): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', 'mixin': True}) - xray_source: Optional[list[str]] = Field(default=[], description="""X-ray source used (e.g. Cu K-alpha, Mo K-alpha, synchrotron).""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRaySourceMixin'], 'slot_uri': 'OBI:0001138'} }) - monochromator: Optional[list[str]] = Field(default=[], description="""Monochromator type or configuration used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRaySourceMixin'], 'slot_uri': 'CHMO:0002120'} }) + xray_source: Optional[list[str]] = Field(default=[], description="""X-ray source used (e.g. Cu K-alpha, Mo K-alpha, synchrotron).""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRaySourceMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'OBI:0001138'} }) + monochromator: Optional[list[str]] = Field(default=[], description="""Monochromator type or configuration used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRaySourceMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'CHMO:0002120'} }) class EnergyRangeMixin(ConfiguredBaseModel): @@ -572,8 +675,11 @@ class EnergyRangeMixin(ConfiguredBaseModel): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', 'mixin': True}) - has_energy_range: Optional[QuantitativeRange] = Field(default=None, description="""Energy scan range (minimum -> maximum) as a QuantitativeRange. -Provide unit as a QUDT term (e.g. eV, keV).""", json_schema_extra = { "linkml_meta": {'domain_of': ['EnergyRangeMixin'], 'slot_uri': 'coremeta4cat:hasEnergyRange'} }) + has_energy_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Energy scan range (minimum -> maximum) as a QuantitativeRange. +Provide unit as a QUDT term (e.g. eV, keV).""", json_schema_extra = { "linkml_meta": {'domain_of': ['EnergyRangeMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:hasEnergyRange'} }) class ElectronMicroscopyMixin(ConfiguredBaseModel): @@ -585,10 +691,17 @@ class ElectronMicroscopyMixin(ConfiguredBaseModel): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', 'mixin': True}) - gun_type: Optional[list[str]] = Field(default=[], description="""Type of electron gun (e.g. FEG, thermionic LaB6).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronMicroscopyMixin'], 'slot_uri': 'coremeta4cat:gun_type'} }) + gun_type: Optional[list[str]] = Field(default=[], description="""Type of electron gun (e.g. FEG, thermionic LaB6).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronMicroscopyMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:gun_type'} }) acceleration_voltage: Optional[list[ElectricPotential]] = Field(default=[], description="""Acceleration voltage applied to the electron beam.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronMicroscopyMixin'], + 'is_a': 'has_electric_potential', + 'recommended': True, 'slot_uri': 'coremeta4cat:acceleration_voltage'} }) magnification_setting: Optional[list[float]] = Field(default=[], description="""Magnification setting used for imaging.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronMicroscopyMixin', 'RamanSpectroscopy'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'AFR:0002226'} }) @@ -601,8 +714,10 @@ class TemperatureProgramMixin(ConfiguredBaseModel): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', 'mixin': True}) - has_temperature_range: Optional[QuantitativeRange] = Field(default=None, description="""Temperature programme range (start -> final temperature) as a QuantitativeRange. + has_temperature_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Temperature programme range (start -> final temperature) as a QuantitativeRange. Provide unit as a QUDT term (e.g. Degree Celsius, Kelvin).""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:hasTemperatureRange'} }) has_heating_rate: Optional[list[HeatingRate]] = Field(default=[], description="""Temperature ramp rate during a heating or cooling step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin'], 'is_a': 'has_quantitative_attribute', @@ -622,8 +737,14 @@ class ChromatographyMixin(ConfiguredBaseModel): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', 'mixin': True}) - column_type: Optional[list[str]] = Field(default=[], description="""Type of chromatographic column used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], 'slot_uri': 'coremeta4cat:column_type'} }) - eluent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Eluent or mobile phase used in chromatography.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], 'slot_uri': 'AFRL:0000011'} }) + column_type: Optional[list[str]] = Field(default=[], description="""Type of chromatographic column used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:column_type'} }) + eluent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Eluent or mobile phase used in chromatography.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'AFRL:0000011'} }) has_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Volumetric flow rate of a gas or liquid.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', 'ChromatographyMixin', 'DRIFTS', @@ -636,8 +757,12 @@ class ChromatographyMixin(ConfiguredBaseModel): 'recommended': True, 'slot_uri': 'SIO:000008'} }) external_standard: Optional[list[str]] = Field(default=[], description="""External standard used for quantification or calibration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:external_standard'} }) internal_standard: Optional[list[str]] = Field(default=[], description="""Internal standard used for quantification or calibration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:internal_standard'} }) @@ -649,8 +774,11 @@ class MassRangeMixin(ConfiguredBaseModel): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', 'mixin': True}) - has_mz_range: Optional[QuantitativeRange] = Field(default=None, description="""Mass-to-charge ratio scan range (minimum -> maximum m/z) as a QuantitativeRange. -The unit for m/z is dimensionless (Thomson); set unit to the appropriate QUDT term.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MassRangeMixin'], 'slot_uri': 'coremeta4cat:hasMzRange'} }) + has_mz_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Mass-to-charge ratio scan range (minimum -> maximum m/z) as a QuantitativeRange. +The unit for m/z is dimensionless (Thomson); set unit to the appropriate QUDT term.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MassRangeMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:hasMzRange'} }) class PhotoluminescenceMixin(ConfiguredBaseModel): @@ -662,9 +790,17 @@ class PhotoluminescenceMixin(ConfiguredBaseModel): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', 'mixin': True}) - excitation_wavelength: Optional[list[LengthQuantity]] = Field(default=[], description="""Excitation wavelength used in photoluminescence measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceMixin'], 'slot_uri': 'AFR:0002479'} }) - emission_wavelength: Optional[list[LengthQuantity]] = Field(default=[], description="""Emission wavelength detected in photoluminescence measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceMixin'], 'slot_uri': 'NCIT:C204101'} }) + excitation_wavelength: Optional[list[LengthQuantity]] = Field(default=[], description="""Excitation wavelength used in photoluminescence measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceMixin'], + 'is_a': 'has_length', + 'recommended': True, + 'slot_uri': 'AFR:0002479'} }) + emission_wavelength: Optional[list[LengthQuantity]] = Field(default=[], description="""Emission wavelength detected in photoluminescence measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceMixin'], + 'is_a': 'has_length', + 'recommended': True, + 'slot_uri': 'NCIT:C204101'} }) optical_filter: Optional[list[str]] = Field(default=[], description="""Optical filter used in the emission or excitation path.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:optical_filter'} }) has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', 'PhotoluminescenceMixin', @@ -679,8 +815,8 @@ class PhotoluminescenceMixin(ConfiguredBaseModel): 'DynamicLightScattering', 'SizeExclusionChromatography', 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', 'ChemicalReaction', + 'MaterialisticMixin', 'Microkinetics', 'MonteCarlo', 'AqueousStability'], @@ -698,12 +834,25 @@ class ElectrochemistryMixin(ConfiguredBaseModel): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', 'mixin': True}) - reference_electrode: Optional[list[str]] = Field(default=[], description="""Reference electrode used in electrochemical cell (e.g. Ag/AgCl, RHE).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], 'slot_uri': 'VOC4CAT:0007204'} }) - working_electrode: Optional[list[str]] = Field(default=[], description="""Working electrode used in electrochemical cell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], 'slot_uri': 'VOC4CAT:0007202'} }) - counter_electrode: Optional[list[str]] = Field(default=[], description="""Counter electrode used in electrochemical cell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], 'slot_uri': 'VOC4CAT:0007203'} }) + reference_electrode: Optional[list[str]] = Field(default=[], description="""Reference electrode used in electrochemical cell (e.g. Ag/AgCl, RHE).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007204'} }) + working_electrode: Optional[list[str]] = Field(default=[], description="""Working electrode used in electrochemical cell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007202'} }) + counter_electrode: Optional[list[str]] = Field(default=[], description="""Counter electrode used in electrochemical cell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007203'} }) electrolyte_composition: Optional[list[str]] = Field(default=[], description="""Chemical composition of the electrolyte solution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:electrolyte_composition'} }) electrolyte_concentration: Optional[list[Concentration]] = Field(default=[], description="""Concentration of the electrolyte.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], + 'is_a': 'has_concentration', + 'recommended': True, 'slot_uri': 'coremeta4cat:electrolyte_concentration'} }) has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', 'MolecularSynthesis', @@ -732,8 +881,8 @@ class ElectrochemistryMixin(ConfiguredBaseModel): 'DynamicLightScattering', 'SizeExclusionChromatography', 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', 'ChemicalReaction', + 'MaterialisticMixin', 'Microkinetics', 'MonteCarlo', 'AqueousStability'], @@ -742,16 +891,6 @@ class ElectrochemistryMixin(ConfiguredBaseModel): 'slot_uri': 'SIO:000008'} }) -class Carbonylation(ConfiguredBaseModel): - """ - A chemical reaction in which a carbonyl group (C=O) is introduced into a molecule, typically through the addition of carbon monoxide (CO) to a substrate. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000247', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) - - pass - - class Agent(ConfiguredBaseModel): """ See [DCAT-AP specs:Agent](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Agent) @@ -1490,7 +1629,8 @@ class Activity(ClassifierMixin): 'name': 'title', 'notes': ['not in DCAT-AP']}}}) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', 'AgenticEntity', 'Dataset', 'DefinedTerm', @@ -1661,7 +1801,8 @@ class AgenticEntity(ClassifierMixin): 'notes': ['not in DCAT-AP'], 'range': 'AgenticEntity'}}}) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', 'AgenticEntity', 'Dataset', 'DefinedTerm', @@ -1797,7 +1938,8 @@ class DataGeneratingActivity(Activity): occurred_in: Optional[Surrounding] = Field(default=None, description="""The slot to specify the Surrounding in which an Activity took place.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataGeneratingActivity'], 'in_subset': ['domain_agnostic_core'], 'slot_uri': 'prov:atLocation'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', 'AgenticEntity', 'Dataset', 'DefinedTerm', @@ -1935,74 +2077,36 @@ class DataGeneratingActivity(Activity): 'slot_uri': 'rdf:type'} }) -class Synthesis(DataGeneratingActivity): +class CatalysisDataGeneratingActivity(DataGeneratingActivity): """ - A DataGeneratingActivity in which a catalyst is prepared. - - The preparation protocol is linked via realized_plan using a - PreparationMethod instance. Input materials (Precursors) are linked via - had_input_entity. The resulting catalyst (CatalystSample) is linked via - had_output_entity. + A CoreMeta4Cat specialization of DCAT-AP-PLUS's DataGeneratingActivity + that adds a type designator (activity_designator). Synthesis, + Characterization, and Simulation all specialize this class instead of + DataGeneratingActivity directly, so that when one of them is nested + inside CatalysisDataset.was_generated_by, the LinkML Python loader can + tell which concrete subclass a given entry is meant to be and keep its + subclass-specific fields (e.g. Characterization.realized_plan) rather + than falling back to DataGeneratingActivity's own generic slot + definitions. - The type of synthesis is further specified via rdf_type using an ontology - term (e.g. a VOC4CAT preparation method term), following DCAT-AP-PLUS - Pattern 3. + activity_designator is filled in automatically by LinkML when a class + is instantiated directly (e.g. loading a standalone Synthesis-NNN.yaml + file) -- it does not need to be set by hand there. It only needs to be + set explicitly in the source data when a Synthesis/Characterization/ + Simulation instance is nested inside another object's was_generated_by + list (e.g. in a combined CatalysisDataset file), so the loader knows + which of the three to construct. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'OBI:0000070', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', - 'slot_usage': {'carried_out_by': {'description': 'Equipment or synthesis ' - 'device used to carry out ' - 'this preparation step.\n' - 'Provide a Device instance ' - '(e.g. rotary evaporator, ' - 'autoclave, furnace).', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'carried_out_by', - 'range': 'Device'}, - 'catalyst_measured_properties': {'name': 'catalyst_measured_properties', - 'required': True}, - 'had_input_entity': {'description': 'The Precursor(s) consumed ' - 'during this Synthesis.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'had_input_entity', - 'range': 'Precursor', - 'required': True}, - 'had_output_entity': {'description': 'The CatalystSample ' - 'produced by this ' - 'Synthesis.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'had_output_entity', - 'range': 'CatalystSample', - 'recommended': True}, - 'nominal_composition': {'name': 'nominal_composition', - 'required': True}, - 'realized_plan': {'description': 'The PreparationMethod ' - '(protocol) realized in this ' - 'Synthesis.', - 'name': 'realized_plan', - 'range': 'PreparationMethod', - 'required': True}, - 'storage_conditions': {'name': 'storage_conditions', - 'recommended': True}}}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'abstract': True, + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) - nominal_composition: list[str] = Field(default=..., description="""Nominal elemental or chemical composition of the catalyst (e.g. 5wt% Pt/Al2O3).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Synthesis'], 'slot_uri': 'coremeta4cat:nominal_composition'} }) - catalyst_measured_properties: list[str] = Field(default=..., description="""Key measured properties of the resulting catalyst -(e.g. BET surface area, sieve fraction, molar ratio).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Synthesis'], - 'slot_uri': 'coremeta4cat:catalyst_measured_properties'} }) - storage_conditions: Optional[list[str]] = Field(default=[], description="""Conditions under which the catalyst is stored (e.g. inert atmosphere, 4�C).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Synthesis'], 'recommended': True, 'slot_uri': 'VOC4CAT:0008105'} }) - catalyst_support: Optional[list[str]] = Field(default=[], description="""Support material on which the active phase is deposited (e.g. Al2O3, SiO2).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Synthesis'], 'slot_uri': 'VOC4CAT:0008104'} }) - solvent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Solvent used in a process or sample preparation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Synthesis', - 'NMRSpectroscopy', - 'UVVisSpectroscopy', - 'DynamicLightScattering'], - 'slot_uri': 'VOC4CAT:0007246'} }) - has_sample_pretreatment: Optional[list[SamplePretreatment]] = Field(default=[], description="""Pre-treatment applied to the sample before a process or measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Synthesis', 'Characterization'], - 'is_a': 'has_qualitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) + activity_designator: Literal["CatalysisDataGeneratingActivity"] = Field(default="CatalysisDataGeneratingActivity", description="""Internal type designator for CatalysisDataGeneratingActivity subclasses +(Synthesis, Characterization, Simulation). Only needs to be set by hand +when nesting one of these inside another object's was_generated_by list +(e.g. in a combined CatalysisDataset file) -- LinkML fills it in +automatically when a class is instantiated directly.""", json_schema_extra = { "linkml_meta": {'designates_type': True, + 'domain_of': ['CatalysisDataGeneratingActivity'], + 'slot_uri': 'rdf:type'} }) evaluated_entity: Optional[list[EvaluatedEntity]] = Field(default=[], description="""The slot to specify the Entity about which the DataGeneratingActivity produced information.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataGeneratingActivity'], 'in_subset': ['domain_agnostic_core'], 'is_a': 'had_input_entity', @@ -2013,13 +2117,14 @@ class Synthesis(DataGeneratingActivity): 'is_a': 'had_input_activity', 'recommended': True, 'slot_uri': 'prov:wasInformedBy'} }) - realized_plan: PreparationMethod = Field(default=..., description="""The PreparationMethod (protocol) realized in this Synthesis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataGeneratingActivity'], + realized_plan: Optional[Plan] = Field(default=None, description="""The slot to specify the Plan (i.e. directive information or procedure) that was realized by an Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataGeneratingActivity'], 'in_subset': ['domain_agnostic_core'], 'slot_uri': 'prov:used'} }) occurred_in: Optional[Surrounding] = Field(default=None, description="""The slot to specify the Surrounding in which an Activity took place.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataGeneratingActivity'], 'in_subset': ['domain_agnostic_core'], 'slot_uri': 'prov:atLocation'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', 'AgenticEntity', 'Dataset', 'DefinedTerm', @@ -2114,12 +2219,12 @@ class Synthesis(DataGeneratingActivity): has_part: Optional[list[Activity]] = Field(default=[], description="""The slot to provide an Activity that is part of the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], 'notes': ['not in DCAT-AP'], 'slot_uri': 'dcterms:hasPart'} }) - had_input_entity: list[Precursor] = Field(default=..., description="""The Precursor(s) consumed during this Synthesis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], + had_input_entity: Optional[list[Entity]] = Field(default=[], description="""The slot to specify the Entity that was used as an input of an Activity that is to be changed, consumed or transformed.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], 'in_subset': ['domain_agnostic_core'], 'notes': ['not in DCAT-AP'], 'recommended': True, 'slot_uri': 'prov:used'} }) - had_output_entity: Optional[list[CatalystSample]] = Field(default=[], description="""The CatalystSample produced by this Synthesis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], + had_output_entity: Optional[list[Entity]] = Field(default=[], description="""The slot to specify the Entity that was generated as an output of an Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], 'in_subset': ['domain_agnostic_core'], 'notes': ['not in DCAT-AP'], 'recommended': True, @@ -2129,8 +2234,7 @@ class Synthesis(DataGeneratingActivity): 'notes': ['not in DCAT-AP'], 'recommended': True, 'slot_uri': 'prov:wasInformedBy'} }) - carried_out_by: Optional[list[Device]] = Field(default=[], description="""Equipment or synthesis device used to carry out this preparation step. -Provide a Device instance (e.g. rotary evaporator, autoclave, furnace).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], + carried_out_by: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to specify the AgenticEntity that played a certain part in carrying out the Activity, either via having a specific role, function or disposition that was realized in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], 'in_subset': ['domain_agnostic_core'], 'notes': ['not in DCAT-AP'], 'recommended': True, @@ -2158,70 +2262,331 @@ class Synthesis(DataGeneratingActivity): 'slot_uri': 'rdf:type'} }) -class Characterization(DataGeneratingActivity): +class Synthesis(CatalysisDataGeneratingActivity): """ - A DataGeneratingActivity in which a catalyst sample or catalytic material - is characterized using an analytical technique. + A DataGeneratingActivity in which a catalyst is prepared. - The catalyst sample being characterized is linked via evaluated_entity. - The analytical protocol is linked via realized_plan using a - CharacterizationTechnique instance. The instrument used is linked via - carried_out_by as a Device. + The preparation protocol is linked via realized_plan using a + PreparationMethod instance. Input materials (Precursors) are linked via + had_input_entity. The resulting catalyst (CatalystSample) is linked via + had_output_entity. - The specific technique type is expressed via rdf_type using an ontology - term (e.g. CHMO:0000158 for powder XRD, CHMO:0000404 for XPS), - following DCAT-AP-PLUS Pattern 3 � exactly as NMRSpectroscopy uses - rdf_type: CHMO:0000613. + The type of synthesis is further specified via rdf_type using an ontology + term (e.g. a VOC4CAT preparation method term), following DCAT-AP-PLUS + Pattern 3. """ linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'OBI:0000070', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', - 'slot_usage': {'carried_out_by': {'description': 'The analytical instrument ' - 'used to carry out this ' - 'characterization.\n' + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', + 'slot_usage': {'carried_out_by': {'description': 'Equipment or synthesis ' + 'device used to carry out ' + 'this preparation step.\n' 'Provide a Device instance ' - '(e.g. XRD diffractometer, ' - 'TEM, NMR spectrometer).', + '(e.g. rotary evaporator, ' + 'autoclave, furnace).', 'inlined_as_list': True, 'multivalued': True, 'name': 'carried_out_by', - 'range': 'Device', - 'required': True}, - 'evaluated_entity': {'description': 'The catalyst sample or ' - 'material being ' - 'characterized.', + 'range': 'Device'}, + 'catalyst_measured_properties': {'name': 'catalyst_measured_properties', + 'required': True}, + 'had_input_entity': {'description': 'The Precursor(s) consumed ' + 'during this Synthesis.', 'inlined_as_list': True, 'multivalued': True, - 'name': 'evaluated_entity', - 'range': 'EvaluatedEntity', - 'recommended': True}, - 'rdf_type': {'description': 'The type of characterization ' - 'technique as an ontology term, ' - 'e.g.\n' - 'CHMO:0000158 (powder XRD), ' - 'CHMO:0000404 (XPS), ' - 'VOC4CAT:0000075 (SEM).', - 'name': 'rdf_type', - 'recommended': True}, - 'realized_plan': {'description': 'The ' - 'CharacterizationTechnique ' + 'name': 'had_input_entity', + 'range': 'Precursor', + 'required': True}, + 'had_output_entity': {'description': 'The CatalystSample ' + 'produced by this ' + 'Synthesis.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'had_output_entity', + 'range': 'CatalystSample', + 'recommended': True}, + 'nominal_composition': {'name': 'nominal_composition', + 'required': True}, + 'realized_plan': {'description': 'The PreparationMethod ' '(protocol) realized in this ' - 'Characterization.', + 'Synthesis.', + 'inlined': True, 'name': 'realized_plan', - 'range': 'CharacterizationTechnique', - 'required': True}}}) + 'range': 'PreparationMethod', + 'required': True}, + 'storage_conditions': {'name': 'storage_conditions', + 'recommended': True}}}) - sample_state: Optional[list[SampleStateEnum]] = Field(default=[], description="""Physical state of the sample during characterization.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Characterization'], 'slot_uri': 'coremeta4cat:sample_state'} }) - sample_description: Optional[list[str]] = Field(default=[], description="""Free-text description of the sample used in this characterization.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Characterization'], - 'slot_uri': 'coremeta4cat:sample_description'} }) - sample_preparation: Optional[list[str]] = Field(default=[], description="""Sample preparation steps applied immediately before measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Characterization'], 'slot_uri': 'AFP:0001159'} }) - has_sample_pretreatment: Optional[list[SamplePretreatment]] = Field(default=[], description="""Pre-treatment applied to the sample before a process or measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Synthesis', 'Characterization'], + nominal_composition: list[str] = Field(default=..., description="""Nominal elemental or chemical composition of the catalyst (e.g. 5wt% Pt/Al2O3).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Synthesis'], 'is_a': 'has_qualitative_attribute', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - detector_type: Optional[list[str]] = Field(default=[], description="""Type of detector used in the measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Characterization'], 'slot_uri': 'AFR:0000317'} }) - evaluated_entity: Optional[list[EvaluatedEntity]] = Field(default=[], description="""The catalyst sample or material being characterized.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataGeneratingActivity'], - 'in_subset': ['domain_agnostic_core'], - 'is_a': 'had_input_entity', + 'slot_uri': 'coremeta4cat:nominal_composition'} }) + catalyst_measured_properties: list[str] = Field(default=..., description="""Key measured properties of the resulting catalyst +(e.g. BET surface area, sieve fraction, molar ratio).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Synthesis'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:catalyst_measured_properties'} }) + storage_conditions: Optional[list[str]] = Field(default=[], description="""Conditions under which the catalyst is stored (e.g. inert atmosphere, 4°C).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Synthesis'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008105'} }) + catalyst_support: Optional[list[str]] = Field(default=[], description="""Support material on which the active phase is deposited (e.g. Al2O3, SiO2).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Synthesis'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008104'} }) + solvent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Solvent used in a process or sample preparation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Synthesis', + 'NMRSpectroscopy', + 'UVVisSpectroscopy', + 'DynamicLightScattering'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007246'} }) + has_sample_pretreatment: Optional[list[SamplePretreatment]] = Field(default=[], description="""Pre-treatment applied to the sample before a process or measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Synthesis', 'Characterization'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + activity_designator: Literal["Synthesis"] = Field(default="Synthesis", description="""Internal type designator for CatalysisDataGeneratingActivity subclasses +(Synthesis, Characterization, Simulation). Only needs to be set by hand +when nesting one of these inside another object's was_generated_by list +(e.g. in a combined CatalysisDataset file) -- LinkML fills it in +automatically when a class is instantiated directly.""", json_schema_extra = { "linkml_meta": {'designates_type': True, + 'domain_of': ['CatalysisDataGeneratingActivity'], + 'slot_uri': 'rdf:type'} }) + evaluated_entity: Optional[list[EvaluatedEntity]] = Field(default=[], description="""The slot to specify the Entity about which the DataGeneratingActivity produced information.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataGeneratingActivity'], + 'in_subset': ['domain_agnostic_core'], + 'is_a': 'had_input_entity', + 'recommended': True, + 'slot_uri': 'prov:used'} }) + evaluated_activity: Optional[list[EvaluatedActivity]] = Field(default=[], description="""The slot to specify the Activity about which the DataGeneratingActivity produced information.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataGeneratingActivity'], + 'in_subset': ['domain_agnostic_core'], + 'is_a': 'had_input_activity', + 'recommended': True, + 'slot_uri': 'prov:wasInformedBy'} }) + realized_plan: PreparationMethod = Field(default=..., description="""The PreparationMethod (protocol) realized in this Synthesis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataGeneratingActivity'], + 'in_subset': ['domain_agnostic_core'], + 'slot_uri': 'prov:used'} }) + occurred_in: Optional[Surrounding] = Field(default=None, description="""The slot to specify the Surrounding in which an Activity took place.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataGeneratingActivity'], + 'in_subset': ['domain_agnostic_core'], + 'slot_uri': 'prov:atLocation'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + title: Optional[list[str]] = Field(default=[], description="""The slot to provide a title for the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + 'Activity', + 'AgenticEntity', + 'Any', + 'Attribution', + 'Catalogue', + 'CatalogueRecord', + 'ChecksumAlgorithm', + 'Concept', + 'ConceptScheme', + 'DataService', + 'Dataset', + 'DatasetSeries', + 'DefinedTerm', + 'Distribution', + 'Document', + 'Entity', + 'Frequency', + 'Geometry', + 'Identifier', + 'LegalResource', + 'LicenseDocument', + 'LinguisticSystem', + 'MediaType', + 'MediaTypeOrExtent', + 'PeriodOfTime', + 'Plan', + 'Policy', + 'ProvenanceStatement', + 'QualitativeAttribute', + 'QuantitativeAttribute', + 'Resource', + 'RightsStatement', + 'Role', + 'Standard', + 'SupportiveEntity', + 'Surrounding', + 'TimeInstant'], + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:title'} }) + description: Optional[list[str]] = Field(default=[], description="""The slot to provide a description for the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + 'Activity', + 'AgenticEntity', + 'Any', + 'Attribution', + 'Catalogue', + 'CatalogueRecord', + 'ChecksumAlgorithm', + 'Concept', + 'ConceptScheme', + 'DataService', + 'Dataset', + 'DatasetSeries', + 'Distribution', + 'Document', + 'Entity', + 'Frequency', + 'Geometry', + 'Identifier', + 'LegalResource', + 'LicenseDocument', + 'LinguisticSystem', + 'MediaType', + 'MediaTypeOrExtent', + 'PeriodOfTime', + 'Plan', + 'Policy', + 'ProvenanceStatement', + 'QualitativeAttribute', + 'QuantitativeAttribute', + 'Resource', + 'RightsStatement', + 'Role', + 'Standard', + 'SupportiveEntity', + 'Surrounding', + 'TimeInstant'], + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:description'} }) + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""The slot to provide a secondary identifier of the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'adms:identifier'} }) + has_part: Optional[list[Activity]] = Field(default=[], description="""The slot to provide an Activity that is part of the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:hasPart'} }) + had_input_entity: list[Precursor] = Field(default=..., description="""The Precursor(s) consumed during this Synthesis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'prov:used'} }) + had_output_entity: Optional[list[CatalystSample]] = Field(default=[], description="""The CatalystSample produced by this Synthesis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'prov:generated'} }) + had_input_activity: Optional[list[Activity]] = Field(default=[], description="""The slot to provide a previous Activity that informed the Activity by being causally via a shared participant.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'prov:wasInformedBy'} }) + carried_out_by: Optional[list[Device]] = Field(default=[], description="""Equipment or synthesis device used to carry out this preparation step. +Provide a Device instance (e.g. rotary evaporator, autoclave, furnace).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'prov:wasAssociatedWith'} }) + has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + part_of: Optional[list[Activity]] = Field(default=[], description="""The slot to provide an Activity of which the Activity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'inverse': 'has_part', + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:isPartOf'} }) + type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], + 'slot_uri': 'dcterms:type'} }) + rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'rdf:type'} }) + + +class Characterization(CatalysisDataGeneratingActivity): + """ + A DataGeneratingActivity in which a catalyst sample or catalytic material + is characterized using an analytical technique. + + The catalyst sample being characterized is linked via evaluated_entity. + The analytical protocol is linked via realized_plan using a + CharacterizationTechnique instance. The instrument used is linked via + carried_out_by as a Device. + + The specific technique type is expressed via rdf_type using an ontology + term (e.g. CHMO:0000158 for powder XRD, CHMO:0000404 for XPS), + following DCAT-AP-PLUS Pattern 3 — exactly as NMRSpectroscopy uses + rdf_type: CHMO:0000613. + """ + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'OBI:0000070', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', + 'slot_usage': {'carried_out_by': {'description': 'The analytical instrument ' + 'used to carry out this ' + 'characterization.\n' + 'Provide a Device instance ' + '(e.g. XRD diffractometer, ' + 'TEM, NMR spectrometer).', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'carried_out_by', + 'range': 'Device', + 'required': True}, + 'evaluated_entity': {'description': 'The catalyst sample or ' + 'material being ' + 'characterized.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'evaluated_entity', + 'range': 'EvaluatedEntity', + 'recommended': True}, + 'rdf_type': {'description': 'The type of characterization ' + 'technique as an ontology term, ' + 'e.g.\n' + 'CHMO:0000158 (powder XRD), ' + 'CHMO:0000404 (XPS), ' + 'VOC4CAT:0000075 (SEM).', + 'name': 'rdf_type', + 'recommended': True}, + 'realized_plan': {'description': 'The ' + 'CharacterizationTechnique ' + '(protocol) realized in this ' + 'Characterization.', + 'inlined': True, + 'name': 'realized_plan', + 'range': 'CharacterizationTechnique', + 'required': True}}}) + + sample_state: Optional[list[SampleStateEnum]] = Field(default=[], description="""Physical state of the sample during characterization.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Characterization'], 'slot_uri': 'coremeta4cat:sample_state'} }) + sample_description: Optional[list[str]] = Field(default=[], description="""Free-text description of the sample used in this characterization.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Characterization'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:sample_description'} }) + sample_preparation: Optional[list[str]] = Field(default=[], description="""Sample preparation steps applied immediately before measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Characterization'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'AFP:0001159'} }) + has_sample_pretreatment: Optional[list[SamplePretreatment]] = Field(default=[], description="""Pre-treatment applied to the sample before a process or measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Synthesis', 'Characterization'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + detector_type: Optional[list[str]] = Field(default=[], description="""Type of detector used in the measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Characterization'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'AFR:0000317'} }) + activity_designator: Literal["Characterization"] = Field(default="Characterization", description="""Internal type designator for CatalysisDataGeneratingActivity subclasses +(Synthesis, Characterization, Simulation). Only needs to be set by hand +when nesting one of these inside another object's was_generated_by list +(e.g. in a combined CatalysisDataset file) -- LinkML fills it in +automatically when a class is instantiated directly.""", json_schema_extra = { "linkml_meta": {'designates_type': True, + 'domain_of': ['CatalysisDataGeneratingActivity'], + 'slot_uri': 'rdf:type'} }) + evaluated_entity: Optional[list[EvaluatedEntity]] = Field(default=[], description="""The catalyst sample or material being characterized.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataGeneratingActivity'], + 'in_subset': ['domain_agnostic_core'], + 'is_a': 'had_input_entity', 'recommended': True, 'slot_uri': 'prov:used'} }) evaluated_activity: Optional[list[EvaluatedActivity]] = Field(default=[], description="""The slot to specify the Activity about which the DataGeneratingActivity produced information.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataGeneratingActivity'], @@ -2235,7 +2600,8 @@ class Characterization(DataGeneratingActivity): occurred_in: Optional[Surrounding] = Field(default=None, description="""The slot to specify the Surrounding in which an Activity took place.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataGeneratingActivity'], 'in_subset': ['domain_agnostic_core'], 'slot_uri': 'prov:atLocation'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', 'AgenticEntity', 'Dataset', 'DefinedTerm', @@ -2408,7 +2774,8 @@ class DataAnalysis(DataGeneratingActivity): occurred_in: Optional[Surrounding] = Field(default=None, description="""The slot to specify the Surrounding in which an Activity took place.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataGeneratingActivity'], 'in_subset': ['domain_agnostic_core'], 'slot_uri': 'prov:atLocation'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', 'AgenticEntity', 'Dataset', 'DefinedTerm', @@ -3219,7 +3586,7 @@ class Dataset(ConfiguredBaseModel): 'slot_uri': 'dcterms:publisher'} }) qualified_attribution: Optional[list[Attribution]] = Field(default=[], description="""An Agent having some form of responsibility for the resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset'], 'slot_uri': 'prov:qualifiedAttribution'} }) qualified_relation: Optional[list[Relationship]] = Field(default=[], description="""A description of a relationship with another resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset'], 'slot_uri': 'dcat:qualifiedRelation'} }) - related_resource: Optional[list[Resource]] = Field(default=[], description="""A related resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'ChemicalReaction'], 'slot_uri': 'dcterms:relation'} }) + related_resource: Optional[list[Resource]] = Field(default=[], description="""A related resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'Dataset'], 'slot_uri': 'dcterms:relation'} }) release_date: Optional[date] = Field(default=None, description="""The date of formal issuance (e.g., publication) of the Dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Catalogue', 'Dataset', 'DatasetSeries', 'Distribution'], 'slot_uri': 'dcterms:issued'} }) sample: Optional[list[Distribution]] = Field(default=[], description="""A sample distribution of the dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset'], 'slot_uri': 'adms:sample'} }) @@ -3279,7 +3646,8 @@ class Dataset(ConfiguredBaseModel): was_generated_by: list[DataGeneratingActivity] = Field(default=..., description="""An activity that generated, or provides the business context for, the creation of the dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'EvaluatedEntity'], 'notes': ['stricter than DCAT-AP'], 'slot_uri': 'prov:wasGeneratedBy'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', 'AgenticEntity', 'Dataset', 'DefinedTerm', @@ -3393,7 +3761,7 @@ class AnalysisDataset(Dataset): 'slot_uri': 'dcterms:publisher'} }) qualified_attribution: Optional[list[Attribution]] = Field(default=[], description="""An Agent having some form of responsibility for the resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset'], 'slot_uri': 'prov:qualifiedAttribution'} }) qualified_relation: Optional[list[Relationship]] = Field(default=[], description="""A description of a relationship with another resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset'], 'slot_uri': 'dcat:qualifiedRelation'} }) - related_resource: Optional[list[Resource]] = Field(default=[], description="""A related resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'ChemicalReaction'], 'slot_uri': 'dcterms:relation'} }) + related_resource: Optional[list[Resource]] = Field(default=[], description="""A related resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'Dataset'], 'slot_uri': 'dcterms:relation'} }) release_date: Optional[date] = Field(default=None, description="""The date of formal issuance (e.g., publication) of the Dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Catalogue', 'Dataset', 'DatasetSeries', 'Distribution'], 'slot_uri': 'dcterms:issued'} }) sample: Optional[list[Distribution]] = Field(default=[], description="""A sample distribution of the dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset'], 'slot_uri': 'adms:sample'} }) @@ -3453,7 +3821,8 @@ class AnalysisDataset(Dataset): was_generated_by: list[DataAnalysis] = Field(default=..., description="""An activity that generated, or provides the business context for, the creation of the dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'EvaluatedEntity'], 'notes': ['stricter than DCAT-AP'], 'slot_uri': 'prov:wasGeneratedBy'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', 'AgenticEntity', 'Dataset', 'DefinedTerm', @@ -3682,7 +4051,8 @@ class DefinedTerm(ConfiguredBaseModel): 'in_subset': ['domain_agnostic_core'], 'slot_usage': {'title': {'name': 'title', 'slot_uri': 'schema:name'}}}) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', 'AgenticEntity', 'Dataset', 'DefinedTerm', @@ -3764,7 +4134,8 @@ class Device(AgenticEntity): 'range': 'Identifier', 'required': False}}}) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', 'AgenticEntity', 'Dataset', 'DefinedTerm', @@ -3876,3419 +4247,250 @@ class Device(AgenticEntity): 'slot_uri': 'rdf:type'} }) -class ChemicalReactor(Device): +class Distribution(ConfiguredBaseModel): """ - Abstract Device subclass representing a catalytic reactor vessel. - - Reactor is more specific than the general Device (AgenticEntity): it restricts - carried_out_by on Reaction to dedicated reactor equipment. This semantic - distinction separates analytical instruments (Device) from reaction vessels - (Reactor) in the carried_out_by relationship. - - Concrete subclasses (FixedBedReactor, CSTR, PlugFlowReactor, �) specify - reactor geometry and operating mode. - Linked from Reaction via carried_out_by (restricted to range: Reactor). + See [DCAT-AP specs:Distribution](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Distribution) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'abstract': True, - 'class_uri': 'VOC4CAT:0007018', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) - - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Device.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], - 'slot_uri': 'adms:identifier'} }) - has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[Device]] = Field(default=[], description="""The slot to specify parts of a Device that are themselves Devices.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'inverse': 'has_part', - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:isPartOf'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class ElectrochemicalReactor(ChemicalReactor): - """ - Electrochemical reactor used in electrocatalytic experiments, including - H-cells, flow cells, and membrane electrode assemblies. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000193', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) - - has_cathode: Optional[list[str]] = Field(default=[], description="""The electrode where reduction occurs in an electrochemical cell. It is the negative electrode in an electrolytic cell, while it is the positive electrode in a galvanic cell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemicalReactor'], - 'is_a': 'carried_out_by', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0007254'} }) - has_anode: Optional[list[str]] = Field(default=[], description="""The electrode where oxidation occurs in an electrochemical cell. It is the positive electrode in an electrolytic cell, while it is the negative electrode in a galvanic cell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemicalReactor'], - 'is_a': 'carried_out_by', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0007255'} }) - has_cell_operating_mode: Optional[list[str]] = Field(default=[], description="""The functional mode of an electrochemical cell based on the direction of energy conversion, specifiying wheter the system generates electrical energy from spontaneous reactions or consumes energy to drive non-spontaneous reactions.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemicalReactor'], - 'is_a': 'has_qualitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_active_area: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""In contrast to substrate area, the actual area of a sample or electrode which is active.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemicalReactor'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_faradaic_current: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The current that is flowing through an electrochemical cell and is causing (or is caused by) chemical reactions (charge transfer) occurring at the electrode surfaces.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemicalReactor'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Device.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], - 'slot_uri': 'adms:identifier'} }) - has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[Device]] = Field(default=[], description="""The slot to specify parts of a Device that are themselves Devices.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'inverse': 'has_part', - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:isPartOf'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class CSTR(ChemicalReactor): - """ - Continuous stirred tank reactor (CSTR) � a well-mixed, continuous-flow - reactor operating at steady state. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0007019', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) - - has_stirring_speed: Optional[list[AngularVelocity]] = Field(default=[], description="""Rotational speed of stirring or agitation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularSynthesis', 'CSTR'], - 'is_a': 'has_angular_velocity', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR', 'MaterialisticMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_stirrer_type: Optional[list[str]] = Field(default=[], description="""The category of mechanical or magnetic agitation device used to ensure homogeneous mixing within a reaction system or mixing vessel, such as a magnetic stirrer or an overhead mechanical (steel shaft) stirrer.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR'], - 'is_a': 'has_qualitative_attribute', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008113'} }) - has_stirrer_diameter: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The effective diameter of the stirrer. Typically expressed as the distance across the rotating blade or mixing head from one tip to the opposite tip.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008115'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Device.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], - 'slot_uri': 'adms:identifier'} }) - has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[Device]] = Field(default=[], description="""The slot to specify parts of a Device that are themselves Devices.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'inverse': 'has_part', - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:isPartOf'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class PlugFlowReactor(ChemicalReactor): - """ - Plug flow reactor (PFR) � a tubular reactor in which reactant composition - varies along the axis with no axial mixing. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0007102', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) - - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Device.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], - 'slot_uri': 'adms:identifier'} }) - has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[Device]] = Field(default=[], description="""The slot to specify parts of a Device that are themselves Devices.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'inverse': 'has_part', - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:isPartOf'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class Autoclave(ChemicalReactor): - """ - Autoclave reactor � a sealed pressure vessel for batch reactions at - elevated temperature and/or pressure. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'NCIT:C93052', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) - - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Device.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], - 'slot_uri': 'adms:identifier'} }) - has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[Device]] = Field(default=[], description="""The slot to specify parts of a Device that are themselves Devices.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'inverse': 'has_part', - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:isPartOf'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class SlurryReactor(ChemicalReactor): - """ - Slurry reactor � a three-phase reactor in which catalyst particles are - suspended in a liquid phase through which gas is bubbled. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:SlurryReactor', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) - - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Device.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], - 'slot_uri': 'adms:identifier'} }) - has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[Device]] = Field(default=[], description="""The slot to specify parts of a Device that are themselves Devices.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'inverse': 'has_part', - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:isPartOf'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class Microreactor(ChemicalReactor): - """ - Microreactor � a miniaturised flow reactor with characteristic dimensions - in the sub-millimetre range, enabling precise thermal control and rapid - screening. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000234', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) - - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Device.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], - 'slot_uri': 'adms:identifier'} }) - has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[Device]] = Field(default=[], description="""The slot to specify parts of a Device that are themselves Devices.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'inverse': 'has_part', - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:isPartOf'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class FixedBedReactor(ChemicalReactor): - """ - Fixed bed reactor � a tubular reactor packed with a stationary catalyst bed. - The most common reactor type in heterogeneous catalysis testing. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:FixedBedReactor', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) - - has_catalyst_particle_size: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""A measure of the characteristic linear dimension of a particle in a sample, typically reported as diameter, equivalent diameter, or another size metric determined by an appropriate measurement method.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FixedBedReactor'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008212'} }) - has_catalyst_bed_volume: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The bulk volume taken up by the catalyst and potential diluent in a fixed bed reactor.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FixedBedReactor'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0007021'} }) - has_catalyst_dilution_material: Optional[list[QualitativeAttribute]] = Field(default=[], description="""An inert solid mixed with catalyst particles in a fixed bed to modify bed properties (e.g., improve heat transfer, hydrodynamics or isothermicity) without participating in the reaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FixedBedReactor'], - 'is_a': 'has_qualitative_attribute', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008218'} }) - has_catalyst_bed_height: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The axial length of the packed catalyst section in a reactor, measured along the direction of flow between the defined bed boundaries.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FixedBedReactor'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008217'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Device.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], - 'slot_uri': 'adms:identifier'} }) - has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[Device]] = Field(default=[], description="""The slot to specify parts of a Device that are themselves Devices.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'inverse': 'has_part', - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:isPartOf'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class FluidizedBedReactor(ChemicalReactor): - """ - Fluidized bed reactor � a reactor in which the catalyst particles are - suspended in an upward-flowing gas or liquid stream. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:FluidizedBedReactor', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) - - gas_distributor_type: Optional[list[str]] = Field(default=[], description="""Type or design of the gas distributor plate in a fluidized bed reactor.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FluidizedBedReactor'], - 'slot_uri': 'coremeta4cat:gas_distributor_type'} }) - bed_expansion_height: Optional[list[float]] = Field(default=[], description="""Height of bed expansion above the settled bed height under operating conditions.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FluidizedBedReactor'], - 'slot_uri': 'coremeta4cat:bed_expansion_height', - 'unit': {'ucum_code': 'cm'}} }) - bubble_size_distribution: Optional[str] = Field(default=None, description="""Description or characterization of bubble size distribution in the fluidized bed.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FluidizedBedReactor'], - 'slot_uri': 'coremeta4cat:bubble_size_distribution'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Device.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], - 'slot_uri': 'adms:identifier'} }) - has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[Device]] = Field(default=[], description="""The slot to specify parts of a Device that are themselves Devices.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'inverse': 'has_part', - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:isPartOf'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class Distribution(ConfiguredBaseModel): - """ - See [DCAT-AP specs:Distribution](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Distribution) - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcat:Distribution', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', - 'slot_usage': {'access_URL': {'description': 'A URL that gives access to a ' - 'Distribution of the Dataset.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'access_URL', - 'range': 'Resource', - 'required': True, - 'slot_uri': 'dcat:accessURL'}, - 'access_service': {'description': 'A data service that gives ' - 'access to the distribution ' - 'of the dataset.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'access_service', - 'range': 'DataService', - 'required': False, - 'slot_uri': 'dcat:accessService'}, - 'applicable_legislation': {'description': 'The legislation ' - 'that mandates the ' - 'creation or ' - 'management of the ' - 'Distribution.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'applicable_legislation', - 'range': 'LegalResource', - 'required': False, - 'slot_uri': 'dcatap:applicableLegislation'}, - 'availability': {'description': 'An indication how long it is ' - 'planned to keep the ' - 'Distribution of the Dataset ' - 'available.', - 'inlined_as_list': False, - 'multivalued': False, - 'name': 'availability', - 'range': 'Concept', - 'recommended': True, - 'required': False, - 'slot_uri': 'dcatap:availability'}, - 'byte_size': {'description': 'The size of a Distribution in ' - 'bytes.', - 'inlined_as_list': False, - 'multivalued': False, - 'name': 'byte_size', - 'range': 'nonNegativeInteger', - 'required': False, - 'slot_uri': 'dcat:byteSize'}, - 'checksum': {'description': 'A mechanism that can be used to ' - 'verify that the contents of a ' - 'distribution have not changed.', - 'inlined_as_list': True, - 'multivalued': False, - 'name': 'checksum', - 'range': 'Checksum', - 'required': False, - 'slot_uri': 'spdx:checksum'}, - 'compression_format': {'description': 'The format of the file ' - 'in which the data is ' - 'contained in a ' - 'compressed form, e.g. ' - 'to reduce the size of ' - 'the downloadable file.', - 'inlined_as_list': True, - 'multivalued': False, - 'name': 'compression_format', - 'range': 'MediaType', - 'required': False, - 'slot_uri': 'dcat:compressFormat'}, - 'description': {'description': 'A free-text account of the ' - 'Distribution.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'description', - 'range': 'string', - 'recommended': True, - 'required': False, - 'slot_uri': 'dcterms:description'}, - 'documentation': {'description': 'A page or document about ' - 'this Distribution.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'documentation', - 'range': 'Document', - 'required': False, - 'slot_uri': 'foaf:page'}, - 'download_URL': {'description': 'A URL that is a direct link ' - 'to a downloadable file in a ' - 'given format.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'download_URL', - 'range': 'Resource', - 'required': False, - 'slot_uri': 'dcat:downloadURL'}, - 'format': {'description': 'The file format of the ' - 'Distribution.', - 'inlined_as_list': True, - 'multivalued': False, - 'name': 'format', - 'range': 'MediaTypeOrExtent', - 'recommended': True, - 'required': False, - 'slot_uri': 'dcterms:format'}, - 'has_policy': {'description': 'The policy expressing the ' - 'rights associated with the ' - 'distribution if using the ' - '[[ODRL]] vocabulary.', - 'inlined_as_list': True, - 'multivalued': False, - 'name': 'has_policy', - 'range': 'Policy', - 'required': False, - 'slot_uri': 'odrl:hasPolicy'}, - 'language': {'description': 'A language used in the ' - 'Distribution.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'language', - 'range': 'LinguisticSystem', - 'required': False, - 'slot_uri': 'dcterms:language'}, - 'licence': {'description': 'A licence under which the ' - 'Distribution is made available.', - 'inlined_as_list': True, - 'multivalued': False, - 'name': 'licence', - 'range': 'LicenseDocument', - 'required': False, - 'slot_uri': 'dcterms:license'}, - 'linked_schemas': {'description': 'An established schema to ' - 'which the described ' - 'Distribution conforms.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'linked_schemas', - 'range': 'Standard', - 'required': False, - 'slot_uri': 'dcterms:conformsTo'}, - 'media_type': {'description': 'The media type of the ' - 'Distribution as defined in the ' - 'official register of media ' - 'types managed by IANA.', - 'inlined_as_list': False, - 'multivalued': False, - 'name': 'media_type', - 'range': 'MediaType', - 'required': False, - 'slot_uri': 'dcat:mediaType'}, - 'modification_date': {'description': 'The most recent date on ' - 'which the Distribution ' - 'was changed or modified.', - 'inlined_as_list': False, - 'multivalued': False, - 'name': 'modification_date', - 'range': 'date', - 'required': False, - 'slot_uri': 'dcterms:modified'}, - 'packaging_format': {'description': 'The format of the file in ' - 'which one or more data ' - 'files are grouped ' - 'together, e.g. to enable ' - 'a set of related files to ' - 'be downloaded together.', - 'inlined_as_list': True, - 'multivalued': False, - 'name': 'packaging_format', - 'range': 'MediaType', - 'required': False, - 'slot_uri': 'dcat:packageFormat'}, - 'release_date': {'description': 'The date of formal issuance ' - '(e.g., publication) of the ' - 'Distribution.', - 'inlined_as_list': False, - 'multivalued': False, - 'name': 'release_date', - 'range': 'date', - 'required': False, - 'slot_uri': 'dcterms:issued'}, - 'rights': {'description': 'A statement that specifies rights ' - 'associated with the Distribution.', - 'inlined_as_list': True, - 'multivalued': False, - 'name': 'rights', - 'range': 'RightsStatement', - 'required': False, - 'slot_uri': 'dcterms:rights'}, - 'spatial_resolution': {'description': 'The minimum spatial ' - 'separation resolvable ' - 'in a dataset ' - 'distribution, measured ' - 'in meters.', - 'inlined_as_list': False, - 'multivalued': False, - 'name': 'spatial_resolution', - 'range': 'decimal', - 'required': False, - 'slot_uri': 'dcat:spatialResolutionInMeters'}, - 'status': {'description': 'The status of the distribution in ' - 'the context of maturity lifecycle.', - 'inlined_as_list': True, - 'multivalued': False, - 'name': 'status', - 'range': 'Concept', - 'required': False, - 'slot_uri': 'adms:status'}, - 'temporal_resolution': {'description': 'The minimum time ' - 'period resolvable in ' - 'the dataset ' - 'distribution.', - 'inlined_as_list': True, - 'multivalued': False, - 'name': 'temporal_resolution', - 'range': 'duration', - 'required': False, - 'slot_uri': 'dcat:temporalResolution'}, - 'title': {'description': 'A name given to the Distribution.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'title', - 'range': 'string', - 'required': False, - 'slot_uri': 'dcterms:title'}}}) - - access_URL: list[Resource] = Field(default=..., description="""A URL that gives access to a Distribution of the Dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'dcat:accessURL'} }) - access_service: Optional[list[DataService]] = Field(default=[], description="""A data service that gives access to the distribution of the dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'dcat:accessService'} }) - applicable_legislation: Optional[list[LegalResource]] = Field(default=[], description="""The legislation that mandates the creation or management of the Distribution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Catalogue', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution'], - 'slot_uri': 'dcatap:applicableLegislation'} }) - availability: Optional[Concept] = Field(default=None, description="""An indication how long it is planned to keep the Distribution of the Dataset available.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], - 'recommended': True, - 'slot_uri': 'dcatap:availability'} }) - byte_size: Optional[int] = Field(default=None, description="""The size of a Distribution in bytes.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'dcat:byteSize'} }) - checksum: Optional[Checksum] = Field(default=None, description="""A mechanism that can be used to verify that the contents of a distribution have not changed.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'spdx:checksum'} }) - compression_format: Optional[MediaType] = Field(default=None, description="""The format of the file in which the data is contained in a compressed form, e.g. to reduce the size of the downloadable file.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'dcat:compressFormat'} }) - description: Optional[list[str]] = Field(default=[], description="""A free-text account of the Distribution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'recommended': True, - 'slot_uri': 'dcterms:description'} }) - documentation: Optional[list[Document]] = Field(default=[], description="""A page or document about this Distribution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataService', 'Dataset', 'Distribution'], - 'slot_uri': 'foaf:page'} }) - download_URL: Optional[list[Resource]] = Field(default=[], description="""A URL that is a direct link to a downloadable file in a given format.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'dcat:downloadURL'} }) - format: Optional[MediaTypeOrExtent] = Field(default=None, description="""The file format of the Distribution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataService', 'Distribution'], - 'recommended': True, - 'slot_uri': 'dcterms:format'} }) - has_policy: Optional[Policy] = Field(default=None, description="""The policy expressing the rights associated with the distribution if using the [[ODRL]] vocabulary.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'odrl:hasPolicy'} }) - language: Optional[list[LinguisticSystem]] = Field(default=[], description="""A language used in the Distribution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Catalogue', 'CatalogueRecord', 'Dataset', 'Distribution'], - 'slot_uri': 'dcterms:language'} }) - licence: Optional[LicenseDocument] = Field(default=None, description="""A licence under which the Distribution is made available.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Catalogue', 'DataService', 'Distribution'], - 'slot_uri': 'dcterms:license'} }) - linked_schemas: Optional[list[Standard]] = Field(default=[], description="""An established schema to which the described Distribution conforms.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'dcterms:conformsTo'} }) - media_type: Optional[MediaType] = Field(default=None, description="""The media type of the Distribution as defined in the official register of media types managed by IANA.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'dcat:mediaType'} }) - modification_date: Optional[date] = Field(default=None, description="""The most recent date on which the Distribution was changed or modified.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Catalogue', - 'CatalogueRecord', - 'Dataset', - 'DatasetSeries', - 'Distribution'], - 'slot_uri': 'dcterms:modified'} }) - packaging_format: Optional[MediaType] = Field(default=None, description="""The format of the file in which one or more data files are grouped together, e.g. to enable a set of related files to be downloaded together.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'dcat:packageFormat'} }) - release_date: Optional[date] = Field(default=None, description="""The date of formal issuance (e.g., publication) of the Distribution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Catalogue', 'Dataset', 'DatasetSeries', 'Distribution'], - 'slot_uri': 'dcterms:issued'} }) - rights: Optional[RightsStatement] = Field(default=None, description="""A statement that specifies rights associated with the Distribution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Catalogue', 'Distribution'], 'slot_uri': 'dcterms:rights'} }) - spatial_resolution: Optional[Decimal] = Field(default=None, description="""The minimum spatial separation resolvable in a dataset distribution, measured in meters.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'Distribution'], - 'slot_uri': 'dcat:spatialResolutionInMeters'} }) - status: Optional[Concept] = Field(default=None, description="""The status of the distribution in the context of maturity lifecycle.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'adms:status'} }) - temporal_resolution: Optional[str] = Field(default=None, description="""The minimum time period resolvable in the dataset distribution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'Distribution'], - 'slot_uri': 'dcat:temporalResolution'} }) - title: Optional[list[str]] = Field(default=[], description="""A name given to the Distribution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - - -class Entity(ClassifierMixin): - """ - A physical, digital, conceptual, or other kind of thing with some fixed aspects; entities may be real or imaginary. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Entity', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', - 'in_subset': ['domain_agnostic_core'], - 'mixins': ['ClassifierMixin'], - 'slot_usage': {'description': {'description': 'The slot to provide a ' - 'description for the Entity.', - 'name': 'description'}, - 'has_part': {'description': 'A slot to provide a part of the ' - 'Entity.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'has_part', - 'range': 'Entity'}, - 'other_identifier': {'description': 'A slot to provide a ' - 'secondary identifier of ' - 'the Entity.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'other_identifier', - 'range': 'Identifier', - 'required': False}, - 'part_of': {'description': 'The slot to specify an Entity of ' - 'which the Entity is a part.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'part_of', - 'notes': ['not in DCAT-AP'], - 'range': 'Entity'}, - 'title': {'description': 'The slot to provide a title for the ' - 'Entity.', - 'name': 'title'}}}) - - title: Optional[str] = Field(default=None, description="""The slot to provide a title for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""The slot to provide a description for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], - 'slot_uri': 'adms:identifier'} }) - has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[Entity]] = Field(default=[], description="""A slot to provide a part of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'inverse': 'has_part', - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:isPartOf'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class EvaluatedActivity(Activity): - """ - An activity or process that is being evaluated in a DataGeneratingActivity. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Activity', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', - 'in_subset': ['domain_agnostic_core'], - 'slot_usage': {'other_identifier': {'description': 'A slot to provide a ' - 'secondary identifier of ' - 'the EvaluatedActivity.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'other_identifier', - 'range': 'Identifier', - 'required': False}}}) - - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - title: Optional[list[str]] = Field(default=[], description="""The slot to provide a title for the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[list[str]] = Field(default=[], description="""The slot to provide a description for the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:description'} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the EvaluatedActivity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'adms:identifier'} }) - has_part: Optional[list[Activity]] = Field(default=[], description="""The slot to provide an Activity that is part of the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:hasPart'} }) - had_input_entity: Optional[list[Entity]] = Field(default=[], description="""The slot to specify the Entity that was used as an input of an Activity that is to be changed, consumed or transformed.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], - 'in_subset': ['domain_agnostic_core'], - 'notes': ['not in DCAT-AP'], - 'recommended': True, - 'slot_uri': 'prov:used'} }) - had_output_entity: Optional[list[Entity]] = Field(default=[], description="""The slot to specify the Entity that was generated as an output of an Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], - 'in_subset': ['domain_agnostic_core'], - 'notes': ['not in DCAT-AP'], - 'recommended': True, - 'slot_uri': 'prov:generated'} }) - had_input_activity: Optional[list[Activity]] = Field(default=[], description="""The slot to provide a previous Activity that informed the Activity by being causally via a shared participant.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], - 'in_subset': ['domain_agnostic_core'], - 'notes': ['not in DCAT-AP'], - 'recommended': True, - 'slot_uri': 'prov:wasInformedBy'} }) - carried_out_by: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to specify the AgenticEntity that played a certain part in carrying out the Activity, either via having a specific role, function or disposition that was realized in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], - 'in_subset': ['domain_agnostic_core'], - 'notes': ['not in DCAT-AP'], - 'recommended': True, - 'slot_uri': 'prov:wasAssociatedWith'} }) - has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'notes': ['not in DCAT-AP'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'notes': ['not in DCAT-AP'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - part_of: Optional[list[Activity]] = Field(default=[], description="""The slot to provide an Activity of which the Activity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'inverse': 'has_part', - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:isPartOf'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class CatalyticReaction(EvaluatedActivity): - """ - An EvaluatedActivity representing the catalytic reaction being studied. - - Reaction is NOT a DataGeneratingActivity � it is the catalytic process - being observed, not the process that generates the dataset. A CatalysisDataset - is linked to the Reaction it is about via is_about_activity. - - For operando experiments (e.g. in-situ XRD during a reaction), the dataset - carries both: - was_generated_by: Characterization (the measurement producing data) - is_about_activity: Reaction (the catalytic process being monitored) - - The reactor is linked via carried_out_by as a Reactor (Device). - Reactants are linked via had_input_entity. The type of catalytic reaction - (e.g. ammonia synthesis, CO oxidation) is expressed via rdf_type using a - voc4cat or ChemO term. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'SIO:010345', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/', - 'slot_usage': {'carried_out_by': {'description': 'The reactor in which the ' - 'Reaction takes place.\n' - 'Must be a Reactor instance ' - '(a Device subclass specific ' - 'to catalytic\n' - 'reaction vessels, e.g. ' - 'FixedBedReactor, CSTR, ' - 'Autoclave).', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'carried_out_by', - 'range': 'ChemicalReactor', - 'required': True}, - 'had_input_entity': {'description': 'The reactant chemicals or ' - 'feeds entering the ' - 'reactor.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'had_input_entity', - 'range': 'EvaluatedEntity', - 'recommended': True}, - 'product_identification_method': {'description': 'The ' - 'analytical ' - 'method used ' - 'to identify ' - 'and/or ' - 'quantify ' - 'reaction ' - 'products.\n' - 'Should ' - 'reference a ' - 'CharacterizationTechnique ' - 'instance ' - '(e.g. GCMS, ' - 'HPLC_MS).\n' - 'The abstract ' - 'stub ' - 'ProductIdentificationMethod ' - 'is retained ' - 'for backward ' - 'compatibility.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'product_identification_method', - 'range': 'ProductIdentificationMethod', - 'required': True}, - 'rdf_type': {'description': 'The type of catalytic reaction as ' - 'an ontology term (e.g. ' - 'VOC4CAT:0007010\n' - 'for a specific reaction type, or ' - 'a ChemO/RXNO term).', - 'name': 'rdf_type', - 'recommended': True}}}) - - catalyst_quantity: list[Mass] = Field(default=..., description="""Mass of catalyst loaded into the reactor.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalyticReaction'], - 'slot_uri': 'coremeta4cat:catalyst_quantity'} }) - reactant: list[ChemicalEntity] = Field(default=..., description="""Reactant(s) or feed chemicals used in the reaction. Provide a ChemicalEntity -instance with inchikey, smiles, or iupac_name. For feed mixtures, list each -component as a separate ChemicalEntity and record composition via has_concentration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalyticReaction'], 'slot_uri': 'VOC4CAT:0000101'} }) - has_catalyst_type: Optional[list[CatalystType]] = Field(default=[], description="""Type of catalyst used (e.g. heterogeneous, homogeneous, biocatalyst). -For heterogeneous catalysts, use voc4cat terms where available.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalyticReaction'], - 'recommended': True, - 'slot_uri': 'VOC4CAT:0007014'} }) - has_reaction_type: Optional[list[ReactionType]] = Field(default=[], description="""A group of chemical reactions with common conditions or reactants, e.g. Oxidation, Hydrogenation, Reduction, Cracking.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalyticReaction'], - 'recommended': True, - 'slot_uri': 'VOC4CAT:0007010'} }) - reactor_temperature_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Temperature range in the reactor during the reaction, provided as a -QuantitativeRange with min_value and max_value (unit_code: \"Cel\"). -For a single set-point, set min_value equal to max_value.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalyticReaction'], 'slot_uri': 'VOC4CAT:0007032'} }) - has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', - 'MolecularSynthesis', - 'ElectrochemistryMixin', - 'PowderXRD', - 'XPS', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'Thermogravimetry', - 'CatalyticReaction'], - 'is_a': 'has_qualitative_attribute', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0007809'} }) - experiment_pressure: Optional[list[Pressure]] = Field(default=[], description="""Total pressure in the reactor during the experiment.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalyticReaction'], 'slot_uri': 'VOC4CAT:0000118'} }) - feed_composition_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Feed composition range studied, provided as a QuantitativeRange. -Express concentration bounds in an appropriate unit (e.g. \"mol/L\", \"%\" for -vol% or mol%). For fixed-composition experiments use reactant.has_concentration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalyticReaction'], - 'slot_uri': 'coremeta4cat:feed_composition_range'} }) - has_experiment_duration: Optional[Duration] = Field(default=None, description="""Total duration of the experiment or measurement run.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', 'CatalyticReaction'], - 'is_a': 'has_duration', - 'slot_uri': 'SIO:000008'} }) - product_identification_method: list[ProductIdentificationMethod] = Field(default=..., description="""The analytical method used to identify and/or quantify reaction products. -Should reference a CharacterizationTechnique instance (e.g. GCMS, HPLC_MS). -The abstract stub ProductIdentificationMethod is retained for backward compatibility.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalyticReaction'], - 'slot_uri': 'coremeta4cat:product_identification_method'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - title: Optional[list[str]] = Field(default=[], description="""The slot to provide a title for the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[list[str]] = Field(default=[], description="""The slot to provide a description for the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:description'} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the EvaluatedActivity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'adms:identifier'} }) - has_part: Optional[list[Activity]] = Field(default=[], description="""The slot to provide an Activity that is part of the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:hasPart'} }) - had_input_entity: Optional[list[EvaluatedEntity]] = Field(default=[], description="""The reactant chemicals or feeds entering the reactor.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], - 'in_subset': ['domain_agnostic_core'], - 'notes': ['not in DCAT-AP'], - 'recommended': True, - 'slot_uri': 'prov:used'} }) - had_output_entity: Optional[list[Entity]] = Field(default=[], description="""The slot to specify the Entity that was generated as an output of an Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], - 'in_subset': ['domain_agnostic_core'], - 'notes': ['not in DCAT-AP'], - 'recommended': True, - 'slot_uri': 'prov:generated'} }) - had_input_activity: Optional[list[Activity]] = Field(default=[], description="""The slot to provide a previous Activity that informed the Activity by being causally via a shared participant.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], - 'in_subset': ['domain_agnostic_core'], - 'notes': ['not in DCAT-AP'], - 'recommended': True, - 'slot_uri': 'prov:wasInformedBy'} }) - carried_out_by: list[ChemicalReactor] = Field(default=..., description="""The reactor in which the Reaction takes place. -Must be a Reactor instance (a Device subclass specific to catalytic -reaction vessels, e.g. FixedBedReactor, CSTR, Autoclave).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], - 'in_subset': ['domain_agnostic_core'], - 'notes': ['not in DCAT-AP'], - 'recommended': True, - 'slot_uri': 'prov:wasAssociatedWith'} }) - has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'notes': ['not in DCAT-AP'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'notes': ['not in DCAT-AP'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - part_of: Optional[list[Activity]] = Field(default=[], description="""The slot to provide an Activity of which the Activity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'inverse': 'has_part', - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:isPartOf'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The type of catalytic reaction as an ontology term (e.g. VOC4CAT:0007010 -for a specific reaction type, or a ChemO/RXNO term).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class EvaluatedEntity(Entity): - """ - An Entity that is being evaluated in a DataGeneratingActivity. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Entity', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', - 'in_subset': ['domain_agnostic_core'], - 'slot_usage': {'description': {'description': 'The slot to provide a ' - 'description for the ' - 'EvaluatedEntity.', - 'name': 'description'}, - 'other_identifier': {'description': 'A slot to provide a ' - 'secondary identifier of ' - 'the EvaluatedEntity.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'other_identifier', - 'range': 'Identifier', - 'required': False}, - 'title': {'description': 'The slot to provide a title for the ' - 'EvaluatedEntity.', - 'name': 'title'}, - 'was_generated_by': {'description': 'A slot to provide the ' - 'Activity which created ' - 'the EvaluatedEntity.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'was_generated_by', - 'range': 'Activity'}}}) - - was_generated_by: Optional[list[Activity]] = Field(default=[], description="""A slot to provide the Activity which created the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'EvaluatedEntity'], 'slot_uri': 'prov:wasGeneratedBy'} }) - title: Optional[str] = Field(default=None, description="""The slot to provide a title for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""The slot to provide a description for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], - 'slot_uri': 'adms:identifier'} }) - has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[Entity]] = Field(default=[], description="""A slot to provide a part of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'inverse': 'has_part', - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:isPartOf'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class AnalysisSourceData(EvaluatedEntity): - """ - Information that was evaluated within a DataAnalysis. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Entity', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', - 'in_subset': ['domain_agnostic_core'], - 'slot_usage': {'was_generated_by': {'description': 'A slot to provide the ' - 'Activity which created ' - 'the AnalysisSourceData.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'was_generated_by', - 'range': 'DataGeneratingActivity'}}}) - - was_generated_by: Optional[list[DataGeneratingActivity]] = Field(default=[], description="""A slot to provide the Activity which created the AnalysisSourceData.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'EvaluatedEntity'], 'slot_uri': 'prov:wasGeneratedBy'} }) - title: Optional[str] = Field(default=None, description="""The slot to provide a title for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""The slot to provide a description for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], - 'slot_uri': 'adms:identifier'} }) - has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[Entity]] = Field(default=[], description="""A slot to provide a part of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'inverse': 'has_part', - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:isPartOf'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class Kind(ConfiguredBaseModel): - """ - See [DCAT-AP specs:Kind](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Kind) - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'vcard:Kind', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) - - pass - - -class Location(ConfiguredBaseModel): - """ - See [DCAT-AP specs:Location](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Location) - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcterms:Location', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', - 'slot_usage': {'bbox': {'description': 'The geographic bounding box of a ' - 'resource.', - 'inlined_as_list': False, - 'multivalued': False, - 'name': 'bbox', - 'range': 'string', - 'recommended': True, - 'required': False, - 'slot_uri': 'dcat:bbox'}, - 'centroid': {'description': 'The geographic center (centroid) ' - 'of a resource.', - 'inlined_as_list': False, - 'multivalued': False, - 'name': 'centroid', - 'range': 'string', - 'recommended': True, - 'required': False, - 'slot_uri': 'dcat:centroid'}, - 'geometry': {'description': 'The corresponding geometry for a ' - 'resource.', - 'inlined_as_list': False, - 'multivalued': False, - 'name': 'geometry', - 'range': 'Geometry', - 'required': False, - 'slot_uri': 'locn:geometry'}}}) - - bbox: Optional[str] = Field(default=None, description="""The geographic bounding box of a resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Location'], 'recommended': True, 'slot_uri': 'dcat:bbox'} }) - centroid: Optional[str] = Field(default=None, description="""The geographic center (centroid) of a resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Location'], 'recommended': True, 'slot_uri': 'dcat:centroid'} }) - geometry: Optional[Geometry] = Field(default=None, description="""The corresponding geometry for a resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Location'], 'slot_uri': 'locn:geometry'} }) - - -class Plan(ClassifierMixin): - """ - A piece of information that specifies how an activity has to be carried out by its agents including what kind of steps have to be taken and what kind of parameters have to be met/set. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'aliases': ['Plan Specification', 'Method', 'Procedure'], - 'class_uri': 'prov:Plan', - 'examples': [{'description': 'We assigned the structure of sample CRS-37013 ' - 'using a 13C NMR (CHMO:0000595) and the ' - 'settings: pulse sequence: zgpg30, temperature: ' - '298.0 K, number of scans: 1024, Solvent : ' - 'chloroform-D1 (CDCl3).'}], - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', - 'in_subset': ['domain_agnostic_core'], - 'mixins': ['ClassifierMixin']}) - - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class PreparationMethod(Plan): - """ - An abstract Plan describing the protocol used to prepare a catalyst. - Concrete subclasses (Impregnation, CoPrecipitation, �) specify the - method-specific parameters. Linked from Synthesis via realized_plan. - - The specific preparation method type should additionally be expressed - via rdf_type on the Synthesis activity using a voc4cat term - (e.g. VOC4CAT:0007016 for preparation method). - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'abstract': True, - 'class_uri': 'VOC4CAT:0007016', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/'}) - - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class Impregnation(PreparationMethod, CalcinationMixin, DryingMixin): - """ - Catalyst preparation by impregnation: a solution of the active phase - precursor is brought into contact with the support material. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0007028', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', - 'mixins': ['DryingMixin', 'CalcinationMixin']}) - - impregnation_type: Optional[list[ImpregnationTypeEnum]] = Field(default=[], description="""Type of impregnation used (wet, dry, incipient wetness).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Impregnation'], 'slot_uri': 'VOC4CAT:0008119'} }) - impregnation_duration: Optional[list[Duration]] = Field(default=[], description="""Duration of the impregnation step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Impregnation'], 'slot_uri': 'VOC4CAT:0008120'} }) - impregnation_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature during the impregnation step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Impregnation'], 'slot_uri': 'VOC4CAT:0008121'} }) - drying_device: Optional[list[str]] = Field(default=[], description="""Device used for drying (e.g. oven, rotary evaporator).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], 'slot_uri': 'VOC4CAT:0008122'} }) - has_drying_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], - 'is_a': 'has_temperature', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008207'} }) - has_drying_duration: Optional[Duration] = Field(default=None, description="""Duration of the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], - 'is_a': 'has_duration', - 'slot_uri': 'VOC4CAT:0008206'} }) - has_drying_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Atmosphere maintained during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], - 'is_a': 'has_atmosphere', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008208'} }) - has_calcination_temperature_range: Optional[QuantitativeRange] = Field(default=None, description="""Temperature range of the calcination programme (initial -> final temperature), -provided as a QuantitativeRange. Unit: Degree Celsius.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'slot_uri': 'coremeta4cat:hasCalcinationTemperatureRange'} }) - has_calcination_dwelling_time: Optional[Duration] = Field(default=None, description="""Time held at the final calcination temperature.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'is_a': 'has_duration', - 'slot_uri': 'VOC4CAT:0000060'} }) - number_of_cycles: Optional[list[int]] = Field(default=[], description="""Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin', - 'AtomicLayerDeposition', - 'MolecularSynthesis', - 'XRayAbsorptionSpectroscopy', - 'CyclicVoltammetry'], - 'slot_uri': 'VOC4CAT:0008123'} }) - has_calcination_atmosphere: Optional[list[CalcinationGaseousEnvironment]] = Field(default=[], description="""Gaseous environment maintained during the calcination step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'is_a': 'has_atmosphere', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_calcination_heating_rate: Optional[list[HeatingRate]] = Field(default=[], description="""Temperature ramp rate during the calcination step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'is_a': 'has_heating_rate', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008116'} }) - has_calcination_gas_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Gas flow rate maintained during calcination.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'is_a': 'has_flow_rate', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0000056'} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class CoPrecipitation(PreparationMethod, PrecipitationMixin, CalcinationMixin, DryingMixin): - """ - Catalyst preparation by co-precipitation: precursor salts are - simultaneously precipitated from solution by a precipitating agent. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0007795', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', - 'mixins': ['PrecipitationMixin', 'DryingMixin', 'CalcinationMixin']}) - - precipitating_agent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Chemical agent used to induce precipitation (e.g. NaOH, NH3).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], 'slot_uri': 'VOC4CAT:0008203'} }) - has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', - 'UVVisSpectroscopy', - 'DynamicLightScattering', - 'ElectroSprayIonizationMassSpectrometry', - 'ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_ph_value: Optional[list[PHValue]] = Field(default=[], description="""The slot to provide the PHValue of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_mixing_speed: Optional[list[AngularVelocity]] = Field(default=[], description="""Rotational speed during mixing of synthesis components.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], - 'is_a': 'has_angular_velocity', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_mixing_duration: Optional[Duration] = Field(default=None, description="""Duration of the mixing step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], - 'is_a': 'has_duration', - 'slot_uri': 'VOC4CAT:0008126'} }) - has_mixing_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature maintained during mixing.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'MolecularSynthesis'], - 'is_a': 'has_temperature', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008127'} }) - order_of_addition: Optional[list[str]] = Field(default=[], description="""Order in which reagents or components are combined.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], 'slot_uri': 'VOC4CAT:0008128'} }) - filtration: Optional[list[str]] = Field(default=[], description="""Filtration method used to separate the precipitate (e.g. vacuum filtration).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], 'slot_uri': 'VOC4CAT:0008129'} }) - purification: Optional[list[str]] = Field(default=[], description="""Purification method applied after synthesis (e.g. washing, dialysis).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], 'slot_uri': 'VOC4CAT:0008130'} }) - has_aging_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature maintained during the aging step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], - 'is_a': 'has_temperature', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008131'} }) - has_aging_duration: Optional[Duration] = Field(default=None, description="""Duration of the aging step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'SolGel'], - 'is_a': 'has_duration', - 'slot_uri': 'VOC4CAT:0008204'} }) - drying_device: Optional[list[str]] = Field(default=[], description="""Device used for drying (e.g. oven, rotary evaporator).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], 'slot_uri': 'VOC4CAT:0008122'} }) - has_drying_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], - 'is_a': 'has_temperature', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008207'} }) - has_drying_duration: Optional[Duration] = Field(default=None, description="""Duration of the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], - 'is_a': 'has_duration', - 'slot_uri': 'VOC4CAT:0008206'} }) - has_drying_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Atmosphere maintained during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], - 'is_a': 'has_atmosphere', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008208'} }) - has_calcination_temperature_range: Optional[QuantitativeRange] = Field(default=None, description="""Temperature range of the calcination programme (initial -> final temperature), -provided as a QuantitativeRange. Unit: Degree Celsius.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'slot_uri': 'coremeta4cat:hasCalcinationTemperatureRange'} }) - has_calcination_dwelling_time: Optional[Duration] = Field(default=None, description="""Time held at the final calcination temperature.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'is_a': 'has_duration', - 'slot_uri': 'VOC4CAT:0000060'} }) - number_of_cycles: Optional[list[int]] = Field(default=[], description="""Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin', - 'AtomicLayerDeposition', - 'MolecularSynthesis', - 'XRayAbsorptionSpectroscopy', - 'CyclicVoltammetry'], - 'slot_uri': 'VOC4CAT:0008123'} }) - has_calcination_atmosphere: Optional[list[CalcinationGaseousEnvironment]] = Field(default=[], description="""Gaseous environment maintained during the calcination step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'is_a': 'has_atmosphere', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_calcination_heating_rate: Optional[list[HeatingRate]] = Field(default=[], description="""Temperature ramp rate during the calcination step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'is_a': 'has_heating_rate', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008116'} }) - has_calcination_gas_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Gas flow rate maintained during calcination.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'is_a': 'has_flow_rate', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0000056'} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class SolGel(PreparationMethod, DryingMixin): - """ - Catalyst preparation by the sol-gel process: hydrolysis and condensation - of precursor molecules to form a colloidal network (gel). - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0001313', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', - 'mixins': ['DryingMixin']}) - - hydrolysis_ratio: Optional[list[float]] = Field(default=[], description="""Molar ratio of water to alkoxide precursor used in hydrolysis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SolGel'], 'slot_uri': 'coremeta4cat:hydrolysis_ratio'} }) - has_aging_duration: Optional[Duration] = Field(default=None, description="""Duration of the aging step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'SolGel'], - 'is_a': 'has_duration', - 'slot_uri': 'VOC4CAT:0008204'} }) - drying: Optional[list[str]] = Field(default=[], description="""Drying method used for the gel (e.g. supercritical drying, freeze drying).""", json_schema_extra = { "linkml_meta": {'domain_of': ['SolGel'], 'slot_uri': 'coremeta4cat:drying'} }) - surfactant_template: Optional[list[str]] = Field(default=[], description="""Surfactant or structure-directing agent used as a template.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SolGel'], 'slot_uri': 'coremeta4cat:surfactant_template'} }) - drying_device: Optional[list[str]] = Field(default=[], description="""Device used for drying (e.g. oven, rotary evaporator).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], 'slot_uri': 'VOC4CAT:0008122'} }) - has_drying_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], - 'is_a': 'has_temperature', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008207'} }) - has_drying_duration: Optional[Duration] = Field(default=None, description="""Duration of the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], - 'is_a': 'has_duration', - 'slot_uri': 'VOC4CAT:0008206'} }) - has_drying_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Atmosphere maintained during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], - 'is_a': 'has_atmosphere', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008208'} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class Solvothermal(PreparationMethod, ThermalSynthesisMixin): - """ - Catalyst preparation under elevated temperature and pressure in a - sealed vessel using a non-aqueous solvent. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0001458', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', - 'mixins': ['ThermalSynthesisMixin']}) - - filling_volume: Optional[list[float]] = Field(default=[], description="""Volume of solution relative to autoclave volume (filling degree).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Solvothermal'], - 'slot_uri': 'coremeta4cat:filling_volume', - 'unit': {'ucum_code': 'mL'}} }) - stirrer_type: Optional[list[str]] = Field(default=[], description="""Type of stirrer used (e.g. magnetic, mechanical, none).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Solvothermal'], 'slot_uri': 'VOC4CAT:0008113'} }) - cooling_rate: Optional[list[HeatingRate]] = Field(default=[], description="""Rate at which the reactor is cooled after synthesis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Solvothermal'], 'slot_uri': 'coremeta4cat:cooling_rate'} }) - synthesis_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], 'slot_uri': 'VOC4CAT:0000051'} }) - synthesis_duration: Optional[list[Duration]] = Field(default=[], description="""Total duration of the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], 'slot_uri': 'VOC4CAT:0000050'} }) - has_vessel_type: Optional[list[VesselType]] = Field(default=[], description="""Type of reaction or synthesis vessel used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], - 'is_a': 'has_qualitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', - 'MolecularSynthesis', - 'ElectrochemistryMixin', - 'PowderXRD', - 'XPS', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'Thermogravimetry', - 'CatalyticReaction'], - 'is_a': 'has_qualitative_attribute', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0007809'} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class PlasmaAssisted(PreparationMethod, ThermalSynthesisMixin): - """ - Catalyst preparation using plasma treatment to modify surface - properties or deposit active components. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:PlasmaAssisted', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', - 'mixins': ['ThermalSynthesisMixin']}) - - plasma_type: Optional[list[str]] = Field(default=[], description="""Type of plasma used (e.g. DBD, microwave, RF plasma).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PlasmaAssisted'], 'slot_uri': 'coremeta4cat:plasma_type'} }) - power_input: Optional[list[PowerQuantity]] = Field(default=[], description="""Power input to the plasma reactor or other energy source.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PlasmaAssisted'], 'slot_uri': 'coremeta4cat:power_input'} }) - exposure_time: Optional[list[Duration]] = Field(default=[], description="""Duration of plasma or other energy exposure.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PlasmaAssisted'], 'slot_uri': 'coremeta4cat:exposure_time'} }) - synthesis_pressure: Optional[list[Pressure]] = Field(default=[], description="""Pressure applied during synthesis (e.g. in autoclave or plasma reactor).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PlasmaAssisted', 'Sublimation'], 'slot_uri': 'VOC4CAT:0000053'} }) - synthesis_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], 'slot_uri': 'VOC4CAT:0000051'} }) - synthesis_duration: Optional[list[Duration]] = Field(default=[], description="""Total duration of the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], 'slot_uri': 'VOC4CAT:0000050'} }) - has_vessel_type: Optional[list[VesselType]] = Field(default=[], description="""Type of reaction or synthesis vessel used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], - 'is_a': 'has_qualitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', - 'MolecularSynthesis', - 'ElectrochemistryMixin', - 'PowderXRD', - 'XPS', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'Thermogravimetry', - 'CatalyticReaction'], - 'is_a': 'has_qualitative_attribute', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0007809'} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class CombustionSynthesis(PreparationMethod, ThermalSynthesisMixin): - """ - Catalyst preparation by combustion of a fuel/oxidizer mixture, - producing metal oxide catalysts in a single rapid step. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:CombustionSynthesis', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', - 'mixins': ['ThermalSynthesisMixin']}) - - fuel: Optional[list[str]] = Field(default=[], description="""Organic fuel used in combustion synthesis (e.g. urea, glycine).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CombustionSynthesis'], 'slot_uri': 'coremeta4cat:fuel'} }) - oxidizer: Optional[list[str]] = Field(default=[], description="""Oxidizer used in combustion synthesis (e.g. metal nitrates).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CombustionSynthesis'], 'slot_uri': 'coremeta4cat:oxidizer'} }) - fuel_to_oxidizer_ratio: Optional[list[float]] = Field(default=[], description="""Molar ratio of fuel to oxidizer.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CombustionSynthesis'], - 'slot_uri': 'coremeta4cat:fuel_to_oxidizer_ratio'} }) - set_temperature: Optional[list[Temperature]] = Field(default=[], description="""Target temperature set for the combustion reaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CombustionSynthesis'], - 'slot_uri': 'coremeta4cat:set_temperature'} }) - post_treatment: Optional[list[str]] = Field(default=[], description="""Post-synthesis treatment applied to the combustion product.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CombustionSynthesis'], - 'slot_uri': 'coremeta4cat:post_treatment'} }) - synthesis_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], 'slot_uri': 'VOC4CAT:0000051'} }) - synthesis_duration: Optional[list[Duration]] = Field(default=[], description="""Total duration of the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], 'slot_uri': 'VOC4CAT:0000050'} }) - has_vessel_type: Optional[list[VesselType]] = Field(default=[], description="""Type of reaction or synthesis vessel used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], - 'is_a': 'has_qualitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', - 'MolecularSynthesis', - 'ElectrochemistryMixin', - 'PowderXRD', - 'XPS', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'Thermogravimetry', - 'CatalyticReaction'], - 'is_a': 'has_qualitative_attribute', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0007809'} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class AtomicLayerDeposition(PreparationMethod): - """ - Catalyst preparation by atomic layer deposition (ALD): sequential - self-limiting surface reactions deposit a conformal thin film - of active phase onto a substrate. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0001311', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/'}) - - substrate: Optional[list[str]] = Field(default=[], description="""Substrate material on which the ALD film is deposited.""", json_schema_extra = { "linkml_meta": {'domain_of': ['AtomicLayerDeposition'], 'slot_uri': 'VOC4CAT:0000024'} }) - pulse_time: Optional[list[float]] = Field(default=[], description="""Duration of the precursor pulse in each ALD cycle.""", json_schema_extra = { "linkml_meta": {'domain_of': ['AtomicLayerDeposition'], - 'slot_uri': 'coremeta4cat:pulse_time', - 'unit': {'ucum_code': 's'}} }) - purging_duration: Optional[list[float]] = Field(default=[], description="""Duration of the purge step between ALD pulses.""", json_schema_extra = { "linkml_meta": {'domain_of': ['AtomicLayerDeposition'], - 'slot_uri': 'VOC4CAT:0000112', - 'unit': {'ucum_code': 's'}} }) - number_of_cycles: Optional[list[int]] = Field(default=[], description="""Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin', - 'AtomicLayerDeposition', - 'MolecularSynthesis', - 'XRayAbsorptionSpectroscopy', - 'CyclicVoltammetry'], - 'slot_uri': 'VOC4CAT:0008123'} }) - deposition_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature during the deposition step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['AtomicLayerDeposition', 'DepositionPrecipitation'], - 'slot_uri': 'coremeta4cat:deposition_temperature'} }) - carrier_gas: Optional[list[ChemicalEntity]] = Field(default=[], description="""Carrier gas used in a process (e.g. in GC analysis or ALD deposition).""", json_schema_extra = { "linkml_meta": {'domain_of': ['AtomicLayerDeposition', - 'ElementalAnalysis', - 'ElectroSprayIonizationMassSpectrometry', - 'GCMS'], - 'slot_uri': 'coremeta4cat:carrier_gas'} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcat:Distribution', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', + 'slot_usage': {'access_URL': {'description': 'A URL that gives access to a ' + 'Distribution of the Dataset.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'access_URL', + 'range': 'Resource', + 'required': True, + 'slot_uri': 'dcat:accessURL'}, + 'access_service': {'description': 'A data service that gives ' + 'access to the distribution ' + 'of the dataset.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'access_service', + 'range': 'DataService', + 'required': False, + 'slot_uri': 'dcat:accessService'}, + 'applicable_legislation': {'description': 'The legislation ' + 'that mandates the ' + 'creation or ' + 'management of the ' + 'Distribution.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'applicable_legislation', + 'range': 'LegalResource', + 'required': False, + 'slot_uri': 'dcatap:applicableLegislation'}, + 'availability': {'description': 'An indication how long it is ' + 'planned to keep the ' + 'Distribution of the Dataset ' + 'available.', + 'inlined_as_list': False, + 'multivalued': False, + 'name': 'availability', + 'range': 'Concept', + 'recommended': True, + 'required': False, + 'slot_uri': 'dcatap:availability'}, + 'byte_size': {'description': 'The size of a Distribution in ' + 'bytes.', + 'inlined_as_list': False, + 'multivalued': False, + 'name': 'byte_size', + 'range': 'nonNegativeInteger', + 'required': False, + 'slot_uri': 'dcat:byteSize'}, + 'checksum': {'description': 'A mechanism that can be used to ' + 'verify that the contents of a ' + 'distribution have not changed.', + 'inlined_as_list': True, + 'multivalued': False, + 'name': 'checksum', + 'range': 'Checksum', + 'required': False, + 'slot_uri': 'spdx:checksum'}, + 'compression_format': {'description': 'The format of the file ' + 'in which the data is ' + 'contained in a ' + 'compressed form, e.g. ' + 'to reduce the size of ' + 'the downloadable file.', + 'inlined_as_list': True, + 'multivalued': False, + 'name': 'compression_format', + 'range': 'MediaType', + 'required': False, + 'slot_uri': 'dcat:compressFormat'}, + 'description': {'description': 'A free-text account of the ' + 'Distribution.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'description', + 'range': 'string', + 'recommended': True, + 'required': False, + 'slot_uri': 'dcterms:description'}, + 'documentation': {'description': 'A page or document about ' + 'this Distribution.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'documentation', + 'range': 'Document', + 'required': False, + 'slot_uri': 'foaf:page'}, + 'download_URL': {'description': 'A URL that is a direct link ' + 'to a downloadable file in a ' + 'given format.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'download_URL', + 'range': 'Resource', + 'required': False, + 'slot_uri': 'dcat:downloadURL'}, + 'format': {'description': 'The file format of the ' + 'Distribution.', + 'inlined_as_list': True, + 'multivalued': False, + 'name': 'format', + 'range': 'MediaTypeOrExtent', + 'recommended': True, + 'required': False, + 'slot_uri': 'dcterms:format'}, + 'has_policy': {'description': 'The policy expressing the ' + 'rights associated with the ' + 'distribution if using the ' + '[[ODRL]] vocabulary.', + 'inlined_as_list': True, + 'multivalued': False, + 'name': 'has_policy', + 'range': 'Policy', + 'required': False, + 'slot_uri': 'odrl:hasPolicy'}, + 'language': {'description': 'A language used in the ' + 'Distribution.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'language', + 'range': 'LinguisticSystem', + 'required': False, + 'slot_uri': 'dcterms:language'}, + 'licence': {'description': 'A licence under which the ' + 'Distribution is made available.', + 'inlined_as_list': True, + 'multivalued': False, + 'name': 'licence', + 'range': 'LicenseDocument', + 'required': False, + 'slot_uri': 'dcterms:license'}, + 'linked_schemas': {'description': 'An established schema to ' + 'which the described ' + 'Distribution conforms.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'linked_schemas', + 'range': 'Standard', + 'required': False, + 'slot_uri': 'dcterms:conformsTo'}, + 'media_type': {'description': 'The media type of the ' + 'Distribution as defined in the ' + 'official register of media ' + 'types managed by IANA.', + 'inlined_as_list': False, + 'multivalued': False, + 'name': 'media_type', + 'range': 'MediaType', + 'required': False, + 'slot_uri': 'dcat:mediaType'}, + 'modification_date': {'description': 'The most recent date on ' + 'which the Distribution ' + 'was changed or modified.', + 'inlined_as_list': False, + 'multivalued': False, + 'name': 'modification_date', + 'range': 'date', + 'required': False, + 'slot_uri': 'dcterms:modified'}, + 'packaging_format': {'description': 'The format of the file in ' + 'which one or more data ' + 'files are grouped ' + 'together, e.g. to enable ' + 'a set of related files to ' + 'be downloaded together.', + 'inlined_as_list': True, + 'multivalued': False, + 'name': 'packaging_format', + 'range': 'MediaType', + 'required': False, + 'slot_uri': 'dcat:packageFormat'}, + 'release_date': {'description': 'The date of formal issuance ' + '(e.g., publication) of the ' + 'Distribution.', + 'inlined_as_list': False, + 'multivalued': False, + 'name': 'release_date', + 'range': 'date', + 'required': False, + 'slot_uri': 'dcterms:issued'}, + 'rights': {'description': 'A statement that specifies rights ' + 'associated with the Distribution.', + 'inlined_as_list': True, + 'multivalued': False, + 'name': 'rights', + 'range': 'RightsStatement', + 'required': False, + 'slot_uri': 'dcterms:rights'}, + 'spatial_resolution': {'description': 'The minimum spatial ' + 'separation resolvable ' + 'in a dataset ' + 'distribution, measured ' + 'in meters.', + 'inlined_as_list': False, + 'multivalued': False, + 'name': 'spatial_resolution', + 'range': 'decimal', + 'required': False, + 'slot_uri': 'dcat:spatialResolutionInMeters'}, + 'status': {'description': 'The status of the distribution in ' + 'the context of maturity lifecycle.', + 'inlined_as_list': True, + 'multivalued': False, + 'name': 'status', + 'range': 'Concept', + 'required': False, + 'slot_uri': 'adms:status'}, + 'temporal_resolution': {'description': 'The minimum time ' + 'period resolvable in ' + 'the dataset ' + 'distribution.', + 'inlined_as_list': True, + 'multivalued': False, + 'name': 'temporal_resolution', + 'range': 'duration', + 'required': False, + 'slot_uri': 'dcat:temporalResolution'}, + 'title': {'description': 'A name given to the Distribution.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'title', + 'range': 'string', + 'required': False, + 'slot_uri': 'dcterms:title'}}}) + + access_URL: list[Resource] = Field(default=..., description="""A URL that gives access to a Distribution of the Dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'dcat:accessURL'} }) + access_service: Optional[list[DataService]] = Field(default=[], description="""A data service that gives access to the distribution of the dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'dcat:accessService'} }) + applicable_legislation: Optional[list[LegalResource]] = Field(default=[], description="""The legislation that mandates the creation or management of the Distribution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Catalogue', + 'DataService', + 'Dataset', + 'DatasetSeries', + 'Distribution'], + 'slot_uri': 'dcatap:applicableLegislation'} }) + availability: Optional[Concept] = Field(default=None, description="""An indication how long it is planned to keep the Distribution of the Dataset available.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], + 'recommended': True, + 'slot_uri': 'dcatap:availability'} }) + byte_size: Optional[int] = Field(default=None, description="""The size of a Distribution in bytes.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'dcat:byteSize'} }) + checksum: Optional[Checksum] = Field(default=None, description="""A mechanism that can be used to verify that the contents of a distribution have not changed.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'spdx:checksum'} }) + compression_format: Optional[MediaType] = Field(default=None, description="""The format of the file in which the data is contained in a compressed form, e.g. to reduce the size of the downloadable file.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'dcat:compressFormat'} }) + description: Optional[list[str]] = Field(default=[], description="""A free-text account of the Distribution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -7325,138 +4527,37 @@ class AtomicLayerDeposition(PreparationMethod): 'SupportiveEntity', 'Surrounding', 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class DepositionPrecipitation(PreparationMethod, PrecipitationMixin, CalcinationMixin, DryingMixin): - """ - Catalyst preparation by deposition-precipitation: the active phase - is precipitated directly onto the support surface. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:DepositionPrecipitation', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', - 'mixins': ['PrecipitationMixin', 'DryingMixin', 'CalcinationMixin']}) - - deposition_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature during the deposition step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['AtomicLayerDeposition', 'DepositionPrecipitation'], - 'slot_uri': 'coremeta4cat:deposition_temperature'} }) - deposition_time: Optional[list[Duration]] = Field(default=[], description="""Duration of the deposition step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DepositionPrecipitation'], - 'slot_uri': 'coremeta4cat:deposition_time'} }) - precipitating_agent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Chemical agent used to induce precipitation (e.g. NaOH, NH3).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], 'slot_uri': 'VOC4CAT:0008203'} }) - has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', - 'UVVisSpectroscopy', - 'DynamicLightScattering', - 'ElectroSprayIonizationMassSpectrometry', - 'ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_ph_value: Optional[list[PHValue]] = Field(default=[], description="""The slot to provide the PHValue of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_mixing_speed: Optional[list[AngularVelocity]] = Field(default=[], description="""Rotational speed during mixing of synthesis components.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], - 'is_a': 'has_angular_velocity', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_mixing_duration: Optional[Duration] = Field(default=None, description="""Duration of the mixing step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], - 'is_a': 'has_duration', - 'slot_uri': 'VOC4CAT:0008126'} }) - has_mixing_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature maintained during mixing.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'MolecularSynthesis'], - 'is_a': 'has_temperature', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008127'} }) - order_of_addition: Optional[list[str]] = Field(default=[], description="""Order in which reagents or components are combined.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], 'slot_uri': 'VOC4CAT:0008128'} }) - filtration: Optional[list[str]] = Field(default=[], description="""Filtration method used to separate the precipitate (e.g. vacuum filtration).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], 'slot_uri': 'VOC4CAT:0008129'} }) - purification: Optional[list[str]] = Field(default=[], description="""Purification method applied after synthesis (e.g. washing, dialysis).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], 'slot_uri': 'VOC4CAT:0008130'} }) - has_aging_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature maintained during the aging step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], - 'is_a': 'has_temperature', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008131'} }) - has_aging_duration: Optional[Duration] = Field(default=None, description="""Duration of the aging step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'SolGel'], - 'is_a': 'has_duration', - 'slot_uri': 'VOC4CAT:0008204'} }) - drying_device: Optional[list[str]] = Field(default=[], description="""Device used for drying (e.g. oven, rotary evaporator).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], 'slot_uri': 'VOC4CAT:0008122'} }) - has_drying_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], - 'is_a': 'has_temperature', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008207'} }) - has_drying_duration: Optional[Duration] = Field(default=None, description="""Duration of the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], - 'is_a': 'has_duration', - 'slot_uri': 'VOC4CAT:0008206'} }) - has_drying_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Atmosphere maintained during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], - 'is_a': 'has_atmosphere', 'recommended': True, - 'slot_uri': 'VOC4CAT:0008208'} }) - has_calcination_temperature_range: Optional[QuantitativeRange] = Field(default=None, description="""Temperature range of the calcination programme (initial -> final temperature), -provided as a QuantitativeRange. Unit: Degree Celsius.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'slot_uri': 'coremeta4cat:hasCalcinationTemperatureRange'} }) - has_calcination_dwelling_time: Optional[Duration] = Field(default=None, description="""Time held at the final calcination temperature.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'is_a': 'has_duration', - 'slot_uri': 'VOC4CAT:0000060'} }) - number_of_cycles: Optional[list[int]] = Field(default=[], description="""Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin', - 'AtomicLayerDeposition', - 'MolecularSynthesis', - 'XRayAbsorptionSpectroscopy', - 'CyclicVoltammetry'], - 'slot_uri': 'VOC4CAT:0008123'} }) - has_calcination_atmosphere: Optional[list[CalcinationGaseousEnvironment]] = Field(default=[], description="""Gaseous environment maintained during the calcination step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'is_a': 'has_atmosphere', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_calcination_heating_rate: Optional[list[HeatingRate]] = Field(default=[], description="""Temperature ramp rate during the calcination step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'is_a': 'has_heating_rate', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008116'} }) - has_calcination_gas_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Gas flow rate maintained during calcination.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'is_a': 'has_flow_rate', + 'slot_uri': 'dcterms:description'} }) + documentation: Optional[list[Document]] = Field(default=[], description="""A page or document about this Distribution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataService', 'Dataset', 'Distribution'], + 'slot_uri': 'foaf:page'} }) + download_URL: Optional[list[Resource]] = Field(default=[], description="""A URL that is a direct link to a downloadable file in a given format.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'dcat:downloadURL'} }) + format: Optional[MediaTypeOrExtent] = Field(default=None, description="""The file format of the Distribution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataService', 'Distribution'], 'recommended': True, - 'slot_uri': 'VOC4CAT:0000056'} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', + 'slot_uri': 'dcterms:format'} }) + has_policy: Optional[Policy] = Field(default=None, description="""The policy expressing the rights associated with the distribution if using the [[ODRL]] vocabulary.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'odrl:hasPolicy'} }) + language: Optional[list[LinguisticSystem]] = Field(default=[], description="""A language used in the Distribution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Catalogue', 'CatalogueRecord', 'Dataset', 'Distribution'], + 'slot_uri': 'dcterms:language'} }) + licence: Optional[LicenseDocument] = Field(default=None, description="""A licence under which the Distribution is made available.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Catalogue', 'DataService', 'Distribution'], + 'slot_uri': 'dcterms:license'} }) + linked_schemas: Optional[list[Standard]] = Field(default=[], description="""An established schema to which the described Distribution conforms.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'dcterms:conformsTo'} }) + media_type: Optional[MediaType] = Field(default=None, description="""The media type of the Distribution as defined in the official register of media types managed by IANA.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'dcat:mediaType'} }) + modification_date: Optional[date] = Field(default=None, description="""The most recent date on which the Distribution was changed or modified.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Catalogue', 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', 'Dataset', 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + 'Distribution'], + 'slot_uri': 'dcterms:modified'} }) + packaging_format: Optional[MediaType] = Field(default=None, description="""The format of the file in which one or more data files are grouped together, e.g. to enable a set of related files to be downloaded together.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'dcat:packageFormat'} }) + release_date: Optional[date] = Field(default=None, description="""The date of formal issuance (e.g., publication) of the Distribution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Catalogue', 'Dataset', 'DatasetSeries', 'Distribution'], + 'slot_uri': 'dcterms:issued'} }) + rights: Optional[RightsStatement] = Field(default=None, description="""A statement that specifies rights associated with the Distribution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Catalogue', 'Distribution'], 'slot_uri': 'dcterms:rights'} }) + spatial_resolution: Optional[Decimal] = Field(default=None, description="""The minimum spatial separation resolvable in a dataset distribution, measured in meters.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'Distribution'], + 'slot_uri': 'dcat:spatialResolutionInMeters'} }) + status: Optional[Concept] = Field(default=None, description="""The status of the distribution in the context of maturity lifecycle.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Distribution'], 'slot_uri': 'adms:status'} }) + temporal_resolution: Optional[str] = Field(default=None, description="""The minimum time period resolvable in the dataset distribution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'Distribution'], + 'slot_uri': 'dcat:temporalResolution'} }) + title: Optional[list[str]] = Field(default=[], description="""A name given to the Distribution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -7469,6 +4570,7 @@ class DepositionPrecipitation(PreparationMethod, PrecipitationMixin, Calcination 'DataService', 'Dataset', 'DatasetSeries', + 'DefinedTerm', 'Distribution', 'Document', 'Entity', @@ -7493,51 +4595,46 @@ class DepositionPrecipitation(PreparationMethod, PrecipitationMixin, Calcination 'SupportiveEntity', 'Surrounding', 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) + 'slot_uri': 'dcterms:title'} }) -class MicrowaveAssisted(PreparationMethod, ThermalSynthesisMixin): +class Entity(ClassifierMixin): """ - Catalyst preparation using microwave irradiation to rapidly and - uniformly heat the reaction mixture. + A physical, digital, conceptual, or other kind of thing with some fixed aspects; entities may be real or imaginary. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0002906', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', - 'mixins': ['ThermalSynthesisMixin']}) - - power: Optional[list[float]] = Field(default=[], description="""Microwave power applied.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MicrowaveAssisted'], - 'slot_uri': 'coremeta4cat:power', - 'unit': {'ucum_code': 'W'}} }) - microwave_frequency: Optional[list[float]] = Field(default=[], description="""Frequency of microwave irradiation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MicrowaveAssisted'], - 'slot_uri': 'coremeta4cat:microwave_frequency', - 'unit': {'ucum_code': 'GHz'}} }) - synthesis_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], 'slot_uri': 'VOC4CAT:0000051'} }) - synthesis_duration: Optional[list[Duration]] = Field(default=[], description="""Total duration of the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], 'slot_uri': 'VOC4CAT:0000050'} }) - has_vessel_type: Optional[list[VesselType]] = Field(default=[], description="""Type of reaction or synthesis vessel used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], - 'is_a': 'has_qualitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', - 'MolecularSynthesis', - 'ElectrochemistryMixin', - 'PowderXRD', - 'XPS', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'Thermogravimetry', - 'CatalyticReaction'], - 'is_a': 'has_qualitative_attribute', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0007809'} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Entity', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', + 'in_subset': ['domain_agnostic_core'], + 'mixins': ['ClassifierMixin'], + 'slot_usage': {'description': {'description': 'The slot to provide a ' + 'description for the Entity.', + 'name': 'description'}, + 'has_part': {'description': 'A slot to provide a part of the ' + 'Entity.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'has_part', + 'range': 'Entity'}, + 'other_identifier': {'description': 'A slot to provide a ' + 'secondary identifier of ' + 'the Entity.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'other_identifier', + 'range': 'Identifier', + 'required': False}, + 'part_of': {'description': 'The slot to specify an Entity of ' + 'which the Entity is a part.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'part_of', + 'notes': ['not in DCAT-AP'], + 'range': 'Entity'}, + 'title': {'description': 'The slot to provide a title for the ' + 'Entity.', + 'name': 'title'}}}) + + title: Optional[str] = Field(default=None, description="""The slot to provide a title for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -7576,7 +4673,7 @@ class MicrowaveAssisted(PreparationMethod, ThermalSynthesisMixin): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""The slot to provide a description for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -7614,6 +4711,34 @@ class MicrowaveAssisted(PreparationMethod, ThermalSynthesisMixin): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + 'slot_uri': 'adms:identifier'} }) + has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_part: Optional[list[Entity]] = Field(default=[], description="""A slot to provide a part of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'slot_uri': 'dcterms:hasPart'} }) + part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'inverse': 'has_part', + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:isPartOf'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -7622,79 +4747,34 @@ class MicrowaveAssisted(PreparationMethod, ThermalSynthesisMixin): 'slot_uri': 'rdf:type'} }) -class SonochemicalSynthesis(PreparationMethod, CalcinationMixin, DryingMixin): +class EvaluatedActivity(Activity): """ - Catalyst preparation using ultrasonic irradiation to drive chemical - reactions via acoustic cavitation. + An activity or process that is being evaluated in a DataGeneratingActivity. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:SonochemicalSynthesis', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', - 'mixins': ['DryingMixin', 'CalcinationMixin']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Activity', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', + 'in_subset': ['domain_agnostic_core'], + 'slot_usage': {'other_identifier': {'description': 'A slot to provide a ' + 'secondary identifier of ' + 'the EvaluatedActivity.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'other_identifier', + 'range': 'Identifier', + 'required': False}}}) - sonication_power: Optional[list[float]] = Field(default=[], description="""Acoustic power applied during sonication.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis'], - 'slot_uri': 'coremeta4cat:sonication_power', - 'unit': {'ucum_code': 'W'}} }) - sonication_duration: Optional[list[float]] = Field(default=[], description="""Duration of ultrasonic irradiation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis'], - 'slot_uri': 'coremeta4cat:sonication_duration', - 'unit': {'ucum_code': 'min'}} }) - has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', - 'PhotoluminescenceMixin', - 'ElectrochemistryMixin', - 'PowderXRD', - 'SingleCrystalXRD', - 'XRayAbsorptionSpectroscopy', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'DynamicLightScattering', - 'SizeExclusionChromatography', - 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', - 'ChemicalReaction', - 'Microkinetics', - 'MonteCarlo', - 'AqueousStability'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - drying_device: Optional[list[str]] = Field(default=[], description="""Device used for drying (e.g. oven, rotary evaporator).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], 'slot_uri': 'VOC4CAT:0008122'} }) - has_drying_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], - 'is_a': 'has_temperature', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008207'} }) - has_drying_duration: Optional[Duration] = Field(default=None, description="""Duration of the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], - 'is_a': 'has_duration', - 'slot_uri': 'VOC4CAT:0008206'} }) - has_drying_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Atmosphere maintained during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], - 'is_a': 'has_atmosphere', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008208'} }) - has_calcination_temperature_range: Optional[QuantitativeRange] = Field(default=None, description="""Temperature range of the calcination programme (initial -> final temperature), -provided as a QuantitativeRange. Unit: Degree Celsius.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'slot_uri': 'coremeta4cat:hasCalcinationTemperatureRange'} }) - has_calcination_dwelling_time: Optional[Duration] = Field(default=None, description="""Time held at the final calcination temperature.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'is_a': 'has_duration', - 'slot_uri': 'VOC4CAT:0000060'} }) - number_of_cycles: Optional[list[int]] = Field(default=[], description="""Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin', - 'AtomicLayerDeposition', - 'MolecularSynthesis', - 'XRayAbsorptionSpectroscopy', - 'CyclicVoltammetry'], - 'slot_uri': 'VOC4CAT:0008123'} }) - has_calcination_atmosphere: Optional[list[CalcinationGaseousEnvironment]] = Field(default=[], description="""Gaseous environment maintained during the calcination step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'is_a': 'has_atmosphere', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_calcination_heating_rate: Optional[list[HeatingRate]] = Field(default=[], description="""Temperature ramp rate during the calcination step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'is_a': 'has_heating_rate', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008116'} }) - has_calcination_gas_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Gas flow rate maintained during calcination.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'is_a': 'has_flow_rate', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0000056'} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + title: Optional[list[str]] = Field(default=[], description="""The slot to provide a title for the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -7732,8 +4812,9 @@ class SonochemicalSynthesis(PreparationMethod, CalcinationMixin, DryingMixin): 'SupportiveEntity', 'Surrounding', 'TimeInstant'], + 'notes': ['not in DCAT-AP'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[list[str]] = Field(default=[], description="""The slot to provide a description for the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -7770,7 +4851,49 @@ class SonochemicalSynthesis(PreparationMethod, CalcinationMixin, DryingMixin): 'SupportiveEntity', 'Surrounding', 'TimeInstant'], + 'notes': ['not in DCAT-AP'], 'slot_uri': 'dcterms:description'} }) + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the EvaluatedActivity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'adms:identifier'} }) + has_part: Optional[list[Activity]] = Field(default=[], description="""The slot to provide an Activity that is part of the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:hasPart'} }) + had_input_entity: Optional[list[Entity]] = Field(default=[], description="""The slot to specify the Entity that was used as an input of an Activity that is to be changed, consumed or transformed.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'prov:used'} }) + had_output_entity: Optional[list[Entity]] = Field(default=[], description="""The slot to specify the Entity that was generated as an output of an Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'prov:generated'} }) + had_input_activity: Optional[list[Activity]] = Field(default=[], description="""The slot to provide a previous Activity that informed the Activity by being causally via a shared participant.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'prov:wasInformedBy'} }) + carried_out_by: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to specify the AgenticEntity that played a certain part in carrying out the Activity, either via having a specific role, function or disposition that was realized in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'prov:wasAssociatedWith'} }) + has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + part_of: Optional[list[Activity]] = Field(default=[], description="""The slot to provide an Activity of which the Activity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'inverse': 'has_part', + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:isPartOf'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -7779,36 +4902,103 @@ class SonochemicalSynthesis(PreparationMethod, CalcinationMixin, DryingMixin): 'slot_uri': 'rdf:type'} }) -class FlameSprayPyrolysis(PreparationMethod): +class ChemicalReaction(EvaluatedActivity): """ - Catalyst preparation by flame spray pyrolysis (FSP): a liquid precursor - solution is atomised and combusted in a flame to produce nanoparticles. + A process that leads to the transformation of one set of chemical substances to another and that is the subject matter of a DataGeneratingActivity. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0007031', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'SIO:010345', + 'exact_mappings': ['MOP:0000543', 'REX:0000002', 'AFP:0003711'], + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/', + 'narrow_mappings': ['RXNO:0000329'], + 'slot_usage': {'has_pressure': {'description': 'The slot to specify the ' + 'Pressure at which a ' + 'ChemicalReaction takes place.', + 'name': 'has_pressure'}, + 'has_temperature': {'description': 'The slot to specify the ' + 'Temperature at which a ' + 'ChemicalReaction takes ' + 'place.', + 'inlined_as_list': True, + 'name': 'has_temperature'}, + 'related_resource': {'description': 'The slot to specify any ' + 'Documents related to a ' + 'ChemicalReaction.', + 'inlined': True, + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'related_resource', + 'range': 'Resource'}}}) - flame_type: Optional[list[str]] = Field(default=[], description="""Type of flame used in FSP (e.g. methane/oxygen, H2/O2).""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis'], 'slot_uri': 'coremeta4cat:flame_type'} }) - has_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Volumetric flow rate of a gas or liquid.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', - 'ChromatographyMixin', + used_starting_material: Optional[list[StartingMaterial]] = Field(default=[], description="""The slot to specify the StartingMaterial(s) of a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], + 'is_a': 'had_input_entity', + 'recommended': True, + 'slot_uri': 'RO:0004009'} }) + used_reactant: Optional[list[Reagent]] = Field(default=[], description="""The slot to specify the Reagent(s) of a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], + 'is_a': 'had_input_entity', + 'recommended': True, + 'slot_uri': 'RO:0004009'} }) + generated_product: Optional[list[ChemicalProduct]] = Field(default=[], description="""The slot to specify the Product(s) of a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], + 'is_a': 'had_output_entity', + 'recommended': True, + 'slot_uri': 'RO:0004008'} }) + used_catalyst: Optional[list[Catalyst]] = Field(default=[], description="""The slot to specify the Catalyst of a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'RXNO:0000425'} }) + used_solvent: Optional[list[DissolvingSubstance]] = Field(default=[], description="""The slot to specify the chemical substance that had a solvent role (CHEBI:35223) in a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'prov:wasAssociatedWith'} }) + has_duration: Optional[str] = Field(default=None, description="""A slot to provide the duration of a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], 'slot_uri': 'schema:duration'} }) + used_reactor: Optional[list[Reactor]] = Field(default=[], description="""The slot to specify the reactor used in a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'prov:wasAssociatedWith'} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to specify the Temperature at which a ChemicalReaction takes place.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', 'DRIFTS', - 'ElectroSprayIonizationMassSpectrometry'], + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - inlet_system: Optional[list[str]] = Field(default=[], description="""Configuration of the precursor inlet system.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis'], 'slot_uri': 'coremeta4cat:inlet_system'} }) - flame_ring: Optional[list[str]] = Field(default=[], description="""Configuration of the supporting flame ring.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis'], 'slot_uri': 'coremeta4cat:flame_ring'} }) - dispersant: Optional[list[ChemicalEntity]] = Field(default=[], description="""Dispersant used (e.g. in DLS measurement or flame spray pyrolysis).""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', 'DynamicLightScattering'], - 'slot_uri': 'coremeta4cat:dispersant'} }) - capillary_pressure: Optional[list[float]] = Field(default=[], description="""Pressure applied at the capillary nozzle during FSP.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis'], - 'slot_uri': 'coremeta4cat:capillary_pressure', - 'unit': {'ucum_code': 'bar'}} }) - fuel_dispersant_ratio: Optional[list[float]] = Field(default=[], description="""Volume ratio of fuel to dispersant used in FSP.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis'], - 'slot_uri': 'coremeta4cat:fuel_dispersant_ratio'} }) - filtration_device: Optional[list[str]] = Field(default=[], description="""Device used for filtration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', 'MolecularSynthesis'], - 'slot_uri': 'coremeta4cat:filtration_device'} }) - filter_type: Optional[list[str]] = Field(default=[], description="""Type of filter membrane or medium used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', 'MolecularSynthesis'], - 'slot_uri': 'coremeta4cat:filter_type'} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to specify the Pressure at which a ChemicalReaction takes place.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_yield: Optional[list[Yield]] = Field(default=[], description="""A slot to provide the percentage of how much of the ChemicalProduct was produced by a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_reaction_step: Optional[list[ChemicalReaction]] = Field(default=[], description="""A slot to specify a step (part) of a ChemicalReaction that is itself a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], + 'is_a': 'has_part', + 'slot_uri': 'BFO:0000051'} }) + related_resource: Optional[list[Resource]] = Field(default=[], description="""The slot to specify any Documents related to a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'Dataset'], 'slot_uri': 'dcterms:relation'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + title: Optional[list[str]] = Field(default=[], description="""The slot to provide a title for the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -7846,8 +5036,9 @@ class FlameSprayPyrolysis(PreparationMethod): 'SupportiveEntity', 'Surrounding', 'TimeInstant'], + 'notes': ['not in DCAT-AP'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[list[str]] = Field(default=[], description="""The slot to provide a description for the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -7884,7 +5075,49 @@ class FlameSprayPyrolysis(PreparationMethod): 'SupportiveEntity', 'Surrounding', 'TimeInstant'], + 'notes': ['not in DCAT-AP'], 'slot_uri': 'dcterms:description'} }) + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the EvaluatedActivity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'adms:identifier'} }) + has_part: Optional[list[Activity]] = Field(default=[], description="""The slot to provide an Activity that is part of the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:hasPart'} }) + had_input_entity: Optional[list[Entity]] = Field(default=[], description="""The slot to specify the Entity that was used as an input of an Activity that is to be changed, consumed or transformed.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'prov:used'} }) + had_output_entity: Optional[list[Entity]] = Field(default=[], description="""The slot to specify the Entity that was generated as an output of an Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'prov:generated'} }) + had_input_activity: Optional[list[Activity]] = Field(default=[], description="""The slot to provide a previous Activity that informed the Activity by being causally via a shared participant.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'prov:wasInformedBy'} }) + carried_out_by: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to specify the AgenticEntity that played a certain part in carrying out the Activity, either via having a specific role, function or disposition that was realized in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'prov:wasAssociatedWith'} }) + has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + part_of: Optional[list[Activity]] = Field(default=[], description="""The slot to provide an Activity of which the Activity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'inverse': 'has_part', + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:isPartOf'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -7893,39 +5126,117 @@ class FlameSprayPyrolysis(PreparationMethod): 'slot_uri': 'rdf:type'} }) -class MechanochemicalSynthesis(PreparationMethod, ThermalSynthesisMixin): +class CatalyticReaction(ChemicalReaction): """ - Catalyst preparation by mechanical milling or grinding, optionally - combined with thermal treatment. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:MechanochemicalSynthesis', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', - 'mixins': ['ThermalSynthesisMixin']}) + A ChemicalReaction (chemdcat-ap) specialization representing the + catalytic reaction being studied. Inherits the generic reaction slots + (starting materials, reactants, products, catalyst, solvent, reactor, + temperature, pressure, yield, reaction steps) from ChemicalReaction and + adds catalysis-specific operating-condition slots. - vessel_volume: Optional[list[float]] = Field(default=[], description="""Volume of the milling vessel.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MechanochemicalSynthesis'], - 'slot_uri': 'coremeta4cat:vessel_volume', - 'unit': {'ucum_code': 'mL'}} }) - size_and_material: Optional[list[str]] = Field(default=[], description="""Size and material of the milling vessel and components.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MechanochemicalSynthesis'], - 'slot_uri': 'coremeta4cat:size_and_material'} }) - milling_speed: Optional[list[float]] = Field(default=[], description="""Rotational speed during milling.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MechanochemicalSynthesis'], - 'slot_uri': 'coremeta4cat:milling_speed', - 'unit': {'ucum_code': 'rpm'}} }) - milling_duration: Optional[list[float]] = Field(default=[], description="""Total duration of the milling process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MechanochemicalSynthesis'], - 'slot_uri': 'coremeta4cat:milling_duration', - 'unit': {'ucum_code': 'h'}} }) - ball_material: Optional[list[str]] = Field(default=[], description="""Material of the milling balls (e.g. zirconia, stainless steel).""", json_schema_extra = { "linkml_meta": {'domain_of': ['MechanochemicalSynthesis'], - 'slot_uri': 'coremeta4cat:ball_material'} }) - ball_size: Optional[list[float]] = Field(default=[], description="""Diameter of the milling balls.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MechanochemicalSynthesis'], - 'slot_uri': 'coremeta4cat:ball_size', - 'unit': {'ucum_code': 'mm'}} }) - ball_to_powder_ratio: Optional[list[float]] = Field(default=[], description="""Mass ratio of milling balls to powder charge.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MechanochemicalSynthesis'], - 'slot_uri': 'coremeta4cat:ball_to_powder_ratio'} }) - synthesis_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], 'slot_uri': 'VOC4CAT:0000051'} }) - synthesis_duration: Optional[list[Duration]] = Field(default=[], description="""Total duration of the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], 'slot_uri': 'VOC4CAT:0000050'} }) - has_vessel_type: Optional[list[VesselType]] = Field(default=[], description="""Type of reaction or synthesis vessel used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], + Reaction is NOT a DataGeneratingActivity — it is the catalytic process + being observed, not the process that generates the dataset. A CatalysisDataset + is linked to the Reaction it is about via is_about_activity. + + For operando experiments (e.g. in-situ XRD during a reaction), the dataset + carries both: + was_generated_by: Characterization (the measurement producing data) + is_about_activity: Reaction (the catalytic process being monitored) + + The reactor is linked via the inherited used_reactor slot (is_a: + carried_out_by), narrowed here to require a ChemicalReactor instance + rather than touching the generic carried_out_by relation directly. + Reactants are linked via the inherited used_reactant slot (range: + Reagent) -- CatalyticReaction does not declare its own reactant slot. + The type of catalytic reaction (e.g. ammonia synthesis, CO oxidation) + is expressed via rdf_type using a voc4cat or ChemO term. + """ + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/', + 'slot_usage': {'has_reaction_step': {'description': 'A step (part) of this ' + 'CatalyticReaction that ' + 'is itself a ' + 'CatalyticReaction.\n' + 'Narrowed from the ' + 'inherited ' + 'ChemicalReaction range ' + 'so nested reaction\n' + 'steps keep their ' + 'catalysis-specific ' + 'fields (catalyst_type, ' + 'used_reactor,\n' + 'product_identification_method, ' + '...) when loaded.', + 'name': 'has_reaction_step', + 'range': 'CatalyticReaction'}, + 'product_identification_method': {'description': 'The ' + 'analytical ' + 'method used ' + 'to identify ' + 'and/or ' + 'quantify ' + 'reaction ' + 'products.\n' + 'Should ' + 'reference a ' + 'CharacterizationTechnique ' + 'instance ' + '(e.g. GCMS, ' + 'HPLC_MS).\n' + 'The abstract ' + 'stub ' + 'ProductIdentificationMethod ' + 'is retained ' + 'for backward ' + 'compatibility.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'product_identification_method', + 'range': 'ProductIdentificationMethod', + 'required': True}, + 'rdf_type': {'description': 'The type of catalytic reaction as ' + 'an ontology term (e.g. ' + 'VOC4CAT:0007010\n' + 'for a specific reaction type, or ' + 'a ChemO/RXNO term).', + 'name': 'rdf_type', + 'recommended': True}, + 'used_reactor': {'description': 'The reactor in which the ' + 'Reaction takes place.\n' + 'Must be a ChemicalReactor ' + 'instance (a Reactor subclass ' + 'specific to\n' + 'catalytic reaction vessels, ' + 'e.g. FixedBedReactor, CSTR, ' + 'Autoclave).', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'used_reactor', + 'range': 'ChemicalReactor', + 'required': True}}}) + + catalyst_quantity: Optional[list[Mass]] = Field(default=[], description="""Mass of catalyst loaded into the reactor.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalyticReaction'], + 'is_a': 'has_mass', + 'recommended': True, + 'slot_uri': 'coremeta4cat:catalyst_quantity'} }) + catalyst_type: Optional[list[CatalysisResearchFieldEnum]] = Field(default=[], description="""The catalytic regime of the reaction (e.g. heterogeneous, homogeneous, +biocatalysis, electrocatalysis, photocatalysis). For the physical +form/presentation of the catalyst itself, use catalyst_form instead.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalyticReaction'], + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007014'} }) + catalyst_form: Optional[list[CatalystFormEnum]] = Field(default=[], description="""The physical form or presentation of the catalyst as loaded into the +reactor (e.g. thin film, bulk, powder, supported). A separate axis +from catalyst_type (the catalytic regime).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalyticReaction'], 'recommended': True} }) + reaction_name: Optional[list[str]] = Field(default=[], description="""A name for the catalytic reaction which assigns the reactants and +(desired) products (e.g. \"ammonia synthesis\", \"Fischer-Tropsch synthesis\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalyticReaction'], 'is_a': 'has_qualitative_attribute', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) + 'slot_uri': 'VOC4CAT:0007009'} }) + reactor_temperature_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Temperature range in the reactor during the reaction, provided as a +QuantitativeRange with min_value and max_value (unit_code: \"Cel\"). +For a single set-point, set min_value equal to max_value.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalyticReaction'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007032'} }) has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', 'MolecularSynthesis', 'ElectrochemistryMixin', @@ -7940,122 +5251,99 @@ class MechanochemicalSynthesis(PreparationMethod, ThermalSynthesisMixin): 'is_a': 'has_qualitative_attribute', 'recommended': True, 'slot_uri': 'VOC4CAT:0007809'} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], + experiment_pressure: Optional[list[Pressure]] = Field(default=[], description="""Total pressure in the reactor during the experiment.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalyticReaction'], + 'is_a': 'has_pressure', 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class Sublimation(PreparationMethod, ThermalSynthesisMixin): - """ - Catalyst preparation by sublimation: a solid precursor is vaporised - and deposited onto a substrate without passing through a liquid phase. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:Sublimation', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', - 'mixins': ['ThermalSynthesisMixin']}) - - synthesis_pressure: Optional[list[Pressure]] = Field(default=[], description="""Pressure applied during synthesis (e.g. in autoclave or plasma reactor).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PlasmaAssisted', 'Sublimation'], 'slot_uri': 'VOC4CAT:0000053'} }) - synthesis_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], 'slot_uri': 'VOC4CAT:0000051'} }) - synthesis_duration: Optional[list[Duration]] = Field(default=[], description="""Total duration of the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], 'slot_uri': 'VOC4CAT:0000050'} }) - has_vessel_type: Optional[list[VesselType]] = Field(default=[], description="""Type of reaction or synthesis vessel used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], - 'is_a': 'has_qualitative_attribute', + 'slot_uri': 'VOC4CAT:0000118'} }) + feed_composition_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Feed composition range studied, provided as a QuantitativeRange. +Express concentration bounds in an appropriate unit (e.g. \"mol/L\", \"%\" for +vol% or mol%). For fixed-composition experiments use reactant.has_concentration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalyticReaction'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:feed_composition_range'} }) + has_experiment_duration: Optional[Duration] = Field(default=None, description="""Total duration of the experiment or measurement run.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', 'CatalyticReaction'], + 'is_a': 'has_duration', + 'slot_uri': 'SIO:000008'} }) + product_identification_method: list[ProductIdentificationMethod] = Field(default=..., description="""The analytical method used to identify and/or quantify reaction products. +Should reference a CharacterizationTechnique instance (e.g. GCMS, HPLC_MS). +The abstract stub ProductIdentificationMethod is retained for backward compatibility.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalyticReaction'], + 'is_a': 'realized_plan', + 'slot_uri': 'coremeta4cat:product_identification_method'} }) + used_starting_material: Optional[list[StartingMaterial]] = Field(default=[], description="""The slot to specify the StartingMaterial(s) of a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], + 'is_a': 'had_input_entity', + 'recommended': True, + 'slot_uri': 'RO:0004009'} }) + used_reactant: Optional[list[Reagent]] = Field(default=[], description="""The slot to specify the Reagent(s) of a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], + 'is_a': 'had_input_entity', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', - 'MolecularSynthesis', + 'slot_uri': 'RO:0004009'} }) + generated_product: Optional[list[ChemicalProduct]] = Field(default=[], description="""The slot to specify the Product(s) of a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], + 'is_a': 'had_output_entity', + 'recommended': True, + 'slot_uri': 'RO:0004008'} }) + used_catalyst: Optional[list[Catalyst]] = Field(default=[], description="""The slot to specify the Catalyst of a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'RXNO:0000425'} }) + used_solvent: Optional[list[DissolvingSubstance]] = Field(default=[], description="""The slot to specify the chemical substance that had a solvent role (CHEBI:35223) in a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'prov:wasAssociatedWith'} }) + has_duration: Optional[str] = Field(default=None, description="""A slot to provide the duration of a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], 'slot_uri': 'schema:duration'} }) + used_reactor: list[ChemicalReactor] = Field(default=..., description="""The reactor in which the Reaction takes place. +Must be a ChemicalReactor instance (a Reactor subclass specific to +catalytic reaction vessels, e.g. FixedBedReactor, CSTR, Autoclave).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'prov:wasAssociatedWith'} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to specify the Temperature at which a ChemicalReaction takes place.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', 'ElectrochemistryMixin', 'PowderXRD', - 'XPS', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', 'InfraredSpectroscopy', 'DRIFTS', 'RamanSpectroscopy', 'NMRSpectroscopy', - 'Thermogravimetry', - 'CatalyticReaction'], - 'is_a': 'has_qualitative_attribute', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', 'recommended': True, - 'slot_uri': 'VOC4CAT:0007809'} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + 'slot_uri': 'SIO:000008'} }) + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to specify the Pressure at which a ChemicalReaction takes place.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_yield: Optional[list[Yield]] = Field(default=[], description="""A slot to provide the percentage of how much of the ChemicalProduct was produced by a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_reaction_step: Optional[list[CatalyticReaction]] = Field(default=[], description="""A step (part) of this CatalyticReaction that is itself a CatalyticReaction. +Narrowed from the inherited ChemicalReaction range so nested reaction +steps keep their catalysis-specific fields (catalyst_type, used_reactor, +product_identification_method, ...) when loaded.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], + 'is_a': 'has_part', + 'slot_uri': 'BFO:0000051'} }) + related_resource: Optional[list[Resource]] = Field(default=[], description="""The slot to specify any Documents related to a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'Dataset'], 'slot_uri': 'dcterms:relation'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + title: Optional[list[str]] = Field(default=[], description="""The slot to provide a title for the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -8093,8 +5381,9 @@ class Sublimation(PreparationMethod, ThermalSynthesisMixin): 'SupportiveEntity', 'Surrounding', 'TimeInstant'], + 'notes': ['not in DCAT-AP'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[list[str]] = Field(default=[], description="""The slot to provide a description for the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -8131,86 +5420,90 @@ class Sublimation(PreparationMethod, ThermalSynthesisMixin): 'SupportiveEntity', 'Surrounding', 'TimeInstant'], + 'notes': ['not in DCAT-AP'], 'slot_uri': 'dcterms:description'} }) + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the EvaluatedActivity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'adms:identifier'} }) + has_part: Optional[list[Activity]] = Field(default=[], description="""The slot to provide an Activity that is part of the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:hasPart'} }) + had_input_entity: Optional[list[Entity]] = Field(default=[], description="""The slot to specify the Entity that was used as an input of an Activity that is to be changed, consumed or transformed.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'prov:used'} }) + had_output_entity: Optional[list[Entity]] = Field(default=[], description="""The slot to specify the Entity that was generated as an output of an Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'prov:generated'} }) + had_input_activity: Optional[list[Activity]] = Field(default=[], description="""The slot to provide a previous Activity that informed the Activity by being causally via a shared participant.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'prov:wasInformedBy'} }) + carried_out_by: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to specify the AgenticEntity that played a certain part in carrying out the Activity, either via having a specific role, function or disposition that was realized in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'prov:wasAssociatedWith'} }) + has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'notes': ['not in DCAT-AP'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + part_of: Optional[list[Activity]] = Field(default=[], description="""The slot to provide an Activity of which the Activity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'inverse': 'has_part', + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:isPartOf'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], + rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The type of catalytic reaction as an ontology term (e.g. VOC4CAT:0007010 +for a specific reaction type, or a ChemO/RXNO term).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], 'in_subset': ['domain_agnostic_core'], 'recommended': True, 'slot_uri': 'rdf:type'} }) -class MolecularSynthesis(PreparationMethod, DryingMixin): +class EvaluatedEntity(Entity): """ - Catalyst preparation by molecular (organometallic or coordination) - chemistry routes, including crystallisation and purification steps. + An Entity that is being evaluated in a DataGeneratingActivity. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:MolecularSynthesis', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', - 'mixins': ['DryingMixin']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Entity', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', + 'in_subset': ['domain_agnostic_core'], + 'slot_usage': {'description': {'description': 'The slot to provide a ' + 'description for the ' + 'EvaluatedEntity.', + 'name': 'description'}, + 'other_identifier': {'description': 'A slot to provide a ' + 'secondary identifier of ' + 'the EvaluatedEntity.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'other_identifier', + 'range': 'Identifier', + 'required': False}, + 'title': {'description': 'The slot to provide a title for the ' + 'EvaluatedEntity.', + 'name': 'title'}, + 'was_generated_by': {'description': 'A slot to provide the ' + 'Activity which created ' + 'the EvaluatedEntity.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'was_generated_by', + 'range': 'Activity'}}}) - reaction_vessel: Optional[list[str]] = Field(default=[], description="""Type of reaction vessel used (e.g. Schlenk flask, round-bottom flask).""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularSynthesis'], - 'slot_uri': 'coremeta4cat:reaction_vessel'} }) - mixing_device: Optional[list[str]] = Field(default=[], description="""Device used for mixing (e.g. magnetic stirrer, vortex mixer).""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularSynthesis'], 'slot_uri': 'coremeta4cat:mixing_device'} }) - has_stirring_duration: Optional[Duration] = Field(default=None, description="""Duration of stirring or agitation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularSynthesis'], - 'is_a': 'has_duration', - 'slot_uri': 'SIO:000008'} }) - has_stirring_speed: Optional[list[AngularVelocity]] = Field(default=[], description="""Rotational speed of stirring or agitation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularSynthesis', 'CSTR'], - 'is_a': 'has_angular_velocity', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_mixing_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature maintained during mixing.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'MolecularSynthesis'], - 'is_a': 'has_temperature', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008127'} }) - filtration_device: Optional[list[str]] = Field(default=[], description="""Device used for filtration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', 'MolecularSynthesis'], - 'slot_uri': 'coremeta4cat:filtration_device'} }) - filter_type: Optional[list[str]] = Field(default=[], description="""Type of filter membrane or medium used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', 'MolecularSynthesis'], - 'slot_uri': 'coremeta4cat:filter_type'} }) - crystallisation_solvents: Optional[list[str]] = Field(default=[], description="""Solvent(s) used for crystallisation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularSynthesis'], - 'slot_uri': 'coremeta4cat:crystallisation_solvents'} }) - precipitation_agent: Optional[list[str]] = Field(default=[], description="""Agent used to induce precipitation in molecular synthesis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularSynthesis'], 'slot_uri': 'VOC4CAT:0008203'} }) - crystallisation_duration: Optional[list[float]] = Field(default=[], description="""Duration of the crystallisation step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularSynthesis'], - 'slot_uri': 'coremeta4cat:crystallisation_duration', - 'unit': {'ucum_code': 'h'}} }) - purification_solvent: Optional[list[str]] = Field(default=[], description="""Solvent used for washing or recrystallisation during purification.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularSynthesis'], - 'slot_uri': 'coremeta4cat:purification_solvent'} }) - number_of_cycles: Optional[list[int]] = Field(default=[], description="""Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin', - 'AtomicLayerDeposition', - 'MolecularSynthesis', - 'XRayAbsorptionSpectroscopy', - 'CyclicVoltammetry'], - 'slot_uri': 'VOC4CAT:0008123'} }) - temperature_ramp: Optional[list[float]] = Field(default=[], description="""Temperature ramp rate applied during drying or activation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularSynthesis'], - 'slot_uri': 'coremeta4cat:temperature_ramp', - 'unit': {'ucum_code': 'Cel/min'}} }) - has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', - 'MolecularSynthesis', - 'ElectrochemistryMixin', - 'PowderXRD', - 'XPS', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'Thermogravimetry', - 'CatalyticReaction'], - 'is_a': 'has_qualitative_attribute', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0007809'} }) - drying_device: Optional[list[str]] = Field(default=[], description="""Device used for drying (e.g. oven, rotary evaporator).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], 'slot_uri': 'VOC4CAT:0008122'} }) - has_drying_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], - 'is_a': 'has_temperature', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008207'} }) - has_drying_duration: Optional[Duration] = Field(default=None, description="""Duration of the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], - 'is_a': 'has_duration', - 'slot_uri': 'VOC4CAT:0008206'} }) - has_drying_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Atmosphere maintained during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], - 'is_a': 'has_atmosphere', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0008208'} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + was_generated_by: Optional[list[Activity]] = Field(default=[], description="""A slot to provide the Activity which created the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'EvaluatedEntity'], 'slot_uri': 'prov:wasGeneratedBy'} }) + title: Optional[str] = Field(default=None, description="""The slot to provide a title for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -8249,7 +5542,7 @@ class MolecularSynthesis(PreparationMethod, DryingMixin): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""The slot to provide a description for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -8287,48 +5580,59 @@ class MolecularSynthesis(PreparationMethod, DryingMixin): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + 'slot_uri': 'adms:identifier'} }) + has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class ExsolutionSynthesis(PreparationMethod, CalcinationMixin): - """ - Catalyst preparation by exsolution: metal nanoparticles are grown on - a perovskite oxide surface by reduction/oxidation cycling. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:ExsolutionSynthesis', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', - 'mixins': ['CalcinationMixin']}) - - has_calcination_temperature_range: Optional[QuantitativeRange] = Field(default=None, description="""Temperature range of the calcination programme (initial -> final temperature), -provided as a QuantitativeRange. Unit: Degree Celsius.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'slot_uri': 'coremeta4cat:hasCalcinationTemperatureRange'} }) - has_calcination_dwelling_time: Optional[Duration] = Field(default=None, description="""Time held at the final calcination temperature.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'is_a': 'has_duration', - 'slot_uri': 'VOC4CAT:0000060'} }) - number_of_cycles: Optional[list[int]] = Field(default=[], description="""Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin', - 'AtomicLayerDeposition', - 'MolecularSynthesis', - 'XRayAbsorptionSpectroscopy', - 'CyclicVoltammetry'], - 'slot_uri': 'VOC4CAT:0008123'} }) - has_calcination_atmosphere: Optional[list[CalcinationGaseousEnvironment]] = Field(default=[], description="""Gaseous environment maintained during the calcination step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'is_a': 'has_atmosphere', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_calcination_heating_rate: Optional[list[HeatingRate]] = Field(default=[], description="""Temperature ramp rate during the calcination step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'is_a': 'has_heating_rate', + 'slot_uri': 'dcterms:relation'} }) + has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], 'recommended': True, - 'slot_uri': 'VOC4CAT:0008116'} }) - has_calcination_gas_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Gas flow rate maintained during calcination.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], - 'is_a': 'has_flow_rate', + 'slot_uri': 'dcterms:relation'} }) + has_part: Optional[list[Entity]] = Field(default=[], description="""A slot to provide a part of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'slot_uri': 'dcterms:hasPart'} }) + part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'inverse': 'has_part', + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:isPartOf'} }) + type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], + 'slot_uri': 'dcterms:type'} }) + rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], + 'in_subset': ['domain_agnostic_core'], 'recommended': True, - 'slot_uri': 'VOC4CAT:0000056'} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + 'slot_uri': 'rdf:type'} }) + + +class AnalysisSourceData(EvaluatedEntity): + """ + Information that was evaluated within a DataAnalysis. + """ + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Entity', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', + 'in_subset': ['domain_agnostic_core'], + 'slot_usage': {'was_generated_by': {'description': 'A slot to provide the ' + 'Activity which created ' + 'the AnalysisSourceData.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'was_generated_by', + 'range': 'DataGeneratingActivity'}}}) + + was_generated_by: Optional[list[DataGeneratingActivity]] = Field(default=[], description="""A slot to provide the Activity which created the AnalysisSourceData.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'EvaluatedEntity'], 'slot_uri': 'prov:wasGeneratedBy'} }) + title: Optional[str] = Field(default=None, description="""The slot to provide a title for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -8367,7 +5671,7 @@ class ExsolutionSynthesis(PreparationMethod, CalcinationMixin): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""The slot to provide a description for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -8405,6 +5709,34 @@ class ExsolutionSynthesis(PreparationMethod, CalcinationMixin): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + 'slot_uri': 'adms:identifier'} }) + has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_part: Optional[list[Entity]] = Field(default=[], description="""A slot to provide a part of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'slot_uri': 'dcterms:hasPart'} }) + part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'inverse': 'has_part', + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:isPartOf'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -8413,15 +5745,68 @@ class ExsolutionSynthesis(PreparationMethod, CalcinationMixin): 'slot_uri': 'rdf:type'} }) -class CharacterizationTechnique(Plan): +class Kind(ConfiguredBaseModel): """ - An abstract Plan describing the analytical protocol used to characterize - a catalyst. Concrete subclasses specify technique-specific parameters. - Linked from Characterization via realized_plan. + See [DCAT-AP specs:Kind](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Kind) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'abstract': True, - 'class_uri': 'OBI:0000272', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'vcard:Kind', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) + + pass + + +class Location(ConfiguredBaseModel): + """ + See [DCAT-AP specs:Location](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Location) + """ + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcterms:Location', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', + 'slot_usage': {'bbox': {'description': 'The geographic bounding box of a ' + 'resource.', + 'inlined_as_list': False, + 'multivalued': False, + 'name': 'bbox', + 'range': 'string', + 'recommended': True, + 'required': False, + 'slot_uri': 'dcat:bbox'}, + 'centroid': {'description': 'The geographic center (centroid) ' + 'of a resource.', + 'inlined_as_list': False, + 'multivalued': False, + 'name': 'centroid', + 'range': 'string', + 'recommended': True, + 'required': False, + 'slot_uri': 'dcat:centroid'}, + 'geometry': {'description': 'The corresponding geometry for a ' + 'resource.', + 'inlined_as_list': False, + 'multivalued': False, + 'name': 'geometry', + 'range': 'Geometry', + 'required': False, + 'slot_uri': 'locn:geometry'}}}) + + bbox: Optional[str] = Field(default=None, description="""The geographic bounding box of a resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Location'], 'recommended': True, 'slot_uri': 'dcat:bbox'} }) + centroid: Optional[str] = Field(default=None, description="""The geographic center (centroid) of a resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Location'], 'recommended': True, 'slot_uri': 'dcat:centroid'} }) + geometry: Optional[Geometry] = Field(default=None, description="""The corresponding geometry for a resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Location'], 'slot_uri': 'locn:geometry'} }) + + +class Plan(ClassifierMixin): + """ + A piece of information that specifies how an activity has to be carried out by its agents including what kind of steps have to be taken and what kind of parameters have to be met/set. + """ + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'aliases': ['Plan Specification', 'Method', 'Procedure'], + 'class_uri': 'prov:Plan', + 'examples': [{'description': 'We assigned the structure of sample CRS-37013 ' + 'using a 13C NMR (CHMO:0000595) and the ' + 'settings: pulse sequence: zgpg30, temperature: ' + '298.0 K, number of scans: 1024, Solvent : ' + 'chloroform-D1 (CDCl3).'}], + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', + 'in_subset': ['domain_agnostic_core'], + 'mixins': ['ClassifierMixin']}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -8508,72 +5893,31 @@ class CharacterizationTechnique(Plan): 'slot_uri': 'rdf:type'} }) -class PowderXRD(CharacterizationTechnique, XRaySourceMixin): +class CatalysisPlan(Plan): """ - Powder X-ray diffraction for phase identification and structural analysis. + A CoreMeta4Cat specialization of DCAT-AP-PLUS's Plan that adds a + persistent identifier (id). Plan itself (external, dcat-ap-plus) only + lists title/description -- every CoreMeta4Cat protocol, technique, and + method class needs to be independently citable and cross-referenceable + (e.g. linked to from multiple Reaction/Characterization instances that + reuse the same protocol), so id is added once here rather than + repeated on each of PreparationMethod, CharacterizationTechnique, + SimulationMethod, and ProductIdentificationMethod individually. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000158', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', - 'mixins': ['XRaySourceMixin']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'abstract': True, + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) - has_two_theta_range: Optional[QuantitativeRange] = Field(default=None, description="""2theta diffraction scan range (minimum -> maximum 2theta angle) as a QuantitativeRange. -Provide unit as a QUDT term (e.g. Degree).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD'], 'slot_uri': 'coremeta4cat:hasTwoThetaRange'} }) - step_size: Optional[list[float]] = Field(default=[], description="""Step size for a scan (angle, wavelength, energy, or potential).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', - 'XPS', - 'InfraredSpectroscopy', - 'DRIFTS', - 'PhotoluminescenceSpectroscopy'], - 'slot_uri': 'AFR:0000950'} }) - has_operation_mode: Optional[list[OperationMode]] = Field(default=[], description="""Operation mode of an instrument or process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', - 'XRayAbsorptionSpectroscopy', - 'InfraredSpectroscopy', - 'TransmissionElectronMicroscopy', - 'Thermogravimetry', - 'ElectroSprayIonizationMassSpectrometry'], - 'is_a': 'has_qualitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', - 'MolecularSynthesis', - 'ElectrochemistryMixin', - 'PowderXRD', - 'XPS', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'Thermogravimetry', - 'CatalyticReaction'], - 'is_a': 'has_qualitative_attribute', - 'recommended': True, - 'slot_uri': 'VOC4CAT:0007809'} }) - has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', - 'PhotoluminescenceMixin', - 'ElectrochemistryMixin', - 'PowderXRD', - 'SingleCrystalXRD', - 'XRayAbsorptionSpectroscopy', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'DynamicLightScattering', - 'SizeExclusionChromatography', - 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', - 'ChemicalReaction', - 'Microkinetics', - 'MonteCarlo', - 'AqueousStability'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - sample_spinning_speed: Optional[list[AngularVelocity]] = Field(default=[], description="""Sample spinning speed during XRD measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD'], 'slot_uri': 'coremeta4cat:sample_spinning_speed'} }) - has_experiment_duration: Optional[Duration] = Field(default=None, description="""Total duration of the experiment or measurement run.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', 'CatalyticReaction'], - 'is_a': 'has_duration', - 'slot_uri': 'SIO:000008'} }) - xray_source: Optional[list[str]] = Field(default=[], description="""X-ray source used (e.g. Cu K-alpha, Mo K-alpha, synchrotron).""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRaySourceMixin'], 'slot_uri': 'OBI:0001138'} }) - monochromator: Optional[list[str]] = Field(default=[], description="""Monochromator type or configuration used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRaySourceMixin'], 'slot_uri': 'CHMO:0002120'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -8659,37 +6003,31 @@ class PowderXRD(CharacterizationTechnique, XRaySourceMixin): 'slot_uri': 'rdf:type'} }) -class SingleCrystalXRD(CharacterizationTechnique, XRaySourceMixin): +class PreparationMethod(CatalysisPlan): """ - Single crystal X-ray diffraction for structure determination. + An abstract Plan describing the protocol used to prepare a catalyst. + Concrete subclasses (Impregnation, CoPrecipitation, …) specify the + method-specific parameters. Linked from Synthesis via realized_plan. + + The specific preparation method type should additionally be expressed + via rdf_type on the Synthesis activity using a voc4cat term + (e.g. VOC4CAT:0007016 for preparation method). """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000852', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', - 'mixins': ['XRaySourceMixin']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'abstract': True, + 'class_uri': 'VOC4CAT:0007016', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/'}) - has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', - 'PhotoluminescenceMixin', - 'ElectrochemistryMixin', - 'PowderXRD', - 'SingleCrystalXRD', - 'XRayAbsorptionSpectroscopy', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'DynamicLightScattering', - 'SizeExclusionChromatography', - 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', - 'ChemicalReaction', - 'Microkinetics', - 'MonteCarlo', - 'AqueousStability'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - xray_source: Optional[list[str]] = Field(default=[], description="""X-ray source used (e.g. Cu K-alpha, Mo K-alpha, synchrotron).""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRaySourceMixin'], 'slot_uri': 'OBI:0001138'} }) - monochromator: Optional[list[str]] = Field(default=[], description="""Monochromator type or configuration used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRaySourceMixin'], 'slot_uri': 'CHMO:0002120'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -8775,63 +6113,77 @@ class SingleCrystalXRD(CharacterizationTechnique, XRaySourceMixin): 'slot_uri': 'rdf:type'} }) -class XRayAbsorptionSpectroscopy(CharacterizationTechnique, EnergyRangeMixin, XRaySourceMixin): +class Impregnation(PreparationMethod, CalcinationMixin, DryingMixin): """ - X-ray absorption spectroscopy (XAS/XANES/EXAFS) for electronic and local structure analysis. + Catalyst preparation by impregnation: a solution of the active phase + precursor is brought into contact with the support material. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000286', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', - 'mixins': ['XRaySourceMixin', 'EnergyRangeMixin']}) - - has_operation_mode: Optional[list[OperationMode]] = Field(default=[], description="""Operation mode of an instrument or process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', - 'XRayAbsorptionSpectroscopy', - 'InfraredSpectroscopy', - 'TransmissionElectronMicroscopy', - 'Thermogravimetry', - 'ElectroSprayIonizationMassSpectrometry'], + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0007028', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', + 'mixins': ['DryingMixin', 'CalcinationMixin']}) + + impregnation_type: Optional[list[ImpregnationTypeEnum]] = Field(default=[], description="""Type of impregnation used (wet, dry, incipient wetness).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Impregnation'], 'slot_uri': 'VOC4CAT:0008119'} }) + impregnation_duration: Optional[list[Duration]] = Field(default=[], description="""Duration of the impregnation step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Impregnation'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0008120'} }) + impregnation_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature during the impregnation step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Impregnation'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008121'} }) + drying_device: Optional[list[str]] = Field(default=[], description="""Device used for drying (e.g. oven, rotary evaporator).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], 'is_a': 'has_qualitative_attribute', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - element_analyzed: Optional[list[str]] = Field(default=[], description="""Chemical element analysed (e.g. Fe, Cu, Pt).""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRayAbsorptionSpectroscopy', 'ICPAES'], - 'slot_uri': 'coremeta4cat:element_analyzed'} }) - absorption_edge: Optional[list[str]] = Field(default=[], description="""X-ray absorption edge measured (e.g. K-edge, L3-edge).""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRayAbsorptionSpectroscopy'], - 'slot_uri': 'coremeta4cat:absorption_edge'} }) - energy_resolution: Optional[list[EnergyQuantity]] = Field(default=[], description="""Energy resolution of the spectrometer or monochromator.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRayAbsorptionSpectroscopy'], 'slot_uri': 'AFR:0000950'} }) - has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', - 'PhotoluminescenceMixin', - 'ElectrochemistryMixin', - 'PowderXRD', - 'SingleCrystalXRD', - 'XRayAbsorptionSpectroscopy', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'DynamicLightScattering', - 'SizeExclusionChromatography', - 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', - 'ChemicalReaction', - 'Microkinetics', - 'MonteCarlo', - 'AqueousStability'], + 'slot_uri': 'VOC4CAT:0008122'} }) + has_drying_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008207'} }) + has_drying_duration: Optional[Duration] = Field(default=None, description="""Duration of the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0008206'} }) + has_drying_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Atmosphere maintained during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_atmosphere', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008208'} }) + has_calcination_temperature_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Temperature range of the calcination programme (initial -> final temperature), +provided as a QuantitativeRange. Unit: Degree Celsius.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], 'is_a': 'has_quantitative_attribute', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - beamline_source: Optional[list[str]] = Field(default=[], description="""Synchrotron beamline or X-ray source identifier.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRayAbsorptionSpectroscopy'], - 'slot_uri': 'coremeta4cat:beamline_source'} }) - noise_of_measurement: Optional[list[float]] = Field(default=[], description="""Noise level of the XAS measurement (signal-to-noise ratio).""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRayAbsorptionSpectroscopy'], - 'slot_uri': 'coremeta4cat:noise_of_measurement'} }) + 'slot_uri': 'coremeta4cat:hasCalcinationTemperatureRange'} }) + has_calcination_dwelling_time: Optional[Duration] = Field(default=None, description="""Time held at the final calcination temperature.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0000060'} }) number_of_cycles: Optional[list[int]] = Field(default=[], description="""Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin', 'AtomicLayerDeposition', 'MolecularSynthesis', 'XRayAbsorptionSpectroscopy', 'CyclicVoltammetry'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'VOC4CAT:0008123'} }) - xray_source: Optional[list[str]] = Field(default=[], description="""X-ray source used (e.g. Cu K-alpha, Mo K-alpha, synchrotron).""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRaySourceMixin'], 'slot_uri': 'OBI:0001138'} }) - monochromator: Optional[list[str]] = Field(default=[], description="""Monochromator type or configuration used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRaySourceMixin'], 'slot_uri': 'CHMO:0002120'} }) - has_energy_range: Optional[QuantitativeRange] = Field(default=None, description="""Energy scan range (minimum -> maximum) as a QuantitativeRange. -Provide unit as a QUDT term (e.g. eV, keV).""", json_schema_extra = { "linkml_meta": {'domain_of': ['EnergyRangeMixin'], 'slot_uri': 'coremeta4cat:hasEnergyRange'} }) + has_calcination_atmosphere: Optional[list[CalcinationGaseousEnvironment]] = Field(default=[], description="""Gaseous environment maintained during the calcination step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_atmosphere', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_calcination_heating_rate: Optional[list[HeatingRate]] = Field(default=[], description="""Temperature ramp rate during the calcination step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_heating_rate', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008116'} }) + has_calcination_gas_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Gas flow rate maintained during calcination.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_flow_rate', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0000056'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -8917,49 +6269,115 @@ class XRayAbsorptionSpectroscopy(CharacterizationTechnique, EnergyRangeMixin, XR 'slot_uri': 'rdf:type'} }) -class XPS(CharacterizationTechnique, EnergyRangeMixin, XRaySourceMixin): +class CoPrecipitation(PreparationMethod, PrecipitationMixin, CalcinationMixin, DryingMixin): """ - X-ray photoelectron spectroscopy for surface elemental and chemical state analysis. + Catalyst preparation by co-precipitation: precursor salts are + simultaneously precipitated from solution by a precipitating agent. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000404', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', - 'mixins': ['XRaySourceMixin', 'EnergyRangeMixin']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0007795', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', + 'mixins': ['PrecipitationMixin', 'DryingMixin', 'CalcinationMixin']}) - total_acquisition_time: Optional[list[Duration]] = Field(default=[], description="""Total time for XPS spectrum acquisition.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XPS'], 'slot_uri': 'coremeta4cat:total_acquisition_time'} }) - number_of_scans: Optional[list[int]] = Field(default=[], description="""Number of scans or accumulations recorded.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XPS', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy'], - 'slot_uri': 'coremeta4cat:number_of_scans'} }) - step_size: Optional[list[float]] = Field(default=[], description="""Step size for a scan (angle, wavelength, energy, or potential).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', - 'XPS', - 'InfraredSpectroscopy', - 'DRIFTS', - 'PhotoluminescenceSpectroscopy'], - 'slot_uri': 'AFR:0000950'} }) - pass_energy: Optional[list[EnergyQuantity]] = Field(default=[], description="""Analyser pass energy setting in XPS.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XPS'], 'slot_uri': 'coremeta4cat:pass_energy'} }) - spot_size: Optional[list[LengthQuantity]] = Field(default=[], description="""X-ray spot size on the sample surface.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XPS'], 'slot_uri': 'coremeta4cat:spot_size'} }) - lense_mode: Optional[list[str]] = Field(default=[], description="""Electron lens mode setting in XPS analyser.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XPS'], 'slot_uri': 'VOC4CAT:0000108'} }) - charge_compensation: Optional[list[str]] = Field(default=[], description="""Charge compensation method applied during XPS measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XPS'], 'slot_uri': 'coremeta4cat:charge_compensation'} }) - has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', - 'MolecularSynthesis', - 'ElectrochemistryMixin', - 'PowderXRD', - 'XPS', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'Thermogravimetry', - 'CatalyticReaction'], + precipitating_agent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Chemical agent used to induce precipitation (e.g. NaOH, NH3).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008203'} }) + has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', + 'UVVisSpectroscopy', + 'DynamicLightScattering', + 'ElectroSprayIonizationMassSpectrometry', + 'ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_ph_value: Optional[list[PHValue]] = Field(default=[], description="""The slot to provide the PHValue of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_mixing_speed: Optional[list[AngularVelocity]] = Field(default=[], description="""Rotational speed during mixing of synthesis components.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], + 'is_a': 'has_angular_velocity', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_mixing_duration: Optional[Duration] = Field(default=None, description="""Duration of the mixing step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0008126'} }) + has_mixing_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature maintained during mixing.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'MolecularSynthesis'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008127'} }) + order_of_addition: Optional[list[str]] = Field(default=[], description="""Order in which reagents or components are combined.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], 'is_a': 'has_qualitative_attribute', 'recommended': True, - 'slot_uri': 'VOC4CAT:0007809'} }) - xray_source: Optional[list[str]] = Field(default=[], description="""X-ray source used (e.g. Cu K-alpha, Mo K-alpha, synchrotron).""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRaySourceMixin'], 'slot_uri': 'OBI:0001138'} }) - monochromator: Optional[list[str]] = Field(default=[], description="""Monochromator type or configuration used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRaySourceMixin'], 'slot_uri': 'CHMO:0002120'} }) - has_energy_range: Optional[QuantitativeRange] = Field(default=None, description="""Energy scan range (minimum -> maximum) as a QuantitativeRange. -Provide unit as a QUDT term (e.g. eV, keV).""", json_schema_extra = { "linkml_meta": {'domain_of': ['EnergyRangeMixin'], 'slot_uri': 'coremeta4cat:hasEnergyRange'} }) + 'slot_uri': 'VOC4CAT:0008128'} }) + filtration: Optional[list[str]] = Field(default=[], description="""Filtration method used to separate the precipitate (e.g. vacuum filtration).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008129'} }) + purification: Optional[list[str]] = Field(default=[], description="""Purification method applied after synthesis (e.g. washing, dialysis).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008130'} }) + has_aging_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature maintained during the aging step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008131'} }) + has_aging_duration: Optional[Duration] = Field(default=None, description="""Duration of the aging step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'SolGel'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0008204'} }) + drying_device: Optional[list[str]] = Field(default=[], description="""Device used for drying (e.g. oven, rotary evaporator).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008122'} }) + has_drying_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008207'} }) + has_drying_duration: Optional[Duration] = Field(default=None, description="""Duration of the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0008206'} }) + has_drying_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Atmosphere maintained during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_atmosphere', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008208'} }) + has_calcination_temperature_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Temperature range of the calcination programme (initial -> final temperature), +provided as a QuantitativeRange. Unit: Degree Celsius.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:hasCalcinationTemperatureRange'} }) + has_calcination_dwelling_time: Optional[Duration] = Field(default=None, description="""Time held at the final calcination temperature.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0000060'} }) + number_of_cycles: Optional[list[int]] = Field(default=[], description="""Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin', + 'AtomicLayerDeposition', + 'MolecularSynthesis', + 'XRayAbsorptionSpectroscopy', + 'CyclicVoltammetry'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008123'} }) + has_calcination_atmosphere: Optional[list[CalcinationGaseousEnvironment]] = Field(default=[], description="""Gaseous environment maintained during the calcination step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_atmosphere', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_calcination_heating_rate: Optional[list[HeatingRate]] = Field(default=[], description="""Temperature ramp rate during the calcination step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_heating_rate', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008116'} }) + has_calcination_gas_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Gas flow rate maintained during calcination.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_flow_rate', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0000056'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -9045,17 +6463,56 @@ class XPS(CharacterizationTechnique, EnergyRangeMixin, XRaySourceMixin): 'slot_uri': 'rdf:type'} }) -class EDX(CharacterizationTechnique): +class SolGel(PreparationMethod, DryingMixin): """ - Energy-dispersive X-ray spectroscopy for elemental mapping and quantification. + Catalyst preparation by the sol-gel process: hydrolysis and condensation + of precursor molecules to form a colloidal network (gel). """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000309', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0001313', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', + 'mixins': ['DryingMixin']}) - primary_energy: Optional[list[EnergyQuantity]] = Field(default=[], description="""Primary electron beam energy for EDX excitation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['EDX'], 'slot_uri': 'coremeta4cat:primary_energy'} }) - counting_time: Optional[list[Duration]] = Field(default=[], description="""X-ray counting time per point or spectrum.""", json_schema_extra = { "linkml_meta": {'domain_of': ['EDX'], 'slot_uri': 'coremeta4cat:counting_time'} }) - resolution: Optional[list[float]] = Field(default=[], description="""Resolution of a measurement or detector.""", json_schema_extra = { "linkml_meta": {'domain_of': ['EDX', 'DRIFTS'], 'slot_uri': 'coremeta4cat:resolution'} }) - calibration_method: Optional[list[str]] = Field(default=[], description="""Calibration method applied during a measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['EDX', 'ICPAES'], 'slot_uri': 'coremeta4cat:calibration_method'} }) + hydrolysis_ratio: Optional[list[float]] = Field(default=[], description="""Molar ratio of water to alkoxide precursor used in hydrolysis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SolGel'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:hydrolysis_ratio'} }) + has_aging_duration: Optional[Duration] = Field(default=None, description="""Duration of the aging step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'SolGel'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0008204'} }) + drying: Optional[list[str]] = Field(default=[], description="""Drying method used for the gel (e.g. supercritical drying, freeze drying).""", json_schema_extra = { "linkml_meta": {'domain_of': ['SolGel'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:drying'} }) + surfactant_template: Optional[list[str]] = Field(default=[], description="""Surfactant or structure-directing agent used as a template.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SolGel'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:surfactant_template'} }) + drying_device: Optional[list[str]] = Field(default=[], description="""Device used for drying (e.g. oven, rotary evaporator).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008122'} }) + has_drying_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008207'} }) + has_drying_duration: Optional[Duration] = Field(default=None, description="""Duration of the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0008206'} }) + has_drying_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Atmosphere maintained during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_atmosphere', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008208'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -9141,59 +6598,39 @@ class EDX(CharacterizationTechnique): 'slot_uri': 'rdf:type'} }) -class InfraredSpectroscopy(CharacterizationTechnique): +class Solvothermal(PreparationMethod, ThermalSynthesisMixin): """ - Infrared spectroscopy (FTIR/ATR) for functional group and surface species identification. + Catalyst preparation under elevated temperature and pressure in a + sealed vessel using a non-aqueous solvent. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000630', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/'}) - - has_operation_mode: Optional[list[OperationMode]] = Field(default=[], description="""Operation mode of an instrument or process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', - 'XRayAbsorptionSpectroscopy', - 'InfraredSpectroscopy', - 'TransmissionElectronMicroscopy', - 'Thermogravimetry', - 'ElectroSprayIonizationMassSpectrometry'], + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0001458', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', + 'mixins': ['ThermalSynthesisMixin']}) + + filling_volume: Optional[list[float]] = Field(default=[], description="""Volume of solution relative to autoclave volume (filling degree).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Solvothermal'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:filling_volume', + 'unit': {'ucum_code': 'mL'}} }) + stirrer_type: Optional[list[str]] = Field(default=[], description="""Type of stirrer used (e.g. magnetic, mechanical, none).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Solvothermal'], 'is_a': 'has_qualitative_attribute', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_wavenumber_range: Optional[QuantitativeRange] = Field(default=None, description="""Infrared wavenumber scan range (minimum -> maximum cm^-1) as a QuantitativeRange. -Provide unit as a QUDT term (e.g. ReciprocalCentimetre).""", json_schema_extra = { "linkml_meta": {'domain_of': ['InfraredSpectroscopy', 'DRIFTS'], - 'slot_uri': 'coremeta4cat:hasWavenumberRange'} }) - step_size: Optional[list[float]] = Field(default=[], description="""Step size for a scan (angle, wavelength, energy, or potential).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', - 'XPS', - 'InfraredSpectroscopy', - 'DRIFTS', - 'PhotoluminescenceSpectroscopy'], - 'slot_uri': 'AFR:0000950'} }) - has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', - 'PhotoluminescenceMixin', - 'ElectrochemistryMixin', - 'PowderXRD', - 'SingleCrystalXRD', - 'XRayAbsorptionSpectroscopy', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'DynamicLightScattering', - 'SizeExclusionChromatography', - 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', - 'ChemicalReaction', - 'Microkinetics', - 'MonteCarlo', - 'AqueousStability'], - 'is_a': 'has_quantitative_attribute', + 'slot_uri': 'VOC4CAT:0008113'} }) + cooling_rate: Optional[list[HeatingRate]] = Field(default=[], description="""Rate at which the reactor is cooled after synthesis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Solvothermal'], + 'is_a': 'has_heating_rate', + 'recommended': True, + 'slot_uri': 'coremeta4cat:cooling_rate'} }) + synthesis_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0000051'} }) + synthesis_duration: Optional[list[Duration]] = Field(default=[], description="""Total duration of the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0000050'} }) + has_vessel_type: Optional[list[VesselType]] = Field(default=[], description="""Type of reaction or synthesis vessel used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], + 'is_a': 'has_qualitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - background_correction: Optional[list[str]] = Field(default=[], description="""Background correction method applied to IR spectra.""", json_schema_extra = { "linkml_meta": {'domain_of': ['InfraredSpectroscopy'], 'slot_uri': 'AFP:0003721'} }) - number_of_scans: Optional[list[int]] = Field(default=[], description="""Number of scans or accumulations recorded.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XPS', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy'], - 'slot_uri': 'coremeta4cat:number_of_scans'} }) has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', 'MolecularSynthesis', 'ElectrochemistryMixin', @@ -9208,6 +6645,17 @@ class InfraredSpectroscopy(CharacterizationTechnique): 'is_a': 'has_qualitative_attribute', 'recommended': True, 'slot_uri': 'VOC4CAT:0007809'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -9293,15 +6741,41 @@ class InfraredSpectroscopy(CharacterizationTechnique): 'slot_uri': 'rdf:type'} }) -class DRIFTS(CharacterizationTechnique): +class PlasmaAssisted(PreparationMethod, ThermalSynthesisMixin): """ - Diffuse reflectance infrared Fourier transform spectroscopy for in-situ - surface species identification under reactive gas conditions. + Catalyst preparation using plasma treatment to modify surface + properties or deposit active components. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000645', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:PlasmaAssisted', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', + 'mixins': ['ThermalSynthesisMixin']}) - adsorption_gas: Optional[list[ChemicalEntity]] = Field(default=[], description="""Probe gas adsorbed during in-situ DRIFTS measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DRIFTS'], 'slot_uri': 'coremeta4cat:adsorption_gas'} }) + plasma_type: Optional[list[str]] = Field(default=[], description="""Type of plasma used (e.g. DBD, microwave, RF plasma).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PlasmaAssisted'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:plasma_type'} }) + power_input: Optional[list[PowerQuantity]] = Field(default=[], description="""Power input to the plasma reactor or other energy source.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PlasmaAssisted'], + 'is_a': 'has_power', + 'recommended': True, + 'slot_uri': 'coremeta4cat:power_input'} }) + exposure_time: Optional[list[Duration]] = Field(default=[], description="""Duration of plasma or other energy exposure.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PlasmaAssisted'], + 'is_a': 'has_duration', + 'slot_uri': 'coremeta4cat:exposure_time'} }) + synthesis_pressure: Optional[list[Pressure]] = Field(default=[], description="""Pressure applied during synthesis (e.g. in autoclave or plasma reactor).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PlasmaAssisted', 'Sublimation'], + 'is_a': 'has_pressure', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0000053'} }) + synthesis_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0000051'} }) + synthesis_duration: Optional[list[Duration]] = Field(default=[], description="""Total duration of the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0000050'} }) + has_vessel_type: Optional[list[VesselType]] = Field(default=[], description="""Type of reaction or synthesis vessel used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', 'MolecularSynthesis', 'ElectrochemistryMixin', @@ -9316,54 +6790,17 @@ class DRIFTS(CharacterizationTechnique): 'is_a': 'has_qualitative_attribute', 'recommended': True, 'slot_uri': 'VOC4CAT:0007809'} }) - has_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Volumetric flow rate of a gas or liquid.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', - 'ChromatographyMixin', - 'DRIFTS', - 'ElectroSprayIonizationMassSpectrometry'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_wavenumber_range: Optional[QuantitativeRange] = Field(default=None, description="""Infrared wavenumber scan range (minimum -> maximum cm^-1) as a QuantitativeRange. -Provide unit as a QUDT term (e.g. ReciprocalCentimetre).""", json_schema_extra = { "linkml_meta": {'domain_of': ['InfraredSpectroscopy', 'DRIFTS'], - 'slot_uri': 'coremeta4cat:hasWavenumberRange'} }) - diluting_reference: Optional[list[str]] = Field(default=[], description="""Reference material used to dilute the DRIFTS sample (e.g. KBr).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DRIFTS'], 'slot_uri': 'coremeta4cat:diluting_reference'} }) - ratio_reference_sample: Optional[list[float]] = Field(default=[], description="""Mass ratio of reference material to catalyst sample in DRIFTS cup.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DRIFTS'], 'slot_uri': 'coremeta4cat:ratio_reference_sample'} }) - step_size: Optional[list[float]] = Field(default=[], description="""Step size for a scan (angle, wavelength, energy, or potential).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', - 'XPS', - 'InfraredSpectroscopy', - 'DRIFTS', - 'PhotoluminescenceSpectroscopy'], - 'slot_uri': 'AFR:0000950'} }) - resolution: Optional[list[float]] = Field(default=[], description="""Resolution of a measurement or detector.""", json_schema_extra = { "linkml_meta": {'domain_of': ['EDX', 'DRIFTS'], 'slot_uri': 'coremeta4cat:resolution'} }) - background_correction_method: Optional[list[str]] = Field(default=[], description="""Specific background correction method used in DRIFTS.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DRIFTS'], - 'slot_uri': 'coremeta4cat:background_correction_method'} }) - has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', - 'PhotoluminescenceMixin', - 'ElectrochemistryMixin', - 'PowderXRD', - 'SingleCrystalXRD', - 'XRayAbsorptionSpectroscopy', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'DynamicLightScattering', - 'SizeExclusionChromatography', - 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', - 'ChemicalReaction', - 'Microkinetics', - 'MonteCarlo', - 'AqueousStability'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - number_of_scans: Optional[list[int]] = Field(default=[], description="""Number of scans or accumulations recorded.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XPS', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy'], - 'slot_uri': 'coremeta4cat:number_of_scans'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -9449,26 +6886,46 @@ class DRIFTS(CharacterizationTechnique): 'slot_uri': 'rdf:type'} }) -class RamanSpectroscopy(CharacterizationTechnique): +class CombustionSynthesis(PreparationMethod, ThermalSynthesisMixin): """ - Raman spectroscopy for vibrational and structural characterization. + Catalyst preparation by combustion of a fuel/oxidizer mixture, + producing metal oxide catalysts in a single rapid step. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000069', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:CombustionSynthesis', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', + 'mixins': ['ThermalSynthesisMixin']}) - excitation_laser_wavelength: Optional[list[LengthQuantity]] = Field(default=[], description="""Wavelength of excitation laser used in Raman spectroscopy.""", json_schema_extra = { "linkml_meta": {'domain_of': ['RamanSpectroscopy'], 'slot_uri': 'AFR:0001594'} }) - excitation_laser_power: Optional[list[PowerQuantity]] = Field(default=[], description="""Power of the excitation laser at the sample.""", json_schema_extra = { "linkml_meta": {'domain_of': ['RamanSpectroscopy'], 'slot_uri': 'AFR:0001595'} }) - magnification_setting: Optional[list[float]] = Field(default=[], description="""Magnification setting used for imaging.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronMicroscopyMixin', 'RamanSpectroscopy'], - 'slot_uri': 'AFR:0002226'} }) - has_integration_time: Optional[Duration] = Field(default=None, description="""Integration or acquisition time per measurement step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['RamanSpectroscopy', 'PhotoluminescenceSpectroscopy'], + fuel: Optional[list[str]] = Field(default=[], description="""Organic fuel used in combustion synthesis (e.g. urea, glycine).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CombustionSynthesis'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:fuel'} }) + oxidizer: Optional[list[str]] = Field(default=[], description="""Oxidizer used in combustion synthesis (e.g. metal nitrates).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CombustionSynthesis'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:oxidizer'} }) + fuel_to_oxidizer_ratio: Optional[list[float]] = Field(default=[], description="""Molar ratio of fuel to oxidizer.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CombustionSynthesis'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:fuel_to_oxidizer_ratio'} }) + set_temperature: Optional[list[Temperature]] = Field(default=[], description="""Target temperature set for the combustion reaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CombustionSynthesis'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'coremeta4cat:set_temperature'} }) + post_treatment: Optional[list[str]] = Field(default=[], description="""Post-synthesis treatment applied to the combustion product.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CombustionSynthesis'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:post_treatment'} }) + synthesis_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0000051'} }) + synthesis_duration: Optional[list[Duration]] = Field(default=[], description="""Total duration of the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0000050'} }) + has_vessel_type: Optional[list[VesselType]] = Field(default=[], description="""Type of reaction or synthesis vessel used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'SIO:000008'} }) - number_of_scans: Optional[list[int]] = Field(default=[], description="""Number of scans or accumulations recorded.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XPS', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy'], - 'slot_uri': 'coremeta4cat:number_of_scans'} }) has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', 'MolecularSynthesis', 'ElectrochemistryMixin', @@ -9483,29 +6940,17 @@ class RamanSpectroscopy(CharacterizationTechnique): 'is_a': 'has_qualitative_attribute', 'recommended': True, 'slot_uri': 'VOC4CAT:0007809'} }) - has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', - 'PhotoluminescenceMixin', - 'ElectrochemistryMixin', - 'PowderXRD', - 'SingleCrystalXRD', - 'XRayAbsorptionSpectroscopy', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'DynamicLightScattering', - 'SizeExclusionChromatography', - 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', - 'ChemicalReaction', - 'Microkinetics', - 'MonteCarlo', - 'AqueousStability'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - filter_or_grating: Optional[list[str]] = Field(default=[], description="""Optical filter or grating used in Raman spectrometer.""", json_schema_extra = { "linkml_meta": {'domain_of': ['RamanSpectroscopy'], - 'slot_uri': 'coremeta4cat:filter_or_grating'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -9579,81 +7024,71 @@ class RamanSpectroscopy(CharacterizationTechnique): 'RightsStatement', 'Role', 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class NMRSpectroscopy(CharacterizationTechnique): - """ - Nuclear magnetic resonance spectroscopy for structure elucidation. - Note: for detailed liquid-state NMR minimum information, the dedicated - nmr_dcat_ap profile (MARGARITAS) should be used in combination with - this subprofile. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000073', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/'}) - - nucleus: Optional[list[str]] = Field(default=[], description="""NMR-active nucleus observed (e.g. 1H, 13C, 31P).""", json_schema_extra = { "linkml_meta": {'domain_of': ['NMRSpectroscopy'], 'slot_uri': 'coremeta4cat:nucleus'} }) - solvent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Solvent used in a process or sample preparation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Synthesis', - 'NMRSpectroscopy', - 'UVVisSpectroscopy', - 'DynamicLightScattering'], - 'slot_uri': 'VOC4CAT:0007246'} }) - irradiation_frequency: Optional[list[float]] = Field(default=[], description="""Irradiation frequency of the NMR spectrometer.""", json_schema_extra = { "linkml_meta": {'domain_of': ['NMRSpectroscopy'], - 'slot_uri': 'coremeta4cat:irradiation_frequency', - 'unit': {'ucum_code': 'MHz'}} }) - has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', - 'PhotoluminescenceMixin', - 'ElectrochemistryMixin', - 'PowderXRD', - 'SingleCrystalXRD', - 'XRayAbsorptionSpectroscopy', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'DynamicLightScattering', - 'SizeExclusionChromatography', - 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', - 'ChemicalReaction', - 'Microkinetics', - 'MonteCarlo', - 'AqueousStability'], + 'SupportiveEntity', + 'Surrounding', + 'TimeInstant'], + 'slot_uri': 'dcterms:description'} }) + type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], + 'slot_uri': 'dcterms:type'} }) + rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'rdf:type'} }) + + +class AtomicLayerDeposition(PreparationMethod): + """ + Catalyst preparation by atomic layer deposition (ALD): sequential + self-limiting surface reactions deposit a conformal thin film + of active phase onto a substrate. + """ + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0001311', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/'}) + + substrate: Optional[list[str]] = Field(default=[], description="""Substrate material on which the ALD film is deposited.""", json_schema_extra = { "linkml_meta": {'domain_of': ['AtomicLayerDeposition'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0000024'} }) + pulse_time: Optional[list[float]] = Field(default=[], description="""Duration of the precursor pulse in each ALD cycle.""", json_schema_extra = { "linkml_meta": {'domain_of': ['AtomicLayerDeposition'], 'is_a': 'has_quantitative_attribute', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - nmr_pulse_sequence: Optional[list[str]] = Field(default=[], description="""NMR pulse sequence used (e.g. zgpg30, dept).""", json_schema_extra = { "linkml_meta": {'domain_of': ['NMRSpectroscopy'], - 'slot_uri': 'coremeta4cat:nmr_pulse_sequence'} }) - nmr_sample_tube: Optional[list[str]] = Field(default=[], description="""NMR sample tube type (e.g. 5mm standard, Shigemi tube).""", json_schema_extra = { "linkml_meta": {'domain_of': ['NMRSpectroscopy'], 'slot_uri': 'coremeta4cat:nmr_sample_tube'} }) - number_of_scans: Optional[list[int]] = Field(default=[], description="""Number of scans or accumulations recorded.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XPS', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy'], - 'slot_uri': 'coremeta4cat:number_of_scans'} }) - has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', + 'slot_uri': 'coremeta4cat:pulse_time', + 'unit': {'ucum_code': 's'}} }) + purging_duration: Optional[list[float]] = Field(default=[], description="""Duration of the purge step between ALD pulses.""", json_schema_extra = { "linkml_meta": {'domain_of': ['AtomicLayerDeposition'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0000112', + 'unit': {'ucum_code': 's'}} }) + number_of_cycles: Optional[list[int]] = Field(default=[], description="""Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin', + 'AtomicLayerDeposition', 'MolecularSynthesis', - 'ElectrochemistryMixin', - 'PowderXRD', - 'XPS', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'Thermogravimetry', - 'CatalyticReaction'], - 'is_a': 'has_qualitative_attribute', + 'XRayAbsorptionSpectroscopy', + 'CyclicVoltammetry'], + 'is_a': 'has_quantitative_attribute', 'recommended': True, - 'slot_uri': 'VOC4CAT:0007809'} }) + 'slot_uri': 'VOC4CAT:0008123'} }) + deposition_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature during the deposition step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['AtomicLayerDeposition', 'DepositionPrecipitation'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'coremeta4cat:deposition_temperature'} }) + carrier_gas: Optional[list[ChemicalEntity]] = Field(default=[], description="""Carrier gas used in a process (e.g. in GC analysis or ALD deposition).""", json_schema_extra = { "linkml_meta": {'domain_of': ['AtomicLayerDeposition', + 'ElementalAnalysis', + 'ElectroSprayIonizationMassSpectrometry', + 'GCMS'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'coremeta4cat:carrier_gas'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -9739,28 +7174,122 @@ class NMRSpectroscopy(CharacterizationTechnique): 'slot_uri': 'rdf:type'} }) -class TransmissionElectronMicroscopy(CharacterizationTechnique, ElectronMicroscopyMixin): +class DepositionPrecipitation(PreparationMethod, PrecipitationMixin, CalcinationMixin, DryingMixin): """ - TEM for atomic-resolution imaging and diffraction of catalyst particles. + Catalyst preparation by deposition-precipitation: the active phase + is precipitated directly onto the support surface. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000078', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', - 'mixins': ['ElectronMicroscopyMixin']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:DepositionPrecipitation', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', + 'mixins': ['PrecipitationMixin', 'DryingMixin', 'CalcinationMixin']}) - has_operation_mode: Optional[list[OperationMode]] = Field(default=[], description="""Operation mode of an instrument or process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', - 'XRayAbsorptionSpectroscopy', - 'InfraredSpectroscopy', - 'TransmissionElectronMicroscopy', - 'Thermogravimetry', - 'ElectroSprayIonizationMassSpectrometry'], + deposition_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature during the deposition step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['AtomicLayerDeposition', 'DepositionPrecipitation'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'coremeta4cat:deposition_temperature'} }) + deposition_time: Optional[list[Duration]] = Field(default=[], description="""Duration of the deposition step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DepositionPrecipitation'], + 'is_a': 'has_duration', + 'slot_uri': 'coremeta4cat:deposition_time'} }) + precipitating_agent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Chemical agent used to induce precipitation (e.g. NaOH, NH3).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008203'} }) + has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', + 'UVVisSpectroscopy', + 'DynamicLightScattering', + 'ElectroSprayIonizationMassSpectrometry', + 'ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_ph_value: Optional[list[PHValue]] = Field(default=[], description="""The slot to provide the PHValue of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_mixing_speed: Optional[list[AngularVelocity]] = Field(default=[], description="""Rotational speed during mixing of synthesis components.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], + 'is_a': 'has_angular_velocity', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_mixing_duration: Optional[Duration] = Field(default=None, description="""Duration of the mixing step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0008126'} }) + has_mixing_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature maintained during mixing.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'MolecularSynthesis'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008127'} }) + order_of_addition: Optional[list[str]] = Field(default=[], description="""Order in which reagents or components are combined.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], 'is_a': 'has_qualitative_attribute', 'recommended': True, + 'slot_uri': 'VOC4CAT:0008128'} }) + filtration: Optional[list[str]] = Field(default=[], description="""Filtration method used to separate the precipitate (e.g. vacuum filtration).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008129'} }) + purification: Optional[list[str]] = Field(default=[], description="""Purification method applied after synthesis (e.g. washing, dialysis).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008130'} }) + has_aging_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature maintained during the aging step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008131'} }) + has_aging_duration: Optional[Duration] = Field(default=None, description="""Duration of the aging step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'SolGel'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0008204'} }) + drying_device: Optional[list[str]] = Field(default=[], description="""Device used for drying (e.g. oven, rotary evaporator).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008122'} }) + has_drying_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008207'} }) + has_drying_duration: Optional[Duration] = Field(default=None, description="""Duration of the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0008206'} }) + has_drying_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Atmosphere maintained during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_atmosphere', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008208'} }) + has_calcination_temperature_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Temperature range of the calcination programme (initial -> final temperature), +provided as a QuantitativeRange. Unit: Degree Celsius.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:hasCalcinationTemperatureRange'} }) + has_calcination_dwelling_time: Optional[Duration] = Field(default=None, description="""Time held at the final calcination temperature.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0000060'} }) + number_of_cycles: Optional[list[int]] = Field(default=[], description="""Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin', + 'AtomicLayerDeposition', + 'MolecularSynthesis', + 'XRayAbsorptionSpectroscopy', + 'CyclicVoltammetry'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008123'} }) + has_calcination_atmosphere: Optional[list[CalcinationGaseousEnvironment]] = Field(default=[], description="""Gaseous environment maintained during the calcination step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_atmosphere', + 'recommended': True, 'slot_uri': 'SIO:000008'} }) - gun_type: Optional[list[str]] = Field(default=[], description="""Type of electron gun (e.g. FEG, thermionic LaB6).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronMicroscopyMixin'], 'slot_uri': 'coremeta4cat:gun_type'} }) - acceleration_voltage: Optional[list[ElectricPotential]] = Field(default=[], description="""Acceleration voltage applied to the electron beam.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronMicroscopyMixin'], - 'slot_uri': 'coremeta4cat:acceleration_voltage'} }) - magnification_setting: Optional[list[float]] = Field(default=[], description="""Magnification setting used for imaging.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronMicroscopyMixin', 'RamanSpectroscopy'], - 'slot_uri': 'AFR:0002226'} }) + has_calcination_heating_rate: Optional[list[HeatingRate]] = Field(default=[], description="""Temperature ramp rate during the calcination step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_heating_rate', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008116'} }) + has_calcination_gas_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Gas flow rate maintained during calcination.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_flow_rate', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0000056'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -9846,24 +7375,61 @@ class TransmissionElectronMicroscopy(CharacterizationTechnique, ElectronMicrosco 'slot_uri': 'rdf:type'} }) -class ScanningElectronMicroscopy(CharacterizationTechnique, ElectronMicroscopyMixin): +class MicrowaveAssisted(PreparationMethod, ThermalSynthesisMixin): """ - SEM for surface morphology and particle size/shape imaging. + Catalyst preparation using microwave irradiation to rapidly and + uniformly heat the reaction mixture. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000075', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', - 'mixins': ['ElectronMicroscopyMixin']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0002906', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', + 'mixins': ['ThermalSynthesisMixin']}) - image_resolution: Optional[list[float]] = Field(default=[], description="""Spatial resolution of SEM images.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ScanningElectronMicroscopy'], - 'slot_uri': 'coremeta4cat:image_resolution', - 'unit': {'ucum_code': 'nm'}} }) - field_emitter: Optional[list[str]] = Field(default=[], description="""Type of field emitter used in FE-SEM instrument.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ScanningElectronMicroscopy'], - 'slot_uri': 'coremeta4cat:field_emitter'} }) - gun_type: Optional[list[str]] = Field(default=[], description="""Type of electron gun (e.g. FEG, thermionic LaB6).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronMicroscopyMixin'], 'slot_uri': 'coremeta4cat:gun_type'} }) - acceleration_voltage: Optional[list[ElectricPotential]] = Field(default=[], description="""Acceleration voltage applied to the electron beam.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronMicroscopyMixin'], - 'slot_uri': 'coremeta4cat:acceleration_voltage'} }) - magnification_setting: Optional[list[float]] = Field(default=[], description="""Magnification setting used for imaging.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronMicroscopyMixin', 'RamanSpectroscopy'], - 'slot_uri': 'AFR:0002226'} }) + power: Optional[list[float]] = Field(default=[], description="""Microwave power applied.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MicrowaveAssisted'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:power', + 'unit': {'ucum_code': 'W'}} }) + microwave_frequency: Optional[list[float]] = Field(default=[], description="""Frequency of microwave irradiation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MicrowaveAssisted'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:microwave_frequency', + 'unit': {'ucum_code': 'GHz'}} }) + synthesis_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0000051'} }) + synthesis_duration: Optional[list[Duration]] = Field(default=[], description="""Total duration of the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0000050'} }) + has_vessel_type: Optional[list[VesselType]] = Field(default=[], description="""Type of reaction or synthesis vessel used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', + 'MolecularSynthesis', + 'ElectrochemistryMixin', + 'PowderXRD', + 'XPS', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'Thermogravimetry', + 'CatalyticReaction'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007809'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -9949,54 +7515,100 @@ class ScanningElectronMicroscopy(CharacterizationTechnique, ElectronMicroscopyMi 'slot_uri': 'rdf:type'} }) -class Thermogravimetry(CharacterizationTechnique, TemperatureProgramMixin): +class SonochemicalSynthesis(PreparationMethod, CalcinationMixin, DryingMixin): """ - Thermogravimetric analysis (TGA/DTG) for mass loss, decomposition, and oxidation state characterization. + Catalyst preparation using ultrasonic irradiation to drive chemical + reactions via acoustic cavitation. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000690', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', - 'mixins': ['TemperatureProgramMixin']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:SonochemicalSynthesis', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', + 'mixins': ['DryingMixin', 'CalcinationMixin']}) - has_operation_mode: Optional[list[OperationMode]] = Field(default=[], description="""Operation mode of an instrument or process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', - 'XRayAbsorptionSpectroscopy', - 'InfraredSpectroscopy', - 'TransmissionElectronMicroscopy', - 'Thermogravimetry', - 'ElectroSprayIonizationMassSpectrometry'], - 'is_a': 'has_qualitative_attribute', + sonication_power: Optional[list[float]] = Field(default=[], description="""Acoustic power applied during sonication.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis'], + 'is_a': 'has_quantitative_attribute', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', - 'MolecularSynthesis', + 'slot_uri': 'coremeta4cat:sonication_power', + 'unit': {'ucum_code': 'W'}} }) + sonication_duration: Optional[list[float]] = Field(default=[], description="""Duration of ultrasonic irradiation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:sonication_duration', + 'unit': {'ucum_code': 'min'}} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', 'ElectrochemistryMixin', 'PowderXRD', - 'XPS', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', 'InfraredSpectroscopy', 'DRIFTS', 'RamanSpectroscopy', 'NMRSpectroscopy', - 'Thermogravimetry', - 'CatalyticReaction'], + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + drying_device: Optional[list[str]] = Field(default=[], description="""Device used for drying (e.g. oven, rotary evaporator).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], 'is_a': 'has_qualitative_attribute', 'recommended': True, - 'slot_uri': 'VOC4CAT:0007809'} }) - initial_temperature: Optional[list[Temperature]] = Field(default=[], description="""Initial temperature at the start of a thermal analysis run.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Thermogravimetry'], 'slot_uri': 'NCIT:C164644'} }) - final_temperature: Optional[list[Temperature]] = Field(default=[], description="""Final temperature at the end of a thermal analysis run.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Thermogravimetry'], 'slot_uri': 'NCIT:C164644'} }) - has_sample_mass: Optional[list[Mass]] = Field(default=[], description="""Mass of the sample used in a process or measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Thermogravimetry', 'BET'], - 'is_a': 'has_mass', + 'slot_uri': 'VOC4CAT:0008122'} }) + has_drying_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_temperature', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_temperature_range: Optional[QuantitativeRange] = Field(default=None, description="""Temperature programme range (start -> final temperature) as a QuantitativeRange. -Provide unit as a QUDT term (e.g. Degree Celsius, Kelvin).""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin'], - 'slot_uri': 'coremeta4cat:hasTemperatureRange'} }) - has_heating_rate: Optional[list[HeatingRate]] = Field(default=[], description="""Temperature ramp rate during a heating or cooling step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin'], + 'slot_uri': 'VOC4CAT:0008207'} }) + has_drying_duration: Optional[Duration] = Field(default=None, description="""Duration of the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0008206'} }) + has_drying_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Atmosphere maintained during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_atmosphere', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008208'} }) + has_calcination_temperature_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Temperature range of the calcination programme (initial -> final temperature), +provided as a QuantitativeRange. Unit: Degree Celsius.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], 'is_a': 'has_quantitative_attribute', 'recommended': True, - 'slot_uri': 'VOC4CAT:0008116'} }) - has_heating_procedure: Optional[list[HeatingProcedure]] = Field(default=[], description="""Heating procedure or thermal programme applied.""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin', 'GCMS'], - 'is_a': 'has_qualitative_attribute', + 'slot_uri': 'coremeta4cat:hasCalcinationTemperatureRange'} }) + has_calcination_dwelling_time: Optional[Duration] = Field(default=None, description="""Time held at the final calcination temperature.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0000060'} }) + number_of_cycles: Optional[list[int]] = Field(default=[], description="""Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin', + 'AtomicLayerDeposition', + 'MolecularSynthesis', + 'XRayAbsorptionSpectroscopy', + 'CyclicVoltammetry'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008123'} }) + has_calcination_atmosphere: Optional[list[CalcinationGaseousEnvironment]] = Field(default=[], description="""Gaseous environment maintained during the calcination step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_atmosphere', 'recommended': True, 'slot_uri': 'SIO:000008'} }) + has_calcination_heating_rate: Optional[list[HeatingRate]] = Field(default=[], description="""Temperature ramp rate during the calcination step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_heating_rate', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008116'} }) + has_calcination_gas_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Gas flow rate maintained during calcination.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_flow_rate', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0000056'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -10082,26 +7694,65 @@ class Thermogravimetry(CharacterizationTechnique, TemperatureProgramMixin): 'slot_uri': 'rdf:type'} }) -class TPR(CharacterizationTechnique, TemperatureProgramMixin): +class FlameSprayPyrolysis(PreparationMethod): """ - Temperature-programmed reduction for reducibility and metal-support interaction characterization. + Catalyst preparation by flame spray pyrolysis (FSP): a liquid precursor + solution is atomised and combusted in a flame to produce nanoparticles. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0002908', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', - 'mixins': ['TemperatureProgramMixin']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0007031', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/'}) - reducing_gas_composition: Optional[list[str]] = Field(default=[], description="""Composition of reducing gas used in TPR (e.g. 5% H2/Ar).""", json_schema_extra = { "linkml_meta": {'domain_of': ['TPR'], 'slot_uri': 'coremeta4cat:reducing_gas_composition'} }) - has_temperature_range: Optional[QuantitativeRange] = Field(default=None, description="""Temperature programme range (start -> final temperature) as a QuantitativeRange. -Provide unit as a QUDT term (e.g. Degree Celsius, Kelvin).""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin'], - 'slot_uri': 'coremeta4cat:hasTemperatureRange'} }) - has_heating_rate: Optional[list[HeatingRate]] = Field(default=[], description="""Temperature ramp rate during a heating or cooling step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin'], + flame_type: Optional[list[str]] = Field(default=[], description="""Type of flame used in FSP (e.g. methane/oxygen, H2/O2).""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:flame_type'} }) + has_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Volumetric flow rate of a gas or liquid.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', + 'ChromatographyMixin', + 'DRIFTS', + 'ElectroSprayIonizationMassSpectrometry'], 'is_a': 'has_quantitative_attribute', 'recommended': True, - 'slot_uri': 'VOC4CAT:0008116'} }) - has_heating_procedure: Optional[list[HeatingProcedure]] = Field(default=[], description="""Heating procedure or thermal programme applied.""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin', 'GCMS'], + 'slot_uri': 'SIO:000008'} }) + inlet_system: Optional[list[str]] = Field(default=[], description="""Configuration of the precursor inlet system.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis'], 'is_a': 'has_qualitative_attribute', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) + 'slot_uri': 'coremeta4cat:inlet_system'} }) + flame_ring: Optional[list[str]] = Field(default=[], description="""Configuration of the supporting flame ring.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:flame_ring'} }) + dispersant: Optional[list[ChemicalEntity]] = Field(default=[], description="""Dispersant used (e.g. in DLS measurement or flame spray pyrolysis).""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', 'DynamicLightScattering'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'coremeta4cat:dispersant'} }) + capillary_pressure: Optional[list[float]] = Field(default=[], description="""Pressure applied at the capillary nozzle during FSP.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:capillary_pressure', + 'unit': {'ucum_code': 'bar'}} }) + fuel_dispersant_ratio: Optional[list[float]] = Field(default=[], description="""Volume ratio of fuel to dispersant used in FSP.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:fuel_dispersant_ratio'} }) + filtration_device: Optional[list[str]] = Field(default=[], description="""Device used for filtration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', 'MolecularSynthesis'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:filtration_device'} }) + filter_type: Optional[list[str]] = Field(default=[], description="""Type of filter membrane or medium used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', 'MolecularSynthesis'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:filter_type'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -10187,26 +7838,83 @@ class TPR(CharacterizationTechnique, TemperatureProgramMixin): 'slot_uri': 'rdf:type'} }) -class TPO(CharacterizationTechnique, TemperatureProgramMixin): +class MechanochemicalSynthesis(PreparationMethod, ThermalSynthesisMixin): """ - Temperature-programmed oxidation for coke quantification and reoxidation characterization. + Catalyst preparation by mechanical milling or grinding, optionally + combined with thermal treatment. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0002907', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', - 'mixins': ['TemperatureProgramMixin']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:MechanochemicalSynthesis', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', + 'mixins': ['ThermalSynthesisMixin']}) - oxidizing_gas_composition: Optional[list[str]] = Field(default=[], description="""Composition of oxidising gas used in TPO (e.g. 5% O2/Ar).""", json_schema_extra = { "linkml_meta": {'domain_of': ['TPO'], 'slot_uri': 'coremeta4cat:oxidizing_gas_composition'} }) - has_temperature_range: Optional[QuantitativeRange] = Field(default=None, description="""Temperature programme range (start -> final temperature) as a QuantitativeRange. -Provide unit as a QUDT term (e.g. Degree Celsius, Kelvin).""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin'], - 'slot_uri': 'coremeta4cat:hasTemperatureRange'} }) - has_heating_rate: Optional[list[HeatingRate]] = Field(default=[], description="""Temperature ramp rate during a heating or cooling step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin'], + vessel_volume: Optional[list[float]] = Field(default=[], description="""Volume of the milling vessel.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MechanochemicalSynthesis'], 'is_a': 'has_quantitative_attribute', 'recommended': True, - 'slot_uri': 'VOC4CAT:0008116'} }) - has_heating_procedure: Optional[list[HeatingProcedure]] = Field(default=[], description="""Heating procedure or thermal programme applied.""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin', 'GCMS'], + 'slot_uri': 'coremeta4cat:vessel_volume', + 'unit': {'ucum_code': 'mL'}} }) + size_and_material: Optional[list[str]] = Field(default=[], description="""Size and material of the milling vessel and components.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MechanochemicalSynthesis'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:size_and_material'} }) + milling_speed: Optional[list[float]] = Field(default=[], description="""Rotational speed during milling.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MechanochemicalSynthesis'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:milling_speed', + 'unit': {'ucum_code': 'rpm'}} }) + milling_duration: Optional[list[float]] = Field(default=[], description="""Total duration of the milling process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MechanochemicalSynthesis'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:milling_duration', + 'unit': {'ucum_code': 'h'}} }) + ball_material: Optional[list[str]] = Field(default=[], description="""Material of the milling balls (e.g. zirconia, stainless steel).""", json_schema_extra = { "linkml_meta": {'domain_of': ['MechanochemicalSynthesis'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:ball_material'} }) + ball_size: Optional[list[float]] = Field(default=[], description="""Diameter of the milling balls.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MechanochemicalSynthesis'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:ball_size', + 'unit': {'ucum_code': 'mm'}} }) + ball_to_powder_ratio: Optional[list[float]] = Field(default=[], description="""Mass ratio of milling balls to powder charge.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MechanochemicalSynthesis'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:ball_to_powder_ratio'} }) + synthesis_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0000051'} }) + synthesis_duration: Optional[list[Duration]] = Field(default=[], description="""Total duration of the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0000050'} }) + has_vessel_type: Optional[list[VesselType]] = Field(default=[], description="""Type of reaction or synthesis vessel used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], 'is_a': 'has_qualitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) + has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', + 'MolecularSynthesis', + 'ElectrochemistryMixin', + 'PowderXRD', + 'XPS', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'Thermogravimetry', + 'CatalyticReaction'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007809'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -10292,21 +8000,55 @@ class TPO(CharacterizationTechnique, TemperatureProgramMixin): 'slot_uri': 'rdf:type'} }) -class BET(CharacterizationTechnique): +class Sublimation(PreparationMethod, ThermalSynthesisMixin): """ - Brunauer-Emmett-Teller analysis for specific surface area and pore size distribution. + Catalyst preparation by sublimation: a solid precursor is vaporised + and deposited onto a substrate without passing through a liquid phase. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'ENM:0000064', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:Sublimation', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', + 'mixins': ['ThermalSynthesisMixin']}) - adsorbate_gas: Optional[list[str]] = Field(default=[], description="""Adsorbate gas used in BET surface area measurement (e.g. N2, Ar).""", json_schema_extra = { "linkml_meta": {'domain_of': ['BET'], 'slot_uri': 'coremeta4cat:adsorbate_gas'} }) - degassing_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature at which sample is degassed before BET measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['BET'], 'slot_uri': 'coremeta4cat:degassing_temperature'} }) - measurement_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature at which BET adsorption isotherm is measured (e.g. 77 K for N2).""", json_schema_extra = { "linkml_meta": {'domain_of': ['BET'], 'slot_uri': 'coremeta4cat:measurement_temperature'} }) - pore_size_distribution_method: Optional[list[str]] = Field(default=[], description="""Method used for pore size distribution calculation (e.g. BJH, DFT, HK).""", json_schema_extra = { "linkml_meta": {'domain_of': ['BET'], 'slot_uri': 'coremeta4cat:pore_size_distribution_method'} }) - has_sample_mass: Optional[list[Mass]] = Field(default=[], description="""Mass of the sample used in a process or measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Thermogravimetry', 'BET'], - 'is_a': 'has_mass', + synthesis_pressure: Optional[list[Pressure]] = Field(default=[], description="""Pressure applied during synthesis (e.g. in autoclave or plasma reactor).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PlasmaAssisted', 'Sublimation'], + 'is_a': 'has_pressure', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0000053'} }) + synthesis_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0000051'} }) + synthesis_duration: Optional[list[Duration]] = Field(default=[], description="""Total duration of the synthesis step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0000050'} }) + has_vessel_type: Optional[list[VesselType]] = Field(default=[], description="""Type of reaction or synthesis vessel used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', + 'MolecularSynthesis', + 'ElectrochemistryMixin', + 'PowderXRD', + 'XPS', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'Thermogravimetry', + 'CatalyticReaction'], + 'is_a': 'has_qualitative_attribute', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) + 'slot_uri': 'VOC4CAT:0007809'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -10392,18 +8134,112 @@ class BET(CharacterizationTechnique): 'slot_uri': 'rdf:type'} }) -class ICPAES(CharacterizationTechnique): +class MolecularSynthesis(PreparationMethod, DryingMixin): """ - Inductively coupled plasma atomic emission spectroscopy for bulk elemental composition. + Catalyst preparation by molecular (organometallic or coordination) + chemistry routes, including crystallisation and purification steps. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000267', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:MolecularSynthesis', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', + 'mixins': ['DryingMixin']}) - element_analyzed: Optional[list[str]] = Field(default=[], description="""Chemical element analysed (e.g. Fe, Cu, Pt).""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRayAbsorptionSpectroscopy', 'ICPAES'], - 'slot_uri': 'coremeta4cat:element_analyzed'} }) - calibration_method: Optional[list[str]] = Field(default=[], description="""Calibration method applied during a measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['EDX', 'ICPAES'], 'slot_uri': 'coremeta4cat:calibration_method'} }) - detection_limit: Optional[list[float]] = Field(default=[], description="""Detection limit of the analytical method.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ICPAES'], 'slot_uri': 'NCIT:C105701'} }) - matrix_effect_correction: Optional[list[str]] = Field(default=[], description="""Method used to correct for matrix effects in ICP-AES.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ICPAES'], 'slot_uri': 'coremeta4cat:matrix_effect_correction'} }) + reaction_vessel: Optional[list[str]] = Field(default=[], description="""Type of reaction vessel used (e.g. Schlenk flask, round-bottom flask).""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularSynthesis'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:reaction_vessel'} }) + mixing_device: Optional[list[str]] = Field(default=[], description="""Device used for mixing (e.g. magnetic stirrer, vortex mixer).""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularSynthesis'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:mixing_device'} }) + has_stirring_duration: Optional[Duration] = Field(default=None, description="""Duration of stirring or agitation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularSynthesis'], + 'is_a': 'has_duration', + 'slot_uri': 'SIO:000008'} }) + has_stirring_speed: Optional[list[AngularVelocity]] = Field(default=[], description="""Rotational speed of stirring or agitation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularSynthesis'], + 'is_a': 'has_angular_velocity', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_mixing_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature maintained during mixing.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'MolecularSynthesis'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008127'} }) + filtration_device: Optional[list[str]] = Field(default=[], description="""Device used for filtration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', 'MolecularSynthesis'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:filtration_device'} }) + filter_type: Optional[list[str]] = Field(default=[], description="""Type of filter membrane or medium used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', 'MolecularSynthesis'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:filter_type'} }) + crystallisation_solvents: Optional[list[str]] = Field(default=[], description="""Solvent(s) used for crystallisation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularSynthesis'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:crystallisation_solvents'} }) + precipitation_agent: Optional[list[str]] = Field(default=[], description="""Agent used to induce precipitation in molecular synthesis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularSynthesis'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008203'} }) + crystallisation_duration: Optional[list[float]] = Field(default=[], description="""Duration of the crystallisation step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularSynthesis'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:crystallisation_duration', + 'unit': {'ucum_code': 'h'}} }) + purification_solvent: Optional[list[str]] = Field(default=[], description="""Solvent used for washing or recrystallisation during purification.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularSynthesis'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:purification_solvent'} }) + number_of_cycles: Optional[list[int]] = Field(default=[], description="""Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin', + 'AtomicLayerDeposition', + 'MolecularSynthesis', + 'XRayAbsorptionSpectroscopy', + 'CyclicVoltammetry'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008123'} }) + temperature_ramp: Optional[list[float]] = Field(default=[], description="""Temperature ramp rate applied during drying or activation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularSynthesis'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:temperature_ramp', + 'unit': {'ucum_code': 'Cel/min'}} }) + has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', + 'MolecularSynthesis', + 'ElectrochemistryMixin', + 'PowderXRD', + 'XPS', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'Thermogravimetry', + 'CatalyticReaction'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007809'} }) + drying_device: Optional[list[str]] = Field(default=[], description="""Device used for drying (e.g. oven, rotary evaporator).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008122'} }) + has_drying_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature applied during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008207'} }) + has_drying_duration: Optional[Duration] = Field(default=None, description="""Duration of the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0008206'} }) + has_drying_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Atmosphere maintained during the drying step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DryingMixin'], + 'is_a': 'has_atmosphere', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008208'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -10489,22 +8325,54 @@ class ICPAES(CharacterizationTechnique): 'slot_uri': 'rdf:type'} }) -class ElementalAnalysis(CharacterizationTechnique): +class ExsolutionSynthesis(PreparationMethod, CalcinationMixin): """ - Combustion elemental analysis (CHNS/O) for carbon, hydrogen, nitrogen, sulfur content. + Catalyst preparation by exsolution: metal nanoparticles are grown on + a perovskite oxide surface by reduction/oxidation cycling. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0001075', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:ExsolutionSynthesis', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', + 'mixins': ['CalcinationMixin']}) - elements_analyzed: Optional[list[str]] = Field(default=[], description="""List of elements analysed by combustion elemental analysis (e.g. C, H, N, S).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElementalAnalysis'], - 'slot_uri': 'coremeta4cat:elements_analyzed'} }) - combustion_temperature: Optional[list[Temperature]] = Field(default=[], description="""Combustion furnace temperature for elemental analysis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElementalAnalysis'], - 'slot_uri': 'coremeta4cat:combustion_temperature'} }) - carrier_gas: Optional[list[ChemicalEntity]] = Field(default=[], description="""Carrier gas used in a process (e.g. in GC analysis or ALD deposition).""", json_schema_extra = { "linkml_meta": {'domain_of': ['AtomicLayerDeposition', - 'ElementalAnalysis', - 'ElectroSprayIonizationMassSpectrometry', - 'GCMS'], - 'slot_uri': 'coremeta4cat:carrier_gas'} }) + has_calcination_temperature_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Temperature range of the calcination programme (initial -> final temperature), +provided as a QuantitativeRange. Unit: Degree Celsius.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:hasCalcinationTemperatureRange'} }) + has_calcination_dwelling_time: Optional[Duration] = Field(default=None, description="""Time held at the final calcination temperature.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_duration', + 'slot_uri': 'VOC4CAT:0000060'} }) + number_of_cycles: Optional[list[int]] = Field(default=[], description="""Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin', + 'AtomicLayerDeposition', + 'MolecularSynthesis', + 'XRayAbsorptionSpectroscopy', + 'CyclicVoltammetry'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008123'} }) + has_calcination_atmosphere: Optional[list[CalcinationGaseousEnvironment]] = Field(default=[], description="""Gaseous environment maintained during the calcination step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_atmosphere', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_calcination_heating_rate: Optional[list[HeatingRate]] = Field(default=[], description="""Temperature ramp rate during the calcination step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_heating_rate', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008116'} }) + has_calcination_gas_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Gas flow rate maintained during calcination.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin'], + 'is_a': 'has_flow_rate', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0000056'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -10590,35 +8458,27 @@ class ElementalAnalysis(CharacterizationTechnique): 'slot_uri': 'rdf:type'} }) -class UVVisSpectroscopy(CharacterizationTechnique): +class CharacterizationTechnique(CatalysisPlan): """ - UV-Vis spectroscopy for electronic transitions, band gap, and concentration determination. + An abstract Plan describing the analytical protocol used to characterize + a catalyst. Concrete subclasses specify technique-specific parameters. + Linked from Characterization via realized_plan. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000079', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'abstract': True, + 'class_uri': 'OBI:0000272', 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/'}) - minimum_wavelength: Optional[list[float]] = Field(default=[], description="""Minimum wavelength of the UV-Vis scan range.""", json_schema_extra = { "linkml_meta": {'domain_of': ['UVVisSpectroscopy'], - 'slot_uri': 'coremeta4cat:minimum_wavelength', - 'unit': {'ucum_code': 'nm'}} }) - maximum_wavelength: Optional[list[float]] = Field(default=[], description="""Maximum wavelength of the UV-Vis scan range.""", json_schema_extra = { "linkml_meta": {'domain_of': ['UVVisSpectroscopy'], - 'slot_uri': 'coremeta4cat:maximum_wavelength', - 'unit': {'ucum_code': 'nm'}} }) - path_length: Optional[list[float]] = Field(default=[], description="""Optical path length of the measurement cell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['UVVisSpectroscopy'], - 'slot_uri': 'AFQ:0000268', - 'unit': {'ucum_code': 'cm'}} }) - solvent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Solvent used in a process or sample preparation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Synthesis', - 'NMRSpectroscopy', - 'UVVisSpectroscopy', - 'DynamicLightScattering'], - 'slot_uri': 'VOC4CAT:0007246'} }) - has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', - 'UVVisSpectroscopy', - 'DynamicLightScattering', - 'ElectroSprayIonizationMassSpectrometry', - 'ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -10704,32 +8564,50 @@ class UVVisSpectroscopy(CharacterizationTechnique): 'slot_uri': 'rdf:type'} }) -class PhotoluminescenceSpectroscopy(CharacterizationTechnique, PhotoluminescenceMixin): +class PowderXRD(CharacterizationTechnique, XRaySourceMixin): """ - Photoluminescence spectroscopy for defect and charge carrier characterization. + Powder X-ray diffraction for phase identification and structural analysis. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000773', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000158', 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', - 'mixins': ['PhotoluminescenceMixin']}) + 'mixins': ['XRaySourceMixin']}) - emission_range: Optional[list[str]] = Field(default=[], description="""Wavelength range over which emission is detected.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceSpectroscopy'], - 'slot_uri': 'coremeta4cat:emission_range'} }) - slit_width: Optional[list[float]] = Field(default=[], description="""Spectrometer entrance or exit slit width.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceSpectroscopy'], - 'slot_uri': 'coremeta4cat:slit_width', - 'unit': {'ucum_code': 'nm'}} }) + has_two_theta_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""2theta diffraction scan range (minimum -> maximum 2theta angle) as a QuantitativeRange. +Provide unit as a QUDT term (e.g. Degree).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:hasTwoThetaRange'} }) step_size: Optional[list[float]] = Field(default=[], description="""Step size for a scan (angle, wavelength, energy, or potential).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', 'XPS', 'InfraredSpectroscopy', 'DRIFTS', 'PhotoluminescenceSpectroscopy'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'AFR:0000950'} }) - has_integration_time: Optional[Duration] = Field(default=None, description="""Integration or acquisition time per measurement step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['RamanSpectroscopy', 'PhotoluminescenceSpectroscopy'], - 'is_a': 'has_duration', + has_operation_mode: Optional[list[OperationMode]] = Field(default=[], description="""Operation mode of an instrument or process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'TransmissionElectronMicroscopy', + 'Thermogravimetry', + 'ElectroSprayIonizationMassSpectrometry'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'SIO:000008'} }) - excitation_wavelength: Optional[list[LengthQuantity]] = Field(default=[], description="""Excitation wavelength used in photoluminescence measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceMixin'], 'slot_uri': 'AFR:0002479'} }) - emission_wavelength: Optional[list[LengthQuantity]] = Field(default=[], description="""Emission wavelength detected in photoluminescence measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceMixin'], 'slot_uri': 'NCIT:C204101'} }) - optical_filter: Optional[list[str]] = Field(default=[], description="""Optical filter used in the emission or excitation path.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceMixin'], - 'slot_uri': 'coremeta4cat:optical_filter'} }) + has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', + 'MolecularSynthesis', + 'ElectrochemistryMixin', + 'PowderXRD', + 'XPS', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'Thermogravimetry', + 'CatalyticReaction'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007809'} }) has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', 'PhotoluminescenceMixin', 'ElectrochemistryMixin', @@ -10743,14 +8621,40 @@ class PhotoluminescenceSpectroscopy(CharacterizationTechnique, Photoluminescence 'DynamicLightScattering', 'SizeExclusionChromatography', 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', 'ChemicalReaction', + 'MaterialisticMixin', 'Microkinetics', 'MonteCarlo', 'AqueousStability'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) + sample_spinning_speed: Optional[list[AngularVelocity]] = Field(default=[], description="""Sample spinning speed during XRD measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD'], + 'is_a': 'has_angular_velocity', + 'recommended': True, + 'slot_uri': 'coremeta4cat:sample_spinning_speed'} }) + has_experiment_duration: Optional[Duration] = Field(default=None, description="""Total duration of the experiment or measurement run.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', 'CatalyticReaction'], + 'is_a': 'has_duration', + 'slot_uri': 'SIO:000008'} }) + xray_source: Optional[list[str]] = Field(default=[], description="""X-ray source used (e.g. Cu K-alpha, Mo K-alpha, synchrotron).""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRaySourceMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'OBI:0001138'} }) + monochromator: Optional[list[str]] = Field(default=[], description="""Monochromator type or configuration used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRaySourceMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'CHMO:0002120'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -10836,22 +8740,14 @@ class PhotoluminescenceSpectroscopy(CharacterizationTechnique, Photoluminescence 'slot_uri': 'rdf:type'} }) -class PhotoluminescenceLifetime(CharacterizationTechnique, PhotoluminescenceMixin): +class SingleCrystalXRD(CharacterizationTechnique, XRaySourceMixin): """ - Time-resolved photoluminescence for charge carrier lifetime and recombination dynamics. + Single crystal X-ray diffraction for structure determination. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0001917', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000852', 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', - 'mixins': ['PhotoluminescenceMixin']}) + 'mixins': ['XRaySourceMixin']}) - lifetime_fitting_model: Optional[list[str]] = Field(default=[], description="""Mathematical model used for fluorescence lifetime fitting (e.g. mono-exponential, bi-exponential).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceLifetime'], - 'slot_uri': 'coremeta4cat:lifetime_fitting_model'} }) - number_of_shots: Optional[list[int]] = Field(default=[], description="""Number of laser shots accumulated per measurement point.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceLifetime'], - 'slot_uri': 'coremeta4cat:number_of_shots'} }) - excitation_wavelength: Optional[list[LengthQuantity]] = Field(default=[], description="""Excitation wavelength used in photoluminescence measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceMixin'], 'slot_uri': 'AFR:0002479'} }) - emission_wavelength: Optional[list[LengthQuantity]] = Field(default=[], description="""Emission wavelength detected in photoluminescence measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceMixin'], 'slot_uri': 'NCIT:C204101'} }) - optical_filter: Optional[list[str]] = Field(default=[], description="""Optical filter used in the emission or excitation path.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceMixin'], - 'slot_uri': 'coremeta4cat:optical_filter'} }) has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', 'PhotoluminescenceMixin', 'ElectrochemistryMixin', @@ -10865,14 +8761,33 @@ class PhotoluminescenceLifetime(CharacterizationTechnique, PhotoluminescenceMixi 'DynamicLightScattering', 'SizeExclusionChromatography', 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', 'ChemicalReaction', + 'MaterialisticMixin', 'Microkinetics', 'MonteCarlo', 'AqueousStability'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) + xray_source: Optional[list[str]] = Field(default=[], description="""X-ray source used (e.g. Cu K-alpha, Mo K-alpha, synchrotron).""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRaySourceMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'OBI:0001138'} }) + monochromator: Optional[list[str]] = Field(default=[], description="""Monochromator type or configuration used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRaySourceMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'CHMO:0002120'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -10958,53 +8873,35 @@ class PhotoluminescenceLifetime(CharacterizationTechnique, PhotoluminescenceMixi 'slot_uri': 'rdf:type'} }) -class CyclicVoltammetry(CharacterizationTechnique, ElectrochemistryMixin): +class XRayAbsorptionSpectroscopy(CharacterizationTechnique, EnergyRangeMixin, XRaySourceMixin): """ - Cyclic voltammetry for electrochemical activity, redox potential, and capacitance characterization. + X-ray absorption spectroscopy (XAS/XANES/EXAFS) for electronic and local structure analysis. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000025', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000286', 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', - 'mixins': ['ElectrochemistryMixin']}) + 'mixins': ['XRaySourceMixin', 'EnergyRangeMixin']}) - scan_rate: Optional[list[float]] = Field(default=[], description="""Potential scan rate in cyclic voltammetry.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CyclicVoltammetry'], - 'slot_uri': 'VOC4CAT:0007213', - 'unit': {'ucum_code': 'mV/s'}} }) - minimum_potential: Optional[list[float]] = Field(default=[], description="""Lower potential limit in cyclic voltammetry.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CyclicVoltammetry'], - 'slot_uri': 'coremeta4cat:minimum_potential', - 'unit': {'ucum_code': 'V'}} }) - maximum_potential: Optional[list[float]] = Field(default=[], description="""Upper potential limit in cyclic voltammetry.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CyclicVoltammetry'], - 'slot_uri': 'coremeta4cat:maximum_potential', - 'unit': {'ucum_code': 'V'}} }) - step_size_potential: Optional[list[float]] = Field(default=[], description="""Potential step size in cyclic voltammetry.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CyclicVoltammetry'], - 'slot_uri': 'VOC4CAT:0007218', - 'unit': {'ucum_code': 'mV'}} }) - number_of_cycles: Optional[list[int]] = Field(default=[], description="""Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin', - 'AtomicLayerDeposition', - 'MolecularSynthesis', + has_operation_mode: Optional[list[OperationMode]] = Field(default=[], description="""Operation mode of an instrument or process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', 'XRayAbsorptionSpectroscopy', - 'CyclicVoltammetry'], - 'slot_uri': 'VOC4CAT:0008123'} }) - reference_electrode: Optional[list[str]] = Field(default=[], description="""Reference electrode used in electrochemical cell (e.g. Ag/AgCl, RHE).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], 'slot_uri': 'VOC4CAT:0007204'} }) - working_electrode: Optional[list[str]] = Field(default=[], description="""Working electrode used in electrochemical cell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], 'slot_uri': 'VOC4CAT:0007202'} }) - counter_electrode: Optional[list[str]] = Field(default=[], description="""Counter electrode used in electrochemical cell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], 'slot_uri': 'VOC4CAT:0007203'} }) - electrolyte_composition: Optional[list[str]] = Field(default=[], description="""Chemical composition of the electrolyte solution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], - 'slot_uri': 'coremeta4cat:electrolyte_composition'} }) - electrolyte_concentration: Optional[list[Concentration]] = Field(default=[], description="""Concentration of the electrolyte.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], - 'slot_uri': 'coremeta4cat:electrolyte_concentration'} }) - has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', - 'MolecularSynthesis', - 'ElectrochemistryMixin', - 'PowderXRD', - 'XPS', 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', + 'TransmissionElectronMicroscopy', 'Thermogravimetry', - 'CatalyticReaction'], + 'ElectroSprayIonizationMassSpectrometry'], 'is_a': 'has_qualitative_attribute', 'recommended': True, - 'slot_uri': 'VOC4CAT:0007809'} }) + 'slot_uri': 'SIO:000008'} }) + element_analyzed: Optional[list[str]] = Field(default=[], description="""Chemical element analysed (e.g. Fe, Cu, Pt).""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRayAbsorptionSpectroscopy', 'ICPAES'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:element_analyzed'} }) + absorption_edge: Optional[list[str]] = Field(default=[], description="""X-ray absorption edge measured (e.g. K-edge, L3-edge).""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRayAbsorptionSpectroscopy'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:absorption_edge'} }) + energy_resolution: Optional[list[EnergyQuantity]] = Field(default=[], description="""Energy resolution of the spectrometer or monochromator.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRayAbsorptionSpectroscopy'], + 'is_a': 'has_energy', + 'recommended': True, + 'slot_uri': 'AFR:0000950'} }) has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', 'PhotoluminescenceMixin', 'ElectrochemistryMixin', @@ -11018,14 +8915,54 @@ class CyclicVoltammetry(CharacterizationTechnique, ElectrochemistryMixin): 'DynamicLightScattering', 'SizeExclusionChromatography', 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', 'ChemicalReaction', + 'MaterialisticMixin', 'Microkinetics', 'MonteCarlo', 'AqueousStability'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) + beamline_source: Optional[list[str]] = Field(default=[], description="""Synchrotron beamline or X-ray source identifier.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRayAbsorptionSpectroscopy'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:beamline_source'} }) + noise_of_measurement: Optional[list[float]] = Field(default=[], description="""Noise level of the XAS measurement (signal-to-noise ratio).""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRayAbsorptionSpectroscopy'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:noise_of_measurement'} }) + number_of_cycles: Optional[list[int]] = Field(default=[], description="""Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin', + 'AtomicLayerDeposition', + 'MolecularSynthesis', + 'XRayAbsorptionSpectroscopy', + 'CyclicVoltammetry'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008123'} }) + xray_source: Optional[list[str]] = Field(default=[], description="""X-ray source used (e.g. Cu K-alpha, Mo K-alpha, synchrotron).""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRaySourceMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'OBI:0001138'} }) + monochromator: Optional[list[str]] = Field(default=[], description="""Monochromator type or configuration used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRaySourceMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'CHMO:0002120'} }) + has_energy_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Energy scan range (minimum -> maximum) as a QuantitativeRange. +Provide unit as a QUDT term (e.g. eV, keV).""", json_schema_extra = { "linkml_meta": {'domain_of': ['EnergyRangeMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:hasEnergyRange'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -11111,30 +9048,46 @@ class CyclicVoltammetry(CharacterizationTechnique, ElectrochemistryMixin): 'slot_uri': 'rdf:type'} }) -class ConductivityMeasurement(CharacterizationTechnique, ElectrochemistryMixin): +class XPS(CharacterizationTechnique, EnergyRangeMixin, XRaySourceMixin): """ - Electrical conductivity measurement for ionic and electronic transport characterization. + X-ray photoelectron spectroscopy for surface elemental and chemical state analysis. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000010', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000404', 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', - 'mixins': ['ElectrochemistryMixin']}) + 'mixins': ['XRaySourceMixin', 'EnergyRangeMixin']}) - electrode_configuration: Optional[list[str]] = Field(default=[], description="""Configuration of electrodes used in conductivity measurement (e.g. 2-probe, 4-probe).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ConductivityMeasurement'], - 'slot_uri': 'coremeta4cat:electrode_configuration'} }) - ac_frequency: Optional[list[float]] = Field(default=[], description="""Frequency of AC signal applied in impedance or conductivity measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ConductivityMeasurement'], - 'slot_uri': 'VOC4CAT:0007239', - 'unit': {'ucum_code': 'Hz'}} }) - ac_dc_mode: Optional[list[str]] = Field(default=[], description="""AC or DC measurement mode used in conductivity measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ConductivityMeasurement'], - 'slot_uri': 'coremeta4cat:ac_dc_mode'} }) - sample_geometry: Optional[list[str]] = Field(default=[], description="""Geometry of the sample used in conductivity measurement (e.g. pellet, thin film).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ConductivityMeasurement'], - 'slot_uri': 'coremeta4cat:sample_geometry'} }) - reference_electrode: Optional[list[str]] = Field(default=[], description="""Reference electrode used in electrochemical cell (e.g. Ag/AgCl, RHE).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], 'slot_uri': 'VOC4CAT:0007204'} }) - working_electrode: Optional[list[str]] = Field(default=[], description="""Working electrode used in electrochemical cell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], 'slot_uri': 'VOC4CAT:0007202'} }) - counter_electrode: Optional[list[str]] = Field(default=[], description="""Counter electrode used in electrochemical cell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], 'slot_uri': 'VOC4CAT:0007203'} }) - electrolyte_composition: Optional[list[str]] = Field(default=[], description="""Chemical composition of the electrolyte solution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], - 'slot_uri': 'coremeta4cat:electrolyte_composition'} }) - electrolyte_concentration: Optional[list[Concentration]] = Field(default=[], description="""Concentration of the electrolyte.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], - 'slot_uri': 'coremeta4cat:electrolyte_concentration'} }) + total_acquisition_time: Optional[list[Duration]] = Field(default=[], description="""Total time for XPS spectrum acquisition.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XPS'], + 'is_a': 'has_duration', + 'slot_uri': 'coremeta4cat:total_acquisition_time'} }) + number_of_scans: Optional[list[int]] = Field(default=[], description="""Number of scans or accumulations recorded.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XPS', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:number_of_scans'} }) + step_size: Optional[list[float]] = Field(default=[], description="""Step size for a scan (angle, wavelength, energy, or potential).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', + 'XPS', + 'InfraredSpectroscopy', + 'DRIFTS', + 'PhotoluminescenceSpectroscopy'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'AFR:0000950'} }) + pass_energy: Optional[list[EnergyQuantity]] = Field(default=[], description="""Analyser pass energy setting in XPS.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XPS'], + 'is_a': 'has_energy', + 'recommended': True, + 'slot_uri': 'coremeta4cat:pass_energy'} }) + spot_size: Optional[list[LengthQuantity]] = Field(default=[], description="""X-ray spot size on the sample surface.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XPS'], + 'is_a': 'has_length', + 'recommended': True, + 'slot_uri': 'coremeta4cat:spot_size'} }) + lense_mode: Optional[list[str]] = Field(default=[], description="""Electron lens mode setting in XPS analyser.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XPS'], 'is_a': 'has_qualitative_attribute', 'recommended': True} }) + charge_compensation: Optional[list[str]] = Field(default=[], description="""Charge compensation method applied during XPS measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XPS'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:charge_compensation'} }) has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', 'MolecularSynthesis', 'ElectrochemistryMixin', @@ -11149,27 +9102,30 @@ class ConductivityMeasurement(CharacterizationTechnique, ElectrochemistryMixin): 'is_a': 'has_qualitative_attribute', 'recommended': True, 'slot_uri': 'VOC4CAT:0007809'} }) - has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', - 'PhotoluminescenceMixin', - 'ElectrochemistryMixin', - 'PowderXRD', - 'SingleCrystalXRD', - 'XRayAbsorptionSpectroscopy', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'DynamicLightScattering', - 'SizeExclusionChromatography', - 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', - 'ChemicalReaction', - 'Microkinetics', - 'MonteCarlo', - 'AqueousStability'], + xray_source: Optional[list[str]] = Field(default=[], description="""X-ray source used (e.g. Cu K-alpha, Mo K-alpha, synchrotron).""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRaySourceMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'OBI:0001138'} }) + monochromator: Optional[list[str]] = Field(default=[], description="""Monochromator type or configuration used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRaySourceMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'CHMO:0002120'} }) + has_energy_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Energy scan range (minimum -> maximum) as a QuantitativeRange. +Provide unit as a QUDT term (e.g. eV, keV).""", json_schema_extra = { "linkml_meta": {'domain_of': ['EnergyRangeMixin'], 'is_a': 'has_quantitative_attribute', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) + 'slot_uri': 'coremeta4cat:hasEnergyRange'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -11255,56 +9211,39 @@ class ConductivityMeasurement(CharacterizationTechnique, ElectrochemistryMixin): 'slot_uri': 'rdf:type'} }) -class DynamicLightScattering(CharacterizationTechnique): +class EDX(CharacterizationTechnique): """ - Dynamic light scattering for hydrodynamic particle size distribution in suspension. + Energy-dispersive X-ray spectroscopy for elemental mapping and quantification. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000167', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000309', 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/'}) - solvent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Solvent used in a process or sample preparation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Synthesis', - 'NMRSpectroscopy', - 'UVVisSpectroscopy', - 'DynamicLightScattering'], - 'slot_uri': 'VOC4CAT:0007246'} }) - has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', - 'UVVisSpectroscopy', - 'DynamicLightScattering', - 'ElectroSprayIonizationMassSpectrometry', - 'ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', + primary_energy: Optional[list[EnergyQuantity]] = Field(default=[], description="""Primary electron beam energy for EDX excitation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['EDX'], + 'is_a': 'has_energy', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - light_wavelength: Optional[list[LengthQuantity]] = Field(default=[], description="""Wavelength of the laser used in DLS measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DynamicLightScattering'], 'slot_uri': 'VOC4CAT:0000176'} }) - scattering_angle: Optional[list[PlaneAngle]] = Field(default=[], description="""Scattering angle at which intensity is detected in DLS.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DynamicLightScattering'], - 'slot_uri': 'coremeta4cat:scattering_angle'} }) - refractive_index: Optional[list[float]] = Field(default=[], description="""Refractive index of the solvent used in DLS measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DynamicLightScattering'], - 'slot_uri': 'coremeta4cat:refractive_index'} }) - has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', - 'PhotoluminescenceMixin', - 'ElectrochemistryMixin', - 'PowderXRD', - 'SingleCrystalXRD', - 'XRayAbsorptionSpectroscopy', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'DynamicLightScattering', - 'SizeExclusionChromatography', - 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', - 'ChemicalReaction', - 'Microkinetics', - 'MonteCarlo', - 'AqueousStability'], + 'slot_uri': 'coremeta4cat:primary_energy'} }) + counting_time: Optional[list[Duration]] = Field(default=[], description="""X-ray counting time per point or spectrum.""", json_schema_extra = { "linkml_meta": {'domain_of': ['EDX'], + 'is_a': 'has_duration', + 'slot_uri': 'coremeta4cat:counting_time'} }) + resolution: Optional[list[float]] = Field(default=[], description="""Resolution of a measurement or detector.""", json_schema_extra = { "linkml_meta": {'domain_of': ['EDX', 'DRIFTS'], 'is_a': 'has_quantitative_attribute', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - dispersant: Optional[list[ChemicalEntity]] = Field(default=[], description="""Dispersant used (e.g. in DLS measurement or flame spray pyrolysis).""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', 'DynamicLightScattering'], - 'slot_uri': 'coremeta4cat:dispersant'} }) - measurement_duration: Optional[list[Duration]] = Field(default=[], description="""Duration of a single DLS acquisition.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DynamicLightScattering'], - 'slot_uri': 'coremeta4cat:measurement_duration'} }) + 'slot_uri': 'coremeta4cat:resolution'} }) + calibration_method: Optional[list[str]] = Field(default=[], description="""Calibration method applied during a measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['EDX', 'ICPAES'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:calibration_method'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -11390,13 +9329,12 @@ class DynamicLightScattering(CharacterizationTechnique): 'slot_uri': 'rdf:type'} }) -class ElectroSprayIonizationMassSpectrometry(CharacterizationTechnique, MassRangeMixin): +class InfraredSpectroscopy(CharacterizationTechnique): """ - Electrospray ionisation mass spectrometry for molecular mass and identity determination. + Infrared spectroscopy (FTIR/ATR) for functional group and surface species identification. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000482', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', - 'mixins': ['MassRangeMixin']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000630', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/'}) has_operation_mode: Optional[list[OperationMode]] = Field(default=[], description="""Operation mode of an instrument or process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', 'XRayAbsorptionSpectroscopy', @@ -11407,34 +9345,77 @@ class ElectroSprayIonizationMassSpectrometry(CharacterizationTechnique, MassRang 'is_a': 'has_qualitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - spray_voltage: Optional[list[ElectricPotential]] = Field(default=[], description="""Spray voltage applied in electrospray ionisation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectroSprayIonizationMassSpectrometry'], - 'slot_uri': 'CHMO:0002792'} }) - capillary_temperature: Optional[list[Temperature]] = Field(default=[], description="""Capillary or desolvation temperature in ESI source.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectroSprayIonizationMassSpectrometry'], - 'slot_uri': 'coremeta4cat:capillary_temperature'} }) - solvent_composition: Optional[list[str]] = Field(default=[], description="""Solvent composition used for ESI spray solution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectroSprayIonizationMassSpectrometry'], - 'slot_uri': 'VOC4CAT:0007246'} }) - has_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Volumetric flow rate of a gas or liquid.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', - 'ChromatographyMixin', + has_wavenumber_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Infrared wavenumber scan range (minimum -> maximum cm^-1) as a QuantitativeRange. +Provide unit as a QUDT term (e.g. ReciprocalCentimetre).""", json_schema_extra = { "linkml_meta": {'domain_of': ['InfraredSpectroscopy', 'DRIFTS'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:hasWavenumberRange'} }) + step_size: Optional[list[float]] = Field(default=[], description="""Step size for a scan (angle, wavelength, energy, or potential).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', + 'XPS', + 'InfraredSpectroscopy', 'DRIFTS', - 'ElectroSprayIonizationMassSpectrometry'], + 'PhotoluminescenceSpectroscopy'], 'is_a': 'has_quantitative_attribute', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - carrier_gas: Optional[list[ChemicalEntity]] = Field(default=[], description="""Carrier gas used in a process (e.g. in GC analysis or ALD deposition).""", json_schema_extra = { "linkml_meta": {'domain_of': ['AtomicLayerDeposition', - 'ElementalAnalysis', - 'ElectroSprayIonizationMassSpectrometry', - 'GCMS'], - 'slot_uri': 'coremeta4cat:carrier_gas'} }) - has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', - 'UVVisSpectroscopy', + 'slot_uri': 'AFR:0000950'} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', 'DynamicLightScattering', - 'ElectroSprayIonizationMassSpectrometry', - 'ChemicalSubstanceMixin'], + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_mz_range: Optional[QuantitativeRange] = Field(default=None, description="""Mass-to-charge ratio scan range (minimum -> maximum m/z) as a QuantitativeRange. -The unit for m/z is dimensionless (Thomson); set unit to the appropriate QUDT term.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MassRangeMixin'], 'slot_uri': 'coremeta4cat:hasMzRange'} }) + background_correction: Optional[list[str]] = Field(default=[], description="""Background correction method applied to IR spectra.""", json_schema_extra = { "linkml_meta": {'domain_of': ['InfraredSpectroscopy'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'AFP:0003721'} }) + number_of_scans: Optional[list[int]] = Field(default=[], description="""Number of scans or accumulations recorded.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XPS', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:number_of_scans'} }) + has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', + 'MolecularSynthesis', + 'ElectrochemistryMixin', + 'PowderXRD', + 'XPS', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'Thermogravimetry', + 'CatalyticReaction'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007809'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -11520,36 +9501,32 @@ class ElectroSprayIonizationMassSpectrometry(CharacterizationTechnique, MassRang 'slot_uri': 'rdf:type'} }) -class GCMS(CharacterizationTechnique, MassRangeMixin, ChromatographyMixin): +class DRIFTS(CharacterizationTechnique): """ - Gas chromatography-mass spectrometry for volatile compound identification and quantification. + Diffuse reflectance infrared Fourier transform spectroscopy for in-situ + surface species identification under reactive gas conditions. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000497', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', - 'mixins': ['ChromatographyMixin', 'MassRangeMixin']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000645', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/'}) - carrier_gas: Optional[list[ChemicalEntity]] = Field(default=[], description="""Carrier gas used in a process (e.g. in GC analysis or ALD deposition).""", json_schema_extra = { "linkml_meta": {'domain_of': ['AtomicLayerDeposition', - 'ElementalAnalysis', - 'ElectroSprayIonizationMassSpectrometry', - 'GCMS'], - 'slot_uri': 'coremeta4cat:carrier_gas'} }) - carrier_gas_purity: Optional[list[str]] = Field(default=[], description="""Purity grade of the carrier gas used in GC.""", json_schema_extra = { "linkml_meta": {'domain_of': ['GCMS'], 'slot_uri': 'coremeta4cat:carrier_gas_purity'} }) - inlet_temperature: Optional[list[Temperature]] = Field(default=[], description="""GC inlet temperature.""", json_schema_extra = { "linkml_meta": {'domain_of': ['GCMS'], 'slot_uri': 'coremeta4cat:inlet_temperature'} }) - minimum_oven_temperature: Optional[list[Temperature]] = Field(default=[], description="""Minimum oven temperature in GC temperature programme.""", json_schema_extra = { "linkml_meta": {'domain_of': ['GCMS'], 'slot_uri': 'coremeta4cat:minimum_oven_temperature'} }) - maximum_oven_temperature: Optional[list[Temperature]] = Field(default=[], description="""Maximum oven temperature in GC temperature programme.""", json_schema_extra = { "linkml_meta": {'domain_of': ['GCMS'], 'slot_uri': 'coremeta4cat:maximum_oven_temperature'} }) - heating_ramp: Optional[list[HeatingRate]] = Field(default=[], description="""Temperature ramp rate in GC oven programme.""", json_schema_extra = { "linkml_meta": {'domain_of': ['GCMS'], 'slot_uri': 'VOC4CAT:0008116'} }) - has_heating_procedure: Optional[list[HeatingProcedure]] = Field(default=[], description="""Heating procedure or thermal programme applied.""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin', 'GCMS'], + adsorption_gas: Optional[list[ChemicalEntity]] = Field(default=[], description="""Probe gas adsorbed during in-situ DRIFTS measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DRIFTS'], + 'is_a': 'had_input_entity', + 'recommended': True, + 'slot_uri': 'coremeta4cat:adsorption_gas'} }) + has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', + 'MolecularSynthesis', + 'ElectrochemistryMixin', + 'PowderXRD', + 'XPS', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'Thermogravimetry', + 'CatalyticReaction'], 'is_a': 'has_qualitative_attribute', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - acquisition_mode: Optional[list[str]] = Field(default=[], description="""Mass spectrometer acquisition mode (e.g. full scan, SIM, SRM).""", json_schema_extra = { "linkml_meta": {'domain_of': ['GCMS'], 'slot_uri': 'coremeta4cat:acquisition_mode'} }) - solvent_delay: Optional[list[float]] = Field(default=[], description="""Solvent delay time before MS acquisition begins.""", json_schema_extra = { "linkml_meta": {'domain_of': ['GCMS'], - 'slot_uri': 'coremeta4cat:solvent_delay', - 'unit': {'ucum_code': 'min'}} }) - trace_ion_detection: Optional[list[str]] = Field(default=[], description="""Trace ion detection setting or threshold.""", json_schema_extra = { "linkml_meta": {'domain_of': ['GCMS'], 'slot_uri': 'coremeta4cat:trace_ion_detection'} }) - split_ratio: Optional[list[float]] = Field(default=[], description="""Split ratio at the GC injector.""", json_schema_extra = { "linkml_meta": {'domain_of': ['GCMS'], 'slot_uri': 'coremeta4cat:split_ratio'} }) - column_type: Optional[list[str]] = Field(default=[], description="""Type of chromatographic column used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], 'slot_uri': 'coremeta4cat:column_type'} }) - eluent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Eluent or mobile phase used in chromatography.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], 'slot_uri': 'AFRL:0000011'} }) + 'slot_uri': 'VOC4CAT:0007809'} }) has_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Volumetric flow rate of a gas or liquid.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', 'ChromatographyMixin', 'DRIFTS', @@ -11557,16 +9534,75 @@ class GCMS(CharacterizationTechnique, MassRangeMixin, ChromatographyMixin): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_injection_volume: Optional[list[Volume]] = Field(default=[], description="""Volume injected in a chromatographic or mass spectrometric analysis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], - 'is_a': 'has_volume', + has_wavenumber_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Infrared wavenumber scan range (minimum -> maximum cm^-1) as a QuantitativeRange. +Provide unit as a QUDT term (e.g. ReciprocalCentimetre).""", json_schema_extra = { "linkml_meta": {'domain_of': ['InfraredSpectroscopy', 'DRIFTS'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:hasWavenumberRange'} }) + diluting_reference: Optional[list[str]] = Field(default=[], description="""Reference material used to dilute the DRIFTS sample (e.g. KBr).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DRIFTS'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:diluting_reference'} }) + ratio_reference_sample: Optional[list[float]] = Field(default=[], description="""Mass ratio of reference material to catalyst sample in DRIFTS cup.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DRIFTS'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:ratio_reference_sample'} }) + step_size: Optional[list[float]] = Field(default=[], description="""Step size for a scan (angle, wavelength, energy, or potential).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', + 'XPS', + 'InfraredSpectroscopy', + 'DRIFTS', + 'PhotoluminescenceSpectroscopy'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'AFR:0000950'} }) + resolution: Optional[list[float]] = Field(default=[], description="""Resolution of a measurement or detector.""", json_schema_extra = { "linkml_meta": {'domain_of': ['EDX', 'DRIFTS'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:resolution'} }) + background_correction_method: Optional[list[str]] = Field(default=[], description="""Specific background correction method used in DRIFTS.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DRIFTS'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:background_correction_method'} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - external_standard: Optional[list[str]] = Field(default=[], description="""External standard used for quantification or calibration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], - 'slot_uri': 'coremeta4cat:external_standard'} }) - internal_standard: Optional[list[str]] = Field(default=[], description="""Internal standard used for quantification or calibration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], - 'slot_uri': 'coremeta4cat:internal_standard'} }) - has_mz_range: Optional[QuantitativeRange] = Field(default=None, description="""Mass-to-charge ratio scan range (minimum -> maximum m/z) as a QuantitativeRange. -The unit for m/z is dimensionless (Thomson); set unit to the appropriate QUDT term.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MassRangeMixin'], 'slot_uri': 'coremeta4cat:hasMzRange'} }) + number_of_scans: Optional[list[int]] = Field(default=[], description="""Number of scans or accumulations recorded.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XPS', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:number_of_scans'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -11652,14 +9688,50 @@ class GCMS(CharacterizationTechnique, MassRangeMixin, ChromatographyMixin): 'slot_uri': 'rdf:type'} }) -class SizeExclusionChromatography(CharacterizationTechnique, ChromatographyMixin): +class RamanSpectroscopy(CharacterizationTechnique): """ - Size exclusion chromatography for molecular weight distribution determination. + Raman spectroscopy for vibrational and structural characterization. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'AFP:0000843', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', - 'mixins': ['ChromatographyMixin']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000069', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/'}) + excitation_laser_wavelength: Optional[list[LengthQuantity]] = Field(default=[], description="""Wavelength of excitation laser used in Raman spectroscopy.""", json_schema_extra = { "linkml_meta": {'domain_of': ['RamanSpectroscopy'], + 'is_a': 'has_length', + 'recommended': True, + 'slot_uri': 'AFR:0001594'} }) + excitation_laser_power: Optional[list[PowerQuantity]] = Field(default=[], description="""Power of the excitation laser at the sample.""", json_schema_extra = { "linkml_meta": {'domain_of': ['RamanSpectroscopy'], + 'is_a': 'has_power', + 'recommended': True, + 'slot_uri': 'AFR:0001595'} }) + magnification_setting: Optional[list[float]] = Field(default=[], description="""Magnification setting used for imaging.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronMicroscopyMixin', 'RamanSpectroscopy'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'AFR:0002226'} }) + has_integration_time: Optional[Duration] = Field(default=None, description="""Integration or acquisition time per measurement step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['RamanSpectroscopy', 'PhotoluminescenceSpectroscopy'], + 'is_a': 'has_duration', + 'slot_uri': 'SIO:000008'} }) + number_of_scans: Optional[list[int]] = Field(default=[], description="""Number of scans or accumulations recorded.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XPS', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:number_of_scans'} }) + has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', + 'MolecularSynthesis', + 'ElectrochemistryMixin', + 'PowderXRD', + 'XPS', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'Thermogravimetry', + 'CatalyticReaction'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007809'} }) has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', 'PhotoluminescenceMixin', 'ElectrochemistryMixin', @@ -11673,33 +9745,29 @@ class SizeExclusionChromatography(CharacterizationTechnique, ChromatographyMixin 'DynamicLightScattering', 'SizeExclusionChromatography', 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', 'ChemicalReaction', + 'MaterialisticMixin', 'Microkinetics', 'MonteCarlo', 'AqueousStability'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - calibration_standard: Optional[list[str]] = Field(default=[], description="""Calibration standard used for molecular weight or retention time calibration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SizeExclusionChromatography'], - 'slot_uri': 'coremeta4cat:calibration_standard'} }) - column_type: Optional[list[str]] = Field(default=[], description="""Type of chromatographic column used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], 'slot_uri': 'coremeta4cat:column_type'} }) - eluent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Eluent or mobile phase used in chromatography.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], 'slot_uri': 'AFRL:0000011'} }) - has_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Volumetric flow rate of a gas or liquid.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', - 'ChromatographyMixin', - 'DRIFTS', - 'ElectroSprayIonizationMassSpectrometry'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_injection_volume: Optional[list[Volume]] = Field(default=[], description="""Volume injected in a chromatographic or mass spectrometric analysis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], - 'is_a': 'has_volume', + filter_or_grating: Optional[list[str]] = Field(default=[], description="""Optical filter or grating used in Raman spectrometer.""", json_schema_extra = { "linkml_meta": {'domain_of': ['RamanSpectroscopy'], + 'is_a': 'has_qualitative_attribute', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - external_standard: Optional[list[str]] = Field(default=[], description="""External standard used for quantification or calibration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], - 'slot_uri': 'coremeta4cat:external_standard'} }) - internal_standard: Optional[list[str]] = Field(default=[], description="""Internal standard used for quantification or calibration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], - 'slot_uri': 'coremeta4cat:internal_standard'} }) + 'slot_uri': 'coremeta4cat:filter_or_grating'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -11785,18 +9853,32 @@ class SizeExclusionChromatography(CharacterizationTechnique, ChromatographyMixin 'slot_uri': 'rdf:type'} }) -class HighPerformanceLiquidChromatographyMassSpectrometry(CharacterizationTechnique, ChromatographyMixin): +class NMRSpectroscopy(CharacterizationTechnique): """ - High-performance liquid chromatography-mass spectrometry for compound identification and quantification. + Nuclear magnetic resonance spectroscopy for structure elucidation. + Note: for detailed liquid-state NMR minimum information, the dedicated + nmr_dcat_ap profile (MARGARITAS) should be used in combination with + this subprofile. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000796', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', - 'mixins': ['ChromatographyMixin']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000073', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/'}) - gradient_program: Optional[list[str]] = Field(default=[], description="""Gradient elution programme used in HPLC-MS.""", json_schema_extra = { "linkml_meta": {'domain_of': ['HighPerformanceLiquidChromatographyMassSpectrometry'], - 'slot_uri': 'coremeta4cat:gradient_program'} }) - ionization_mode: Optional[list[str]] = Field(default=[], description="""Ionisation mode used in HPLC-MS (e.g. positive, negative, APCI, ESI).""", json_schema_extra = { "linkml_meta": {'domain_of': ['HighPerformanceLiquidChromatographyMassSpectrometry'], - 'slot_uri': 'coremeta4cat:ionization_mode'} }) + nucleus: Optional[list[str]] = Field(default=[], description="""NMR-active nucleus observed (e.g. 1H, 13C, 31P).""", json_schema_extra = { "linkml_meta": {'domain_of': ['NMRSpectroscopy'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:nucleus'} }) + solvent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Solvent used in a process or sample preparation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Synthesis', + 'NMRSpectroscopy', + 'UVVisSpectroscopy', + 'DynamicLightScattering'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007246'} }) + irradiation_frequency: Optional[list[float]] = Field(default=[], description="""Irradiation frequency of the NMR spectrometer.""", json_schema_extra = { "linkml_meta": {'domain_of': ['NMRSpectroscopy'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:irradiation_frequency', + 'unit': {'ucum_code': 'MHz'}} }) has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', 'PhotoluminescenceMixin', 'ElectrochemistryMixin', @@ -11810,31 +9892,55 @@ class HighPerformanceLiquidChromatographyMassSpectrometry(CharacterizationTechni 'DynamicLightScattering', 'SizeExclusionChromatography', 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', 'ChemicalReaction', + 'MaterialisticMixin', 'Microkinetics', 'MonteCarlo', 'AqueousStability'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - column_type: Optional[list[str]] = Field(default=[], description="""Type of chromatographic column used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], 'slot_uri': 'coremeta4cat:column_type'} }) - eluent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Eluent or mobile phase used in chromatography.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], 'slot_uri': 'AFRL:0000011'} }) - has_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Volumetric flow rate of a gas or liquid.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', - 'ChromatographyMixin', + nmr_pulse_sequence: Optional[list[str]] = Field(default=[], description="""NMR pulse sequence used (e.g. zgpg30, dept).""", json_schema_extra = { "linkml_meta": {'domain_of': ['NMRSpectroscopy'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:nmr_pulse_sequence'} }) + nmr_sample_tube: Optional[list[str]] = Field(default=[], description="""NMR sample tube type (e.g. 5mm standard, Shigemi tube).""", json_schema_extra = { "linkml_meta": {'domain_of': ['NMRSpectroscopy'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:nmr_sample_tube'} }) + number_of_scans: Optional[list[int]] = Field(default=[], description="""Number of scans or accumulations recorded.""", json_schema_extra = { "linkml_meta": {'domain_of': ['XPS', + 'InfraredSpectroscopy', 'DRIFTS', - 'ElectroSprayIonizationMassSpectrometry'], + 'RamanSpectroscopy', + 'NMRSpectroscopy'], 'is_a': 'has_quantitative_attribute', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_injection_volume: Optional[list[Volume]] = Field(default=[], description="""Volume injected in a chromatographic or mass spectrometric analysis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], - 'is_a': 'has_volume', + 'slot_uri': 'coremeta4cat:number_of_scans'} }) + has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', + 'MolecularSynthesis', + 'ElectrochemistryMixin', + 'PowderXRD', + 'XPS', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'Thermogravimetry', + 'CatalyticReaction'], + 'is_a': 'has_qualitative_attribute', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - external_standard: Optional[list[str]] = Field(default=[], description="""External standard used for quantification or calibration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], - 'slot_uri': 'coremeta4cat:external_standard'} }) - internal_standard: Optional[list[str]] = Field(default=[], description="""Internal standard used for quantification or calibration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], - 'slot_uri': 'coremeta4cat:internal_standard'} }) + 'slot_uri': 'VOC4CAT:0007809'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -11920,19 +10026,46 @@ class HighPerformanceLiquidChromatographyMassSpectrometry(CharacterizationTechni 'slot_uri': 'rdf:type'} }) -class ProductIdentificationMethod(Plan): +class TransmissionElectronMicroscopy(CharacterizationTechnique, ElectronMicroscopyMixin): """ - Abstract Plan representing the method used to identify and quantify reaction - products. In practice, users should reference a concrete CharacterizationTechnique - subclass from coremeta4cat_characterization_ap (e.g. GCMS, HPLC_MS, NMRSpectroscopy). - - This abstract class is retained for backward compatibility with the original - CoreMeta4Cat monolith. It is a subclass of Plan (prov:Plan / OBI:0000272) so that - it can participate in the realized_plan slot if needed. + TEM for atomic-resolution imaging and diffraction of catalyst particles. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'OBI:0000272', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000078', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', + 'mixins': ['ElectronMicroscopyMixin']}) + has_operation_mode: Optional[list[OperationMode]] = Field(default=[], description="""Operation mode of an instrument or process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'TransmissionElectronMicroscopy', + 'Thermogravimetry', + 'ElectroSprayIonizationMassSpectrometry'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + gun_type: Optional[list[str]] = Field(default=[], description="""Type of electron gun (e.g. FEG, thermionic LaB6).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronMicroscopyMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:gun_type'} }) + acceleration_voltage: Optional[list[ElectricPotential]] = Field(default=[], description="""Acceleration voltage applied to the electron beam.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronMicroscopyMixin'], + 'is_a': 'has_electric_potential', + 'recommended': True, + 'slot_uri': 'coremeta4cat:acceleration_voltage'} }) + magnification_setting: Optional[list[float]] = Field(default=[], description="""Magnification setting used for imaging.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronMicroscopyMixin', 'RamanSpectroscopy'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'AFR:0002226'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -12018,13 +10151,46 @@ class ProductIdentificationMethod(Plan): 'slot_uri': 'rdf:type'} }) -class LiquidPhaseAnalysis(ProductIdentificationMethod): +class ScanningElectronMicroscopy(CharacterizationTechnique, ElectronMicroscopyMixin): """ - Analysis of the liquid sample from a catalytic test. + SEM for surface morphology and particle size/shape imaging. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0007813', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000075', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', + 'mixins': ['ElectronMicroscopyMixin']}) + image_resolution: Optional[list[float]] = Field(default=[], description="""Spatial resolution of SEM images.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ScanningElectronMicroscopy'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:image_resolution', + 'unit': {'ucum_code': 'nm'}} }) + field_emitter: Optional[list[str]] = Field(default=[], description="""Type of field emitter used in FE-SEM instrument.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ScanningElectronMicroscopy'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:field_emitter'} }) + gun_type: Optional[list[str]] = Field(default=[], description="""Type of electron gun (e.g. FEG, thermionic LaB6).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronMicroscopyMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:gun_type'} }) + acceleration_voltage: Optional[list[ElectricPotential]] = Field(default=[], description="""Acceleration voltage applied to the electron beam.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronMicroscopyMixin'], + 'is_a': 'has_electric_potential', + 'recommended': True, + 'slot_uri': 'coremeta4cat:acceleration_voltage'} }) + magnification_setting: Optional[list[float]] = Field(default=[], description="""Magnification setting used for imaging.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronMicroscopyMixin', 'RamanSpectroscopy'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'AFR:0002226'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -12110,111 +10276,73 @@ class LiquidPhaseAnalysis(ProductIdentificationMethod): 'slot_uri': 'rdf:type'} }) -class GasPhaseAnalysis(ProductIdentificationMethod): +class Thermogravimetry(CharacterizationTechnique, TemperatureProgramMixin): """ - Analysis of the liquid sample from a catalytic test. + Thermogravimetric analysis (TGA/DTG) for mass loss, decomposition, and oxidation state characterization. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0007814', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000690', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', + 'mixins': ['TemperatureProgramMixin']}) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', + has_operation_mode: Optional[list[OperationMode]] = Field(default=[], description="""Operation mode of an instrument or process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'TransmissionElectronMicroscopy', + 'Thermogravimetry', + 'ElectroSprayIonizationMassSpectrometry'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', + 'MolecularSynthesis', + 'ElectrochemistryMixin', + 'PowderXRD', + 'XPS', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'Thermogravimetry', + 'CatalyticReaction'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007809'} }) + initial_temperature: Optional[list[Temperature]] = Field(default=[], description="""Initial temperature at the start of a thermal analysis run.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Thermogravimetry'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'NCIT:C164644'} }) + final_temperature: Optional[list[Temperature]] = Field(default=[], description="""Final temperature at the end of a thermal analysis run.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Thermogravimetry'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'NCIT:C164644'} }) + has_sample_mass: Optional[list[Mass]] = Field(default=[], description="""Mass of the sample used in a process or measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Thermogravimetry', 'BET'], + 'is_a': 'has_mass', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_temperature_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Temperature programme range (start -> final temperature) as a QuantitativeRange. +Provide unit as a QUDT term (e.g. Degree Celsius, Kelvin).""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:hasTemperatureRange'} }) + has_heating_rate: Optional[list[HeatingRate]] = Field(default=[], description="""Temperature ramp rate during a heating or cooling step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008116'} }) + has_heating_procedure: Optional[list[HeatingProcedure]] = Field(default=[], description="""Heating procedure or thermal programme applied.""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin', 'GCMS'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', 'Dataset', - 'DatasetSeries', - 'Distribution', + 'DefinedTerm', 'Document', 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', 'LegalResource', 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class QualitativeAttribute(ClassifierMixin): - """ - A piece of information that is attributed to an Entity, Activity or AgenticEntity. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Entity', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', - 'in_subset': ['domain_agnostic_core'], - 'mixins': ['ClassifierMixin'], - 'slot_usage': {'value': {'description': 'The slot to provide the literal ' - 'value of the QualitativeAttribute.', - 'name': 'value', - 'required': True}}}) - + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -12292,9 +10420,6 @@ class QualitativeAttribute(ClassifierMixin): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -12303,14 +10428,42 @@ class QualitativeAttribute(ClassifierMixin): 'slot_uri': 'rdf:type'} }) -class Atmosphere(QualitativeAttribute): +class TPR(CharacterizationTechnique, TemperatureProgramMixin): """ - A qualitative descriptor of the gaseous environment or atmospheric - conditions during a process (e.g. \"air\", \"N2\", \"5% H2/Ar\"). + Temperature-programmed reduction for reducibility and metal-support interaction characterization. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:Atmosphere', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0002908', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', + 'mixins': ['TemperatureProgramMixin']}) + reducing_gas_composition: Optional[list[str]] = Field(default=[], description="""Composition of reducing gas used in TPR (e.g. 5% H2/Ar).""", json_schema_extra = { "linkml_meta": {'domain_of': ['TPR'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:reducing_gas_composition'} }) + has_temperature_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Temperature programme range (start -> final temperature) as a QuantitativeRange. +Provide unit as a QUDT term (e.g. Degree Celsius, Kelvin).""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:hasTemperatureRange'} }) + has_heating_rate: Optional[list[HeatingRate]] = Field(default=[], description="""Temperature ramp rate during a heating or cooling step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008116'} }) + has_heating_procedure: Optional[list[HeatingProcedure]] = Field(default=[], description="""Heating procedure or thermal programme applied.""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin', 'GCMS'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -12388,9 +10541,6 @@ class Atmosphere(QualitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -12399,14 +10549,42 @@ class Atmosphere(QualitativeAttribute): 'slot_uri': 'rdf:type'} }) -class CalcinationGaseousEnvironment(Atmosphere): +class TPO(CharacterizationTechnique, TemperatureProgramMixin): """ - The specific gaseous environment maintained during a calcination step - (e.g. \"air\", \"N2\", \"10% O2/N2\"). + Temperature-programmed oxidation for coke quantification and reoxidation characterization. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000055', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0002907', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', + 'mixins': ['TemperatureProgramMixin']}) + oxidizing_gas_composition: Optional[list[str]] = Field(default=[], description="""Composition of oxidising gas used in TPO (e.g. 5% O2/Ar).""", json_schema_extra = { "linkml_meta": {'domain_of': ['TPO'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:oxidizing_gas_composition'} }) + has_temperature_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Temperature programme range (start -> final temperature) as a QuantitativeRange. +Provide unit as a QUDT term (e.g. Degree Celsius, Kelvin).""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:hasTemperatureRange'} }) + has_heating_rate: Optional[list[HeatingRate]] = Field(default=[], description="""Temperature ramp rate during a heating or cooling step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008116'} }) + has_heating_procedure: Optional[list[HeatingProcedure]] = Field(default=[], description="""Heating procedure or thermal programme applied.""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin', 'GCMS'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -12484,9 +10662,6 @@ class CalcinationGaseousEnvironment(Atmosphere): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -12495,14 +10670,44 @@ class CalcinationGaseousEnvironment(Atmosphere): 'slot_uri': 'rdf:type'} }) -class HeatingProcedure(QualitativeAttribute): +class BET(CharacterizationTechnique): """ - A qualitative descriptor of the thermal programme or heating procedure - applied (e.g. \"isothermal\", \"ramp 5 �C/min to 500 �C, dwell 2 h\"). + Brunauer-Emmett-Teller analysis for specific surface area and pore size distribution. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:HeatingProcedure', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'ENM:0000064', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/'}) + adsorbate_gas: Optional[list[str]] = Field(default=[], description="""Adsorbate gas used in BET surface area measurement (e.g. N2, Ar).""", json_schema_extra = { "linkml_meta": {'domain_of': ['BET'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:adsorbate_gas'} }) + degassing_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature at which sample is degassed before BET measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['BET'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'coremeta4cat:degassing_temperature'} }) + measurement_temperature: Optional[list[Temperature]] = Field(default=[], description="""Temperature at which BET adsorption isotherm is measured (e.g. 77 K for N2).""", json_schema_extra = { "linkml_meta": {'domain_of': ['BET'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'coremeta4cat:measurement_temperature'} }) + pore_size_distribution_method: Optional[list[str]] = Field(default=[], description="""Method used for pore size distribution calculation (e.g. BJH, DFT, HK).""", json_schema_extra = { "linkml_meta": {'domain_of': ['BET'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:pore_size_distribution_method'} }) + has_sample_mass: Optional[list[Mass]] = Field(default=[], description="""Mass of the sample used in a process or measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Thermogravimetry', 'BET'], + 'is_a': 'has_mass', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -12580,9 +10785,6 @@ class HeatingProcedure(QualitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -12591,14 +10793,40 @@ class HeatingProcedure(QualitativeAttribute): 'slot_uri': 'rdf:type'} }) -class SamplePretreatment(QualitativeAttribute): +class ICPAES(CharacterizationTechnique): """ - A qualitative descriptor of the pre-treatment applied to a sample - before a process or measurement (e.g. \"reduction at 300 �C\", \"outgassing\"). + Inductively coupled plasma atomic emission spectroscopy for bulk elemental composition. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000122', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000267', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/'}) + element_analyzed: Optional[list[str]] = Field(default=[], description="""Chemical element analysed (e.g. Fe, Cu, Pt).""", json_schema_extra = { "linkml_meta": {'domain_of': ['XRayAbsorptionSpectroscopy', 'ICPAES'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:element_analyzed'} }) + calibration_method: Optional[list[str]] = Field(default=[], description="""Calibration method applied during a measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['EDX', 'ICPAES'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:calibration_method'} }) + detection_limit: Optional[list[float]] = Field(default=[], description="""Detection limit of the analytical method.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ICPAES'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'NCIT:C105701'} }) + matrix_effect_correction: Optional[list[str]] = Field(default=[], description="""Method used to correct for matrix effects in ICP-AES.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ICPAES'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:matrix_effect_correction'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -12676,9 +10904,6 @@ class SamplePretreatment(QualitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -12687,14 +10912,39 @@ class SamplePretreatment(QualitativeAttribute): 'slot_uri': 'rdf:type'} }) -class VesselType(QualitativeAttribute): +class ElementalAnalysis(CharacterizationTechnique): """ - A qualitative descriptor of the type of reaction or synthesis vessel - used (e.g. \"autoclave\", \"round-bottom flask\", \"Schlenk tube\"). + Combustion elemental analysis (CHNS/O) for carbon, hydrogen, nitrogen, sulfur content. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:VesselType', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0001075', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/'}) + elements_analyzed: Optional[list[str]] = Field(default=[], description="""List of elements analysed by combustion elemental analysis (e.g. C, H, N, S).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElementalAnalysis'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:elements_analyzed'} }) + combustion_temperature: Optional[list[Temperature]] = Field(default=[], description="""Combustion furnace temperature for elemental analysis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElementalAnalysis'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'coremeta4cat:combustion_temperature'} }) + carrier_gas: Optional[list[ChemicalEntity]] = Field(default=[], description="""Carrier gas used in a process (e.g. in GC analysis or ALD deposition).""", json_schema_extra = { "linkml_meta": {'domain_of': ['AtomicLayerDeposition', + 'ElementalAnalysis', + 'ElectroSprayIonizationMassSpectrometry', + 'GCMS'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'coremeta4cat:carrier_gas'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -12772,25 +11022,57 @@ class VesselType(QualitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], 'in_subset': ['domain_agnostic_core'], 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class OperationMode(QualitativeAttribute): - """ - A qualitative descriptor of the operation mode of an instrument or - process (e.g. \"transmission\", \"reflection\", \"AC\", \"DC\", \"full-scan\"). - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000108', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) - + 'slot_uri': 'rdf:type'} }) + + +class UVVisSpectroscopy(CharacterizationTechnique): + """ + UV-Vis spectroscopy for electronic transitions, band gap, and concentration determination. + """ + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000079', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/'}) + + wavelength_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Wavelength range of the UV-Vis scan, provided as a QuantitativeRange +with min_value and max_value (unit_code: \"nm\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['UVVisSpectroscopy'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:wavelength_range'} }) + path_length: Optional[list[float]] = Field(default=[], description="""Optical path length of the measurement cell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['UVVisSpectroscopy'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'AFQ:0000268', + 'unit': {'ucum_code': 'cm'}} }) + solvent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Solvent used in a process or sample preparation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Synthesis', + 'NMRSpectroscopy', + 'UVVisSpectroscopy', + 'DynamicLightScattering'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007246'} }) + has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', + 'UVVisSpectroscopy', + 'DynamicLightScattering', + 'ElectroSprayIonizationMassSpectrometry', + 'ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -12868,9 +11150,6 @@ class OperationMode(QualitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -12879,14 +11158,78 @@ class OperationMode(QualitativeAttribute): 'slot_uri': 'rdf:type'} }) -class CatalystType(QualitativeAttribute): +class PhotoluminescenceSpectroscopy(CharacterizationTechnique, PhotoluminescenceMixin): """ - Type of catalyst used (e.g. heterogeneous, homogeneous, biocatalyst). - For heterogeneous catalysts, use voc4cat terms where available. + Photoluminescence spectroscopy for defect and charge carrier characterization. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0007014', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000773', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', + 'mixins': ['PhotoluminescenceMixin']}) + emission_range: Optional[list[str]] = Field(default=[], description="""Wavelength range over which emission is detected.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceSpectroscopy'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:emission_range'} }) + slit_width: Optional[list[float]] = Field(default=[], description="""Spectrometer entrance or exit slit width.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceSpectroscopy'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:slit_width', + 'unit': {'ucum_code': 'nm'}} }) + step_size: Optional[list[float]] = Field(default=[], description="""Step size for a scan (angle, wavelength, energy, or potential).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', + 'XPS', + 'InfraredSpectroscopy', + 'DRIFTS', + 'PhotoluminescenceSpectroscopy'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'AFR:0000950'} }) + has_integration_time: Optional[Duration] = Field(default=None, description="""Integration or acquisition time per measurement step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['RamanSpectroscopy', 'PhotoluminescenceSpectroscopy'], + 'is_a': 'has_duration', + 'slot_uri': 'SIO:000008'} }) + excitation_wavelength: Optional[list[LengthQuantity]] = Field(default=[], description="""Excitation wavelength used in photoluminescence measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceMixin'], + 'is_a': 'has_length', + 'recommended': True, + 'slot_uri': 'AFR:0002479'} }) + emission_wavelength: Optional[list[LengthQuantity]] = Field(default=[], description="""Emission wavelength detected in photoluminescence measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceMixin'], + 'is_a': 'has_length', + 'recommended': True, + 'slot_uri': 'NCIT:C204101'} }) + optical_filter: Optional[list[str]] = Field(default=[], description="""Optical filter used in the emission or excitation path.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:optical_filter'} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -12964,9 +11307,6 @@ class CatalystType(QualitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -12975,13 +11315,66 @@ class CatalystType(QualitativeAttribute): 'slot_uri': 'rdf:type'} }) -class HeterogeneousCatalyst(CatalystType): +class PhotoluminescenceLifetime(CharacterizationTechnique, PhotoluminescenceMixin): """ - A substance that increases the rate of a chemical reaction that is in a different phase than the reagents. + Time-resolved photoluminescence for charge carrier lifetime and recombination dynamics. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0007003', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0001917', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', + 'mixins': ['PhotoluminescenceMixin']}) + lifetime_fitting_model: Optional[list[str]] = Field(default=[], description="""Mathematical model used for fluorescence lifetime fitting (e.g. mono-exponential, bi-exponential).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceLifetime'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:lifetime_fitting_model'} }) + number_of_shots: Optional[list[int]] = Field(default=[], description="""Number of laser shots accumulated per measurement point.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceLifetime'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:number_of_shots'} }) + excitation_wavelength: Optional[list[LengthQuantity]] = Field(default=[], description="""Excitation wavelength used in photoluminescence measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceMixin'], + 'is_a': 'has_length', + 'recommended': True, + 'slot_uri': 'AFR:0002479'} }) + emission_wavelength: Optional[list[LengthQuantity]] = Field(default=[], description="""Emission wavelength detected in photoluminescence measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceMixin'], + 'is_a': 'has_length', + 'recommended': True, + 'slot_uri': 'NCIT:C204101'} }) + optical_filter: Optional[list[str]] = Field(default=[], description="""Optical filter used in the emission or excitation path.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhotoluminescenceMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:optical_filter'} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -13059,9 +11452,6 @@ class HeterogeneousCatalyst(CatalystType): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -13070,108 +11460,103 @@ class HeterogeneousCatalyst(CatalystType): 'slot_uri': 'rdf:type'} }) -class HomogeneousCatalyst(CatalystType): +class CyclicVoltammetry(CharacterizationTechnique, ElectrochemistryMixin): """ - A substance that increses the rate of a chemical reaction that is in the same phase as the reagents. + Cyclic voltammetry for electrochemical activity, redox potential, and capacitance characterization. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:HomogeneousCatalyst', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000025', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', + 'mixins': ['ElectrochemistryMixin']}) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + scan_rate: Optional[list[float]] = Field(default=[], description="""Potential scan rate in cyclic voltammetry.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CyclicVoltammetry'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007213', + 'unit': {'ucum_code': 'mV/s'}} }) + scan_potential_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Potential window scanned in cyclic voltammetry, provided as a +QuantitativeRange with min_value and max_value (unit_code: \"V\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['CyclicVoltammetry'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:scan_potential_range'} }) + step_size_potential: Optional[list[float]] = Field(default=[], description="""Potential step size in cyclic voltammetry.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CyclicVoltammetry'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007218', + 'unit': {'ucum_code': 'mV'}} }) + number_of_cycles: Optional[list[int]] = Field(default=[], description="""Number of repeated cycles in a process (e.g. ALD cycles, impregnation cycles).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CalcinationMixin', + 'AtomicLayerDeposition', + 'MolecularSynthesis', + 'XRayAbsorptionSpectroscopy', + 'CyclicVoltammetry'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008123'} }) + reference_electrode: Optional[list[str]] = Field(default=[], description="""Reference electrode used in electrochemical cell (e.g. Ag/AgCl, RHE).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007204'} }) + working_electrode: Optional[list[str]] = Field(default=[], description="""Working electrode used in electrochemical cell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007202'} }) + counter_electrode: Optional[list[str]] = Field(default=[], description="""Counter electrode used in electrochemical cell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007203'} }) + electrolyte_composition: Optional[list[str]] = Field(default=[], description="""Chemical composition of the electrolyte solution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:electrolyte_composition'} }) + electrolyte_concentration: Optional[list[Concentration]] = Field(default=[], description="""Concentration of the electrolyte.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], + 'is_a': 'has_concentration', + 'recommended': True, + 'slot_uri': 'coremeta4cat:electrolyte_concentration'} }) + has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', + 'MolecularSynthesis', + 'ElectrochemistryMixin', + 'PowderXRD', + 'XPS', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'Thermogravimetry', + 'CatalyticReaction'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007809'} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', 'Activity', 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', 'Dataset', - 'DatasetSeries', - 'Distribution', + 'DefinedTerm', 'Document', 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', 'LegalResource', 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class BioCatalyst(CatalystType): - """ - An enzyme or cell that catalyzes a biocatalytic reaction. Subclass of Catalyst (AgenticEntity). The physical form in which it is applied is described by an associated BiocatalystPreparation. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:BioCatalyst', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) - + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -13249,9 +11634,6 @@ class BioCatalyst(CatalystType): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -13260,13 +11642,97 @@ class BioCatalyst(CatalystType): 'slot_uri': 'rdf:type'} }) -class ElectroCatalyst(CatalystType): +class ConductivityMeasurement(CharacterizationTechnique, ElectrochemistryMixin): """ - The characteristics of a material or substance that determine how it interacts or responds to a magnetic field. + Electrical conductivity measurement for ionic and electronic transport characterization. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000255', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000010', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', + 'mixins': ['ElectrochemistryMixin']}) + electrode_configuration: Optional[list[str]] = Field(default=[], description="""Configuration of electrodes used in conductivity measurement (e.g. 2-probe, 4-probe).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ConductivityMeasurement'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:electrode_configuration'} }) + ac_frequency: Optional[list[float]] = Field(default=[], description="""Frequency of AC signal applied in impedance or conductivity measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ConductivityMeasurement'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007239', + 'unit': {'ucum_code': 'Hz'}} }) + ac_dc_mode: Optional[list[str]] = Field(default=[], description="""AC or DC measurement mode used in conductivity measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ConductivityMeasurement'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:ac_dc_mode'} }) + sample_geometry: Optional[list[str]] = Field(default=[], description="""Geometry of the sample used in conductivity measurement (e.g. pellet, thin film).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ConductivityMeasurement'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:sample_geometry'} }) + reference_electrode: Optional[list[str]] = Field(default=[], description="""Reference electrode used in electrochemical cell (e.g. Ag/AgCl, RHE).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007204'} }) + working_electrode: Optional[list[str]] = Field(default=[], description="""Working electrode used in electrochemical cell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007202'} }) + counter_electrode: Optional[list[str]] = Field(default=[], description="""Counter electrode used in electrochemical cell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007203'} }) + electrolyte_composition: Optional[list[str]] = Field(default=[], description="""Chemical composition of the electrolyte solution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:electrolyte_composition'} }) + electrolyte_concentration: Optional[list[Concentration]] = Field(default=[], description="""Concentration of the electrolyte.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemistryMixin'], + 'is_a': 'has_concentration', + 'recommended': True, + 'slot_uri': 'coremeta4cat:electrolyte_concentration'} }) + has_atmosphere: Optional[list[Atmosphere]] = Field(default=[], description="""Gaseous environment or atmospheric conditions during a process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermalSynthesisMixin', + 'MolecularSynthesis', + 'ElectrochemistryMixin', + 'PowderXRD', + 'XPS', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'Thermogravimetry', + 'CatalyticReaction'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007809'} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -13344,9 +11810,6 @@ class ElectroCatalyst(CatalystType): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -13355,13 +11818,79 @@ class ElectroCatalyst(CatalystType): 'slot_uri': 'rdf:type'} }) -class ThinFilmCatalyst(CatalystType): +class DynamicLightScattering(CharacterizationTechnique): """ - A catalyst introduced to the reaction chamber in the form of a thin film. To form a thin film, a (powdered) catalyst is deposited on a substrate (e.g., glass or metal) using an appropriate deposition technique. + Dynamic light scattering for hydrodynamic particle size distribution in suspension. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000019', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000167', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/'}) + solvent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Solvent used in a process or sample preparation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Synthesis', + 'NMRSpectroscopy', + 'UVVisSpectroscopy', + 'DynamicLightScattering'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007246'} }) + has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', + 'UVVisSpectroscopy', + 'DynamicLightScattering', + 'ElectroSprayIonizationMassSpectrometry', + 'ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + light_wavelength: Optional[list[LengthQuantity]] = Field(default=[], description="""Wavelength of the laser used in DLS measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DynamicLightScattering'], + 'is_a': 'has_length', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0000176'} }) + scattering_angle: Optional[list[PlaneAngle]] = Field(default=[], description="""Scattering angle at which intensity is detected in DLS.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DynamicLightScattering'], + 'is_a': 'has_plane_angle', + 'recommended': True, + 'slot_uri': 'coremeta4cat:scattering_angle'} }) + refractive_index: Optional[list[float]] = Field(default=[], description="""Refractive index of the solvent used in DLS measurement.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DynamicLightScattering'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:refractive_index'} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + dispersant: Optional[list[ChemicalEntity]] = Field(default=[], description="""Dispersant used (e.g. in DLS measurement or flame spray pyrolysis).""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', 'DynamicLightScattering'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'coremeta4cat:dispersant'} }) + measurement_duration: Optional[list[Duration]] = Field(default=[], description="""Duration of a single DLS acquisition.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DynamicLightScattering'], + 'is_a': 'has_duration', + 'slot_uri': 'coremeta4cat:measurement_duration'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -13439,9 +11968,6 @@ class ThinFilmCatalyst(CatalystType): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -13450,13 +11976,73 @@ class ThinFilmCatalyst(CatalystType): 'slot_uri': 'rdf:type'} }) -class BulkCatalyst(CatalystType): +class ElectroSprayIonizationMassSpectrometry(CharacterizationTechnique, MassRangeMixin): """ - A catalyst that consists mainly of the active ingredient or phase. + Electrospray ionisation mass spectrometry for molecular mass and identity determination. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0007015', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000482', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', + 'mixins': ['MassRangeMixin']}) + has_operation_mode: Optional[list[OperationMode]] = Field(default=[], description="""Operation mode of an instrument or process.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PowderXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'TransmissionElectronMicroscopy', + 'Thermogravimetry', + 'ElectroSprayIonizationMassSpectrometry'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + spray_voltage: Optional[list[ElectricPotential]] = Field(default=[], description="""Spray voltage applied in electrospray ionisation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectroSprayIonizationMassSpectrometry'], + 'is_a': 'has_electric_potential', + 'recommended': True, + 'slot_uri': 'CHMO:0002792'} }) + capillary_temperature: Optional[list[Temperature]] = Field(default=[], description="""Capillary or desolvation temperature in ESI source.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectroSprayIonizationMassSpectrometry'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'coremeta4cat:capillary_temperature'} }) + solvent_composition: Optional[list[str]] = Field(default=[], description="""Solvent composition used for ESI spray solution.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectroSprayIonizationMassSpectrometry'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007246'} }) + has_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Volumetric flow rate of a gas or liquid.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', + 'ChromatographyMixin', + 'DRIFTS', + 'ElectroSprayIonizationMassSpectrometry'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + carrier_gas: Optional[list[ChemicalEntity]] = Field(default=[], description="""Carrier gas used in a process (e.g. in GC analysis or ALD deposition).""", json_schema_extra = { "linkml_meta": {'domain_of': ['AtomicLayerDeposition', + 'ElementalAnalysis', + 'ElectroSprayIonizationMassSpectrometry', + 'GCMS'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'coremeta4cat:carrier_gas'} }) + has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', + 'UVVisSpectroscopy', + 'DynamicLightScattering', + 'ElectroSprayIonizationMassSpectrometry', + 'ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_mz_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Mass-to-charge ratio scan range (minimum -> maximum m/z) as a QuantitativeRange. +The unit for m/z is dimensionless (Thomson); set unit to the appropriate QUDT term.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MassRangeMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:hasMzRange'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -13534,9 +12120,6 @@ class BulkCatalyst(CatalystType): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -13545,13 +12128,102 @@ class BulkCatalyst(CatalystType): 'slot_uri': 'rdf:type'} }) -class PowerderedCatalyst(CatalystType): +class GCMS(CharacterizationTechnique, MassRangeMixin, ChromatographyMixin): """ - A catalyst introduced to the reaction chamber in the form of a powder. + Gas chromatography-mass spectrometry for volatile compound identification and quantification. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000017', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000497', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', + 'mixins': ['ChromatographyMixin', 'MassRangeMixin']}) + carrier_gas: Optional[list[ChemicalEntity]] = Field(default=[], description="""Carrier gas used in a process (e.g. in GC analysis or ALD deposition).""", json_schema_extra = { "linkml_meta": {'domain_of': ['AtomicLayerDeposition', + 'ElementalAnalysis', + 'ElectroSprayIonizationMassSpectrometry', + 'GCMS'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'coremeta4cat:carrier_gas'} }) + carrier_gas_purity: Optional[list[str]] = Field(default=[], description="""Purity grade of the carrier gas used in GC.""", json_schema_extra = { "linkml_meta": {'domain_of': ['GCMS'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:carrier_gas_purity'} }) + inlet_temperature: Optional[list[Temperature]] = Field(default=[], description="""GC inlet temperature.""", json_schema_extra = { "linkml_meta": {'domain_of': ['GCMS'], + 'is_a': 'has_temperature', + 'recommended': True, + 'slot_uri': 'coremeta4cat:inlet_temperature'} }) + oven_temperature_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Oven temperature range in the GC temperature programme, provided as a +QuantitativeRange with min_value and max_value (unit_code: \"Cel\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['GCMS'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:oven_temperature_range'} }) + heating_ramp: Optional[list[HeatingRate]] = Field(default=[], description="""Temperature ramp rate in GC oven programme.""", json_schema_extra = { "linkml_meta": {'domain_of': ['GCMS'], + 'is_a': 'has_heating_rate', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008116'} }) + has_heating_procedure: Optional[list[HeatingProcedure]] = Field(default=[], description="""Heating procedure or thermal programme applied.""", json_schema_extra = { "linkml_meta": {'domain_of': ['TemperatureProgramMixin', 'GCMS'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + acquisition_mode: Optional[list[str]] = Field(default=[], description="""Mass spectrometer acquisition mode (e.g. full scan, SIM, SRM).""", json_schema_extra = { "linkml_meta": {'domain_of': ['GCMS'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:acquisition_mode'} }) + solvent_delay: Optional[list[float]] = Field(default=[], description="""Solvent delay time before MS acquisition begins.""", json_schema_extra = { "linkml_meta": {'domain_of': ['GCMS'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:solvent_delay', + 'unit': {'ucum_code': 'min'}} }) + trace_ion_detection: Optional[list[str]] = Field(default=[], description="""Trace ion detection setting or threshold.""", json_schema_extra = { "linkml_meta": {'domain_of': ['GCMS'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:trace_ion_detection'} }) + split_ratio: Optional[list[float]] = Field(default=[], description="""Split ratio at the GC injector.""", json_schema_extra = { "linkml_meta": {'domain_of': ['GCMS'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:split_ratio'} }) + column_type: Optional[list[str]] = Field(default=[], description="""Type of chromatographic column used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:column_type'} }) + eluent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Eluent or mobile phase used in chromatography.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'AFRL:0000011'} }) + has_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Volumetric flow rate of a gas or liquid.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', + 'ChromatographyMixin', + 'DRIFTS', + 'ElectroSprayIonizationMassSpectrometry'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_injection_volume: Optional[list[Volume]] = Field(default=[], description="""Volume injected in a chromatographic or mass spectrometric analysis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], + 'is_a': 'has_volume', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + external_standard: Optional[list[str]] = Field(default=[], description="""External standard used for quantification or calibration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:external_standard'} }) + internal_standard: Optional[list[str]] = Field(default=[], description="""Internal standard used for quantification or calibration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:internal_standard'} }) + has_mz_range: Optional[list[QuantitativeRange]] = Field(default=[], description="""Mass-to-charge ratio scan range (minimum -> maximum m/z) as a QuantitativeRange. +The unit for m/z is dimensionless (Thomson); set unit to the appropriate QUDT term.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MassRangeMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:hasMzRange'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -13629,9 +12301,6 @@ class PowerderedCatalyst(CatalystType): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -13640,13 +12309,77 @@ class PowerderedCatalyst(CatalystType): 'slot_uri': 'rdf:type'} }) -class DepositedSampleCatalyst(CatalystType): +class SizeExclusionChromatography(CharacterizationTechnique, ChromatographyMixin): """ - A thin film of the catalyst deposited on an appropriate for the application substrate. + Size exclusion chromatography for molecular weight distribution determination. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000038', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'AFP:0000843', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', + 'mixins': ['ChromatographyMixin']}) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + calibration_standard: Optional[list[str]] = Field(default=[], description="""Calibration standard used for molecular weight or retention time calibration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SizeExclusionChromatography'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:calibration_standard'} }) + column_type: Optional[list[str]] = Field(default=[], description="""Type of chromatographic column used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:column_type'} }) + eluent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Eluent or mobile phase used in chromatography.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'AFRL:0000011'} }) + has_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Volumetric flow rate of a gas or liquid.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', + 'ChromatographyMixin', + 'DRIFTS', + 'ElectroSprayIonizationMassSpectrometry'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_injection_volume: Optional[list[Volume]] = Field(default=[], description="""Volume injected in a chromatographic or mass spectrometric analysis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], + 'is_a': 'has_volume', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + external_standard: Optional[list[str]] = Field(default=[], description="""External standard used for quantification or calibration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:external_standard'} }) + internal_standard: Optional[list[str]] = Field(default=[], description="""Internal standard used for quantification or calibration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:internal_standard'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -13724,9 +12457,6 @@ class DepositedSampleCatalyst(CatalystType): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -13735,108 +12465,81 @@ class DepositedSampleCatalyst(CatalystType): 'slot_uri': 'rdf:type'} }) -class PhotoCatalyst(CatalystType): +class HighPerformanceLiquidChromatographyMassSpectrometry(CharacterizationTechnique, ChromatographyMixin): """ - A material that absorbs photons (light) of appropriate energy and initiates or accelerates a photochemical reaction, while it regenerates itself after each reaction cycle. + High-performance liquid chromatography-mass spectrometry for compound identification and quantification. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000002', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0000796', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/characterization/', + 'mixins': ['ChromatographyMixin']}) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', - 'Activity', - 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', - 'Dataset', - 'DatasetSeries', - 'DefinedTerm', - 'Distribution', - 'Document', - 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', - 'LegalResource', - 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + gradient_program: Optional[list[str]] = Field(default=[], description="""Gradient elution programme used in HPLC-MS.""", json_schema_extra = { "linkml_meta": {'domain_of': ['HighPerformanceLiquidChromatographyMassSpectrometry'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:gradient_program'} }) + ionization_mode: Optional[list[str]] = Field(default=[], description="""Ionisation mode used in HPLC-MS (e.g. positive, negative, APCI, ESI).""", json_schema_extra = { "linkml_meta": {'domain_of': ['HighPerformanceLiquidChromatographyMassSpectrometry'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:ionization_mode'} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + column_type: Optional[list[str]] = Field(default=[], description="""Type of chromatographic column used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:column_type'} }) + eluent: Optional[list[ChemicalEntity]] = Field(default=[], description="""Eluent or mobile phase used in chromatography.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], + 'is_a': 'carried_out_by', + 'recommended': True, + 'slot_uri': 'AFRL:0000011'} }) + has_flow_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""Volumetric flow rate of a gas or liquid.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FlameSprayPyrolysis', + 'ChromatographyMixin', + 'DRIFTS', + 'ElectroSprayIonizationMassSpectrometry'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_injection_volume: Optional[list[Volume]] = Field(default=[], description="""Volume injected in a chromatographic or mass spectrometric analysis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], + 'is_a': 'has_volume', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + external_standard: Optional[list[str]] = Field(default=[], description="""External standard used for quantification or calibration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:external_standard'} }) + internal_standard: Optional[list[str]] = Field(default=[], description="""Internal standard used for quantification or calibration.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChromatographyMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:internal_standard'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', 'Activity', 'AgenticEntity', - 'Any', - 'Attribution', - 'Catalogue', - 'CatalogueRecord', - 'ChecksumAlgorithm', - 'Concept', - 'ConceptScheme', - 'DataService', 'Dataset', - 'DatasetSeries', - 'Distribution', + 'DefinedTerm', 'Document', 'Entity', - 'Frequency', - 'Geometry', - 'Identifier', 'LegalResource', 'LicenseDocument', - 'LinguisticSystem', - 'MediaType', - 'MediaTypeOrExtent', - 'PeriodOfTime', - 'Plan', - 'Policy', - 'ProvenanceStatement', - 'QualitativeAttribute', - 'QuantitativeAttribute', - 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class SupportedCatalsyt(CatalystType): - """ - A catalyst where the active material is usually the minority phase and fixed on a high surface area, relatively inert solid. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0007034', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) - + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -13914,9 +12617,6 @@ class SupportedCatalsyt(CatalystType): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -13925,13 +12625,32 @@ class SupportedCatalsyt(CatalystType): 'slot_uri': 'rdf:type'} }) -class ReactionType(QualitativeAttribute): +class ProductIdentificationMethod(CatalysisPlan): """ - A group of chemical reactions with common conditions or reactants, e.g. Oxidation, Hydrogenation, Reduction, Cracking. + Abstract Plan representing the method used to identify and quantify reaction + products. In practice, users should reference a concrete CharacterizationTechnique + subclass from coremeta4cat_characterization_ap (e.g. GCMS, HPLC_MS, NMRSpectroscopy). + + This abstract class is retained for backward compatibility with the original + CoreMeta4Cat monolith. It is a subclass of CatalysisPlan (which is itself a Plan, + prov:Plan / OBI:0000272) so that it can participate in the realized_plan slot, + and so it (and every other CoreMeta4Cat protocol/technique class) can carry a + persistent id. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0007010', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'OBI:0000272', 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -14009,9 +12728,6 @@ class ReactionType(QualitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -14020,12 +12736,18 @@ class ReactionType(QualitativeAttribute): 'slot_uri': 'rdf:type'} }) -class Hydrogenation(ReactionType): +class QualitativeAttribute(ClassifierMixin): """ - A chemical reaction of molecular hydrogen (H2) and another chemical species, typically facilitated by a catalyst. + A piece of information that is attributed to an Entity, Activity or AgenticEntity. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000260', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Entity', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', + 'in_subset': ['domain_agnostic_core'], + 'mixins': ['ClassifierMixin'], + 'slot_usage': {'value': {'description': 'The slot to provide the literal ' + 'value of the QualitativeAttribute.', + 'name': 'value', + 'required': True}}}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -14115,12 +12837,13 @@ class Hydrogenation(ReactionType): 'slot_uri': 'rdf:type'} }) -class Oxidation(ReactionType): +class Atmosphere(QualitativeAttribute): """ - The loss of electrons or an increase in the oxidation state of a species. + A qualitative descriptor of the gaseous environment or atmospheric + conditions during a process (e.g. \"air\", \"N2\", \"5% H2/Ar\"). """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000097', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:Atmosphere', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -14210,12 +12933,13 @@ class Oxidation(ReactionType): 'slot_uri': 'rdf:type'} }) -class Dehydrogenation(ReactionType): +class CalcinationGaseousEnvironment(Atmosphere): """ - A chemical reaction that involves the removal of two or more hydrogen atoms from a molecule. + The specific gaseous environment maintained during a calcination step + (e.g. \"air\", \"N2\", \"10% O2/N2\"). """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000297', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000055', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -14305,12 +13029,13 @@ class Dehydrogenation(ReactionType): 'slot_uri': 'rdf:type'} }) -class CarbonCouplingReaction(ReactionType): +class HeatingProcedure(QualitativeAttribute): """ - A chemical reaction where a carbon-carbon bond is formed from two carbon-containing fragments. + A qualitative descriptor of the thermal programme or heating procedure + applied (e.g. \"isothermal\", \"ramp 5 °C/min to 500 °C, dwell 2 h\"). """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000223', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:HeatingProcedure', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -14400,12 +13125,13 @@ class CarbonCouplingReaction(ReactionType): 'slot_uri': 'rdf:type'} }) -class Hydrodeoxygenation(ReactionType): +class SamplePretreatment(QualitativeAttribute): """ - A catalytic process in which oxygen is removed from oxygenated organic compounds using hydrogen. + A qualitative descriptor of the pre-treatment applied to a sample + before a process or measurement (e.g. \"reduction at 300 °C\", \"outgassing\"). """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000226', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000122', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -14495,12 +13221,13 @@ class Hydrodeoxygenation(ReactionType): 'slot_uri': 'rdf:type'} }) -class OxygenEvolutionReaction(ReactionType): +class VesselType(QualitativeAttribute): """ - A chemical reaction of generating molecular oxygen in electrochemistry. + A qualitative descriptor of the type of reaction or synthesis vessel + used (e.g. \"autoclave\", \"round-bottom flask\", \"Schlenk tube\"). """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000236', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:VesselType', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -14590,12 +13317,13 @@ class OxygenEvolutionReaction(ReactionType): 'slot_uri': 'rdf:type'} }) -class Hydroxylation(ReactionType): +class OperationMode(QualitativeAttribute): """ - The addition of a hydroxyl group (-OH) to a molecule, typically by replacing a hydrogen atom. + A qualitative descriptor of the operation mode of an instrument or + process (e.g. \"transmission\", \"reflection\", \"AC\", \"DC\", \"full-scan\"). """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000258', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000108', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -14685,12 +13413,19 @@ class Hydroxylation(ReactionType): 'slot_uri': 'rdf:type'} }) -class FischerTropschSynthesis(ReactionType): +class QuantitativeAttribute(ClassifierMixin): """ - A catalytic chemical reaction in which a mixture of carbon monoxide (CO) and hydrogen (H2), is converted via a chain-growth mechanism into long-chain hydrocarbons (e.g., alkanes, alkenes or alcohols)�typically using iron or cobalt catalysts under moderate to high pressures and temperatures. + A quantifiable piece of information that is attributed to an Entity, Activity or AgenticEntity. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000280', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', + 'in_subset': ['domain_agnostic_core'], + 'mixins': ['ClassifierMixin'], + 'slot_usage': {'value': {'description': 'The slot to provide the literal ' + 'value of the QuantitativeAttribute.', + 'name': 'value', + 'range': 'float', + 'required': True}}}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -14769,9 +13504,25 @@ class FischerTropschSynthesis(ReactionType): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], + value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], 'in_subset': ['domain_agnostic_core'], 'slot_uri': 'prov:value'} }) + has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', + 'description': 'Binds the type of a quantifiable attribute to a ' + 'QUDT Quantity Kind instance from the QUDT ' + 'Quantity Kind vocabulary.', + 'obligation_level': 'RECOMMENDED', + 'range': 'QUDTQuantityKindEnum'}], + 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], + 'slot_uri': 'qudt:hasQuantityKind'} }) + unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', + 'description': 'Restricts the allowable defined terms to the ' + 'QUDT Unit vocabulary.', + 'obligation_level': 'RECOMMENDED', + 'range': 'QUDTUnitEnum'}], + 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], + 'recommended': True, + 'slot_uri': 'qudt:unit'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -14780,12 +13531,13 @@ class FischerTropschSynthesis(ReactionType): 'slot_uri': 'rdf:type'} }) -class CarbonDioxideHydrogenation(Hydrogenation): +class Duration(QuantitativeAttribute): """ - The reaction of carbon dioxide (CO2) with molecular hydrogen (H2) to produce value-added hydrocarbons or alcohols. + A quantitative measure of elapsed time (duration of a process step). """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000259', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', + 'close_mappings': ['PATO:0001309'], + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -14864,9 +13616,25 @@ class CarbonDioxideHydrogenation(Hydrogenation): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], + value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], 'in_subset': ['domain_agnostic_core'], 'slot_uri': 'prov:value'} }) + has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', + 'description': 'Binds the type of a quantifiable attribute to a ' + 'QUDT Quantity Kind instance from the QUDT ' + 'Quantity Kind vocabulary.', + 'obligation_level': 'RECOMMENDED', + 'range': 'QUDTQuantityKindEnum'}], + 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], + 'slot_uri': 'qudt:hasQuantityKind'} }) + unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', + 'description': 'Restricts the allowable defined terms to the ' + 'QUDT Unit vocabulary.', + 'obligation_level': 'RECOMMENDED', + 'range': 'QUDTUnitEnum'}], + 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], + 'recommended': True, + 'slot_uri': 'qudt:unit'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -14875,12 +13643,13 @@ class CarbonDioxideHydrogenation(Hydrogenation): 'slot_uri': 'rdf:type'} }) -class SelectiveOxidation(Oxidation): +class VolumeFlowRate(QuantitativeAttribute): """ - The targeted oxidation of a specific bond or functional group in a molecule leaving other sites unaffected, often directed by a catalyst. + Volume of fluid passing a given point per unit time. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000261', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', + 'close_mappings': ['PATO:0001574'], + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -14959,9 +13728,25 @@ class SelectiveOxidation(Oxidation): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], + value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], 'in_subset': ['domain_agnostic_core'], 'slot_uri': 'prov:value'} }) + has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', + 'description': 'Binds the type of a quantifiable attribute to a ' + 'QUDT Quantity Kind instance from the QUDT ' + 'Quantity Kind vocabulary.', + 'obligation_level': 'RECOMMENDED', + 'range': 'QUDTQuantityKindEnum'}], + 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], + 'slot_uri': 'qudt:hasQuantityKind'} }) + unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', + 'description': 'Restricts the allowable defined terms to the ' + 'QUDT Unit vocabulary.', + 'obligation_level': 'RECOMMENDED', + 'range': 'QUDTUnitEnum'}], + 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], + 'recommended': True, + 'slot_uri': 'qudt:unit'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -14970,12 +13755,13 @@ class SelectiveOxidation(Oxidation): 'slot_uri': 'rdf:type'} }) -class CarbonMonoxideOxidation(Oxidation): +class HeatingRate(QuantitativeAttribute): """ - The reaction in which carbon monoxide (CO) is converted to carbon dioxide (CO2) through interaction with an oxidizing agent, typically oxygen (O2). + Rate of temperature change per unit time during a thermal ramp. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000289', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', + 'exact_mappings': ['VOC4CAT:0008116'], + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -15054,9 +13840,25 @@ class CarbonMonoxideOxidation(Oxidation): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], + value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], 'in_subset': ['domain_agnostic_core'], 'slot_uri': 'prov:value'} }) + has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', + 'description': 'Binds the type of a quantifiable attribute to a ' + 'QUDT Quantity Kind instance from the QUDT ' + 'Quantity Kind vocabulary.', + 'obligation_level': 'RECOMMENDED', + 'range': 'QUDTQuantityKindEnum'}], + 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], + 'slot_uri': 'qudt:hasQuantityKind'} }) + unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', + 'description': 'Restricts the allowable defined terms to the ' + 'QUDT Unit vocabulary.', + 'obligation_level': 'RECOMMENDED', + 'range': 'QUDTUnitEnum'}], + 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], + 'recommended': True, + 'slot_uri': 'qudt:unit'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -15065,19 +13867,13 @@ class CarbonMonoxideOxidation(Oxidation): 'slot_uri': 'rdf:type'} }) -class QuantitativeAttribute(ClassifierMixin): +class AngularVelocity(QuantitativeAttribute): """ - A quantifiable piece of information that is attributed to an Entity, Activity or AgenticEntity. + Rate of rotational motion, typically expressed in revolutions per minute. """ linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', - 'in_subset': ['domain_agnostic_core'], - 'mixins': ['ClassifierMixin'], - 'slot_usage': {'value': {'description': 'The slot to provide the literal ' - 'value of the QuantitativeAttribute.', - 'name': 'value', - 'range': 'float', - 'required': True}}}) + 'close_mappings': ['PATO:0002154'], + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -15183,12 +13979,12 @@ class QuantitativeAttribute(ClassifierMixin): 'slot_uri': 'rdf:type'} }) -class Duration(QuantitativeAttribute): +class EnergyQuantity(QuantitativeAttribute): """ - A quantitative measure of elapsed time (duration of a process step). + A quantitative measure of energy (eV, keV, kJ/mol, etc.). """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0008120', - 'close_mappings': ['PATO:0001309'], + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', + 'close_mappings': ['PATO:0001021'], 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', @@ -15295,12 +14091,12 @@ class Duration(QuantitativeAttribute): 'slot_uri': 'rdf:type'} }) -class VolumeFlowRate(QuantitativeAttribute): +class ElectricPotential(QuantitativeAttribute): """ - Volume of fluid passing a given point per unit time. + A quantitative measure of electric potential difference or voltage. """ linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', - 'close_mappings': ['PATO:0001574'], + 'close_mappings': ['PATO:0001464'], 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', @@ -15407,11 +14203,11 @@ class VolumeFlowRate(QuantitativeAttribute): 'slot_uri': 'rdf:type'} }) -class HeatingRate(QuantitativeAttribute): +class ElectricCurrent(QuantitativeAttribute): """ - Rate of temperature change per unit time during a thermal ramp. + A quantitative measure of electric current (e.g. faradaic current in an electrochemical cell). """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0008116', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', @@ -15518,12 +14314,11 @@ class HeatingRate(QuantitativeAttribute): 'slot_uri': 'rdf:type'} }) -class AngularVelocity(QuantitativeAttribute): +class Area(QuantitativeAttribute): """ - Rate of rotational motion, typically expressed in revolutions per minute. + A quantitative measure of surface area (e.g. active electrode area). """ linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', - 'close_mappings': ['PATO:0002154'], 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', @@ -15630,12 +14425,12 @@ class AngularVelocity(QuantitativeAttribute): 'slot_uri': 'rdf:type'} }) -class EnergyQuantity(QuantitativeAttribute): +class PowerQuantity(QuantitativeAttribute): """ - A quantitative measure of energy (eV, keV, kJ/mol, etc.). + Rate of energy transfer per unit time (e.g. laser power in mW). """ linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', - 'close_mappings': ['PATO:0001021'], + 'close_mappings': ['PATO:0001230'], 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', @@ -15742,12 +14537,12 @@ class EnergyQuantity(QuantitativeAttribute): 'slot_uri': 'rdf:type'} }) -class ElectricPotential(QuantitativeAttribute): +class LengthQuantity(QuantitativeAttribute): """ - A quantitative measure of electric potential difference or voltage. + A quantitative measure of length or spatial dimension (nm, mm, cm). """ linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', - 'close_mappings': ['PATO:0001464'], + 'close_mappings': ['PATO:0001708'], 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', @@ -15854,12 +14649,11 @@ class ElectricPotential(QuantitativeAttribute): 'slot_uri': 'rdf:type'} }) -class PowerQuantity(QuantitativeAttribute): +class PlaneAngle(QuantitativeAttribute): """ - Rate of energy transfer per unit time (e.g. laser power in mW). + A quantitative measure of a plane angle (e.g. scattering angle in degrees). """ linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', - 'close_mappings': ['PATO:0001230'], 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', @@ -15966,12 +14760,11 @@ class PowerQuantity(QuantitativeAttribute): 'slot_uri': 'rdf:type'} }) -class LengthQuantity(QuantitativeAttribute): +class Wavenumber(QuantitativeAttribute): """ - A quantitative measure of length or spatial dimension (nm, mm, cm). + Reciprocal of wavelength; number of wave cycles per unit length (cm^-1). """ linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', - 'close_mappings': ['PATO:0001708'], 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', @@ -16078,9 +14871,9 @@ class LengthQuantity(QuantitativeAttribute): 'slot_uri': 'rdf:type'} }) -class PlaneAngle(QuantitativeAttribute): +class MassToChargeRatio(QuantitativeAttribute): """ - A quantitative measure of a plane angle (e.g. scattering angle in degrees). + Ratio of mass to electric charge (m/z) in mass spectrometry. """ linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) @@ -16189,12 +14982,13 @@ class PlaneAngle(QuantitativeAttribute): 'slot_uri': 'rdf:type'} }) -class Wavenumber(QuantitativeAttribute): +class Yield(QuantitativeAttribute): """ - Reciprocal of wavelength; number of wave cycles per unit length (cm^-1). + A dimensionless physical quantity describing the fraction of a product B that is formed from a reactant A taking into account the stoichiometry. If A fully reacts to B without side-reactions, the yield of product B is 1 (or 100 %). """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0002855', + 'exact_mappings': ['VOC4CAT:0005005'], + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -16300,12 +15094,12 @@ class Wavenumber(QuantitativeAttribute): 'slot_uri': 'rdf:type'} }) -class MassToChargeRatio(QuantitativeAttribute): +class MolarEquivalent(QuantitativeAttribute): """ - Ratio of mass to electric charge (m/z) in mass spectrometry. + A dimensionless ratio that quantifies the stoichiometric proportion of a chemical substance relative to a reference substance in a chemical reaction. """ linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/common/'}) + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -16411,29 +15205,13 @@ class MassToChargeRatio(QuantitativeAttribute): 'slot_uri': 'rdf:type'} }) -class ReactorPerformanceMeasures(QuantitativeAttribute): +class PercentageOfTotal(QuantitativeAttribute): """ - A measure to quantify how fast and selective a chemical converison occurs in a reactor. A chemical conversion may include multiples reactions. + A dimensionless ratio that quantifies the stoichiometric proportion of a chemical substance relative to a reference substance in a chemical reaction. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:005001', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/'}) - has_yield: Optional[list[Yield]] = Field(default=[], description="""A slot to provide the percentage of how much of the ChemicalProduct was produced by a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ReactorPerformanceMeasures', 'ChemicalReaction'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_conversion: Optional[list[Conversion]] = Field(default=[], description="""A dimensionless physical quantity describing the fraction of a reactant that reacts in a chemical conversion. If a reactant is consumed completely its conversion is 1 (or 100 %).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ReactorPerformanceMeasures'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_space_time_yield: Optional[list[SpaceTimeYield]] = Field(default=[], description="""A physical quantity that describes the amount of product produced per unit of time and unit of producing entity. The producing entity is for example the volume of a chemical reactor or in catalysis the mass or volume or moles of catalyst. Example unit: kg{product} / (hour * cubicmeter{catalyst})""", json_schema_extra = { "linkml_meta": {'domain_of': ['ReactorPerformanceMeasures'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_selectivity: Optional[list[Selectivity]] = Field(default=[], description="""A dimensionless physical quantity describing how effective a reactant is converted to the desired product in a chemical conversion. It is calculated as the ratio between the amount of the desired product and the amount of the desired product that could have been formed if all reactants were converted to the desired product. The selectivity is 1 (or 100 %) if no other than the desired product is formed.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ReactorPerformanceMeasures'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -16538,13 +15316,70 @@ class ReactorPerformanceMeasures(QuantitativeAttribute): 'slot_uri': 'rdf:type'} }) -class Conversion(QuantitativeAttribute): +class Relationship(ConfiguredBaseModel): """ - A dimensionless physical quantity describing the fraction of a reactant that reacts in a chemical conversion. If a reactant is consumed completely its conversion is 1 (or 100 %). + See [DCAT-AP specs:Relationship](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Relationship) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0005004', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcat:Relationship', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', + 'slot_usage': {'had_role': {'description': 'A function of an entity or agent ' + 'with respect to another entity or ' + 'resource.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'had_role', + 'range': 'Role', + 'required': True, + 'slot_uri': 'dcat:hadRole'}, + 'relation': {'description': 'A resource related to the source ' + 'resource.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'relation', + 'range': 'Resource', + 'required': True, + 'slot_uri': 'dcterms:relation'}}}) + + had_role: list[Role] = Field(default=..., description="""A function of an entity or agent with respect to another entity or resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Relationship'], 'slot_uri': 'dcat:hadRole'} }) + relation: list[Resource] = Field(default=..., description="""A resource related to the source resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Relationship'], 'slot_uri': 'dcterms:relation'} }) + + +class Software(AgenticEntity): + """ + An instrument composed of a series of instructions that can be interpreted by or directly executed by a computer. + """ + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:SoftwareAgent', + 'exact_mappings': ['schema:SoftwareApplication'], + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', + 'in_subset': ['domain_agnostic_core'], + 'slot_usage': {'has_part': {'description': 'The slot to specify parts of a ' + 'Software that are themselves ' + 'Software.', + 'inlined': True, + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'has_part', + 'range': 'Software'}, + 'other_identifier': {'description': 'A slot to provide a ' + 'secondary identifier for ' + 'a Software.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'other_identifier', + 'range': 'Identifier', + 'required': False}}}) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -16622,25 +15457,23 @@ class Conversion(QuantitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Software.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + 'slot_uri': 'adms:identifier'} }) + has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) - has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Binds the type of a quantifiable attribute to a ' - 'QUDT Quantity Kind instance from the QUDT ' - 'Quantity Kind vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTQuantityKindEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], - 'slot_uri': 'qudt:hasQuantityKind'} }) - unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Restricts the allowable defined terms to the ' - 'QUDT Unit vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTUnitEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], 'recommended': True, - 'slot_uri': 'qudt:unit'} }) + 'slot_uri': 'dcterms:relation'} }) + has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_part: Optional[list[Software]] = Field(default=[], description="""The slot to specify parts of a Software that are themselves Software.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'slot_uri': 'dcterms:hasPart'} }) + part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'inverse': 'has_part', + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:isPartOf'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -16649,12 +15482,11 @@ class Conversion(QuantitativeAttribute): 'slot_uri': 'rdf:type'} }) -class SpaceTimeYield(QuantitativeAttribute): +class SupportiveEntity(ConfiguredBaseModel): """ - A physical quantity that describes the amount of product produced per unit of time and unit of producing entity. The producing entity is for example the volume of a chemical reactor or in catalysis the mass or volume or moles of catalyst. Example unit: kg{product} / (hour * cubicmeter{catalyst}) + The supportive entities are supporting the main entities in the Application Profile. They are included in the Application Profile because they form the range of properties. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0005006', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -16733,39 +15565,14 @@ class SpaceTimeYield(QuantitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) - has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Binds the type of a quantifiable attribute to a ' - 'QUDT Quantity Kind instance from the QUDT ' - 'Quantity Kind vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTQuantityKindEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], - 'slot_uri': 'qudt:hasQuantityKind'} }) - unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Restricts the allowable defined terms to the ' - 'QUDT Unit vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTUnitEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], - 'recommended': True, - 'slot_uri': 'qudt:unit'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) -class Selectivity(QuantitativeAttribute): +class Attribution(SupportiveEntity): """ - A dimensionless physical quantity describing how effective a reactant is converted to the desired product in a chemical conversion. It is calculated as the ratio between the amount of the desired product and the amount of the desired product that could have been formed if all reactants were converted to the desired product. The selectivity is 1 (or 100 %) if no other than the desired product is formed. + See [DCAT-AP specs:Attribution](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Attribution) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000125', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Attribution', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -16844,96 +15651,15 @@ class Selectivity(QuantitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) - has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Binds the type of a quantifiable attribute to a ' - 'QUDT Quantity Kind instance from the QUDT ' - 'Quantity Kind vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTQuantityKindEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], - 'slot_uri': 'qudt:hasQuantityKind'} }) - unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Restricts the allowable defined terms to the ' - 'QUDT Unit vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTUnitEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], - 'recommended': True, - 'slot_uri': 'qudt:unit'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class Relationship(ConfiguredBaseModel): - """ - See [DCAT-AP specs:Relationship](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Relationship) - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcat:Relationship', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', - 'slot_usage': {'had_role': {'description': 'A function of an entity or agent ' - 'with respect to another entity or ' - 'resource.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'had_role', - 'range': 'Role', - 'required': True, - 'slot_uri': 'dcat:hadRole'}, - 'relation': {'description': 'A resource related to the source ' - 'resource.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'relation', - 'range': 'Resource', - 'required': True, - 'slot_uri': 'dcterms:relation'}}}) - had_role: list[Role] = Field(default=..., description="""A function of an entity or agent with respect to another entity or resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Relationship'], 'slot_uri': 'dcat:hadRole'} }) - relation: list[Resource] = Field(default=..., description="""A resource related to the source resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Relationship'], 'slot_uri': 'dcterms:relation'} }) - -class Software(AgenticEntity): +class ChecksumAlgorithm(SupportiveEntity): """ - An instrument composed of a series of instructions that can be interpreted by or directly executed by a computer. + See [DCAT-AP specs:ChecksumAlgorithm](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#ChecksumAlgorithm) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:SoftwareAgent', - 'exact_mappings': ['schema:SoftwareApplication'], - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', - 'in_subset': ['domain_agnostic_core'], - 'slot_usage': {'has_part': {'description': 'The slot to specify parts of a ' - 'Software that are themselves ' - 'Software.', - 'inlined': True, - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'has_part', - 'range': 'Software'}, - 'other_identifier': {'description': 'A slot to provide a ' - 'secondary identifier for ' - 'a Software.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'other_identifier', - 'range': 'Identifier', - 'required': False}}}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'spdx:ChecksumAlgorithm', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -17011,37 +15737,24 @@ class Software(AgenticEntity): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Software.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], - 'slot_uri': 'adms:identifier'} }) - has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[Software]] = Field(default=[], description="""The slot to specify parts of a Software that are themselves Software.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'inverse': 'has_part', - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:isPartOf'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) -class SupportiveEntity(ConfiguredBaseModel): +class Concept(SupportiveEntity): """ - The supportive entities are supporting the main entities in the Application Profile. They are included in the Application Profile because they form the range of properties. + See [DCAT-AP specs:Concept](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Concept) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'skos:Concept', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', + 'slot_usage': {'preferred_label': {'description': 'A preferred label of the ' + 'concept.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'preferred_label', + 'range': 'string', + 'required': True, + 'slot_uri': 'skos:prefLabel'}}}) + preferred_label: list[str] = Field(default=..., description="""A preferred label of the concept.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Concept'], 'slot_uri': 'skos:prefLabel'} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -17121,14 +15834,21 @@ class SupportiveEntity(ConfiguredBaseModel): 'slot_uri': 'dcterms:description'} }) -class Attribution(SupportiveEntity): +class ConceptScheme(SupportiveEntity): """ - See [DCAT-AP specs:Attribution](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Attribution) + See [DCAT-AP specs:ConceptScheme](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#ConceptScheme) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Attribution', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'skos:ConceptScheme', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', + 'slot_usage': {'title': {'description': 'A name of the concept scheme.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'title', + 'range': 'string', + 'required': True, + 'slot_uri': 'dcterms:title'}}}) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + title: list[str] = Field(default=..., description="""A name of the concept scheme.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -17207,13 +15927,24 @@ class Attribution(SupportiveEntity): 'slot_uri': 'dcterms:description'} }) -class ChecksumAlgorithm(SupportiveEntity): +class Document(SupportiveEntity): """ - See [DCAT-AP specs:ChecksumAlgorithm](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#ChecksumAlgorithm) + See [DCAT-AP specs:Document](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Document) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'spdx:ChecksumAlgorithm', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'foaf:Document', 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -17293,22 +16024,13 @@ class ChecksumAlgorithm(SupportiveEntity): 'slot_uri': 'dcterms:description'} }) -class Concept(SupportiveEntity): +class Frequency(SupportiveEntity): """ - See [DCAT-AP specs:Concept](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Concept) + See [DCAT-AP specs:Frequency](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Frequency) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'skos:Concept', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', - 'slot_usage': {'preferred_label': {'description': 'A preferred label of the ' - 'concept.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'preferred_label', - 'range': 'string', - 'required': True, - 'slot_uri': 'skos:prefLabel'}}}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcterms:Frequency', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) - preferred_label: list[str] = Field(default=..., description="""A preferred label of the concept.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Concept'], 'slot_uri': 'skos:prefLabel'} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -17388,21 +16110,14 @@ class Concept(SupportiveEntity): 'slot_uri': 'dcterms:description'} }) -class ConceptScheme(SupportiveEntity): +class Geometry(SupportiveEntity): """ - See [DCAT-AP specs:ConceptScheme](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#ConceptScheme) + See [DCAT-AP specs:Geometry](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Geometry) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'skos:ConceptScheme', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', - 'slot_usage': {'title': {'description': 'A name of the concept scheme.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'title', - 'range': 'string', - 'required': True, - 'slot_uri': 'dcterms:title'}}}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'locn:Geometry', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) - title: list[str] = Field(default=..., description="""A name of the concept scheme.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -17481,23 +16196,24 @@ class ConceptScheme(SupportiveEntity): 'slot_uri': 'dcterms:description'} }) -class Document(SupportiveEntity): +class Identifier(SupportiveEntity): """ - See [DCAT-AP specs:Document](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Document) + See [DCAT-AP specs:Identifier](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Identifier) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'foaf:Document', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'adms:Identifier', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', + 'slot_usage': {'notation': {'description': 'A string that is an identifier in ' + 'the context of the identifier ' + 'scheme referenced by its ' + 'datatype.', + 'inlined_as_list': False, + 'multivalued': False, + 'name': 'notation', + 'range': 'string', + 'required': True, + 'slot_uri': 'skos:notation'}}}) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) + notation: str = Field(default=..., description="""A string that is an identifier in the context of the identifier scheme referenced by its datatype.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Identifier'], 'slot_uri': 'skos:notation'} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -17577,13 +16293,24 @@ class Document(SupportiveEntity): 'slot_uri': 'dcterms:description'} }) -class Frequency(SupportiveEntity): +class LegalResource(SupportiveEntity): """ - See [DCAT-AP specs:Frequency](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Frequency) + See [DCAT-AP specs:LegalResource](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#LegalResource) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcterms:Frequency', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'eli:LegalResource', 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -17663,13 +16390,37 @@ class Frequency(SupportiveEntity): 'slot_uri': 'dcterms:description'} }) -class Geometry(SupportiveEntity): +class LicenseDocument(SupportiveEntity): """ - See [DCAT-AP specs:Geometry](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Geometry) + See [DCAT-AP specs:LicenseDocument](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#LicenseDocument) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'locn:Geometry', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcterms:LicenseDocument', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', + 'slot_usage': {'type': {'description': 'A type of licence, e.g. indicating ' + "'public domain' or 'royalties " + "required'.", + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'type', + 'range': 'Concept', + 'recommended': True, + 'required': False, + 'slot_uri': 'dcterms:type'}}}) + type: Optional[list[Concept]] = Field(default=[], description="""A type of licence, e.g. indicating 'public domain' or 'royalties required'.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], + 'recommended': True, + 'slot_uri': 'dcterms:type'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -17749,24 +16500,13 @@ class Geometry(SupportiveEntity): 'slot_uri': 'dcterms:description'} }) -class Identifier(SupportiveEntity): +class LinguisticSystem(SupportiveEntity): """ - See [DCAT-AP specs:Identifier](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Identifier) + See [DCAT-AP specs:LinguisticSystem](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#LinguisticSystem) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'adms:Identifier', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', - 'slot_usage': {'notation': {'description': 'A string that is an identifier in ' - 'the context of the identifier ' - 'scheme referenced by its ' - 'datatype.', - 'inlined_as_list': False, - 'multivalued': False, - 'name': 'notation', - 'range': 'string', - 'required': True, - 'slot_uri': 'skos:notation'}}}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcterms:LinguisticSystem', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) - notation: str = Field(default=..., description="""A string that is an identifier in the context of the identifier scheme referenced by its datatype.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Identifier'], 'slot_uri': 'skos:notation'} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -17846,23 +16586,13 @@ class Identifier(SupportiveEntity): 'slot_uri': 'dcterms:description'} }) -class LegalResource(SupportiveEntity): +class MediaType(SupportiveEntity): """ - See [DCAT-AP specs:LegalResource](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#LegalResource) + See [DCAT-AP specs:MediaType](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#MediaType) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'eli:LegalResource', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcterms:MediaType', 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -17942,36 +16672,13 @@ class LegalResource(SupportiveEntity): 'slot_uri': 'dcterms:description'} }) -class LicenseDocument(SupportiveEntity): +class MediaTypeOrExtent(SupportiveEntity): """ - See [DCAT-AP specs:LicenseDocument](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#LicenseDocument) + See [DCAT-AP specs:MediaTypeOrExtent](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#MediaTypeOrExtent) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcterms:LicenseDocument', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', - 'slot_usage': {'type': {'description': 'A type of licence, e.g. indicating ' - "'public domain' or 'royalties " - "required'.", - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'type', - 'range': 'Concept', - 'recommended': True, - 'required': False, - 'slot_uri': 'dcterms:type'}}}) - - type: Optional[list[Concept]] = Field(default=[], description="""A type of licence, e.g. indicating 'public domain' or 'royalties required'.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'recommended': True, - 'slot_uri': 'dcterms:type'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcterms:MediaTypeOrExtent', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) + title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -18051,13 +16758,50 @@ class LicenseDocument(SupportiveEntity): 'slot_uri': 'dcterms:description'} }) -class LinguisticSystem(SupportiveEntity): +class PeriodOfTime(SupportiveEntity): """ - See [DCAT-AP specs:LinguisticSystem](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#LinguisticSystem) + See [DCAT-AP specs:PeriodOfTime](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#PeriodOfTime) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcterms:LinguisticSystem', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcterms:PeriodOfTime', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', + 'slot_usage': {'beginning': {'description': 'The beginning of a period or ' + 'interval.', + 'inlined_as_list': True, + 'multivalued': False, + 'name': 'beginning', + 'range': 'TimeInstant', + 'required': False, + 'slot_uri': 'time:hasBeginning'}, + 'end': {'description': 'The end of a period or interval.', + 'inlined_as_list': True, + 'multivalued': False, + 'name': 'end', + 'range': 'TimeInstant', + 'required': False, + 'slot_uri': 'time:hasEnd'}, + 'end_date': {'description': 'The end of the period.', + 'inlined_as_list': True, + 'multivalued': False, + 'name': 'end_date', + 'range': 'date', + 'recommended': True, + 'required': False, + 'slot_uri': 'dcat:endDate'}, + 'start_date': {'description': 'The start of the period.', + 'inlined_as_list': False, + 'multivalued': False, + 'name': 'start_date', + 'range': 'date', + 'recommended': True, + 'required': False, + 'slot_uri': 'dcat:startDate'}}}) + beginning: Optional[TimeInstant] = Field(default=None, description="""The beginning of a period or interval.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PeriodOfTime'], 'slot_uri': 'time:hasBeginning'} }) + end: Optional[TimeInstant] = Field(default=None, description="""The end of a period or interval.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PeriodOfTime'], 'slot_uri': 'time:hasEnd'} }) + end_date: Optional[date] = Field(default=None, description="""The end of the period.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PeriodOfTime'], 'recommended': True, 'slot_uri': 'dcat:endDate'} }) + start_date: Optional[date] = Field(default=None, description="""The start of the period.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PeriodOfTime'], + 'recommended': True, + 'slot_uri': 'dcat:startDate'} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -18137,11 +16881,11 @@ class LinguisticSystem(SupportiveEntity): 'slot_uri': 'dcterms:description'} }) -class MediaType(SupportiveEntity): +class Policy(SupportiveEntity): """ - See [DCAT-AP specs:MediaType](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#MediaType) + See [DCAT-AP specs:Policy](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Policy) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcterms:MediaType', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'odrl:Policy', 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', @@ -18223,11 +16967,11 @@ class MediaType(SupportiveEntity): 'slot_uri': 'dcterms:description'} }) -class MediaTypeOrExtent(SupportiveEntity): +class ProvenanceStatement(SupportiveEntity): """ - See [DCAT-AP specs:MediaTypeOrExtent](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#MediaTypeOrExtent) + See [DCAT-AP specs:ProvenanceStatement](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#ProvenanceStatement) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcterms:MediaTypeOrExtent', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcterms:ProvenanceStatement', 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', @@ -18309,50 +17053,24 @@ class MediaTypeOrExtent(SupportiveEntity): 'slot_uri': 'dcterms:description'} }) -class PeriodOfTime(SupportiveEntity): +class Resource(SupportiveEntity): """ - See [DCAT-AP specs:PeriodOfTime](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#PeriodOfTime) + See [DCAT-AP specs:Resource](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Resource) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcterms:PeriodOfTime', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', - 'slot_usage': {'beginning': {'description': 'The beginning of a period or ' - 'interval.', - 'inlined_as_list': True, - 'multivalued': False, - 'name': 'beginning', - 'range': 'TimeInstant', - 'required': False, - 'slot_uri': 'time:hasBeginning'}, - 'end': {'description': 'The end of a period or interval.', - 'inlined_as_list': True, - 'multivalued': False, - 'name': 'end', - 'range': 'TimeInstant', - 'required': False, - 'slot_uri': 'time:hasEnd'}, - 'end_date': {'description': 'The end of the period.', - 'inlined_as_list': True, - 'multivalued': False, - 'name': 'end_date', - 'range': 'date', - 'recommended': True, - 'required': False, - 'slot_uri': 'dcat:endDate'}, - 'start_date': {'description': 'The start of the period.', - 'inlined_as_list': False, - 'multivalued': False, - 'name': 'start_date', - 'range': 'date', - 'recommended': True, - 'required': False, - 'slot_uri': 'dcat:startDate'}}}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'rdfs:Resource', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) - beginning: Optional[TimeInstant] = Field(default=None, description="""The beginning of a period or interval.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PeriodOfTime'], 'slot_uri': 'time:hasBeginning'} }) - end: Optional[TimeInstant] = Field(default=None, description="""The end of a period or interval.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PeriodOfTime'], 'slot_uri': 'time:hasEnd'} }) - end_date: Optional[date] = Field(default=None, description="""The end of the period.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PeriodOfTime'], 'recommended': True, 'slot_uri': 'dcat:endDate'} }) - start_date: Optional[date] = Field(default=None, description="""The start of the period.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PeriodOfTime'], - 'recommended': True, - 'slot_uri': 'dcat:startDate'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -18432,11 +17150,11 @@ class PeriodOfTime(SupportiveEntity): 'slot_uri': 'dcterms:description'} }) -class Policy(SupportiveEntity): +class RightsStatement(SupportiveEntity): """ - See [DCAT-AP specs:Policy](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Policy) + See [DCAT-AP specs:RightsStatement](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#RightsStatement) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'odrl:Policy', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcterms:RightsStatement', 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', @@ -18518,11 +17236,11 @@ class Policy(SupportiveEntity): 'slot_uri': 'dcterms:description'} }) -class ProvenanceStatement(SupportiveEntity): +class Role(SupportiveEntity): """ - See [DCAT-AP specs:ProvenanceStatement](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#ProvenanceStatement) + See [DCAT-AP specs:Role](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Role) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcterms:ProvenanceStatement', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcat:Role', 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', @@ -18604,23 +17322,13 @@ class ProvenanceStatement(SupportiveEntity): 'slot_uri': 'dcterms:description'} }) -class Resource(SupportiveEntity): +class Standard(SupportiveEntity): """ - See [DCAT-AP specs:Resource](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Resource) + See [DCAT-AP specs:Standard](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Standard) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'rdfs:Resource', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcterms:Standard', 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -18700,12 +17408,14 @@ class Resource(SupportiveEntity): 'slot_uri': 'dcterms:description'} }) -class RightsStatement(SupportiveEntity): +class Surrounding(ClassifierMixin): """ - See [DCAT-AP specs:RightsStatement](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#RightsStatement) + The surrounding in which the dataset creating activity took place (e.g. a lab). """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcterms:RightsStatement', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Location', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', + 'in_subset': ['domain_agnostic_core'], + 'mixins': ['ClassifierMixin']}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -18784,13 +17494,19 @@ class RightsStatement(SupportiveEntity): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) + type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], + 'slot_uri': 'dcterms:type'} }) + rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'rdf:type'} }) -class Role(SupportiveEntity): +class TimeInstant(SupportiveEntity): """ - See [DCAT-AP specs:Role](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Role) + See [DCAT-AP specs:TimeInstant](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#TimeInstant) """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcat:Role', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'time:Instant', 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', @@ -18872,14 +17588,47 @@ class Role(SupportiveEntity): 'slot_uri': 'dcterms:description'} }) -class Standard(SupportiveEntity): +class ChemicalEntity(Entity): """ - See [DCAT-AP specs:Standard](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#Standard) + Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'dcterms:Standard', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'aliases': ['molecular entity'], + 'class_uri': 'CHEBI:23367', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/', + 'slot_usage': {'has_part': {'description': 'The slot to provide the parts of ' + 'a ChemicalEntity that are ' + 'themself chemical entities.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'has_part', + 'range': 'ChemicalEntity', + 'slot_uri': 'BFO:0000051'}}}) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + inchi: Optional[list[InChi]] = Field(default=[], description="""The slot to provide the InChi descriptor of a ChemicalEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalEntity'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + inchikey: Optional[list[InChIKey]] = Field(default=[], description="""The slot to provide the InChiKey of a ChemicalEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalEntity'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + smiles: Optional[list[SMILES]] = Field(default=[], description="""The slot to provide the canonical SMILES descriptor of a ChemicalEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalEntity'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + molecular_formula: Optional[list[MolecularFormula]] = Field(default=[], description="""The slot to provide the IUPAC formula of a ChemicalEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalEntity'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + iupac_name: Optional[list[IUPACName]] = Field(default=[], description="""The slot to provide the IUPAC name of a ChemicalEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalEntity'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_molar_mass: Optional[list[MolarMass]] = Field(default=[], description="""The slot to provide the MolarMass of a ChemicalEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalEntity'], + 'is_a': 'has_mass', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + title: Optional[str] = Field(default=None, description="""The slot to provide a title for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -18918,7 +17667,7 @@ class Standard(SupportiveEntity): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""The slot to provide a description for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -18956,18 +17705,55 @@ class Standard(SupportiveEntity): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + 'slot_uri': 'adms:identifier'} }) + has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_part: Optional[list[ChemicalEntity]] = Field(default=[], description="""The slot to provide the parts of a ChemicalEntity that are themself chemical entities.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'slot_uri': 'BFO:0000051'} }) + part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'inverse': 'has_part', + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:isPartOf'} }) + type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], + 'slot_uri': 'dcterms:type'} }) + rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'rdf:type'} }) -class Surrounding(ClassifierMixin): +class Atom(Entity): """ - The surrounding in which the dataset creating activity took place (e.g. a lab). + An Entity constituting the smallest component of a chemical element having the chemical properties of the element. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Location', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/', - 'in_subset': ['domain_agnostic_core'], - 'mixins': ['ClassifierMixin']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHEBI:33250', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/', + 'slot_usage': {'rdf_type': {'description': 'The slot to provide the Atom as a ' + 'ChEBI ID from the atom ' + '(CHEBI:33250) branch.', + 'name': 'rdf_type', + 'required': True}}}) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + title: Optional[str] = Field(default=None, description="""The slot to provide a title for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -19006,7 +17792,7 @@ class Surrounding(ClassifierMixin): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""The slot to provide a description for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -19044,20 +17830,54 @@ class Surrounding(ClassifierMixin): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + 'slot_uri': 'adms:identifier'} }) + has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_part: Optional[list[Entity]] = Field(default=[], description="""A slot to provide a part of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'slot_uri': 'dcterms:hasPart'} }) + part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'inverse': 'has_part', + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:isPartOf'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], + rdf_type: DefinedTerm = Field(default=..., description="""The slot to provide the Atom as a ChEBI ID from the atom (CHEBI:33250) branch.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], 'in_subset': ['domain_agnostic_core'], 'recommended': True, 'slot_uri': 'rdf:type'} }) -class TimeInstant(SupportiveEntity): +class Concentration(QuantitativeAttribute): """ - See [DCAT-AP specs:TimeInstant](https://semiceu.github.io/DCAT-AP/releases/3.0.0/#TimeInstant) + A QuantitativeAttribute of a ChemicalSubstance that represents the amount of a constituent divided by the volume of the mixture. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'time:Instant', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0002820', + 'close_mappings': ['PATO:0000033'], + 'exact_mappings': ['EDAM:2140', + 'NCIT:C41185', + 'VOC4CAT:0007244', + 'AFR:0002036'], + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/', + 'narrow_mappings': ['CHMO:0002822']}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -19136,49 +17956,43 @@ class TimeInstant(SupportiveEntity): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) + value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], + 'in_subset': ['domain_agnostic_core'], + 'slot_uri': 'prov:value'} }) + has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', + 'description': 'Binds the type of a quantifiable attribute to a ' + 'QUDT Quantity Kind instance from the QUDT ' + 'Quantity Kind vocabulary.', + 'obligation_level': 'RECOMMENDED', + 'range': 'QUDTQuantityKindEnum'}], + 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], + 'slot_uri': 'qudt:hasQuantityKind'} }) + unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', + 'description': 'Restricts the allowable defined terms to the ' + 'QUDT Unit vocabulary.', + 'obligation_level': 'RECOMMENDED', + 'range': 'QUDTUnitEnum'}], + 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], + 'recommended': True, + 'slot_uri': 'qudt:unit'} }) + type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], + 'slot_uri': 'dcterms:type'} }) + rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'rdf:type'} }) -class ChemicalEntity(Entity): +class AmountOfSubstance(QuantitativeAttribute): """ - Any constitutionally or isotopically distinct atom, molecule, ion, ion pair, radical, radical ion, complex, conformer etc., identifiable as a separately distinguishable entity. + The total amount of substance used in a ChemicalReaction. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'aliases': ['molecular entity'], - 'class_uri': 'CHEBI:23367', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/', - 'slot_usage': {'has_part': {'description': 'The slot to provide the parts of ' - 'a ChemicalEntity that are ' - 'themself chemical entities.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'has_part', - 'range': 'ChemicalEntity', - 'slot_uri': 'BFO:0000051'}}}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'aliases': ['SubstanceAmount'], + 'class_uri': 'qudt:Quantity', + 'close_mappings': ['PATO:0000070'], + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/'}) - inchi: Optional[list[InChi]] = Field(default=[], description="""The slot to provide the InChi descriptor of a ChemicalEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalEntity'], - 'is_a': 'has_qualitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - inchikey: Optional[list[InChIKey]] = Field(default=[], description="""The slot to provide the InChiKey of a ChemicalEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalEntity'], - 'is_a': 'has_qualitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - smiles: Optional[list[SMILES]] = Field(default=[], description="""The slot to provide the canonical SMILES descriptor of a ChemicalEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalEntity'], - 'is_a': 'has_qualitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - molecular_formula: Optional[list[MolecularFormula]] = Field(default=[], description="""The slot to provide the IUPAC formula of a ChemicalEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalEntity'], - 'is_a': 'has_qualitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - iupac_name: Optional[list[IUPACName]] = Field(default=[], description="""The slot to provide the IUPAC name of a ChemicalEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalEntity'], - 'is_a': 'has_qualitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_molar_mass: Optional[list[MolarMass]] = Field(default=[], description="""The slot to provide the MolarMass of a ChemicalEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalEntity'], - 'is_a': 'has_mass', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - title: Optional[str] = Field(default=None, description="""The slot to provide a title for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -19217,7 +18031,7 @@ class ChemicalEntity(Entity): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""The slot to provide a description for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -19255,33 +18069,25 @@ class ChemicalEntity(Entity): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], - 'slot_uri': 'adms:identifier'} }) - has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], 'in_subset': ['domain_agnostic_core'], + 'slot_uri': 'prov:value'} }) + has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', + 'description': 'Binds the type of a quantifiable attribute to a ' + 'QUDT Quantity Kind instance from the QUDT ' + 'Quantity Kind vocabulary.', + 'obligation_level': 'RECOMMENDED', + 'range': 'QUDTQuantityKindEnum'}], + 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], + 'slot_uri': 'qudt:hasQuantityKind'} }) + unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', + 'description': 'Restricts the allowable defined terms to the ' + 'QUDT Unit vocabulary.', + 'obligation_level': 'RECOMMENDED', + 'range': 'QUDTUnitEnum'}], + 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[ChemicalEntity]] = Field(default=[], description="""The slot to provide the parts of a ChemicalEntity that are themself chemical entities.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'slot_uri': 'BFO:0000051'} }) - part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'inverse': 'has_part', - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:isPartOf'} }) + 'slot_uri': 'qudt:unit'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -19290,19 +18096,13 @@ class ChemicalEntity(Entity): 'slot_uri': 'rdf:type'} }) -class Atom(Entity): - """ - An Entity constituting the smallest component of a chemical element having the chemical properties of the element. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHEBI:33250', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/', - 'slot_usage': {'rdf_type': {'description': 'The slot to provide the Atom as a ' - 'ChEBI ID from the atom ' - '(CHEBI:33250) branch.', - 'name': 'rdf_type', - 'required': True}}}) +class PHValue(QuantitativeAttribute): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'SIO:001089', + 'close_mappings': ['PATO:0001842'], + 'exact_mappings': ['NCIT:C45997', 'AFR:0001142'], + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/'}) - title: Optional[str] = Field(default=None, description="""The slot to provide a title for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -19341,7 +18141,7 @@ class Atom(Entity): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""The slot to provide a description for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -19379,53 +18179,36 @@ class Atom(Entity): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], - 'slot_uri': 'adms:identifier'} }) - has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], 'in_subset': ['domain_agnostic_core'], + 'slot_uri': 'prov:value'} }) + has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', + 'description': 'Binds the type of a quantifiable attribute to a ' + 'QUDT Quantity Kind instance from the QUDT ' + 'Quantity Kind vocabulary.', + 'obligation_level': 'RECOMMENDED', + 'range': 'QUDTQuantityKindEnum'}], + 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], + 'slot_uri': 'qudt:hasQuantityKind'} }) + unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', + 'description': 'Restricts the allowable defined terms to the ' + 'QUDT Unit vocabulary.', + 'obligation_level': 'RECOMMENDED', + 'range': 'QUDTUnitEnum'}], + 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[Entity]] = Field(default=[], description="""A slot to provide a part of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'inverse': 'has_part', - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:isPartOf'} }) + 'slot_uri': 'qudt:unit'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) - rdf_type: DefinedTerm = Field(default=..., description="""The slot to provide the Atom as a ChEBI ID from the atom (CHEBI:33250) branch.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], + rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], 'in_subset': ['domain_agnostic_core'], 'recommended': True, 'slot_uri': 'rdf:type'} }) -class Concentration(QuantitativeAttribute): - """ - A QuantitativeAttribute of a ChemicalSubstance that represents the amount of a constituent divided by the volume of the mixture. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0002820', - 'close_mappings': ['PATO:0000033'], - 'exact_mappings': ['EDAM:2140', - 'NCIT:C41185', - 'VOC4CAT:0007244', - 'AFR:0002036'], - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/', - 'narrow_mappings': ['CHMO:0002822']}) +class InChIKey(QualitativeAttribute): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHEMINF:000059', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -19504,25 +18287,9 @@ class Concentration(QuantitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], + value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], 'in_subset': ['domain_agnostic_core'], 'slot_uri': 'prov:value'} }) - has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Binds the type of a quantifiable attribute to a ' - 'QUDT Quantity Kind instance from the QUDT ' - 'Quantity Kind vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTQuantityKindEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], - 'slot_uri': 'qudt:hasQuantityKind'} }) - unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Restricts the allowable defined terms to the ' - 'QUDT Unit vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTUnitEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], - 'recommended': True, - 'slot_uri': 'qudt:unit'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -19531,13 +18298,11 @@ class Concentration(QuantitativeAttribute): 'slot_uri': 'rdf:type'} }) -class AmountOfSubstance(QuantitativeAttribute): +class InChi(QualitativeAttribute): """ - The total amount of substance used in a ChemicalReaction. + A structure descriptor which conforms to the InChI format specification. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'aliases': ['SubstanceAmount'], - 'class_uri': 'qudt:Quantity', - 'close_mappings': ['PATO:0000070'], + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHEMINF:000113', 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', @@ -19617,25 +18382,9 @@ class AmountOfSubstance(QuantitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], + value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], 'in_subset': ['domain_agnostic_core'], 'slot_uri': 'prov:value'} }) - has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Binds the type of a quantifiable attribute to a ' - 'QUDT Quantity Kind instance from the QUDT ' - 'Quantity Kind vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTQuantityKindEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], - 'slot_uri': 'qudt:hasQuantityKind'} }) - unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Restricts the allowable defined terms to the ' - 'QUDT Unit vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTUnitEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], - 'recommended': True, - 'slot_uri': 'qudt:unit'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -19644,10 +18393,11 @@ class AmountOfSubstance(QuantitativeAttribute): 'slot_uri': 'rdf:type'} }) -class PHValue(QuantitativeAttribute): - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'SIO:001089', - 'close_mappings': ['PATO:0001842'], - 'exact_mappings': ['NCIT:C45997', 'AFR:0001142'], +class MolecularFormula(QualitativeAttribute): + """ + A structure descriptor which identifies each constituent element by its chemical symbol and indicates the number of atoms of each element found in each discrete molecule of that compound. + """ + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHEMINF:000042', 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', @@ -19727,25 +18477,9 @@ class PHValue(QuantitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], + value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], 'in_subset': ['domain_agnostic_core'], 'slot_uri': 'prov:value'} }) - has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Binds the type of a quantifiable attribute to a ' - 'QUDT Quantity Kind instance from the QUDT ' - 'Quantity Kind vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTQuantityKindEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], - 'slot_uri': 'qudt:hasQuantityKind'} }) - unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Restricts the allowable defined terms to the ' - 'QUDT Unit vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTUnitEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], - 'recommended': True, - 'slot_uri': 'qudt:unit'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -19754,8 +18488,11 @@ class PHValue(QuantitativeAttribute): 'slot_uri': 'rdf:type'} }) -class InChIKey(QualitativeAttribute): - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHEMINF:000059', +class IUPACName(QualitativeAttribute): + """ + A systematic name which is formulated according to the rules and recommendations for chemical nomenclature set out by the International Union of Pure and Applied Chemistry (IUPAC). + """ + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHEMINF:000107', 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', @@ -19846,11 +18583,11 @@ class InChIKey(QualitativeAttribute): 'slot_uri': 'rdf:type'} }) -class InChi(QualitativeAttribute): +class SMILES(QualitativeAttribute): """ - A structure descriptor which conforms to the InChI format specification. + A structure descriptor that denotes a molecular structure as a graph and conforms to the SMILES format specification. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHEMINF:000113', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHEMINF:000018', 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', @@ -19941,13 +18678,130 @@ class InChi(QualitativeAttribute): 'slot_uri': 'rdf:type'} }) -class MolecularFormula(QualitativeAttribute): +class MaterialisticMixin(ConfiguredBaseModel): """ - A structure descriptor which identifies each constituent element by its chemical symbol and indicates the number of atoms of each element found in each discrete molecule of that compound. + A LinkML mixin used to pass down properties common to all material entities. It is needed for example to have MaterialSample have the same properties as MaterialEntity, although it is defined as a subclass of EvaluatedEntity. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHEMINF:000042', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'abstract': True, + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/materials/', + 'mixin': True}) + + alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'skos:altLabel', + 'todos': ['Should probably rather declared on Entity or in some common ' + 'metadata mixin instead.']} }) + has_physical_state: Optional[PhysicalStateEnum] = Field(default=None, description="""The slot to specify the physical state of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'SIO:000008', + 'todos': ['Find out how to make this a subproperty of ' + 'has_qualitative_attribute, as it currently throws the error ' + "'physical_state enumerations cannot be inlined' due to the fact " + 'that we are using an enum here.']} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_mass: Optional[list[Mass]] = Field(default=[], description="""The slot to provide the Mass of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_density: Optional[list[Density]] = Field(default=[], description="""The slot to provide the Density of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + + +class Reactor(MaterialisticMixin, Device): + """ + A reactor is a container for controlling a biological or chemical reaction or process. + """ + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'AFE:0000153', + 'exact_mappings': ['VOC4CAT:0007017'], + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/', + 'mixins': ['MaterialisticMixin']}) + alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'skos:altLabel', + 'todos': ['Should probably rather declared on Entity or in some common ' + 'metadata mixin instead.']} }) + has_physical_state: Optional[PhysicalStateEnum] = Field(default=None, description="""The slot to specify the physical state of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'SIO:000008', + 'todos': ['Find out how to make this a subproperty of ' + 'has_qualitative_attribute, as it currently throws the error ' + "'physical_state enumerations cannot be inlined' due to the fact " + 'that we are using an enum here.']} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_mass: Optional[list[Mass]] = Field(default=[], description="""The slot to provide the Mass of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_density: Optional[list[Density]] = Field(default=[], description="""The slot to provide the Density of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -20025,24 +18879,108 @@ class MolecularFormula(QualitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Device.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + 'slot_uri': 'adms:identifier'} }) + has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_part: Optional[list[Device]] = Field(default=[], description="""The slot to specify parts of a Device that are themselves Devices.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'slot_uri': 'dcterms:hasPart'} }) + part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'inverse': 'has_part', + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:isPartOf'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], 'in_subset': ['domain_agnostic_core'], 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class IUPACName(QualitativeAttribute): - """ - A systematic name which is formulated according to the rules and recommendations for chemical nomenclature set out by the International Union of Pure and Applied Chemistry (IUPAC). - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHEMINF:000107', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/'}) - + 'slot_uri': 'rdf:type'} }) + + +class ChemicalReactor(Reactor): + """ + Abstract Reactor (chemdcat-ap) subclass representing a catalytic reactor + vessel. + + Reactor is more specific than the general Device (AgenticEntity): it restricts + the used_reactor relation (is_a: carried_out_by) on Reaction to dedicated + reactor equipment. This semantic distinction separates analytical + instruments (Device) from reaction vessels (Reactor). ChemicalReactor + further specializes chemdcat-ap's generic Reactor for catalysis use cases. + + Concrete subclasses (FixedBedReactor, CSTR, PlugFlowReactor, …) specify + reactor geometry and operating mode. + Linked from Reaction via used_reactor (restricted to range: ChemicalReactor). + """ + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'abstract': True, + 'class_uri': 'VOC4CAT:0007018', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + + alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'skos:altLabel', + 'todos': ['Should probably rather declared on Entity or in some common ' + 'metadata mixin instead.']} }) + has_physical_state: Optional[PhysicalStateEnum] = Field(default=None, description="""The slot to specify the physical state of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'SIO:000008', + 'todos': ['Find out how to make this a subproperty of ' + 'has_qualitative_attribute, as it currently throws the error ' + "'physical_state enumerations cannot be inlined' due to the fact " + 'that we are using an enum here.']} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_mass: Optional[list[Mass]] = Field(default=[], description="""The slot to provide the Mass of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_density: Optional[list[Density]] = Field(default=[], description="""The slot to provide the Density of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -20120,9 +19058,23 @@ class IUPACName(QualitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Device.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + 'slot_uri': 'adms:identifier'} }) + has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_part: Optional[list[Device]] = Field(default=[], description="""The slot to specify parts of a Device that are themselves Devices.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'slot_uri': 'dcterms:hasPart'} }) + part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'inverse': 'has_part', + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:isPartOf'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -20131,13 +19083,98 @@ class IUPACName(QualitativeAttribute): 'slot_uri': 'rdf:type'} }) -class SMILES(QualitativeAttribute): +class ElectrochemicalReactor(ChemicalReactor): """ - A structure descriptor that denotes a molecular structure as a graph and conforms to the SMILES format specification. + Electrochemical reactor used in electrocatalytic experiments, including + H-cells, flow cells, and membrane electrode assemblies. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHEMINF:000018', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000193', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + has_cathode: Optional[list[str]] = Field(default=[], description="""The electrode where reduction occurs in an electrochemical cell. It is +the negative electrode in an electrolytic cell, while it is the +positive electrode in a galvanic cell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemicalReactor'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007254'} }) + has_anode: Optional[list[str]] = Field(default=[], description="""The electrode where oxidation occurs in an electrochemical cell. It is +the positive electrode in an electrolytic cell, while it is the +negative electrode in a galvanic cell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemicalReactor'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007255'} }) + cell_operating_mode: Optional[CellOperatingModeEnum] = Field(default=None, description="""The functional mode of an electrochemical cell based on the direction +of energy conversion.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemicalReactor'], + 'recommended': True, + 'slot_uri': 'coremeta4cat:cell_operating_mode'} }) + has_active_area: Optional[list[Area]] = Field(default=[], description="""In contrast to substrate area, the actual area of a sample or +electrode which is active.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemicalReactor'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007258'} }) + faradaic_current: Optional[list[ElectricCurrent]] = Field(default=[], description="""The current that is flowing through an electrochemical cell and is +causing (or is caused by) chemical reactions.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectrochemicalReactor'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0007259'} }) + alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'skos:altLabel', + 'todos': ['Should probably rather declared on Entity or in some common ' + 'metadata mixin instead.']} }) + has_physical_state: Optional[PhysicalStateEnum] = Field(default=None, description="""The slot to specify the physical state of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'SIO:000008', + 'todos': ['Find out how to make this a subproperty of ' + 'has_qualitative_attribute, as it currently throws the error ' + "'physical_state enumerations cannot be inlined' due to the fact " + 'that we are using an enum here.']} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_mass: Optional[list[Mass]] = Field(default=[], description="""The slot to provide the Mass of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_density: Optional[list[Density]] = Field(default=[], description="""The slot to provide the Density of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -20208,188 +19245,73 @@ class SMILES(QualitativeAttribute): 'QualitativeAttribute', 'QuantitativeAttribute', 'Resource', - 'RightsStatement', - 'Role', - 'Standard', - 'SupportiveEntity', - 'Surrounding', - 'TimeInstant'], - 'slot_uri': 'dcterms:description'} }) - value: str = Field(default=..., description="""The slot to provide the literal value of the QualitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], - 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class MaterialisticMixin(ConfiguredBaseModel): - """ - A LinkML mixin used to pass down properties common to all material entities. It is needed for example to have MaterialSample have the same properties as MaterialEntity, although it is defined as a subclass of EvaluatedEntity. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'abstract': True, - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/materials/', - 'mixin': True}) - - alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], - 'slot_uri': 'skos:altLabel', - 'todos': ['Should probably rather declared on Entity or in some common ' - 'metadata mixin instead.']} }) - has_physical_state: Optional[PhysicalStateEnum] = Field(default=None, description="""The slot to specify the physical state of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], - 'slot_uri': 'SIO:000008', - 'todos': ['Find out how to make this a subproperty of ' - 'has_qualitative_attribute, as it currently throws the error ' - "'physical_state enumerations cannot be inlined' due to the fact " - 'that we are using an enum here.']} }) - has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', - 'PhotoluminescenceMixin', - 'ElectrochemistryMixin', - 'PowderXRD', - 'SingleCrystalXRD', - 'XRayAbsorptionSpectroscopy', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'DynamicLightScattering', - 'SizeExclusionChromatography', - 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', - 'ChemicalReaction', - 'Microkinetics', - 'MonteCarlo', - 'AqueousStability'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_mass: Optional[list[Mass]] = Field(default=[], description="""The slot to provide the Mass of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR', 'MaterialisticMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_density: Optional[list[Density]] = Field(default=[], description="""The slot to provide the Density of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin', 'ChemicalReaction', 'Microkinetics'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - - -class ChemicalSubstanceMixin(MaterialisticMixin): - """ - A LinkML mixin used to pass down properties common to all material entities that are described in a chemical context via being composed of chemical entities (e.g. atom, molecule, ion, ion pair, radical, complex, conformer etc., ) of the same type or of different types. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'abstract': True, - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/', - 'mixin': True}) - - has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', - 'UVVisSpectroscopy', - 'DynamicLightScattering', - 'ElectroSprayIonizationMassSpectrometry', - 'ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_ph_value: Optional[list[PHValue]] = Field(default=[], description="""The slot to provide the PHValue of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - composed_of: Optional[list[ChemicalEntity]] = Field(default=[], description="""The slot to provide the chemical entities of which a ChemicalSubstance is composed of.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['AFX:0000940'], - 'domain_of': ['ChemicalSubstanceMixin'], - 'is_a': 'has_part', - 'recommended': True, - 'slot_uri': 'BFO:0000051'} }) - has_amount: Optional[list[AmountOfSubstance]] = Field(default=[], description="""The slot to provide the AmountConcentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], - 'slot_uri': 'skos:altLabel', - 'todos': ['Should probably rather declared on Entity or in some common ' - 'metadata mixin instead.']} }) - has_physical_state: Optional[PhysicalStateEnum] = Field(default=None, description="""The slot to specify the physical state of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], - 'slot_uri': 'SIO:000008', - 'todos': ['Find out how to make this a subproperty of ' - 'has_qualitative_attribute, as it currently throws the error ' - "'physical_state enumerations cannot be inlined' due to the fact " - 'that we are using an enum here.']} }) - has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', - 'PhotoluminescenceMixin', - 'ElectrochemistryMixin', - 'PowderXRD', - 'SingleCrystalXRD', - 'XRayAbsorptionSpectroscopy', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'DynamicLightScattering', - 'SizeExclusionChromatography', - 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', - 'ChemicalReaction', - 'Microkinetics', - 'MonteCarlo', - 'AqueousStability'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_mass: Optional[list[Mass]] = Field(default=[], description="""The slot to provide the Mass of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR', 'MaterialisticMixin'], - 'is_a': 'has_quantitative_attribute', + 'RightsStatement', + 'Role', + 'Standard', + 'SupportiveEntity', + 'Surrounding', + 'TimeInstant'], + 'slot_uri': 'dcterms:description'} }) + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Device.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + 'slot_uri': 'adms:identifier'} }) + has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_density: Optional[list[Density]] = Field(default=[], description="""The slot to provide the Density of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], - 'is_a': 'has_quantitative_attribute', + 'slot_uri': 'dcterms:relation'} }) + has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin', 'ChemicalReaction', 'Microkinetics'], - 'is_a': 'has_quantitative_attribute', + 'slot_uri': 'dcterms:relation'} }) + has_part: Optional[list[Device]] = Field(default=[], description="""The slot to specify parts of a Device that are themselves Devices.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'slot_uri': 'dcterms:hasPart'} }) + part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'inverse': 'has_part', + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:isPartOf'} }) + type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], + 'slot_uri': 'dcterms:type'} }) + rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], + 'in_subset': ['domain_agnostic_core'], 'recommended': True, - 'slot_uri': 'SIO:000008'} }) + 'slot_uri': 'rdf:type'} }) -class PolymerMixin(ChemicalSubstanceMixin): +class CSTR(ChemicalReactor): """ - A LinkML mixin used to pass down properties common to all chemical substances that are composed of macromolecules of different kinds and which may be differentiated by composition, length, degree of branching etc.. + Continuous stirred tank reactor (CSTR) — a well-mixed, continuous-flow + reactor operating at steady state. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'abstract': True, - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/', - 'mixin': True}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0007019', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) - has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', - 'UVVisSpectroscopy', - 'DynamicLightScattering', - 'ElectroSprayIonizationMassSpectrometry', - 'ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', + stirring_rate: Optional[list[AngularVelocity]] = Field(default=[], description="""The rate at which the stirrer rotates, typically expressed in +revolutions per unit time (e.g. revolutions per minute).""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR'], + 'is_a': 'has_angular_velocity', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_ph_value: Optional[list[PHValue]] = Field(default=[], description="""The slot to provide the PHValue of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', + 'slot_uri': 'VOC4CAT:0008114'} }) + residence_time: Optional[Duration] = Field(default=None, description="""The average time a unit of fluid spends inside the reactor before +exiting.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR'], 'is_a': 'has_duration', 'recommended': True} }) + reactor_working_volume: Optional[list[Volume]] = Field(default=[], description="""Volume of the reaction chamber, calculated by its dimensions. Volume +of pipes and valves connected to the reactor is not included.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR'], + 'is_a': 'has_volume', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - composed_of: Optional[list[ChemicalEntity]] = Field(default=[], description="""The slot to provide the chemical entities of which a ChemicalSubstance is composed of.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['AFX:0000940'], - 'domain_of': ['ChemicalSubstanceMixin'], - 'is_a': 'has_part', + 'slot_uri': 'VOC4CAT:0000153'} }) + reactor_diameter: Optional[list[LengthQuantity]] = Field(default=[], description="""The internal diameter of the reactor vessel.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR'], 'is_a': 'has_length', 'recommended': True} }) + stirrer_diameter: Optional[list[LengthQuantity]] = Field(default=[], description="""The effective diameter of the stirrer. Typically expressed as the +distance across the rotating blade or mixing head from one tip to +the opposite tip.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR'], + 'is_a': 'has_length', 'recommended': True, - 'slot_uri': 'BFO:0000051'} }) - has_amount: Optional[list[AmountOfSubstance]] = Field(default=[], description="""The slot to provide the AmountConcentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', + 'slot_uri': 'VOC4CAT:0008115'} }) + reactor_stirrer_type: Optional[list[str]] = Field(default=[], description="""The category of mechanical or magnetic agitation device used in the +reactor, such as a magnetic stirrer or an overhead mechanical (steel +shaft) stirrer. Distinct from the synthesis-context stirrer_type slot +(coremeta4cat_synthesis_ap), since reactor and synthesis-vessel stirring +may use different equipment.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR'], + 'is_a': 'has_qualitative_attribute', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) + 'slot_uri': 'VOC4CAT:0008113'} }) alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'slot_uri': 'skos:altLabel', 'todos': ['Should probably rather declared on Entity or in some common ' @@ -20413,8 +19335,8 @@ class PolymerMixin(ChemicalSubstanceMixin): 'DynamicLightScattering', 'SizeExclusionChromatography', 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', 'ChemicalReaction', + 'MaterialisticMixin', 'Microkinetics', 'MonteCarlo', 'AqueousStability'], @@ -20425,7 +19347,7 @@ class PolymerMixin(ChemicalSubstanceMixin): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR', 'MaterialisticMixin'], + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) @@ -20433,28 +19355,148 @@ class PolymerMixin(ChemicalSubstanceMixin): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin', 'ChemicalReaction', 'Microkinetics'], + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + 'Activity', + 'AgenticEntity', + 'Any', + 'Attribution', + 'Catalogue', + 'CatalogueRecord', + 'ChecksumAlgorithm', + 'Concept', + 'ConceptScheme', + 'DataService', + 'Dataset', + 'DatasetSeries', + 'DefinedTerm', + 'Distribution', + 'Document', + 'Entity', + 'Frequency', + 'Geometry', + 'Identifier', + 'LegalResource', + 'LicenseDocument', + 'LinguisticSystem', + 'MediaType', + 'MediaTypeOrExtent', + 'PeriodOfTime', + 'Plan', + 'Policy', + 'ProvenanceStatement', + 'QualitativeAttribute', + 'QuantitativeAttribute', + 'Resource', + 'RightsStatement', + 'Role', + 'Standard', + 'SupportiveEntity', + 'Surrounding', + 'TimeInstant'], + 'slot_uri': 'dcterms:title'} }) + description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + 'Activity', + 'AgenticEntity', + 'Any', + 'Attribution', + 'Catalogue', + 'CatalogueRecord', + 'ChecksumAlgorithm', + 'Concept', + 'ConceptScheme', + 'DataService', + 'Dataset', + 'DatasetSeries', + 'Distribution', + 'Document', + 'Entity', + 'Frequency', + 'Geometry', + 'Identifier', + 'LegalResource', + 'LicenseDocument', + 'LinguisticSystem', + 'MediaType', + 'MediaTypeOrExtent', + 'PeriodOfTime', + 'Plan', + 'Policy', + 'ProvenanceStatement', + 'QualitativeAttribute', + 'QuantitativeAttribute', + 'Resource', + 'RightsStatement', + 'Role', + 'Standard', + 'SupportiveEntity', + 'Surrounding', + 'TimeInstant'], + 'slot_uri': 'dcterms:description'} }) + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Device.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + 'slot_uri': 'adms:identifier'} }) + has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_part: Optional[list[Device]] = Field(default=[], description="""The slot to specify parts of a Device that are themselves Devices.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'slot_uri': 'dcterms:hasPart'} }) + part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'inverse': 'has_part', + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:isPartOf'} }) + type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], + 'slot_uri': 'dcterms:type'} }) + rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'rdf:type'} }) -class MaterialEntity(MaterialisticMixin, Entity): +class PlugFlowReactor(ChemicalReactor): """ - A material is an Entity that has some portion of matter as proper part. + Plug flow reactor (PFR) — a tubular reactor in which reactant composition + varies along the axis with no axial mixing. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'BFO:0000040', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/materials/', - 'mixins': ['MaterialisticMixin'], - 'slot_usage': {'has_part': {'description': 'The slot to provide the parts of ' - 'a MaterialEntity.', - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'has_part', - 'range': 'MaterialEntity', - 'recommended': True, - 'slot_uri': 'BFO:0000051'}}}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0007102', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) + tube_length: Optional[list[LengthQuantity]] = Field(default=[], description="""The length of the tubular reaction chamber.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PlugFlowReactor'], 'is_a': 'has_length', 'recommended': True} }) + tube_internal_diameter: Optional[list[LengthQuantity]] = Field(default=[], description="""The internal diameter of the tubular reaction chamber.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PlugFlowReactor'], 'is_a': 'has_length', 'recommended': True} }) + flow_direction: Optional[list[str]] = Field(default=[], description="""The direction of reactant flow through the tube (e.g. upflow, +downflow, horizontal).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PlugFlowReactor'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True} }) + number_of_tubes: Optional[list[int]] = Field(default=[], description="""The number of parallel tubes in the reactor.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PlugFlowReactor'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True} }) + tube_material: Optional[list[str]] = Field(default=[], description="""Material used for the construction of the reactor tube(s).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PlugFlowReactor'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True} }) + catalyst_particle_size: Optional[list[LengthQuantity]] = Field(default=[], description="""A measure of the characteristic linear dimension of a particle in a +sample, typically reported as diameter or sieve fraction range.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PlugFlowReactor', 'SlurryReactor', 'FixedBedReactor'], + 'is_a': 'has_length', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008212'} }) alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'slot_uri': 'skos:altLabel', 'todos': ['Should probably rather declared on Entity or in some common ' @@ -20478,8 +19520,8 @@ class MaterialEntity(MaterialisticMixin, Entity): 'DynamicLightScattering', 'SizeExclusionChromatography', 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', 'ChemicalReaction', + 'MaterialisticMixin', 'Microkinetics', 'MonteCarlo', 'AqueousStability'], @@ -20490,7 +19532,7 @@ class MaterialEntity(MaterialisticMixin, Entity): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR', 'MaterialisticMixin'], + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) @@ -20498,11 +19540,22 @@ class MaterialEntity(MaterialisticMixin, Entity): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin', 'ChemicalReaction', 'Microkinetics'], + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - title: Optional[str] = Field(default=None, description="""The slot to provide a title for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -20541,7 +19594,7 @@ class MaterialEntity(MaterialisticMixin, Entity): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""The slot to provide a description for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -20579,17 +19632,7 @@ class MaterialEntity(MaterialisticMixin, Entity): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Device.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], 'slot_uri': 'adms:identifier'} }) has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], @@ -20599,10 +19642,9 @@ class MaterialEntity(MaterialisticMixin, Entity): 'in_subset': ['domain_agnostic_core'], 'recommended': True, 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[MaterialEntity]] = Field(default=[], description="""The slot to provide the parts of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'recommended': True, - 'slot_uri': 'BFO:0000051'} }) - part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + has_part: Optional[list[Device]] = Field(default=[], description="""The slot to specify parts of a Device that are themselves Devices.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'slot_uri': 'dcterms:hasPart'} }) + part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], 'inverse': 'has_part', 'notes': ['not in DCAT-AP'], @@ -20615,24 +19657,32 @@ class MaterialEntity(MaterialisticMixin, Entity): 'slot_uri': 'rdf:type'} }) -class MaterialSample(MaterialisticMixin, EvaluatedEntity): +class Autoclave(ChemicalReactor): """ - A Sample that was derived from a previous MaterialSample or some other kind of MaterialEntity. + Autoclave reactor — a sealed pressure vessel for batch reactions at + elevated temperature and/or pressure. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'OBI:0000747', - 'exact_mappings': ['SIO:001050', 'VOC4CAT:0005056'], - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/materials/', - 'mixins': ['MaterialisticMixin'], - 'slot_usage': {'derived_from': {'description': 'The slot to specify the ' - 'MaterialEntity or ' - 'MaterialSample from which the ' - 'MaterialSample was created.', - 'name': 'derived_from'}}}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'NCIT:C93052', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) - derived_from: Optional[Entity] = Field(default=None, description="""The slot to specify the MaterialEntity or MaterialSample from which the MaterialSample was created.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['BFO:0000050', 'dcterms:partOf'], - 'domain_of': ['MaterialSample'], - 'exact_mappings': ['SIO:000244'], - 'slot_uri': 'prov:wasDerivedFrom'} }) + agitation_type: Optional[list[str]] = Field(default=[], description="""The category of agitation used inside the autoclave (e.g. magnetic +stirring, mechanical overhead stirring, rocking, none).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Autoclave'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True} }) + reaction_chamber_material: Optional[list[str]] = Field(default=[], description="""Material used for the construction of the inner reaction chamber +(the surface in direct contact with the reaction mixture). Distinct +from vessel_material, the material of the outer pressure vessel/shell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Autoclave'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0000156'} }) + vessel_internal_volume: Optional[list[Volume]] = Field(default=[], description="""The internal (working) volume of the autoclave vessel.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Autoclave'], 'is_a': 'has_volume', 'recommended': True} }) + vessel_material: Optional[list[str]] = Field(default=[], description="""Material used for the construction of the outer autoclave vessel/ +pressure shell. Distinct from reaction_chamber_material, the material +of the inner reaction chamber lining.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Autoclave'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True} }) + batch_duration: Optional[Duration] = Field(default=None, description="""The total duration of the batch reaction inside the autoclave, from +start to end of the reaction step.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Autoclave'], 'is_a': 'has_duration', 'recommended': True} }) alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'slot_uri': 'skos:altLabel', 'todos': ['Should probably rather declared on Entity or in some common ' @@ -20656,8 +19706,8 @@ class MaterialSample(MaterialisticMixin, EvaluatedEntity): 'DynamicLightScattering', 'SizeExclusionChromatography', 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', 'ChemicalReaction', + 'MaterialisticMixin', 'Microkinetics', 'MonteCarlo', 'AqueousStability'], @@ -20668,7 +19718,7 @@ class MaterialSample(MaterialisticMixin, EvaluatedEntity): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR', 'MaterialisticMixin'], + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) @@ -20676,12 +19726,22 @@ class MaterialSample(MaterialisticMixin, EvaluatedEntity): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin', 'ChemicalReaction', 'Microkinetics'], + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - was_generated_by: Optional[list[Activity]] = Field(default=[], description="""A slot to provide the Activity which created the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'EvaluatedEntity'], 'slot_uri': 'prov:wasGeneratedBy'} }) - title: Optional[str] = Field(default=None, description="""The slot to provide a title for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -20720,7 +19780,7 @@ class MaterialSample(MaterialisticMixin, EvaluatedEntity): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""The slot to provide a description for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -20758,17 +19818,7 @@ class MaterialSample(MaterialisticMixin, EvaluatedEntity): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Device.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], 'slot_uri': 'adms:identifier'} }) has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], @@ -20778,9 +19828,9 @@ class MaterialSample(MaterialisticMixin, EvaluatedEntity): 'in_subset': ['domain_agnostic_core'], 'recommended': True, 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[Entity]] = Field(default=[], description="""A slot to provide a part of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + has_part: Optional[list[Device]] = Field(default=[], description="""The slot to specify parts of a Device that are themselves Devices.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], 'inverse': 'has_part', 'notes': ['not in DCAT-AP'], @@ -20793,22 +19843,33 @@ class MaterialSample(MaterialisticMixin, EvaluatedEntity): 'slot_uri': 'rdf:type'} }) -class Precursor(MaterialSample): +class SlurryReactor(ChemicalReactor): """ - A MaterialSample that serves as input material in a catalyst Synthesis. - Precursors are consumed or transformed during the preparation process. + Slurry reactor — a three-phase reactor in which catalyst particles are + suspended in a liquid phase through which gas is bubbled. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0007794', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', - 'slot_usage': {'precursor_quantity': {'name': 'precursor_quantity', - 'required': True, - 'slot_uri': 'VOC4CAT:0008118'}}}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:SlurryReactor', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) - precursor_quantity: list[Mass] = Field(default=..., description="""Quantity of precursor used in synthesis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Precursor'], 'slot_uri': 'VOC4CAT:0008118'} }) - derived_from: Optional[Entity] = Field(default=None, description="""The slot to specify the MaterialEntity or MaterialSample from which the MaterialSample was created.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['BFO:0000050', 'dcterms:partOf'], - 'domain_of': ['MaterialSample'], - 'exact_mappings': ['SIO:000244'], - 'slot_uri': 'prov:wasDerivedFrom'} }) + catalyst_particle_size: Optional[list[LengthQuantity]] = Field(default=[], description="""A measure of the characteristic linear dimension of a particle in a +sample, typically reported as diameter or sieve fraction range.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PlugFlowReactor', 'SlurryReactor', 'FixedBedReactor'], + 'is_a': 'has_length', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0008212'} }) + gas_liquid_ratio: Optional[list[float]] = Field(default=[], description="""The volumetric ratio of gas to liquid phase in the slurry reactor.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SlurryReactor'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True} }) + agitation_sparging_rate: Optional[list[VolumeFlowRate]] = Field(default=[], description="""The volumetric flow rate at which gas is sparged/bubbled through the +liquid phase, or the rate of mechanical agitation used to maintain +the slurry suspension.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SlurryReactor'], 'is_a': 'has_flow_rate', 'recommended': True} }) + impeller_type: Optional[list[str]] = Field(default=[], description="""The category of impeller used to agitate and suspend the slurry +(e.g. Rushton turbine, pitched blade, anchor).""", json_schema_extra = { "linkml_meta": {'domain_of': ['SlurryReactor'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True} }) + agitation_speed: Optional[list[AngularVelocity]] = Field(default=[], description="""The rotational speed of the agitator/impeller, typically expressed +in revolutions per unit time.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SlurryReactor'], + 'is_a': 'has_angular_velocity', + 'recommended': True} }) alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'slot_uri': 'skos:altLabel', 'todos': ['Should probably rather declared on Entity or in some common ' @@ -20832,8 +19893,8 @@ class Precursor(MaterialSample): 'DynamicLightScattering', 'SizeExclusionChromatography', 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', 'ChemicalReaction', + 'MaterialisticMixin', 'Microkinetics', 'MonteCarlo', 'AqueousStability'], @@ -20844,7 +19905,7 @@ class Precursor(MaterialSample): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR', 'MaterialisticMixin'], + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) @@ -20852,12 +19913,22 @@ class Precursor(MaterialSample): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin', 'ChemicalReaction', 'Microkinetics'], + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - was_generated_by: Optional[list[Activity]] = Field(default=[], description="""A slot to provide the Activity which created the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'EvaluatedEntity'], 'slot_uri': 'prov:wasGeneratedBy'} }) - title: Optional[str] = Field(default=None, description="""The slot to provide a title for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -20896,7 +19967,7 @@ class Precursor(MaterialSample): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""The slot to provide a description for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -20934,17 +20005,7 @@ class Precursor(MaterialSample): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Device.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], 'slot_uri': 'adms:identifier'} }) has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], @@ -20954,9 +20015,9 @@ class Precursor(MaterialSample): 'in_subset': ['domain_agnostic_core'], 'recommended': True, 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[Entity]] = Field(default=[], description="""A slot to provide a part of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + has_part: Optional[list[Device]] = Field(default=[], description="""The slot to specify parts of a Device that are themselves Devices.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], 'inverse': 'has_part', 'notes': ['not in DCAT-AP'], @@ -20969,26 +20030,23 @@ class Precursor(MaterialSample): 'slot_uri': 'rdf:type'} }) -class CatalystSample(MaterialSample): +class Microreactor(ChemicalReactor): """ - A MaterialSample that is the product of a catalyst Synthesis. - The specific type of catalyst (e.g. heterogeneous, supported metal) - is expressed via rdf_type using a VOC4CAT term. + Microreactor — a miniaturised flow reactor with characteristic dimensions + in the sub-millimetre range, enabling precise thermal control and rapid + screening. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'OBI:0000747', - 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', - 'slot_usage': {'derived_from': {'description': 'The Precursor(s) or other ' - 'MaterialSample from which ' - 'this\n' - 'CatalystSample was produced.', - 'name': 'derived_from', - 'range': 'MaterialSample'}}}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0000234', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) - derived_from: Optional[MaterialSample] = Field(default=None, description="""The Precursor(s) or other MaterialSample from which this -CatalystSample was produced.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['BFO:0000050', 'dcterms:partOf'], - 'domain_of': ['MaterialSample'], - 'exact_mappings': ['SIO:000244'], - 'slot_uri': 'prov:wasDerivedFrom'} }) + channel_material: Optional[list[str]] = Field(default=[], description="""Material used for the construction of the microreactor channels.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Microreactor'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True} }) + channel_dimensions: Optional[list[LengthQuantity]] = Field(default=[], description="""The characteristic dimensions (e.g. width, depth) of the microreactor +channels.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Microreactor'], 'is_a': 'has_length', 'recommended': True} }) + number_of_channels: Optional[list[int]] = Field(default=[], description="""The number of parallel channels in the microreactor.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Microreactor'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True} }) alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'slot_uri': 'skos:altLabel', 'todos': ['Should probably rather declared on Entity or in some common ' @@ -21012,8 +20070,8 @@ class CatalystSample(MaterialSample): 'DynamicLightScattering', 'SizeExclusionChromatography', 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', 'ChemicalReaction', + 'MaterialisticMixin', 'Microkinetics', 'MonteCarlo', 'AqueousStability'], @@ -21024,7 +20082,7 @@ class CatalystSample(MaterialSample): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR', 'MaterialisticMixin'], + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) @@ -21032,12 +20090,22 @@ class CatalystSample(MaterialSample): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin', 'ChemicalReaction', 'Microkinetics'], + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - was_generated_by: Optional[list[Activity]] = Field(default=[], description="""A slot to provide the Activity which created the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'EvaluatedEntity'], 'slot_uri': 'prov:wasGeneratedBy'} }) - title: Optional[str] = Field(default=None, description="""The slot to provide a title for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -21076,7 +20144,7 @@ class CatalystSample(MaterialSample): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""The slot to provide a description for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -21114,17 +20182,7 @@ class CatalystSample(MaterialSample): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Device.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], 'slot_uri': 'adms:identifier'} }) has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], @@ -21134,9 +20192,9 @@ class CatalystSample(MaterialSample): 'in_subset': ['domain_agnostic_core'], 'recommended': True, 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[Entity]] = Field(default=[], description="""A slot to provide a part of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + has_part: Optional[list[Device]] = Field(default=[], description="""The slot to specify parts of a Device that are themselves Devices.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], 'inverse': 'has_part', 'notes': ['not in DCAT-AP'], @@ -21149,40 +20207,35 @@ class CatalystSample(MaterialSample): 'slot_uri': 'rdf:type'} }) -class SubstanceSample(MaterialSample, ChemicalSubstanceMixin): +class FixedBedReactor(ChemicalReactor): """ - A MaterialSample derived from a chemical substance that is of interest in an analytical procedure. + Fixed bed reactor — a tubular reactor packed with a stationary catalyst bed. + The most common reactor type in heterogeneous catalysis testing. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'aliases': ['analyte'], - 'class_uri': 'SIO:001378', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/', - 'mixins': ['ChemicalSubstanceMixin']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:FixedBedReactor', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) - has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', - 'UVVisSpectroscopy', - 'DynamicLightScattering', - 'ElectroSprayIonizationMassSpectrometry', - 'ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', + catalyst_particle_size: Optional[list[LengthQuantity]] = Field(default=[], description="""A measure of the characteristic linear dimension of a particle in a +sample, typically reported as diameter or sieve fraction range.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PlugFlowReactor', 'SlurryReactor', 'FixedBedReactor'], + 'is_a': 'has_length', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_ph_value: Optional[list[PHValue]] = Field(default=[], description="""The slot to provide the PHValue of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', + 'slot_uri': 'VOC4CAT:0008212'} }) + catalyst_bed_diameter: Optional[list[LengthQuantity]] = Field(default=[], description="""The internal diameter of the packed catalyst bed section.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FixedBedReactor'], 'is_a': 'has_length', 'recommended': True} }) + catalyst_bed_volume: Optional[list[Volume]] = Field(default=[], description="""The bulk volume taken up by the catalyst and potential diluent in a +fixed bed reactor.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FixedBedReactor'], + 'is_a': 'has_volume', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - composed_of: Optional[list[ChemicalEntity]] = Field(default=[], description="""The slot to provide the chemical entities of which a ChemicalSubstance is composed of.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['AFX:0000940'], - 'domain_of': ['ChemicalSubstanceMixin'], - 'is_a': 'has_part', + 'slot_uri': 'VOC4CAT:0007021'} }) + catalyst_dilution_material: Optional[list[str]] = Field(default=[], description="""An inert solid mixed with catalyst particles in a fixed bed to modify +bed properties (e.g. improve heat/mass transfer, dilute activity).""", json_schema_extra = { "linkml_meta": {'domain_of': ['FixedBedReactor'], + 'is_a': 'has_qualitative_attribute', 'recommended': True, - 'slot_uri': 'BFO:0000051'} }) - has_amount: Optional[list[AmountOfSubstance]] = Field(default=[], description="""The slot to provide the AmountConcentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', + 'slot_uri': 'VOC4CAT:0008218'} }) + catalyst_bed_height: Optional[list[LengthQuantity]] = Field(default=[], description="""The axial length of the packed catalyst section in a reactor, +measured along the direction of flow.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FixedBedReactor'], + 'is_a': 'has_length', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - derived_from: Optional[Entity] = Field(default=None, description="""The slot to specify the MaterialEntity or MaterialSample from which the MaterialSample was created.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['BFO:0000050', 'dcterms:partOf'], - 'domain_of': ['MaterialSample'], - 'exact_mappings': ['SIO:000244'], - 'slot_uri': 'prov:wasDerivedFrom'} }) + 'slot_uri': 'VOC4CAT:0008217'} }) alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'slot_uri': 'skos:altLabel', 'todos': ['Should probably rather declared on Entity or in some common ' @@ -21206,8 +20259,8 @@ class SubstanceSample(MaterialSample, ChemicalSubstanceMixin): 'DynamicLightScattering', 'SizeExclusionChromatography', 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', 'ChemicalReaction', + 'MaterialisticMixin', 'Microkinetics', 'MonteCarlo', 'AqueousStability'], @@ -21218,7 +20271,7 @@ class SubstanceSample(MaterialSample, ChemicalSubstanceMixin): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR', 'MaterialisticMixin'], + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) @@ -21226,12 +20279,22 @@ class SubstanceSample(MaterialSample, ChemicalSubstanceMixin): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin', 'ChemicalReaction', 'Microkinetics'], + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - was_generated_by: Optional[list[Activity]] = Field(default=[], description="""A slot to provide the Activity which created the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'EvaluatedEntity'], 'slot_uri': 'prov:wasGeneratedBy'} }) - title: Optional[str] = Field(default=None, description="""The slot to provide a title for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -21270,7 +20333,7 @@ class SubstanceSample(MaterialSample, ChemicalSubstanceMixin): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""The slot to provide a description for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -21308,17 +20371,7 @@ class SubstanceSample(MaterialSample, ChemicalSubstanceMixin): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Device.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], 'slot_uri': 'adms:identifier'} }) has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], @@ -21328,9 +20381,9 @@ class SubstanceSample(MaterialSample, ChemicalSubstanceMixin): 'in_subset': ['domain_agnostic_core'], 'recommended': True, 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[Entity]] = Field(default=[], description="""A slot to provide a part of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + has_part: Optional[list[Device]] = Field(default=[], description="""The slot to specify parts of a Device that are themselves Devices.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], 'inverse': 'has_part', 'notes': ['not in DCAT-AP'], @@ -21343,41 +20396,27 @@ class SubstanceSample(MaterialSample, ChemicalSubstanceMixin): 'slot_uri': 'rdf:type'} }) -class PolymerSample(SubstanceSample, PolymerMixin): +class FluidizedBedReactor(ChemicalReactor): """ - A SubstanceSample derived from a Polymer. + Fluidized bed reactor — a reactor in which the catalyst particles are + suspended in an upward-flowing gas or liquid stream. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'SIO:001378', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/', - 'mixins': ['PolymerMixin'], - 'todos': ['Find a better mapping, as it is currently mapped to same ontology ' - 'class as its parent.']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:FluidizedBedReactor', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/reaction/'}) - has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', - 'UVVisSpectroscopy', - 'DynamicLightScattering', - 'ElectroSprayIonizationMassSpectrometry', - 'ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', + gas_distributor_type: Optional[list[str]] = Field(default=[], description="""Type or design of the gas distributor plate in a fluidized bed reactor.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FluidizedBedReactor'], + 'is_a': 'has_qualitative_attribute', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_ph_value: Optional[list[PHValue]] = Field(default=[], description="""The slot to provide the PHValue of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'ChemicalSubstanceMixin'], + 'slot_uri': 'coremeta4cat:gas_distributor_type'} }) + bed_expansion_height: Optional[list[float]] = Field(default=[], description="""Height of bed expansion above the settled bed height under operating conditions.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FluidizedBedReactor'], 'is_a': 'has_quantitative_attribute', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - composed_of: Optional[list[ChemicalEntity]] = Field(default=[], description="""The slot to provide the chemical entities of which a ChemicalSubstance is composed of.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['AFX:0000940'], - 'domain_of': ['ChemicalSubstanceMixin'], - 'is_a': 'has_part', - 'recommended': True, - 'slot_uri': 'BFO:0000051'} }) - has_amount: Optional[list[AmountOfSubstance]] = Field(default=[], description="""The slot to provide the AmountConcentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', + 'slot_uri': 'coremeta4cat:bed_expansion_height', + 'unit': {'ucum_code': 'cm'}} }) + bubble_size_distribution: Optional[list[str]] = Field(default=[], description="""Description or characterization of bubble size distribution in the fluidized bed.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FluidizedBedReactor'], + 'is_a': 'has_qualitative_attribute', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - derived_from: Optional[Entity] = Field(default=None, description="""The slot to specify the MaterialEntity or MaterialSample from which the MaterialSample was created.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['BFO:0000050', 'dcterms:partOf'], - 'domain_of': ['MaterialSample'], - 'exact_mappings': ['SIO:000244'], - 'slot_uri': 'prov:wasDerivedFrom'} }) + 'slot_uri': 'coremeta4cat:bubble_size_distribution'} }) alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'slot_uri': 'skos:altLabel', 'todos': ['Should probably rather declared on Entity or in some common ' @@ -21401,8 +20440,8 @@ class PolymerSample(SubstanceSample, PolymerMixin): 'DynamicLightScattering', 'SizeExclusionChromatography', 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', 'ChemicalReaction', + 'MaterialisticMixin', 'Microkinetics', 'MonteCarlo', 'AqueousStability'], @@ -21413,7 +20452,7 @@ class PolymerSample(SubstanceSample, PolymerMixin): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR', 'MaterialisticMixin'], + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) @@ -21421,12 +20460,22 @@ class PolymerSample(SubstanceSample, PolymerMixin): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin', 'ChemicalReaction', 'Microkinetics'], + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - was_generated_by: Optional[list[Activity]] = Field(default=[], description="""A slot to provide the Activity which created the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'EvaluatedEntity'], 'slot_uri': 'prov:wasGeneratedBy'} }) - title: Optional[str] = Field(default=None, description="""The slot to provide a title for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -21465,7 +20514,7 @@ class PolymerSample(SubstanceSample, PolymerMixin): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""The slot to provide a description for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -21503,17 +20552,7 @@ class PolymerSample(SubstanceSample, PolymerMixin): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Device.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], 'slot_uri': 'adms:identifier'} }) has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], @@ -21523,9 +20562,9 @@ class PolymerSample(SubstanceSample, PolymerMixin): 'in_subset': ['domain_agnostic_core'], 'recommended': True, 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[Entity]] = Field(default=[], description="""A slot to provide a part of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + has_part: Optional[list[Device]] = Field(default=[], description="""The slot to specify parts of a Device that are themselves Devices.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], 'inverse': 'has_part', 'notes': ['not in DCAT-AP'], @@ -21538,14 +20577,130 @@ class PolymerSample(SubstanceSample, PolymerMixin): 'slot_uri': 'rdf:type'} }) -class Temperature(QuantitativeAttribute): +class ChemicalSubstanceMixin(MaterialisticMixin): """ - A physical quantity that quantitatively expresses the attribute of hotness or coldness. + A LinkML mixin used to pass down properties common to all material entities that are described in a chemical context via being composed of chemical entities (e.g. atom, molecule, ion, ion pair, radical, complex, conformer etc., ) of the same type or of different types. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', - 'close_mappings': ['PATO:0000146'], - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/materials/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'abstract': True, + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/', + 'mixin': True}) + + has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', + 'UVVisSpectroscopy', + 'DynamicLightScattering', + 'ElectroSprayIonizationMassSpectrometry', + 'ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_ph_value: Optional[list[PHValue]] = Field(default=[], description="""The slot to provide the PHValue of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + composed_of: Optional[list[ChemicalEntity]] = Field(default=[], description="""The slot to provide the chemical entities of which a ChemicalSubstance is composed of.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['AFX:0000940'], + 'domain_of': ['ChemicalSubstanceMixin'], + 'is_a': 'has_part', + 'recommended': True, + 'slot_uri': 'BFO:0000051'} }) + has_amount: Optional[list[AmountOfSubstance]] = Field(default=[], description="""The slot to provide the AmountConcentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'skos:altLabel', + 'todos': ['Should probably rather declared on Entity or in some common ' + 'metadata mixin instead.']} }) + has_physical_state: Optional[PhysicalStateEnum] = Field(default=None, description="""The slot to specify the physical state of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'SIO:000008', + 'todos': ['Find out how to make this a subproperty of ' + 'has_qualitative_attribute, as it currently throws the error ' + "'physical_state enumerations cannot be inlined' due to the fact " + 'that we are using an enum here.']} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_mass: Optional[list[Mass]] = Field(default=[], description="""The slot to provide the Mass of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_density: Optional[list[Density]] = Field(default=[], description="""The slot to provide the Density of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + + +class DissolvingSubstance(ChemicalSubstanceMixin, AgenticEntity): + """ + A liquid ChemicalSubstance that dissolves or that is capable of dissolving a ChemicalSubstance. + """ + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'aliases': ['solvent'], + 'class_uri': 'SIO:010417', + 'exact_mappings': ['VOC4CAT:0007246', 'NCIT:C45790'], + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/', + 'mixins': ['ChemicalSubstanceMixin']}) + has_percentage_of_total: Optional[list[PercentageOfTotal]] = Field(default=[], description="""A slot to specify the percentage of a specific ChemicalSubstance in relation to the total amount of that same substance used across a multi-step reaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DissolvingSubstance'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', + 'UVVisSpectroscopy', + 'DynamicLightScattering', + 'ElectroSprayIonizationMassSpectrometry', + 'ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_ph_value: Optional[list[PHValue]] = Field(default=[], description="""The slot to provide the PHValue of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + composed_of: Optional[list[ChemicalEntity]] = Field(default=[], description="""The slot to provide the chemical entities of which a ChemicalSubstance is composed of.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['AFX:0000940'], + 'domain_of': ['ChemicalSubstanceMixin'], + 'is_a': 'has_part', + 'recommended': True, + 'slot_uri': 'BFO:0000051'} }) + has_amount: Optional[list[AmountOfSubstance]] = Field(default=[], description="""The slot to provide the AmountConcentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -21623,41 +20778,124 @@ class Temperature(QuantitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for an Instrument.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + 'slot_uri': 'adms:identifier'} }) + has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) - has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Binds the type of a quantifiable attribute to a ' - 'QUDT Quantity Kind instance from the QUDT ' - 'Quantity Kind vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTQuantityKindEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], - 'slot_uri': 'qudt:hasQuantityKind'} }) - unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Restricts the allowable defined terms to the ' - 'QUDT Unit vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTUnitEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], 'recommended': True, - 'slot_uri': 'qudt:unit'} }) + 'slot_uri': 'dcterms:relation'} }) + has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_part: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to specify parts of an AgenticEntity that are themselves AgenticEntities.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'slot_uri': 'dcterms:hasPart'} }) + part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'inverse': 'has_part', + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:isPartOf'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], 'in_subset': ['domain_agnostic_core'], 'recommended': True, - 'slot_uri': 'rdf:type'} }) - - -class Mass(QuantitativeAttribute): - """ - The strength of a body's gravitational attraction to other bodies. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', - 'close_mappings': ['PATO:0000125'], - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/materials/'}) - + 'slot_uri': 'rdf:type'} }) + alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'skos:altLabel', + 'todos': ['Should probably rather declared on Entity or in some common ' + 'metadata mixin instead.']} }) + has_physical_state: Optional[PhysicalStateEnum] = Field(default=None, description="""The slot to specify the physical state of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'SIO:000008', + 'todos': ['Find out how to make this a subproperty of ' + 'has_qualitative_attribute, as it currently throws the error ' + "'physical_state enumerations cannot be inlined' due to the fact " + 'that we are using an enum here.']} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_mass: Optional[list[Mass]] = Field(default=[], description="""The slot to provide the Mass of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_density: Optional[list[Density]] = Field(default=[], description="""The slot to provide the Density of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + + +class Catalyst(ChemicalSubstanceMixin, AgenticEntity): + """ + A ChemicalSubstance or MaterialEntity that initiates or accelerates a ChemicalReaction without itself being affected. + """ + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'SIO:010344', + 'close_mappings': ['CHEBI:35223'], + 'exact_mappings': ['VOC4CAT:0000194'], + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/', + 'mixins': ['ChemicalSubstanceMixin']}) + + has_molar_equivalent: Optional[list[MolarEquivalent]] = Field(default=[], description="""A slot to provide the MolarEquivalent of a ChemicalSubstance, such as the DissolvingSubstance, Starting Material or Reactant, within the context of a chemical reaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['StartingMaterial', 'Reagent', 'Catalyst'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', + 'UVVisSpectroscopy', + 'DynamicLightScattering', + 'ElectroSprayIonizationMassSpectrometry', + 'ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_ph_value: Optional[list[PHValue]] = Field(default=[], description="""The slot to provide the PHValue of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + composed_of: Optional[list[ChemicalEntity]] = Field(default=[], description="""The slot to provide the chemical entities of which a ChemicalSubstance is composed of.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['AFX:0000940'], + 'domain_of': ['ChemicalSubstanceMixin'], + 'is_a': 'has_part', + 'recommended': True, + 'slot_uri': 'BFO:0000051'} }) + has_amount: Optional[list[AmountOfSubstance]] = Field(default=[], description="""The slot to provide the AmountConcentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -21735,42 +20973,220 @@ class Mass(QuantitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for an Instrument.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + 'slot_uri': 'adms:identifier'} }) + has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) - has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Binds the type of a quantifiable attribute to a ' - 'QUDT Quantity Kind instance from the QUDT ' - 'Quantity Kind vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTQuantityKindEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], - 'slot_uri': 'qudt:hasQuantityKind'} }) - unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Restricts the allowable defined terms to the ' - 'QUDT Unit vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTUnitEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], 'recommended': True, - 'slot_uri': 'qudt:unit'} }) + 'slot_uri': 'dcterms:relation'} }) + has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_part: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to specify parts of an AgenticEntity that are themselves AgenticEntities.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'slot_uri': 'dcterms:hasPart'} }) + part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'inverse': 'has_part', + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:isPartOf'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], 'in_subset': ['domain_agnostic_core'], 'recommended': True, 'slot_uri': 'rdf:type'} }) + alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'skos:altLabel', + 'todos': ['Should probably rather declared on Entity or in some common ' + 'metadata mixin instead.']} }) + has_physical_state: Optional[PhysicalStateEnum] = Field(default=None, description="""The slot to specify the physical state of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'SIO:000008', + 'todos': ['Find out how to make this a subproperty of ' + 'has_qualitative_attribute, as it currently throws the error ' + "'physical_state enumerations cannot be inlined' due to the fact " + 'that we are using an enum here.']} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_mass: Optional[list[Mass]] = Field(default=[], description="""The slot to provide the Mass of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_density: Optional[list[Density]] = Field(default=[], description="""The slot to provide the Density of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) -class MolarMass(Mass): +class PolymerMixin(ChemicalSubstanceMixin): """ - A Mass (physical quality) that quantifies the mass of a homogeneous ChemicalSubstance containing 6.02 x 10^23 atoms or molecules. + A LinkML mixin used to pass down properties common to all chemical substances that are composed of macromolecules of different kinds and which may be differentiated by composition, length, degree of branching etc.. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'AFR:0002409', - 'close_mappings': ['PATO:0001681'], - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'abstract': True, + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/', + 'mixin': True}) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', + 'UVVisSpectroscopy', + 'DynamicLightScattering', + 'ElectroSprayIonizationMassSpectrometry', + 'ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_ph_value: Optional[list[PHValue]] = Field(default=[], description="""The slot to provide the PHValue of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + composed_of: Optional[list[ChemicalEntity]] = Field(default=[], description="""The slot to provide the chemical entities of which a ChemicalSubstance is composed of.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['AFX:0000940'], + 'domain_of': ['ChemicalSubstanceMixin'], + 'is_a': 'has_part', + 'recommended': True, + 'slot_uri': 'BFO:0000051'} }) + has_amount: Optional[list[AmountOfSubstance]] = Field(default=[], description="""The slot to provide the AmountConcentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'skos:altLabel', + 'todos': ['Should probably rather declared on Entity or in some common ' + 'metadata mixin instead.']} }) + has_physical_state: Optional[PhysicalStateEnum] = Field(default=None, description="""The slot to specify the physical state of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'SIO:000008', + 'todos': ['Find out how to make this a subproperty of ' + 'has_qualitative_attribute, as it currently throws the error ' + "'physical_state enumerations cannot be inlined' due to the fact " + 'that we are using an enum here.']} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_mass: Optional[list[Mass]] = Field(default=[], description="""The slot to provide the Mass of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_density: Optional[list[Density]] = Field(default=[], description="""The slot to provide the Density of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + + +class MaterialEntity(MaterialisticMixin, Entity): + """ + A material is an Entity that has some portion of matter as proper part. + """ + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'BFO:0000040', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/materials/', + 'mixins': ['MaterialisticMixin'], + 'slot_usage': {'has_part': {'description': 'The slot to provide the parts of ' + 'a MaterialEntity.', + 'inlined_as_list': True, + 'multivalued': True, + 'name': 'has_part', + 'range': 'MaterialEntity', + 'recommended': True, + 'slot_uri': 'BFO:0000051'}}}) + + alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'skos:altLabel', + 'todos': ['Should probably rather declared on Entity or in some common ' + 'metadata mixin instead.']} }) + has_physical_state: Optional[PhysicalStateEnum] = Field(default=None, description="""The slot to specify the physical state of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'SIO:000008', + 'todos': ['Find out how to make this a subproperty of ' + 'has_qualitative_attribute, as it currently throws the error ' + "'physical_state enumerations cannot be inlined' due to the fact " + 'that we are using an enum here.']} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_mass: Optional[list[Mass]] = Field(default=[], description="""The slot to provide the Mass of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_density: Optional[list[Density]] = Field(default=[], description="""The slot to provide the Density of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + title: Optional[str] = Field(default=None, description="""The slot to provide a title for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -21809,7 +21225,7 @@ class MolarMass(Mass): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""The slot to provide a description for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -21847,25 +21263,35 @@ class MolarMass(Mass): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + 'slot_uri': 'adms:identifier'} }) + has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) - has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Binds the type of a quantifiable attribute to a ' - 'QUDT Quantity Kind instance from the QUDT ' - 'Quantity Kind vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTQuantityKindEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], - 'slot_uri': 'qudt:hasQuantityKind'} }) - unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Restricts the allowable defined terms to the ' - 'QUDT Unit vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTUnitEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], 'recommended': True, - 'slot_uri': 'qudt:unit'} }) + 'slot_uri': 'dcterms:relation'} }) + has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_part: Optional[list[MaterialEntity]] = Field(default=[], description="""The slot to provide the parts of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'recommended': True, + 'slot_uri': 'BFO:0000051'} }) + part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'inverse': 'has_part', + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:isPartOf'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -21874,15 +21300,87 @@ class MolarMass(Mass): 'slot_uri': 'rdf:type'} }) -class Volume(QuantitativeAttribute): +class StartingMaterial(MaterialEntity, ChemicalSubstanceMixin): """ - A measure of regions in three-dimensional space. + A ChemicalSubstance with that has a starting material role in a synthesis. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', - 'close_mappings': ['PATO:0000918'], - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/materials/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'PROCO:0000029', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/', + 'mixins': ['ChemicalSubstanceMixin']}) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + has_molar_equivalent: Optional[list[MolarEquivalent]] = Field(default=[], description="""A slot to provide the MolarEquivalent of a ChemicalSubstance, such as the DissolvingSubstance, Starting Material or Reactant, within the context of a chemical reaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['StartingMaterial', 'Reagent', 'Catalyst'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', + 'UVVisSpectroscopy', + 'DynamicLightScattering', + 'ElectroSprayIonizationMassSpectrometry', + 'ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_ph_value: Optional[list[PHValue]] = Field(default=[], description="""The slot to provide the PHValue of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + composed_of: Optional[list[ChemicalEntity]] = Field(default=[], description="""The slot to provide the chemical entities of which a ChemicalSubstance is composed of.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['AFX:0000940'], + 'domain_of': ['ChemicalSubstanceMixin'], + 'is_a': 'has_part', + 'recommended': True, + 'slot_uri': 'BFO:0000051'} }) + has_amount: Optional[list[AmountOfSubstance]] = Field(default=[], description="""The slot to provide the AmountConcentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'skos:altLabel', + 'todos': ['Should probably rather declared on Entity or in some common ' + 'metadata mixin instead.']} }) + has_physical_state: Optional[PhysicalStateEnum] = Field(default=None, description="""The slot to specify the physical state of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'SIO:000008', + 'todos': ['Find out how to make this a subproperty of ' + 'has_qualitative_attribute, as it currently throws the error ' + "'physical_state enumerations cannot be inlined' due to the fact " + 'that we are using an enum here.']} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_mass: Optional[list[Mass]] = Field(default=[], description="""The slot to provide the Mass of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_density: Optional[list[Density]] = Field(default=[], description="""The slot to provide the Density of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + title: Optional[str] = Field(default=None, description="""The slot to provide a title for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -21921,7 +21419,7 @@ class Volume(QuantitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""The slot to provide a description for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -21959,25 +21457,35 @@ class Volume(QuantitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + 'slot_uri': 'adms:identifier'} }) + has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) - has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Binds the type of a quantifiable attribute to a ' - 'QUDT Quantity Kind instance from the QUDT ' - 'Quantity Kind vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTQuantityKindEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], - 'slot_uri': 'qudt:hasQuantityKind'} }) - unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Restricts the allowable defined terms to the ' - 'QUDT Unit vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTUnitEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], 'recommended': True, - 'slot_uri': 'qudt:unit'} }) + 'slot_uri': 'dcterms:relation'} }) + has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_part: Optional[list[MaterialEntity]] = Field(default=[], description="""The slot to provide the parts of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'recommended': True, + 'slot_uri': 'BFO:0000051'} }) + part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'inverse': 'has_part', + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:isPartOf'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -21986,15 +21494,89 @@ class Volume(QuantitativeAttribute): 'slot_uri': 'rdf:type'} }) -class Density(QuantitativeAttribute): +class Reagent(MaterialEntity, ChemicalSubstanceMixin): """ - A measure of the mass per unit volume of a substance. + A ChemicalSubstance that is consumed or transformed in a ChemicalReaction. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'SIO:001406', - 'close_mappings': ['PATO:0001019'], - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/materials/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'SIO:010411', + 'close_mappings': ['OBI:0001879', 'PROCO:0000029'], + 'exact_mappings': ['NCIT:C802', 'VOC4CAT:0000101'], + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/', + 'mixins': ['ChemicalSubstanceMixin']}) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + has_molar_equivalent: Optional[list[MolarEquivalent]] = Field(default=[], description="""A slot to provide the MolarEquivalent of a ChemicalSubstance, such as the DissolvingSubstance, Starting Material or Reactant, within the context of a chemical reaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['StartingMaterial', 'Reagent', 'Catalyst'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', + 'UVVisSpectroscopy', + 'DynamicLightScattering', + 'ElectroSprayIonizationMassSpectrometry', + 'ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_ph_value: Optional[list[PHValue]] = Field(default=[], description="""The slot to provide the PHValue of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + composed_of: Optional[list[ChemicalEntity]] = Field(default=[], description="""The slot to provide the chemical entities of which a ChemicalSubstance is composed of.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['AFX:0000940'], + 'domain_of': ['ChemicalSubstanceMixin'], + 'is_a': 'has_part', + 'recommended': True, + 'slot_uri': 'BFO:0000051'} }) + has_amount: Optional[list[AmountOfSubstance]] = Field(default=[], description="""The slot to provide the AmountConcentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'skos:altLabel', + 'todos': ['Should probably rather declared on Entity or in some common ' + 'metadata mixin instead.']} }) + has_physical_state: Optional[PhysicalStateEnum] = Field(default=None, description="""The slot to specify the physical state of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'SIO:000008', + 'todos': ['Find out how to make this a subproperty of ' + 'has_qualitative_attribute, as it currently throws the error ' + "'physical_state enumerations cannot be inlined' due to the fact " + 'that we are using an enum here.']} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_mass: Optional[list[Mass]] = Field(default=[], description="""The slot to provide the Mass of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_density: Optional[list[Density]] = Field(default=[], description="""The slot to provide the Density of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + title: Optional[str] = Field(default=None, description="""The slot to provide a title for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -22033,7 +21615,7 @@ class Density(QuantitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""The slot to provide a description for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -22071,25 +21653,35 @@ class Density(QuantitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + 'slot_uri': 'adms:identifier'} }) + has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) - has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Binds the type of a quantifiable attribute to a ' - 'QUDT Quantity Kind instance from the QUDT ' - 'Quantity Kind vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTQuantityKindEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], - 'slot_uri': 'qudt:hasQuantityKind'} }) - unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Restricts the allowable defined terms to the ' - 'QUDT Unit vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTUnitEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], 'recommended': True, - 'slot_uri': 'qudt:unit'} }) + 'slot_uri': 'dcterms:relation'} }) + has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_part: Optional[list[MaterialEntity]] = Field(default=[], description="""The slot to provide the parts of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'recommended': True, + 'slot_uri': 'BFO:0000051'} }) + part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'inverse': 'has_part', + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:isPartOf'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -22098,12 +21690,84 @@ class Density(QuantitativeAttribute): 'slot_uri': 'rdf:type'} }) -class Pressure(QuantitativeAttribute): - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', - 'close_mappings': ['PATO:0001025'], - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/materials/'}) +class ChemicalProduct(MaterialEntity, ChemicalSubstanceMixin): + """ + A chemical substance that is produced by a ChemicalReaction. + """ + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'NCIT:C48810', + 'close_mappings': ['ENVO:2000000'], + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/', + 'mixins': ['ChemicalSubstanceMixin']}) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', + 'UVVisSpectroscopy', + 'DynamicLightScattering', + 'ElectroSprayIonizationMassSpectrometry', + 'ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_ph_value: Optional[list[PHValue]] = Field(default=[], description="""The slot to provide the PHValue of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + composed_of: Optional[list[ChemicalEntity]] = Field(default=[], description="""The slot to provide the chemical entities of which a ChemicalSubstance is composed of.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['AFX:0000940'], + 'domain_of': ['ChemicalSubstanceMixin'], + 'is_a': 'has_part', + 'recommended': True, + 'slot_uri': 'BFO:0000051'} }) + has_amount: Optional[list[AmountOfSubstance]] = Field(default=[], description="""The slot to provide the AmountConcentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalSubstanceMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'skos:altLabel', + 'todos': ['Should probably rather declared on Entity or in some common ' + 'metadata mixin instead.']} }) + has_physical_state: Optional[PhysicalStateEnum] = Field(default=None, description="""The slot to specify the physical state of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'SIO:000008', + 'todos': ['Find out how to make this a subproperty of ' + 'has_qualitative_attribute, as it currently throws the error ' + "'physical_state enumerations cannot be inlined' due to the fact " + 'that we are using an enum here.']} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_mass: Optional[list[Mass]] = Field(default=[], description="""The slot to provide the Mass of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_density: Optional[list[Density]] = Field(default=[], description="""The slot to provide the Density of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + title: Optional[str] = Field(default=None, description="""The slot to provide a title for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -22142,7 +21806,7 @@ class Pressure(QuantitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""The slot to provide a description for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -22180,25 +21844,35 @@ class Pressure(QuantitativeAttribute): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + 'slot_uri': 'adms:identifier'} }) + has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], - 'slot_uri': 'prov:value'} }) - has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Binds the type of a quantifiable attribute to a ' - 'QUDT Quantity Kind instance from the QUDT ' - 'Quantity Kind vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTQuantityKindEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], - 'slot_uri': 'qudt:hasQuantityKind'} }) - unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', - 'description': 'Restricts the allowable defined terms to the ' - 'QUDT Unit vocabulary.', - 'obligation_level': 'RECOMMENDED', - 'range': 'QUDTUnitEnum'}], - 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], 'recommended': True, - 'slot_uri': 'qudt:unit'} }) + 'slot_uri': 'dcterms:relation'} }) + has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'dcterms:relation'} }) + has_part: Optional[list[MaterialEntity]] = Field(default=[], description="""The slot to provide the parts of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'recommended': True, + 'slot_uri': 'BFO:0000051'} }) + part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'inverse': 'has_part', + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:isPartOf'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -22207,59 +21881,35 @@ class Pressure(QuantitativeAttribute): 'slot_uri': 'rdf:type'} }) -class ChemicalReaction(EvaluatedActivity): +class MaterialSample(MaterialisticMixin, EvaluatedEntity): """ - A process that leads to the transformation of one set of chemical substances to another and that is the subject matter of a DataGeneratingActivity. + A Sample that was derived from a previous MaterialSample or some other kind of MaterialEntity. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'SIO:010345', - 'exact_mappings': ['MOP:0000543', 'REX:0000002', 'AFP:0003711'], - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/', - 'narrow_mappings': ['RXNO:0000329'], - 'slot_usage': {'has_pressure': {'description': 'The slot to specify the ' - 'Pressure at which a ' - 'ChemicalReaction takes place.', - 'name': 'has_pressure'}, - 'has_temperature': {'description': 'The slot to specify the ' - 'Temperature at which a ' - 'ChemicalReaction takes ' - 'place.', - 'inlined_as_list': True, - 'name': 'has_temperature'}, - 'related_resource': {'description': 'The slot to specify any ' - 'Documents related to a ' - 'ChemicalReaction.', - 'inlined': True, - 'inlined_as_list': True, - 'multivalued': True, - 'name': 'related_resource', - 'range': 'Resource'}}}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'OBI:0000747', + 'exact_mappings': ['SIO:001050', 'VOC4CAT:0005056'], + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/materials/', + 'mixins': ['MaterialisticMixin'], + 'slot_usage': {'derived_from': {'description': 'The slot to specify the ' + 'MaterialEntity or ' + 'MaterialSample from which the ' + 'MaterialSample was created.', + 'name': 'derived_from'}}}) - used_starting_material: Optional[list[StartingMaterial]] = Field(default=[], description="""The slot to specify the StartingMaterial(s) of a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], - 'is_a': 'had_input_entity', - 'recommended': True, - 'slot_uri': 'RO:0004009'} }) - used_reactant: Optional[list[Reagent]] = Field(default=[], description="""The slot to specify the Reagent(s) of a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], - 'is_a': 'had_input_entity', - 'recommended': True, - 'slot_uri': 'RO:0004009'} }) - generated_product: Optional[list[ChemicalProduct]] = Field(default=[], description="""The slot to specify the Product(s) of a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], - 'is_a': 'had_output_entity', - 'recommended': True, - 'slot_uri': 'RO:0004008'} }) - used_catalyst: Optional[list[Catalyst]] = Field(default=[], description="""The slot to specify the Catalyst of a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], - 'is_a': 'carried_out_by', - 'recommended': True, - 'slot_uri': 'RXNO:0000425'} }) - used_solvent: Optional[list[DissolvingSubstance]] = Field(default=[], description="""The slot to specify the chemical substance that had a solvent role (CHEBI:35223) in a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], - 'is_a': 'carried_out_by', - 'recommended': True, - 'slot_uri': 'prov:wasAssociatedWith'} }) - has_duration: Optional[str] = Field(default=None, description="""A slot to provide the duration of a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], 'slot_uri': 'schema:duration'} }) - used_reactor: Optional[list[Reactor]] = Field(default=[], description="""The slot to specify the reactor used in a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], - 'is_a': 'carried_out_by', - 'recommended': True, - 'slot_uri': 'prov:wasAssociatedWith'} }) - has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to specify the Temperature at which a ChemicalReaction takes place.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + derived_from: Optional[Entity] = Field(default=None, description="""The slot to specify the MaterialEntity or MaterialSample from which the MaterialSample was created.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['BFO:0000050', 'dcterms:partOf'], + 'domain_of': ['MaterialSample'], + 'exact_mappings': ['SIO:000244'], + 'slot_uri': 'prov:wasDerivedFrom'} }) + alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'skos:altLabel', + 'todos': ['Should probably rather declared on Entity or in some common ' + 'metadata mixin instead.']} }) + has_physical_state: Optional[PhysicalStateEnum] = Field(default=None, description="""The slot to specify the physical state of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'SIO:000008', + 'todos': ['Find out how to make this a subproperty of ' + 'has_qualitative_attribute, as it currently throws the error ' + "'physical_state enumerations cannot be inlined' due to the fact " + 'that we are using an enum here.']} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', 'PhotoluminescenceMixin', 'ElectrochemistryMixin', 'PowderXRD', @@ -22272,37 +21922,32 @@ class ChemicalReaction(EvaluatedActivity): 'DynamicLightScattering', 'SizeExclusionChromatography', 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', 'ChemicalReaction', + 'MaterialisticMixin', 'Microkinetics', 'MonteCarlo', 'AqueousStability'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to specify the Pressure at which a ChemicalReaction takes place.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin', 'ChemicalReaction', 'Microkinetics'], + has_mass: Optional[list[Mass]] = Field(default=[], description="""The slot to provide the Mass of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_yield: Optional[list[Yield]] = Field(default=[], description="""A slot to provide the percentage of how much of the ChemicalProduct was produced by a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ReactorPerformanceMeasures', 'ChemicalReaction'], + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_reaction_step: Optional[list[ChemicalReaction]] = Field(default=[], description="""A slot to specify a step (part) of a ChemicalReaction that is itself a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction'], - 'is_a': 'has_part', - 'slot_uri': 'BFO:0000051'} }) - related_resource: Optional[list[Resource]] = Field(default=[], description="""The slot to specify any Documents related to a ChemicalReaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'ChemicalReaction'], 'slot_uri': 'dcterms:relation'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - title: Optional[list[str]] = Field(default=[], description="""The slot to provide a title for the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + has_density: Optional[list[Density]] = Field(default=[], description="""The slot to provide the Density of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:000008'} }) + was_generated_by: Optional[list[Activity]] = Field(default=[], description="""A slot to provide the Activity which created the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'EvaluatedEntity'], 'slot_uri': 'prov:wasGeneratedBy'} }) + title: Optional[str] = Field(default=None, description="""The slot to provide a title for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -22340,9 +21985,8 @@ class ChemicalReaction(EvaluatedActivity): 'SupportiveEntity', 'Surrounding', 'TimeInstant'], - 'notes': ['not in DCAT-AP'], 'slot_uri': 'dcterms:title'} }) - description: Optional[list[str]] = Field(default=[], description="""The slot to provide a description for the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""The slot to provide a description for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -22379,45 +22023,31 @@ class ChemicalReaction(EvaluatedActivity): 'SupportiveEntity', 'Surrounding', 'TimeInstant'], - 'notes': ['not in DCAT-AP'], 'slot_uri': 'dcterms:description'} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the EvaluatedActivity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], - 'notes': ['not in DCAT-AP'], + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], 'slot_uri': 'adms:identifier'} }) - has_part: Optional[list[Activity]] = Field(default=[], description="""The slot to provide an Activity that is part of the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:hasPart'} }) - had_input_entity: Optional[list[Entity]] = Field(default=[], description="""The slot to specify the Entity that was used as an input of an Activity that is to be changed, consumed or transformed.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], - 'in_subset': ['domain_agnostic_core'], - 'notes': ['not in DCAT-AP'], - 'recommended': True, - 'slot_uri': 'prov:used'} }) - had_output_entity: Optional[list[Entity]] = Field(default=[], description="""The slot to specify the Entity that was generated as an output of an Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], - 'in_subset': ['domain_agnostic_core'], - 'notes': ['not in DCAT-AP'], - 'recommended': True, - 'slot_uri': 'prov:generated'} }) - had_input_activity: Optional[list[Activity]] = Field(default=[], description="""The slot to provide a previous Activity that informed the Activity by being causally via a shared participant.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], - 'in_subset': ['domain_agnostic_core'], - 'notes': ['not in DCAT-AP'], - 'recommended': True, - 'slot_uri': 'prov:wasInformedBy'} }) - carried_out_by: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to specify the AgenticEntity that played a certain part in carrying out the Activity, either via having a specific role, function or disposition that was realized in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity'], - 'in_subset': ['domain_agnostic_core'], - 'notes': ['not in DCAT-AP'], - 'recommended': True, - 'slot_uri': 'prov:wasAssociatedWith'} }) has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], - 'notes': ['not in DCAT-AP'], 'recommended': True, 'slot_uri': 'dcterms:relation'} }) has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], - 'notes': ['not in DCAT-AP'], 'recommended': True, 'slot_uri': 'dcterms:relation'} }) - part_of: Optional[list[Activity]] = Field(default=[], description="""The slot to provide an Activity of which the Activity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + has_part: Optional[list[Entity]] = Field(default=[], description="""A slot to provide a part of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'slot_uri': 'dcterms:hasPart'} }) + part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], 'inverse': 'has_part', 'notes': ['not in DCAT-AP'], @@ -22430,39 +22060,25 @@ class ChemicalReaction(EvaluatedActivity): 'slot_uri': 'rdf:type'} }) -class StartingMaterial(MaterialEntity, ChemicalSubstanceMixin): +class Precursor(MaterialSample): """ - A ChemicalSubstance with that has a starting material role in a synthesis. + A MaterialSample that serves as input material in a catalyst Synthesis. + Precursors are consumed or transformed during the preparation process. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'PROCO:0000029', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/', - 'mixins': ['ChemicalSubstanceMixin']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'VOC4CAT:0007794', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', + 'slot_usage': {'precursor_quantity': {'name': 'precursor_quantity', + 'required': True, + 'slot_uri': 'VOC4CAT:0008118'}}}) - has_molar_equivalent: Optional[list[MolarEquivalent]] = Field(default=[], description="""A slot to provide the MolarEquivalent of a ChemicalSubstance, such as the DissolvingSubstance, Starting Material or Reactant, within the context of a chemical reaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['StartingMaterial', 'Reagent', 'Catalyst'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', - 'UVVisSpectroscopy', - 'DynamicLightScattering', - 'ElectroSprayIonizationMassSpectrometry', - 'ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_ph_value: Optional[list[PHValue]] = Field(default=[], description="""The slot to provide the PHValue of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - composed_of: Optional[list[ChemicalEntity]] = Field(default=[], description="""The slot to provide the chemical entities of which a ChemicalSubstance is composed of.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['AFX:0000940'], - 'domain_of': ['ChemicalSubstanceMixin'], - 'is_a': 'has_part', - 'recommended': True, - 'slot_uri': 'BFO:0000051'} }) - has_amount: Optional[list[AmountOfSubstance]] = Field(default=[], description="""The slot to provide the AmountConcentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', + precursor_quantity: list[Mass] = Field(default=..., description="""Quantity of precursor used in synthesis.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Precursor'], + 'is_a': 'has_mass', 'recommended': True, - 'slot_uri': 'SIO:000008'} }) + 'slot_uri': 'VOC4CAT:0008118'} }) + derived_from: Optional[Entity] = Field(default=None, description="""The slot to specify the MaterialEntity or MaterialSample from which the MaterialSample was created.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['BFO:0000050', 'dcterms:partOf'], + 'domain_of': ['MaterialSample'], + 'exact_mappings': ['SIO:000244'], + 'slot_uri': 'prov:wasDerivedFrom'} }) alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'slot_uri': 'skos:altLabel', 'todos': ['Should probably rather declared on Entity or in some common ' @@ -22486,8 +22102,8 @@ class StartingMaterial(MaterialEntity, ChemicalSubstanceMixin): 'DynamicLightScattering', 'SizeExclusionChromatography', 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', 'ChemicalReaction', + 'MaterialisticMixin', 'Microkinetics', 'MonteCarlo', 'AqueousStability'], @@ -22498,7 +22114,7 @@ class StartingMaterial(MaterialEntity, ChemicalSubstanceMixin): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR', 'MaterialisticMixin'], + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) @@ -22506,11 +22122,12 @@ class StartingMaterial(MaterialEntity, ChemicalSubstanceMixin): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin', 'ChemicalReaction', 'Microkinetics'], + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - title: Optional[str] = Field(default=None, description="""The slot to provide a title for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + was_generated_by: Optional[list[Activity]] = Field(default=[], description="""A slot to provide the Activity which created the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'EvaluatedEntity'], 'slot_uri': 'prov:wasGeneratedBy'} }) + title: Optional[str] = Field(default=None, description="""The slot to provide a title for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -22549,7 +22166,7 @@ class StartingMaterial(MaterialEntity, ChemicalSubstanceMixin): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""The slot to provide a description for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""The slot to provide a description for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -22587,7 +22204,8 @@ class StartingMaterial(MaterialEntity, ChemicalSubstanceMixin): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', 'AgenticEntity', 'Dataset', 'DefinedTerm', @@ -22597,7 +22215,7 @@ class StartingMaterial(MaterialEntity, ChemicalSubstanceMixin): 'LicenseDocument', 'Resource'], 'in_subset': ['domain_agnostic_core']} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], 'slot_uri': 'adms:identifier'} }) has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], @@ -22607,9 +22225,8 @@ class StartingMaterial(MaterialEntity, ChemicalSubstanceMixin): 'in_subset': ['domain_agnostic_core'], 'recommended': True, 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[MaterialEntity]] = Field(default=[], description="""The slot to provide the parts of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'recommended': True, - 'slot_uri': 'BFO:0000051'} }) + has_part: Optional[list[Entity]] = Field(default=[], description="""A slot to provide a part of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'slot_uri': 'dcterms:hasPart'} }) part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], 'inverse': 'has_part', @@ -22623,52 +22240,75 @@ class StartingMaterial(MaterialEntity, ChemicalSubstanceMixin): 'slot_uri': 'rdf:type'} }) -class DissolvingSubstance(ChemicalSubstanceMixin, AgenticEntity): +class CatalystSample(MaterialSample): """ - A liquid ChemicalSubstance that dissolves or that is capable of dissolving a ChemicalSubstance. + A MaterialSample that is the product of a catalyst Synthesis. + The specific type of catalyst (e.g. heterogeneous, supported metal) + is expressed via rdf_type using a VOC4CAT term. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'aliases': ['solvent'], - 'class_uri': 'SIO:010417', - 'exact_mappings': ['VOC4CAT:0007246', 'NCIT:C45790'], - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/', - 'mixins': ['ChemicalSubstanceMixin']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'OBI:0000747', + 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/synthesis/', + 'slot_usage': {'derived_from': {'description': 'The Precursor(s) or other ' + 'MaterialSample from which ' + 'this\n' + 'CatalystSample was produced.', + 'name': 'derived_from', + 'range': 'MaterialSample'}}}) - has_percentage_of_total: Optional[list[PercentageOfTotal]] = Field(default=[], description="""A slot to specify the percentage of a specific ChemicalSubstance in relation to the total amount of that same substance used across a multi-step reaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DissolvingSubstance'], + derived_from: Optional[MaterialSample] = Field(default=None, description="""The Precursor(s) or other MaterialSample from which this +CatalystSample was produced.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['BFO:0000050', 'dcterms:partOf'], + 'domain_of': ['MaterialSample'], + 'exact_mappings': ['SIO:000244'], + 'slot_uri': 'prov:wasDerivedFrom'} }) + alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'skos:altLabel', + 'todos': ['Should probably rather declared on Entity or in some common ' + 'metadata mixin instead.']} }) + has_physical_state: Optional[PhysicalStateEnum] = Field(default=None, description="""The slot to specify the physical state of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'slot_uri': 'SIO:000008', + 'todos': ['Find out how to make this a subproperty of ' + 'has_qualitative_attribute, as it currently throws the error ' + "'physical_state enumerations cannot be inlined' due to the fact " + 'that we are using an enum here.']} }) + has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', + 'PhotoluminescenceMixin', + 'ElectrochemistryMixin', + 'PowderXRD', + 'SingleCrystalXRD', + 'XRayAbsorptionSpectroscopy', + 'InfraredSpectroscopy', + 'DRIFTS', + 'RamanSpectroscopy', + 'NMRSpectroscopy', + 'DynamicLightScattering', + 'SizeExclusionChromatography', + 'HighPerformanceLiquidChromatographyMassSpectrometry', + 'ChemicalReaction', + 'MaterialisticMixin', + 'Microkinetics', + 'MonteCarlo', + 'AqueousStability'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', - 'UVVisSpectroscopy', - 'DynamicLightScattering', - 'ElectroSprayIonizationMassSpectrometry', - 'ChemicalSubstanceMixin'], + has_mass: Optional[list[Mass]] = Field(default=[], description="""The slot to provide the Mass of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_ph_value: Optional[list[PHValue]] = Field(default=[], description="""The slot to provide the PHValue of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'ChemicalSubstanceMixin'], + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - composed_of: Optional[list[ChemicalEntity]] = Field(default=[], description="""The slot to provide the chemical entities of which a ChemicalSubstance is composed of.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['AFX:0000940'], - 'domain_of': ['ChemicalSubstanceMixin'], - 'is_a': 'has_part', + has_density: Optional[list[Density]] = Field(default=[], description="""The slot to provide the Density of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], + 'is_a': 'has_quantitative_attribute', 'recommended': True, - 'slot_uri': 'BFO:0000051'} }) - has_amount: Optional[list[AmountOfSubstance]] = Field(default=[], description="""The slot to provide the AmountConcentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalSubstanceMixin'], + 'slot_uri': 'SIO:000008'} }) + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) - title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + was_generated_by: Optional[list[Activity]] = Field(default=[], description="""A slot to provide the Activity which created the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'EvaluatedEntity'], 'slot_uri': 'prov:wasGeneratedBy'} }) + title: Optional[str] = Field(default=None, description="""The slot to provide a title for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -22707,7 +22347,7 @@ class DissolvingSubstance(ChemicalSubstanceMixin, AgenticEntity): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""The slot to provide a description for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -22745,92 +22385,51 @@ class DissolvingSubstance(ChemicalSubstanceMixin, AgenticEntity): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for an Instrument.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], - 'slot_uri': 'adms:identifier'} }) - has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to specify parts of an AgenticEntity that are themselves AgenticEntities.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'inverse': 'has_part', - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:isPartOf'} }) - type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], - 'slot_uri': 'dcterms:type'} }) - rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'rdf:type'} }) - alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], - 'slot_uri': 'skos:altLabel', - 'todos': ['Should probably rather declared on Entity or in some common ' - 'metadata mixin instead.']} }) - has_physical_state: Optional[PhysicalStateEnum] = Field(default=None, description="""The slot to specify the physical state of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], - 'slot_uri': 'SIO:000008', - 'todos': ['Find out how to make this a subproperty of ' - 'has_qualitative_attribute, as it currently throws the error ' - "'physical_state enumerations cannot be inlined' due to the fact " - 'that we are using an enum here.']} }) - has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', - 'PhotoluminescenceMixin', - 'ElectrochemistryMixin', - 'PowderXRD', - 'SingleCrystalXRD', - 'XRayAbsorptionSpectroscopy', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'DynamicLightScattering', - 'SizeExclusionChromatography', - 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', - 'ChemicalReaction', - 'Microkinetics', - 'MonteCarlo', - 'AqueousStability'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_mass: Optional[list[Mass]] = Field(default=[], description="""The slot to provide the Mass of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR', 'MaterialisticMixin'], - 'is_a': 'has_quantitative_attribute', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + 'slot_uri': 'adms:identifier'} }) + has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_density: Optional[list[Density]] = Field(default=[], description="""The slot to provide the Density of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], - 'is_a': 'has_quantitative_attribute', + 'slot_uri': 'dcterms:relation'} }) + has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin', 'ChemicalReaction', 'Microkinetics'], - 'is_a': 'has_quantitative_attribute', + 'slot_uri': 'dcterms:relation'} }) + has_part: Optional[list[Entity]] = Field(default=[], description="""A slot to provide a part of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'slot_uri': 'dcterms:hasPart'} }) + part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + 'in_subset': ['domain_agnostic_core'], + 'inverse': 'has_part', + 'notes': ['not in DCAT-AP'], + 'slot_uri': 'dcterms:isPartOf'} }) + type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], + 'slot_uri': 'dcterms:type'} }) + rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], + 'in_subset': ['domain_agnostic_core'], 'recommended': True, - 'slot_uri': 'SIO:000008'} }) + 'slot_uri': 'rdf:type'} }) -class Reagent(MaterialEntity, ChemicalSubstanceMixin): +class SubstanceSample(MaterialSample, ChemicalSubstanceMixin): """ - A ChemicalSubstance that is consumed or transformed in a ChemicalReaction. + A MaterialSample derived from a chemical substance that is of interest in an analytical procedure. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'SIO:010411', - 'close_mappings': ['OBI:0001879', 'PROCO:0000029'], - 'exact_mappings': ['NCIT:C802', 'VOC4CAT:0000101'], - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'aliases': ['analyte'], + 'class_uri': 'SIO:001378', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/', 'mixins': ['ChemicalSubstanceMixin']}) - has_molar_equivalent: Optional[list[MolarEquivalent]] = Field(default=[], description="""A slot to provide the MolarEquivalent of a ChemicalSubstance, such as the DissolvingSubstance, Starting Material or Reactant, within the context of a chemical reaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['StartingMaterial', 'Reagent', 'Catalyst'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'UVVisSpectroscopy', 'DynamicLightScattering', @@ -22852,6 +22451,10 @@ class Reagent(MaterialEntity, ChemicalSubstanceMixin): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) + derived_from: Optional[Entity] = Field(default=None, description="""The slot to specify the MaterialEntity or MaterialSample from which the MaterialSample was created.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['BFO:0000050', 'dcterms:partOf'], + 'domain_of': ['MaterialSample'], + 'exact_mappings': ['SIO:000244'], + 'slot_uri': 'prov:wasDerivedFrom'} }) alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'slot_uri': 'skos:altLabel', 'todos': ['Should probably rather declared on Entity or in some common ' @@ -22875,8 +22478,8 @@ class Reagent(MaterialEntity, ChemicalSubstanceMixin): 'DynamicLightScattering', 'SizeExclusionChromatography', 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', 'ChemicalReaction', + 'MaterialisticMixin', 'Microkinetics', 'MonteCarlo', 'AqueousStability'], @@ -22887,7 +22490,7 @@ class Reagent(MaterialEntity, ChemicalSubstanceMixin): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR', 'MaterialisticMixin'], + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) @@ -22895,11 +22498,12 @@ class Reagent(MaterialEntity, ChemicalSubstanceMixin): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin', 'ChemicalReaction', 'Microkinetics'], + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - title: Optional[str] = Field(default=None, description="""The slot to provide a title for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + was_generated_by: Optional[list[Activity]] = Field(default=[], description="""A slot to provide the Activity which created the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'EvaluatedEntity'], 'slot_uri': 'prov:wasGeneratedBy'} }) + title: Optional[str] = Field(default=None, description="""The slot to provide a title for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -22938,7 +22542,7 @@ class Reagent(MaterialEntity, ChemicalSubstanceMixin): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""The slot to provide a description for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""The slot to provide a description for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -22976,7 +22580,8 @@ class Reagent(MaterialEntity, ChemicalSubstanceMixin): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', 'AgenticEntity', 'Dataset', 'DefinedTerm', @@ -22986,7 +22591,7 @@ class Reagent(MaterialEntity, ChemicalSubstanceMixin): 'LicenseDocument', 'Resource'], 'in_subset': ['domain_agnostic_core']} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], 'slot_uri': 'adms:identifier'} }) has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], @@ -22996,9 +22601,8 @@ class Reagent(MaterialEntity, ChemicalSubstanceMixin): 'in_subset': ['domain_agnostic_core'], 'recommended': True, 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[MaterialEntity]] = Field(default=[], description="""The slot to provide the parts of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'recommended': True, - 'slot_uri': 'BFO:0000051'} }) + has_part: Optional[list[Entity]] = Field(default=[], description="""A slot to provide a part of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'slot_uri': 'dcterms:hasPart'} }) part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], 'inverse': 'has_part', @@ -23012,15 +22616,15 @@ class Reagent(MaterialEntity, ChemicalSubstanceMixin): 'slot_uri': 'rdf:type'} }) -class ChemicalProduct(MaterialEntity, ChemicalSubstanceMixin): +class PolymerSample(SubstanceSample, PolymerMixin): """ - A chemical substance that is produced by a ChemicalReaction. + A SubstanceSample derived from a Polymer. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'NCIT:C48810', - 'close_mappings': ['ENVO:2000000'], - 'exact_mappings': ['VOC4CAT:0000194'], - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/', - 'mixins': ['ChemicalSubstanceMixin']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'SIO:001378', + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/', + 'mixins': ['PolymerMixin'], + 'todos': ['Find a better mapping, as it is currently mapped to same ontology ' + 'class as its parent.']}) has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'UVVisSpectroscopy', @@ -23043,6 +22647,10 @@ class ChemicalProduct(MaterialEntity, ChemicalSubstanceMixin): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) + derived_from: Optional[Entity] = Field(default=None, description="""The slot to specify the MaterialEntity or MaterialSample from which the MaterialSample was created.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['BFO:0000050', 'dcterms:partOf'], + 'domain_of': ['MaterialSample'], + 'exact_mappings': ['SIO:000244'], + 'slot_uri': 'prov:wasDerivedFrom'} }) alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'slot_uri': 'skos:altLabel', 'todos': ['Should probably rather declared on Entity or in some common ' @@ -23066,8 +22674,8 @@ class ChemicalProduct(MaterialEntity, ChemicalSubstanceMixin): 'DynamicLightScattering', 'SizeExclusionChromatography', 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', 'ChemicalReaction', + 'MaterialisticMixin', 'Microkinetics', 'MonteCarlo', 'AqueousStability'], @@ -23078,7 +22686,7 @@ class ChemicalProduct(MaterialEntity, ChemicalSubstanceMixin): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR', 'MaterialisticMixin'], + has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) @@ -23086,11 +22694,12 @@ class ChemicalProduct(MaterialEntity, ChemicalSubstanceMixin): 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin', 'ChemicalReaction', 'Microkinetics'], + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - title: Optional[str] = Field(default=None, description="""The slot to provide a title for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + was_generated_by: Optional[list[Activity]] = Field(default=[], description="""A slot to provide the Activity which created the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'EvaluatedEntity'], 'slot_uri': 'prov:wasGeneratedBy'} }) + title: Optional[str] = Field(default=None, description="""The slot to provide a title for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -23129,7 +22738,7 @@ class ChemicalProduct(MaterialEntity, ChemicalSubstanceMixin): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:title'} }) - description: Optional[str] = Field(default=None, description="""The slot to provide a description for the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + description: Optional[str] = Field(default=None, description="""The slot to provide a description for the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', 'Any', @@ -23167,7 +22776,8 @@ class ChemicalProduct(MaterialEntity, ChemicalSubstanceMixin): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', 'AgenticEntity', 'Dataset', 'DefinedTerm', @@ -23177,7 +22787,7 @@ class ChemicalProduct(MaterialEntity, ChemicalSubstanceMixin): 'LicenseDocument', 'Resource'], 'in_subset': ['domain_agnostic_core']} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], + other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier of the EvaluatedEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], 'slot_uri': 'adms:identifier'} }) has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], @@ -23187,9 +22797,8 @@ class ChemicalProduct(MaterialEntity, ChemicalSubstanceMixin): 'in_subset': ['domain_agnostic_core'], 'recommended': True, 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[MaterialEntity]] = Field(default=[], description="""The slot to provide the parts of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'recommended': True, - 'slot_uri': 'BFO:0000051'} }) + has_part: Optional[list[Entity]] = Field(default=[], description="""A slot to provide a part of the Entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], + 'slot_uri': 'dcterms:hasPart'} }) part_of: Optional[list[Entity]] = Field(default=[], description="""The slot to specify an Entity of which the Entity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], 'in_subset': ['domain_agnostic_core'], 'inverse': 'has_part', @@ -23203,51 +22812,126 @@ class ChemicalProduct(MaterialEntity, ChemicalSubstanceMixin): 'slot_uri': 'rdf:type'} }) -class Catalyst(ChemicalSubstanceMixin, AgenticEntity): +class Temperature(QuantitativeAttribute): """ - A ChemicalSubstance or MaterialEntity that initiates or accelerates a ChemicalReaction without itself being affected. + A physical quantity that quantitatively expresses the attribute of hotness or coldness. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'SIO:010344', - 'close_mappings': ['CHEBI:35223'], - 'exact_mappings': ['VOC4CAT:0000194', 'NCIT:C48810'], - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/', - 'mixins': ['ChemicalSubstanceMixin']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', + 'close_mappings': ['PATO:0000146'], + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/materials/'}) - has_molar_equivalent: Optional[list[MolarEquivalent]] = Field(default=[], description="""A slot to provide the MolarEquivalent of a ChemicalSubstance, such as the DissolvingSubstance, Starting Material or Reactant, within the context of a chemical reaction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['StartingMaterial', 'Reagent', 'Catalyst'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_concentration: Optional[list[Concentration]] = Field(default=[], description="""The slot to provide the Concentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', - 'UVVisSpectroscopy', - 'DynamicLightScattering', - 'ElectroSprayIonizationMassSpectrometry', - 'ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_ph_value: Optional[list[PHValue]] = Field(default=[], description="""The slot to provide the PHValue of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PrecipitationMixin', 'ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - composed_of: Optional[list[ChemicalEntity]] = Field(default=[], description="""The slot to provide the chemical entities of which a ChemicalSubstance is composed of.""", json_schema_extra = { "linkml_meta": {'close_mappings': ['AFX:0000940'], - 'domain_of': ['ChemicalSubstanceMixin'], - 'is_a': 'has_part', - 'recommended': True, - 'slot_uri': 'BFO:0000051'} }) - has_amount: Optional[list[AmountOfSubstance]] = Field(default=[], description="""The slot to provide the AmountConcentration of a ChemicalSubstance.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalSubstanceMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', + title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + 'Activity', 'AgenticEntity', + 'Any', + 'Attribution', + 'Catalogue', + 'CatalogueRecord', + 'ChecksumAlgorithm', + 'Concept', + 'ConceptScheme', + 'DataService', 'Dataset', + 'DatasetSeries', 'DefinedTerm', + 'Distribution', 'Document', 'Entity', + 'Frequency', + 'Geometry', + 'Identifier', 'LegalResource', 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) + 'LinguisticSystem', + 'MediaType', + 'MediaTypeOrExtent', + 'PeriodOfTime', + 'Plan', + 'Policy', + 'ProvenanceStatement', + 'QualitativeAttribute', + 'QuantitativeAttribute', + 'Resource', + 'RightsStatement', + 'Role', + 'Standard', + 'SupportiveEntity', + 'Surrounding', + 'TimeInstant'], + 'slot_uri': 'dcterms:title'} }) + description: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', + 'Activity', + 'AgenticEntity', + 'Any', + 'Attribution', + 'Catalogue', + 'CatalogueRecord', + 'ChecksumAlgorithm', + 'Concept', + 'ConceptScheme', + 'DataService', + 'Dataset', + 'DatasetSeries', + 'Distribution', + 'Document', + 'Entity', + 'Frequency', + 'Geometry', + 'Identifier', + 'LegalResource', + 'LicenseDocument', + 'LinguisticSystem', + 'MediaType', + 'MediaTypeOrExtent', + 'PeriodOfTime', + 'Plan', + 'Policy', + 'ProvenanceStatement', + 'QualitativeAttribute', + 'QuantitativeAttribute', + 'Resource', + 'RightsStatement', + 'Role', + 'Standard', + 'SupportiveEntity', + 'Surrounding', + 'TimeInstant'], + 'slot_uri': 'dcterms:description'} }) + value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], + 'in_subset': ['domain_agnostic_core'], + 'slot_uri': 'prov:value'} }) + has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', + 'description': 'Binds the type of a quantifiable attribute to a ' + 'QUDT Quantity Kind instance from the QUDT ' + 'Quantity Kind vocabulary.', + 'obligation_level': 'RECOMMENDED', + 'range': 'QUDTQuantityKindEnum'}], + 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], + 'slot_uri': 'qudt:hasQuantityKind'} }) + unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', + 'description': 'Restricts the allowable defined terms to the ' + 'QUDT Unit vocabulary.', + 'obligation_level': 'RECOMMENDED', + 'range': 'QUDTUnitEnum'}], + 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], + 'recommended': True, + 'slot_uri': 'qudt:unit'} }) + type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], + 'slot_uri': 'dcterms:type'} }) + rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], + 'in_subset': ['domain_agnostic_core'], + 'recommended': True, + 'slot_uri': 'rdf:type'} }) + + +class Mass(QuantitativeAttribute): + """ + The strength of a body's gravitational attraction to other bodies. + """ + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', + 'close_mappings': ['PATO:0000125'], + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/materials/'}) + title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -23325,144 +23009,41 @@ class Catalyst(ChemicalSubstanceMixin, AgenticEntity): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for an Instrument.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], - 'slot_uri': 'adms:identifier'} }) - has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], 'in_subset': ['domain_agnostic_core'], + 'slot_uri': 'prov:value'} }) + has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', + 'description': 'Binds the type of a quantifiable attribute to a ' + 'QUDT Quantity Kind instance from the QUDT ' + 'Quantity Kind vocabulary.', + 'obligation_level': 'RECOMMENDED', + 'range': 'QUDTQuantityKindEnum'}], + 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], + 'slot_uri': 'qudt:hasQuantityKind'} }) + unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', + 'description': 'Restricts the allowable defined terms to the ' + 'QUDT Unit vocabulary.', + 'obligation_level': 'RECOMMENDED', + 'range': 'QUDTUnitEnum'}], + 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to specify parts of an AgenticEntity that are themselves AgenticEntities.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'inverse': 'has_part', - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:isPartOf'} }) + 'slot_uri': 'qudt:unit'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], 'in_subset': ['domain_agnostic_core'], 'recommended': True, 'slot_uri': 'rdf:type'} }) - alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], - 'slot_uri': 'skos:altLabel', - 'todos': ['Should probably rather declared on Entity or in some common ' - 'metadata mixin instead.']} }) - has_physical_state: Optional[PhysicalStateEnum] = Field(default=None, description="""The slot to specify the physical state of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], - 'slot_uri': 'SIO:000008', - 'todos': ['Find out how to make this a subproperty of ' - 'has_qualitative_attribute, as it currently throws the error ' - "'physical_state enumerations cannot be inlined' due to the fact " - 'that we are using an enum here.']} }) - has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', - 'PhotoluminescenceMixin', - 'ElectrochemistryMixin', - 'PowderXRD', - 'SingleCrystalXRD', - 'XRayAbsorptionSpectroscopy', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'DynamicLightScattering', - 'SizeExclusionChromatography', - 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', - 'ChemicalReaction', - 'Microkinetics', - 'MonteCarlo', - 'AqueousStability'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_mass: Optional[list[Mass]] = Field(default=[], description="""The slot to provide the Mass of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR', 'MaterialisticMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_density: Optional[list[Density]] = Field(default=[], description="""The slot to provide the Density of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin', 'ChemicalReaction', 'Microkinetics'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) -class Reactor(MaterialisticMixin, Device): +class MolarMass(Mass): """ - A reactor is a container for controlling a biological or chemical reaction or process. + A Mass (physical quality) that quantifies the mass of a homogeneous ChemicalSubstance containing 6.02 x 10^23 atoms or molecules. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'AFE:0000153', - 'exact_mappings': ['VOC4CAT:0007017'], - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/', - 'mixins': ['MaterialisticMixin']}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'AFR:0002409', + 'close_mappings': ['PATO:0001681'], + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/entity/'}) - alternative_label: Optional[str] = Field(default=None, description="""The slot to specify an alternative label, name or title for a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], - 'slot_uri': 'skos:altLabel', - 'todos': ['Should probably rather declared on Entity or in some common ' - 'metadata mixin instead.']} }) - has_physical_state: Optional[PhysicalStateEnum] = Field(default=None, description="""The slot to specify the physical state of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], - 'slot_uri': 'SIO:000008', - 'todos': ['Find out how to make this a subproperty of ' - 'has_qualitative_attribute, as it currently throws the error ' - "'physical_state enumerations cannot be inlined' due to the fact " - 'that we are using an enum here.']} }) - has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', - 'PhotoluminescenceMixin', - 'ElectrochemistryMixin', - 'PowderXRD', - 'SingleCrystalXRD', - 'XRayAbsorptionSpectroscopy', - 'InfraredSpectroscopy', - 'DRIFTS', - 'RamanSpectroscopy', - 'NMRSpectroscopy', - 'DynamicLightScattering', - 'SizeExclusionChromatography', - 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', - 'ChemicalReaction', - 'Microkinetics', - 'MonteCarlo', - 'AqueousStability'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_mass: Optional[list[Mass]] = Field(default=[], description="""The slot to provide the Mass of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_volume: Optional[list[Volume]] = Field(default=[], description="""The slot to provide the Volume of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CSTR', 'MaterialisticMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_density: Optional[list[Density]] = Field(default=[], description="""The slot to provide the Density of a MaterialEntity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin', 'ChemicalReaction', 'Microkinetics'], - 'is_a': 'has_quantitative_attribute', - 'recommended': True, - 'slot_uri': 'SIO:000008'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', - 'AgenticEntity', - 'Dataset', - 'DefinedTerm', - 'Document', - 'Entity', - 'LegalResource', - 'LicenseDocument', - 'Resource'], - 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -23540,23 +23121,25 @@ class Reactor(MaterialisticMixin, Device): 'Surrounding', 'TimeInstant'], 'slot_uri': 'dcterms:description'} }) - other_identifier: Optional[list[Identifier]] = Field(default=[], description="""A slot to provide a secondary identifier for a Device.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Dataset', 'Entity'], - 'slot_uri': 'adms:identifier'} }) - has_qualitative_attribute: Optional[list[QualitativeAttribute]] = Field(default=[], description="""The slot to relate a qualitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_quantitative_attribute: Optional[list[QuantitativeAttribute]] = Field(default=[], description="""The slot to relate a quantitative attribute to an EvaluatedEntity, EvaluatedActivity or AgenticEntity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], + value: float = Field(default=..., description="""The slot to provide the literal value of the QuantitativeAttribute.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QualitativeAttribute', 'QuantitativeAttribute'], 'in_subset': ['domain_agnostic_core'], + 'slot_uri': 'prov:value'} }) + has_quantity_type: str = Field(default=..., description="""The type of quality that is quantifiable according to the QUDT ontology.""", json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', + 'description': 'Binds the type of a quantifiable attribute to a ' + 'QUDT Quantity Kind instance from the QUDT ' + 'Quantity Kind vocabulary.', + 'obligation_level': 'RECOMMENDED', + 'range': 'QUDTQuantityKindEnum'}], + 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], + 'slot_uri': 'qudt:hasQuantityKind'} }) + unit: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'bindings': [{'binds_value_of': 'id', + 'description': 'Restricts the allowable defined terms to the ' + 'QUDT Unit vocabulary.', + 'obligation_level': 'RECOMMENDED', + 'range': 'QUDTUnitEnum'}], + 'domain_of': ['QuantitativeRange', 'QuantitativeAttribute'], 'recommended': True, - 'slot_uri': 'dcterms:relation'} }) - has_part: Optional[list[Device]] = Field(default=[], description="""The slot to specify parts of a Device that are themselves Devices.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Catalogue', 'Entity'], - 'slot_uri': 'dcterms:hasPart'} }) - part_of: Optional[list[AgenticEntity]] = Field(default=[], description="""The slot to provide the AgenticEntity of which theAgenticEntity is a part.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', 'AgenticEntity', 'Entity'], - 'in_subset': ['domain_agnostic_core'], - 'inverse': 'has_part', - 'notes': ['not in DCAT-AP'], - 'slot_uri': 'dcterms:isPartOf'} }) + 'slot_uri': 'qudt:unit'} }) type: Optional[DefinedTerm] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], 'slot_uri': 'dcterms:type'} }) rdf_type: Optional[DefinedTerm] = Field(default=None, description="""The slot to specify the ontology class that is instantiated by an entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ClassifierMixin'], @@ -23565,13 +23148,13 @@ class Reactor(MaterialisticMixin, Device): 'slot_uri': 'rdf:type'} }) -class Yield(QuantitativeAttribute): +class Volume(QuantitativeAttribute): """ - A dimensionless physical quantity describing the fraction of a product B that is formed from a reactant A taking into account the stoichiometry. If A fully reacts to B without side-reactions, the yield of product B is 1 (or 100 %). + A measure of regions in three-dimensional space. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'CHMO:0002855', - 'exact_mappings': ['VOC4CAT:0005005'], - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', + 'close_mappings': ['PATO:0000918'], + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/materials/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -23677,12 +23260,13 @@ class Yield(QuantitativeAttribute): 'slot_uri': 'rdf:type'} }) -class MolarEquivalent(QuantitativeAttribute): +class Density(QuantitativeAttribute): """ - A dimensionless ratio that quantifies the stoichiometric proportion of a chemical substance relative to a reference substance in a chemical reaction. + A measure of the mass per unit volume of a substance. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/'}) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'SIO:001406', + 'close_mappings': ['PATO:0001019'], + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/materials/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -23788,12 +23372,10 @@ class MolarEquivalent(QuantitativeAttribute): 'slot_uri': 'rdf:type'} }) -class PercentageOfTotal(QuantitativeAttribute): - """ - A dimensionless ratio that quantifies the stoichiometric proportion of a chemical substance relative to a reference substance in a chemical reaction. - """ +class Pressure(QuantitativeAttribute): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'qudt:Quantity', - 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/chemistry/reaction/'}) + 'close_mappings': ['PATO:0001025'], + 'from_schema': 'https://w3id.org/nfdi-de/dcat-ap-plus/materials/'}) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -24001,7 +23583,7 @@ class SubstanceSampleCharacterizationDataset(Dataset): 'slot_uri': 'dcterms:publisher'} }) qualified_attribution: Optional[list[Attribution]] = Field(default=[], description="""An Agent having some form of responsibility for the resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset'], 'slot_uri': 'prov:qualifiedAttribution'} }) qualified_relation: Optional[list[Relationship]] = Field(default=[], description="""A description of a relationship with another resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset'], 'slot_uri': 'dcat:qualifiedRelation'} }) - related_resource: Optional[list[Resource]] = Field(default=[], description="""A related resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'ChemicalReaction'], 'slot_uri': 'dcterms:relation'} }) + related_resource: Optional[list[Resource]] = Field(default=[], description="""A related resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'Dataset'], 'slot_uri': 'dcterms:relation'} }) release_date: Optional[date] = Field(default=None, description="""The date of formal issuance (e.g., publication) of the Dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Catalogue', 'Dataset', 'DatasetSeries', 'Distribution'], 'slot_uri': 'dcterms:issued'} }) sample: Optional[list[Distribution]] = Field(default=[], description="""A sample distribution of the dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset'], 'slot_uri': 'adms:sample'} }) @@ -24061,7 +23643,8 @@ class SubstanceSampleCharacterizationDataset(Dataset): was_generated_by: list[SubstanceSampleCharacterization] = Field(default=..., description="""The slot to specify the SubstanceCharacterization activity that produced this dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'EvaluatedEntity'], 'notes': ['stricter than DCAT-AP'], 'slot_uri': 'prov:wasGeneratedBy'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', 'AgenticEntity', 'Dataset', 'DefinedTerm', @@ -24183,7 +23766,7 @@ class ReactionMonitoringDataset(Dataset): 'slot_uri': 'dcterms:publisher'} }) qualified_attribution: Optional[list[Attribution]] = Field(default=[], description="""An Agent having some form of responsibility for the resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset'], 'slot_uri': 'prov:qualifiedAttribution'} }) qualified_relation: Optional[list[Relationship]] = Field(default=[], description="""A description of a relationship with another resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset'], 'slot_uri': 'dcat:qualifiedRelation'} }) - related_resource: Optional[list[Resource]] = Field(default=[], description="""A related resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'ChemicalReaction'], 'slot_uri': 'dcterms:relation'} }) + related_resource: Optional[list[Resource]] = Field(default=[], description="""A related resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'Dataset'], 'slot_uri': 'dcterms:relation'} }) release_date: Optional[date] = Field(default=None, description="""The date of formal issuance (e.g., publication) of the Dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Catalogue', 'Dataset', 'DatasetSeries', 'Distribution'], 'slot_uri': 'dcterms:issued'} }) sample: Optional[list[Distribution]] = Field(default=[], description="""A sample distribution of the dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset'], 'slot_uri': 'adms:sample'} }) @@ -24243,7 +23826,8 @@ class ReactionMonitoringDataset(Dataset): was_generated_by: list[ReactionMonitoring] = Field(default=..., description="""The slot to specify the ReactionMonitoring activity that produced this dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'EvaluatedEntity'], 'notes': ['stricter than DCAT-AP'], 'slot_uri': 'prov:wasGeneratedBy'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', 'AgenticEntity', 'Dataset', 'DefinedTerm', @@ -24296,7 +23880,8 @@ class SubstanceSampleCharacterization(DataGeneratingActivity): occurred_in: Optional[Surrounding] = Field(default=None, description="""The slot to specify the Surrounding in which an Activity took place.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataGeneratingActivity'], 'in_subset': ['domain_agnostic_core'], 'slot_uri': 'prov:atLocation'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', 'AgenticEntity', 'Dataset', 'DefinedTerm', @@ -24464,7 +24049,8 @@ class ReactionMonitoring(DataGeneratingActivity): occurred_in: Optional[Surrounding] = Field(default=None, description="""The slot to specify the Surrounding in which an Activity took place.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataGeneratingActivity'], 'in_subset': ['domain_agnostic_core'], 'slot_uri': 'prov:atLocation'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', 'AgenticEntity', 'Dataset', 'DefinedTerm', @@ -24707,9 +24293,14 @@ class MaterialDescriptorMixin(ConfiguredBaseModel): material_composition: Optional[list[str]] = Field(default=[], description="""Chemical composition of the simulated material (e.g. \"Fe2O3\", \"Pt/CeO2\"). Use empirical formula or SMILES for molecular systems.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:material_composition'} }) crystal_structure: Optional[list[str]] = Field(default=[], description="""Crystal structure of the simulated material, including space group and -lattice parameters (e.g. \"Fm-3m, a=3.92 A for Pt\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], 'slot_uri': 'SIO:001100'} }) +lattice parameters (e.g. \"Fm-3m, a=3.92 A for Pt\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:001100'} }) class DFTSettingsMixin(ConfiguredBaseModel): @@ -24722,16 +24313,23 @@ class DFTSettingsMixin(ConfiguredBaseModel): 'mixin': True}) energy_cutoff: Optional[list[float]] = Field(default=[], description="""Plane-wave kinetic energy cutoff for the basis set expansion.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin', 'DFT'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:energy_cutoff', 'unit': {'ucum_code': 'eV'}} }) convergence_criteria: Optional[list[str]] = Field(default=[], description="""Convergence thresholds applied during self-consistent field (SCF) and/or geometry optimisation (e.g. energy < 1e-5 eV, forces < 0.02 eV/A).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin', 'DFT'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:convergence_criteria'} }) k_point_mesh: Optional[list[str]] = Field(default=[], description="""Monkhorst-Pack k-point mesh used for Brillouin zone sampling -(e.g. \"4x4x1\" for a surface slab, \"8x8x8\" for a bulk cell).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin'], 'slot_uri': 'coremeta4cat:k_point_mesh'} }) +(e.g. \"4x4x1\" for a surface slab, \"8x8x8\" for a bulk cell).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:k_point_mesh'} }) -class Simulation(DataGeneratingActivity): +class Simulation(CatalysisDataGeneratingActivity): """ A DataGeneratingActivity in which a catalyst, catalytic material, or catalytic process is modelled computationally. @@ -24775,14 +24373,28 @@ class Simulation(DataGeneratingActivity): 'realized_plan': {'description': 'The SimulationMethod ' '(protocol) realized in this ' 'Simulation.', + 'inlined': True, 'name': 'realized_plan', 'range': 'SimulationMethod', 'required': True}}}) software_package: list[str] = Field(default=..., description="""Software package or code used for the simulation (e.g. VASP, Quantum ESPRESSO, -LAMMPS, CP2K, ORCA, Zacros). Include version number where possible.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Simulation'], 'slot_uri': 'coremeta4cat:software_package'} }) +LAMMPS, CP2K, ORCA, Zacros). Include version number where possible.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Simulation'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:software_package'} }) calculated_property: list[CalculatedProperty] = Field(default=..., description="""A property computed by this Simulation, provided as a CalculatedProperty -instance. Multiple properties may be computed in a single simulation run.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Simulation'], 'slot_uri': 'coremeta4cat:calculated_property'} }) +instance. Multiple properties may be computed in a single simulation run.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Simulation'], + 'is_a': 'had_output_entity', + 'recommended': True, + 'slot_uri': 'coremeta4cat:calculated_property'} }) + activity_designator: Literal["Simulation"] = Field(default="Simulation", description="""Internal type designator for CatalysisDataGeneratingActivity subclasses +(Synthesis, Characterization, Simulation). Only needs to be set by hand +when nesting one of these inside another object's was_generated_by list +(e.g. in a combined CatalysisDataset file) -- LinkML fills it in +automatically when a class is instantiated directly.""", json_schema_extra = { "linkml_meta": {'designates_type': True, + 'domain_of': ['CatalysisDataGeneratingActivity'], + 'slot_uri': 'rdf:type'} }) evaluated_entity: Optional[list[EvaluatedEntity]] = Field(default=[], description="""The catalyst model, surface slab, or molecule being simulated.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataGeneratingActivity'], 'in_subset': ['domain_agnostic_core'], 'is_a': 'had_input_entity', @@ -24799,7 +24411,8 @@ class Simulation(DataGeneratingActivity): occurred_in: Optional[Surrounding] = Field(default=None, description="""The slot to specify the Surrounding in which an Activity took place.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DataGeneratingActivity'], 'in_subset': ['domain_agnostic_core'], 'slot_uri': 'prov:atLocation'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', 'AgenticEntity', 'Dataset', 'DefinedTerm', @@ -24939,7 +24552,7 @@ class Simulation(DataGeneratingActivity): 'slot_uri': 'rdf:type'} }) -class SimulationMethod(Plan): +class SimulationMethod(CatalysisPlan): """ Abstract Plan describing the computational method (protocol) used in a Simulation. Concrete subclasses carry method-specific parameter slots. @@ -24949,6 +24562,17 @@ class SimulationMethod(Plan): 'class_uri': 'OBI:0000272', 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/simulation/'}) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -25036,7 +24660,7 @@ class SimulationMethod(Plan): class DFT(SimulationMethod): """ - Density functional theory � a quantum mechanical method for calculating + Density functional theory — a quantum mechanical method for calculating the electronic structure of atoms, molecules, and periodic solids. The most widely used ab initio method in computational catalysis. """ @@ -25045,20 +24669,45 @@ class DFT(SimulationMethod): exchange_correlation_functional: Optional[list[str]] = Field(default=[], description="""Exchange-correlation functional used (e.g. PBE, PBEsol, RPBE, B3LYP, HSE06). The choice of functional directly affects accuracy.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFT'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:exchange_correlation_functional'} }) energy_cutoff: Optional[list[float]] = Field(default=[], description="""Plane-wave kinetic energy cutoff for the basis set expansion.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin', 'DFT'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:energy_cutoff', 'unit': {'ucum_code': 'eV'}} }) convergence_criteria: Optional[list[str]] = Field(default=[], description="""Convergence thresholds applied during self-consistent field (SCF) and/or geometry optimisation (e.g. energy < 1e-5 eV, forces < 0.02 eV/A).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin', 'DFT'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:convergence_criteria'} }) dft_u_parameters: Optional[list[str]] = Field(default=[], description="""Hubbard U correction parameters (DFT+U). Specify element, orbital, and -U value (e.g. \"Fe d: U=4.0 eV, J=0.0 eV\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFT'], 'slot_uri': 'coremeta4cat:dft_u_parameters'} }) +U value (e.g. \"Fe d: U=4.0 eV, J=0.0 eV\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFT'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:dft_u_parameters'} }) spin_polarization: Optional[list[bool]] = Field(default=[], description="""Whether spin polarization (collinear magnetism) is included in the DFT -calculation. Set to true for systems containing magnetic elements.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFT'], 'slot_uri': 'coremeta4cat:spin_polarization'} }) +calculation. Set to true for systems containing magnetic elements.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFT'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:spin_polarization'} }) total_energy_per_atom: Optional[list[float]] = Field(default=[], description="""Total DFT ground-state energy divided by number of atoms in the unit cell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFT'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:total_energy_per_atom', 'unit': {'ucum_code': 'eV'}} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -25146,7 +24795,7 @@ class DFT(SimulationMethod): class MolecularDynamics(SimulationMethod): """ - Molecular dynamics simulation � a method for computing the time evolution + Molecular dynamics simulation — a method for computing the time evolution of a system of interacting particles by integrating the equations of motion. Used to study diffusion, reaction kinetics, and thermal properties. """ @@ -25154,16 +24803,40 @@ class MolecularDynamics(SimulationMethod): 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/simulation/'}) force_field: Optional[list[str]] = Field(default=[], description="""Force field or interatomic potential used (e.g. ReaxFF, CHARMM, Tersoff, -EAM). Include parametrisation source or reference.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularDynamics'], 'slot_uri': 'coremeta4cat:force_field'} }) +EAM). Include parametrisation source or reference.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularDynamics'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:force_field'} }) simulation_timestep: Optional[list[float]] = Field(default=[], description="""Integration timestep used in molecular dynamics.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularDynamics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'APOLLO_SV:00000012', 'unit': {'ucum_code': 'fs'}} }) simulation_time: Optional[list[float]] = Field(default=[], description="""Total simulated physical time of the MD trajectory.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularDynamics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:simulation_time', 'unit': {'ucum_code': 'ps'}} }) ensemble_type: Optional[list[str]] = Field(default=[], description="""Statistical ensemble used in MD (e.g. NVE, NVT, NPT). Determines which -thermodynamic quantities are conserved.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularDynamics'], 'slot_uri': 'coremeta4cat:ensemble_type'} }) - number_of_atoms: Optional[list[int]] = Field(default=[], description="""Number of atoms in the simulation cell or supercell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularDynamics'], 'slot_uri': 'coremeta4cat:number_of_atoms'} }) +thermodynamic quantities are conserved.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularDynamics'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:ensemble_type'} }) + number_of_atoms: Optional[list[int]] = Field(default=[], description="""Number of atoms in the simulation cell or supercell.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MolecularDynamics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:number_of_atoms'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -25251,7 +24924,7 @@ class MolecularDynamics(SimulationMethod): class Microkinetics(SimulationMethod): """ - Microkinetic modelling � a mean-field kinetic approach that integrates + Microkinetic modelling — a mean-field kinetic approach that integrates elementary reaction steps and their rate constants to predict catalytic activity and selectivity under reaction conditions. """ @@ -25259,9 +24932,15 @@ class Microkinetics(SimulationMethod): 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/simulation/'}) rate_constants: Optional[list[str]] = Field(default=[], description="""Rate constants or Arrhenius parameters (pre-exponential factor and -activation energy) for each elementary step in the reaction network.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Microkinetics'], 'slot_uri': 'NCIT:C94967'} }) +activation energy) for each elementary step in the reaction network.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Microkinetics'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'NCIT:C94967'} }) solver_type: Optional[list[str]] = Field(default=[], description="""Numerical solver used for the microkinetic rate equations (e.g. LSODA, -stiff ODE solver, steady-state Newton method).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Microkinetics'], 'slot_uri': 'coremeta4cat:solver_type'} }) +stiff ODE solver, steady-state Newton method).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Microkinetics'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:solver_type'} }) has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', 'PhotoluminescenceMixin', 'ElectrochemistryMixin', @@ -25275,22 +24954,38 @@ class Microkinetics(SimulationMethod): 'DynamicLightScattering', 'SizeExclusionChromatography', 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', 'ChemicalReaction', + 'MaterialisticMixin', 'Microkinetics', 'MonteCarlo', 'AqueousStability'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialisticMixin', 'ChemicalReaction', 'Microkinetics'], + has_pressure: Optional[list[Pressure]] = Field(default=[], description="""The slot to provide data about the pressure of a MaterialEntity or an Activity, whereas the Pressure of an Activity is ontologically a quality borne by the material entities participating in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'MaterialisticMixin', 'Microkinetics'], 'is_a': 'has_quantitative_attribute', 'recommended': True, 'slot_uri': 'SIO:000008'} }) - surface_coverage: Optional[list[float]] = Field(default=[], description="""Surface coverage of adsorbed species (fraction of surface sites occupied).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Microkinetics'], 'slot_uri': 'coremeta4cat:surface_coverage'} }) + surface_coverage: Optional[list[float]] = Field(default=[], description="""Surface coverage of adsorbed species (fraction of surface sites occupied).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Microkinetics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:surface_coverage'} }) activation_energy: Optional[list[float]] = Field(default=[], description="""Activation energy for each elementary step in the reaction mechanism.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Microkinetics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:activation_energy', 'unit': {'ucum_code': 'eV'}} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -25378,7 +25073,7 @@ class Microkinetics(SimulationMethod): class MonteCarlo(SimulationMethod): """ - Monte Carlo simulation � a stochastic method that samples configuration + Monte Carlo simulation — a stochastic method that samples configuration space using random moves accepted or rejected according to a statistical criterion (e.g. Metropolis). Used for adsorption isotherms, phase diagrams, and lattice-based kinetics. @@ -25386,8 +25081,14 @@ class MonteCarlo(SimulationMethod): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'coremeta4cat:MonteCarlo', 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/simulation/'}) - interaction_potential: Optional[list[str]] = Field(default=[], description="""Interaction potential or Hamiltonian used to compute energies in MC moves.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MonteCarlo'], 'slot_uri': 'coremeta4cat:interaction_potential'} }) - number_of_steps: Optional[list[int]] = Field(default=[], description="""Total number of Monte Carlo moves or trial configurations generated.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MonteCarlo'], 'slot_uri': 'coremeta4cat:number_of_steps'} }) + interaction_potential: Optional[list[str]] = Field(default=[], description="""Interaction potential or Hamiltonian used to compute energies in MC moves.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MonteCarlo'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:interaction_potential'} }) + number_of_steps: Optional[list[int]] = Field(default=[], description="""Total number of Monte Carlo moves or trial configurations generated.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MonteCarlo'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:number_of_steps'} }) has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', 'PhotoluminescenceMixin', 'ElectrochemistryMixin', @@ -25401,8 +25102,8 @@ class MonteCarlo(SimulationMethod): 'DynamicLightScattering', 'SizeExclusionChromatography', 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', 'ChemicalReaction', + 'MaterialisticMixin', 'Microkinetics', 'MonteCarlo', 'AqueousStability'], @@ -25410,11 +25111,34 @@ class MonteCarlo(SimulationMethod): 'recommended': True, 'slot_uri': 'SIO:000008'} }) lattice_size_type: Optional[list[str]] = Field(default=[], description="""Lattice geometry and dimensions used in lattice-based MC (e.g. -\"100x100 square lattice\", \"hexagonal 50x50\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['MonteCarlo'], 'slot_uri': 'coremeta4cat:lattice_size_type'} }) +\"100x100 square lattice\", \"hexagonal 50x50\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['MonteCarlo'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:lattice_size_type'} }) acceptance_criteria: Optional[list[str]] = Field(default=[], description="""Criterion for accepting or rejecting MC moves (e.g. Metropolis, -Kawasaki, heat-bath algorithm).""", json_schema_extra = { "linkml_meta": {'domain_of': ['MonteCarlo'], 'slot_uri': 'coremeta4cat:acceptance_criteria'} }) - equilibration_steps: Optional[list[int]] = Field(default=[], description="""Number of MC steps used for equilibration before data collection begins.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MonteCarlo'], 'slot_uri': 'coremeta4cat:equilibration_steps'} }) - sampling_interval: Optional[list[int]] = Field(default=[], description="""Interval between successive MC snapshots used for property averaging.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MonteCarlo'], 'slot_uri': 'coremeta4cat:sampling_interval'} }) +Kawasaki, heat-bath algorithm).""", json_schema_extra = { "linkml_meta": {'domain_of': ['MonteCarlo'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:acceptance_criteria'} }) + equilibration_steps: Optional[list[int]] = Field(default=[], description="""Number of MC steps used for equilibration before data collection begins.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MonteCarlo'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:equilibration_steps'} }) + sampling_interval: Optional[list[int]] = Field(default=[], description="""Interval between successive MC snapshots used for property averaging.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MonteCarlo'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:sampling_interval'} }) + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', + 'AgenticEntity', + 'Dataset', + 'DefinedTerm', + 'Document', + 'Entity', + 'LegalResource', + 'LicenseDocument', + 'Resource'], + 'in_subset': ['domain_agnostic_core']} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -25609,19 +25333,29 @@ class ThermodynamicStability(CalculatedProperty): 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/simulation/'}) formation_energy: Optional[list[float]] = Field(default=[], description="""Formation energy per atom relative to elemental reference states.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermodynamicStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:formation_energy', 'unit': {'ucum_code': 'eV'}} }) reference_energies: Optional[list[str]] = Field(default=[], description="""Elemental reference energies used to compute formation energies (e.g. DFT total energies of elemental ground-state structures).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermodynamicStability'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:reference_energies'} }) energy_above_hull: Optional[list[float]] = Field(default=[], description="""Distance above the convex hull of stable phases (thermodynamic stability metric). Zero for phases on the hull; positive values indicate metastability.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermodynamicStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:energy_above_hull', 'unit': {'ucum_code': 'eV'}} }) phase_diagram_type: Optional[list[str]] = Field(default=[], description="""Type of phase diagram constructed (e.g. binary, ternary, quaternary).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermodynamicStability'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:phase_diagram_type'} }) competing_phases: Optional[list[str]] = Field(default=[], description="""List of stable competing phases used in convex hull construction (e.g. \"Fe2O3, Fe3O4, FeO, Fe\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['ThermodynamicStability'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:competing_phases'} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -25721,11 +25455,21 @@ class Piezoelectricity(CalculatedProperty): piezoelectric_tensor: Optional[list[str]] = Field(default=[], description="""Components of the piezoelectric tensor e_ij (C/m2) or d_ij (pC/N), describing the coupling between stress and electric polarization.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Piezoelectricity'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:piezoelectric_tensor'} }) - crystal_symmetry: Optional[list[str]] = Field(default=[], description="""Point group or space group symmetry of the crystal structure.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Piezoelectricity'], 'slot_uri': 'coremeta4cat:crystal_symmetry'} }) - strain_applied: Optional[list[float]] = Field(default=[], description="""Magnitude of applied strain in the piezoelectric calculation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Piezoelectricity'], 'slot_uri': 'coremeta4cat:strain_applied'} }) + crystal_symmetry: Optional[list[str]] = Field(default=[], description="""Point group or space group symmetry of the crystal structure.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Piezoelectricity'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:crystal_symmetry'} }) + strain_applied: Optional[list[float]] = Field(default=[], description="""Magnitude of applied strain in the piezoelectric calculation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Piezoelectricity'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:strain_applied'} }) ionic_electronic_contributions: Optional[list[str]] = Field(default=[], description="""Decomposition of the piezoelectric or dielectric response into ionic (nuclear) and electronic contributions.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Piezoelectricity'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:ionic_electronic_contributions'} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -25824,15 +25568,27 @@ class ElasticConstants(CalculatedProperty): 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/simulation/'}) elastic_tensor: Optional[list[str]] = Field(default=[], description="""Full Voigt-notation elastic tensor C_ij (GPa) describing the linear -elastic response of the material.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElasticConstants'], 'slot_uri': 'coremeta4cat:elastic_tensor'} }) +elastic response of the material.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElasticConstants'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:elastic_tensor'} }) bulk_modulus: Optional[list[float]] = Field(default=[], description="""Bulk modulus (resistance to uniform compression).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElasticConstants', 'EquationsOfState'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:bulk_modulus', 'unit': {'ucum_code': 'GPa'}} }) shear_modulus: Optional[list[float]] = Field(default=[], description="""Shear modulus (resistance to shear deformation).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElasticConstants'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:shear_modulus', 'unit': {'ucum_code': 'GPa'}} }) - poisson_ratio: Optional[list[float]] = Field(default=[], description="""Poisson's ratio (ratio of transverse to axial strain under uniaxial load).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElasticConstants'], 'slot_uri': 'coremeta4cat:poisson_ratio'} }) + poisson_ratio: Optional[list[float]] = Field(default=[], description="""Poisson's ratio (ratio of transverse to axial strain under uniaxial load).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElasticConstants'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:poisson_ratio'} }) young_modulus: Optional[list[float]] = Field(default=[], description="""Young's modulus (stiffness under uniaxial tension or compression).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElasticConstants'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:young_modulus', 'unit': {'ucum_code': 'GPa'}} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', @@ -25934,18 +25690,29 @@ class Surfaces(CalculatedProperty): surface_energy: Optional[list[float]] = Field(default=[], description="""Cleavage energy per unit area required to create the surface from the bulk. A lower value indicates a more stable surface facet.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Surfaces'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:surface_energy', 'unit': {'ucum_code': 'J/m2'}} }) - miller_indices: Optional[list[str]] = Field(default=[], description="""Miller indices of the modelled surface facet (e.g. \"(111)\", \"(110)\", \"(100)\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['Surfaces'], 'slot_uri': 'coremeta4cat:miller_indices'} }) + miller_indices: Optional[list[str]] = Field(default=[], description="""Miller indices of the modelled surface facet (e.g. \"(111)\", \"(110)\", \"(100)\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['Surfaces'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:miller_indices'} }) slab_thickness: Optional[list[float]] = Field(default=[], description="""Thickness of the periodic slab model used to represent the surface.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Surfaces'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:slab_thickness', 'unit': {'ucum_code': 'Ao'}} }) vacuum_spacing: Optional[list[float]] = Field(default=[], description="""Vacuum layer thickness added above the slab to prevent spurious periodic interactions between slab images.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Surfaces'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:vacuum_spacing', 'unit': {'ucum_code': 'Ao'}} }) surface_termination_method: Optional[list[str]] = Field(default=[], description="""Method used to terminate the slab and handle dangling bonds (e.g. H-passivation, OH-termination, dipole correction).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Surfaces'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:surface_termination_method'} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', @@ -26046,23 +25813,39 @@ class DielectricTensors(CalculatedProperty, DFTSettingsMixin, MaterialDescriptor dielectric_tensor: Optional[list[str]] = Field(default=[], description="""Components of the static and/or high-frequency dielectric tensor epsilon_ij, computed from DFPT.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DielectricTensors'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:dielectric_tensor'} }) born_effective_charges: Optional[list[str]] = Field(default=[], description="""Born effective charge tensors Z*_ij for each atom, describing how the polarization changes with atomic displacements.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DielectricTensors'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:born_effective_charges'} }) material_composition: Optional[list[str]] = Field(default=[], description="""Chemical composition of the simulated material (e.g. \"Fe2O3\", \"Pt/CeO2\"). Use empirical formula or SMILES for molecular systems.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:material_composition'} }) crystal_structure: Optional[list[str]] = Field(default=[], description="""Crystal structure of the simulated material, including space group and -lattice parameters (e.g. \"Fm-3m, a=3.92 A for Pt\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], 'slot_uri': 'SIO:001100'} }) +lattice parameters (e.g. \"Fm-3m, a=3.92 A for Pt\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:001100'} }) energy_cutoff: Optional[list[float]] = Field(default=[], description="""Plane-wave kinetic energy cutoff for the basis set expansion.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin', 'DFT'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:energy_cutoff', 'unit': {'ucum_code': 'eV'}} }) convergence_criteria: Optional[list[str]] = Field(default=[], description="""Convergence thresholds applied during self-consistent field (SCF) and/or geometry optimisation (e.g. energy < 1e-5 eV, forces < 0.02 eV/A).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin', 'DFT'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:convergence_criteria'} }) k_point_mesh: Optional[list[str]] = Field(default=[], description="""Monkhorst-Pack k-point mesh used for Brillouin zone sampling -(e.g. \"4x4x1\" for a surface slab, \"8x8x8\" for a bulk cell).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin'], 'slot_uri': 'coremeta4cat:k_point_mesh'} }) +(e.g. \"4x4x1\" for a surface slab, \"8x8x8\" for a bulk cell).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:k_point_mesh'} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -26163,19 +25946,34 @@ class PhononDispersion(CalculatedProperty, MaterialDescriptorMixin): force_constant_method: Optional[list[str]] = Field(default=[], description="""Method used to compute the interatomic force constants (e.g. finite differences / supercell method, DFPT/linear response).""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhononDispersion'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:force_constant_method'} }) kq_point_mesh: Optional[list[str]] = Field(default=[], description="""k/q-point mesh for phonon Brillouin zone sampling (e.g. \"8x8x8\"). -Distinct from the electronic k-point mesh.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhononDispersion'], 'slot_uri': 'coremeta4cat:kq_point_mesh'} }) +Distinct from the electronic k-point mesh.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhononDispersion'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:kq_point_mesh'} }) smearing_parameter: Optional[list[float]] = Field(default=[], description="""Smearing or broadening parameter applied to the phonon density of states.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhononDispersion'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:smearing_parameter', 'unit': {'ucum_code': 'eV'}} }) imaginary_modes: Optional[list[bool]] = Field(default=[], description="""Whether imaginary (soft) phonon modes are present in the dispersion. -Imaginary modes indicate dynamical instability of the structure.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhononDispersion'], 'slot_uri': 'coremeta4cat:imaginary_modes'} }) +Imaginary modes indicate dynamical instability of the structure.""", json_schema_extra = { "linkml_meta": {'domain_of': ['PhononDispersion'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:imaginary_modes'} }) material_composition: Optional[list[str]] = Field(default=[], description="""Chemical composition of the simulated material (e.g. \"Fe2O3\", \"Pt/CeO2\"). Use empirical formula or SMILES for molecular systems.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:material_composition'} }) crystal_structure: Optional[list[str]] = Field(default=[], description="""Crystal structure of the simulated material, including space group and -lattice parameters (e.g. \"Fm-3m, a=3.92 A for Pt\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], 'slot_uri': 'SIO:001100'} }) +lattice parameters (e.g. \"Fm-3m, a=3.92 A for Pt\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:001100'} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -26275,26 +26073,48 @@ class EquationsOfState(CalculatedProperty, DFTSettingsMixin, MaterialDescriptorM 'mixins': ['MaterialDescriptorMixin', 'DFTSettingsMixin']}) fit_method: Optional[list[str]] = Field(default=[], description="""Parametric model used to fit the energy-volume curve -(e.g. Birch-Murnaghan 3rd order, Vinet, Murnaghan).""", json_schema_extra = { "linkml_meta": {'domain_of': ['EquationsOfState'], 'slot_uri': 'coremeta4cat:fit_method'} }) +(e.g. Birch-Murnaghan 3rd order, Vinet, Murnaghan).""", json_schema_extra = { "linkml_meta": {'domain_of': ['EquationsOfState'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:fit_method'} }) bulk_modulus: Optional[list[float]] = Field(default=[], description="""Bulk modulus (resistance to uniform compression).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElasticConstants', 'EquationsOfState'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:bulk_modulus', 'unit': {'ucum_code': 'GPa'}} }) pressure_derivative: Optional[list[float]] = Field(default=[], description="""Pressure derivative of the bulk modulus B' (dimensionless).""", json_schema_extra = { "linkml_meta": {'domain_of': ['EquationsOfState'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:pressure_derivative'} }) - fit_residuals: Optional[list[float]] = Field(default=[], description="""Root-mean-square residuals of the energy-volume fit.""", json_schema_extra = { "linkml_meta": {'domain_of': ['EquationsOfState'], 'slot_uri': 'coremeta4cat:fit_residuals'} }) + fit_residuals: Optional[list[float]] = Field(default=[], description="""Root-mean-square residuals of the energy-volume fit.""", json_schema_extra = { "linkml_meta": {'domain_of': ['EquationsOfState'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:fit_residuals'} }) material_composition: Optional[list[str]] = Field(default=[], description="""Chemical composition of the simulated material (e.g. \"Fe2O3\", \"Pt/CeO2\"). Use empirical formula or SMILES for molecular systems.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:material_composition'} }) crystal_structure: Optional[list[str]] = Field(default=[], description="""Crystal structure of the simulated material, including space group and -lattice parameters (e.g. \"Fm-3m, a=3.92 A for Pt\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], 'slot_uri': 'SIO:001100'} }) +lattice parameters (e.g. \"Fm-3m, a=3.92 A for Pt\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:001100'} }) energy_cutoff: Optional[list[float]] = Field(default=[], description="""Plane-wave kinetic energy cutoff for the basis set expansion.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin', 'DFT'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:energy_cutoff', 'unit': {'ucum_code': 'eV'}} }) convergence_criteria: Optional[list[str]] = Field(default=[], description="""Convergence thresholds applied during self-consistent field (SCF) and/or geometry optimisation (e.g. energy < 1e-5 eV, forces < 0.02 eV/A).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin', 'DFT'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:convergence_criteria'} }) k_point_mesh: Optional[list[str]] = Field(default=[], description="""Monkhorst-Pack k-point mesh used for Brillouin zone sampling -(e.g. \"4x4x1\" for a surface slab, \"8x8x8\" for a bulk cell).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin'], 'slot_uri': 'coremeta4cat:k_point_mesh'} }) +(e.g. \"4x4x1\" for a surface slab, \"8x8x8\" for a bulk cell).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:k_point_mesh'} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -26393,12 +26213,23 @@ class AqueousStability(CalculatedProperty, MaterialDescriptorMixin): 'from_schema': 'https://w3id.org/nfdi4cat/coremeta4cat/simulation/', 'mixins': ['MaterialDescriptorMixin']}) - ph_range: Optional[list[str]] = Field(default=[], description="""pH range covered in the Pourbaix stability diagram (e.g. \"0-14\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['AqueousStability'], 'slot_uri': 'coremeta4cat:ph_range'} }) + ph_range: Optional[list[str]] = Field(default=[], description="""pH range covered in the Pourbaix stability diagram (e.g. \"0-14\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['AqueousStability'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:ph_range'} }) potential_range: Optional[list[str]] = Field(default=[], description="""Electrode potential range covered in the Pourbaix diagram -(e.g. \"-2 to +2 V vs SHE\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['AqueousStability'], 'slot_uri': 'coremeta4cat:potential_range'} }) +(e.g. \"-2 to +2 V vs SHE\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['AqueousStability'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:potential_range'} }) solvation_model: Optional[list[str]] = Field(default=[], description="""Implicit solvation model used to account for aqueous environment -(e.g. VASPsol, SCCS/Environ, COSMO).""", json_schema_extra = { "linkml_meta": {'domain_of': ['AqueousStability'], 'slot_uri': 'coremeta4cat:solvation_model'} }) +(e.g. VASPsol, SCCS/Environ, COSMO).""", json_schema_extra = { "linkml_meta": {'domain_of': ['AqueousStability'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:solvation_model'} }) ionic_strength: Optional[list[float]] = Field(default=[], description="""Ionic strength of the electrolyte solution modelled.""", json_schema_extra = { "linkml_meta": {'domain_of': ['AqueousStability'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:ionic_strength', 'unit': {'ucum_code': 'mol/L'}} }) has_temperature: Optional[list[Temperature]] = Field(default=[], description="""The slot to provide the Temperature of a MaterialEntity or an Activity, whereas the temperature of the Activity is ontologically rooted in the temperature of the material entities that participate in the Activity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SonochemicalSynthesis', @@ -26414,8 +26245,8 @@ class AqueousStability(CalculatedProperty, MaterialDescriptorMixin): 'DynamicLightScattering', 'SizeExclusionChromatography', 'HighPerformanceLiquidChromatographyMassSpectrometry', - 'MaterialisticMixin', 'ChemicalReaction', + 'MaterialisticMixin', 'Microkinetics', 'MonteCarlo', 'AqueousStability'], @@ -26424,9 +26255,14 @@ class AqueousStability(CalculatedProperty, MaterialDescriptorMixin): 'slot_uri': 'SIO:000008'} }) material_composition: Optional[list[str]] = Field(default=[], description="""Chemical composition of the simulated material (e.g. \"Fe2O3\", \"Pt/CeO2\"). Use empirical formula or SMILES for molecular systems.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:material_composition'} }) crystal_structure: Optional[list[str]] = Field(default=[], description="""Crystal structure of the simulated material, including space group and -lattice parameters (e.g. \"Fm-3m, a=3.92 A for Pt\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], 'slot_uri': 'SIO:001100'} }) +lattice parameters (e.g. \"Fm-3m, a=3.92 A for Pt\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:001100'} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -26527,28 +26363,48 @@ class GrainBoundaries(CalculatedProperty, MaterialDescriptorMixin): grain_boundary_plane: Optional[list[str]] = Field(default=[], description="""Crystallographic plane of the grain boundary, expressed using Miller indices (e.g. \"Sigma5 (310)[001]\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['GrainBoundaries'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:grain_boundary_plane'} }) misorientation_angle: Optional[list[float]] = Field(default=[], description="""Misorientation angle between adjacent grains at the boundary.""", json_schema_extra = { "linkml_meta": {'domain_of': ['GrainBoundaries'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:misorientation_angle', 'unit': {'ucum_code': 'deg'}} }) grain_boundary_energy: Optional[list[float]] = Field(default=[], description="""Excess energy per unit area of the grain boundary.""", json_schema_extra = { "linkml_meta": {'domain_of': ['GrainBoundaries'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:grain_boundary_energy', 'unit': {'ucum_code': 'J/m2'}} }) simulation_cell_size: Optional[list[str]] = Field(default=[], description="""Dimensions of the simulation cell used to model the grain boundary (e.g. \"10x10x30 nm\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['GrainBoundaries'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:simulation_cell_size'} }) - gb_excess_volume: Optional[list[float]] = Field(default=[], description="""Excess volume per unit area associated with the grain boundary.""", json_schema_extra = { "linkml_meta": {'domain_of': ['GrainBoundaries'], 'slot_uri': 'coremeta4cat:gb_excess_volume'} }) + gb_excess_volume: Optional[list[float]] = Field(default=[], description="""Excess volume per unit area associated with the grain boundary.""", json_schema_extra = { "linkml_meta": {'domain_of': ['GrainBoundaries'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:gb_excess_volume'} }) gb_structural_units: Optional[list[str]] = Field(default=[], description="""Description of the structural units (repeating atomic motifs) that constitute the grain boundary structure.""", json_schema_extra = { "linkml_meta": {'domain_of': ['GrainBoundaries'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:gb_structural_units'} }) charge_defect_segregation: Optional[list[str]] = Field(default=[], description="""Data describing charge carrier or point defect segregation behaviour at the grain boundary (e.g. segregation energy per defect type).""", json_schema_extra = { "linkml_meta": {'domain_of': ['GrainBoundaries'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:charge_defect_segregation'} }) material_composition: Optional[list[str]] = Field(default=[], description="""Chemical composition of the simulated material (e.g. \"Fe2O3\", \"Pt/CeO2\"). Use empirical formula or SMILES for molecular systems.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:material_composition'} }) crystal_structure: Optional[list[str]] = Field(default=[], description="""Crystal structure of the simulated material, including space group and -lattice parameters (e.g. \"Fm-3m, a=3.92 A for Pt\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], 'slot_uri': 'SIO:001100'} }) +lattice parameters (e.g. \"Fm-3m, a=3.92 A for Pt\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:001100'} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -26649,28 +26505,49 @@ class ElectronicStructure(CalculatedProperty, DFTSettingsMixin, MaterialDescript smearing_method: Optional[list[str]] = Field(default=[], description="""Electronic smearing scheme and width used in the SCF calculation (e.g. Methfessel-Paxton order 1 with sigma=0.2 eV, Gaussian with sigma=0.05 eV).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronicStructure'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:smearing_method'} }) spin_polarized: Optional[list[bool]] = Field(default=[], description="""Whether the electronic structure calculation is spin-polarized (accounts for spin-up and spin-down electrons separately).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronicStructure'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:spin_polarized'} }) band_path: Optional[list[str]] = Field(default=[], description="""High-symmetry k-path through the Brillouin zone used to plot the -band structure (e.g. \"Gamma-X-M-Gamma-R\" for cubic, following SeeK-path convention).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronicStructure'], 'slot_uri': 'coremeta4cat:band_path'} }) +band structure (e.g. \"Gamma-X-M-Gamma-R\" for cubic, following SeeK-path convention).""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronicStructure'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:band_path'} }) fermi_energy: Optional[list[float]] = Field(default=[], description="""Fermi energy (chemical potential of electrons) in the calculated system.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ElectronicStructure'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:fermi_energy', 'unit': {'ucum_code': 'eV'}} }) material_composition: Optional[list[str]] = Field(default=[], description="""Chemical composition of the simulated material (e.g. \"Fe2O3\", \"Pt/CeO2\"). Use empirical formula or SMILES for molecular systems.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:material_composition'} }) crystal_structure: Optional[list[str]] = Field(default=[], description="""Crystal structure of the simulated material, including space group and -lattice parameters (e.g. \"Fm-3m, a=3.92 A for Pt\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], 'slot_uri': 'SIO:001100'} }) +lattice parameters (e.g. \"Fm-3m, a=3.92 A for Pt\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:001100'} }) energy_cutoff: Optional[list[float]] = Field(default=[], description="""Plane-wave kinetic energy cutoff for the basis set expansion.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin', 'DFT'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:energy_cutoff', 'unit': {'ucum_code': 'eV'}} }) convergence_criteria: Optional[list[str]] = Field(default=[], description="""Convergence thresholds applied during self-consistent field (SCF) and/or geometry optimisation (e.g. energy < 1e-5 eV, forces < 0.02 eV/A).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin', 'DFT'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:convergence_criteria'} }) k_point_mesh: Optional[list[str]] = Field(default=[], description="""Monkhorst-Pack k-point mesh used for Brillouin zone sampling -(e.g. \"4x4x1\" for a surface slab, \"8x8x8\" for a bulk cell).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin'], 'slot_uri': 'coremeta4cat:k_point_mesh'} }) +(e.g. \"4x4x1\" for a surface slab, \"8x8x8\" for a bulk cell).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:k_point_mesh'} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -26771,26 +26648,43 @@ class Ferroelectrics(CalculatedProperty, MaterialDescriptorMixin): polarization_direction: Optional[list[str]] = Field(default=[], description="""Crystallographic direction of the spontaneous electric polarization (e.g. \"[001]\" for tetragonal BaTiO_3).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Ferroelectrics'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:polarization_direction'} }) spontaneous_polarization: Optional[list[float]] = Field(default=[], description="""Magnitude of the spontaneous electric polarization.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Ferroelectrics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:spontaneous_polarization', 'unit': {'ucum_code': 'uC/cm2'}} }) reference_structure: Optional[list[str]] = Field(default=[], description="""Reference (paraelectric/centrosymmetric) structure used as the zero- polarization endpoint in the Berry-phase polarization calculation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Ferroelectrics'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:reference_structure'} }) switching_barrier: Optional[list[float]] = Field(default=[], description="""Energy barrier for polarization switching between equivalent states.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Ferroelectrics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:switching_barrier', 'unit': {'ucum_code': 'eV'}} }) coercive_field: Optional[list[float]] = Field(default=[], description="""Electric field required to reverse the polarization direction.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Ferroelectrics'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:coercive_field', 'unit': {'ucum_code': 'kV/cm'}} }) temperature_dependence: Optional[list[str]] = Field(default=[], description="""Description of how the ferroelectric properties vary with temperature.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Ferroelectrics'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:temperature_dependence'} }) material_composition: Optional[list[str]] = Field(default=[], description="""Chemical composition of the simulated material (e.g. \"Fe2O3\", \"Pt/CeO2\"). Use empirical formula or SMILES for molecular systems.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:material_composition'} }) crystal_structure: Optional[list[str]] = Field(default=[], description="""Crystal structure of the simulated material, including space group and -lattice parameters (e.g. \"Fm-3m, a=3.92 A for Pt\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], 'slot_uri': 'SIO:001100'} }) +lattice parameters (e.g. \"Fm-3m, a=3.92 A for Pt\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:001100'} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -26890,36 +26784,66 @@ class BandGap(CalculatedProperty, DFTSettingsMixin, MaterialDescriptorMixin): 'mixins': ['MaterialDescriptorMixin', 'DFTSettingsMixin']}) material_sample: Optional[list[str]] = Field(default=[], description="""Reference to the material or MaterialSample being characterised by this -calculated band gap.""", json_schema_extra = { "linkml_meta": {'domain_of': ['BandGap'], 'slot_uri': 'VOC4CAT:0005056'} }) +calculated band gap.""", json_schema_extra = { "linkml_meta": {'domain_of': ['BandGap'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'VOC4CAT:0005056'} }) structure_model: Optional[list[str]] = Field(default=[], description="""Model structure used in the band gap calculation (e.g. bulk unit cell, -surface slab, defect supercell).""", json_schema_extra = { "linkml_meta": {'domain_of': ['BandGap'], 'slot_uri': 'coremeta4cat:structure_model'} }) +surface slab, defect supercell).""", json_schema_extra = { "linkml_meta": {'domain_of': ['BandGap'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:structure_model'} }) smearing_broadening: Optional[list[float]] = Field(default=[], description="""Gaussian or Lorentzian broadening applied to the simulated spectrum.""", json_schema_extra = { "linkml_meta": {'domain_of': ['BandGap'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:smearing_broadening', 'unit': {'ucum_code': 'eV'}} }) direct_indirect: Optional[list[str]] = Field(default=[], description="""Band gap character: \"direct\" (VBM and CBM at same k-point) or -\"indirect\" (VBM and CBM at different k-points).""", json_schema_extra = { "linkml_meta": {'domain_of': ['BandGap'], 'slot_uri': 'coremeta4cat:direct_indirect'} }) +\"indirect\" (VBM and CBM at different k-points).""", json_schema_extra = { "linkml_meta": {'domain_of': ['BandGap'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:direct_indirect'} }) experimental_reference: Optional[list[float]] = Field(default=[], description="""Experimental band gap value used for benchmarking the calculation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['BandGap'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:experimental_reference', 'unit': {'ucum_code': 'eV'}} }) gw_hybrid_correction: Optional[list[bool]] = Field(default=[], description="""Whether a many-body GW correction or hybrid functional (e.g. HSE06) -was applied to correct the DFT band gap underestimation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['BandGap'], 'slot_uri': 'coremeta4cat:gw_hybrid_correction'} }) +was applied to correct the DFT band gap underestimation.""", json_schema_extra = { "linkml_meta": {'domain_of': ['BandGap'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:gw_hybrid_correction'} }) excitonic_correction: Optional[list[float]] = Field(default=[], description="""Excitonic correction (from Bethe-Salpeter equation) applied to the optical band gap.""", json_schema_extra = { "linkml_meta": {'domain_of': ['BandGap'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:excitonic_correction', 'unit': {'ucum_code': 'eV'}} }) material_composition: Optional[list[str]] = Field(default=[], description="""Chemical composition of the simulated material (e.g. \"Fe2O3\", \"Pt/CeO2\"). Use empirical formula or SMILES for molecular systems.""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:material_composition'} }) crystal_structure: Optional[list[str]] = Field(default=[], description="""Crystal structure of the simulated material, including space group and -lattice parameters (e.g. \"Fm-3m, a=3.92 A for Pt\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], 'slot_uri': 'SIO:001100'} }) +lattice parameters (e.g. \"Fm-3m, a=3.92 A for Pt\").""", json_schema_extra = { "linkml_meta": {'domain_of': ['MaterialDescriptorMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'SIO:001100'} }) energy_cutoff: Optional[list[float]] = Field(default=[], description="""Plane-wave kinetic energy cutoff for the basis set expansion.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin', 'DFT'], + 'is_a': 'has_quantitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:energy_cutoff', 'unit': {'ucum_code': 'eV'}} }) convergence_criteria: Optional[list[str]] = Field(default=[], description="""Convergence thresholds applied during self-consistent field (SCF) and/or geometry optimisation (e.g. energy < 1e-5 eV, forces < 0.02 eV/A).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin', 'DFT'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, 'slot_uri': 'coremeta4cat:convergence_criteria'} }) k_point_mesh: Optional[list[str]] = Field(default=[], description="""Monkhorst-Pack k-point mesh used for Brillouin zone sampling -(e.g. \"4x4x1\" for a surface slab, \"8x8x8\" for a bulk cell).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin'], 'slot_uri': 'coremeta4cat:k_point_mesh'} }) +(e.g. \"4x4x1\" for a surface slab, \"8x8x8\" for a bulk cell).""", json_schema_extra = { "linkml_meta": {'domain_of': ['DFTSettingsMixin'], + 'is_a': 'has_qualitative_attribute', + 'recommended': True, + 'slot_uri': 'coremeta4cat:k_point_mesh'} }) title: Optional[str] = Field(default=None, description="""This slot is described in more detail within the class in which it is used.""", json_schema_extra = { "linkml_meta": {'domain_of': ['QuantitativeRange', 'Activity', 'AgenticEntity', @@ -27037,7 +26961,7 @@ class CatalysisDataset(Dataset, ClassifierMixin): 'inlined_as_list': True, 'multivalued': True, 'name': 'is_about_activity', - 'range': 'EvaluatedActivity', + 'range': 'CatalyticReaction', 'recommended': True}, 'is_about_entity': {'description': 'The catalyst sample, ' 'material, or other Entity ' @@ -27075,7 +26999,7 @@ class CatalysisDataset(Dataset, ClassifierMixin): 'inlined_as_list': True, 'multivalued': True, 'name': 'was_generated_by', - 'range': 'DataGeneratingActivity', + 'range': 'CatalysisDataGeneratingActivity', 'recommended': True}}}) type: Optional[list[DefinedTerm]] = Field(default=[], description="""A type of the Dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Agent', 'ClassifierMixin', 'Dataset', 'LicenseDocument'], @@ -27171,7 +27095,7 @@ class CatalysisDataset(Dataset, ClassifierMixin): 'slot_uri': 'dcterms:publisher'} }) qualified_attribution: Optional[list[Attribution]] = Field(default=[], description="""An Agent having some form of responsibility for the resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset'], 'slot_uri': 'prov:qualifiedAttribution'} }) qualified_relation: Optional[list[Relationship]] = Field(default=[], description="""A description of a relationship with another resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset'], 'slot_uri': 'dcat:qualifiedRelation'} }) - related_resource: Optional[list[Resource]] = Field(default=[], description="""A related resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'ChemicalReaction'], 'slot_uri': 'dcterms:relation'} }) + related_resource: Optional[list[Resource]] = Field(default=[], description="""A related resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['ChemicalReaction', 'Dataset'], 'slot_uri': 'dcterms:relation'} }) release_date: Optional[date] = Field(default=None, description="""The date of formal issuance (e.g., publication) of the Dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Catalogue', 'Dataset', 'DatasetSeries', 'Distribution'], 'slot_uri': 'dcterms:issued'} }) sample: Optional[list[Distribution]] = Field(default=[], description="""A sample distribution of the dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset'], 'slot_uri': 'adms:sample'} }) @@ -27226,12 +27150,13 @@ class CatalysisDataset(Dataset, ClassifierMixin): 'slot_uri': 'dcterms:title'} }) version: Optional[str] = Field(default=None, description="""The version indicator (name or identifier) of a resource.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset'], 'slot_uri': 'dcat:version'} }) version_notes: Optional[list[str]] = Field(default=[], description="""A description of the differences between this version and a previous version of the Dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset'], 'slot_uri': 'adms:versionNotes'} }) - was_generated_by: list[DataGeneratingActivity] = Field(default=..., description="""The DataGeneratingActivity (Synthesis, Characterization, or Simulation) + was_generated_by: list[Union[CatalysisDataGeneratingActivity,Synthesis,Characterization,Simulation]] = Field(default=..., description="""The DataGeneratingActivity (Synthesis, Characterization, or Simulation) that produced this dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset', 'EvaluatedEntity'], 'notes': ['stricter than DCAT-AP'], 'recommended': True, 'slot_uri': 'prov:wasGeneratedBy'} }) - id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Activity', + id: str = Field(default=..., description="""A slot to provide an URI for an entity within this schema.""", json_schema_extra = { "linkml_meta": {'domain_of': ['CatalysisPlan', + 'Activity', 'AgenticEntity', 'Dataset', 'DefinedTerm', @@ -27246,7 +27171,7 @@ class CatalysisDataset(Dataset, ClassifierMixin): 'in_subset': ['domain_agnostic_core'], 'recommended': True, 'slot_uri': 'dcterms:subject'} }) - is_about_activity: Optional[list[EvaluatedActivity]] = Field(default=[], description="""The catalytic Reaction that this dataset is about (e.g. a dataset of + is_about_activity: Optional[list[CatalyticReaction]] = Field(default=[], description="""The catalytic Reaction that this dataset is about (e.g. a dataset of catalytic performance measurements is about the Reaction being studied).""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset'], 'exact_mappings': ['IAO:0000136'], 'in_subset': ['domain_agnostic_core'], @@ -27268,7 +27193,6 @@ class CatalysisDataset(Dataset, ClassifierMixin): MassRangeMixin.model_rebuild() PhotoluminescenceMixin.model_rebuild() ElectrochemistryMixin.model_rebuild() -Carbonylation.model_rebuild() Agent.model_rebuild() Catalogue.model_rebuild() CatalogueRecord.model_rebuild() @@ -27278,6 +27202,7 @@ class CatalysisDataset(Dataset, ClassifierMixin): Activity.model_rebuild() AgenticEntity.model_rebuild() DataGeneratingActivity.model_rebuild() +CatalysisDataGeneratingActivity.model_rebuild() Synthesis.model_rebuild() Characterization.model_rebuild() DataAnalysis.model_rebuild() @@ -27287,24 +27212,17 @@ class CatalysisDataset(Dataset, ClassifierMixin): DatasetSeries.model_rebuild() DefinedTerm.model_rebuild() Device.model_rebuild() -ChemicalReactor.model_rebuild() -ElectrochemicalReactor.model_rebuild() -CSTR.model_rebuild() -PlugFlowReactor.model_rebuild() -Autoclave.model_rebuild() -SlurryReactor.model_rebuild() -Microreactor.model_rebuild() -FixedBedReactor.model_rebuild() -FluidizedBedReactor.model_rebuild() Distribution.model_rebuild() Entity.model_rebuild() EvaluatedActivity.model_rebuild() +ChemicalReaction.model_rebuild() CatalyticReaction.model_rebuild() EvaluatedEntity.model_rebuild() AnalysisSourceData.model_rebuild() Kind.model_rebuild() Location.model_rebuild() Plan.model_rebuild() +CatalysisPlan.model_rebuild() PreparationMethod.model_rebuild() Impregnation.model_rebuild() CoPrecipitation.model_rebuild() @@ -27350,8 +27268,6 @@ class CatalysisDataset(Dataset, ClassifierMixin): SizeExclusionChromatography.model_rebuild() HighPerformanceLiquidChromatographyMassSpectrometry.model_rebuild() ProductIdentificationMethod.model_rebuild() -LiquidPhaseAnalysis.model_rebuild() -GasPhaseAnalysis.model_rebuild() QualitativeAttribute.model_rebuild() Atmosphere.model_rebuild() CalcinationGaseousEnvironment.model_rebuild() @@ -27359,29 +27275,6 @@ class CatalysisDataset(Dataset, ClassifierMixin): SamplePretreatment.model_rebuild() VesselType.model_rebuild() OperationMode.model_rebuild() -CatalystType.model_rebuild() -HeterogeneousCatalyst.model_rebuild() -HomogeneousCatalyst.model_rebuild() -BioCatalyst.model_rebuild() -ElectroCatalyst.model_rebuild() -ThinFilmCatalyst.model_rebuild() -BulkCatalyst.model_rebuild() -PowerderedCatalyst.model_rebuild() -DepositedSampleCatalyst.model_rebuild() -PhotoCatalyst.model_rebuild() -SupportedCatalsyt.model_rebuild() -ReactionType.model_rebuild() -Hydrogenation.model_rebuild() -Oxidation.model_rebuild() -Dehydrogenation.model_rebuild() -CarbonCouplingReaction.model_rebuild() -Hydrodeoxygenation.model_rebuild() -OxygenEvolutionReaction.model_rebuild() -Hydroxylation.model_rebuild() -FischerTropschSynthesis.model_rebuild() -CarbonDioxideHydrogenation.model_rebuild() -SelectiveOxidation.model_rebuild() -CarbonMonoxideOxidation.model_rebuild() QuantitativeAttribute.model_rebuild() Duration.model_rebuild() VolumeFlowRate.model_rebuild() @@ -27389,15 +27282,16 @@ class CatalysisDataset(Dataset, ClassifierMixin): AngularVelocity.model_rebuild() EnergyQuantity.model_rebuild() ElectricPotential.model_rebuild() +ElectricCurrent.model_rebuild() +Area.model_rebuild() PowerQuantity.model_rebuild() LengthQuantity.model_rebuild() PlaneAngle.model_rebuild() Wavenumber.model_rebuild() MassToChargeRatio.model_rebuild() -ReactorPerformanceMeasures.model_rebuild() -Conversion.model_rebuild() -SpaceTimeYield.model_rebuild() -Selectivity.model_rebuild() +Yield.model_rebuild() +MolarEquivalent.model_rebuild() +PercentageOfTotal.model_rebuild() Relationship.model_rebuild() Software.model_rebuild() SupportiveEntity.model_rebuild() @@ -27434,9 +27328,24 @@ class CatalysisDataset(Dataset, ClassifierMixin): IUPACName.model_rebuild() SMILES.model_rebuild() MaterialisticMixin.model_rebuild() +Reactor.model_rebuild() +ChemicalReactor.model_rebuild() +ElectrochemicalReactor.model_rebuild() +CSTR.model_rebuild() +PlugFlowReactor.model_rebuild() +Autoclave.model_rebuild() +SlurryReactor.model_rebuild() +Microreactor.model_rebuild() +FixedBedReactor.model_rebuild() +FluidizedBedReactor.model_rebuild() ChemicalSubstanceMixin.model_rebuild() +DissolvingSubstance.model_rebuild() +Catalyst.model_rebuild() PolymerMixin.model_rebuild() MaterialEntity.model_rebuild() +StartingMaterial.model_rebuild() +Reagent.model_rebuild() +ChemicalProduct.model_rebuild() MaterialSample.model_rebuild() Precursor.model_rebuild() CatalystSample.model_rebuild() @@ -27448,16 +27357,6 @@ class CatalysisDataset(Dataset, ClassifierMixin): Volume.model_rebuild() Density.model_rebuild() Pressure.model_rebuild() -ChemicalReaction.model_rebuild() -StartingMaterial.model_rebuild() -DissolvingSubstance.model_rebuild() -Reagent.model_rebuild() -ChemicalProduct.model_rebuild() -Catalyst.model_rebuild() -Reactor.model_rebuild() -Yield.model_rebuild() -MolarEquivalent.model_rebuild() -PercentageOfTotal.model_rebuild() SubstanceSampleCharacterizationDataset.model_rebuild() ReactionMonitoringDataset.model_rebuild() SubstanceSampleCharacterization.model_rebuild() From 8cb9dd91a62650056414d7f1d86695c481b94054 Mon Sep 17 00:00:00 2001 From: HendrikBorgelt <84382772+HendrikBorgelt@users.noreply.github.com> Date: Tue, 14 Jul 2026 15:07:40 +0200 Subject: [PATCH 7/7] Remove duplicate slots introduced by the upstream merge, regenerate artifacts Rebasing onto upstream/main surfaced additional duplication beyond the already-resolved coremeta4cat_reaction_ap.yaml conflict: PR #118 also added has_cathode/has_anode/has_cell_operating_mode/has_active_area/ has_faradaic_current and several catalyst-bed/stirrer geometry slots to coremeta4cat_common.yaml that duplicate slots already defined locally in coremeta4cat_reaction_ap.yaml (same concepts, same VOC4CAT terms in most cases, different slot names), plus has_conversion/has_space_time_yield/ has_selectivity referencing #118's Conversion/SpaceTimeYield/Selectivity classes -- which aren't included in this PR (see the PR description's note on keeping those for separate discussion). Removes the now-orphaned duplicates so the schema resolves cleanly, and regenerates all derived artifacts against the final merged state. --- docs/assets/coremeta4cat_vocabulary.xlsx | Bin 89397 -> 89397 bytes .../metadata_characterization_hierarchy.html | 2 +- .../metadata_coremeta4cat_overview.html | 2 +- docs/assets/metadata_reaction_hierarchy.html | 2 +- .../assets/metadata_simulation_hierarchy.html | 2 +- docs/assets/metadata_synthesis_hierarchy.html | 2 +- docs/schema/coremeta4cat.yaml | 4 +- .../schema/coremeta4cat_common.yaml | 103 ------------------ 8 files changed, 7 insertions(+), 110 deletions(-) diff --git a/docs/assets/coremeta4cat_vocabulary.xlsx b/docs/assets/coremeta4cat_vocabulary.xlsx index 7e9a4fe2130e158237a262423309f8ebb9f48638..be5da8256e040d3539deab26a4010fec84c98e6c 100644 GIT binary patch delta 522 zcmdnGi*@TRR-OQFW)=|!1_lm>xfK(64sy(`co*YYuztzJt6KH9`gmO<^%eXS6b(6# z=z8tZU6i@_$cnqSCr?`|-Nb$T$NxV!!ND(H#;om)#crZIkWT!_e`o z!SASzU@ljAY(dv0<2MJj|1SK-q553Az~hugkO7ymz4T4b%r9%c%wIT@#f{nQ#fGIE zu5kxiReALO-84`&wsf%$uCKlSyw@Mw_>v{hX6N- zwilM=0MT*Mkt`s3r+lbCh!)7#jRnh}*$U!s|0d1YY64=^1~Beq1~R5wgfKn_2`Gj# zZf68BZiO*&f*DW48B;)v>E4lyHt^7&-XFAT2^y$Sw%uA19v-13P$2RU-f-^B=SyO}ZZs#g8wjY^BwhzqDsm@tFo zk(lbeu!|;vNmt&z^*nuz_h9PrAOHW{3|sQeX?KJE!AhPh2{Am|-Y&XOclMi09D~bV z_ti=BI`mqj#n&wQ!ejlxtA3TNQ>2J!gi5N2rbO$^`Mqyem{f)RT7SWhX)$B;mK%XA z^NKAtw;ViHFTE^9t^LNCkox=IEBDXYu|=@``}5`3Gk>mmskG8hdG*qZPV6C1oNVKs z@H=ZiT%^&zxt=RSEVF4r^Knya)%?@H+s`VmKD}torblLv&86eIuFlm6mtXuk{C{M| z+{|rfryhHCs6yz9(7!*?e|eF8|1M@`%p7F_HU@?{>I@9R3=Et9GU~B0<(6;O=IZ78i6 m4UtcW(rcmg=V(StkUqT_h

-
+
diff --git a/docs/assets/metadata_coremeta4cat_overview.html b/docs/assets/metadata_coremeta4cat_overview.html index 42ad7271f..2d152d708 100644 --- a/docs/assets/metadata_coremeta4cat_overview.html +++ b/docs/assets/metadata_coremeta4cat_overview.html @@ -19,7 +19,7 @@
-
+
diff --git a/docs/assets/metadata_reaction_hierarchy.html b/docs/assets/metadata_reaction_hierarchy.html index 6fa521d60..f506e87ed 100644 --- a/docs/assets/metadata_reaction_hierarchy.html +++ b/docs/assets/metadata_reaction_hierarchy.html @@ -18,7 +18,7 @@
-
+
diff --git a/docs/assets/metadata_simulation_hierarchy.html b/docs/assets/metadata_simulation_hierarchy.html index 261920d02..e852165c2 100644 --- a/docs/assets/metadata_simulation_hierarchy.html +++ b/docs/assets/metadata_simulation_hierarchy.html @@ -18,7 +18,7 @@
-
+
diff --git a/docs/assets/metadata_synthesis_hierarchy.html b/docs/assets/metadata_synthesis_hierarchy.html index c4b96c923..2bfbd3621 100644 --- a/docs/assets/metadata_synthesis_hierarchy.html +++ b/docs/assets/metadata_synthesis_hierarchy.html @@ -18,7 +18,7 @@
-
+
diff --git a/docs/schema/coremeta4cat.yaml b/docs/schema/coremeta4cat.yaml index 7fa2a6523..bb6b147cf 100644 --- a/docs/schema/coremeta4cat.yaml +++ b/docs/schema/coremeta4cat.yaml @@ -19642,7 +19642,7 @@ classes: class_uri: qudt:Quantity metamodel_version: 1.7.0 source_file: coremeta4cat.yaml -source_file_date: '2026-07-14T14:52:46' +source_file_date: '2026-07-14T15:00:37' source_file_size: 7440 -generation_date: '2026-07-14T14:59:29' +generation_date: '2026-07-14T15:05:01' diff --git a/src/coremeta4cat/schema/coremeta4cat_common.yaml b/src/coremeta4cat/schema/coremeta4cat_common.yaml index dc5df8c13..435ff1fcd 100644 --- a/src/coremeta4cat/schema/coremeta4cat_common.yaml +++ b/src/coremeta4cat/schema/coremeta4cat_common.yaml @@ -355,28 +355,6 @@ slots: range: MassToChargeRatio description: Mass-to-charge ratio in mass spectrometric measurements. - has_conversion: - is_a: has_quantitative_attribute - slot_uri: SIO:000008 - range: Conversion - description: |- - A dimensionless physical quantity describing the fraction of a reactant that reacts in a chemical conversion. If a reactant is consumed completely its conversion is 1 (or 100 %). - - has_space_time_yield: - is_a: has_quantitative_attribute - slot_uri: SIO:000008 - range: SpaceTimeYield - description: |- - A physical quantity that describes the amount of product produced per unit of time and unit of producing entity. The producing entity is for example the volume of a chemical reactor or in catalysis the mass or volume or moles of catalyst. Example unit: kg{product} / (hour * cubicmeter{catalyst}) - - has_selectivity: - is_a: has_quantitative_attribute - slot_uri: SIO:000008 - range: Selectivity - description: |- - A dimensionless physical quantity describing how effective a reactant is converted to the desired product in a chemical conversion. It is calculated as the ratio between the amount of the desired product and the amount of the desired product that could have been formed if all reactants were converted to the desired product. The selectivity is 1 (or 100 %) if no other than the desired product is formed. - multivalued: true - # ---- Contextualized sub-slots for drying step ---- # Used in DryingMixin where both temperature and duration appear together. @@ -460,87 +438,6 @@ slots: range: Duration description: Integration or acquisition time per measurement step. - has_cathode: - is_a: carried_out_by - slot_uri: VOC4CAT:0007254 - range: string - description: |- - The electrode where reduction occurs in an electrochemical cell. It is the negative electrode in an electrolytic cell, while it is the positive electrode in a galvanic cell. - - has_anode: - is_a: carried_out_by - slot_uri: VOC4CAT:0007255 - range: string - description: |- - The electrode where oxidation occurs in an electrochemical cell. It is the positive electrode in an electrolytic cell, while it is the negative electrode in a galvanic cell. - - has_cell_operating_mode: - is_a: has_qualitative_attribute - slot_uri: SIO:000008 - range: string - description: |- - The functional mode of an electrochemical cell based on the direction of energy conversion, specifiying wheter the system generates electrical energy from spontaneous reactions or consumes energy to drive non-spontaneous reactions. - - has_active_area: - is_a: has_quantitative_attribute - slot_uri: SIO:000008 - range: QuantitativeAttribute - description: |- - In contrast to substrate area, the actual area of a sample or electrode which is active. - - has_faradaic_current: - is_a: has_quantitative_attribute - slot_uri: SIO:000008 - range: QuantitativeAttribute - description: |- - The current that is flowing through an electrochemical cell and is causing (or is caused by) chemical reactions (charge transfer) occurring at the electrode surfaces. - - has_stirrer_type: - is_a: has_qualitative_attribute - slot_uri: VOC4CAT:0008113 - range: string - inlined: false - inlined_as_list: false - description: |- - The category of mechanical or magnetic agitation device used to ensure homogeneous mixing within a reaction system or mixing vessel, such as a magnetic stirrer or an overhead mechanical (steel shaft) stirrer. - - has_stirrer_diameter: - is_a: has_quantitative_attribute - slot_uri: VOC4CAT:0008115 - range: QuantitativeAttribute - description: |- - The effective diameter of the stirrer. Typically expressed as the distance across the rotating blade or mixing head from one tip to the opposite tip. - - has_catalyst_particle_size: - is_a: has_quantitative_attribute - slot_uri: VOC4CAT:0008212 - range: QuantitativeAttribute - description: |- - A measure of the characteristic linear dimension of a particle in a sample, typically reported as diameter, equivalent diameter, or another size metric determined by an appropriate measurement method. - - has_catalyst_bed_volume: - is_a: has_quantitative_attribute - slot_uri: VOC4CAT:0007021 - range: QuantitativeAttribute - description: |- - The bulk volume taken up by the catalyst and potential diluent in a fixed bed reactor. - - has_catalyst_dilution_material: - is_a: has_qualitative_attribute - slot_uri: VOC4CAT:0008218 - range: QualitativeAttribute - inlined: false - inlined_as_list: false - description: |- - An inert solid mixed with catalyst particles in a fixed bed to modify bed properties (e.g., improve heat transfer, hydrodynamics or isothermicity) without participating in the reaction. - - has_catalyst_bed_height: - is_a: has_quantitative_attribute - slot_uri: VOC4CAT:0008217 - range: QuantitativeAttribute - description: |- - The axial length of the packed catalyst section in a reactor, measured along the direction of flow between the defined bed boundaries. - # ---- Generic domain has_X slots (QualitativeAttribute) ---- has_atmosphere: