From 7c642cbac703489fee0418c6efa2f116caf00989 Mon Sep 17 00:00:00 2001 From: Ana Velazquez Date: Thu, 26 Sep 2024 15:41:14 +0200 Subject: [PATCH 1/3] updating schema --- README.md | 64 +-- project/excel/hzb_metadata_schema.xlsx | Bin 6939 -> 11782 bytes project/graphql/hzb_metadata_schema.graphql | 97 ++++ .../jsonld/hzb_metadata_schema.context.jsonld | 61 ++- project/jsonld/hzb_metadata_schema.jsonld | 371 ++++++++++++++- .../hzb_metadata_schema.schema.json | 394 +++++++++++++++- project/owl/hzb_metadata_schema.owl.ttl | 345 +++++++++++--- project/prefixmap/hzb_metadata_schema.yaml | 11 +- project/protobuf/hzb_metadata_schema.proto | 93 ++++ project/shacl/hzb_metadata_schema.shacl.ttl | 414 ++++++++++++++++- project/shex/hzb_metadata_schema.shex | 104 ++++- project/sqlschema/hzb_metadata_schema.sql | 190 +++++++- .../datamodel/hzb_metadata_schema.py | 430 +++++++++++++++++- .../schema/hzb_metadata_schema.yaml | 279 ++++++++---- 14 files changed, 2577 insertions(+), 276 deletions(-) diff --git a/README.md b/README.md index fbecdf1..b2755fe 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,38 @@ At the moment, this schema is organized into 2 separate modules: * energy definitions * matter definitions -# Basic content for our yml schema definitions: +Mappings to: +* voc4cat +* Chemical Entities Mixtures and Reactions Ontological Framework +* NeXus definitions?? - + +## Website + +[https://anak-velazquez.github.io/hzb-metadata-schema](https://anak-velazquez.github.io/hzb-metadata-schema) + +## Repository Structure + +* [examples/](examples/) - example data +* [project/](project/) - project files (do not edit these) +* [src/](src/) - source files (edit these in develop branch) + * [hzb_metadata_schema](src/hzb_metadata_schema) + * [schema](src/hzb_metadata_schema/schema) -- LinkML schema + (edit this) + * [datamodel](src/hzb_metadata_schema/datamodel) -- generated + Python datamodel +* [tests/](tests/) - Python tests + +## Developer Documentation + +
+Use the `make` command to generate project artefacts: + +* `make all`: make everything +* `make deploy`: deploys site +
+ + +### Basic content for our yml schema definitions: * names, identifiers, and metadata * id – the unique identifier for the schema, as a IRI * name – the schema name. Use only alphanumeric characters, underscores, and dashes @@ -23,12 +54,7 @@ At the moment, this schema is organized into 2 separate modules: See also uris-and-mappings: https://linkml.io/linkml/schemas/models.html -# Mappings to: -* voc4cat -* Chemical Entities Mixtures and Reactions Ontological Framework -* NeXus definitions?? - - -# Conventions +### Conventions ATM following the same conventions a Biolink. In Biolink Model YAML any class, slot, or type is defined in `sentence case` form. When this model is compiled to various forms (like JSON-Schema, OWL, Markdown) the representation is based on the following convention: - classes are named in `CamelCase` form @@ -66,30 +92,6 @@ The `slot_uri` slot can be used to define a canonical URI that is the true repre Please check more details here: https://github.com/biolink/biolink-model/blob/master/src/docs/understanding-the-model.md -## Website - -[https://anak-velazquez.github.io/hzb-metadata-schema](https://anak-velazquez.github.io/hzb-metadata-schema) - -## Repository Structure - -* [examples/](examples/) - example data -* [project/](project/) - project files (do not edit these) -* [src/](src/) - source files (edit these in develop branch) - * [hzb_metadata_schema](src/hzb_metadata_schema) - * [schema](src/hzb_metadata_schema/schema) -- LinkML schema - (edit this) - * [datamodel](src/hzb_metadata_schema/datamodel) -- generated - Python datamodel -* [tests/](tests/) - Python tests - -## Developer Documentation - -
-Use the `make` command to generate project artefacts: - -* `make all`: make everything -* `make deploy`: deploys site -
## Credits diff --git a/project/excel/hzb_metadata_schema.xlsx b/project/excel/hzb_metadata_schema.xlsx index 151a344c89b0e68742035e91309b8c74d8dc0c1f..6a762e70151c93ac2ea7042698be0ef9c1a1333a 100644 GIT binary patch literal 11782 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 NgHv?ERtp?_`WGtNt0Mpa diff --git a/project/graphql/hzb_metadata_schema.graphql b/project/graphql/hzb_metadata_schema.graphql index 83503c5..f9bdd7e 100644 --- a/project/graphql/hzb_metadata_schema.graphql +++ b/project/graphql/hzb_metadata_schema.graphql @@ -1,6 +1,34 @@ # metamodel_version: 1.7.0 +type Beamline + { + id: Uriorcurie! + iri: String + name: String + category: String! + type: String + } + +type BeamlineExperiment + { + id: Uriorcurie! + iri: String + name: String + category: String! + } + +type BESSY + { + id: Uriorcurie! + iri: String + name: String + category: String! + } + type CatalysisSample { + id: Uriorcurie! + iri: String + name: String category: String! primaryEmail: String birthDate: Date @@ -15,20 +43,76 @@ interface ChemicalOrDrugOrTreatment type Device { + id: Uriorcurie! + iri: String + name: String category: String! } interface Entity { + id: Uriorcurie! + iri: String + name: String + } + +type Experiment + { + id: Uriorcurie! + iri: String + name: String + category: String! + } + +type MyspotBeamline + { + id: Uriorcurie! + iri: String + name: String + category: String! + type: String } type NamedThing { + id: Uriorcurie! + iri: String + name: String + category: String! + } + +type Organization + { + name: String + type: String + } + +type Person + { + id: Uriorcurie! + iri: String + name: String + category: String! + primaryEmail: String + birthDate: Date + ageInYears: Integer + gender: GenderEnum + hasEmploymentHistory: [String] + } + +type RockitExperiment + { + id: Uriorcurie! + iri: String + name: String category: String! } type Sample { + id: Uriorcurie! + iri: String + name: String category: String! primaryEmail: String birthDate: Date @@ -41,3 +125,16 @@ type SampleCollection entries: [Sample] } +type Scientist + { + id: Uriorcurie! + iri: String + name: String + category: String! + primaryEmail: String + birthDate: Date + ageInYears: Integer + gender: GenderEnum + hasEmploymentHistory: [String] + } + diff --git a/project/jsonld/hzb_metadata_schema.context.jsonld b/project/jsonld/hzb_metadata_schema.context.jsonld index 4baf362..3e56419 100644 --- a/project/jsonld/hzb_metadata_schema.context.jsonld +++ b/project/jsonld/hzb_metadata_schema.context.jsonld @@ -1,13 +1,17 @@ { "comments": { "description": "Auto generated by LinkML jsonld context generator", - "generation_date": "2024-08-05T15:01:14", + "generation_date": "2024-08-05T18:33:37", "source": "hzb_metadata_schema.yaml" }, "@context": { - "BFO": "http://example.org/UNKNOWN/BFO/", + "BFO": { + "@id": "http://purl.obolibrary.org/obo/BFO_", + "@prefix": true + }, "CHEBI": "http://example.org/UNKNOWN/CHEBI/", "CHEMBL.COMPOUND": "http://example.org/UNKNOWN/CHEMBL.COMPOUND/", + "GSSO": "http://purl.bioontology.org/ontology/GSSO/", "MAXO": "http://example.org/UNKNOWN/MAXO/", "PATO": { "@id": "http://purl.obolibrary.org/obo/PATO_", @@ -19,9 +23,10 @@ "WIKIDATA": "http://example.org/UNKNOWN/WIKIDATA/", "biolink": "https://w3id.org/biolink/", "dcid": "http://example.org/UNKNOWN/dcid/", - "example": "https://example.org/", "hzb_metadata_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema/", "linkml": "https://w3id.org/linkml/", + "prov": "http://www.w3.org/ns/prov#", + "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "schema": "http://schema.org/", "skos": "http://www.w3.org/2004/02/skos/core#", "@vocab": "https://w3id.org/anak-velazquez/hzb-metadata-schema/", @@ -29,6 +34,9 @@ "@type": "xsd:integer", "@id": "age_in_years" }, + "type": { + "@id": "type" + }, "birth_date": { "@type": "xsd:date", "@id": "schema:birthDate" @@ -39,12 +47,30 @@ "category": { "@id": "category" }, + "current_address": { + "@id": "current_address" + }, "description": { "@id": "schema:description" }, + "gender": { + "@context": { + "@vocab": "@null", + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "schema:gender" + }, + "has_employment_history": { + "@id": "has_employment_history" + }, "id": "@id", + "iri": { + "@id": "iri" + }, "name": { - "@id": "schema:name" + "@id": "name" }, "primary_email": { "@id": "schema:email" @@ -62,6 +88,15 @@ }, "@id": "vital_status" }, + "Beamline": { + "@id": "Beamline" + }, + "BeamlineExperiment": { + "@id": "BeamlineExperiment" + }, + "BESSY": { + "@id": "BESSY" + }, "CatalysisSample": { "@id": "CatalysisSample" }, @@ -74,14 +109,32 @@ "Entity": { "@id": "Entity" }, + "Experiment": { + "@id": "Experiment" + }, + "MyspotBeamline": { + "@id": "MyspotBeamline" + }, "NamedThing": { "@id": "NamedThing" }, + "Organization": { + "@id": "Organization" + }, + "Person": { + "@id": "schema:Person" + }, + "RockitExperiment": { + "@id": "RockitExperiment" + }, "Sample": { "@id": "Sample" }, "SampleCollection": { "@id": "SampleCollection" + }, + "Scientist": { + "@id": "Scientist" } } } diff --git a/project/jsonld/hzb_metadata_schema.jsonld b/project/jsonld/hzb_metadata_schema.jsonld index 976219f..bbbe663 100644 --- a/project/jsonld/hzb_metadata_schema.jsonld +++ b/project/jsonld/hzb_metadata_schema.jsonld @@ -32,8 +32,20 @@ "prefix_reference": "http://purl.obolibrary.org/obo/PATO_" }, { - "prefix_prefix": "example", - "prefix_reference": "https://example.org/" + "prefix_prefix": "rdfs", + "prefix_reference": "http://www.w3.org/2000/01/rdf-schema#" + }, + { + "prefix_prefix": "prov", + "prefix_reference": "http://www.w3.org/ns/prov#" + }, + { + "prefix_prefix": "GSSO", + "prefix_reference": "http://purl.bioontology.org/ontology/GSSO/" + }, + { + "prefix_prefix": "BFO", + "prefix_reference": "http://purl.obolibrary.org/obo/BFO_" } ], "default_prefix": "hzb_metadata_schema", @@ -384,6 +396,32 @@ ] } ] + }, + { + "name": "gender_enum", + "definition_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/GenderEnum", + "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", + "permissible_values": [ + { + "text": "Woman", + "description": "identified as woman", + "meaning": "GSSO:000369" + }, + { + "text": "Masculine", + "description": "masculine", + "todos": [ + "map this to an ontology" + ] + }, + { + "text": "Diverse", + "description": "other", + "todos": [ + "map this to an ontology" + ] + } + ] } ], "slots": [ @@ -397,10 +435,35 @@ ], "slot_uri": "http://schema.org/identifier", "identifier": true, + "owner": "Entity", + "domain_of": [ + "Entity" + ], "range": "uriorcurie", "required": true, "@type": "SlotDefinition" }, + { + "name": "iri", + "definition_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/iri", + "description": "Internationalized Resource Identifier", + "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", + "slot_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/iri", + "owner": "Entity", + "domain_of": [ + "Entity" + ], + "range": "string", + "@type": "SlotDefinition" + }, + { + "name": "category", + "definition_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/category", + "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", + "slot_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/category", + "range": "string", + "@type": "SlotDefinition" + }, { "name": "name", "definition_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/name", @@ -410,6 +473,10 @@ "http://schema.org/name" ], "slot_uri": "http://schema.org/name", + "owner": "Entity", + "domain_of": [ + "Entity" + ], "range": "string", "@type": "SlotDefinition" }, @@ -436,6 +503,7 @@ "slot_uri": "http://schema.org/email", "owner": "Sample", "domain_of": [ + "Person", "Sample" ], "range": "string", @@ -452,6 +520,7 @@ "slot_uri": "http://schema.org/birthDate", "owner": "Sample", "domain_of": [ + "Person", "Sample" ], "range": "date", @@ -465,6 +534,7 @@ "slot_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/age_in_years", "owner": "Sample", "domain_of": [ + "Person", "Sample" ], "range": "integer", @@ -483,6 +553,43 @@ "range": "PersonStatus", "@type": "SlotDefinition" }, + { + "name": "gender", + "definition_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/gender", + "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", + "mappings": [ + "http://schema.org/gender" + ], + "slot_uri": "http://schema.org/gender", + "owner": "Person", + "domain_of": [ + "Person" + ], + "range": "gender_enum", + "@type": "SlotDefinition" + }, + { + "name": "has_employment_history", + "definition_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/has_employment_history", + "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", + "slot_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/has_employment_history", + "owner": "Person", + "domain_of": [ + "Person" + ], + "range": "string", + "multivalued": true, + "inlined_as_list": true, + "@type": "SlotDefinition" + }, + { + "name": "current_address", + "definition_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/current_address", + "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", + "slot_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/current_address", + "range": "string", + "@type": "SlotDefinition" + }, { "name": "catalysisSample__sample_environment", "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", @@ -510,15 +617,45 @@ "@type": "SlotDefinition" }, { - "name": "category", + "name": "beamline__type", "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", - "slot_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/category", + "slot_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/type", + "designates_type": true, + "alias": "type", + "owner": "Beamline", + "domain_of": [ + "Beamline" + ], "range": "string", - "required": true, "@type": "SlotDefinition" }, { - "name": "sample_primary_email", + "name": "organization__name", + "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", + "slot_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/name", + "alias": "name", + "owner": "Organization", + "domain_of": [ + "Organization" + ], + "range": "string", + "@type": "SlotDefinition" + }, + { + "name": "organization__type", + "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", + "slot_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/type", + "designates_type": true, + "alias": "type", + "owner": "Organization", + "domain_of": [ + "Organization" + ], + "range": "string", + "@type": "SlotDefinition" + }, + { + "name": "Sample_primary_email", "definition_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/primary_email", "description": "The main email address of a person", "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", @@ -540,7 +677,8 @@ "@type": "SlotDefinition" }, { - "name": "namedThing_category", + "name": "NamedThing_category", + "definition_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/category", "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", "is_a": "category", "domain": "NamedThing", @@ -573,6 +711,55 @@ "class_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/ChemicalOrDrugOrTreatment", "@type": "ClassDefinition" }, + { + "name": "Person", + "definition_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/Person", + "description": "A person (alive, dead, undead, or fictional).", + "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", + "aliases": [ + "human being", + "individual" + ], + "mappings": [ + "schema:Person" + ], + "is_a": "NamedThing", + "slots": [ + "id", + "iri", + "name", + "NamedThing_category", + "primary_email", + "birth_date", + "age_in_years", + "gender", + "has_employment_history" + ], + "slot_usage": {}, + "class_uri": "http://schema.org/Person", + "@type": "ClassDefinition" + }, + { + "name": "Scientist", + "definition_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/Scientist", + "description": "A scientist (alive, dead, undead, or fictional).", + "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", + "is_a": "Person", + "slots": [ + "id", + "iri", + "name", + "NamedThing_category", + "primary_email", + "birth_date", + "age_in_years", + "gender", + "has_employment_history" + ], + "slot_usage": {}, + "class_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/Scientist", + "@type": "ClassDefinition" + }, { "name": "Device", "definition_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/Device", @@ -587,7 +774,10 @@ ], "is_a": "NamedThing", "slots": [ - "namedThing_category" + "id", + "iri", + "name", + "NamedThing_category" ], "slot_usage": {}, "class_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/Device", @@ -600,8 +790,11 @@ "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", "is_a": "Sample", "slots": [ - "namedThing_category", - "sample_primary_email", + "id", + "iri", + "name", + "NamedThing_category", + "Sample_primary_email", "birth_date", "age_in_years", "vital_status", @@ -624,8 +817,11 @@ "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", "is_a": "NamedThing", "slots": [ - "namedThing_category", - "sample_primary_email", + "id", + "iri", + "name", + "NamedThing_category", + "Sample_primary_email", "birth_date", "age_in_years", "vital_status" @@ -656,12 +852,150 @@ "tree_root": true, "@type": "ClassDefinition" }, + { + "name": "Experiment", + "definition_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/Experiment", + "description": "something following a protocol?", + "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", + "is_a": "NamedThing", + "slots": [ + "id", + "iri", + "name", + "NamedThing_category" + ], + "slot_usage": {}, + "class_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/Experiment", + "@type": "ClassDefinition" + }, + { + "name": "RockitExperiment", + "definition_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/RockitExperiment", + "description": "describing the standard setup for ROCK-IT beamline experiment. Sonal + Ana", + "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", + "is_a": "BeamlineExperiment", + "slots": [ + "id", + "iri", + "name", + "NamedThing_category" + ], + "slot_usage": {}, + "class_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/RockitExperiment", + "@type": "ClassDefinition" + }, + { + "name": "BESSY", + "definition_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/BESSY", + "description": "Sonal", + "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", + "is_a": "NamedThing", + "slots": [ + "id", + "iri", + "name", + "NamedThing_category" + ], + "slot_usage": {}, + "class_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/BESSY", + "@type": "ClassDefinition" + }, + { + "name": "MyspotBeamline", + "definition_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/MyspotBeamline", + "description": "Sonal", + "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", + "is_a": "Beamline", + "slots": [ + "id", + "iri", + "name", + "NamedThing_category", + "beamline__type" + ], + "slot_usage": {}, + "class_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/MyspotBeamline", + "@type": "ClassDefinition" + }, + { + "name": "Beamline", + "definition_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/Beamline", + "description": "Sonal", + "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", + "is_a": "NamedThing", + "slots": [ + "id", + "iri", + "name", + "NamedThing_category", + "beamline__type" + ], + "slot_usage": {}, + "attributes": [ + { + "name": "type", + "designates_type": true, + "range": "string", + "@type": "SlotDefinition" + } + ], + "class_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/Beamline", + "@type": "ClassDefinition" + }, + { + "name": "BeamlineExperiment", + "definition_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/BeamlineExperiment", + "description": "Sonal", + "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", + "is_a": "Experiment", + "slots": [ + "id", + "iri", + "name", + "NamedThing_category" + ], + "slot_usage": {}, + "class_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/BeamlineExperiment", + "@type": "ClassDefinition" + }, + { + "name": "Organization", + "definition_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/Organization", + "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", + "slots": [ + "organization__name", + "organization__type" + ], + "slot_usage": {}, + "attributes": [ + { + "name": "name", + "@type": "SlotDefinition" + }, + { + "name": "type", + "designates_type": true, + "range": "string", + "@type": "SlotDefinition" + } + ], + "class_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/Organization", + "@type": "ClassDefinition" + }, { "name": "Entity", "definition_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/Entity", - "description": "Root Biolink Model class for all things and informational relationships, real or imagined.", + "description": "An entity is anything that exists or has existed or will exist. Model class for all things and informational relationships, real or imagined.", "from_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema", + "exact_mappings": [ + "BFO:0000001" + ], "abstract": true, + "slots": [ + "id", + "iri", + "name" + ], "slot_usage": {}, "class_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/Entity", "@type": "ClassDefinition" @@ -680,7 +1014,10 @@ ], "is_a": "Entity", "slots": [ - "namedThing_category" + "id", + "iri", + "name", + "NamedThing_category" ], "slot_usage": {}, "class_uri": "https://w3id.org/anak-velazquez/hzb-metadata-schema/NamedThing", @@ -689,9 +1026,9 @@ ], "metamodel_version": "1.7.0", "source_file": "hzb_metadata_schema.yaml", - "source_file_date": "2024-08-05T15:01:08", - "source_file_size": 4633, - "generation_date": "2024-08-05T15:01:15", + "source_file_date": "2024-08-05T18:33:25", + "source_file_size": 7388, + "generation_date": "2024-08-05T18:33:37", "@type": "SchemaDefinition", "@context": [ "project/jsonld/hzb_metadata_schema.context.jsonld", diff --git a/project/jsonschema/hzb_metadata_schema.schema.json b/project/jsonschema/hzb_metadata_schema.schema.json index 4c88e9e..6ae41b9 100644 --- a/project/jsonschema/hzb_metadata_schema.schema.json +++ b/project/jsonschema/hzb_metadata_schema.schema.json @@ -1,5 +1,80 @@ { "$defs": { + "BESSY": { + "additionalProperties": false, + "description": "Sonal", + "properties": { + "id": { + "description": "A unique identifier for a thing", + "type": "string" + }, + "iri": { + "description": "Internationalized Resource Identifier", + "type": "string" + }, + "name": { + "description": "A human-readable name for a thing", + "type": "string" + } + }, + "required": [ + "id" + ], + "title": "BESSY", + "type": "object" + }, + "Beamline": { + "additionalProperties": false, + "description": "Sonal", + "properties": { + "id": { + "description": "A unique identifier for a thing", + "type": "string" + }, + "iri": { + "description": "Internationalized Resource Identifier", + "type": "string" + }, + "name": { + "description": "A human-readable name for a thing", + "type": "string" + }, + "type": { + "enum": [ + "Beamline" + ], + "type": "string" + } + }, + "required": [ + "id" + ], + "title": "Beamline", + "type": "object" + }, + "BeamlineExperiment": { + "additionalProperties": false, + "description": "Sonal", + "properties": { + "id": { + "description": "A unique identifier for a thing", + "type": "string" + }, + "iri": { + "description": "Internationalized Resource Identifier", + "type": "string" + }, + "name": { + "description": "A human-readable name for a thing", + "type": "string" + } + }, + "required": [ + "id" + ], + "title": "BeamlineExperiment", + "type": "object" + }, "CatalysisSample": { "additionalProperties": false, "description": "core parameters of a catalysis sample #metadata terms (parameters) are mapped to nfdi voc4cat", @@ -13,6 +88,18 @@ "format": "date", "type": "string" }, + "id": { + "description": "A unique identifier for a thing", + "type": "string" + }, + "iri": { + "description": "Internationalized Resource Identifier", + "type": "string" + }, + "name": { + "description": "A human-readable name for a thing", + "type": "string" + }, "primary_email": { "description": "The main email address of a person", "pattern": "^\\S+@[\\S+\\.]+\\S+", @@ -26,21 +113,182 @@ "description": "living or dead status" } }, + "required": [ + "id" + ], "title": "CatalysisSample", "type": "object" }, "Device": { "additionalProperties": false, "description": "A thing made or adapted for a particular purpose, especially a piece of mechanical or electronic equipment", + "properties": { + "id": { + "description": "A unique identifier for a thing", + "type": "string" + }, + "iri": { + "description": "Internationalized Resource Identifier", + "type": "string" + }, + "name": { + "description": "A human-readable name for a thing", + "type": "string" + } + }, + "required": [ + "id" + ], "title": "Device", "type": "object" }, + "Experiment": { + "additionalProperties": false, + "description": "something following a protocol?", + "properties": { + "id": { + "description": "A unique identifier for a thing", + "type": "string" + }, + "iri": { + "description": "Internationalized Resource Identifier", + "type": "string" + }, + "name": { + "description": "A human-readable name for a thing", + "type": "string" + } + }, + "required": [ + "id" + ], + "title": "Experiment", + "type": "object" + }, + "GenderEnum": { + "description": "", + "enum": [ + "Woman", + "Masculine", + "Diverse" + ], + "title": "GenderEnum", + "type": "string" + }, + "MyspotBeamline": { + "additionalProperties": false, + "description": "Sonal", + "properties": { + "id": { + "description": "A unique identifier for a thing", + "type": "string" + }, + "iri": { + "description": "Internationalized Resource Identifier", + "type": "string" + }, + "name": { + "description": "A human-readable name for a thing", + "type": "string" + }, + "type": { + "enum": [ + "Myspot_Beamline" + ], + "type": "string" + } + }, + "required": [ + "id" + ], + "title": "MyspotBeamline", + "type": "object" + }, "NamedThing": { "additionalProperties": false, "description": "a databased entity or concept/class", + "properties": { + "id": { + "description": "A unique identifier for a thing", + "type": "string" + }, + "iri": { + "description": "Internationalized Resource Identifier", + "type": "string" + }, + "name": { + "description": "A human-readable name for a thing", + "type": "string" + } + }, + "required": [ + "id" + ], "title": "NamedThing", "type": "object" }, + "Organization": { + "additionalProperties": false, + "description": "", + "properties": { + "name": { + "type": "string" + }, + "type": { + "enum": [ + "Organization" + ], + "type": "string" + } + }, + "title": "Organization", + "type": "object" + }, + "Person": { + "additionalProperties": false, + "description": "A person (alive, dead, undead, or fictional).", + "properties": { + "age_in_years": { + "description": "Number of years since birth", + "type": "integer" + }, + "birth_date": { + "description": "Date on which a person is born", + "format": "date", + "type": "string" + }, + "gender": { + "$ref": "#/$defs/GenderEnum" + }, + "has_employment_history": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "description": "A unique identifier for a thing", + "type": "string" + }, + "iri": { + "description": "Internationalized Resource Identifier", + "type": "string" + }, + "name": { + "description": "A human-readable name for a thing", + "type": "string" + }, + "primary_email": { + "description": "The main email address of a person", + "type": "string" + } + }, + "required": [ + "id" + ], + "title": "Person", + "type": "object" + }, "PersonStatus": { "description": "", "enum": [ @@ -51,6 +299,29 @@ "title": "PersonStatus", "type": "string" }, + "RockitExperiment": { + "additionalProperties": false, + "description": "describing the standard setup for ROCK-IT beamline experiment. Sonal + Ana", + "properties": { + "id": { + "description": "A unique identifier for a thing", + "type": "string" + }, + "iri": { + "description": "Internationalized Resource Identifier", + "type": "string" + }, + "name": { + "description": "A human-readable name for a thing", + "type": "string" + } + }, + "required": [ + "id" + ], + "title": "RockitExperiment", + "type": "object" + }, "Sample": { "additionalProperties": false, "description": "Represents a Sample", @@ -64,6 +335,18 @@ "format": "date", "type": "string" }, + "id": { + "description": "A unique identifier for a thing", + "type": "string" + }, + "iri": { + "description": "Internationalized Resource Identifier", + "type": "string" + }, + "name": { + "description": "A human-readable name for a thing", + "type": "string" + }, "primary_email": { "description": "The main email address of a person", "pattern": "^\\S+@[\\S+\\.]+\\S+", @@ -74,6 +357,9 @@ "description": "living or dead status" } }, + "required": [ + "id" + ], "title": "Sample", "type": "object" }, @@ -82,13 +368,104 @@ "description": "A holder for Sample objects", "properties": { "entries": { + "additionalProperties": { + "anyOf": [ + { + "$ref": "#/$defs/Sample__identifier_optional" + }, + { + "type": "null" + } + ] + }, + "type": "object" + } + }, + "title": "SampleCollection", + "type": "object" + }, + "Sample__identifier_optional": { + "additionalProperties": false, + "description": "Represents a Sample", + "properties": { + "age_in_years": { + "description": "Number of years since birth", + "type": "integer" + }, + "birth_date": { + "description": "Date on which a person is born", + "format": "date", + "type": "string" + }, + "id": { + "description": "A unique identifier for a thing", + "type": "string" + }, + "iri": { + "description": "Internationalized Resource Identifier", + "type": "string" + }, + "name": { + "description": "A human-readable name for a thing", + "type": "string" + }, + "primary_email": { + "description": "The main email address of a person", + "pattern": "^\\S+@[\\S+\\.]+\\S+", + "type": "string" + }, + "vital_status": { + "$ref": "#/$defs/PersonStatus", + "description": "living or dead status" + } + }, + "required": [], + "title": "Sample", + "type": "object" + }, + "Scientist": { + "additionalProperties": false, + "description": "A scientist (alive, dead, undead, or fictional).", + "properties": { + "age_in_years": { + "description": "Number of years since birth", + "type": "integer" + }, + "birth_date": { + "description": "Date on which a person is born", + "format": "date", + "type": "string" + }, + "gender": { + "$ref": "#/$defs/GenderEnum" + }, + "has_employment_history": { "items": { - "$ref": "#/$defs/Sample" + "type": "string" }, "type": "array" + }, + "id": { + "description": "A unique identifier for a thing", + "type": "string" + }, + "iri": { + "description": "Internationalized Resource Identifier", + "type": "string" + }, + "name": { + "description": "A human-readable name for a thing", + "type": "string" + }, + "primary_email": { + "description": "The main email address of a person", + "type": "string" } }, - "title": "SampleCollection", + "required": [ + "id" + ], + "title": "Scientist", "type": "object" } }, @@ -99,10 +476,17 @@ "metamodel_version": "1.7.0", "properties": { "entries": { - "items": { - "$ref": "#/$defs/Sample" + "additionalProperties": { + "anyOf": [ + { + "$ref": "#/$defs/Sample__identifier_optional" + }, + { + "type": "null" + } + ] }, - "type": "array" + "type": "object" } }, "title": "hzb-metadata-schema", diff --git a/project/owl/hzb_metadata_schema.owl.ttl b/project/owl/hzb_metadata_schema.owl.ttl index fa27fac..507eed1 100644 --- a/project/owl/hzb_metadata_schema.owl.ttl +++ b/project/owl/hzb_metadata_schema.owl.ttl @@ -1,3 +1,5 @@ +@prefix BFO: . +@prefix GSSO: . @prefix PATO: . @prefix dcterms: . @prefix hzb_metadata_schema: . @@ -5,12 +7,20 @@ @prefix owl: . @prefix rdf: . @prefix rdfs: . +@prefix schema1: . @prefix skos: . @prefix xsd: . +hzb_metadata_schema:BESSY a owl:Class, + linkml:ClassDefinition ; + rdfs:label "BESSY" ; + rdfs:subClassOf hzb_metadata_schema:NamedThing ; + skos:definition "Sonal" ; + skos:inScheme . + hzb_metadata_schema:CatalysisSample a owl:Class, linkml:ClassDefinition ; - rdfs:label "catalysisSample" ; + rdfs:label "CatalysisSample" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty hzb_metadata_schema:sample_environment ], @@ -41,9 +51,16 @@ hzb_metadata_schema:Device a owl:Class, , . +hzb_metadata_schema:RockitExperiment a owl:Class, + linkml:ClassDefinition ; + rdfs:label "Rockit_experiment" ; + rdfs:subClassOf hzb_metadata_schema:BeamlineExperiment ; + skos:definition "describing the standard setup for ROCK-IT beamline experiment. Sonal + Ana" ; + skos:inScheme . + hzb_metadata_schema:SampleCollection a owl:Class, linkml:ClassDefinition ; - rdfs:label "sampleCollection" ; + rdfs:label "SampleCollection" ; rdfs:subClassOf [ a owl:Restriction ; owl:allValuesFrom hzb_metadata_schema:Sample ; owl:onProperty hzb_metadata_schema:entries ], @@ -53,29 +70,122 @@ hzb_metadata_schema:SampleCollection a owl:Class, skos:definition "A holder for Sample objects" ; skos:inScheme . +hzb_metadata_schema:Scientist a owl:Class, + linkml:ClassDefinition ; + rdfs:label "Scientist" ; + rdfs:subClassOf hzb_metadata_schema:Person ; + skos:definition "A scientist (alive, dead, undead, or fictional)." ; + skos:inScheme . + +hzb_metadata_schema:current_address a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "current_address" ; + skos:inScheme . + hzb_metadata_schema:description a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "description" ; skos:definition "A human-readable description for a thing" ; skos:inScheme . -hzb_metadata_schema:id a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "id" ; - rdfs:range linkml:Uriorcurie ; - skos:definition "A unique identifier for a thing" ; +hzb_metadata_schema:BeamlineExperiment a owl:Class, + linkml:ClassDefinition ; + rdfs:label "BeamlineExperiment" ; + rdfs:subClassOf hzb_metadata_schema:Experiment ; + skos:definition "Sonal" ; skos:inScheme . -hzb_metadata_schema:name a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "name" ; - skos:definition "A human-readable name for a thing" ; +hzb_metadata_schema:Entity a owl:Class, + linkml:ClassDefinition ; + rdfs:label "Entity" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty hzb_metadata_schema:id ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty hzb_metadata_schema:name ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty hzb_metadata_schema:iri ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty hzb_metadata_schema:iri ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty hzb_metadata_schema:id ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty hzb_metadata_schema:iri ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty hzb_metadata_schema:name ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty hzb_metadata_schema:name ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty hzb_metadata_schema:id ] ; + skos:definition "An entity is anything that exists or has existed or will exist. Model class for all things and informational relationships, real or imagined." ; + skos:exactMatch BFO:0000001 ; skos:inScheme . -hzb_metadata_schema:Entity a owl:Class, +hzb_metadata_schema:Experiment a owl:Class, linkml:ClassDefinition ; - rdfs:label "entity" ; - skos:definition "Root Biolink Model class for all things and informational relationships, real or imagined." ; + rdfs:label "Experiment" ; + rdfs:subClassOf hzb_metadata_schema:NamedThing ; + skos:definition "something following a protocol?" ; + skos:inScheme . + +hzb_metadata_schema:Person a owl:Class, + linkml:ClassDefinition ; + rdfs:label "Person" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty hzb_metadata_schema:primary_email ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty hzb_metadata_schema:has_employment_history ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty hzb_metadata_schema:age_in_years ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Date ; + owl:onProperty hzb_metadata_schema:birth_date ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty hzb_metadata_schema:gender ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty hzb_metadata_schema:primary_email ], + [ a owl:Restriction ; + owl:allValuesFrom hzb_metadata_schema:GenderEnum ; + owl:onProperty hzb_metadata_schema:gender ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty hzb_metadata_schema:primary_email ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty hzb_metadata_schema:birth_date ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty hzb_metadata_schema:birth_date ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty hzb_metadata_schema:has_employment_history ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty hzb_metadata_schema:gender ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty hzb_metadata_schema:age_in_years ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty hzb_metadata_schema:age_in_years ], + hzb_metadata_schema:NamedThing ; + skos:altLabel "human being", + "individual" ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:exactMatch schema1:Person ; skos:inScheme . hzb_metadata_schema:chemical_formula_value a owl:Class, @@ -88,6 +198,11 @@ hzb_metadata_schema:chemical_formula_value a owl:Class, linkml:topValue a owl:DatatypeProperty ; rdfs:label "value" . +GSSO:000369 a owl:Class, + hzb_metadata_schema:GenderEnum ; + rdfs:label "Woman" ; + rdfs:subClassOf hzb_metadata_schema:GenderEnum . + PATO:0001421 a owl:Class, hzb_metadata_schema:PersonStatus ; rdfs:label "ALIVE" ; @@ -98,25 +213,44 @@ PATO:0001422 a owl:Class, rdfs:label "DEAD" ; rdfs:subClassOf hzb_metadata_schema:PersonStatus . -hzb_metadata_schema:NamedThing a owl:Class, + a owl:Class, + hzb_metadata_schema:GenderEnum ; + rdfs:label "Diverse" ; + rdfs:subClassOf hzb_metadata_schema:GenderEnum . + + a owl:Class, + hzb_metadata_schema:GenderEnum ; + rdfs:label "Masculine" ; + rdfs:subClassOf hzb_metadata_schema:GenderEnum . + +hzb_metadata_schema:MyspotBeamline a owl:Class, + linkml:ClassDefinition ; + rdfs:label "Myspot_Beamline" ; + rdfs:subClassOf hzb_metadata_schema:Beamline ; + skos:definition "Sonal" ; + skos:inScheme . + +hzb_metadata_schema:Organization a owl:Class, linkml:ClassDefinition ; - rdfs:label "namedThing" ; + rdfs:label "Organization" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty hzb_metadata_schema:type ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty hzb_metadata_schema:name ], + [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty hzb_metadata_schema:category ], + owl:onProperty hzb_metadata_schema:name ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty hzb_metadata_schema:category ], + owl:minCardinality 0 ; + owl:onProperty hzb_metadata_schema:type ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty hzb_metadata_schema:category ], - hzb_metadata_schema:Entity ; - skos:definition "a databased entity or concept/class" ; - skos:exactMatch , - , - , - , - ; + owl:allValuesFrom linkml:String ; + owl:onProperty hzb_metadata_schema:type ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty hzb_metadata_schema:name ] ; skos:inScheme . a owl:Class, @@ -126,45 +260,45 @@ hzb_metadata_schema:NamedThing a owl:Class, hzb_metadata_schema:Sample a owl:Class, linkml:ClassDefinition ; - rdfs:label "sample" ; + rdfs:label "Sample" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty hzb_metadata_schema:primary_email ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty hzb_metadata_schema:age_in_years ], + owl:maxCardinality 1 ; + owl:onProperty hzb_metadata_schema:birth_date ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty hzb_metadata_schema:primary_email ], - [ a owl:Restriction ; - owl:allValuesFrom hzb_metadata_schema:PersonStatus ; owl:onProperty hzb_metadata_schema:vital_status ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:Date ; owl:onProperty hzb_metadata_schema:birth_date ], + [ a owl:Restriction ; + owl:allValuesFrom [ a rdfs:Datatype ; + owl:onDatatype xsd:string ; + owl:withRestrictions ( [ xsd:pattern "^\\S+@[\\S+\\.]+\\S+" ] ) ] ; + owl:onProperty hzb_metadata_schema:primary_email ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty hzb_metadata_schema:age_in_years ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty hzb_metadata_schema:age_in_years ], + [ a owl:Restriction ; + owl:allValuesFrom hzb_metadata_schema:PersonStatus ; + owl:onProperty hzb_metadata_schema:vital_status ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty hzb_metadata_schema:age_in_years ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty hzb_metadata_schema:birth_date ], + owl:onProperty hzb_metadata_schema:primary_email ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty hzb_metadata_schema:vital_status ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Date ; - owl:onProperty hzb_metadata_schema:birth_date ], - [ a owl:Restriction ; - owl:allValuesFrom [ a rdfs:Datatype ; - owl:onDatatype xsd:string ; - owl:withRestrictions ( [ xsd:pattern "^\\S+@[\\S+\\.]+\\S+" ] ) ] ; - owl:onProperty hzb_metadata_schema:primary_email ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty hzb_metadata_schema:vital_status ], + owl:onProperty hzb_metadata_schema:birth_date ], hzb_metadata_schema:NamedThing ; skos:definition "Represents a Sample" ; skos:inScheme . @@ -174,24 +308,49 @@ hzb_metadata_schema:entries a owl:ObjectProperty, rdfs:label "entries" ; skos:inScheme . -hzb_metadata_schema:age_in_years a owl:ObjectProperty, +hzb_metadata_schema:has_employment_history a owl:ObjectProperty, linkml:SlotDefinition ; - rdfs:label "age_in_years" ; - rdfs:range linkml:Integer ; - skos:definition "Number of years since birth" ; + rdfs:label "has_employment_history" ; skos:inScheme . -hzb_metadata_schema:birth_date a owl:ObjectProperty, +hzb_metadata_schema:Beamline a owl:Class, + linkml:ClassDefinition ; + rdfs:label "Beamline" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty hzb_metadata_schema:type ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty hzb_metadata_schema:type ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty hzb_metadata_schema:type ], + hzb_metadata_schema:NamedThing ; + skos:definition "Sonal" ; + skos:inScheme . + +hzb_metadata_schema:category a owl:ObjectProperty, linkml:SlotDefinition ; - rdfs:label "birth_date" ; - rdfs:range linkml:Date ; - skos:definition "Date on which a person is born" ; + rdfs:label "category" ; skos:inScheme . -hzb_metadata_schema:primary_email a owl:ObjectProperty, +hzb_metadata_schema:gender a owl:ObjectProperty, linkml:SlotDefinition ; - rdfs:label "primary_email" ; - skos:definition "The main email address of a person" ; + rdfs:label "gender" ; + rdfs:range hzb_metadata_schema:GenderEnum ; + skos:inScheme . + +hzb_metadata_schema:id a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "id" ; + rdfs:range linkml:Uriorcurie ; + skos:definition "A unique identifier for a thing" ; + skos:inScheme . + +hzb_metadata_schema:iri a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "iri" ; + skos:definition "Internationalized Resource Identifier" ; skos:inScheme . hzb_metadata_schema:sample_environment a owl:ObjectProperty, @@ -206,6 +365,60 @@ hzb_metadata_schema:vital_status a owl:ObjectProperty, skos:definition "living or dead status" ; skos:inScheme . +hzb_metadata_schema:NamedThing a owl:Class, + linkml:ClassDefinition ; + rdfs:label "NamedThing" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty hzb_metadata_schema:category ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty hzb_metadata_schema:category ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty hzb_metadata_schema:category ], + hzb_metadata_schema:Entity ; + skos:definition "a databased entity or concept/class" ; + skos:exactMatch , + , + , + , + BFO:0000001 ; + skos:inScheme . + +hzb_metadata_schema:age_in_years a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "age_in_years" ; + rdfs:range linkml:Integer ; + skos:definition "Number of years since birth" ; + skos:inScheme . + +hzb_metadata_schema:birth_date a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "birth_date" ; + rdfs:range linkml:Date ; + skos:definition "Date on which a person is born" ; + skos:inScheme . + +hzb_metadata_schema:name a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "name" ; + skos:definition "A human-readable name for a thing" ; + skos:inScheme . + +hzb_metadata_schema:primary_email a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "primary_email" ; + skos:definition "The main email address of a person" ; + skos:inScheme . + +hzb_metadata_schema:GenderEnum a owl:Class, + linkml:EnumDefinition ; + owl:unionOf ( GSSO:000369 ) ; + linkml:permissible_values GSSO:000369, + , + . + hzb_metadata_schema:PersonStatus a owl:Class, linkml:EnumDefinition ; owl:unionOf ( PATO:0001421 PATO:0001422 ) ; @@ -213,6 +426,9 @@ hzb_metadata_schema:PersonStatus a owl:Class, PATO:0001422, . +hzb_metadata_schema:type a owl:ObjectProperty, + linkml:SlotDefinition . + a owl:Ontology ; rdfs:label "hzb-metadata-schema" ; dcterms:license "MIT" ; @@ -220,3 +436,18 @@ hzb_metadata_schema:PersonStatus a owl:Class, rdfs:seeAlso ; skos:definition "(Meta)data schema HZB labs" . +[] a owl:Restriction ; + rdfs:subClassOf hzb_metadata_schema:Organization ; + owl:onProperty hzb_metadata_schema:type ; + owl:someValuesFrom hzb_metadata_schema:Organization . + +[] a owl:Restriction ; + rdfs:subClassOf hzb_metadata_schema:MyspotBeamline ; + owl:onProperty hzb_metadata_schema:type ; + owl:someValuesFrom hzb_metadata_schema:MyspotBeamline . + +[] a owl:Restriction ; + rdfs:subClassOf hzb_metadata_schema:Beamline ; + owl:onProperty hzb_metadata_schema:type ; + owl:someValuesFrom hzb_metadata_schema:Beamline . + diff --git a/project/prefixmap/hzb_metadata_schema.yaml b/project/prefixmap/hzb_metadata_schema.yaml index f13fa52..dcd0af9 100644 --- a/project/prefixmap/hzb_metadata_schema.yaml +++ b/project/prefixmap/hzb_metadata_schema.yaml @@ -1,7 +1,8 @@ { - "BFO": "http://example.org/UNKNOWN/BFO/", + "BFO": "http://purl.obolibrary.org/obo/BFO_", "CHEBI": "http://example.org/UNKNOWN/CHEBI/", "CHEMBL.COMPOUND": "http://example.org/UNKNOWN/CHEMBL.COMPOUND/", + "GSSO": "http://purl.bioontology.org/ontology/GSSO/", "MAXO": "http://example.org/UNKNOWN/MAXO/", "PATO": "http://purl.obolibrary.org/obo/PATO_", "PUBCHEM.COMPOUND": "http://example.org/UNKNOWN/PUBCHEM.COMPOUND/", @@ -10,8 +11,12 @@ "WIKIDATA": "http://example.org/UNKNOWN/WIKIDATA/", "biolink": "https://w3id.org/biolink/", "dcid": "http://example.org/UNKNOWN/dcid/", - "example": "https://example.org/", "hzb_metadata_schema": "https://w3id.org/anak-velazquez/hzb-metadata-schema/", "linkml": "https://w3id.org/linkml/", - "schema": "http://schema.org/" + "prov": "http://www.w3.org/ns/prov#", + "rdfs": "http://www.w3.org/2000/01/rdf-schema#", + "schema": "http://schema.org/", + "Person": { + "@id": "schema:Person" + } } \ No newline at end of file diff --git a/project/protobuf/hzb_metadata_schema.proto b/project/protobuf/hzb_metadata_schema.proto index 35112f4..42556ee 100644 --- a/project/protobuf/hzb_metadata_schema.proto +++ b/project/protobuf/hzb_metadata_schema.proto @@ -1,9 +1,37 @@ syntax="proto3"; package // metamodel_version: 1.7.0 +// Sonal +message Beamline + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + string type = 0 + } +// Sonal +message BeamlineExperiment + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + } +// Sonal +message BESSY + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + } // core parameters of a catalysis sample #metadata terms (parameters) are mapped to nfdi voc4cat message CatalysisSample { + uriorcurie id = 0 + string iri = 0 + string name = 0 string category = 0 string primaryEmail = 0 date birthDate = 0 @@ -14,16 +42,68 @@ message CatalysisSample // A thing made or adapted for a particular purpose, especially a piece of mechanical or electronic equipment message Device { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + } +// something following a protocol? +message Experiment + { + uriorcurie id = 0 + string iri = 0 + string name = 0 string category = 0 } +// Sonal +message MyspotBeamline + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + string type = 0 + } // a databased entity or concept/class message NamedThing { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + } +message Organization + { + string name = 0 + string type = 0 + } +// A person (alive, dead, undead, or fictional). +message Person + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + string primaryEmail = 0 + date birthDate = 0 + integer ageInYears = 0 + genderEnum gender = 0 + repeated string hasEmploymentHistory = 0 + } +// describing the standard setup for ROCK-IT beamline experiment. Sonal + Ana +message RockitExperiment + { + uriorcurie id = 0 + string iri = 0 + string name = 0 string category = 0 } // Represents a Sample message Sample { + uriorcurie id = 0 + string iri = 0 + string name = 0 string category = 0 string primaryEmail = 0 date birthDate = 0 @@ -35,3 +115,16 @@ message SampleCollection { repeated sample entries = 0 } +// A scientist (alive, dead, undead, or fictional). +message Scientist + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + string primaryEmail = 0 + date birthDate = 0 + integer ageInYears = 0 + genderEnum gender = 0 + repeated string hasEmploymentHistory = 0 + } diff --git a/project/shacl/hzb_metadata_schema.shacl.ttl b/project/shacl/hzb_metadata_schema.shacl.ttl index 9e09a5f..6d35d19 100644 --- a/project/shacl/hzb_metadata_schema.shacl.ttl +++ b/project/shacl/hzb_metadata_schema.shacl.ttl @@ -1,3 +1,4 @@ +@prefix GSSO: . @prefix PATO: . @prefix hzb_metadata_schema: . @prefix rdf: . @@ -5,39 +6,188 @@ @prefix sh: . @prefix xsd: . -hzb_metadata_schema:CatalysisSample a sh:NodeShape ; +schema1:Person a sh:NodeShape ; sh:closed true ; - sh:description "core parameters of a catalysis sample #metadata terms (parameters) are mapped to nfdi voc4cat" ; + sh:description "A person (alive, dead, undead, or fictional)." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:integer ; + sh:description "Number of years since birth" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path hzb_metadata_schema:age_in_years ], + [ sh:datatype xsd:string ; + sh:description "The main email address of a person" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:email ], + [ sh:datatype xsd:string ; + sh:nodeKind sh:Literal ; + sh:order 4 ; + sh:path hzb_metadata_schema:has_employment_history ], + [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 6 ; + sh:path hzb_metadata_schema:iri ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 7 ; + sh:path schema1:name ], + [ sh:in ( GSSO:000369 "Masculine" "Diverse" ) ; + sh:maxCount 1 ; + sh:order 3 ; + sh:path schema1:gender ], + [ sh:datatype xsd:date ; + sh:description "Date on which a person is born" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:birthDate ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path schema1:identifier ] ; + sh:targetClass schema1:Person . + +hzb_metadata_schema:BESSY a sh:NodeShape ; + sh:closed true ; + sh:description "Sonal" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path schema1:name ], + [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path hzb_metadata_schema:iri ] ; + sh:targetClass hzb_metadata_schema:BESSY . + +hzb_metadata_schema:Beamline a sh:NodeShape ; + sh:closed true ; + sh:description "Sonal" ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 0 ; - sh:path hzb_metadata_schema:sample_environment ], - [ sh:datatype xsd:integer ; - sh:description "Number of years since birth" ; + sh:path hzb_metadata_schema:type ], + [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path hzb_metadata_schema:iri ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 3 ; - sh:path hzb_metadata_schema:age_in_years ], + sh:path schema1:name ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:identifier ] ; + sh:targetClass hzb_metadata_schema:Beamline . + +hzb_metadata_schema:BeamlineExperiment a sh:NodeShape ; + sh:closed true ; + sh:description "Sonal" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path schema1:name ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path hzb_metadata_schema:iri ] ; + sh:targetClass hzb_metadata_schema:BeamlineExperiment . + +hzb_metadata_schema:CatalysisSample a sh:NodeShape ; + sh:closed true ; + sh:description "core parameters of a catalysis sample #metadata terms (parameters) are mapped to nfdi voc4cat" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path hzb_metadata_schema:sample_environment ], [ sh:datatype xsd:date ; sh:description "Date on which a person is born" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 2 ; sh:path schema1:birthDate ], - [ sh:description "living or dead status" ; - sh:in ( PATO:0001421 PATO:0001422 "UNKNOWN" ) ; - sh:maxCount 1 ; - sh:order 4 ; - sh:path hzb_metadata_schema:vital_status ], [ sh:datatype xsd:string ; sh:description "The main email address of a person" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 1 ; sh:path schema1:email ; - sh:pattern "^\\S+@[\\S+\\.]+\\S+" ] ; + sh:pattern "^\\S+@[\\S+\\.]+\\S+" ], + [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 6 ; + sh:path hzb_metadata_schema:iri ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 7 ; + sh:path schema1:name ], + [ sh:datatype xsd:integer ; + sh:description "Number of years since birth" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 3 ; + sh:path hzb_metadata_schema:age_in_years ], + [ sh:description "living or dead status" ; + sh:in ( PATO:0001421 PATO:0001422 "UNKNOWN" ) ; + sh:maxCount 1 ; + sh:order 4 ; + sh:path hzb_metadata_schema:vital_status ] ; sh:targetClass hzb_metadata_schema:CatalysisSample . hzb_metadata_schema:ChemicalOrDrugOrTreatment a sh:NodeShape ; @@ -49,57 +199,279 @@ hzb_metadata_schema:Device a sh:NodeShape ; sh:closed true ; sh:description "A thing made or adapted for a particular purpose, especially a piece of mechanical or electronic equipment" ; sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path schema1:name ], + [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path hzb_metadata_schema:iri ] ; sh:targetClass hzb_metadata_schema:Device . hzb_metadata_schema:Entity a sh:NodeShape ; sh:closed false ; - sh:description "Root Biolink Model class for all things and informational relationships, real or imagined." ; + sh:description "An entity is anything that exists or has existed or will exist. Model class for all things and informational relationships, real or imagined." ; sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path schema1:name ], + [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path hzb_metadata_schema:iri ] ; sh:targetClass hzb_metadata_schema:Entity . +hzb_metadata_schema:Experiment a sh:NodeShape ; + sh:closed true ; + sh:description "something following a protocol?" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path schema1:name ], + [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path hzb_metadata_schema:iri ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:identifier ] ; + sh:targetClass hzb_metadata_schema:Experiment . + +hzb_metadata_schema:MyspotBeamline a sh:NodeShape ; + sh:closed true ; + sh:description "Sonal" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path hzb_metadata_schema:type ], + [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path hzb_metadata_schema:iri ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 3 ; + sh:path schema1:name ] ; + sh:targetClass hzb_metadata_schema:MyspotBeamline . + hzb_metadata_schema:NamedThing a sh:NodeShape ; sh:closed true ; sh:description "a databased entity or concept/class" ; sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path schema1:name ], + [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path hzb_metadata_schema:iri ] ; sh:targetClass hzb_metadata_schema:NamedThing . +hzb_metadata_schema:Organization a sh:NodeShape ; + sh:closed true ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path hzb_metadata_schema:name ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path hzb_metadata_schema:type ] ; + sh:targetClass hzb_metadata_schema:Organization . + +hzb_metadata_schema:RockitExperiment a sh:NodeShape ; + sh:closed true ; + sh:description "describing the standard setup for ROCK-IT beamline experiment. Sonal + Ana" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path schema1:name ], + [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path hzb_metadata_schema:iri ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:identifier ] ; + sh:targetClass hzb_metadata_schema:RockitExperiment . + hzb_metadata_schema:SampleCollection a sh:NodeShape ; sh:closed true ; sh:description "A holder for Sample objects" ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:class hzb_metadata_schema:Sample ; - sh:nodeKind sh:BlankNodeOrIRI ; + sh:nodeKind sh:IRI ; sh:order 0 ; sh:path hzb_metadata_schema:entries ] ; sh:targetClass hzb_metadata_schema:SampleCollection . +hzb_metadata_schema:Scientist a sh:NodeShape ; + sh:closed true ; + sh:description "A scientist (alive, dead, undead, or fictional)." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:in ( GSSO:000369 "Masculine" "Diverse" ) ; + sh:maxCount 1 ; + sh:order 3 ; + sh:path schema1:gender ], + [ sh:datatype xsd:string ; + sh:nodeKind sh:Literal ; + sh:order 4 ; + sh:path hzb_metadata_schema:has_employment_history ], + [ sh:datatype xsd:string ; + sh:description "The main email address of a person" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:email ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:integer ; + sh:description "Number of years since birth" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path hzb_metadata_schema:age_in_years ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 7 ; + sh:path schema1:name ], + [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 6 ; + sh:path hzb_metadata_schema:iri ], + [ sh:datatype xsd:date ; + sh:description "Date on which a person is born" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:birthDate ] ; + sh:targetClass hzb_metadata_schema:Scientist . + hzb_metadata_schema:Sample a sh:NodeShape ; sh:closed true ; sh:description "Represents a Sample" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:integer ; + sh:property [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path hzb_metadata_schema:iri ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 4 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:integer ; sh:description "Number of years since birth" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 2 ; sh:path hzb_metadata_schema:age_in_years ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 6 ; + sh:path schema1:name ], [ sh:datatype xsd:date ; sh:description "Date on which a person is born" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 1 ; sh:path schema1:birthDate ], + [ sh:description "living or dead status" ; + sh:in ( PATO:0001421 PATO:0001422 "UNKNOWN" ) ; + sh:maxCount 1 ; + sh:order 3 ; + sh:path hzb_metadata_schema:vital_status ], [ sh:datatype xsd:string ; sh:description "The main email address of a person" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 0 ; sh:path schema1:email ; - sh:pattern "^\\S+@[\\S+\\.]+\\S+" ], - [ sh:description "living or dead status" ; - sh:in ( PATO:0001421 PATO:0001422 "UNKNOWN" ) ; - sh:maxCount 1 ; - sh:order 3 ; - sh:path hzb_metadata_schema:vital_status ] ; + sh:pattern "^\\S+@[\\S+\\.]+\\S+" ] ; sh:targetClass hzb_metadata_schema:Sample . diff --git a/project/shex/hzb_metadata_schema.shex b/project/shex/hzb_metadata_schema.shex index abfeebc..07565d0 100644 --- a/project/shex/hzb_metadata_schema.shex +++ b/project/shex/hzb_metadata_schema.shex @@ -4,6 +4,7 @@ PREFIX rdf: PREFIX xsd: PREFIX linkml: PREFIX schema1: +PREFIX GSSO: xsd:string @@ -46,12 +47,41 @@ linkml:Jsonpath xsd:string linkml:Sparqlpath xsd:string + ( + CLOSED { + ( $ ( & ; + rdf:type [ ] ? ; + @linkml:String ? + ) ; + rdf:type [ ] + ) + } OR @ +) + + ( + CLOSED { + ( $ ( & ; + rdf:type [ ] ? + ) ; + rdf:type [ ] + ) + } OR @ +) + + CLOSED { + ( $ ( & ; + rdf:type [ ] ? + ) ; + rdf:type [ ] + ) +} + CLOSED { ( $ ( & ; rdf:type [ ] ? ; @linkml:String ? ) ; - rdf:type [ ] ? + rdf:type [ ] ) } @@ -65,29 +95,81 @@ linkml:Sparqlpath xsd:string ( $ ( & ; rdf:type [ ] ? ) ; - rdf:type [ ] ? + rdf:type [ ] ) } ( { - ( $ rdf:type . * ; - rdf:type [ ] ? + ( $ ( @linkml:String ? ; + schema1:name @linkml:String ? + ) ; + rdf:type [ ] ) } OR @ ) + ( + CLOSED { + ( $ ( & ; + rdf:type [ ] ? + ) ; + rdf:type [ ] + ) + } OR @ +) + + CLOSED { + ( $ ( & ; + rdf:type [ ] ? + ) ; + rdf:type [ ] + ) +} + ( CLOSED { ( $ ( & ; rdf:type [ ] ? ; @linkml:String ) ; - rdf:type [ ] ? + rdf:type [ ] + ) + } OR @ OR @ OR @ OR @ OR @ OR @ +) + + CLOSED { + ( $ ( @linkml:String ? ; + @linkml:String ? + ) ; + rdf:type [ ] ? + ) +} + + ( + CLOSED { + ( $ ( & ; + rdf:type [ ] ? ; + schema1:email @linkml:String ? ; + schema1:birthDate @linkml:Date ? ; + @linkml:Integer ? ; + schema1:gender [ GSSO:000369 + ] ? ; + @linkml:String * + ) ; + rdf:type [ schema1:Person ] ) - } OR @ OR @ + } OR @ ) + CLOSED { + ( $ ( & ; + rdf:type [ ] ? + ) ; + rdf:type [ ] + ) +} + ( CLOSED { ( $ ( & ; @@ -98,7 +180,7 @@ linkml:Sparqlpath xsd:string [ ] ? ) ; - rdf:type [ ] ? + rdf:type [ ] ) } OR @ ) @@ -109,3 +191,11 @@ linkml:Sparqlpath xsd:string ) } + CLOSED { + ( $ ( & ; + rdf:type [ schema1:Person ] ? + ) ; + rdf:type [ ] + ) +} + diff --git a/project/sqlschema/hzb_metadata_schema.sql b/project/sqlschema/hzb_metadata_schema.sql index cb73650..4ad7fab 100644 --- a/project/sqlschema/hzb_metadata_schema.sql +++ b/project/sqlschema/hzb_metadata_schema.sql @@ -1,64 +1,212 @@ -- # Class: "chemical or drug or treatment" Description: "" -- * Slot: id Description: +-- # Class: "Person" Description: "A person (alive, dead, undead, or fictional)." +-- * Slot: primary_email Description: The main email address of a person +-- * Slot: birth_date Description: Date on which a person is born +-- * Slot: age_in_years Description: Number of years since birth +-- * Slot: gender Description: +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- * Slot: name Description: A human-readable name for a thing +-- # Class: "Scientist" Description: "A scientist (alive, dead, undead, or fictional)." +-- * Slot: primary_email Description: The main email address of a person +-- * Slot: birth_date Description: Date on which a person is born +-- * Slot: age_in_years Description: Number of years since birth +-- * Slot: gender Description: +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- * Slot: name Description: A human-readable name for a thing -- # Class: "device" Description: "A thing made or adapted for a particular purpose, especially a piece of mechanical or electronic equipment" --- * Slot: id Description: --- # Class: "catalysisSample" Description: "core parameters of a catalysis sample #metadata terms (parameters) are mapped to nfdi voc4cat" --- * Slot: id Description: +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- * Slot: name Description: A human-readable name for a thing +-- # Class: "CatalysisSample" Description: "core parameters of a catalysis sample #metadata terms (parameters) are mapped to nfdi voc4cat" -- * Slot: sample_environment Description: -- * Slot: primary_email Description: The main email address of a person -- * Slot: birth_date Description: Date on which a person is born -- * Slot: age_in_years Description: Number of years since birth -- * Slot: vital_status Description: living or dead status --- # Class: "sample" Description: "Represents a Sample" --- * Slot: id Description: +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- * Slot: name Description: A human-readable name for a thing +-- # Class: "Sample" Description: "Represents a Sample" -- * Slot: primary_email Description: The main email address of a person -- * Slot: birth_date Description: Date on which a person is born -- * Slot: age_in_years Description: Number of years since birth -- * Slot: vital_status Description: living or dead status --- * Slot: sampleCollection_id Description: Autocreated FK slot --- # Class: "sampleCollection" Description: "A holder for Sample objects" --- * Slot: id Description: --- # Class: "entity" Description: "Root Biolink Model class for all things and informational relationships, real or imagined." +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- * Slot: name Description: A human-readable name for a thing +-- * Slot: SampleCollection_id Description: Autocreated FK slot +-- # Class: "SampleCollection" Description: "A holder for Sample objects" -- * Slot: id Description: --- # Class: "namedThing" Description: "a databased entity or concept/class" +-- # Class: "Experiment" Description: "something following a protocol?" +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- * Slot: name Description: A human-readable name for a thing +-- # Class: "Rockit_experiment" Description: "describing the standard setup for ROCK-IT beamline experiment. Sonal + Ana" +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- * Slot: name Description: A human-readable name for a thing +-- # Class: "BESSY" Description: "Sonal" +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- * Slot: name Description: A human-readable name for a thing +-- # Class: "Myspot_Beamline" Description: "Sonal" +-- * Slot: type Description: +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- * Slot: name Description: A human-readable name for a thing +-- # Class: "Beamline" Description: "Sonal" +-- * Slot: type Description: +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- * Slot: name Description: A human-readable name for a thing +-- # Class: "BeamlineExperiment" Description: "Sonal" +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- * Slot: name Description: A human-readable name for a thing +-- # Class: "Organization" Description: "" -- * Slot: id Description: +-- * Slot: name Description: +-- * Slot: type Description: +-- # Class: "Entity" Description: "An entity is anything that exists or has existed or will exist. Model class for all things and informational relationships, real or imagined." +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- * Slot: name Description: A human-readable name for a thing +-- # Class: "NamedThing" Description: "a databased entity or concept/class" +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- * Slot: name Description: A human-readable name for a thing +-- # Class: "Person_has_employment_history" Description: "" +-- * Slot: Person_id Description: Autocreated FK slot +-- * Slot: has_employment_history Description: +-- # Class: "Scientist_has_employment_history" Description: "" +-- * Slot: Scientist_id Description: Autocreated FK slot +-- * Slot: has_employment_history Description: CREATE TABLE "chemical or drug or treatment" ( id INTEGER NOT NULL, PRIMARY KEY (id) ); +CREATE TABLE "Person" ( + primary_email TEXT, + birth_date DATE, + age_in_years INTEGER, + gender VARCHAR(9), + id TEXT NOT NULL, + iri TEXT, + name TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "Scientist" ( + primary_email TEXT, + birth_date DATE, + age_in_years INTEGER, + gender VARCHAR(9), + id TEXT NOT NULL, + iri TEXT, + name TEXT, + PRIMARY KEY (id) +); CREATE TABLE device ( - id INTEGER NOT NULL, + id TEXT NOT NULL, + iri TEXT, + name TEXT, PRIMARY KEY (id) ); -CREATE TABLE "catalysisSample" ( - id INTEGER NOT NULL, +CREATE TABLE "CatalysisSample" ( sample_environment TEXT, primary_email TEXT, birth_date DATE, age_in_years INTEGER, vital_status VARCHAR(7), + id TEXT NOT NULL, + iri TEXT, + name TEXT, PRIMARY KEY (id) ); -CREATE TABLE "sampleCollection" ( +CREATE TABLE "SampleCollection" ( id INTEGER NOT NULL, PRIMARY KEY (id) ); -CREATE TABLE entity ( - id INTEGER NOT NULL, +CREATE TABLE "Experiment" ( + id TEXT NOT NULL, + iri TEXT, + name TEXT, PRIMARY KEY (id) ); -CREATE TABLE "namedThing" ( - id INTEGER NOT NULL, +CREATE TABLE "Rockit_experiment" ( + id TEXT NOT NULL, + iri TEXT, + name TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "BESSY" ( + id TEXT NOT NULL, + iri TEXT, + name TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "Myspot_Beamline" ( + type TEXT, + id TEXT NOT NULL, + iri TEXT, + name TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "Beamline" ( + type TEXT, + id TEXT NOT NULL, + iri TEXT, + name TEXT, PRIMARY KEY (id) ); -CREATE TABLE sample ( +CREATE TABLE "BeamlineExperiment" ( + id TEXT NOT NULL, + iri TEXT, + name TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "Organization" ( id INTEGER NOT NULL, + name TEXT, + type TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "Entity" ( + id TEXT NOT NULL, + iri TEXT, + name TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "NamedThing" ( + id TEXT NOT NULL, + iri TEXT, + name TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "Sample" ( primary_email TEXT, birth_date DATE, age_in_years INTEGER, vital_status VARCHAR(7), - "sampleCollection_id" INTEGER, + id TEXT NOT NULL, + iri TEXT, + name TEXT, + "SampleCollection_id" INTEGER, PRIMARY KEY (id), - FOREIGN KEY("sampleCollection_id") REFERENCES "sampleCollection" (id) + FOREIGN KEY("SampleCollection_id") REFERENCES "SampleCollection" (id) +); +CREATE TABLE "Person_has_employment_history" ( + "Person_id" TEXT, + has_employment_history TEXT, + PRIMARY KEY ("Person_id", has_employment_history), + FOREIGN KEY("Person_id") REFERENCES "Person" (id) +); +CREATE TABLE "Scientist_has_employment_history" ( + "Scientist_id" TEXT, + has_employment_history TEXT, + PRIMARY KEY ("Scientist_id", has_employment_history), + FOREIGN KEY("Scientist_id") REFERENCES "Scientist" (id) ); \ No newline at end of file diff --git a/src/hzb_metadata_schema/datamodel/hzb_metadata_schema.py b/src/hzb_metadata_schema/datamodel/hzb_metadata_schema.py index 9e19e26..50370ef 100644 --- a/src/hzb_metadata_schema/datamodel/hzb_metadata_schema.py +++ b/src/hzb_metadata_schema/datamodel/hzb_metadata_schema.py @@ -1,5 +1,5 @@ # Auto generated from hzb_metadata_schema.yaml by pythongen.py version: 0.0.1 -# Generation date: 2024-08-05T15:01:15 +# Generation date: 2024-08-05T18:33:38 # Schema: hzb-metadata-schema # # id: https://w3id.org/anak-velazquez/hzb-metadata-schema @@ -32,9 +32,10 @@ dataclasses._init_fn = dataclasses_init_fn_with_kwargs # Namespaces -BFO = CurieNamespace('BFO', 'http://example.org/UNKNOWN/BFO/') +BFO = CurieNamespace('BFO', 'http://purl.obolibrary.org/obo/BFO_') CHEBI = CurieNamespace('CHEBI', 'http://example.org/UNKNOWN/CHEBI/') CHEMBL_COMPOUND = CurieNamespace('CHEMBL_COMPOUND', 'http://example.org/UNKNOWN/CHEMBL.COMPOUND/') +GSSO = CurieNamespace('GSSO', 'http://purl.bioontology.org/ontology/GSSO/') MAXO = CurieNamespace('MAXO', 'http://example.org/UNKNOWN/MAXO/') PATO = CurieNamespace('PATO', 'http://purl.obolibrary.org/obo/PATO_') PUBCHEM_COMPOUND = CurieNamespace('PUBCHEM_COMPOUND', 'http://example.org/UNKNOWN/PUBCHEM.COMPOUND/') @@ -43,9 +44,10 @@ WIKIDATA = CurieNamespace('WIKIDATA', 'http://example.org/UNKNOWN/WIKIDATA/') BIOLINK = CurieNamespace('biolink', 'https://w3id.org/biolink/') DCID = CurieNamespace('dcid', 'http://example.org/UNKNOWN/dcid/') -EXAMPLE = CurieNamespace('example', 'https://example.org/') HZB_METADATA_SCHEMA = CurieNamespace('hzb_metadata_schema', 'https://w3id.org/anak-velazquez/hzb-metadata-schema/') LINKML = CurieNamespace('linkml', 'https://w3id.org/linkml/') +PROV = CurieNamespace('prov', 'http://www.w3.org/ns/prov#') +RDFS = CurieNamespace('rdfs', 'http://www.w3.org/2000/01/rdf-schema#') SCHEMA = CurieNamespace('schema', 'http://schema.org/') XSD = CurieNamespace('xsd', 'http://www.w3.org/2001/XMLSchema#') DEFAULT_ = HZB_METADATA_SCHEMA @@ -61,8 +63,57 @@ class ChemicalFormulaValue(str): # Class references +class EntityId(URIorCURIE): + pass + + +class NamedThingId(EntityId): + pass + + +class PersonId(NamedThingId): + pass + + +class ScientistId(PersonId): + pass + + +class DeviceId(NamedThingId): + pass +class SampleId(NamedThingId): + pass + + +class CatalysisSampleId(SampleId): + pass + + +class ExperimentId(NamedThingId): + pass + + +class BESSYId(NamedThingId): + pass + + +class BeamlineId(NamedThingId): + pass + + +class MyspotBeamlineId(BeamlineId): + pass + + +class BeamlineExperimentId(ExperimentId): + pass + + +class RockitExperimentId(BeamlineExperimentId): + pass + class ChemicalOrDrugOrTreatment(YAMLRoot): _inherited_slots: ClassVar[List[str]] = [] @@ -82,28 +133,70 @@ class SampleCollection(YAMLRoot): class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["SampleCollection"] class_class_curie: ClassVar[str] = "hzb_metadata_schema:SampleCollection" - class_name: ClassVar[str] = "sampleCollection" + class_name: ClassVar[str] = "SampleCollection" class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.SampleCollection - entries: Optional[Union[Union[dict, "Sample"], List[Union[dict, "Sample"]]]] = empty_list() + entries: Optional[Union[Dict[Union[str, SampleId], Union[dict, "Sample"]], List[Union[dict, "Sample"]]]] = empty_dict() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): - self._normalize_inlined_as_dict(slot_name="entries", slot_type=Sample, key_name="category", keyed=False) + self._normalize_inlined_as_dict(slot_name="entries", slot_type=Sample, key_name="id", keyed=True) super().__post_init__(**kwargs) +@dataclass +class Organization(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["Organization"] + class_class_curie: ClassVar[str] = "hzb_metadata_schema:Organization" + class_name: ClassVar[str] = "Organization" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Organization + + name: Optional[str] = None + type: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.name is not None and not isinstance(self.name, str): + self.name = str(self.name) + + self.type = str(self.class_name) + + super().__post_init__(**kwargs) + self.unknown_type = str(self.class_name) + + +@dataclass class Entity(YAMLRoot): """ - Root Biolink Model class for all things and informational relationships, real or imagined. + An entity is anything that exists or has existed or will exist. Model class for all things and informational + relationships, real or imagined. """ _inherited_slots: ClassVar[List[str]] = [] class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["Entity"] class_class_curie: ClassVar[str] = "hzb_metadata_schema:Entity" - class_name: ClassVar[str] = "entity" + class_name: ClassVar[str] = "Entity" class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Entity + id: Union[str, EntityId] = None + iri: Optional[str] = None + name: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, EntityId): + self.id = EntityId(self.id) + + if self.iri is not None and not isinstance(self.iri, str): + self.iri = str(self.iri) + + if self.name is not None and not isinstance(self.name, str): + self.name = str(self.name) + + super().__post_init__(**kwargs) + @dataclass class NamedThing(Entity): @@ -114,12 +207,18 @@ class NamedThing(Entity): class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["NamedThing"] class_class_curie: ClassVar[str] = "hzb_metadata_schema:NamedThing" - class_name: ClassVar[str] = "namedThing" + class_name: ClassVar[str] = "NamedThing" class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.NamedThing + id: Union[str, NamedThingId] = None category: str = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, NamedThingId): + self.id = NamedThingId(self.id) + if self._is_empty(self.category): self.MissingRequiredField("category") if not isinstance(self.category, str): @@ -128,6 +227,75 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) +@dataclass +class Person(NamedThing): + """ + A person (alive, dead, undead, or fictional). + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = SCHEMA["Person"] + class_class_curie: ClassVar[str] = "schema:Person" + class_name: ClassVar[str] = "Person" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Person + + id: Union[str, PersonId] = None + category: str = None + primary_email: Optional[str] = None + birth_date: Optional[Union[str, XSDDate]] = None + age_in_years: Optional[int] = None + gender: Optional[Union[str, "GenderEnum"]] = None + has_employment_history: Optional[Union[str, List[str]]] = empty_list() + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, PersonId): + self.id = PersonId(self.id) + + if self.primary_email is not None and not isinstance(self.primary_email, str): + self.primary_email = str(self.primary_email) + + if self.birth_date is not None and not isinstance(self.birth_date, XSDDate): + self.birth_date = XSDDate(self.birth_date) + + if self.age_in_years is not None and not isinstance(self.age_in_years, int): + self.age_in_years = int(self.age_in_years) + + if self.gender is not None and not isinstance(self.gender, GenderEnum): + self.gender = GenderEnum(self.gender) + + if not isinstance(self.has_employment_history, list): + self.has_employment_history = [self.has_employment_history] if self.has_employment_history is not None else [] + self.has_employment_history = [v if isinstance(v, str) else str(v) for v in self.has_employment_history] + + super().__post_init__(**kwargs) + + +@dataclass +class Scientist(Person): + """ + A scientist (alive, dead, undead, or fictional). + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["Scientist"] + class_class_curie: ClassVar[str] = "hzb_metadata_schema:Scientist" + class_name: ClassVar[str] = "Scientist" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Scientist + + id: Union[str, ScientistId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ScientistId): + self.id = ScientistId(self.id) + + super().__post_init__(**kwargs) + + @dataclass class Device(NamedThing): """ @@ -140,8 +308,18 @@ class Device(NamedThing): class_name: ClassVar[str] = "device" class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Device + id: Union[str, DeviceId] = None category: str = None + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, DeviceId): + self.id = DeviceId(self.id) + + super().__post_init__(**kwargs) + + @dataclass class Sample(NamedThing): """ @@ -151,9 +329,10 @@ class Sample(NamedThing): class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["Sample"] class_class_curie: ClassVar[str] = "hzb_metadata_schema:Sample" - class_name: ClassVar[str] = "sample" + class_name: ClassVar[str] = "Sample" class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Sample + id: Union[str, SampleId] = None category: str = None primary_email: Optional[str] = None birth_date: Optional[Union[str, XSDDate]] = None @@ -161,6 +340,11 @@ class Sample(NamedThing): vital_status: Optional[Union[str, "PersonStatus"]] = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, SampleId): + self.id = SampleId(self.id) + if self.primary_email is not None and not isinstance(self.primary_email, str): self.primary_email = str(self.primary_email) @@ -185,19 +369,191 @@ class CatalysisSample(Sample): class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["CatalysisSample"] class_class_curie: ClassVar[str] = "hzb_metadata_schema:CatalysisSample" - class_name: ClassVar[str] = "catalysisSample" + class_name: ClassVar[str] = "CatalysisSample" class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.CatalysisSample + id: Union[str, CatalysisSampleId] = None category: str = None sample_environment: Optional[str] = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, CatalysisSampleId): + self.id = CatalysisSampleId(self.id) + if self.sample_environment is not None and not isinstance(self.sample_environment, str): self.sample_environment = str(self.sample_environment) super().__post_init__(**kwargs) +@dataclass +class Experiment(NamedThing): + """ + something following a protocol? + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["Experiment"] + class_class_curie: ClassVar[str] = "hzb_metadata_schema:Experiment" + class_name: ClassVar[str] = "Experiment" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Experiment + + id: Union[str, ExperimentId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ExperimentId): + self.id = ExperimentId(self.id) + + super().__post_init__(**kwargs) + + +@dataclass +class BESSY(NamedThing): + """ + Sonal + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["BESSY"] + class_class_curie: ClassVar[str] = "hzb_metadata_schema:BESSY" + class_name: ClassVar[str] = "BESSY" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.BESSY + + id: Union[str, BESSYId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, BESSYId): + self.id = BESSYId(self.id) + + super().__post_init__(**kwargs) + + +@dataclass +class Beamline(NamedThing): + """ + Sonal + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["Beamline"] + class_class_curie: ClassVar[str] = "hzb_metadata_schema:Beamline" + class_name: ClassVar[str] = "Beamline" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Beamline + + id: Union[str, BeamlineId] = None + category: str = None + type: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, BeamlineId): + self.id = BeamlineId(self.id) + + self.type = str(self.class_name) + + super().__post_init__(**kwargs) + self.unknown_type = str(self.class_name) + + + def __new__(cls, *args, **kwargs): + + type_designator = "type" + 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 +class MyspotBeamline(Beamline): + """ + Sonal + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["MyspotBeamline"] + class_class_curie: ClassVar[str] = "hzb_metadata_schema:MyspotBeamline" + class_name: ClassVar[str] = "Myspot_Beamline" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.MyspotBeamline + + id: Union[str, MyspotBeamlineId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, MyspotBeamlineId): + self.id = MyspotBeamlineId(self.id) + + super().__post_init__(**kwargs) + self.unknown_type = str(self.class_name) + + +@dataclass +class BeamlineExperiment(Experiment): + """ + Sonal + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["BeamlineExperiment"] + class_class_curie: ClassVar[str] = "hzb_metadata_schema:BeamlineExperiment" + class_name: ClassVar[str] = "BeamlineExperiment" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.BeamlineExperiment + + id: Union[str, BeamlineExperimentId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, BeamlineExperimentId): + self.id = BeamlineExperimentId(self.id) + + super().__post_init__(**kwargs) + + +@dataclass +class RockitExperiment(BeamlineExperiment): + """ + describing the standard setup for ROCK-IT beamline experiment. Sonal + Ana + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["RockitExperiment"] + class_class_curie: ClassVar[str] = "hzb_metadata_schema:RockitExperiment" + class_name: ClassVar[str] = "Rockit_experiment" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.RockitExperiment + + id: Union[str, RockitExperimentId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, RockitExperimentId): + self.id = RockitExperimentId(self.id) + + super().__post_init__(**kwargs) + + # Enumerations class PersonStatus(EnumDefinitionImpl): @@ -217,6 +573,23 @@ class PersonStatus(EnumDefinitionImpl): name="PersonStatus", ) +class GenderEnum(EnumDefinitionImpl): + + Woman = PermissibleValue( + text="Woman", + description="identified as woman", + meaning=GSSO["000369"]) + Masculine = PermissibleValue( + text="Masculine", + description="masculine") + Diverse = PermissibleValue( + text="Diverse", + description="other") + + _defn = EnumDefinition( + name="GenderEnum", + ) + # Slots class slots: pass @@ -224,6 +597,12 @@ class slots: slots.id = Slot(uri=SCHEMA.identifier, name="id", curie=SCHEMA.curie('identifier'), model_uri=HZB_METADATA_SCHEMA.id, domain=None, range=URIRef) +slots.iri = Slot(uri=HZB_METADATA_SCHEMA.iri, name="iri", curie=HZB_METADATA_SCHEMA.curie('iri'), + model_uri=HZB_METADATA_SCHEMA.iri, domain=None, range=Optional[str]) + +slots.category = Slot(uri=HZB_METADATA_SCHEMA.category, name="category", curie=HZB_METADATA_SCHEMA.curie('category'), + model_uri=HZB_METADATA_SCHEMA.category, domain=None, range=Optional[str]) + slots.name = Slot(uri=SCHEMA.name, name="name", curie=SCHEMA.curie('name'), model_uri=HZB_METADATA_SCHEMA.name, domain=None, range=Optional[str]) @@ -242,18 +621,33 @@ class slots: slots.vital_status = Slot(uri=HZB_METADATA_SCHEMA.vital_status, name="vital_status", curie=HZB_METADATA_SCHEMA.curie('vital_status'), model_uri=HZB_METADATA_SCHEMA.vital_status, domain=None, range=Optional[Union[str, "PersonStatus"]]) +slots.gender = Slot(uri=SCHEMA.gender, name="gender", curie=SCHEMA.curie('gender'), + model_uri=HZB_METADATA_SCHEMA.gender, domain=None, range=Optional[Union[str, "GenderEnum"]]) + +slots.has_employment_history = Slot(uri=HZB_METADATA_SCHEMA.has_employment_history, name="has_employment_history", curie=HZB_METADATA_SCHEMA.curie('has_employment_history'), + model_uri=HZB_METADATA_SCHEMA.has_employment_history, domain=None, range=Optional[Union[str, List[str]]]) + +slots.current_address = Slot(uri=HZB_METADATA_SCHEMA.current_address, name="current_address", curie=HZB_METADATA_SCHEMA.curie('current_address'), + model_uri=HZB_METADATA_SCHEMA.current_address, domain=None, range=Optional[str]) + slots.catalysisSample__sample_environment = Slot(uri=HZB_METADATA_SCHEMA.sample_environment, name="catalysisSample__sample_environment", curie=HZB_METADATA_SCHEMA.curie('sample_environment'), model_uri=HZB_METADATA_SCHEMA.catalysisSample__sample_environment, domain=None, range=Optional[str]) slots.sampleCollection__entries = Slot(uri=HZB_METADATA_SCHEMA.entries, name="sampleCollection__entries", curie=HZB_METADATA_SCHEMA.curie('entries'), - model_uri=HZB_METADATA_SCHEMA.sampleCollection__entries, domain=None, range=Optional[Union[Union[dict, Sample], List[Union[dict, Sample]]]]) + model_uri=HZB_METADATA_SCHEMA.sampleCollection__entries, domain=None, range=Optional[Union[Dict[Union[str, SampleId], Union[dict, Sample]], List[Union[dict, Sample]]]]) -slots.category = Slot(uri=HZB_METADATA_SCHEMA.category, name="category", curie=HZB_METADATA_SCHEMA.curie('category'), - model_uri=HZB_METADATA_SCHEMA.category, domain=None, range=str) +slots.beamline__type = Slot(uri=HZB_METADATA_SCHEMA.type, name="beamline__type", curie=HZB_METADATA_SCHEMA.curie('type'), + model_uri=HZB_METADATA_SCHEMA.beamline__type, domain=None, range=Optional[str]) + +slots.organization__name = Slot(uri=HZB_METADATA_SCHEMA.name, name="organization__name", curie=HZB_METADATA_SCHEMA.curie('name'), + model_uri=HZB_METADATA_SCHEMA.organization__name, domain=None, range=Optional[str]) + +slots.organization__type = Slot(uri=HZB_METADATA_SCHEMA.type, name="organization__type", curie=HZB_METADATA_SCHEMA.curie('type'), + model_uri=HZB_METADATA_SCHEMA.organization__type, domain=None, range=Optional[str]) -slots.sample_primary_email = Slot(uri=SCHEMA.email, name="sample_primary_email", curie=SCHEMA.curie('email'), - model_uri=HZB_METADATA_SCHEMA.sample_primary_email, domain=Sample, range=Optional[str], +slots.Sample_primary_email = Slot(uri=SCHEMA.email, name="Sample_primary_email", curie=SCHEMA.curie('email'), + model_uri=HZB_METADATA_SCHEMA.Sample_primary_email, domain=Sample, range=Optional[str], pattern=re.compile(r'^\S+@[\S+\.]+\S+')) -slots.namedThing_category = Slot(uri=HZB_METADATA_SCHEMA.category, name="namedThing_category", curie=HZB_METADATA_SCHEMA.curie('category'), - model_uri=HZB_METADATA_SCHEMA.namedThing_category, domain=NamedThing, range=str) \ No newline at end of file +slots.NamedThing_category = Slot(uri=HZB_METADATA_SCHEMA.category, name="NamedThing_category", curie=HZB_METADATA_SCHEMA.curie('category'), + model_uri=HZB_METADATA_SCHEMA.NamedThing_category, domain=NamedThing, range=str) \ No newline at end of file diff --git a/src/hzb_metadata_schema/schema/hzb_metadata_schema.yaml b/src/hzb_metadata_schema/schema/hzb_metadata_schema.yaml index 59c1af1..ee2f052 100644 --- a/src/hzb_metadata_schema/schema/hzb_metadata_schema.yaml +++ b/src/hzb_metadata_schema/schema/hzb_metadata_schema.yaml @@ -26,73 +26,15 @@ prefixes: biolink: https://w3id.org/biolink/ schema: http://schema.org/ PATO: http://purl.obolibrary.org/obo/PATO_ - example: https://example.org/ + rdfs: http://www.w3.org/2000/01/rdf-schema# + prov: http://www.w3.org/ns/prov# + GSSO: http://purl.bioontology.org/ontology/GSSO/ #gender ontology + BFO: http://purl.obolibrary.org/obo/BFO_ + #skos: default_prefix: hzb_metadata_schema default_range: string -## ------------ -## TYPES -## ------------ -imports: - - linkml:types - -types: - -#as in Biolink - chemical formula value: - uri: xsd:string - base: str - description: A chemical formula - notes: - - Should be implemented as a stronger type - -## ------------ -## SLOTS -## ------------ - -#here relationship between nodes can be defined in the future. - -slots: - id: - identifier: true - slot_uri: schema:identifier - range: uriorcurie - description: A unique identifier for a thing - name: - slot_uri: schema:name - description: A human-readable name for a thing - description: - slot_uri: schema:description - description: A human-readable description for a thing - primary_email: - slot_uri: schema:email - description: The main email address of a person - birth_date: - slot_uri: schema:birthDate - range: date - description: Date on which a person is born - age_in_years: - range: integer - description: Number of years since birth - vital_status: - range: PersonStatus - description: living or dead status - -enums: - PersonStatus: - permissible_values: - ALIVE: - description: the person is living - meaning: PATO:0001421 - DEAD: - description: the person is deceased - meaning: PATO:0001422 - UNKNOWN: - description: the vital status is not known - todos: - - map this to an ontology - ## ------------ ## CLASSES ## ------------ @@ -106,9 +48,43 @@ classes: - CHEBI - MAXO + #a basic/standard definition of a person, which later can be further defined as scientist, beam scientist, user, etc. + Person: + is_a: NamedThing + description: >- + A person (alive, dead, undead, or fictional). + class_uri: schema:Person + mixins: + #- HasAliases + slots: + - primary_email + - birth_date + - age_in_years + - gender + - has_employment_history + #- has_familial_relationships + #- has_medical_history + aliases: + - human being + - individual + # structured_aliases: + # - literal_form: Homo sapiens + # alias_predicate: skos:exactMapping + # source: Linnaeus + # - literal_form: Persona + # alias_predicate: skos:exactMapping + # source: Google Translate + # in_language: es + + #Scientist + Scientist: + is_a: Person + description: >- + A scientist (alive, dead, undead, or fictional). + #Device device: - is_a: namedThing + is_a: NamedThing description: >- A thing made or adapted for a particular purpose, especially a piece of mechanical or electronic equipment @@ -125,8 +101,8 @@ classes: - STY:T122 #Catalysis Sample Core - catalysisSample: - is_a: sample + CatalysisSample: + is_a: Sample description: >- core parameters of a catalysis sample #metadata terms (parameters) are mapped to nfdi voc4cat @@ -141,8 +117,8 @@ classes: # range: GasSystemData #Sample - sample: - is_a: namedThing + Sample: + is_a: NamedThing description: >- Represents a Sample slots: @@ -154,29 +130,30 @@ classes: primary_email: pattern: "^\\S+@[\\S+\\.]+\\S+" - #samples - sampleCollection: + #sample array + SampleCollection: tree_root: true description: >- A holder for Sample objects attributes: entries: - range: sample + range: Sample multivalued: true inlined: true #Experiment - experiment: - is_a: namedThing + Experiment: + is_a: NamedThing description: >- something following a protocol? + ##### Operando, ROCKIT ############# #Experiment Rockit_experiment: - is_a: beamlineExperiment + is_a: BeamlineExperiment description: >- describing the standard setup for ROCK-IT beamline experiment. Sonal + Ana @@ -184,48 +161,71 @@ classes: ##### MATTER ############# - #Beamline - beamline: - is_a: namedThing + #Experimental hall + BESSY: + is_a: NamedThing description: >- Sonal + # attributes: + # beamlines: + # range: Beamline + # multivalued: true + # inlined: true - #Beamline Experiment - beamlineExperiment: - is_a: experiment + + #Myspot Beamline + Myspot_Beamline: + is_a: Beamline description: >- Sonal - #myspot Beamline - MySpot_beamline: - is_a: beamline + #Beamline + Beamline: + is_a: NamedThing description: >- Sonal + attributes: + type: + designates_type: true + range: string + #Beamline Experiment + BeamlineExperiment: + is_a: Experiment + description: >- + Sonal + #beamline user/scientist - ## ------ - ## THINGS - ## ------ + Organization: + attributes: + name: + type: + designates_type: true + range: string - entity: + ## Main classes!!! + Entity: description: >- - Root Biolink Model class for all things and informational relationships, real or imagined. + An entity is anything that exists or has existed or will exist. + Model class for all things and informational relationships, real or imagined. abstract: true slots: - id - #- iri + - iri #- category #- type # rdf:type - name - - description + #- description #- has attribute #- deprecated # evidence code(s)? + exact_mappings: + - BFO:0000001 - namedThing: - is_a: entity + NamedThing: + is_a: Entity description: "a databased entity or concept/class" slots: #- provided by @@ -246,5 +246,100 @@ classes: +## ------------ +## SLOTS +## ------------ +#data fields get their own section +#here relationship between nodes can be defined in the future. + +slots: + id: + identifier: true + slot_uri: schema:identifier + range: uriorcurie + description: A unique identifier for a thing + iri: + description: Internationalized Resource Identifier + category: + name: + slot_uri: schema:name + description: A human-readable name for a thing + description: + slot_uri: schema:description + description: A human-readable description for a thing + primary_email: + slot_uri: schema:email + description: The main email address of a person + birth_date: + slot_uri: schema:birthDate + range: date + description: Date on which a person is born + age_in_years: + range: integer + description: Number of years since birth + vital_status: + range: PersonStatus + description: living or dead status + gender: + slot_uri: schema:gender + range: gender_enum + has_employment_history: + # range: EmploymentEvent + multivalued: true + inlined_as_list: true + current_address: + # range: Address + +## ------------ +## TYPES +## ------------ +imports: + - linkml:types + +#optional: schema type extensions +types: + +#as in Biolink + chemical formula value: + uri: xsd:string + base: str + description: A chemical formula + notes: + - Should be implemented as a stronger type + + +## ------------ +## ENUMERATIONS +## ------------ +enums: + #person status + PersonStatus: + permissible_values: + ALIVE: + description: the person is living + meaning: PATO:0001421 + DEAD: + description: the person is deceased + meaning: PATO:0001422 + UNKNOWN: + description: the vital status is not known + todos: + - map this to an ontology + + gender_enum: + permissible_values: + Woman: + description: identified as woman + meaning: GSSO:000369 + Masculine: + description: masculine + todos: + - map this to an ontology + Diverse: + description: other + todos: + - map this to an ontology + + #comment #... \ No newline at end of file From efe8a08985fdefe932048dd019c63775d7876db7 Mon Sep 17 00:00:00 2001 From: Ana Velazquez Date: Mon, 30 Sep 2024 15:18:56 +0200 Subject: [PATCH 2/3] updating subsections of schema and classes --- project/excel/hzb_metadata_schema.xlsx | Bin 11782 -> 20148 bytes project/graphql/hzb_metadata_schema.graphql | 168 +++- .../jsonld/hzb_metadata_schema.context.jsonld | 124 ++- project/jsonld/hzb_metadata_schema.jsonld | 766 +++++++++------ .../hzb_metadata_schema.schema.json | 571 ++++++++++-- project/owl/hzb_metadata_schema.owl.ttl | 627 +++++++------ project/prefixmap/hzb_metadata_schema.yaml | 100 +- project/protobuf/hzb_metadata_schema.proto | 187 +++- project/shacl/hzb_metadata_schema.shacl.ttl | 880 +++++++++++++----- project/shex/hzb_metadata_schema.shex | 307 ++++-- project/sqlschema/hzb_metadata_schema.sql | 287 ++++-- .../datamodel/hzb_metadata_schema.py | 798 ++++++++++++---- src/hzb_metadata_schema/enums/all-enums.yaml | 40 + src/hzb_metadata_schema/schema/BESSY.yaml | 110 +++ .../schema/{matter => }/bessyII_mySpot.yaml | 0 src/hzb_metadata_schema/schema/catlabs.yaml | 274 ++++++ src/hzb_metadata_schema/schema/core.yaml | 255 +++++ .../schema/energy/Sample.yaml | 65 -- .../schema/energy/catalysisCore.yaml | 97 -- .../schema/hzb_metadata_schema.yaml | 308 +----- .../schema/operandoCatalysis.yaml | 51 + src/hzb_metadata_schema/schema/person.yaml | 63 -- 22 files changed, 4284 insertions(+), 1794 deletions(-) create mode 100644 src/hzb_metadata_schema/enums/all-enums.yaml create mode 100644 src/hzb_metadata_schema/schema/BESSY.yaml rename src/hzb_metadata_schema/schema/{matter => }/bessyII_mySpot.yaml (100%) create mode 100644 src/hzb_metadata_schema/schema/catlabs.yaml create mode 100644 src/hzb_metadata_schema/schema/core.yaml delete mode 100644 src/hzb_metadata_schema/schema/energy/Sample.yaml delete mode 100644 src/hzb_metadata_schema/schema/energy/catalysisCore.yaml create mode 100644 src/hzb_metadata_schema/schema/operandoCatalysis.yaml delete mode 100644 src/hzb_metadata_schema/schema/person.yaml diff --git a/project/excel/hzb_metadata_schema.xlsx b/project/excel/hzb_metadata_schema.xlsx index 6a762e70151c93ac2ea7042698be0ef9c1a1333a..04122cf86fc3192a01949069d0a3b14d5c8c7ab2 100644 GIT binary patch literal 20148 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 z . @prefix xsd: . -hzb_metadata_schema:BESSY a owl:Class, + a owl:Class, linkml:ClassDefinition ; - rdfs:label "BESSY" ; - rdfs:subClassOf hzb_metadata_schema:NamedThing ; - skos:definition "Sonal" ; - skos:inScheme . + rdfs:label "BeamlineExperiment" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . -hzb_metadata_schema:CatalysisSample a owl:Class, + a owl:Class, linkml:ClassDefinition ; - rdfs:label "CatalysisSample" ; + rdfs:label "BeamlineScientist" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . + + a owl:Class, + linkml:ClassDefinition ; + rdfs:label "EMIL_OAESE" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . + + a owl:Class, + linkml:ClassDefinition ; + rdfs:label "EMIL_Pink" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . + + a owl:Class, + linkml:ClassDefinition ; + rdfs:label "mySpot" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . + + a owl:Class, + linkml:ClassDefinition ; + rdfs:label "CatalysisSampleCollection" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty hzb_metadata_schema:sample_environment ], + owl:allValuesFrom ; + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty hzb_metadata_schema:sample_environment ], + owl:minCardinality 0 ; + owl:onProperty ] ; + skos:definition "A holder for CatalysisSample objects" ; + skos:inScheme . + + a owl:Class, + linkml:ClassDefinition ; + rdfs:label "Measurement" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . + + a owl:Class, + linkml:ClassDefinition ; + rdfs:label "Mixture" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . + + a owl:Class, + linkml:ClassDefinition ; + rdfs:label "Parameter" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . + + a owl:Class, + linkml:ClassDefinition ; + rdfs:label "PowderCatalyst" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . + + a owl:Class, + linkml:ClassDefinition ; + rdfs:label "Process" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . + + a owl:Class, + linkml:ClassDefinition ; + rdfs:label "Reaction" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . + + a owl:Class, + linkml:ClassDefinition ; + rdfs:label "ReactionProductCollection" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty hzb_metadata_schema:sample_environment ], - hzb_metadata_schema:Sample ; - skos:definition "core parameters of a catalysis sample #metadata terms (parameters) are mapped to nfdi voc4cat" ; - skos:inScheme . + owl:onProperty ] ; + skos:definition "A holder for ReactionProduct objects" ; + skos:inScheme . -hzb_metadata_schema:ChemicalOrDrugOrTreatment a owl:Class, + a owl:Class, linkml:ClassDefinition ; - rdfs:label "chemical or drug or treatment" ; - skos:inScheme . + rdfs:label "Reactor" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . + + a owl:Class, + linkml:ClassDefinition ; + rdfs:label "Recipe" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . + + a owl:Class, + linkml:ClassDefinition ; + rdfs:label "Scientist" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . + + a owl:Class, + linkml:ClassDefinition ; + rdfs:label "ThinFilmCatalyst" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . -hzb_metadata_schema:Device a owl:Class, + a owl:Class, linkml:ClassDefinition ; - rdfs:label "device" ; - rdfs:subClassOf hzb_metadata_schema:NamedThing ; + rdfs:label "Workflow" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . + + a owl:Class, + linkml:ClassDefinition ; + rdfs:label "DataCite" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . + + a owl:Class, + linkml:ClassDefinition ; + rdfs:label "Device" ; + rdfs:subClassOf ; skos:definition "A thing made or adapted for a particular purpose, especially a piece of mechanical or electronic equipment" ; - skos:inScheme ; + skos:inScheme ; skos:narrowMatch , , , , . -hzb_metadata_schema:RockitExperiment a owl:Class, + a owl:Class, linkml:ClassDefinition ; - rdfs:label "Rockit_experiment" ; - rdfs:subClassOf hzb_metadata_schema:BeamlineExperiment ; - skos:definition "describing the standard setup for ROCK-IT beamline experiment. Sonal + Ana" ; - skos:inScheme . + rdfs:label "Project" ; + rdfs:subClassOf ; + skos:definition "lorem" ; + skos:inScheme . -hzb_metadata_schema:SampleCollection a owl:Class, + a owl:Class, linkml:ClassDefinition ; rdfs:label "SampleCollection" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom hzb_metadata_schema:Sample ; - owl:onProperty hzb_metadata_schema:entries ], + owl:allValuesFrom ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty hzb_metadata_schema:entries ] ; + owl:onProperty ] ; skos:definition "A holder for Sample objects" ; - skos:inScheme . - -hzb_metadata_schema:Scientist a owl:Class, - linkml:ClassDefinition ; - rdfs:label "Scientist" ; - rdfs:subClassOf hzb_metadata_schema:Person ; - skos:definition "A scientist (alive, dead, undead, or fictional)." ; - skos:inScheme . + skos:inScheme . -hzb_metadata_schema:current_address a owl:ObjectProperty, + a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "current_address" ; - skos:inScheme . + skos:inScheme . -hzb_metadata_schema:description a owl:ObjectProperty, + a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "description" ; skos:definition "A human-readable description for a thing" ; - skos:inScheme . + skos:inScheme . -hzb_metadata_schema:BeamlineExperiment a owl:Class, + a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "vital_status" ; + rdfs:range hzb_metadata_schema:PersonStatus ; + skos:definition "living or dead status" ; + skos:inScheme . + +hzb_metadata_schema:ChemicalOrDrugOrTreatment a owl:Class, linkml:ClassDefinition ; - rdfs:label "BeamlineExperiment" ; - rdfs:subClassOf hzb_metadata_schema:Experiment ; - skos:definition "Sonal" ; + rdfs:label "chemical or drug or treatment" ; skos:inScheme . -hzb_metadata_schema:Entity a owl:Class, + a owl:Class, linkml:ClassDefinition ; - rdfs:label "Entity" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty hzb_metadata_schema:id ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty hzb_metadata_schema:name ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty hzb_metadata_schema:iri ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty hzb_metadata_schema:iri ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty hzb_metadata_schema:id ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty hzb_metadata_schema:iri ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty hzb_metadata_schema:name ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty hzb_metadata_schema:name ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty hzb_metadata_schema:id ] ; - skos:definition "An entity is anything that exists or has existed or will exist. Model class for all things and informational relationships, real or imagined." ; - skos:exactMatch BFO:0000001 ; - skos:inScheme . + rdfs:label "SampleEnvironment" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . + + a owl:Class, + linkml:ClassDefinition ; + rdfs:label "SamplePositioning" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . -hzb_metadata_schema:Experiment a owl:Class, + a owl:Class, linkml:ClassDefinition ; rdfs:label "Experiment" ; - rdfs:subClassOf hzb_metadata_schema:NamedThing ; - skos:definition "something following a protocol?" ; - skos:inScheme . + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . -hzb_metadata_schema:Person a owl:Class, + a owl:Class, linkml:ClassDefinition ; - rdfs:label "Person" ; + rdfs:label "ReactionProduct" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . + + a owl:Class, + linkml:ClassDefinition ; + rdfs:label "Entity" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty hzb_metadata_schema:primary_email ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty hzb_metadata_schema:has_employment_history ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty hzb_metadata_schema:age_in_years ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Date ; - owl:onProperty hzb_metadata_schema:birth_date ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty hzb_metadata_schema:gender ], - [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty hzb_metadata_schema:primary_email ], + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom hzb_metadata_schema:GenderEnum ; - owl:onProperty hzb_metadata_schema:gender ], + owl:allValuesFrom linkml:String ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty hzb_metadata_schema:primary_email ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty hzb_metadata_schema:birth_date ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty hzb_metadata_schema:birth_date ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty hzb_metadata_schema:has_employment_history ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty hzb_metadata_schema:gender ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty hzb_metadata_schema:age_in_years ], + owl:onProperty ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty hzb_metadata_schema:age_in_years ], - hzb_metadata_schema:NamedThing ; - skos:altLabel "human being", - "individual" ; - skos:definition "A person (alive, dead, undead, or fictional)." ; - skos:exactMatch schema1:Person ; - skos:inScheme . + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty ] ; + skos:definition "An entity is anything that exists or has existed or will exist. Model class for all things and informational relationships, real or imagined." ; + skos:exactMatch BFO:0000001 ; + skos:inScheme . + + a owl:Ontology ; + rdfs:label "hzb-metadata-schema" ; + dcterms:license "MIT" ; + dcterms:title "hzb-metadata-schema" ; + rdfs:seeAlso ; + skos:definition "(Meta)data schema HZB labs" . hzb_metadata_schema:chemical_formula_value a owl:Class, linkml:TypeDefinition ; @@ -213,241 +302,205 @@ PATO:0001422 a owl:Class, rdfs:label "DEAD" ; rdfs:subClassOf hzb_metadata_schema:PersonStatus . - a owl:Class, - hzb_metadata_schema:GenderEnum ; - rdfs:label "Diverse" ; - rdfs:subClassOf hzb_metadata_schema:GenderEnum . - - a owl:Class, - hzb_metadata_schema:GenderEnum ; - rdfs:label "Masculine" ; - rdfs:subClassOf hzb_metadata_schema:GenderEnum . + a owl:Class, + linkml:ClassDefinition ; + rdfs:label "CatalysisSample" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . -hzb_metadata_schema:MyspotBeamline a owl:Class, + a owl:Class, linkml:ClassDefinition ; - rdfs:label "Myspot_Beamline" ; - rdfs:subClassOf hzb_metadata_schema:Beamline ; - skos:definition "Sonal" ; - skos:inScheme . + rdfs:label "Catalyst" ; + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . -hzb_metadata_schema:Organization a owl:Class, + a owl:Class, linkml:ClassDefinition ; - rdfs:label "Organization" ; + rdfs:label "Person" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty hzb_metadata_schema:type ], - [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty hzb_metadata_schema:name ], + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty hzb_metadata_schema:name ], + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty hzb_metadata_schema:type ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty hzb_metadata_schema:type ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty hzb_metadata_schema:name ] ; - skos:inScheme . - - a owl:Class, - hzb_metadata_schema:PersonStatus ; - rdfs:label "UNKNOWN" ; - rdfs:subClassOf hzb_metadata_schema:PersonStatus . - -hzb_metadata_schema:Sample a owl:Class, - linkml:ClassDefinition ; - rdfs:label "Sample" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty hzb_metadata_schema:primary_email ], + owl:allValuesFrom hzb_metadata_schema:GenderEnum ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty hzb_metadata_schema:birth_date ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty hzb_metadata_schema:vital_status ], + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Date ; - owl:onProperty hzb_metadata_schema:birth_date ], - [ a owl:Restriction ; - owl:allValuesFrom [ a rdfs:Datatype ; - owl:onDatatype xsd:string ; - owl:withRestrictions ( [ xsd:pattern "^\\S+@[\\S+\\.]+\\S+" ] ) ] ; - owl:onProperty hzb_metadata_schema:primary_email ], + owl:minCardinality 0 ; + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; - owl:onProperty hzb_metadata_schema:age_in_years ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty hzb_metadata_schema:age_in_years ], + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom hzb_metadata_schema:PersonStatus ; - owl:onProperty hzb_metadata_schema:vital_status ], + owl:allValuesFrom linkml:Date ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty hzb_metadata_schema:age_in_years ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty hzb_metadata_schema:primary_email ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty hzb_metadata_schema:vital_status ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty hzb_metadata_schema:birth_date ], - hzb_metadata_schema:NamedThing ; - skos:definition "Represents a Sample" ; - skos:inScheme . + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty ], + ; + skos:altLabel "human being", + "individual" ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:exactMatch schema1:Person ; + skos:inScheme . -hzb_metadata_schema:entries a owl:ObjectProperty, + a owl:Class, + linkml:ClassDefinition ; + rdfs:label "Sample" ; + rdfs:subClassOf ; + skos:definition "Information about a generic laboratory sample, discipline agnostic." ; + skos:inScheme . + + a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "entries" ; - skos:inScheme . + skos:inScheme . -hzb_metadata_schema:has_employment_history a owl:ObjectProperty, + a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "has_employment_history" ; - skos:inScheme . + skos:inScheme . + + a owl:Class, + hzb_metadata_schema:GenderEnum ; + rdfs:label "Diverse" ; + rdfs:subClassOf hzb_metadata_schema:GenderEnum . + + a owl:Class, + hzb_metadata_schema:GenderEnum ; + rdfs:label "Masculine" ; + rdfs:subClassOf hzb_metadata_schema:GenderEnum . + + a owl:Class, + hzb_metadata_schema:PersonStatus ; + rdfs:label "UNKNOWN" ; + rdfs:subClassOf hzb_metadata_schema:PersonStatus . -hzb_metadata_schema:Beamline a owl:Class, + a owl:Class, linkml:ClassDefinition ; rdfs:label "Beamline" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty hzb_metadata_schema:type ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty hzb_metadata_schema:type ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty hzb_metadata_schema:type ], - hzb_metadata_schema:NamedThing ; - skos:definition "Sonal" ; - skos:inScheme . + rdfs:subClassOf ; + skos:definition "A person (alive, dead, undead, or fictional)." ; + skos:inScheme . + + a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "age_in_years" ; + rdfs:range linkml:Integer ; + skos:definition "Number of years since birth" ; + skos:inScheme . -hzb_metadata_schema:category a owl:ObjectProperty, + a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "birth_date" ; + rdfs:range linkml:Date ; + skos:definition "Date on which a person is born" ; + skos:inScheme . + + a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "category" ; - skos:inScheme . + skos:inScheme . -hzb_metadata_schema:gender a owl:ObjectProperty, + a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "gender" ; rdfs:range hzb_metadata_schema:GenderEnum ; - skos:inScheme . + skos:inScheme . -hzb_metadata_schema:id a owl:ObjectProperty, + a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "id" ; rdfs:range linkml:Uriorcurie ; skos:definition "A unique identifier for a thing" ; - skos:inScheme . + skos:inScheme . -hzb_metadata_schema:iri a owl:ObjectProperty, + a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "iri" ; skos:definition "Internationalized Resource Identifier" ; - skos:inScheme . + skos:inScheme . -hzb_metadata_schema:sample_environment a owl:ObjectProperty, + a owl:ObjectProperty, linkml:SlotDefinition ; - rdfs:label "sample_environment" ; - skos:inScheme . + rdfs:label "primary_email" ; + skos:definition "The main email address of a person" ; + skos:inScheme . -hzb_metadata_schema:vital_status a owl:ObjectProperty, + a owl:ObjectProperty, + linkml:SlotDefinition . + + a owl:ObjectProperty, linkml:SlotDefinition ; - rdfs:label "vital_status" ; - rdfs:range hzb_metadata_schema:PersonStatus ; - skos:definition "living or dead status" ; - skos:inScheme . + rdfs:label "name" ; + skos:definition "A human-readable name for a thing" ; + skos:inScheme . + +hzb_metadata_schema:PersonStatus a owl:Class, + linkml:EnumDefinition ; + owl:unionOf ( PATO:0001421 PATO:0001422 ) ; + linkml:permissible_values PATO:0001421, + PATO:0001422, + . -hzb_metadata_schema:NamedThing a owl:Class, +hzb_metadata_schema:GenderEnum a owl:Class, + linkml:EnumDefinition ; + owl:unionOf ( GSSO:000369 ) ; + linkml:permissible_values GSSO:000369, + , + . + + a owl:Class, linkml:ClassDefinition ; - rdfs:label "NamedThing" ; + rdfs:label "NamedEntity" ; rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty ], + [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty hzb_metadata_schema:category ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty hzb_metadata_schema:category ], + owl:onProperty ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty hzb_metadata_schema:category ], - hzb_metadata_schema:Entity ; + owl:onProperty ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ], + ; skos:definition "a databased entity or concept/class" ; skos:exactMatch , , , , BFO:0000001 ; - skos:inScheme . - -hzb_metadata_schema:age_in_years a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "age_in_years" ; - rdfs:range linkml:Integer ; - skos:definition "Number of years since birth" ; - skos:inScheme . - -hzb_metadata_schema:birth_date a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "birth_date" ; - rdfs:range linkml:Date ; - skos:definition "Date on which a person is born" ; - skos:inScheme . - -hzb_metadata_schema:name a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "name" ; - skos:definition "A human-readable name for a thing" ; - skos:inScheme . - -hzb_metadata_schema:primary_email a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "primary_email" ; - skos:definition "The main email address of a person" ; - skos:inScheme . - -hzb_metadata_schema:GenderEnum a owl:Class, - linkml:EnumDefinition ; - owl:unionOf ( GSSO:000369 ) ; - linkml:permissible_values GSSO:000369, - , - . - -hzb_metadata_schema:PersonStatus a owl:Class, - linkml:EnumDefinition ; - owl:unionOf ( PATO:0001421 PATO:0001422 ) ; - linkml:permissible_values PATO:0001421, - PATO:0001422, - . - -hzb_metadata_schema:type a owl:ObjectProperty, - linkml:SlotDefinition . - - a owl:Ontology ; - rdfs:label "hzb-metadata-schema" ; - dcterms:license "MIT" ; - dcterms:title "hzb-metadata-schema" ; - rdfs:seeAlso ; - skos:definition "(Meta)data schema HZB labs" . - -[] a owl:Restriction ; - rdfs:subClassOf hzb_metadata_schema:Organization ; - owl:onProperty hzb_metadata_schema:type ; - owl:someValuesFrom hzb_metadata_schema:Organization . - -[] a owl:Restriction ; - rdfs:subClassOf hzb_metadata_schema:MyspotBeamline ; - owl:onProperty hzb_metadata_schema:type ; - owl:someValuesFrom hzb_metadata_schema:MyspotBeamline . - -[] a owl:Restriction ; - rdfs:subClassOf hzb_metadata_schema:Beamline ; - owl:onProperty hzb_metadata_schema:type ; - owl:someValuesFrom hzb_metadata_schema:Beamline . + skos:inScheme . diff --git a/project/prefixmap/hzb_metadata_schema.yaml b/project/prefixmap/hzb_metadata_schema.yaml index dcd0af9..88bf39d 100644 --- a/project/prefixmap/hzb_metadata_schema.yaml +++ b/project/prefixmap/hzb_metadata_schema.yaml @@ -1,11 +1,7 @@ { "BFO": "http://purl.obolibrary.org/obo/BFO_", - "CHEBI": "http://example.org/UNKNOWN/CHEBI/", - "CHEMBL.COMPOUND": "http://example.org/UNKNOWN/CHEMBL.COMPOUND/", "GSSO": "http://purl.bioontology.org/ontology/GSSO/", - "MAXO": "http://example.org/UNKNOWN/MAXO/", "PATO": "http://purl.obolibrary.org/obo/PATO_", - "PUBCHEM.COMPOUND": "http://example.org/UNKNOWN/PUBCHEM.COMPOUND/", "STY": "http://example.org/UNKNOWN/STY/", "UMLSSG": "http://example.org/UNKNOWN/UMLSSG/", "WIKIDATA": "http://example.org/UNKNOWN/WIKIDATA/", @@ -16,7 +12,103 @@ "prov": "http://www.w3.org/ns/prov#", "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "schema": "http://schema.org/", + "Beamline": { + "@id": "https://w3id.org/anak-velazquez/BESSY/Beamline" + }, + "BeamlineExperiment": { + "@id": "https://w3id.org/anak-velazquez/BESSY/BeamlineExperiment" + }, + "BeamlineScientist": { + "@id": "https://w3id.org/anak-velazquez/BESSY/BeamlineScientist" + }, + "CatalysisSample": { + "@id": "https://w3id.org/anak-velazquez/catlabs/CatalysisSample" + }, + "CatalysisSampleCollection": { + "@id": "https://w3id.org/anak-velazquez/catlabs/CatalysisSampleCollection" + }, + "Catalyst": { + "@id": "https://w3id.org/anak-velazquez/catlabs/Catalyst" + }, + "DataCite": { + "@id": "https://w3id.org/anak-velazquez/core/DataCite" + }, + "Device": { + "@id": "https://w3id.org/anak-velazquez/core/Device" + }, + "EMILOAESE": { + "@id": "https://w3id.org/anak-velazquez/BESSY/EMILOAESE" + }, + "EMILPink": { + "@id": "https://w3id.org/anak-velazquez/BESSY/EMILPink" + }, + "Entity": { + "@id": "https://w3id.org/anak-velazquez/core/Entity" + }, + "Experiment": { + "@id": "https://w3id.org/anak-velazquez/catlabs/Experiment" + }, + "Measurement": { + "@id": "https://w3id.org/anak-velazquez/catlabs/Measurement" + }, + "Mixture": { + "@id": "https://w3id.org/anak-velazquez/catlabs/Mixture" + }, + "MySpot": { + "@id": "https://w3id.org/anak-velazquez/BESSY/MySpot" + }, + "NamedEntity": { + "@id": "https://w3id.org/anak-velazquez/core/NamedEntity" + }, + "Parameter": { + "@id": "https://w3id.org/anak-velazquez/catlabs/Parameter" + }, "Person": { "@id": "schema:Person" + }, + "PowderCatalyst": { + "@id": "https://w3id.org/anak-velazquez/catlabs/PowderCatalyst" + }, + "Process": { + "@id": "https://w3id.org/anak-velazquez/catlabs/Process" + }, + "Project": { + "@id": "https://w3id.org/anak-velazquez/core/Project" + }, + "Reaction": { + "@id": "https://w3id.org/anak-velazquez/catlabs/Reaction" + }, + "ReactionProduct": { + "@id": "https://w3id.org/anak-velazquez/catlabs/ReactionProduct" + }, + "ReactionProductCollection": { + "@id": "https://w3id.org/anak-velazquez/catlabs/ReactionProductCollection" + }, + "Reactor": { + "@id": "https://w3id.org/anak-velazquez/catlabs/Reactor" + }, + "Recipe": { + "@id": "https://w3id.org/anak-velazquez/catlabs/Recipe" + }, + "Sample": { + "@id": "https://w3id.org/anak-velazquez/core/Sample" + }, + "SampleCollection": { + "@id": "https://w3id.org/anak-velazquez/core/SampleCollection" + }, + "SampleEnvironment": { + "@id": "https://w3id.org/anak-velazquez/operandoCatalysis/SampleEnvironment" + }, + "SamplePositioning": { + "@id": "https://w3id.org/anak-velazquez/operandoCatalysis/SamplePositioning" + }, + "Scientist": { + "@id": "https://w3id.org/anak-velazquez/catlabs/Scientist" + }, + "ThinFilmCatalyst": { + "@id": "https://w3id.org/anak-velazquez/catlabs/ThinFilmCatalyst" + }, + "Workflow": { + "@id": "https://w3id.org/anak-velazquez/catlabs/Workflow" } } \ No newline at end of file diff --git a/project/protobuf/hzb_metadata_schema.proto b/project/protobuf/hzb_metadata_schema.proto index 42556ee..b05f834 100644 --- a/project/protobuf/hzb_metadata_schema.proto +++ b/project/protobuf/hzb_metadata_schema.proto @@ -1,16 +1,15 @@ syntax="proto3"; package // metamodel_version: 1.7.0 -// Sonal +// A person (alive, dead, undead, or fictional). message Beamline { uriorcurie id = 0 string iri = 0 string name = 0 string category = 0 - string type = 0 } -// Sonal +// A person (alive, dead, undead, or fictional). message BeamlineExperiment { uriorcurie id = 0 @@ -18,26 +17,47 @@ message BeamlineExperiment string name = 0 string category = 0 } -// Sonal -message BESSY +// A person (alive, dead, undead, or fictional). +message BeamlineScientist { uriorcurie id = 0 string iri = 0 string name = 0 string category = 0 + string primaryEmail = 0 + date birthDate = 0 + integer ageInYears = 0 + genderEnum gender = 0 + repeated string hasEmploymentHistory = 0 } -// core parameters of a catalysis sample #metadata terms (parameters) are mapped to nfdi voc4cat +// A person (alive, dead, undead, or fictional). message CatalysisSample { uriorcurie id = 0 string iri = 0 string name = 0 string category = 0 - string primaryEmail = 0 - date birthDate = 0 - integer ageInYears = 0 - personStatus vitalStatus = 0 - string sampleEnvironment = 0 + } +// A holder for CatalysisSample objects +message CatalysisSampleCollection + { + repeated catalysisSample entries = 0 + } +// A person (alive, dead, undead, or fictional). +message Catalyst + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + } +// A person (alive, dead, undead, or fictional). +message DataCite + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 } // A thing made or adapted for a particular purpose, especially a piece of mechanical or electronic equipment message Device @@ -47,7 +67,23 @@ message Device string name = 0 string category = 0 } -// something following a protocol? +// A person (alive, dead, undead, or fictional). +message EMILOAESE + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + } +// A person (alive, dead, undead, or fictional). +message EMILPink + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + } +// A person (alive, dead, undead, or fictional). message Experiment { uriorcurie id = 0 @@ -55,27 +91,45 @@ message Experiment string name = 0 string category = 0 } -// Sonal -message MyspotBeamline +// A person (alive, dead, undead, or fictional). +message Measurement + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + } +// A person (alive, dead, undead, or fictional). +message Mixture + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + } +// A person (alive, dead, undead, or fictional). +message MySpot { uriorcurie id = 0 string iri = 0 string name = 0 string category = 0 - string type = 0 } // a databased entity or concept/class -message NamedThing +message NamedEntity { uriorcurie id = 0 string iri = 0 string name = 0 string category = 0 } -message Organization +// A person (alive, dead, undead, or fictional). +message Parameter { + uriorcurie id = 0 + string iri = 0 string name = 0 - string type = 0 + string category = 0 } // A person (alive, dead, undead, or fictional). message Person @@ -90,32 +144,97 @@ message Person genderEnum gender = 0 repeated string hasEmploymentHistory = 0 } -// describing the standard setup for ROCK-IT beamline experiment. Sonal + Ana -message RockitExperiment +// A person (alive, dead, undead, or fictional). +message PowderCatalyst + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + } +// A person (alive, dead, undead, or fictional). +message Process + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + } +// lorem +message Project + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + } +// A person (alive, dead, undead, or fictional). +message Reaction { uriorcurie id = 0 string iri = 0 string name = 0 string category = 0 } -// Represents a Sample +// A person (alive, dead, undead, or fictional). +message ReactionProduct + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + } +// A holder for ReactionProduct objects +message ReactionProductCollection + { + repeated reactionProduct entries = 0 + } +// A person (alive, dead, undead, or fictional). +message Reactor + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + } +// A person (alive, dead, undead, or fictional). +message Recipe + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + } +// Information about a generic laboratory sample, discipline agnostic. message Sample { uriorcurie id = 0 string iri = 0 string name = 0 string category = 0 - string primaryEmail = 0 - date birthDate = 0 - integer ageInYears = 0 - personStatus vitalStatus = 0 } // A holder for Sample objects message SampleCollection { repeated sample entries = 0 } -// A scientist (alive, dead, undead, or fictional). +// A person (alive, dead, undead, or fictional). +message SampleEnvironment + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + } +// A person (alive, dead, undead, or fictional). +message SamplePositioning + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + } +// A person (alive, dead, undead, or fictional). message Scientist { uriorcurie id = 0 @@ -128,3 +247,19 @@ message Scientist genderEnum gender = 0 repeated string hasEmploymentHistory = 0 } +// A person (alive, dead, undead, or fictional). +message ThinFilmCatalyst + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + } +// A person (alive, dead, undead, or fictional). +message Workflow + { + uriorcurie id = 0 + string iri = 0 + string name = 0 + string category = 0 + } diff --git a/project/shacl/hzb_metadata_schema.shacl.ttl b/project/shacl/hzb_metadata_schema.shacl.ttl index 6d35d19..0b5bda7 100644 --- a/project/shacl/hzb_metadata_schema.shacl.ttl +++ b/project/shacl/hzb_metadata_schema.shacl.ttl @@ -1,5 +1,4 @@ @prefix GSSO: . -@prefix PATO: . @prefix hzb_metadata_schema: . @prefix rdf: . @prefix schema1: . @@ -10,97 +9,590 @@ schema1:Person a sh:NodeShape ; sh:closed true ; sh:description "A person (alive, dead, undead, or fictional)." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:integer ; + sh:property [ sh:datatype xsd:string ; + sh:description "The main email address of a person" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:email ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path schema1:name ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 6 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 7 ; + sh:path ], + [ sh:in ( GSSO:000369 "Masculine" "Diverse" ) ; + sh:maxCount 1 ; + sh:order 3 ; + sh:path schema1:gender ], + [ sh:datatype xsd:date ; + sh:description "Date on which a person is born" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:birthDate ], + [ sh:datatype xsd:string ; + sh:nodeKind sh:Literal ; + sh:order 4 ; + sh:path ], + [ sh:datatype xsd:integer ; + sh:description "Number of years since birth" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ] ; + sh:targetClass schema1:Person . + + a sh:NodeShape ; + sh:closed true ; + sh:description "A person (alive, dead, undead, or fictional)." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:name ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ] ; + sh:targetClass . + + a sh:NodeShape ; + sh:closed true ; + sh:description "A person (alive, dead, undead, or fictional)." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:name ] ; + sh:targetClass . + + a sh:NodeShape ; + sh:closed true ; + sh:description "A person (alive, dead, undead, or fictional)." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 6 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:integer ; sh:description "Number of years since birth" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 2 ; - sh:path hzb_metadata_schema:age_in_years ], + sh:path ], + [ sh:datatype xsd:date ; + sh:description "Date on which a person is born" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:birthDate ], + [ sh:datatype xsd:string ; + sh:nodeKind sh:Literal ; + sh:order 4 ; + sh:path ], + [ sh:in ( GSSO:000369 "Masculine" "Diverse" ) ; + sh:maxCount 1 ; + sh:order 3 ; + sh:path schema1:gender ], + [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 7 ; + sh:path ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path schema1:name ], [ sh:datatype xsd:string ; sh:description "The main email address of a person" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 0 ; - sh:path schema1:email ], + sh:path schema1:email ] ; + sh:targetClass . + + a sh:NodeShape ; + sh:closed true ; + sh:description "A person (alive, dead, undead, or fictional)." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:name ], [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:identifier ] ; + sh:targetClass . + + a sh:NodeShape ; + sh:closed true ; + sh:description "A person (alive, dead, undead, or fictional)." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:name ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:identifier ] ; + sh:targetClass . + + a sh:NodeShape ; + sh:closed true ; + sh:description "A person (alive, dead, undead, or fictional)." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:name ] ; + sh:targetClass . + + a sh:NodeShape ; + sh:closed true ; + sh:description "A holder for CatalysisSample objects" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:class ; + sh:nodeKind sh:IRI ; + sh:order 0 ; + sh:path ] ; + sh:targetClass . + + a sh:NodeShape ; + sh:closed true ; + sh:description "A person (alive, dead, undead, or fictional)." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:name ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ] ; + sh:targetClass . + + a sh:NodeShape ; + sh:closed true ; + sh:description "A person (alive, dead, undead, or fictional)." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:name ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ] ; + sh:targetClass . + + a sh:NodeShape ; + sh:closed true ; + sh:description "A person (alive, dead, undead, or fictional)." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:name ] ; + sh:targetClass . + + a sh:NodeShape ; + sh:closed true ; + sh:description "A person (alive, dead, undead, or fictional)." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:name ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:identifier ] ; + sh:targetClass . + + a sh:NodeShape ; + sh:closed true ; + sh:description "A person (alive, dead, undead, or fictional)." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:name ] ; + sh:targetClass . + + a sh:NodeShape ; + sh:closed true ; + sh:description "A person (alive, dead, undead, or fictional)." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:name ] ; + sh:targetClass . + + a sh:NodeShape ; + sh:closed true ; + sh:description "A person (alive, dead, undead, or fictional)." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:name ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:identifier ] ; + sh:targetClass . + + a sh:NodeShape ; + sh:closed true ; + sh:description "A person (alive, dead, undead, or fictional)." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:name ], + [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:identifier ] ; + sh:targetClass . + + a sh:NodeShape ; + sh:closed true ; + sh:description "A holder for ReactionProduct objects" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:class ; + sh:nodeKind sh:IRI ; + sh:order 0 ; + sh:path ] ; + sh:targetClass . + + a sh:NodeShape ; + sh:closed true ; + sh:description "A person (alive, dead, undead, or fictional)." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:name ] ; + sh:targetClass . + + a sh:NodeShape ; + sh:closed true ; + sh:description "A person (alive, dead, undead, or fictional)." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:name ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ] ; + sh:targetClass . + + a sh:NodeShape ; + sh:closed true ; + sh:description "A person (alive, dead, undead, or fictional)." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; sh:nodeKind sh:Literal ; sh:order 4 ; - sh:path hzb_metadata_schema:has_employment_history ], + sh:path ], [ sh:datatype xsd:string ; sh:description "Internationalized Resource Identifier" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; + sh:order 7 ; + sh:path ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; sh:order 6 ; - sh:path hzb_metadata_schema:iri ], + sh:path schema1:identifier ], [ sh:datatype xsd:string ; sh:description "A human-readable name for a thing" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 7 ; - sh:path schema1:name ], + sh:order 5 ; + sh:path schema1:name ], + [ sh:datatype xsd:integer ; + sh:description "Number of years since birth" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ], [ sh:in ( GSSO:000369 "Masculine" "Diverse" ) ; sh:maxCount 1 ; sh:order 3 ; sh:path schema1:gender ], + [ sh:datatype xsd:string ; + sh:description "The main email address of a person" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:email ], [ sh:datatype xsd:date ; sh:description "Date on which a person is born" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 1 ; - sh:path schema1:birthDate ], - [ sh:datatype xsd:anyURI ; - sh:description "A unique identifier for a thing" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path schema1:identifier ] ; - sh:targetClass schema1:Person . + sh:path schema1:birthDate ] ; + sh:targetClass . -hzb_metadata_schema:BESSY a sh:NodeShape ; + a sh:NodeShape ; sh:closed true ; - sh:description "Sonal" ; + sh:description "A person (alive, dead, undead, or fictional)." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:anyURI ; + sh:property [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ], + [ sh:datatype xsd:anyURI ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; + sh:order 1 ; sh:path schema1:identifier ], [ sh:datatype xsd:string ; sh:description "A human-readable name for a thing" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path schema1:name ], - [ sh:datatype xsd:string ; - sh:description "Internationalized Resource Identifier" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path hzb_metadata_schema:iri ] ; - sh:targetClass hzb_metadata_schema:BESSY . + sh:order 0 ; + sh:path schema1:name ] ; + sh:targetClass . -hzb_metadata_schema:Beamline a sh:NodeShape ; + a sh:NodeShape ; sh:closed true ; - sh:description "Sonal" ; + sh:description "A person (alive, dead, undead, or fictional)." ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path hzb_metadata_schema:type ], - [ sh:datatype xsd:string ; sh:description "Internationalized Resource Identifier" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 2 ; - sh:path hzb_metadata_schema:iri ], + sh:path ], [ sh:datatype xsd:string ; sh:description "A human-readable name for a thing" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 3 ; + sh:order 0 ; sh:path schema1:name ], [ sh:datatype xsd:anyURI ; sh:description "A unique identifier for a thing" ; @@ -109,100 +601,65 @@ hzb_metadata_schema:Beamline a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 1 ; sh:path schema1:identifier ] ; - sh:targetClass hzb_metadata_schema:Beamline . + sh:targetClass . -hzb_metadata_schema:BeamlineExperiment a sh:NodeShape ; + a sh:NodeShape ; sh:closed true ; - sh:description "Sonal" ; + sh:description "A person (alive, dead, undead, or fictional)." ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; sh:description "A human-readable name for a thing" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 2 ; + sh:order 0 ; sh:path schema1:name ], [ sh:datatype xsd:anyURI ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; + sh:order 1 ; sh:path schema1:identifier ], [ sh:datatype xsd:string ; sh:description "Internationalized Resource Identifier" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path hzb_metadata_schema:iri ] ; - sh:targetClass hzb_metadata_schema:BeamlineExperiment . + sh:order 2 ; + sh:path ] ; + sh:targetClass . -hzb_metadata_schema:CatalysisSample a sh:NodeShape ; + a sh:NodeShape ; sh:closed true ; - sh:description "core parameters of a catalysis sample #metadata terms (parameters) are mapped to nfdi voc4cat" ; + sh:description "A thing made or adapted for a particular purpose, especially a piece of mechanical or electronic equipment" ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 0 ; - sh:path hzb_metadata_schema:sample_environment ], - [ sh:datatype xsd:date ; - sh:description "Date on which a person is born" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path schema1:birthDate ], - [ sh:datatype xsd:string ; - sh:description "The main email address of a person" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path schema1:email ; - sh:pattern "^\\S+@[\\S+\\.]+\\S+" ], - [ sh:datatype xsd:string ; - sh:description "Internationalized Resource Identifier" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 6 ; - sh:path hzb_metadata_schema:iri ], + sh:path schema1:name ], [ sh:datatype xsd:anyURI ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 5 ; + sh:order 1 ; sh:path schema1:identifier ], [ sh:datatype xsd:string ; - sh:description "A human-readable name for a thing" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 7 ; - sh:path schema1:name ], - [ sh:datatype xsd:integer ; - sh:description "Number of years since birth" ; + sh:description "Internationalized Resource Identifier" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path hzb_metadata_schema:age_in_years ], - [ sh:description "living or dead status" ; - sh:in ( PATO:0001421 PATO:0001422 "UNKNOWN" ) ; - sh:maxCount 1 ; - sh:order 4 ; - sh:path hzb_metadata_schema:vital_status ] ; - sh:targetClass hzb_metadata_schema:CatalysisSample . + sh:order 2 ; + sh:path ] ; + sh:targetClass . -hzb_metadata_schema:ChemicalOrDrugOrTreatment a sh:NodeShape ; + a sh:NodeShape ; sh:closed false ; - sh:ignoredProperties ( rdf:type ) ; - sh:targetClass hzb_metadata_schema:ChemicalOrDrugOrTreatment . - -hzb_metadata_schema:Device a sh:NodeShape ; - sh:closed true ; - sh:description "A thing made or adapted for a particular purpose, especially a piece of mechanical or electronic equipment" ; + sh:description "An entity is anything that exists or has existed or will exist. Model class for all things and informational relationships, real or imagined." ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:anyURI ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; - sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:order 0 ; sh:path schema1:identifier ], @@ -217,261 +674,196 @@ hzb_metadata_schema:Device a sh:NodeShape ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 1 ; - sh:path hzb_metadata_schema:iri ] ; - sh:targetClass hzb_metadata_schema:Device . + sh:path ] ; + sh:targetClass . -hzb_metadata_schema:Entity a sh:NodeShape ; - sh:closed false ; - sh:description "An entity is anything that exists or has existed or will exist. Model class for all things and informational relationships, real or imagined." ; + a sh:NodeShape ; + sh:closed true ; + sh:description "a databased entity or concept/class" ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:anyURI ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; + sh:order 1 ; sh:path schema1:identifier ], [ sh:datatype xsd:string ; sh:description "A human-readable name for a thing" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 2 ; + sh:order 0 ; sh:path schema1:name ], [ sh:datatype xsd:string ; sh:description "Internationalized Resource Identifier" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path hzb_metadata_schema:iri ] ; - sh:targetClass hzb_metadata_schema:Entity . + sh:order 2 ; + sh:path ] ; + sh:targetClass . -hzb_metadata_schema:Experiment a sh:NodeShape ; + a sh:NodeShape ; sh:closed true ; - sh:description "something following a protocol?" ; + sh:description "lorem" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; + sh:property [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; sh:description "A human-readable name for a thing" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 2 ; + sh:order 0 ; sh:path schema1:name ], [ sh:datatype xsd:string ; sh:description "Internationalized Resource Identifier" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path hzb_metadata_schema:iri ], - [ sh:datatype xsd:anyURI ; - sh:description "A unique identifier for a thing" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ] ; + sh:targetClass . + + a sh:NodeShape ; + sh:closed true ; + sh:description "A holder for Sample objects" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:class ; + sh:nodeKind sh:IRI ; sh:order 0 ; - sh:path schema1:identifier ] ; - sh:targetClass hzb_metadata_schema:Experiment . + sh:path ] ; + sh:targetClass . + +hzb_metadata_schema:ChemicalOrDrugOrTreatment a sh:NodeShape ; + sh:closed false ; + sh:ignoredProperties ( rdf:type ) ; + sh:targetClass hzb_metadata_schema:ChemicalOrDrugOrTreatment . -hzb_metadata_schema:MyspotBeamline a sh:NodeShape ; + a sh:NodeShape ; sh:closed true ; - sh:description "Sonal" ; + sh:description "A person (alive, dead, undead, or fictional)." ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path hzb_metadata_schema:type ], + sh:order 2 ; + sh:path ], [ sh:datatype xsd:string ; - sh:description "Internationalized Resource Identifier" ; + sh:description "A human-readable name for a thing" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path hzb_metadata_schema:iri ], + sh:order 0 ; + sh:path schema1:name ], [ sh:datatype xsd:anyURI ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:order 1 ; - sh:path schema1:identifier ], - [ sh:datatype xsd:string ; - sh:description "A human-readable name for a thing" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path schema1:name ] ; - sh:targetClass hzb_metadata_schema:MyspotBeamline . + sh:path schema1:identifier ] ; + sh:targetClass . -hzb_metadata_schema:NamedThing a sh:NodeShape ; + a sh:NodeShape ; sh:closed true ; - sh:description "a databased entity or concept/class" ; + sh:description "A person (alive, dead, undead, or fictional)." ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:anyURI ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; + sh:order 1 ; sh:path schema1:identifier ], [ sh:datatype xsd:string ; - sh:description "A human-readable name for a thing" ; + sh:description "Internationalized Resource Identifier" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 2 ; - sh:path schema1:name ], + sh:path ], [ sh:datatype xsd:string ; - sh:description "Internationalized Resource Identifier" ; + sh:description "A human-readable name for a thing" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path hzb_metadata_schema:iri ] ; - sh:targetClass hzb_metadata_schema:NamedThing . + sh:order 0 ; + sh:path schema1:name ] ; + sh:targetClass . -hzb_metadata_schema:Organization a sh:NodeShape ; + a sh:NodeShape ; sh:closed true ; + sh:description "A person (alive, dead, undead, or fictional)." ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; + sh:description "Internationalized Resource Identifier" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path hzb_metadata_schema:name ], - [ sh:datatype xsd:string ; + sh:order 2 ; + sh:path ], + [ sh:datatype xsd:anyURI ; + sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; + sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:order 1 ; - sh:path hzb_metadata_schema:type ] ; - sh:targetClass hzb_metadata_schema:Organization . + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path schema1:name ] ; + sh:targetClass . -hzb_metadata_schema:RockitExperiment a sh:NodeShape ; + a sh:NodeShape ; sh:closed true ; - sh:description "describing the standard setup for ROCK-IT beamline experiment. Sonal + Ana" ; + sh:description "A person (alive, dead, undead, or fictional)." ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; sh:description "A human-readable name for a thing" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 2 ; + sh:order 0 ; sh:path schema1:name ], [ sh:datatype xsd:string ; sh:description "Internationalized Resource Identifier" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path hzb_metadata_schema:iri ], + sh:order 2 ; + sh:path ], [ sh:datatype xsd:anyURI ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; + sh:order 1 ; sh:path schema1:identifier ] ; - sh:targetClass hzb_metadata_schema:RockitExperiment . - -hzb_metadata_schema:SampleCollection a sh:NodeShape ; - sh:closed true ; - sh:description "A holder for Sample objects" ; - sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class hzb_metadata_schema:Sample ; - sh:nodeKind sh:IRI ; - sh:order 0 ; - sh:path hzb_metadata_schema:entries ] ; - sh:targetClass hzb_metadata_schema:SampleCollection . + sh:targetClass . -hzb_metadata_schema:Scientist a sh:NodeShape ; + a sh:NodeShape ; sh:closed true ; - sh:description "A scientist (alive, dead, undead, or fictional)." ; + sh:description "Information about a generic laboratory sample, discipline agnostic." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:in ( GSSO:000369 "Masculine" "Diverse" ) ; - sh:maxCount 1 ; - sh:order 3 ; - sh:path schema1:gender ], - [ sh:datatype xsd:string ; - sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path hzb_metadata_schema:has_employment_history ], - [ sh:datatype xsd:string ; - sh:description "The main email address of a person" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path schema1:email ], - [ sh:datatype xsd:anyURI ; + sh:property [ sh:datatype xsd:anyURI ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 5 ; + sh:order 1 ; sh:path schema1:identifier ], - [ sh:datatype xsd:integer ; - sh:description "Number of years since birth" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path hzb_metadata_schema:age_in_years ], [ sh:datatype xsd:string ; sh:description "A human-readable name for a thing" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 7 ; + sh:order 0 ; sh:path schema1:name ], [ sh:datatype xsd:string ; sh:description "Internationalized Resource Identifier" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 6 ; - sh:path hzb_metadata_schema:iri ], - [ sh:datatype xsd:date ; - sh:description "Date on which a person is born" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path schema1:birthDate ] ; - sh:targetClass hzb_metadata_schema:Scientist . - -hzb_metadata_schema:Sample a sh:NodeShape ; - sh:closed true ; - sh:description "Represents a Sample" ; - sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "Internationalized Resource Identifier" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path hzb_metadata_schema:iri ], - [ sh:datatype xsd:anyURI ; - sh:description "A unique identifier for a thing" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path schema1:identifier ], - [ sh:datatype xsd:integer ; - sh:description "Number of years since birth" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; sh:order 2 ; - sh:path hzb_metadata_schema:age_in_years ], - [ sh:datatype xsd:string ; - sh:description "A human-readable name for a thing" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 6 ; - sh:path schema1:name ], - [ sh:datatype xsd:date ; - sh:description "Date on which a person is born" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path schema1:birthDate ], - [ sh:description "living or dead status" ; - sh:in ( PATO:0001421 PATO:0001422 "UNKNOWN" ) ; - sh:maxCount 1 ; - sh:order 3 ; - sh:path hzb_metadata_schema:vital_status ], - [ sh:datatype xsd:string ; - sh:description "The main email address of a person" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path schema1:email ; - sh:pattern "^\\S+@[\\S+\\.]+\\S+" ] ; - sh:targetClass hzb_metadata_schema:Sample . + sh:path ] ; + sh:targetClass . diff --git a/project/shex/hzb_metadata_schema.shex b/project/shex/hzb_metadata_schema.shex index 07565d0..da11e18 100644 --- a/project/shex/hzb_metadata_schema.shex +++ b/project/shex/hzb_metadata_schema.shex @@ -47,155 +47,306 @@ linkml:Jsonpath xsd:string linkml:Sparqlpath xsd:string - ( + ( CLOSED { - ( $ ( & ; - rdf:type [ ] ? ; - @linkml:String ? + ( $ ( & ; + rdf:type [ ] ? ) ; - rdf:type [ ] + rdf:type [ ] ) - } OR @ + } OR @ OR @ OR + @ ) - ( + CLOSED { + ( $ ( & + ; + rdf:type [ ] ? + ) ; + rdf:type [ ] + ) +} + + CLOSED { + ( $ ( & ; + rdf:type [ schema1:Person ] ? + ) ; + rdf:type [ ] + ) +} + + ( + CLOSED { + ( $ ( & ; + rdf:type [ ] ? + ) ; + rdf:type [ ] + ) + } OR @ +) + + CLOSED { + ( $ + @ * ; + rdf:type [ ] ? + ) +} + + ( CLOSED { - ( $ ( & ; - rdf:type [ ] ? + ( $ ( & + ; + rdf:type [ ] ? ) ; - rdf:type [ ] + rdf:type [ ] ) - } OR @ + } OR @ OR @ ) - CLOSED { - ( $ ( & ; - rdf:type [ ] ? + { + ( $ rdf:type . * ; + rdf:type [ ] ? + ) +} + + CLOSED { + ( $ ( & ; + rdf:type [ ] ? ) ; - rdf:type [ ] + rdf:type [ ] ) } - CLOSED { - ( $ ( & ; - rdf:type [ ] ? ; - @linkml:String ? + CLOSED { + ( $ ( & ; + rdf:type [ ] ? ) ; - rdf:type [ ] + rdf:type [ ] ) } - { - ( $ rdf:type . * ; - rdf:type [ ] ? + CLOSED { + ( $ ( & ; + rdf:type [ ] ? + ) ; + rdf:type [ ] ) } - CLOSED { - ( $ ( & ; - rdf:type [ ] ? + CLOSED { + ( $ ( & ; + rdf:type [ ] ? ) ; - rdf:type [ ] + rdf:type [ ] ) } - ( + ( { - ( $ ( @linkml:String ? ; + ( $ ( @linkml:String ? ; schema1:name @linkml:String ? ) ; - rdf:type [ ] + rdf:type [ ] ) - } OR @ + } OR @ ) - ( + ( CLOSED { - ( $ ( & ; - rdf:type [ ] ? + ( $ ( & ; + rdf:type [ ] ? ) ; - rdf:type [ ] + rdf:type [ ] ) - } OR @ + } OR @ ) - CLOSED { - ( $ ( & ; - rdf:type [ ] ? + CLOSED { + ( $ ( & ; + rdf:type [ ] ? + ) ; + rdf:type [ ] + ) +} + + CLOSED { + ( $ ( & ; + rdf:type [ ] ? + ) ; + rdf:type [ ] + ) +} + + CLOSED { + ( $ ( & ; + rdf:type [ ] ? ) ; - rdf:type [ ] + rdf:type [ ] ) } - ( + ( CLOSED { - ( $ ( & ; - rdf:type [ ] ? ; - @linkml:String + ( $ ( & ; + rdf:type [ ] ? ; + @linkml:String ) ; - rdf:type [ ] + rdf:type [ ] ) - } OR @ OR @ OR @ OR @ OR @ OR @ + } OR @ OR @ OR + @ OR @ OR + @ OR @ OR + @ OR @ OR + @ OR @ OR + @ OR @ OR + @ OR @ OR + @ OR @ OR + @ OR @ ) - CLOSED { - ( $ ( @linkml:String ? ; - @linkml:String ? + CLOSED { + ( $ ( & ; + rdf:type [ ] ? ) ; - rdf:type [ ] ? + rdf:type [ ] ) } - ( + ( CLOSED { - ( $ ( & ; - rdf:type [ ] ? ; + ( $ ( & ; + rdf:type [ ] ? ; schema1:email @linkml:String ? ; schema1:birthDate @linkml:Date ? ; - @linkml:Integer ? ; - schema1:gender [ GSSO:000369 - ] ? ; - @linkml:String * + @linkml:Integer ? ; + schema1:gender [ GSSO:000369 + ] ? ; + @linkml:String * ) ; rdf:type [ schema1:Person ] ) - } OR @ + } OR @ OR @ ) - CLOSED { - ( $ ( & ; - rdf:type [ ] ? + CLOSED { + ( $ ( & ; + rdf:type [ ] ? + ) ; + rdf:type [ ] + ) +} + + CLOSED { + ( $ ( & ; + rdf:type [ ] ? + ) ; + rdf:type [ ] + ) +} + + CLOSED { + ( $ ( & ; + rdf:type [ ] ? + ) ; + rdf:type [ ] + ) +} + + CLOSED { + ( $ ( & ; + rdf:type [ ] ? + ) ; + rdf:type [ ] + ) +} + + CLOSED { + ( $ ( & ; + rdf:type [ ] ? + ) ; + rdf:type [ ] + ) +} + + CLOSED { + ( $ + @ * ; + rdf:type [ ] ? + ) +} + + CLOSED { + ( $ ( & ; + rdf:type [ ] ? + ) ; + rdf:type [ ] + ) +} + + CLOSED { + ( $ ( & ; + rdf:type [ ] ? ) ; - rdf:type [ ] + rdf:type [ ] ) } - ( + ( CLOSED { - ( $ ( & ; - rdf:type [ ] ? ; - schema1:email @linkml:String ? ; - schema1:birthDate @linkml:Date ? ; - @linkml:Integer ? ; - [ - ] ? + ( $ ( & ; + rdf:type [ ] ? ) ; - rdf:type [ ] + rdf:type [ ] ) - } OR @ + } OR @ ) - CLOSED { - ( $ @ * ; - rdf:type [ ] ? + CLOSED { + ( $ + @ * ; + rdf:type [ ] ? + ) +} + + CLOSED { + ( $ ( + & ; + rdf:type [ ] ? + ) ; + rdf:type [ ] + ) +} + + CLOSED { + ( $ ( + & ; + rdf:type [ ] ? + ) ; + rdf:type [ ] ) } - CLOSED { - ( $ ( & ; + CLOSED { + ( $ ( & ; rdf:type [ schema1:Person ] ? ) ; - rdf:type [ ] + rdf:type [ ] + ) +} + + CLOSED { + ( $ ( & ; + rdf:type [ ] ? + ) ; + rdf:type [ ] + ) +} + + CLOSED { + ( $ ( & ; + rdf:type [ ] ? + ) ; + rdf:type [ ] ) } diff --git a/project/sqlschema/hzb_metadata_schema.sql b/project/sqlschema/hzb_metadata_schema.sql index 4ad7fab..aaeda24 100644 --- a/project/sqlschema/hzb_metadata_schema.sql +++ b/project/sqlschema/hzb_metadata_schema.sql @@ -1,102 +1,202 @@ -- # Class: "chemical or drug or treatment" Description: "" -- * Slot: id Description: +-- # Class: "Entity" Description: "An entity is anything that exists or has existed or will exist. Model class for all things and informational relationships, real or imagined." +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- * Slot: name Description: A human-readable name for a thing +-- # Class: "NamedEntity" Description: "a databased entity or concept/class" +-- * Slot: name Description: A human-readable name for a thing +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "DataCite" Description: "A person (alive, dead, undead, or fictional)." +-- * Slot: name Description: A human-readable name for a thing +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier -- # Class: "Person" Description: "A person (alive, dead, undead, or fictional)." -- * Slot: primary_email Description: The main email address of a person -- * Slot: birth_date Description: Date on which a person is born -- * Slot: age_in_years Description: Number of years since birth -- * Slot: gender Description: +-- * Slot: name Description: A human-readable name for a thing +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "Project" Description: "lorem" +-- * Slot: name Description: A human-readable name for a thing +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "Device" Description: "A thing made or adapted for a particular purpose, especially a piece of mechanical or electronic equipment" +-- * Slot: name Description: A human-readable name for a thing -- * Slot: id Description: A unique identifier for a thing -- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "Sample" Description: "Information about a generic laboratory sample, discipline agnostic." -- * Slot: name Description: A human-readable name for a thing --- # Class: "Scientist" Description: "A scientist (alive, dead, undead, or fictional)." +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- * Slot: SampleCollection_id Description: Autocreated FK slot +-- # Class: "SampleCollection" Description: "A holder for Sample objects" +-- * Slot: id Description: +-- # Class: "Scientist" Description: "A person (alive, dead, undead, or fictional)." -- * Slot: primary_email Description: The main email address of a person -- * Slot: birth_date Description: Date on which a person is born -- * Slot: age_in_years Description: Number of years since birth -- * Slot: gender Description: +-- * Slot: name Description: A human-readable name for a thing -- * Slot: id Description: A unique identifier for a thing -- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "CatalysisSample" Description: "A person (alive, dead, undead, or fictional)." -- * Slot: name Description: A human-readable name for a thing --- # Class: "device" Description: "A thing made or adapted for a particular purpose, especially a piece of mechanical or electronic equipment" -- * Slot: id Description: A unique identifier for a thing -- * Slot: iri Description: Internationalized Resource Identifier +-- * Slot: CatalysisSampleCollection_id Description: Autocreated FK slot +-- # Class: "Catalyst" Description: "A person (alive, dead, undead, or fictional)." -- * Slot: name Description: A human-readable name for a thing --- # Class: "CatalysisSample" Description: "core parameters of a catalysis sample #metadata terms (parameters) are mapped to nfdi voc4cat" --- * Slot: sample_environment Description: --- * Slot: primary_email Description: The main email address of a person --- * Slot: birth_date Description: Date on which a person is born --- * Slot: age_in_years Description: Number of years since birth --- * Slot: vital_status Description: living or dead status -- * Slot: id Description: A unique identifier for a thing -- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "ThinFilmCatalyst" Description: "A person (alive, dead, undead, or fictional)." -- * Slot: name Description: A human-readable name for a thing --- # Class: "Sample" Description: "Represents a Sample" --- * Slot: primary_email Description: The main email address of a person --- * Slot: birth_date Description: Date on which a person is born --- * Slot: age_in_years Description: Number of years since birth --- * Slot: vital_status Description: living or dead status -- * Slot: id Description: A unique identifier for a thing -- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "PowderCatalyst" Description: "A person (alive, dead, undead, or fictional)." +-- * Slot: name Description: A human-readable name for a thing +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "Recipe" Description: "A person (alive, dead, undead, or fictional)." +-- * Slot: name Description: A human-readable name for a thing +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "Mixture" Description: "A person (alive, dead, undead, or fictional)." +-- * Slot: name Description: A human-readable name for a thing +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "Workflow" Description: "A person (alive, dead, undead, or fictional)." +-- * Slot: name Description: A human-readable name for a thing +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "Process" Description: "A person (alive, dead, undead, or fictional)." -- * Slot: name Description: A human-readable name for a thing --- * Slot: SampleCollection_id Description: Autocreated FK slot --- # Class: "SampleCollection" Description: "A holder for Sample objects" --- * Slot: id Description: --- # Class: "Experiment" Description: "something following a protocol?" -- * Slot: id Description: A unique identifier for a thing -- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "Experiment" Description: "A person (alive, dead, undead, or fictional)." -- * Slot: name Description: A human-readable name for a thing --- # Class: "Rockit_experiment" Description: "describing the standard setup for ROCK-IT beamline experiment. Sonal + Ana" -- * Slot: id Description: A unique identifier for a thing -- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "Measurement" Description: "A person (alive, dead, undead, or fictional)." -- * Slot: name Description: A human-readable name for a thing --- # Class: "BESSY" Description: "Sonal" -- * Slot: id Description: A unique identifier for a thing -- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "Parameter" Description: "A person (alive, dead, undead, or fictional)." -- * Slot: name Description: A human-readable name for a thing --- # Class: "Myspot_Beamline" Description: "Sonal" --- * Slot: type Description: -- * Slot: id Description: A unique identifier for a thing -- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "Reaction" Description: "A person (alive, dead, undead, or fictional)." -- * Slot: name Description: A human-readable name for a thing --- # Class: "Beamline" Description: "Sonal" --- * Slot: type Description: -- * Slot: id Description: A unique identifier for a thing -- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "ReactionProduct" Description: "A person (alive, dead, undead, or fictional)." -- * Slot: name Description: A human-readable name for a thing --- # Class: "BeamlineExperiment" Description: "Sonal" -- * Slot: id Description: A unique identifier for a thing -- * Slot: iri Description: Internationalized Resource Identifier +-- * Slot: ReactionProductCollection_id Description: Autocreated FK slot +-- # Class: "Reactor" Description: "A person (alive, dead, undead, or fictional)." -- * Slot: name Description: A human-readable name for a thing --- # Class: "Organization" Description: "" +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "CatalysisSampleCollection" Description: "A holder for CatalysisSample objects" -- * Slot: id Description: --- * Slot: name Description: --- * Slot: type Description: --- # Class: "Entity" Description: "An entity is anything that exists or has existed or will exist. Model class for all things and informational relationships, real or imagined." +-- # Class: "ReactionProductCollection" Description: "A holder for ReactionProduct objects" +-- * Slot: id Description: +-- # Class: "Beamline" Description: "A person (alive, dead, undead, or fictional)." +-- * Slot: name Description: A human-readable name for a thing +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "BeamlineExperiment" Description: "A person (alive, dead, undead, or fictional)." +-- * Slot: name Description: A human-readable name for a thing +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "BeamlineScientist" Description: "A person (alive, dead, undead, or fictional)." +-- * Slot: primary_email Description: The main email address of a person +-- * Slot: birth_date Description: Date on which a person is born +-- * Slot: age_in_years Description: Number of years since birth +-- * Slot: gender Description: +-- * Slot: name Description: A human-readable name for a thing +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "mySpot" Description: "A person (alive, dead, undead, or fictional)." +-- * Slot: name Description: A human-readable name for a thing +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "EMIL_Pink" Description: "A person (alive, dead, undead, or fictional)." +-- * Slot: name Description: A human-readable name for a thing +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "EMIL_OAESE" Description: "A person (alive, dead, undead, or fictional)." +-- * Slot: name Description: A human-readable name for a thing -- * Slot: id Description: A unique identifier for a thing -- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "SampleEnvironment" Description: "A person (alive, dead, undead, or fictional)." -- * Slot: name Description: A human-readable name for a thing --- # Class: "NamedThing" Description: "a databased entity or concept/class" -- * Slot: id Description: A unique identifier for a thing -- * Slot: iri Description: Internationalized Resource Identifier +-- # Class: "SamplePositioning" Description: "A person (alive, dead, undead, or fictional)." -- * Slot: name Description: A human-readable name for a thing +-- * Slot: id Description: A unique identifier for a thing +-- * Slot: iri Description: Internationalized Resource Identifier -- # Class: "Person_has_employment_history" Description: "" -- * Slot: Person_id Description: Autocreated FK slot -- * Slot: has_employment_history Description: -- # Class: "Scientist_has_employment_history" Description: "" -- * Slot: Scientist_id Description: Autocreated FK slot -- * Slot: has_employment_history Description: +-- # Class: "BeamlineScientist_has_employment_history" Description: "" +-- * Slot: BeamlineScientist_id Description: Autocreated FK slot +-- * Slot: has_employment_history Description: CREATE TABLE "chemical or drug or treatment" ( id INTEGER NOT NULL, PRIMARY KEY (id) ); +CREATE TABLE "Entity" ( + id TEXT NOT NULL, + iri TEXT, + name TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "NamedEntity" ( + name TEXT, + id TEXT NOT NULL, + iri TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "DataCite" ( + name TEXT, + id TEXT NOT NULL, + iri TEXT, + PRIMARY KEY (id) +); CREATE TABLE "Person" ( primary_email TEXT, birth_date DATE, age_in_years INTEGER, gender VARCHAR(9), + name TEXT, id TEXT NOT NULL, iri TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "Project" ( + name TEXT, + id TEXT NOT NULL, + iri TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "Device" ( name TEXT, + id TEXT NOT NULL, + iri TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "SampleCollection" ( + id INTEGER NOT NULL, PRIMARY KEY (id) ); CREATE TABLE "Scientist" ( @@ -104,100 +204,167 @@ CREATE TABLE "Scientist" ( birth_date DATE, age_in_years INTEGER, gender VARCHAR(9), + name TEXT, id TEXT NOT NULL, iri TEXT, - name TEXT, PRIMARY KEY (id) ); -CREATE TABLE device ( +CREATE TABLE "Catalyst" ( + name TEXT, id TEXT NOT NULL, iri TEXT, - name TEXT, PRIMARY KEY (id) ); -CREATE TABLE "CatalysisSample" ( - sample_environment TEXT, - primary_email TEXT, - birth_date DATE, - age_in_years INTEGER, - vital_status VARCHAR(7), +CREATE TABLE "ThinFilmCatalyst" ( + name TEXT, id TEXT NOT NULL, iri TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "PowderCatalyst" ( name TEXT, + id TEXT NOT NULL, + iri TEXT, PRIMARY KEY (id) ); -CREATE TABLE "SampleCollection" ( - id INTEGER NOT NULL, +CREATE TABLE "Recipe" ( + name TEXT, + id TEXT NOT NULL, + iri TEXT, PRIMARY KEY (id) ); -CREATE TABLE "Experiment" ( +CREATE TABLE "Mixture" ( + name TEXT, id TEXT NOT NULL, iri TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "Workflow" ( name TEXT, + id TEXT NOT NULL, + iri TEXT, PRIMARY KEY (id) ); -CREATE TABLE "Rockit_experiment" ( +CREATE TABLE "Process" ( + name TEXT, id TEXT NOT NULL, iri TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "Experiment" ( name TEXT, + id TEXT NOT NULL, + iri TEXT, PRIMARY KEY (id) ); -CREATE TABLE "BESSY" ( +CREATE TABLE "Measurement" ( + name TEXT, id TEXT NOT NULL, iri TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "Parameter" ( name TEXT, + id TEXT NOT NULL, + iri TEXT, PRIMARY KEY (id) ); -CREATE TABLE "Myspot_Beamline" ( - type TEXT, +CREATE TABLE "Reaction" ( + name TEXT, id TEXT NOT NULL, iri TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "Reactor" ( name TEXT, + id TEXT NOT NULL, + iri TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "CatalysisSampleCollection" ( + id INTEGER NOT NULL, + PRIMARY KEY (id) +); +CREATE TABLE "ReactionProductCollection" ( + id INTEGER NOT NULL, PRIMARY KEY (id) ); CREATE TABLE "Beamline" ( - type TEXT, + name TEXT, id TEXT NOT NULL, iri TEXT, - name TEXT, PRIMARY KEY (id) ); CREATE TABLE "BeamlineExperiment" ( + name TEXT, id TEXT NOT NULL, iri TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "BeamlineScientist" ( + primary_email TEXT, + birth_date DATE, + age_in_years INTEGER, + gender VARCHAR(9), name TEXT, + id TEXT NOT NULL, + iri TEXT, PRIMARY KEY (id) ); -CREATE TABLE "Organization" ( - id INTEGER NOT NULL, +CREATE TABLE "mySpot" ( name TEXT, - type TEXT, + id TEXT NOT NULL, + iri TEXT, PRIMARY KEY (id) ); -CREATE TABLE "Entity" ( +CREATE TABLE "EMIL_Pink" ( + name TEXT, id TEXT NOT NULL, iri TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "EMIL_OAESE" ( name TEXT, + id TEXT NOT NULL, + iri TEXT, PRIMARY KEY (id) ); -CREATE TABLE "NamedThing" ( +CREATE TABLE "SampleEnvironment" ( + name TEXT, id TEXT NOT NULL, iri TEXT, + PRIMARY KEY (id) +); +CREATE TABLE "SamplePositioning" ( name TEXT, + id TEXT NOT NULL, + iri TEXT, PRIMARY KEY (id) ); CREATE TABLE "Sample" ( - primary_email TEXT, - birth_date DATE, - age_in_years INTEGER, - vital_status VARCHAR(7), + name TEXT, id TEXT NOT NULL, iri TEXT, - name TEXT, "SampleCollection_id" INTEGER, PRIMARY KEY (id), FOREIGN KEY("SampleCollection_id") REFERENCES "SampleCollection" (id) ); +CREATE TABLE "CatalysisSample" ( + name TEXT, + id TEXT NOT NULL, + iri TEXT, + "CatalysisSampleCollection_id" INTEGER, + PRIMARY KEY (id), + FOREIGN KEY("CatalysisSampleCollection_id") REFERENCES "CatalysisSampleCollection" (id) +); +CREATE TABLE "ReactionProduct" ( + name TEXT, + id TEXT NOT NULL, + iri TEXT, + "ReactionProductCollection_id" INTEGER, + PRIMARY KEY (id), + FOREIGN KEY("ReactionProductCollection_id") REFERENCES "ReactionProductCollection" (id) +); CREATE TABLE "Person_has_employment_history" ( "Person_id" TEXT, has_employment_history TEXT, @@ -209,4 +376,10 @@ CREATE TABLE "Scientist_has_employment_history" ( has_employment_history TEXT, PRIMARY KEY ("Scientist_id", has_employment_history), FOREIGN KEY("Scientist_id") REFERENCES "Scientist" (id) +); +CREATE TABLE "BeamlineScientist_has_employment_history" ( + "BeamlineScientist_id" TEXT, + has_employment_history TEXT, + PRIMARY KEY ("BeamlineScientist_id", has_employment_history), + FOREIGN KEY("BeamlineScientist_id") REFERENCES "BeamlineScientist" (id) ); \ No newline at end of file diff --git a/src/hzb_metadata_schema/datamodel/hzb_metadata_schema.py b/src/hzb_metadata_schema/datamodel/hzb_metadata_schema.py index 50370ef..e061e9c 100644 --- a/src/hzb_metadata_schema/datamodel/hzb_metadata_schema.py +++ b/src/hzb_metadata_schema/datamodel/hzb_metadata_schema.py @@ -1,5 +1,5 @@ # Auto generated from hzb_metadata_schema.yaml by pythongen.py version: 0.0.1 -# Generation date: 2024-08-05T18:33:38 +# Generation date: 2024-09-27T16:18:29 # Schema: hzb-metadata-schema # # id: https://w3id.org/anak-velazquez/hzb-metadata-schema @@ -33,12 +33,8 @@ # Namespaces BFO = CurieNamespace('BFO', 'http://purl.obolibrary.org/obo/BFO_') -CHEBI = CurieNamespace('CHEBI', 'http://example.org/UNKNOWN/CHEBI/') -CHEMBL_COMPOUND = CurieNamespace('CHEMBL_COMPOUND', 'http://example.org/UNKNOWN/CHEMBL.COMPOUND/') GSSO = CurieNamespace('GSSO', 'http://purl.bioontology.org/ontology/GSSO/') -MAXO = CurieNamespace('MAXO', 'http://example.org/UNKNOWN/MAXO/') PATO = CurieNamespace('PATO', 'http://purl.obolibrary.org/obo/PATO_') -PUBCHEM_COMPOUND = CurieNamespace('PUBCHEM_COMPOUND', 'http://example.org/UNKNOWN/PUBCHEM.COMPOUND/') STY = CurieNamespace('STY', 'http://example.org/UNKNOWN/STY/') UMLSSG = CurieNamespace('UMLSSG', 'http://example.org/UNKNOWN/UMLSSG/') WIKIDATA = CurieNamespace('WIKIDATA', 'http://example.org/UNKNOWN/WIKIDATA/') @@ -67,23 +63,31 @@ class EntityId(URIorCURIE): pass -class NamedThingId(EntityId): +class NamedEntityId(EntityId): pass -class PersonId(NamedThingId): +class DataCiteId(NamedEntityId): pass -class ScientistId(PersonId): +class PersonId(NamedEntityId): + pass + + +class ProjectId(NamedEntityId): + pass + + +class DeviceId(NamedEntityId): pass -class DeviceId(NamedThingId): +class SampleId(NamedEntityId): pass -class SampleId(NamedThingId): +class ScientistId(PersonId): pass @@ -91,79 +95,97 @@ class CatalysisSampleId(SampleId): pass -class ExperimentId(NamedThingId): +class CatalystId(CatalysisSampleId): pass -class BESSYId(NamedThingId): +class ThinFilmCatalystId(CatalystId): pass -class BeamlineId(NamedThingId): +class PowderCatalystId(CatalystId): pass -class MyspotBeamlineId(BeamlineId): +class RecipeId(NamedEntityId): pass -class BeamlineExperimentId(ExperimentId): +class MixtureId(NamedEntityId): pass -class RockitExperimentId(BeamlineExperimentId): +class WorkflowId(NamedEntityId): pass -class ChemicalOrDrugOrTreatment(YAMLRoot): - _inherited_slots: ClassVar[List[str]] = [] +class ProcessId(NamedEntityId): + pass - class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["ChemicalOrDrugOrTreatment"] - class_class_curie: ClassVar[str] = "hzb_metadata_schema:ChemicalOrDrugOrTreatment" - class_name: ClassVar[str] = "chemical or drug or treatment" - class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.ChemicalOrDrugOrTreatment +class ExperimentId(NamedEntityId): + pass -@dataclass -class SampleCollection(YAMLRoot): - """ - A holder for Sample objects - """ - _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["SampleCollection"] - class_class_curie: ClassVar[str] = "hzb_metadata_schema:SampleCollection" - class_name: ClassVar[str] = "SampleCollection" - class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.SampleCollection +class MeasurementId(NamedEntityId): + pass - entries: Optional[Union[Dict[Union[str, SampleId], Union[dict, "Sample"]], List[Union[dict, "Sample"]]]] = empty_dict() - def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): - self._normalize_inlined_as_dict(slot_name="entries", slot_type=Sample, key_name="id", keyed=True) +class ParameterId(NamedEntityId): + pass - super().__post_init__(**kwargs) +class ReactionId(NamedEntityId): + pass -@dataclass -class Organization(YAMLRoot): - _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["Organization"] - class_class_curie: ClassVar[str] = "hzb_metadata_schema:Organization" - class_name: ClassVar[str] = "Organization" - class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Organization +class ReactionProductId(NamedEntityId): + pass - name: Optional[str] = None - type: Optional[str] = None - def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): - if self.name is not None and not isinstance(self.name, str): - self.name = str(self.name) +class ReactorId(NamedEntityId): + pass - self.type = str(self.class_name) - super().__post_init__(**kwargs) - self.unknown_type = str(self.class_name) +class BeamlineId(NamedEntityId): + pass + + +class BeamlineExperimentId(ExperimentId): + pass + + +class BeamlineScientistId(PersonId): + pass + + +class MySpotId(BeamlineId): + pass + + +class EMILPinkId(BeamlineId): + pass + + +class EMILOAESEId(BeamlineId): + pass + + +class SampleEnvironmentId(NamedEntityId): + pass + + +class SamplePositioningId(NamedEntityId): + pass + + +class ChemicalOrDrugOrTreatment(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["ChemicalOrDrugOrTreatment"] + class_class_curie: ClassVar[str] = "hzb_metadata_schema:ChemicalOrDrugOrTreatment" + class_name: ClassVar[str] = "chemical or drug or treatment" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.ChemicalOrDrugOrTreatment @dataclass @@ -174,8 +196,8 @@ class Entity(YAMLRoot): """ _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["Entity"] - class_class_curie: ClassVar[str] = "hzb_metadata_schema:Entity" + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/core/Entity") + class_class_curie: ClassVar[str] = None class_name: ClassVar[str] = "Entity" class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Entity @@ -199,36 +221,64 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): @dataclass -class NamedThing(Entity): +class NamedEntity(Entity): """ a databased entity or concept/class """ _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["NamedThing"] - class_class_curie: ClassVar[str] = "hzb_metadata_schema:NamedThing" - class_name: ClassVar[str] = "NamedThing" - class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.NamedThing + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/core/NamedEntity") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "NamedEntity" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.NamedEntity - id: Union[str, NamedThingId] = None + id: Union[str, NamedEntityId] = None category: str = None + name: Optional[str] = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): self.MissingRequiredField("id") - if not isinstance(self.id, NamedThingId): - self.id = NamedThingId(self.id) + if not isinstance(self.id, NamedEntityId): + self.id = NamedEntityId(self.id) if self._is_empty(self.category): self.MissingRequiredField("category") if not isinstance(self.category, str): self.category = str(self.category) + if self.name is not None and not isinstance(self.name, str): + self.name = str(self.name) + + super().__post_init__(**kwargs) + + +@dataclass +class DataCite(NamedEntity): + """ + A person (alive, dead, undead, or fictional). + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/core/DataCite") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "DataCite" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.DataCite + + id: Union[str, DataCiteId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, DataCiteId): + self.id = DataCiteId(self.id) + super().__post_init__(**kwargs) @dataclass -class Person(NamedThing): +class Person(NamedEntity): """ A person (alive, dead, undead, or fictional). """ @@ -273,39 +323,39 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): @dataclass -class Scientist(Person): +class Project(NamedEntity): """ - A scientist (alive, dead, undead, or fictional). + lorem """ _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["Scientist"] - class_class_curie: ClassVar[str] = "hzb_metadata_schema:Scientist" - class_name: ClassVar[str] = "Scientist" - class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Scientist + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/core/Project") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "Project" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Project - id: Union[str, ScientistId] = None + id: Union[str, ProjectId] = None category: str = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): self.MissingRequiredField("id") - if not isinstance(self.id, ScientistId): - self.id = ScientistId(self.id) + if not isinstance(self.id, ProjectId): + self.id = ProjectId(self.id) super().__post_init__(**kwargs) @dataclass -class Device(NamedThing): +class Device(NamedEntity): """ A thing made or adapted for a particular purpose, especially a piece of mechanical or electronic equipment """ _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["Device"] - class_class_curie: ClassVar[str] = "hzb_metadata_schema:Device" - class_name: ClassVar[str] = "device" + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/core/Device") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "Device" class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Device id: Union[str, DeviceId] = None @@ -321,23 +371,19 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): @dataclass -class Sample(NamedThing): +class Sample(NamedEntity): """ - Represents a Sample + Information about a generic laboratory sample, discipline agnostic. """ _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["Sample"] - class_class_curie: ClassVar[str] = "hzb_metadata_schema:Sample" + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/core/Sample") + class_class_curie: ClassVar[str] = None class_name: ClassVar[str] = "Sample" class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Sample id: Union[str, SampleId] = None category: str = None - primary_email: Optional[str] = None - birth_date: Optional[Union[str, XSDDate]] = None - age_in_years: Optional[int] = None - vital_status: Optional[Union[str, "PersonStatus"]] = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -345,17 +391,49 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.id, SampleId): self.id = SampleId(self.id) - if self.primary_email is not None and not isinstance(self.primary_email, str): - self.primary_email = str(self.primary_email) + super().__post_init__(**kwargs) - if self.birth_date is not None and not isinstance(self.birth_date, XSDDate): - self.birth_date = XSDDate(self.birth_date) - if self.age_in_years is not None and not isinstance(self.age_in_years, int): - self.age_in_years = int(self.age_in_years) +@dataclass +class SampleCollection(YAMLRoot): + """ + A holder for Sample objects + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/core/SampleCollection") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "SampleCollection" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.SampleCollection + + entries: Optional[Union[Dict[Union[str, SampleId], Union[dict, Sample]], List[Union[dict, Sample]]]] = empty_dict() + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + self._normalize_inlined_as_dict(slot_name="entries", slot_type=Sample, key_name="id", keyed=True) + + super().__post_init__(**kwargs) + + +@dataclass +class Scientist(Person): + """ + A person (alive, dead, undead, or fictional). + """ + _inherited_slots: ClassVar[List[str]] = [] - if self.vital_status is not None and not isinstance(self.vital_status, PersonStatus): - self.vital_status = PersonStatus(self.vital_status) + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/catlabs/Scientist") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "Scientist" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Scientist + + id: Union[str, ScientistId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ScientistId): + self.id = ScientistId(self.id) super().__post_init__(**kwargs) @@ -363,18 +441,17 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): @dataclass class CatalysisSample(Sample): """ - core parameters of a catalysis sample #metadata terms (parameters) are mapped to nfdi voc4cat + A person (alive, dead, undead, or fictional). """ _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["CatalysisSample"] - class_class_curie: ClassVar[str] = "hzb_metadata_schema:CatalysisSample" + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/catlabs/CatalysisSample") + class_class_curie: ClassVar[str] = None class_name: ClassVar[str] = "CatalysisSample" class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.CatalysisSample id: Union[str, CatalysisSampleId] = None category: str = None - sample_environment: Optional[str] = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -382,21 +459,186 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.id, CatalysisSampleId): self.id = CatalysisSampleId(self.id) - if self.sample_environment is not None and not isinstance(self.sample_environment, str): - self.sample_environment = str(self.sample_environment) + super().__post_init__(**kwargs) + + +@dataclass +class Catalyst(CatalysisSample): + """ + A person (alive, dead, undead, or fictional). + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/catlabs/Catalyst") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "Catalyst" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Catalyst + + id: Union[str, CatalystId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, CatalystId): + self.id = CatalystId(self.id) + + super().__post_init__(**kwargs) + + +@dataclass +class ThinFilmCatalyst(Catalyst): + """ + A person (alive, dead, undead, or fictional). + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/catlabs/ThinFilmCatalyst") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "ThinFilmCatalyst" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.ThinFilmCatalyst + + id: Union[str, ThinFilmCatalystId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ThinFilmCatalystId): + self.id = ThinFilmCatalystId(self.id) + + super().__post_init__(**kwargs) + + +@dataclass +class PowderCatalyst(Catalyst): + """ + A person (alive, dead, undead, or fictional). + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/catlabs/PowderCatalyst") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "PowderCatalyst" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.PowderCatalyst + + id: Union[str, PowderCatalystId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, PowderCatalystId): + self.id = PowderCatalystId(self.id) + + super().__post_init__(**kwargs) + + +@dataclass +class Recipe(NamedEntity): + """ + A person (alive, dead, undead, or fictional). + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/catlabs/Recipe") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "Recipe" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Recipe + + id: Union[str, RecipeId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, RecipeId): + self.id = RecipeId(self.id) + + super().__post_init__(**kwargs) + + +@dataclass +class Mixture(NamedEntity): + """ + A person (alive, dead, undead, or fictional). + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/catlabs/Mixture") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "Mixture" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Mixture + + id: Union[str, MixtureId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, MixtureId): + self.id = MixtureId(self.id) super().__post_init__(**kwargs) @dataclass -class Experiment(NamedThing): +class Workflow(NamedEntity): """ - something following a protocol? + A person (alive, dead, undead, or fictional). """ _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["Experiment"] - class_class_curie: ClassVar[str] = "hzb_metadata_schema:Experiment" + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/catlabs/Workflow") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "Workflow" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Workflow + + id: Union[str, WorkflowId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, WorkflowId): + self.id = WorkflowId(self.id) + + super().__post_init__(**kwargs) + + +@dataclass +class Process(NamedEntity): + """ + A person (alive, dead, undead, or fictional). + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/catlabs/Process") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "Process" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Process + + id: Union[str, ProcessId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ProcessId): + self.id = ProcessId(self.id) + + super().__post_init__(**kwargs) + + +@dataclass +class Experiment(NamedEntity): + """ + A person (alive, dead, undead, or fictional). + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/catlabs/Experiment") + class_class_curie: ClassVar[str] = None class_name: ClassVar[str] = "Experiment" class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Experiment @@ -413,108 +655,198 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): @dataclass -class BESSY(NamedThing): +class Measurement(NamedEntity): """ - Sonal + A person (alive, dead, undead, or fictional). """ _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["BESSY"] - class_class_curie: ClassVar[str] = "hzb_metadata_schema:BESSY" - class_name: ClassVar[str] = "BESSY" - class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.BESSY + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/catlabs/Measurement") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "Measurement" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Measurement - id: Union[str, BESSYId] = None + id: Union[str, MeasurementId] = None category: str = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): self.MissingRequiredField("id") - if not isinstance(self.id, BESSYId): - self.id = BESSYId(self.id) + if not isinstance(self.id, MeasurementId): + self.id = MeasurementId(self.id) super().__post_init__(**kwargs) @dataclass -class Beamline(NamedThing): +class Parameter(NamedEntity): """ - Sonal + A person (alive, dead, undead, or fictional). """ _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["Beamline"] - class_class_curie: ClassVar[str] = "hzb_metadata_schema:Beamline" - class_name: ClassVar[str] = "Beamline" - class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Beamline + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/catlabs/Parameter") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "Parameter" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Parameter - id: Union[str, BeamlineId] = None + id: Union[str, ParameterId] = None category: str = None - type: Optional[str] = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): self.MissingRequiredField("id") - if not isinstance(self.id, BeamlineId): - self.id = BeamlineId(self.id) + if not isinstance(self.id, ParameterId): + self.id = ParameterId(self.id) - self.type = str(self.class_name) + super().__post_init__(**kwargs) + + +@dataclass +class Reaction(NamedEntity): + """ + A person (alive, dead, undead, or fictional). + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/catlabs/Reaction") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "Reaction" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Reaction + + id: Union[str, ReactionId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ReactionId): + self.id = ReactionId(self.id) super().__post_init__(**kwargs) - self.unknown_type = str(self.class_name) - def __new__(cls, *args, **kwargs): +@dataclass +class ReactionProduct(NamedEntity): + """ + A person (alive, dead, undead, or fictional). + """ + _inherited_slots: ClassVar[List[str]] = [] - type_designator = "type" - 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) + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/catlabs/ReactionProduct") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "ReactionProduct" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.ReactionProduct + id: Union[str, ReactionProductId] = None + category: str = None - 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) + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, ReactionProductId): + self.id = ReactionProductId(self.id) + super().__post_init__(**kwargs) @dataclass -class MyspotBeamline(Beamline): +class Reactor(NamedEntity): """ - Sonal + A person (alive, dead, undead, or fictional). """ _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["MyspotBeamline"] - class_class_curie: ClassVar[str] = "hzb_metadata_schema:MyspotBeamline" - class_name: ClassVar[str] = "Myspot_Beamline" - class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.MyspotBeamline + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/catlabs/Reactor") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "Reactor" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Reactor - id: Union[str, MyspotBeamlineId] = None + id: Union[str, ReactorId] = None category: str = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): self.MissingRequiredField("id") - if not isinstance(self.id, MyspotBeamlineId): - self.id = MyspotBeamlineId(self.id) + if not isinstance(self.id, ReactorId): + self.id = ReactorId(self.id) + + super().__post_init__(**kwargs) + + +@dataclass +class CatalysisSampleCollection(YAMLRoot): + """ + A holder for CatalysisSample objects + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/catlabs/CatalysisSampleCollection") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "CatalysisSampleCollection" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.CatalysisSampleCollection + + entries: Optional[Union[Dict[Union[str, CatalysisSampleId], Union[dict, CatalysisSample]], List[Union[dict, CatalysisSample]]]] = empty_dict() + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + self._normalize_inlined_as_dict(slot_name="entries", slot_type=CatalysisSample, key_name="id", keyed=True) + + super().__post_init__(**kwargs) + + +@dataclass +class ReactionProductCollection(YAMLRoot): + """ + A holder for ReactionProduct objects + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/catlabs/ReactionProductCollection") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "ReactionProductCollection" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.ReactionProductCollection + + entries: Optional[Union[Dict[Union[str, ReactionProductId], Union[dict, ReactionProduct]], List[Union[dict, ReactionProduct]]]] = empty_dict() + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + self._normalize_inlined_as_dict(slot_name="entries", slot_type=ReactionProduct, key_name="id", keyed=True) + + super().__post_init__(**kwargs) + + +@dataclass +class Beamline(NamedEntity): + """ + A person (alive, dead, undead, or fictional). + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/BESSY/Beamline") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "Beamline" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.Beamline + + id: Union[str, BeamlineId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, BeamlineId): + self.id = BeamlineId(self.id) super().__post_init__(**kwargs) - self.unknown_type = str(self.class_name) @dataclass class BeamlineExperiment(Experiment): """ - Sonal + A person (alive, dead, undead, or fictional). """ _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["BeamlineExperiment"] - class_class_curie: ClassVar[str] = "hzb_metadata_schema:BeamlineExperiment" + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/BESSY/BeamlineExperiment") + class_class_curie: ClassVar[str] = None class_name: ClassVar[str] = "BeamlineExperiment" class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.BeamlineExperiment @@ -531,25 +863,145 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): @dataclass -class RockitExperiment(BeamlineExperiment): +class BeamlineScientist(Person): + """ + A person (alive, dead, undead, or fictional). + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/BESSY/BeamlineScientist") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "BeamlineScientist" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.BeamlineScientist + + id: Union[str, BeamlineScientistId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, BeamlineScientistId): + self.id = BeamlineScientistId(self.id) + + super().__post_init__(**kwargs) + + +@dataclass +class MySpot(Beamline): + """ + A person (alive, dead, undead, or fictional). + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/BESSY/MySpot") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "mySpot" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.MySpot + + id: Union[str, MySpotId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, MySpotId): + self.id = MySpotId(self.id) + + super().__post_init__(**kwargs) + + +@dataclass +class EMILPink(Beamline): """ - describing the standard setup for ROCK-IT beamline experiment. Sonal + Ana + A person (alive, dead, undead, or fictional). + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/BESSY/EMILPink") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "EMIL_Pink" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.EMILPink + + id: Union[str, EMILPinkId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, EMILPinkId): + self.id = EMILPinkId(self.id) + + super().__post_init__(**kwargs) + + +@dataclass +class EMILOAESE(Beamline): + """ + A person (alive, dead, undead, or fictional). + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/BESSY/EMILOAESE") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "EMIL_OAESE" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.EMILOAESE + + id: Union[str, EMILOAESEId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, EMILOAESEId): + self.id = EMILOAESEId(self.id) + + super().__post_init__(**kwargs) + + +@dataclass +class SampleEnvironment(NamedEntity): + """ + A person (alive, dead, undead, or fictional). + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/operandoCatalysis/SampleEnvironment") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "SampleEnvironment" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.SampleEnvironment + + id: Union[str, SampleEnvironmentId] = None + category: str = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, SampleEnvironmentId): + self.id = SampleEnvironmentId(self.id) + + super().__post_init__(**kwargs) + + +@dataclass +class SamplePositioning(NamedEntity): + """ + A person (alive, dead, undead, or fictional). """ _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA["RockitExperiment"] - class_class_curie: ClassVar[str] = "hzb_metadata_schema:RockitExperiment" - class_name: ClassVar[str] = "Rockit_experiment" - class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.RockitExperiment + class_class_uri: ClassVar[URIRef] = URIRef("https://w3id.org/anak-velazquez/operandoCatalysis/SamplePositioning") + class_class_curie: ClassVar[str] = None + class_name: ClassVar[str] = "SamplePositioning" + class_model_uri: ClassVar[URIRef] = HZB_METADATA_SCHEMA.SamplePositioning - id: Union[str, RockitExperimentId] = None + id: Union[str, SamplePositioningId] = None category: str = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): self.MissingRequiredField("id") - if not isinstance(self.id, RockitExperimentId): - self.id = RockitExperimentId(self.id) + if not isinstance(self.id, SamplePositioningId): + self.id = SamplePositioningId(self.id) super().__post_init__(**kwargs) @@ -597,10 +1049,10 @@ class slots: slots.id = Slot(uri=SCHEMA.identifier, name="id", curie=SCHEMA.curie('identifier'), model_uri=HZB_METADATA_SCHEMA.id, domain=None, range=URIRef) -slots.iri = Slot(uri=HZB_METADATA_SCHEMA.iri, name="iri", curie=HZB_METADATA_SCHEMA.curie('iri'), +slots.iri = Slot(uri="str(uriorcurie)", name="iri", curie=None, model_uri=HZB_METADATA_SCHEMA.iri, domain=None, range=Optional[str]) -slots.category = Slot(uri=HZB_METADATA_SCHEMA.category, name="category", curie=HZB_METADATA_SCHEMA.curie('category'), +slots.category = Slot(uri="str(uriorcurie)", name="category", curie=None, model_uri=HZB_METADATA_SCHEMA.category, domain=None, range=Optional[str]) slots.name = Slot(uri=SCHEMA.name, name="name", curie=SCHEMA.curie('name'), @@ -615,39 +1067,29 @@ class slots: slots.birth_date = Slot(uri=SCHEMA.birthDate, name="birth_date", curie=SCHEMA.curie('birthDate'), model_uri=HZB_METADATA_SCHEMA.birth_date, domain=None, range=Optional[Union[str, XSDDate]]) -slots.age_in_years = Slot(uri=HZB_METADATA_SCHEMA.age_in_years, name="age_in_years", curie=HZB_METADATA_SCHEMA.curie('age_in_years'), +slots.age_in_years = Slot(uri="str(uriorcurie)", name="age_in_years", curie=None, model_uri=HZB_METADATA_SCHEMA.age_in_years, domain=None, range=Optional[int]) -slots.vital_status = Slot(uri=HZB_METADATA_SCHEMA.vital_status, name="vital_status", curie=HZB_METADATA_SCHEMA.curie('vital_status'), +slots.vital_status = Slot(uri="str(uriorcurie)", name="vital_status", curie=None, model_uri=HZB_METADATA_SCHEMA.vital_status, domain=None, range=Optional[Union[str, "PersonStatus"]]) slots.gender = Slot(uri=SCHEMA.gender, name="gender", curie=SCHEMA.curie('gender'), model_uri=HZB_METADATA_SCHEMA.gender, domain=None, range=Optional[Union[str, "GenderEnum"]]) -slots.has_employment_history = Slot(uri=HZB_METADATA_SCHEMA.has_employment_history, name="has_employment_history", curie=HZB_METADATA_SCHEMA.curie('has_employment_history'), +slots.has_employment_history = Slot(uri="str(uriorcurie)", name="has_employment_history", curie=None, model_uri=HZB_METADATA_SCHEMA.has_employment_history, domain=None, range=Optional[Union[str, List[str]]]) -slots.current_address = Slot(uri=HZB_METADATA_SCHEMA.current_address, name="current_address", curie=HZB_METADATA_SCHEMA.curie('current_address'), +slots.current_address = Slot(uri="str(uriorcurie)", name="current_address", curie=None, model_uri=HZB_METADATA_SCHEMA.current_address, domain=None, range=Optional[str]) -slots.catalysisSample__sample_environment = Slot(uri=HZB_METADATA_SCHEMA.sample_environment, name="catalysisSample__sample_environment", curie=HZB_METADATA_SCHEMA.curie('sample_environment'), - model_uri=HZB_METADATA_SCHEMA.catalysisSample__sample_environment, domain=None, range=Optional[str]) - -slots.sampleCollection__entries = Slot(uri=HZB_METADATA_SCHEMA.entries, name="sampleCollection__entries", curie=HZB_METADATA_SCHEMA.curie('entries'), +slots.sampleCollection__entries = Slot(uri="str(uriorcurie)", name="sampleCollection__entries", curie=None, model_uri=HZB_METADATA_SCHEMA.sampleCollection__entries, domain=None, range=Optional[Union[Dict[Union[str, SampleId], Union[dict, Sample]], List[Union[dict, Sample]]]]) -slots.beamline__type = Slot(uri=HZB_METADATA_SCHEMA.type, name="beamline__type", curie=HZB_METADATA_SCHEMA.curie('type'), - model_uri=HZB_METADATA_SCHEMA.beamline__type, domain=None, range=Optional[str]) - -slots.organization__name = Slot(uri=HZB_METADATA_SCHEMA.name, name="organization__name", curie=HZB_METADATA_SCHEMA.curie('name'), - model_uri=HZB_METADATA_SCHEMA.organization__name, domain=None, range=Optional[str]) - -slots.organization__type = Slot(uri=HZB_METADATA_SCHEMA.type, name="organization__type", curie=HZB_METADATA_SCHEMA.curie('type'), - model_uri=HZB_METADATA_SCHEMA.organization__type, domain=None, range=Optional[str]) +slots.catalysisSampleCollection__entries = Slot(uri="str(uriorcurie)", name="catalysisSampleCollection__entries", curie=None, + model_uri=HZB_METADATA_SCHEMA.catalysisSampleCollection__entries, domain=None, range=Optional[Union[Dict[Union[str, CatalysisSampleId], Union[dict, CatalysisSample]], List[Union[dict, CatalysisSample]]]]) -slots.Sample_primary_email = Slot(uri=SCHEMA.email, name="Sample_primary_email", curie=SCHEMA.curie('email'), - model_uri=HZB_METADATA_SCHEMA.Sample_primary_email, domain=Sample, range=Optional[str], - pattern=re.compile(r'^\S+@[\S+\.]+\S+')) +slots.reactionProductCollection__entries = Slot(uri="str(uriorcurie)", name="reactionProductCollection__entries", curie=None, + model_uri=HZB_METADATA_SCHEMA.reactionProductCollection__entries, domain=None, range=Optional[Union[Dict[Union[str, ReactionProductId], Union[dict, ReactionProduct]], List[Union[dict, ReactionProduct]]]]) -slots.NamedThing_category = Slot(uri=HZB_METADATA_SCHEMA.category, name="NamedThing_category", curie=HZB_METADATA_SCHEMA.curie('category'), - model_uri=HZB_METADATA_SCHEMA.NamedThing_category, domain=NamedThing, range=str) \ No newline at end of file +slots.NamedEntity_category = Slot(uri="str(uriorcurie)", name="NamedEntity_category", curie=None, + model_uri=HZB_METADATA_SCHEMA.NamedEntity_category, domain=NamedEntity, range=str) \ No newline at end of file diff --git a/src/hzb_metadata_schema/enums/all-enums.yaml b/src/hzb_metadata_schema/enums/all-enums.yaml new file mode 100644 index 0000000..4c5dd41 --- /dev/null +++ b/src/hzb_metadata_schema/enums/all-enums.yaml @@ -0,0 +1,40 @@ +--- +id: https://w3id.org/anak-velazquez/hzb-metadata-schema +name: all-enums +title: all-enums for schema +description: |- + Enums for the (Meta)data schema HZB labs +license: MIT + +## ------------ +## ENUMERATIONS +## ------------ +enums: + #person status + PersonStatus: + permissible_values: + ALIVE: + description: the person is living + meaning: PATO:0001421 + DEAD: + description: the person is deceased + meaning: PATO:0001422 + UNKNOWN: + description: the vital status is not known + todos: + - map this to an ontology + + gender_enum: + permissible_values: + Woman: + description: identified as woman + meaning: GSSO:000369 + Masculine: + description: masculine + todos: + - map this to an ontology + Diverse: + description: other + todos: + - map this to an ontology + diff --git a/src/hzb_metadata_schema/schema/BESSY.yaml b/src/hzb_metadata_schema/schema/BESSY.yaml new file mode 100644 index 0000000..82002bb --- /dev/null +++ b/src/hzb_metadata_schema/schema/BESSY.yaml @@ -0,0 +1,110 @@ +--- +id: https://w3id.org/anak-velazquez/BESSY/ #this is a persitant ID- not working atm +name: BESSY + +description: |- + Here are the classes needed for catalysis labs. + + +prefixes: + linkml: https://w3id.org/linkml/ + biolink: https://w3id.org/biolink/ + schema: http://schema.org/ + PATO: http://purl.obolibrary.org/obo/PATO_ #broken links + ORCID: https://orcid.org/ + +imports: +- linkml:types +- core + +default_range: string + +classes: + +#####Beamline +#lorem ipsum + Beamline: + is_a: NamedEntity + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + + +#####BeamlineExperiment +#lorem ipsum + BeamlineExperiment: + is_a: Experiment + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + +#####BeamlineScientist +#lorem ipsum + BeamlineScientist: + is_a: Person + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + +######Experimental hall############## + +#####mySpot +#lorem ipsum + mySpot: + is_a: Beamline + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + +#####EMIL_Pink +#lorem ipsum + EMIL_Pink: + is_a: Beamline + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + + +#####EMIL_OAESE +#lorem ipsum + EMIL_OAESE: + is_a: Beamline + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being \ No newline at end of file diff --git a/src/hzb_metadata_schema/schema/matter/bessyII_mySpot.yaml b/src/hzb_metadata_schema/schema/bessyII_mySpot.yaml similarity index 100% rename from src/hzb_metadata_schema/schema/matter/bessyII_mySpot.yaml rename to src/hzb_metadata_schema/schema/bessyII_mySpot.yaml diff --git a/src/hzb_metadata_schema/schema/catlabs.yaml b/src/hzb_metadata_schema/schema/catlabs.yaml new file mode 100644 index 0000000..9771917 --- /dev/null +++ b/src/hzb_metadata_schema/schema/catlabs.yaml @@ -0,0 +1,274 @@ +--- +id: https://w3id.org/anak-velazquez/catlabs/ #this is a persitant ID- not working atm +name: catlabs + +description: |- + Here are the classes needed for catalysis labs. + + +prefixes: + linkml: https://w3id.org/linkml/ + biolink: https://w3id.org/biolink/ + schema: http://schema.org/ + PATO: http://purl.obolibrary.org/obo/PATO_ #broken links + ORCID: https://orcid.org/ + +imports: +- linkml:types +- core + +default_range: string + +classes: + +#####Scientist +#lorem ipsum + Scientist: + is_a: Person + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + + +#####CatalysisSample +#lorem ipsum + CatalysisSample: + is_a: Sample + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + + +#####Catalyst +#lorem ipsum + Catalyst: + is_a: CatalysisSample + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + + +#####ThinFilmCatalyst +#lorem ipsum + ThinFilmCatalyst: + is_a: Catalyst + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + + +#####PowderCatalyst +#lorem ipsum + PowderCatalyst: + is_a: Catalyst + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + + +#####Recipe +#lorem ipsum + Recipe: + is_a: NamedEntity + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + + +#####Mixture +#lorem ipsum + Mixture: + is_a: NamedEntity + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + + +#####Workflow +#lorem ipsum + Workflow: + is_a: NamedEntity + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + + +#####Process +#lorem ipsum + Process: + is_a: NamedEntity + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + + +#####Experiment +#lorem ipsum + Experiment: + is_a: NamedEntity + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + + +#####Measurement +#lorem ipsum + Measurement: + is_a: NamedEntity + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + + +#####Parameter +#lorem ipsum + Parameter: + is_a: NamedEntity + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + + +#####Reaction +#lorem ipsum + Reaction: + is_a: NamedEntity + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + + +#####ReactionProduct +#lorem ipsum + ReactionProduct: + is_a: NamedEntity + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + + +#####Reactor +#lorem ipsum + Reactor: + is_a: NamedEntity + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + + + + +############## +#Collections +############### + #CatalysisSample array + CatalysisSampleCollection: + tree_root: true + description: >- + A holder for CatalysisSample objects + attributes: + entries: + range: CatalysisSample + multivalued: true + inlined: true + + #ReactionProduct array + ReactionProductCollection: + tree_root: true + description: >- + A holder for ReactionProduct objects + attributes: + entries: + range: ReactionProduct + multivalued: true + inlined: true \ No newline at end of file diff --git a/src/hzb_metadata_schema/schema/core.yaml b/src/hzb_metadata_schema/schema/core.yaml new file mode 100644 index 0000000..b4bdf1c --- /dev/null +++ b/src/hzb_metadata_schema/schema/core.yaml @@ -0,0 +1,255 @@ +--- +id: https://w3id.org/anak-velazquez/core/ #this is a persitant ID- not working atm +name: core + +description: |- + Here are the classes needed for admin and citing purposes. DataCite. + + +prefixes: + linkml: https://w3id.org/linkml/ + biolink: https://w3id.org/biolink/ + schema: http://schema.org/ + PATO: http://purl.obolibrary.org/obo/PATO_ #broken links + ORCID: https://orcid.org/ + +imports: +- linkml:types + +default_range: string + +classes: + + ######### Root classes!!!###### + Entity: + description: >- + An entity is anything that exists or has existed or will exist. + Model class for all things and informational relationships, real or imagined. + abstract: true + slots: + - id + - iri + #- category + #- type # rdf:type + - name + #- description + #- has attribute + #- deprecated + # evidence code(s)? + exact_mappings: + - BFO:0000001 + + NamedEntity: + is_a: Entity + description: "a databased entity or concept/class" + slots: + #- provided by + #- xref + - name + #- synonym + slot_usage: + category: + required: true + exact_mappings: + - BFO:0000001 + - WIKIDATA:Q35120 + # UMLS Semantic Group "Objects" + - UMLSSG:OBJC + # Entity + - STY:T071 + - dcid:Thing +############################################################ + +#####DataCite +#lorem ipsum + DataCite: + is_a: NamedEntity + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + + +#####Person +#a basic/standard definition of a person, which later can be further defined as scientist, beam scientist, user, etc. + Person: + is_a: NamedEntity + description: >- + A person (alive, dead, undead, or fictional). + class_uri: schema:Person + mixins: + #- HasAliases + slots: + - primary_email + - birth_date + - age_in_years + - gender + - has_employment_history + #- has_familial_relationships + #- has_medical_history + aliases: + - human being + - individual + # structured_aliases: + # - literal_form: Homo sapiens + # alias_predicate: skos:exactMapping + # source: Linnaeus + # - literal_form: Persona + # alias_predicate: skos:exactMapping + # source: Google Translate + # in_language: es + + +#####Project +#lorem ipsum + Project: + is_a: NamedEntity + description: >- + lorem + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + + +#####Device +#lorem ipsum + Device: + is_a: NamedEntity + description: >- + A thing made or adapted for a particular purpose, especially + a piece of mechanical or electronic equipment + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + narrow_mappings: + # Devices + - UMLSSG:DEVI + # Medical Device + - STY:T074 + # Research Device + - STY:T075 + # Drug Delivery Device + - STY:T203 + # Biomedical or Dental Material + - STY:T122 + +#####Sample +#lorem ipsum + Sample: + is_a: NamedEntity + description: >- + Information about a generic laboratory sample, discipline agnostic. + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + + + #sample array + SampleCollection: + tree_root: true + description: >- + A holder for Sample objects + attributes: + entries: + range: Sample + multivalued: true + inlined: true + + + + + +## ------------ +## SLOTS +## ------------ +#data fields get their own section +#here relationship between nodes can be defined in the future. + +slots: + id: + identifier: true + slot_uri: schema:identifier + range: uriorcurie + description: A unique identifier for a thing + iri: + description: Internationalized Resource Identifier + category: + name: + slot_uri: schema:name + description: A human-readable name for a thing + description: + slot_uri: schema:description + description: A human-readable description for a thing + primary_email: + slot_uri: schema:email + description: The main email address of a person + birth_date: + slot_uri: schema:birthDate + range: date + description: Date on which a person is born + age_in_years: + range: integer + description: Number of years since birth + vital_status: + range: PersonStatus + description: living or dead status + gender: + slot_uri: schema:gender + range: gender_enum + has_employment_history: + # range: EmploymentEvent + multivalued: true + inlined_as_list: true + current_address: + # range: Address + + + +## ------------ +## ENUMERATIONS +## ------------ +enums: + #person status + PersonStatus: + permissible_values: + ALIVE: + description: the person is living + meaning: PATO:0001421 + DEAD: + description: the person is deceased + meaning: PATO:0001422 + UNKNOWN: + description: the vital status is not known + todos: + - map this to an ontology + + gender_enum: + permissible_values: + Woman: + description: identified as woman + meaning: GSSO:000369 + Masculine: + description: masculine + todos: + - map this to an ontology + Diverse: + description: other + todos: + - map this to an ontology \ No newline at end of file diff --git a/src/hzb_metadata_schema/schema/energy/Sample.yaml b/src/hzb_metadata_schema/schema/energy/Sample.yaml deleted file mode 100644 index 265513b..0000000 --- a/src/hzb_metadata_schema/schema/energy/Sample.yaml +++ /dev/null @@ -1,65 +0,0 @@ - -classes: - Sample: - is_a: NamedThing - description: >- - Sample identifier metadata - slots: - - identifier_ELN - - ELN_name - - age_in_years - - vital_status - slot_usage: - primary_email: - pattern: "^\\S+@[\\S+\\.]+\\S+" - - SampleCollection: - tree_root: true - description: >- - A holder for Sample objects - attributes: - entries: - range: Sample - multivalued: true - inlined: true - -slots: - id: - identifier: true - slot_uri: schema:identifier - range: uriorcurie - description: A unique identifier for a thing - name: - slot_uri: schema:name - description: A human-readable name for a thing - description: - slot_uri: schema:description - description: A human-readable description for a thing - primary_email: - slot_uri: schema:email - description: The main email address of a person - birth_date: - slot_uri: schema:birthDate - range: date - description: Date on which a person is born - age_in_years: - range: integer - description: Number of years since birth - vital_status: - range: PersonStatus - description: living or dead status - -enums: - PersonStatus: - permissible_values: - ALIVE: - description: the person is living - meaning: PATO:0001421 - DEAD: - description: the person is deceased - meaning: PATO:0001422 - UNKNOWN: - description: the vital status is not known - todos: - - map this to an ontology -#comment \ No newline at end of file diff --git a/src/hzb_metadata_schema/schema/energy/catalysisCore.yaml b/src/hzb_metadata_schema/schema/energy/catalysisCore.yaml deleted file mode 100644 index 14c54a2..0000000 --- a/src/hzb_metadata_schema/schema/energy/catalysisCore.yaml +++ /dev/null @@ -1,97 +0,0 @@ ---- -id: https://w3id.org/anak-velazquez/hzb-metadata-schema -name: hzb-metadata-schema -title: hzb-metadata-schema -description: |- - (Meta)data schema HZB labs -license: MIT -see_also: - - https://anak-velazquez.github.io/hzb-metadata-schema - -prefixes: - hzb_metadata_schema: https://w3id.org/anak-velazquez/hzb-metadata-schema/ - linkml: https://w3id.org/linkml/ - biolink: https://w3id.org/biolink/ - schema: http://schema.org/ - PATO: http://purl.obolibrary.org/obo/PATO_ - example: https://example.org/ -default_prefix: hzb_metadata_schema -default_range: string - -imports: - - linkml:types - -classes: - - NamedThing: - description: >- - A generic grouping for any identifiable entity - slots: - - id - - name - - description - class_uri: schema:Thing - - Sample: - is_a: NamedThing - description: >- - Represents a Sample - slots: - - primary_email - - birth_date - - age_in_years - - vital_status - slot_usage: - primary_email: - pattern: "^\\S+@[\\S+\\.]+\\S+" - - SampleCollection: - tree_root: true - description: >- - A holder for Sample objects - attributes: - entries: - range: Sample - multivalued: true - inlined: true - -slots: - id: - identifier: true - slot_uri: schema:identifier - range: uriorcurie - description: A unique identifier for a thing - name: - slot_uri: schema:name - description: A human-readable name for a thing - description: - slot_uri: schema:description - description: A human-readable description for a thing - primary_email: - slot_uri: schema:email - description: The main email address of a person - birth_date: - slot_uri: schema:birthDate - range: date - description: Date on which a person is born - age_in_years: - range: integer - description: Number of years since birth - vital_status: - range: PersonStatus - description: living or dead status - -enums: - PersonStatus: - permissible_values: - ALIVE: - description: the person is living - meaning: PATO:0001421 - DEAD: - description: the person is deceased - meaning: PATO:0001422 - UNKNOWN: - description: the vital status is not known - todos: - - map this to an ontology -#comment \ No newline at end of file diff --git a/src/hzb_metadata_schema/schema/hzb_metadata_schema.yaml b/src/hzb_metadata_schema/schema/hzb_metadata_schema.yaml index ee2f052..40faf89 100644 --- a/src/hzb_metadata_schema/schema/hzb_metadata_schema.yaml +++ b/src/hzb_metadata_schema/schema/hzb_metadata_schema.yaml @@ -1,7 +1,7 @@ --- id: https://w3id.org/anak-velazquez/hzb-metadata-schema -name: hzb-metadata-schema -title: hzb-metadata-schema +name: hzb-operando-catalysis-metadata-schema +title: hzb-operando-catalysis-metadata-schema description: |- (Meta)data schema HZB labs license: MIT @@ -36,265 +36,17 @@ default_prefix: hzb_metadata_schema default_range: string ## ------------ -## CLASSES +## Imports and types ## ------------ -classes: - #Chemical - chemical or drug or treatment: - mixin: true - id_prefixes: - - PUBCHEM.COMPOUND - - CHEMBL.COMPOUND - - CHEBI - - MAXO - - #a basic/standard definition of a person, which later can be further defined as scientist, beam scientist, user, etc. - Person: - is_a: NamedThing - description: >- - A person (alive, dead, undead, or fictional). - class_uri: schema:Person - mixins: - #- HasAliases - slots: - - primary_email - - birth_date - - age_in_years - - gender - - has_employment_history - #- has_familial_relationships - #- has_medical_history - aliases: - - human being - - individual - # structured_aliases: - # - literal_form: Homo sapiens - # alias_predicate: skos:exactMapping - # source: Linnaeus - # - literal_form: Persona - # alias_predicate: skos:exactMapping - # source: Google Translate - # in_language: es - - #Scientist - Scientist: - is_a: Person - description: >- - A scientist (alive, dead, undead, or fictional). - - #Device - device: - is_a: NamedThing - description: >- - A thing made or adapted for a particular purpose, especially - a piece of mechanical or electronic equipment - narrow_mappings: - # Devices - - UMLSSG:DEVI - # Medical Device - - STY:T074 - # Research Device - - STY:T075 - # Drug Delivery Device - - STY:T203 - # Biomedical or Dental Material - - STY:T122 - - #Catalysis Sample Core - CatalysisSample: - is_a: Sample - description: >- - core parameters of a catalysis sample #metadata terms (parameters) are mapped to nfdi voc4cat - - attributes: - sample_environment: - #range: sample_environment - # GasComposition: - # description: Describe gas composition - # range: string - # GasSystem: - # description: Describe various flow meter and calibration permissible_values - # range: GasSystemData - - #Sample - Sample: - is_a: NamedThing - description: >- - Represents a Sample - slots: - - primary_email - - birth_date - - age_in_years - - vital_status - slot_usage: - primary_email: - pattern: "^\\S+@[\\S+\\.]+\\S+" +imports: #[linkml:types, test] - #sample array - SampleCollection: - tree_root: true - description: >- - A holder for Sample objects - attributes: - entries: - range: Sample - multivalued: true - inlined: true - - #Experiment - Experiment: - is_a: NamedThing - description: >- - something following a protocol? - - - - ##### Operando, ROCKIT ############# - - #Experiment - Rockit_experiment: - is_a: BeamlineExperiment - description: >- - describing the standard setup for ROCK-IT beamline experiment. - Sonal + Ana - - - ##### MATTER ############# - - #Experimental hall - BESSY: - is_a: NamedThing - description: >- - Sonal - # attributes: - # beamlines: - # range: Beamline - # multivalued: true - # inlined: true - - - #Myspot Beamline - Myspot_Beamline: - is_a: Beamline - description: >- - Sonal - - #Beamline - Beamline: - is_a: NamedThing - description: >- - Sonal - attributes: - type: - designates_type: true - range: string - - - #Beamline Experiment - BeamlineExperiment: - is_a: Experiment - description: >- - Sonal - - #beamline user/scientist - - Organization: - attributes: - name: - type: - designates_type: true - range: string - - ## Main classes!!! - Entity: - description: >- - An entity is anything that exists or has existed or will exist. - Model class for all things and informational relationships, real or imagined. - abstract: true - slots: - - id - - iri - #- category - #- type # rdf:type - - name - #- description - #- has attribute - #- deprecated - # evidence code(s)? - exact_mappings: - - BFO:0000001 - - NamedThing: - is_a: Entity - description: "a databased entity or concept/class" - slots: - #- provided by - #- xref - #- full name - #- synonym - slot_usage: - category: - required: true - exact_mappings: - - BFO:0000001 - - WIKIDATA:Q35120 - # UMLS Semantic Group "Objects" - - UMLSSG:OBJC - # Entity - - STY:T071 - - dcid:Thing - - - -## ------------ -## SLOTS -## ------------ -#data fields get their own section -#here relationship between nodes can be defined in the future. - -slots: - id: - identifier: true - slot_uri: schema:identifier - range: uriorcurie - description: A unique identifier for a thing - iri: - description: Internationalized Resource Identifier - category: - name: - slot_uri: schema:name - description: A human-readable name for a thing - description: - slot_uri: schema:description - description: A human-readable description for a thing - primary_email: - slot_uri: schema:email - description: The main email address of a person - birth_date: - slot_uri: schema:birthDate - range: date - description: Date on which a person is born - age_in_years: - range: integer - description: Number of years since birth - vital_status: - range: PersonStatus - description: living or dead status - gender: - slot_uri: schema:gender - range: gender_enum - has_employment_history: - # range: EmploymentEvent - multivalued: true - inlined_as_list: true - current_address: - # range: Address - -## ------------ -## TYPES -## ------------ -imports: - linkml:types + - core + - catlabs + - BESSY + - operandoCatalysis + + #- ../enums/all-enums #this does not work yet, gotta fix it! #optional: schema type extensions types: @@ -309,37 +61,19 @@ types: ## ------------ -## ENUMERATIONS +## CLASSES ## ------------ -enums: - #person status - PersonStatus: - permissible_values: - ALIVE: - description: the person is living - meaning: PATO:0001421 - DEAD: - description: the person is deceased - meaning: PATO:0001422 - UNKNOWN: - description: the vital status is not known - todos: - - map this to an ontology - - gender_enum: - permissible_values: - Woman: - description: identified as woman - meaning: GSSO:000369 - Masculine: - description: masculine - todos: - - map this to an ontology - Diverse: - description: other - todos: - - map this to an ontology +classes: + #Chemical + chemical or drug or treatment: + mixin: true + id_prefixes: + #- PUBCHEM.COMPOUND + #- CHEMBL.COMPOUND + #- CHEBI + #- MAXO + #comment #... \ No newline at end of file diff --git a/src/hzb_metadata_schema/schema/operandoCatalysis.yaml b/src/hzb_metadata_schema/schema/operandoCatalysis.yaml new file mode 100644 index 0000000..afa0c08 --- /dev/null +++ b/src/hzb_metadata_schema/schema/operandoCatalysis.yaml @@ -0,0 +1,51 @@ +--- +id: https://w3id.org/anak-velazquez/operandoCatalysis/ #this is a persitant ID- not working atm +name: operandoCatalysis + +description: |- + Here are the classes needed for catalysis labs. + + +prefixes: + linkml: https://w3id.org/linkml/ + biolink: https://w3id.org/biolink/ + schema: http://schema.org/ + PATO: http://purl.obolibrary.org/obo/PATO_ #broken links + ORCID: https://orcid.org/ + +imports: +- linkml:types +- core + +default_range: string + +classes: + +#####SampleEnvironment +#lorem ipsum + SampleEnvironment: + is_a: NamedEntity + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being + + +#####SamplePositioning +#lorem ipsum + SamplePositioning: + is_a: NamedEntity + description: >- + A person (alive, dead, undead, or fictional). + class_uri: + mixins: + #- HasAliases + slots: + # - id + aliases: + # - human being diff --git a/src/hzb_metadata_schema/schema/person.yaml b/src/hzb_metadata_schema/schema/person.yaml deleted file mode 100644 index f73579e..0000000 --- a/src/hzb_metadata_schema/schema/person.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -id: https://w3id.org/anak-velazquez/hzb-metadata-schema #this is a persitant ID- not working atm -name: person -description: |- - Information about (people) users, based on [schema.org](http://schema.org) - -prefixes: - hzb_metadata_schema: https://w3id.org/anak-velazquez/hzb-metadata-schema/ - linkml: https://w3id.org/linkml/ - biolink: https://w3id.org/biolink/ - schema: http://schema.org/ - PATO: http://purl.obolibrary.org/obo/PATO_ #broken links - ORCID: https://orcid.org/ - -default_prefix: hzb_metadata_schema -default_range: string - -imports: - - linkml:types - -classes: - Person: - class_uri: schema:Person # check here:https://schema.org/Person - slots: ## specified as a list - - id - - givenName - - familyName - #- full_name - - affiliation #organization - - email - - aliases - - phone - - hasOccupation #@type:Role https://schema.org/Occupation - id_prefixes: - - ORCID - Container: - attributes: - persons: - multivalued: true - inlined_as_list: true - range: Person - -# slots are first-class entities in the metamodel -# declaring them here allows them to be reused elsewhere -slots: - id: - identifier: true - full_name: - required: true - description: - name of the person - slot_uri: schema:name - aliases: - multivalued: true - description: - other names for the person - phone: - pattern: "^[\\d\\(\\)\\-]+$" - slot_uri: schema:telephone - age: - range: integer - minimum_value: 0 - maximum_value: 200 \ No newline at end of file From ff0bd4c0ef6507e5343aa3efa2d976b5feb44161 Mon Sep 17 00:00:00 2001 From: Ana Velazquez Date: Mon, 30 Sep 2024 15:28:16 +0200 Subject: [PATCH 3/3] updating readme --- README.md | 69 ++----------------- .../schema/hzb_metadata_schema.yaml | 4 +- 2 files changed, 8 insertions(+), 65 deletions(-) diff --git a/README.md b/README.md index fb4f5ef..e5f3daa 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,14 @@ -# operando catalysis (meta)data schema +# HZB (meta)data schema: operando catalysis (Meta)data schema for operando catalysis: A datamodel for describing entities and their semantic associations (vocabularies/ontologies) for scientific (particularly catalytic) data at HZB, particularly for operando and in situ characterization of catalytic materials. At the moment, this schema is organized into 2 separate modules: -* energy definitions (lab-based) -* matter definitions (synchrotron-based) +* catlabs definitions (catalysis lab-based) +* BESSY definitions (synchrotron-based) +* operandoCatalysis definitions (catalysis + synchrotron-based) +* core (common) -# Basic content for our yml schema definitions: -* names, identifiers, and metadata - * id – the unique identifier for the schema, as a IRI - * name – the schema name. Use only alphanumeric characters, underscores, and dashes - * description – a summary of the schema. Can include markdown formatting - * license – CC0 recommended (I put MIT just to have something now, has to be changed) -* modules - * imports – allows for modular development. See imports -* prefix management - * prefixes – A map of prefixes. See prefixes - * default_prefixes – The prefix used for all elements in this schema - * default_curi_maps – prefix maps from prefixcommons -* other - * default_range – The default range for all slots - -See also uris-and-mappings: https://linkml.io/linkml/schemas/models.html - -# Mappings to: +### Mappings to: * voc4cat * Chemical Entities Mixtures and Reactions Ontological Framework * NeXus definitions?? - @@ -57,45 +42,3 @@ Use the `make` command to generate project artefacts: This project was made with [linkml-project-cookiecutter](https://github.com/linkml/linkml-project-cookiecutter). - - - - -# Conventions and notes -ATM following the same conventions a Biolink. In Biolink Model YAML any class, slot, or type is defined in `sentence case` form. When this model is compiled to various forms (like JSON-Schema, OWL, Markdown) the representation is based on the following convention: - -- classes are named in `CamelCase` form -- slots are named in `snake_case` form -- types are named in `snake_case` form - -At a glance the structure is as follows, -- Classes - - - Entities - - Associations - - Mixins -- Slots - - Predicates - - Node Properties - - Edge Properties -- Types - -A `class` represents an entity or an association. A class can have one more `slots` (properties). Within the Biolink Model there are two hierarchies of classes: `Named Things` and `Associations`; Named Things are disjoint from Associations. They do share a common ancestor class: `entity`. - -`Named Things`: classes that represent real world entities such as genes, diseases, chemical substances, etc. In a graph serialization, 'Named Things' are represented by nodes in a graph. Each class in the named thing has one or more slots (properties). The root of the "Named Things" hierarchy is the biolink:NamedThing class. - -`Associations`: classes that represent an assertion or statement. In RDF sense, an association is an `rdf:Statement`. In a graph formalism, associations are represented using edges in a graph. In general, Associations have three main properties (or slots): subject: the subject of the association; predicate: the predicate or relationship between the subject and the object of the association; object: the object of the association These three properties (or slots) define what Biolink calls a "core triple". - -A `slot` is similar to `rdf:Property` where it can link: i) an instance of a class to another instance of a class; ii) an instance of a class to a literal/data type. slot_usage slot can be used to specify how a particular slot ought to be used in a class. - -The `mixin:true` setting is used to extend the properties (or slots) of a class, without changing its position in the class hierarchy. Mixins can be extremely helpful in a number of ways: 1) to generalize a set of attributes that can apply to classes in different parts of the class hierarchy, 2) reduce duplication of shared attributes between classes that do not inherit from one another. - -The `aliases` slot can be used to define a list of aliases for a Model class (or slot). This is useful for adding synonymous names to your class (or slot). - - -The `slot_uri` slot can be used to define a canonical URI that is the true representation for that particular slot. That is, the value of slot_uri can be used interchangeably with the slot being defined. - -`id_prefixes` slot can be used to define a list of valid ID prefixes that instances of this class ought to have as part of their CURIE. The order of the list matters since its a prioritized list with the ID prefix with the highest priority appearing at the top of the list. - -Please check more details here: https://github.com/biolink/biolink-model/blob/master/src/docs/understanding-the-model.md - diff --git a/src/hzb_metadata_schema/schema/hzb_metadata_schema.yaml b/src/hzb_metadata_schema/schema/hzb_metadata_schema.yaml index 40faf89..63955b2 100644 --- a/src/hzb_metadata_schema/schema/hzb_metadata_schema.yaml +++ b/src/hzb_metadata_schema/schema/hzb_metadata_schema.yaml @@ -1,7 +1,7 @@ --- id: https://w3id.org/anak-velazquez/hzb-metadata-schema -name: hzb-operando-catalysis-metadata-schema -title: hzb-operando-catalysis-metadata-schema +name: hzb-metadata-schema +title: hzb-metadata-schema description: |- (Meta)data schema HZB labs license: MIT