diff --git a/Makefile b/Makefile index be57b05..215ba04 100644 --- a/Makefile +++ b/Makefile @@ -133,7 +133,8 @@ ifneq ($(strip ${GEN_TS_ARGS}),) $(RUN) gen-typescript ${GEN_TS_ARGS} $(SOURCE_SCHEMA_PATH) >${DEST}/typescript/${SCHEMA_NAME}.ts endif -test: test-schema test-python test-examples +test: test-validate test-examples test-python +.PHONY: test test-validate test-examples test-python test-schema: $(RUN) gen-project ${CONFIG_YAML} -d tmp $(SOURCE_SCHEMA_PATH) @@ -151,6 +152,9 @@ else $(info Ok) endif +test-validate: + $(RUN) linkml-validate -s $(SOURCE_SCHEMA_PATH) src/data/examples/*.yaml + convert-examples-to-%: $(patsubst %, $(RUN) linkml-convert % -s $(SOURCE_SCHEMA_PATH) -C Person, $(shell ${SHELL} find src/data/examples -name "*.yaml")) @@ -169,7 +173,7 @@ examples/output: src/oscem_schemas/schema/oscem_schemas.yaml --output-formats json \ --output-formats yaml \ --counter-example-input-directory src/data/examples/invalid \ - --input-directory src/data/examples/valid \ + --input-directory src/data/examples \ --output-directory $@ \ --schema $< > $@/README.md diff --git a/README.md b/README.md index 4534458..7319ac5 100644 --- a/README.md +++ b/README.md @@ -32,10 +32,16 @@ Schema for the Open Standards Community for Electron Microscopy (OSC-EM) ## Developer Documentation
-Use the `make` command to generate project artefacts: +Use the `make` command to generate project artifacts: +* `make setup`: one-time setup * `make all`: make everything * `make deploy`: deploys site +* `make lint`: check syntax +* `make test`: run tests +* `make serve`: run docs locally on http://127.0.0.1:8000/oscem-schemas/ +* `make clean` : remove generated files +
## Credits diff --git a/project/excel/oscem_schemas.xlsx b/project/excel/oscem_schemas.xlsx index da7f3db..7c3a7bf 100644 Binary files a/project/excel/oscem_schemas.xlsx and b/project/excel/oscem_schemas.xlsx differ diff --git a/project/graphql/oscem_schemas.graphql b/project/graphql/oscem_schemas.graphql index a6be4a8..121cd1f 100644 --- a/project/graphql/oscem_schemas.graphql +++ b/project/graphql/oscem_schemas.graphql @@ -14,7 +14,7 @@ type Acquisition dosePerMovie: Float! energyFilter: EnergyFilter imageSize: ImageSize - datetime: Datetime! + datetime: Any! exposureTime: Float cryogen: String framesPerMovie: Integer @@ -30,11 +30,15 @@ type Acquisition gainrefFlipRotate: String } +type Any + { + } + type Author { firstName: String workStatus: Boolean - institution: [Institution]! + institution: Institution! orcid: String! country: String! role: String @@ -54,7 +58,7 @@ type BoundingBox2D type ChromaticAberrationCorrector { used: Boolean! - type: String! + instrumentType: String! } type EMDataset @@ -131,7 +135,7 @@ type Ligand type Molecule { nameMol: String! - type: String! + molecularType: String! molecularClass: MoleculeClassEnum! sequence: String! naturalSource: String! @@ -143,7 +147,7 @@ type Molecule type OverallMolecule { - type: String! + molecularType: String! nameSample: String! source: String! molecularWeight: Float @@ -161,7 +165,7 @@ type Person type Phaseplate { used: Boolean! - type: String! + instrumentType: String! } type QuantityValue @@ -216,7 +220,7 @@ type Specimen type SphericalAberrationCorrector { used: Boolean! - type: String! + instrumentType: String! } type TiltAngle diff --git a/project/jsonld/oscem_schemas.context.jsonld b/project/jsonld/oscem_schemas.context.jsonld index f2ffddf..c96f0c2 100644 --- a/project/jsonld/oscem_schemas.context.jsonld +++ b/project/jsonld/oscem_schemas.context.jsonld @@ -1,7 +1,7 @@ { "comments": { "description": "Auto generated by LinkML jsonld context generator", - "generation_date": "2024-08-22T23:22:33", + "generation_date": "2024-08-23T00:59:03", "source": "oscem_schemas.yaml" }, "@context": { @@ -89,7 +89,7 @@ "@id": "https://w3id.org/osc-em/instrument/cs" }, "datetime": { - "@type": "xsd:dateTime", + "@type": "@id", "@id": "acquisition:datetime" }, "detector": { @@ -219,8 +219,8 @@ "@type": "@id", "@id": "instrument" }, - "type": { - "@id": "sample:/type" + "instrument_type": { + "@id": "acquisition:instrument_type" }, "ligands": { "@type": "@id", @@ -261,6 +261,9 @@ }, "@id": "sample:/molecular_class" }, + "molecular_type": { + "@id": "sample:/molecular_type" + }, "molecular_weight": { "@type": "xsd:float", "@id": "sample:/molecular_weight" @@ -442,6 +445,9 @@ "Acquisition": { "@id": "acquisition:Acquisition" }, + "Any": { + "@id": "linkml:Any" + }, "Author": { "@id": "https://w3id.org/osc-em/organizational/Author" }, diff --git a/project/jsonld/oscem_schemas.jsonld b/project/jsonld/oscem_schemas.jsonld index ace6a48..02a354c 100644 --- a/project/jsonld/oscem_schemas.jsonld +++ b/project/jsonld/oscem_schemas.jsonld @@ -676,7 +676,18 @@ "domain_of": [ "Acquisition" ], - "range": "datetime", + "range": "Any", + "inlined": true, + "any_of": [ + { + "range": "datetime", + "@type": "AnonymousSlotExpression" + }, + { + "range": "date", + "@type": "AnonymousSlotExpression" + } + ], "@type": "SlotDefinition" }, { @@ -803,8 +814,7 @@ "definition_uri": "https://w3id.org/osc-em/acquisitioninstrument_type", "description": "Details of a given specialist instrument", "from_schema": "https://w3id.org/osc-em/acquisition", - "slot_uri": "https://w3id.org/osc-em/acquisitiontype", - "alias": "type", + "slot_uri": "https://w3id.org/osc-em/acquisitioninstrument_type", "owner": "ChromaticAberrationCorrector", "domain_of": [ "Phaseplate", @@ -1093,7 +1103,7 @@ { "name": "institution", "definition_uri": "https://w3id.org/osc-em/organizational/institution", - "description": "institution", + "description": "author's institution", "from_schema": "https://w3id.org/osc-em/organizational", "mappings": [ "http://schema.org/Organization" @@ -1104,7 +1114,6 @@ "Author" ], "range": "Institution", - "multivalued": true, "inlined": true, "@type": "SlotDefinition" }, @@ -1285,8 +1294,7 @@ "description": "Description of the overall supramolecular type, i.e., a complex", "title": "Type", "from_schema": "https://w3id.org/osc-em/sample", - "slot_uri": "https://w3id.org/osc-em/sample/type", - "alias": "type", + "slot_uri": "https://w3id.org/osc-em/sample/molecular_type", "owner": "Molecule", "domain_of": [ "OverallMolecule", @@ -2160,8 +2168,19 @@ ], "is_usage_slot": true, "usage_slot_name": "datetime", - "range": "datetime", + "range": "Any", "required": true, + "inlined": true, + "any_of": [ + { + "range": "datetime", + "@type": "AnonymousSlotExpression" + }, + { + "range": "date", + "@type": "AnonymousSlotExpression" + } + ], "@type": "SlotDefinition" }, { @@ -2266,8 +2285,8 @@ "from_schema": "https://w3id.org/osc-em/acquisition", "is_a": "instrument_type", "domain": "Phaseplate", - "slot_uri": "https://w3id.org/osc-em/acquisitiontype", - "alias": "type", + "slot_uri": "https://w3id.org/osc-em/acquisitioninstrument_type", + "alias": "instrument_type", "owner": "Phaseplate", "domain_of": [ "Phaseplate" @@ -2304,8 +2323,8 @@ "from_schema": "https://w3id.org/osc-em/acquisition", "is_a": "instrument_type", "domain": "SphericalAberrationCorrector", - "slot_uri": "https://w3id.org/osc-em/acquisitiontype", - "alias": "type", + "slot_uri": "https://w3id.org/osc-em/acquisitioninstrument_type", + "alias": "instrument_type", "owner": "SphericalAberrationCorrector", "domain_of": [ "SphericalAberrationCorrector" @@ -2342,8 +2361,8 @@ "from_schema": "https://w3id.org/osc-em/acquisition", "is_a": "instrument_type", "domain": "ChromaticAberrationCorrector", - "slot_uri": "https://w3id.org/osc-em/acquisitiontype", - "alias": "type", + "slot_uri": "https://w3id.org/osc-em/acquisitioninstrument_type", + "alias": "instrument_type", "owner": "ChromaticAberrationCorrector", "domain_of": [ "ChromaticAberrationCorrector" @@ -2558,7 +2577,7 @@ { "name": "Author_institution", "definition_uri": "https://w3id.org/osc-em/organizational/institution", - "description": "institution", + "description": "author's institution", "from_schema": "https://w3id.org/osc-em/organizational", "mappings": [ "http://schema.org/Organization" @@ -2575,7 +2594,6 @@ "usage_slot_name": "institution", "range": "Institution", "required": true, - "multivalued": true, "inlined": true, "@type": "SlotDefinition" }, @@ -2627,8 +2645,8 @@ "from_schema": "https://w3id.org/osc-em/sample", "is_a": "molecular_type", "domain": "OverallMolecule", - "slot_uri": "https://w3id.org/osc-em/sample/type", - "alias": "type", + "slot_uri": "https://w3id.org/osc-em/sample/molecular_type", + "alias": "molecular_type", "owner": "OverallMolecule", "domain_of": [ "OverallMolecule" @@ -2726,8 +2744,8 @@ "from_schema": "https://w3id.org/osc-em/sample", "is_a": "molecular_type", "domain": "Molecule", - "slot_uri": "https://w3id.org/osc-em/sample/type", - "alias": "type", + "slot_uri": "https://w3id.org/osc-em/sample/molecular_type", + "alias": "molecular_type", "owner": "Molecule", "domain_of": [ "Molecule" @@ -3761,6 +3779,18 @@ "class_uri": "https://w3id.org/osc-em/tomography/TiltAngle", "@type": "ClassDefinition" }, + { + "name": "Any", + "definition_uri": "https://w3id.org/osc-em/types/Any", + "description": "Any type, used as the base for type-narrowing.\n\nSee https://linkml.io/linkml/schemas/advanced.html", + "from_schema": "https://w3id.org/osc-em/types", + "mappings": [ + "linkml:Any" + ], + "slot_usage": {}, + "class_uri": "https://w3id.org/linkml/Any", + "@type": "ClassDefinition" + }, { "name": "Range", "definition_uri": "https://w3id.org/osc-em/types/Range", @@ -3822,7 +3852,7 @@ "source_file": "oscem_schemas.yaml", "source_file_date": "2024-08-22T23:20:17", "source_file_size": 1401, - "generation_date": "2024-08-22T23:22:33", + "generation_date": "2024-08-23T00:59:03", "@type": "SchemaDefinition", "@context": [ "project/jsonld/oscem_schemas.context.jsonld", diff --git a/project/jsonschema/oscem_schemas.schema.json b/project/jsonschema/oscem_schemas.schema.json index f3e679f..b2926a6 100644 --- a/project/jsonschema/oscem_schemas.schema.json +++ b/project/jsonschema/oscem_schemas.schema.json @@ -63,9 +63,18 @@ ] }, "datetime": { - "description": "Time and date of the data acquisition", - "format": "date-time", - "type": "string" + "$ref": "#/$defs/Any", + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } + ], + "description": "Time and date of the data acquisition" }, "detector": { "description": "Make and model of the detector used", @@ -226,6 +235,18 @@ "title": "Acquisition", "type": "object" }, + "Any": { + "additionalProperties": true, + "description": "Any type, used as the base for type-narrowing.\n\nSee https://linkml.io/linkml/schemas/advanced.html", + "title": "Any", + "type": [ + "null", + "boolean", + "object", + "number", + "string" + ] + }, "Author": { "additionalProperties": false, "description": "", @@ -247,11 +268,8 @@ ] }, "institution": { - "description": "institution", - "items": { - "$ref": "#/$defs/Institution" - }, - "type": "array" + "$ref": "#/$defs/Institution", + "description": "author's institution" }, "name": { "description": "name", @@ -331,7 +349,7 @@ "additionalProperties": false, "description": "", "properties": { - "type": { + "instrument_type": { "description": "Details of a given specialist instrument", "type": "string" }, @@ -342,7 +360,7 @@ }, "required": [ "used", - "type" + "instrument_type" ], "title": "ChromaticAberrationCorrector", "type": "object" @@ -695,6 +713,10 @@ "$ref": "#/$defs/MoleculeClassEnum", "description": "Class of the molecule" }, + "molecular_type": { + "description": "Description of the overall supramolecular type, i.e., a complex", + "type": "string" + }, "name_mol": { "description": "Name of an individual molecule (often protein) in the sample", "type": "string" @@ -714,15 +736,11 @@ "taxonomy_id_source": { "description": "Taxonomy ID of the natural source organism", "type": "string" - }, - "type": { - "description": "Description of the overall supramolecular type, i.e., a complex", - "type": "string" } }, "required": [ "name_mol", - "type", + "molecular_type", "molecular_class", "sequence", "natural_source", @@ -759,6 +777,10 @@ "additionalProperties": false, "description": "A class representing the overall molecule", "properties": { + "molecular_type": { + "description": "Description of the overall supramolecular type, i.e., a complex", + "type": "string" + }, "molecular_weight": { "description": "Molecular weight in Da", "type": [ @@ -773,14 +795,10 @@ "source": { "description": "Where the sample was taken from, i.e., natural host, recombinantly expressed, etc.", "type": "string" - }, - "type": { - "description": "Description of the overall supramolecular type, i.e., a complex", - "type": "string" } }, "required": [ - "type", + "molecular_type", "name_sample", "source" ], @@ -835,7 +853,7 @@ "additionalProperties": false, "description": "", "properties": { - "type": { + "instrument_type": { "description": "Type of phaseplate", "type": "string" }, @@ -846,7 +864,7 @@ }, "required": [ "used", - "type" + "instrument_type" ], "title": "Phaseplate", "type": "object" @@ -1087,7 +1105,7 @@ "additionalProperties": false, "description": "", "properties": { - "type": { + "instrument_type": { "description": "Details of a given specialist instrument", "type": "string" }, @@ -1098,7 +1116,7 @@ }, "required": [ "used", - "type" + "instrument_type" ], "title": "SphericalAberrationCorrector", "type": "object" diff --git a/project/owl/oscem_schemas.owl.ttl b/project/owl/oscem_schemas.owl.ttl index dc4fdb0..7979c31 100644 --- a/project/owl/oscem_schemas.owl.ttl +++ b/project/owl/oscem_schemas.owl.ttl @@ -17,44 +17,44 @@ linkml:ClassDefinition ; rdfs:label "EMDataset" ; rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom ; + owl:onProperty ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; owl:allValuesFrom ; owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom ; - owl:onProperty ], + owl:minCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom ; - owl:onProperty ], + owl:maxCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom ; owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:allValuesFrom ; owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], + owl:allValuesFrom ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom ; - owl:onProperty ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ] ; + owl:onProperty ] ; skos:definition "OSC-EM Metadata for a dataset" ; skos:inScheme . @@ -99,260 +99,255 @@ linkml:ClassDefinition ; rdfs:label "Acquisition" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom ; - owl:onProperty ], + owl:allValuesFrom linkml:String ; + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], + owl:allValuesFrom linkml:Float ; + owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], + owl:minCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], + owl:allValuesFrom linkml:Integer ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Float ; + owl:minCardinality 0 ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], + owl:minCardinality 0 ; + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom ; + owl:minCardinality 0 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:minCardinality 0 ; owl:onProperty ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom ; - owl:onProperty ], + owl:allValuesFrom linkml:Integer ; + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom ; - owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:datetime ; - owl:onProperty ], + owl:minCardinality 0 ; + owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], + owl:allValuesFrom linkml:Integer ; + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], + owl:minCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], + owl:allValuesFrom ; + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ], + owl:minCardinality 0 ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty ], + owl:allValuesFrom linkml:Integer ; + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom ; - owl:onProperty ], + owl:maxCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], + owl:maxCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], + owl:allValuesFrom linkml:Float ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom ; + owl:maxCardinality 1 ; owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], + owl:allValuesFrom ; + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Float ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ], + owl:allValuesFrom linkml:Float ; + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty ], + owl:minCardinality 0 ; + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ], + owl:allValuesFrom ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], + owl:allValuesFrom ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], + owl:allValuesFrom linkml:String ; + owl:onProperty ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Float ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], + owl:allValuesFrom ; + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty ], + owl:maxCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom ; + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom [ owl:intersectionOf ( [ a rdfs:Datatype ; + owl:unionOf ( linkml:datetime linkml:Date ) ] ) ] ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom ; - owl:onProperty ], + owl:maxCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom ; owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty ], + owl:maxCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty ], + owl:minCardinality 0 ; + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty ], + owl:minCardinality 0 ; + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ], + owl:allValuesFrom linkml:Integer ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Float ; - owl:onProperty ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], + owl:minCardinality 0 ; + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom ; - owl:onProperty ] ; + owl:allValuesFrom linkml:Float ; + owl:onProperty ] ; skos:inScheme . a owl:Class, linkml:ClassDefinition ; rdfs:label "ChromaticAberrationCorrector" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; @@ -363,13 +358,28 @@ owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ] ; + owl:onProperty ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty ] ; skos:inScheme . a owl:Class, linkml:ClassDefinition ; rdfs:label "EnergyFilter" ; rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty ], + [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; owl:onProperty ], [ a owl:Restriction ; @@ -377,25 +387,16 @@ owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty ] ; + owl:maxCardinality 1 ; + owl:onProperty ] ; skos:inScheme . a owl:Class, @@ -403,21 +404,21 @@ rdfs:label "Phaseplate" ; rdfs:subClassOf [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:String ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ], + owl:maxCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:maxCardinality 1 ; owl:onProperty ] ; skos:inScheme . @@ -426,30 +427,30 @@ rdfs:label "SpecialistOptics" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom ; owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom ; - owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom ; owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom ; owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty ] ; skos:inScheme . @@ -457,91 +458,91 @@ linkml:ClassDefinition ; rdfs:label "SphericalAberrationCorrector" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty ], + owl:allValuesFrom linkml:String ; + owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ] ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty ] ; skos:inScheme . a owl:Class, linkml:ClassDefinition ; rdfs:label "Instrument" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty ], + owl:allValuesFrom linkml:Integer ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:minCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty ], + owl:minCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Float ; - owl:onProperty ], + owl:minCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Float ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty ], + owl:onProperty ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:maxCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], + owl:allValuesFrom linkml:String ; + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty ] ; + owl:allValuesFrom linkml:String ; + owl:onProperty ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ] ; skos:definition "Instrument values, mostly constant across a data collection." ; skos:inScheme . @@ -549,38 +550,44 @@ linkml:ClassDefinition ; rdfs:label "Author" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; owl:allValuesFrom owl:Thing ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom owl:Thing ; - owl:onProperty ], + owl:allValuesFrom linkml:String ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ], + owl:minCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom ; - owl:onProperty ], + owl:maxCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ], @@ -588,26 +595,23 @@ owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty ], + owl:allValuesFrom linkml:String ; + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom owl:Thing ; - owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ], + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom owl:Thing ; + owl:onProperty ], ; skos:inScheme . @@ -615,59 +619,59 @@ linkml:ClassDefinition ; rdfs:label "Grant" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ], + [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:Date ; owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], + owl:allValuesFrom linkml:String ; + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:Date ; owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], + owl:maxCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom ; - owl:onProperty ] ; + owl:allValuesFrom linkml:String ; + owl:onProperty ] ; skos:definition "Grant" ; skos:exactMatch ; skos:inScheme . @@ -679,21 +683,21 @@ rdfs:subClassOf [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom ; owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ] ; + owl:onProperty ] ; skos:definition "A class representing an organization" ; skos:inScheme . @@ -701,8 +705,23 @@ linkml:ClassDefinition ; rdfs:label "Person" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom [ a rdfs:Datatype ; + owl:intersectionOf ( linkml:String [ a rdfs:Datatype ; + owl:onDatatype xsd:string ; + owl:withRestrictions ( [ xsd:pattern "^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$" ] ) ] ) ] ; + owl:onProperty ], + [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ], @@ -712,41 +731,26 @@ [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom [ a rdfs:Datatype ; - owl:intersectionOf ( linkml:String [ a rdfs:Datatype ; - owl:onDatatype xsd:string ; - owl:withRestrictions ( [ xsd:pattern "^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$" ] ) ] ) ] ; - owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:minCardinality 0 ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:String ; owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:String ; owl:onProperty ] ; skos:exactMatch ; skos:inScheme . @@ -755,14 +759,11 @@ linkml:ClassDefinition ; rdfs:label "QuantityValue" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; owl:allValuesFrom linkml:Double ; owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], + owl:maxCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty ], @@ -771,18 +772,14 @@ owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ] ; + owl:onProperty ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ] ; skos:definition "Value together with unit" ; skos:exactMatch ; skos:inScheme . - a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "institution" ; - rdfs:range ; - skos:definition "institution" ; - skos:inScheme . - a owl:Class, ; rdfs:label "Antibiotic" ; @@ -844,104 +841,104 @@ rdfs:label "Grid" ; dcterms:title "Grid" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], + owl:allValuesFrom linkml:Float ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:Float ; + owl:onProperty ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Float ; - owl:onProperty ], + owl:allValuesFrom linkml:String ; + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], + owl:minCardinality 0 ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ], + owl:minCardinality 0 ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:minCardinality 0 ; owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Float ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty ], + owl:onProperty ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], + owl:allValuesFrom linkml:Float ; + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:minCardinality 0 ; owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty ], + owl:minCardinality 0 ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Float ; - owl:onProperty ] ; + owl:allValuesFrom linkml:String ; + owl:onProperty ] ; skos:definition "A class representing a grid" ; skos:inScheme . @@ -950,32 +947,32 @@ rdfs:label "Ligand" ; dcterms:title "Ligand" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], + owl:maxCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], + owl:minCardinality 0 ; + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:minCardinality 0 ; owl:onProperty ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:String ; owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty ], + owl:allValuesFrom linkml:String ; + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ] ; + owl:maxCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty ] ; skos:definition "A class representing a ligand" ; skos:inScheme . @@ -984,86 +981,86 @@ rdfs:label "Molecule" ; dcterms:title "Molecule" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty ], + owl:allValuesFrom ; + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:maxCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty ], + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], + owl:allValuesFrom linkml:String ; + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty ], + owl:allValuesFrom linkml:String ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ], + owl:minCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom ; - owl:onProperty ], + owl:minCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ] ; + owl:minCardinality 1 ; + owl:onProperty ] ; skos:definition "A class representing a molecule" ; skos:inScheme . @@ -1072,41 +1069,41 @@ rdfs:label "OverallMolecule" ; dcterms:title "OverallMolecule" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], + owl:maxCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Float ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:String ; owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:minCardinality 1 ; owl:onProperty ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ] ; + owl:allValuesFrom linkml:Float ; + owl:onProperty ] ; skos:definition "A class representing the overall molecule" ; skos:inScheme . @@ -1115,25 +1112,25 @@ rdfs:label "Sample" ; dcterms:title "Sample" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom ; - owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom ; + owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom ; owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:minCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom ; owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom ; @@ -1142,17 +1139,17 @@ owl:minCardinality 0 ; owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty ], + owl:maxCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom ; owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom ; - owl:onProperty ], + owl:minCardinality 0 ; + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom ; - owl:onProperty ] ; + owl:allValuesFrom ; + owl:onProperty ] ; skos:definition "A class representing a sample" ; skos:inScheme . @@ -1161,95 +1158,95 @@ rdfs:label "Specimen" ; dcterms:title "Specimen" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Float ; - owl:onProperty ], - [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:Float ; owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty ], + owl:minCardinality 0 ; + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty ], + owl:allValuesFrom linkml:String ; + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Float ; - owl:onProperty ], + owl:maxCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Float ; owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:maxCardinality 1 ; owl:onProperty ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ], + owl:minCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty ], + owl:minCardinality 0 ; + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; + owl:minCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], + owl:minCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:maxCardinality 1 ; owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Float ; owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ] ; + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Float ; + owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Float ; + owl:onProperty ] ; skos:definition "A class representing a specimen" ; skos:inScheme . @@ -1269,26 +1266,35 @@ skos:definition "List of molecule associated with the sample" ; skos:inScheme . + a owl:Class, + linkml:ClassDefinition ; + rdfs:label "Any" ; + skos:definition """Any type, used as the base for type-narrowing. + +See https://linkml.io/linkml/schemas/advanced.html""" ; + skos:exactMatch linkml:Any ; + skos:inScheme . + a owl:Class, linkml:ClassDefinition ; rdfs:label "ImageSize" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; + owl:maxCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; - owl:onProperty ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:Integer ; owl:onProperty ] ; skos:definition "size of a 2D image (in integer units)" ; skos:inScheme . @@ -1352,7 +1358,8 @@ a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "datetime" ; - rdfs:range linkml:datetime ; + rdfs:range [ owl:intersectionOf ( [ a rdfs:Datatype ; + owl:unionOf ( linkml:datetime linkml:Date ) ] ) ] ; skos:definition "Time and date of the data acquisition" ; skos:inScheme . @@ -1620,6 +1627,13 @@ skos:definition "Value" ; skos:inScheme . + a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "institution" ; + rdfs:range ; + skos:definition "author's institution" ; + skos:inScheme . + a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "name_org" ; @@ -2087,48 +2101,47 @@ dcterms:title "Type" ; rdfs:range linkml:String ; skos:definition "Description of the overall supramolecular type, i.e., a complex" ; - skos:inScheme ; - skos:prefLabel "type" . + skos:inScheme . a owl:Class, linkml:ClassDefinition ; rdfs:label "BoundingBox2D" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:Float ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Float ; - owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:Float ; owl:onProperty ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Float ; + owl:onProperty ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:Float ; - owl:onProperty ] ; + owl:onProperty ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ] ; skos:definition "an axis-aligned 2D bounding box (float units)" ; skos:inScheme . @@ -2143,23 +2156,23 @@ linkml:ClassDefinition ; rdfs:label "Range" ; rdfs:subClassOf [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ], + [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Float ; + owl:maxCardinality 1 ; owl:onProperty ], [ a owl:Restriction ; owl:allValuesFrom linkml:Float ; owl:onProperty ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:Float ; owl:onProperty ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ] ; + owl:minCardinality 0 ; + owl:onProperty ] ; skos:definition "A range constructed from min and max" ; skos:inScheme . @@ -2168,8 +2181,7 @@ rdfs:label "instrument_type" ; rdfs:range linkml:String ; skos:definition "Details of a given specialist instrument" ; - skos:inScheme ; - skos:prefLabel "type" . + skos:inScheme . a owl:Class, linkml:EnumDefinition ; diff --git a/project/prefixmap/oscem_schemas.yaml b/project/prefixmap/oscem_schemas.yaml index 6e69cec..88da68c 100644 --- a/project/prefixmap/oscem_schemas.yaml +++ b/project/prefixmap/oscem_schemas.yaml @@ -8,6 +8,9 @@ "Acquisition": { "@id": "acquisition:Acquisition" }, + "Any": { + "@id": "linkml:Any" + }, "Author": { "@id": "https://w3id.org/osc-em/organizational/Author" }, diff --git a/project/protobuf/oscem_schemas.proto b/project/protobuf/oscem_schemas.proto index dbca04e..16149f6 100644 --- a/project/protobuf/oscem_schemas.proto +++ b/project/protobuf/oscem_schemas.proto @@ -16,7 +16,7 @@ message Acquisition float dosePerMovie = 0 energyFilter energyFilter = 0 imageSize imageSize = 0 - datetime datetime = 0 + any datetime = 0 float exposureTime = 0 string cryogen = 0 integer framesPerMovie = 0 @@ -35,7 +35,7 @@ message Author { string firstName = 0 boolean workStatus = 0 - repeated institution institution = 0 + institution institution = 0 string orcid = 0 string country = 0 string role = 0 @@ -54,7 +54,7 @@ message BoundingBox2D message ChromaticAberrationCorrector { boolean used = 0 - string type = 0 + string instrumentType = 0 } // OSC-EM Metadata for a dataset message EMDataset @@ -130,7 +130,7 @@ message Ligand message Molecule { string nameMol = 0 - string type = 0 + string molecularType = 0 moleculeClassEnum molecularClass = 0 string sequence = 0 string naturalSource = 0 @@ -142,7 +142,7 @@ message Molecule // A class representing the overall molecule message OverallMolecule { - string type = 0 + string molecularType = 0 string nameSample = 0 string source = 0 float molecularWeight = 0 @@ -158,7 +158,7 @@ message Person message Phaseplate { boolean used = 0 - string type = 0 + string instrumentType = 0 } // Value together with unit message QuantityValue @@ -211,7 +211,7 @@ message Specimen message SphericalAberrationCorrector { boolean used = 0 - string type = 0 + string instrumentType = 0 } // The min, max and increment of the tilt angle in a tomography session. Unit is degree. message TiltAngle diff --git a/project/shacl/oscem_schemas.shacl.ttl b/project/shacl/oscem_schemas.shacl.ttl index 900f3ab..05a4339 100644 --- a/project/shacl/oscem_schemas.shacl.ttl +++ b/project/shacl/oscem_schemas.shacl.ttl @@ -1,20 +1,22 @@ +@prefix linkml: . @prefix rdf: . @prefix rdfs: . @prefix sh: . @prefix xsd: . +linkml:Any a sh:NodeShape ; + sh:closed true ; + sh:description """Any type, used as the base for type-narrowing. + +See https://linkml.io/linkml/schemas/advanced.html""" ; + sh:ignoredProperties ( rdf:type ) ; + sh:targetClass linkml:Any . + a sh:NodeShape ; sh:closed true ; sh:description "OSC-EM Metadata for a dataset" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class ; - sh:description "List of grants associated with the project" ; - sh:minCount 1 ; - sh:name "Grants" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 3 ; - sh:path ], - [ sh:class ; + sh:property [ sh:class ; sh:description "Sample information" ; sh:maxCount 1 ; sh:minCount 1 ; @@ -22,14 +24,21 @@ sh:nodeKind sh:BlankNodeOrIRI ; sh:order 2 ; sh:path ], - [ sh:class ; - sh:description "Describe the instrument used to acquire the data" ; + [ sh:class ; + sh:description "Describe the data acquisition parameters" ; sh:maxCount 1 ; sh:minCount 1 ; - sh:name "Instrument" ; + sh:name "Acquisition" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 1 ; - sh:path ], + sh:order 0 ; + sh:path ], + [ sh:class ; + sh:description "List of grants associated with the project" ; + sh:minCount 1 ; + sh:name "Grants" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 3 ; + sh:path ], [ sh:class ; sh:description "List of authors associated with the project" ; sh:minCount 1 ; @@ -37,14 +46,14 @@ sh:nodeKind sh:BlankNodeOrIRI ; sh:order 4 ; sh:path ], - [ sh:class ; - sh:description "Describe the data acquisition parameters" ; + [ sh:class ; + sh:description "Describe the instrument used to acquire the data" ; sh:maxCount 1 ; sh:minCount 1 ; - sh:name "Acquisition" ; + sh:name "Instrument" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 0 ; - sh:path ] ; + sh:order 1 ; + sh:path ] ; sh:targetClass . a sh:NodeShape ; @@ -53,11 +62,11 @@ sh:description "The min, max and increment of the tilt angle in a tomography session. Unit is degree." ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:float ; - sh:description "Minimal value of a given dataset property" ; + sh:description "Maximal value of a given dataset property" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path ], + sh:order 2 ; + sh:path ], [ sh:datatype xsd:float ; sh:description "Increment between elements of a series" ; sh:maxCount 1 ; @@ -65,11 +74,11 @@ sh:order 0 ; sh:path ], [ sh:datatype xsd:float ; - sh:description "Maximal value of a given dataset property" ; + sh:description "Minimal value of a given dataset property" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path ] ; + sh:order 1 ; + sh:path ] ; sh:targetClass . a sh:NodeShape ; @@ -106,12 +115,12 @@ sh:nodeKind sh:Literal ; sh:order 5 ; sh:path ], - [ sh:class ; - sh:description "budget" ; + [ sh:datatype xsd:date ; + sh:description "start date" ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 4 ; - sh:path ], + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ], [ sh:datatype xsd:date ; sh:description "end date" ; sh:maxCount 1 ; @@ -124,78 +133,108 @@ sh:nodeKind sh:Literal ; sh:order 1 ; sh:path ], - [ sh:datatype xsd:date ; - sh:description "start date" ; + [ sh:class ; + sh:description "budget" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path ] ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 4 ; + sh:path ] ; sh:targetClass . a sh:NodeShape ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; - sh:description "work phone" ; + sh:description "email" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path ], + sh:order 3 ; + sh:path ; + sh:pattern "^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$" ], [ sh:datatype xsd:string ; - sh:description "first name" ; + sh:description "work phone" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path ], + sh:order 4 ; + sh:path ], [ sh:datatype xsd:string ; sh:description "name" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 0 ; sh:path ], - [ sh:datatype xsd:string ; - sh:description "email" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path ; - sh:pattern "^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$" ], [ sh:datatype xsd:boolean ; sh:description "work status" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 2 ; - sh:path ] ; + sh:path ], + [ sh:datatype xsd:string ; + sh:description "first name" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path ] ; sh:targetClass . a sh:NodeShape ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:integer ; - sh:description "Magnification level as indicated by the instrument, no unit" ; + sh:property [ sh:class ; + sh:description "Movement of the beam above the sample for data collection purposes that does not require movement of the stage. Given in mrad." ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 22 ; + sh:path ], + [ sh:datatype xsd:string ; + sh:description "Type of cryogen used in the holder - if the holder is cooled seperately" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path ], + sh:order 5 ; + sh:path ], + [ sh:datatype xsd:integer ; + sh:description "Number of images generated total for this data collection - might need a qualifier for tilt series to determine whether full series or individual tilts are counted" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 18 ; + sh:path ], + [ sh:datatype xsd:string ; + sh:description "Cryogen used in cooling the instrument and sample, usually nitrogen" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 15 ; + sh:path ], + [ sh:class ; + sh:description "Any type of special optics, such as a phaseplate" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 21 ; + sh:path ], [ sh:datatype xsd:float ; - sh:description "Pixel size, in Angstrom" ; + sh:description "Level of binning on the images applied during data collection" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 20 ; - sh:path ], + sh:order 19 ; + sh:path ], + [ sh:datatype xsd:string ; + sh:description "Software used for instrument control," ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 7 ; + sh:path ], [ sh:class ; - sh:description "Temperature during data collection, in K with min and max values." ; + sh:description "Machine estimated defocus, min and max values in µm. Has a tendency to be off." ; sh:maxCount 1 ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 6 ; - sh:path ], + sh:order 1 ; + sh:path ], [ sh:datatype xsd:integer ; - sh:description "Number of grids imaged for this project - here with qualifier during this data acquisition" ; + sh:description "Calculated magnification, no unit" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 17 ; - sh:path ], + sh:order 3 ; + sh:path ], [ sh:datatype xsd:float ; sh:description "Average dose per image/movie/tilt - given in electrons per square Angstrom" ; sh:maxCount 1 ; @@ -203,117 +242,92 @@ sh:nodeKind sh:Literal ; sh:order 10 ; sh:path ], - [ sh:datatype xsd:string ; - sh:description "Operating mode of the detector" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 9 ; - sh:path ], [ sh:datatype xsd:string ; sh:description "Whether and how you have to flip or rotate the gainref in order to align with your acquired images" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 26 ; sh:path ], - [ sh:datatype xsd:integer ; - sh:description "Calculated magnification, no unit" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path ], - [ sh:class ; - sh:description "Movement of the beam above the sample for data collection purposes that does not require movement of the stage. Given in mrad." ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 22 ; - sh:path ], - [ sh:datatype xsd:dateTime ; - sh:description "Time and date of the data acquisition" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 13 ; - sh:path ], [ sh:datatype xsd:string ; - sh:description "Speciman holder model" ; + sh:description "Operating mode of the detector" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path ], - [ sh:class ; - sh:description "Any type of special optics, such as a phaseplate" ; + sh:order 9 ; + sh:path ], + [ sh:class ; + sh:description "Temperature during data collection, in K with min and max values." ; sh:maxCount 1 ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 21 ; - sh:path ], - [ sh:datatype xsd:integer ; - sh:description "Number of images generated total for this data collection - might need a qualifier for tilt series to determine whether full series or individual tilts are counted" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 18 ; - sh:path ], + sh:order 6 ; + sh:path ], [ sh:datatype xsd:integer ; sh:description "Number of Beamtilt groups present in this dataset - for optimized processing split dataset into groups of same tilt angle. Despite its name Beamshift is often used to achive this result." ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 25 ; sh:path ], - [ sh:datatype xsd:string ; - sh:description "Cryogen used in cooling the instrument and sample, usually nitrogen" ; + [ sh:datatype xsd:float ; + sh:description "Pixel size, in Angstrom" ; sh:maxCount 1 ; + sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 15 ; - sh:path ], - [ sh:class ; - sh:description "Another way to move the beam above the sample for data collection purposes that does not require movement of the stage. Given in mrad." ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 23 ; - sh:path ], - [ sh:class ; - sh:description "Machine estimated defocus, min and max values in µm. Has a tendency to be off." ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 1 ; - sh:path ], + sh:order 20 ; + sh:path ], [ sh:class ; sh:description "The size of the image in pixels, height and width given." ; sh:maxCount 1 ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 12 ; sh:path ], - [ sh:datatype xsd:float ; - sh:description "Level of binning on the images applied during data collection" ; + [ sh:datatype xsd:string ; + sh:description "Make and model of the detector used" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 19 ; - sh:path ], - [ sh:class ; - sh:description "Wether an energy filter was used and its specifics." ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 11 ; - sh:path ], - [ sh:datatype xsd:string ; - sh:description "Type of cryogen used in the holder - if the holder is cooled seperately" ; + sh:order 8 ; + sh:path ], + [ sh:datatype xsd:integer ; + sh:description "Number of frames that on average constitute a full movie, can be a bit hard to define for some detectors" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path ], + sh:order 16 ; + sh:path ], [ sh:datatype xsd:float ; sh:description "Time of data acquisition per movie/tilt - in s" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 14 ; sh:path ], + [ sh:datatype xsd:integer ; + sh:description "Magnification level as indicated by the instrument, no unit" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ], + [ sh:class ; + sh:description "Wether an energy filter was used and its specifics." ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 11 ; + sh:path ], + [ sh:class ; + sh:description "Another way to move the beam above the sample for data collection purposes that does not require movement of the stage. Given in mrad." ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 23 ; + sh:path ], [ sh:datatype xsd:string ; - sh:description "Make and model of the detector used" ; + sh:description "Speciman holder model" ; sh:maxCount 1 ; - sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 8 ; - sh:path ], + sh:order 4 ; + sh:path ], + [ sh:datatype xsd:integer ; + sh:description "Number of grids imaged for this project - here with qualifier during this data acquisition" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 17 ; + sh:path ], [ sh:class ; sh:description "Target defocus set, min and max values in µm." ; sh:maxCount 1 ; @@ -326,37 +340,33 @@ sh:nodeKind sh:BlankNodeOrIRI ; sh:order 24 ; sh:path ], - [ sh:datatype xsd:string ; - sh:description "Software used for instrument control," ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 7 ; - sh:path ], - [ sh:datatype xsd:integer ; - sh:description "Number of frames that on average constitute a full movie, can be a bit hard to define for some detectors" ; + [ sh:description "Time and date of the data acquisition" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 16 ; - sh:path ] ; + sh:minCount 1 ; + sh:or ( [ sh:datatype xsd:dateTime ; + sh:nodeKind sh:Literal ] [ sh:datatype xsd:date ; + sh:nodeKind sh:Literal ] ) ; + sh:order 13 ; + sh:path ] ; sh:targetClass . a sh:NodeShape ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "Details of a given specialist instrument" ; + sh:property [ sh:datatype xsd:boolean ; + sh:description "whether a specific instrument was used during data acquisition" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path ], - [ sh:datatype xsd:boolean ; - sh:description "whether a specific instrument was used during data acquisition" ; + sh:order 0 ; + sh:path ], + [ sh:datatype xsd:string ; + sh:description "Details of a given specialist instrument" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path ] ; + sh:order 1 ; + sh:path ] ; sh:targetClass . a sh:NodeShape ; @@ -368,39 +378,39 @@ sh:nodeKind sh:Literal ; sh:order 1 ; sh:path ], - [ sh:datatype xsd:integer ; - sh:description "The width of a given item - unit depends on item" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path ], [ sh:datatype xsd:boolean ; sh:description "whether a specific instrument was used during data acquisition" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:order 0 ; - sh:path ] ; + sh:path ], + [ sh:datatype xsd:integer ; + sh:description "The width of a given item - unit depends on item" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path ] ; sh:targetClass . a sh:NodeShape ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:boolean ; - sh:description "whether a specific instrument was used during data acquisition" ; + sh:property [ sh:datatype xsd:string ; + sh:description "Type of phaseplate" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path ], - [ sh:datatype xsd:string ; - sh:description "Type of phaseplate" ; + sh:order 1 ; + sh:path ], + [ sh:datatype xsd:boolean ; + sh:description "whether a specific instrument was used during data acquisition" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path ] ; + sh:order 0 ; + sh:path ] ; sh:targetClass . a sh:NodeShape ; @@ -449,19 +459,20 @@ sh:closed true ; sh:description "Instrument values, mostly constant across a data collection." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:integer ; - sh:description "C2 aperture size used in data acquisition, in µm" ; + sh:property [ sh:datatype xsd:string ; + sh:description "Mode of imaging used during data collection" ; sh:maxCount 1 ; + sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path ], + sh:order 2 ; + sh:path ], [ sh:datatype xsd:string ; - sh:description "Name/Type of the Microscope" ; + sh:description "Mode of illumination used during data collection" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path ], + sh:order 1 ; + sh:path ], [ sh:datatype xsd:float ; sh:description "Spherical aberration of the instrument, in mm" ; sh:maxCount 1 ; @@ -469,20 +480,13 @@ sh:nodeKind sh:Literal ; sh:order 6 ; sh:path ], - [ sh:datatype xsd:integer ; - sh:description "Voltage used for the electron acceleration, in kV" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path ], [ sh:datatype xsd:string ; - sh:description "Mode of imaging used during data collection" ; + sh:description "Name/Type of the Microscope" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path ], + sh:order 0 ; + sh:path ], [ sh:datatype xsd:string ; sh:description "Type of electron source used in the microscope, such as FEG" ; sh:maxCount 1 ; @@ -490,20 +494,41 @@ sh:nodeKind sh:Literal ; sh:order 3 ; sh:path ], - [ sh:datatype xsd:string ; - sh:description "Mode of illumination used during data collection" ; + [ sh:datatype xsd:integer ; + sh:description "Voltage used for the electron acceleration, in kV" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path ] ; + sh:order 4 ; + sh:path ], + [ sh:datatype xsd:integer ; + sh:description "C2 aperture size used in data acquisition, in µm" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path ] ; sh:targetClass . a sh:NodeShape ; rdfs:subClassOf ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; + sh:property [ sh:class ; + sh:description "author's institution" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 0 ; + sh:path ], + [ sh:datatype xsd:string ; + sh:description "ORCID of the author, a type of unique identifier" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "ORCID" ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path ], + [ sh:datatype xsd:string ; sh:description "first name" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; @@ -516,28 +541,13 @@ sh:order 6 ; sh:path ], [ sh:datatype xsd:string ; - sh:description "work phone" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 8 ; - sh:path ], - [ sh:datatype xsd:string ; - sh:description "email" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 7 ; - sh:path ; - sh:pattern "^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$" ], - [ sh:datatype xsd:string ; - sh:description "ORCID of the author, a type of unique identifier" ; + sh:description "Country of the author's institution" ; sh:maxCount 1 ; sh:minCount 1 ; - sh:name "ORCID" ; + sh:name "Country" ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path ], + sh:order 2 ; + sh:path ], [ sh:datatype xsd:string ; sh:description "Role of the author, i.e., principal investigator" ; sh:maxCount 1 ; @@ -553,19 +563,20 @@ sh:order 4 ; sh:path ], [ sh:datatype xsd:string ; - sh:description "Country of the author's institution" ; + sh:description "email" ; sh:maxCount 1 ; sh:minCount 1 ; - sh:name "Country" ; sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path ], - [ sh:class ; - sh:description "institution" ; + sh:order 7 ; + sh:path ; + sh:pattern "^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$" ], + [ sh:datatype xsd:string ; + sh:description "work phone" ; + sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 0 ; - sh:path ] ; + sh:nodeKind sh:Literal ; + sh:order 8 ; + sh:path ] ; sh:targetClass . a sh:NodeShape ; @@ -573,20 +584,20 @@ sh:description "A class representing an organization" ; sh:ignoredProperties ( rdf:type ) ; sh:name "Organization" ; - sh:property [ sh:description "Type of organization, academic, commercial, governmental, etc." ; - sh:in ( "Academic" "Commercial" "Government" "Other" ) ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:name "Type_org" ; - sh:order 1 ; - sh:path ], - [ sh:datatype xsd:string ; + sh:property [ sh:datatype xsd:string ; sh:description "Name of the organization" ; sh:maxCount 1 ; sh:name "Name_org" ; sh:nodeKind sh:Literal ; sh:order 0 ; - sh:path ] ; + sh:path ], + [ sh:description "Type of organization, academic, commercial, governmental, etc." ; + sh:in ( "Academic" "Commercial" "Government" "Other" ) ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "Type_org" ; + sh:order 1 ; + sh:path ] ; sh:targetClass . a sh:NodeShape ; @@ -594,55 +605,55 @@ sh:description "A class representing a grid" ; sh:ignoredProperties ( rdf:type ) ; sh:name "Grid" ; - sh:property [ sh:datatype xsd:string ; - sh:description "Type of material the support film is made of" ; + sh:property [ sh:datatype xsd:float ; + sh:description "Pressure of the chamber during pretreatment, in Pa" ; sh:maxCount 1 ; - sh:name "Film_material" ; + sh:name "Pretreatment_pressure" ; sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path ], + sh:order 9 ; + sh:path ], [ sh:datatype xsd:string ; - sh:description "Thickness of the support film" ; + sh:description "Topology of the support film" ; sh:maxCount 1 ; - sh:name "Film_thickness" ; + sh:name "Film_topology" ; sh:nodeKind sh:Literal ; - sh:order 6 ; - sh:path ], - [ sh:datatype xsd:string ; - sh:description "Type of pretreatment of the grid, i.e., glow discharge" ; + sh:order 5 ; + sh:path ], + [ sh:datatype xsd:float ; + sh:description "Grid mesh in lines per inch" ; sh:maxCount 1 ; - sh:name "Pretreatment_type" ; + sh:name "Mesh" ; sh:nodeKind sh:Literal ; - sh:order 7 ; - sh:path ], + sh:order 2 ; + sh:path ], [ sh:datatype xsd:boolean ; sh:description "Whether a support film was used" ; sh:maxCount 1 ; sh:name "Film_support" ; sh:nodeKind sh:Literal ; sh:order 3 ; - sh:path ], - [ sh:datatype xsd:float ; - sh:description "Length of time of the pretreatment in s" ; + sh:path ], + [ sh:datatype xsd:string ; + sh:description "Type of material the support film is made of" ; sh:maxCount 1 ; - sh:name "Pretreatment_time" ; + sh:name "Film_material" ; sh:nodeKind sh:Literal ; - sh:order 8 ; - sh:path ], + sh:order 4 ; + sh:path ], [ sh:datatype xsd:string ; - sh:description "Atmospheric conditions in the chamber during pretreatment, i.e., addition of specific gases, etc." ; + sh:description "Thickness of the support film" ; sh:maxCount 1 ; - sh:name "Pretreatment_atmosphere" ; + sh:name "Film_thickness" ; sh:nodeKind sh:Literal ; - sh:order 10 ; - sh:path ], + sh:order 6 ; + sh:path ], [ sh:datatype xsd:string ; - sh:description "Topology of the support film" ; + sh:description "Grid manufacturer" ; sh:maxCount 1 ; - sh:name "Film_topology" ; + sh:name "Manufacturer" ; sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path ], + sh:order 0 ; + sh:path ], [ sh:datatype xsd:string ; sh:description "Material out of which the grid is made" ; sh:maxCount 1 ; @@ -650,27 +661,27 @@ sh:nodeKind sh:Literal ; sh:order 1 ; sh:path ], - [ sh:datatype xsd:float ; - sh:description "Pressure of the chamber during pretreatment, in Pa" ; + [ sh:datatype xsd:string ; + sh:description "Type of pretreatment of the grid, i.e., glow discharge" ; sh:maxCount 1 ; - sh:name "Pretreatment_pressure" ; + sh:name "Pretreatment_type" ; sh:nodeKind sh:Literal ; - sh:order 9 ; - sh:path ], + sh:order 7 ; + sh:path ], [ sh:datatype xsd:float ; - sh:description "Grid mesh in lines per inch" ; + sh:description "Length of time of the pretreatment in s" ; sh:maxCount 1 ; - sh:name "Mesh" ; + sh:name "Pretreatment_time" ; sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path ], + sh:order 8 ; + sh:path ], [ sh:datatype xsd:string ; - sh:description "Grid manufacturer" ; + sh:description "Atmospheric conditions in the chamber during pretreatment, i.e., addition of specific gases, etc." ; sh:maxCount 1 ; - sh:name "Manufacturer" ; + sh:name "Pretreatment_atmosphere" ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path ] ; + sh:order 10 ; + sh:path ] ; sh:targetClass . a sh:NodeShape ; @@ -707,22 +718,21 @@ sh:description "A class representing a molecule" ; sh:ignoredProperties ( rdf:type ) ; sh:name "Molecule" ; - sh:property [ sh:datatype xsd:string ; - sh:description "Description of the overall supramolecular type, i.e., a complex" ; + sh:property [ sh:description "Class of the molecule" ; + sh:in ( "Antibiotic" "Carbohydrate" "Chimera" "None of these" ) ; sh:maxCount 1 ; sh:minCount 1 ; - sh:name "Type" ; - sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path ], + sh:name "Class" ; + sh:order 2 ; + sh:path ], [ sh:datatype xsd:string ; - sh:description "Taxonomy ID of the expression system organism" ; + sh:description "Full sequence of the sample as in the data, i.e., cleaved tags should also be removed from sequence here" ; sh:maxCount 1 ; sh:minCount 1 ; - sh:name "Taxonomy_ID_expression" ; + sh:name "Sequence" ; sh:nodeKind sh:Literal ; - sh:order 7 ; - sh:path ], + sh:order 3 ; + sh:path ], [ sh:datatype xsd:string ; sh:description "Name of the gene of interest" ; sh:maxCount 1 ; @@ -731,36 +741,37 @@ sh:order 8 ; sh:path ], [ sh:datatype xsd:string ; - sh:description "Taxonomy ID of the natural source organism" ; + sh:description "Name of an individual molecule (often protein) in the sample" ; sh:maxCount 1 ; sh:minCount 1 ; - sh:name "Taxonomy_ID_source" ; + sh:name "Name" ; sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path ], - [ sh:description "Class of the molecule" ; - sh:in ( "Antibiotic" "Carbohydrate" "Chimera" "None of these" ) ; + sh:order 0 ; + sh:path ], + [ sh:datatype xsd:string ; + sh:description "Taxonomy ID of the expression system organism" ; sh:maxCount 1 ; sh:minCount 1 ; - sh:name "Class" ; - sh:order 2 ; - sh:path ], + sh:name "Taxonomy_ID_expression" ; + sh:nodeKind sh:Literal ; + sh:order 7 ; + sh:path ], [ sh:datatype xsd:string ; - sh:description "Full sequence of the sample as in the data, i.e., cleaved tags should also be removed from sequence here" ; + sh:description "Description of the overall supramolecular type, i.e., a complex" ; sh:maxCount 1 ; sh:minCount 1 ; - sh:name "Sequence" ; + sh:name "Type" ; sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path ], + sh:order 1 ; + sh:path ], [ sh:datatype xsd:string ; - sh:description "Name of an individual molecule (often protein) in the sample" ; + sh:description "Scientific name of the organism used to produce the molecule of interest" ; sh:maxCount 1 ; sh:minCount 1 ; - sh:name "Name" ; + sh:name "Expression_system" ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path ], + sh:order 6 ; + sh:path ], [ sh:datatype xsd:string ; sh:description "Scientific name of the natural host organism" ; sh:maxCount 1 ; @@ -770,13 +781,13 @@ sh:order 4 ; sh:path ], [ sh:datatype xsd:string ; - sh:description "Scientific name of the organism used to produce the molecule of interest" ; + sh:description "Taxonomy ID of the natural source organism" ; sh:maxCount 1 ; sh:minCount 1 ; - sh:name "Expression_system" ; + sh:name "Taxonomy_ID_source" ; sh:nodeKind sh:Literal ; - sh:order 6 ; - sh:path ] ; + sh:order 5 ; + sh:path ] ; sh:targetClass . a sh:NodeShape ; @@ -784,21 +795,21 @@ sh:description "A class representing the overall molecule" ; sh:ignoredProperties ( rdf:type ) ; sh:name "OverallMolecule" ; - sh:property [ sh:datatype xsd:string ; - sh:description "Where the sample was taken from, i.e., natural host, recombinantly expressed, etc." ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:name "Source" ; - sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path ], - [ sh:datatype xsd:float ; + sh:property [ sh:datatype xsd:float ; sh:description "Molecular weight in Da" ; sh:maxCount 1 ; sh:name "Molecular_weight" ; sh:nodeKind sh:Literal ; sh:order 3 ; sh:path ], + [ sh:datatype xsd:string ; + sh:description "Description of the overall supramolecular type, i.e., a complex" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "Type" ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path ], [ sh:datatype xsd:string ; sh:description "Name of the full sample" ; sh:maxCount 1 ; @@ -808,13 +819,13 @@ sh:order 1 ; sh:path ], [ sh:datatype xsd:string ; - sh:description "Description of the overall supramolecular type, i.e., a complex" ; + sh:description "Where the sample was taken from, i.e., natural host, recombinantly expressed, etc." ; sh:maxCount 1 ; sh:minCount 1 ; - sh:name "Type" ; + sh:name "Source" ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path ] ; + sh:order 2 ; + sh:path ] ; sh:targetClass . a sh:NodeShape ; @@ -822,14 +833,7 @@ sh:description "A class representing a sample" ; sh:ignoredProperties ( rdf:type ) ; sh:name "Sample" ; - sh:property [ sh:class ; - sh:description "Description of the grid used" ; - sh:maxCount 1 ; - sh:name "Grid" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 4 ; - sh:path ], - [ sh:class ; + sh:property [ sh:class ; sh:description "Description of the specimen" ; sh:maxCount 1 ; sh:minCount 1 ; @@ -837,6 +841,21 @@ sh:nodeKind sh:BlankNodeOrIRI ; sh:order 3 ; sh:path ], + [ sh:class ; + sh:description "Description of the overall molecule" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "Overall_Molecule" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 0 ; + sh:path ], + [ sh:class ; + sh:description "Description of the grid used" ; + sh:maxCount 1 ; + sh:name "Grid" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 4 ; + sh:path ], [ sh:class ; sh:description "List of ligands associated with the sample" ; sh:name "Ligands" ; @@ -849,15 +868,7 @@ sh:name "Molecule" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 1 ; - sh:path ], - [ sh:class ; - sh:description "Description of the overall molecule" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:name "Overall_Molecule" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 0 ; - sh:path ] ; + sh:path ] ; sh:targetClass . a sh:NodeShape ; @@ -866,21 +877,13 @@ sh:ignoredProperties ( rdf:type ) ; sh:name "Specimen" ; sh:property [ sh:datatype xsd:boolean ; - sh:description "Whether the sample was shadowed" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:name "Shadowing" ; - sh:nodeKind sh:Literal ; - sh:order 9 ; - sh:path ], - [ sh:datatype xsd:boolean ; - sh:description "Whether the sample was vitrified" ; + sh:description "Whether the sample was stained" ; sh:maxCount 1 ; sh:minCount 1 ; - sh:name "Vitrification" ; + sh:name "Staining" ; sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path ], + sh:order 7 ; + sh:path ], [ sh:datatype xsd:float ; sh:description "Environmental temperature just before vitrification, in K" ; sh:maxCount 1 ; @@ -889,29 +892,21 @@ sh:nodeKind sh:Literal ; sh:order 6 ; sh:path ], - [ sh:datatype xsd:string ; - sh:description "Which cryogen was used for vitrification" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:name "Vitrification_cryogen" ; - sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path ], [ sh:datatype xsd:float ; - sh:description "pH of the sample buffer" ; + sh:description "Concentration of the (supra)molecule in the sample, in M" ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:name "pH" ; + sh:name "Concentration" ; sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path ], - [ sh:datatype xsd:float ; - sh:description "Environmental humidity just before vitrification, in %" ; + sh:order 1 ; + sh:path ], + [ sh:datatype xsd:boolean ; + sh:description "Whether the sample was vitrified" ; sh:maxCount 1 ; - sh:name "Humidity" ; + sh:minCount 1 ; + sh:name "Vitrification" ; sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path ], + sh:order 3 ; + sh:path ], [ sh:datatype xsd:boolean ; sh:description "Whether the sample was embedded" ; sh:maxCount 1 ; @@ -920,14 +915,22 @@ sh:nodeKind sh:Literal ; sh:order 8 ; sh:path ], + [ sh:datatype xsd:string ; + sh:description "Which cryogen was used for vitrification" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "Vitrification_cryogen" ; + sh:nodeKind sh:Literal ; + sh:order 4 ; + sh:path ], [ sh:datatype xsd:boolean ; - sh:description "Whether the sample was stained" ; + sh:description "Whether the sample was shadowed" ; sh:maxCount 1 ; sh:minCount 1 ; - sh:name "Staining" ; + sh:name "Shadowing" ; sh:nodeKind sh:Literal ; - sh:order 7 ; - sh:path ], + sh:order 9 ; + sh:path ], [ sh:datatype xsd:string ; sh:description "Name/composition of the (chemical) sample buffer during grid preparation" ; sh:maxCount 1 ; @@ -936,12 +939,20 @@ sh:order 0 ; sh:path ], [ sh:datatype xsd:float ; - sh:description "Concentration of the (supra)molecule in the sample, in M" ; + sh:description "pH of the sample buffer" ; sh:maxCount 1 ; - sh:name "Concentration" ; + sh:minCount 1 ; + sh:name "pH" ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path ] ; + sh:order 2 ; + sh:path ], + [ sh:datatype xsd:float ; + sh:description "Environmental humidity just before vitrification, in %" ; + sh:maxCount 1 ; + sh:name "Humidity" ; + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path ] ; sh:targetClass . a sh:NodeShape ; @@ -968,6 +979,12 @@ sh:description "A series of numbers constructed from min, max, and increment" ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:float ; + sh:description "Minimal value of a given dataset property" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path ], + [ sh:datatype xsd:float ; sh:description "Maximal value of a given dataset property" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; @@ -978,13 +995,7 @@ sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 0 ; - sh:path ], - [ sh:datatype xsd:float ; - sh:description "Minimal value of a given dataset property" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path ] ; + sh:path ] ; sh:targetClass . a sh:NodeShape ; @@ -1004,17 +1015,17 @@ sh:order 2 ; sh:path ], [ sh:datatype xsd:float ; - sh:description "minimum x" ; + sh:description "maximum x" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path ], + sh:order 1 ; + sh:path ], [ sh:datatype xsd:float ; - sh:description "maximum x" ; + sh:description "minimum x" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path ] ; + sh:order 0 ; + sh:path ] ; sh:targetClass . a sh:NodeShape ; @@ -1022,16 +1033,16 @@ sh:description "A range constructed from min and max" ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:float ; - sh:description "Minimal value of a given dataset property" ; + sh:description "Maximal value of a given dataset property" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path ], + sh:order 1 ; + sh:path ], [ sh:datatype xsd:float ; - sh:description "Maximal value of a given dataset property" ; + sh:description "Minimal value of a given dataset property" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path ] ; + sh:order 0 ; + sh:path ] ; sh:targetClass . diff --git a/project/shex/oscem_schemas.shex b/project/shex/oscem_schemas.shex index 8bdb82a..f5f1af5 100644 --- a/project/shex/oscem_schemas.shex +++ b/project/shex/oscem_schemas.shex @@ -59,7 +59,7 @@ linkml:Sparqlpath xsd:string @linkml:Float ; @ ? ; @ ? ; - @linkml:Datetime ; + @ ; @linkml:Float ? ; @linkml:String ? ; @linkml:Integer ? ; @@ -78,10 +78,16 @@ linkml:Sparqlpath xsd:string ) } + CLOSED { + ( $ rdf:type . * ; + rdf:type [ linkml:Any ] ? + ) +} + CLOSED { ( $ ( & ; rdf:type [ schema1:Person ] ? ; - schema1:Organization @ + ; + schema1:Organization @ ; @linkml:String ; @linkml:String ; @linkml:String ? ; @@ -106,7 +112,7 @@ linkml:Sparqlpath xsd:string CLOSED { ( $ ( @linkml:Boolean ; - @linkml:String + @linkml:String ) ; rdf:type [ ] ? ) @@ -206,7 +212,7 @@ linkml:Sparqlpath xsd:string CLOSED { ( $ ( @linkml:String ; - @linkml:String ; + @linkml:String ; [ @@ -223,7 +229,7 @@ linkml:Sparqlpath xsd:string } CLOSED { - ( $ ( @linkml:String ; + ( $ ( @linkml:String ; @linkml:String ; @linkml:String ; @linkml:Float ? @@ -247,7 +253,7 @@ linkml:Sparqlpath xsd:string CLOSED { ( $ ( @linkml:Boolean ; - @linkml:String + @linkml:String ) ; rdf:type [ ] ? ) @@ -326,7 +332,7 @@ linkml:Sparqlpath xsd:string CLOSED { ( $ ( @linkml:Boolean ; - @linkml:String + @linkml:String ) ; rdf:type [ ] ? ) diff --git a/project/sqlschema/oscem_schemas.sql b/project/sqlschema/oscem_schemas.sql index 4ddd00c..58cfa4e 100644 --- a/project/sqlschema/oscem_schemas.sql +++ b/project/sqlschema/oscem_schemas.sql @@ -8,6 +8,8 @@ -- * Slot: increment Description: Increment between elements of a series -- * Slot: minimal Description: Minimal value of a given dataset property -- * Slot: maximal Description: Maximal value of a given dataset property +-- # Class: "Any" Description: "Any type, used as the base for type-narrowing.See https://linkml.io/linkml/schemas/advanced.html" +-- * Slot: id Description: -- # Class: "Range" Description: "A range constructed from min and max" -- * Slot: id Description: -- * Slot: minimal Description: Minimal value of a given dataset property @@ -37,7 +39,6 @@ -- * Slot: detector Description: Make and model of the detector used -- * Slot: detector_mode Description: Operating mode of the detector -- * Slot: dose_per_movie Description: Average dose per image/movie/tilt - given in electrons per square Angstrom --- * Slot: datetime Description: Time and date of the data acquisition -- * Slot: exposure_time Description: Time of data acquisition per movie/tilt - in s -- * Slot: cryogen Description: Cryogen used in cooling the instrument and sample, usually nitrogen -- * Slot: frames_per_movie Description: Number of frames that on average constitute a full movie, can be a bit hard to define for some detectors @@ -52,6 +53,7 @@ -- * Slot: temperature_id Description: Temperature during data collection, in K with min and max values. -- * Slot: energy_filter_id Description: Wether an energy filter was used and its specifics. -- * Slot: image_size_id Description: The size of the image in pixels, height and width given. +-- * Slot: datetime_id Description: Time and date of the data acquisition -- * Slot: specialist_optics_id Description: Any type of special optics, such as a phaseplate -- * Slot: beamshift_id Description: Movement of the beam above the sample for data collection purposes that does not require movement of the stage. Given in mrad. -- * Slot: beamtilt_id Description: Another way to move the beam above the sample for data collection purposes that does not require movement of the stage. Given in mrad. @@ -69,15 +71,15 @@ -- # Class: "Phaseplate" Description: "" -- * Slot: id Description: -- * Slot: used Description: whether a specific instrument was used during data acquisition --- * Slot: type Description: Type of phaseplate +-- * Slot: instrument_type Description: Type of phaseplate -- # Class: "SphericalAberrationCorrector" Description: "" -- * Slot: id Description: -- * Slot: used Description: whether a specific instrument was used during data acquisition --- * Slot: type Description: Details of a given specialist instrument +-- * Slot: instrument_type Description: Details of a given specialist instrument -- # Class: "ChromaticAberrationCorrector" Description: "" -- * Slot: id Description: -- * Slot: used Description: whether a specific instrument was used during data acquisition --- * Slot: type Description: Details of a given specialist instrument +-- * Slot: instrument_type Description: Details of a given specialist instrument -- # Class: "Instrument" Description: "Instrument values, mostly constant across a data collection." -- * Slot: id Description: -- * Slot: microscope Description: Name/Type of the Microscope @@ -104,6 +106,7 @@ -- * Slot: work_status Description: work status -- * Slot: email Description: email -- * Slot: work_phone Description: work phone +-- * Slot: institution_id Description: author's institution -- # Class: "Institution" Description: "A class representing an organization" -- * Slot: id Description: -- * Slot: name_org Description: Name of the organization @@ -122,14 +125,14 @@ -- * Slot: has_unit Description: Unit -- # Class: "OverallMolecule" Description: "A class representing the overall molecule" -- * Slot: id Description: --- * Slot: type Description: Description of the overall supramolecular type, i.e., a complex +-- * Slot: molecular_type Description: Description of the overall supramolecular type, i.e., a complex -- * Slot: name_sample Description: Name of the full sample -- * Slot: source Description: Where the sample was taken from, i.e., natural host, recombinantly expressed, etc. -- * Slot: molecular_weight Description: Molecular weight in Da -- # Class: "Molecule" Description: "A class representing a molecule" -- * Slot: id Description: -- * Slot: name_mol Description: Name of an individual molecule (often protein) in the sample --- * Slot: type Description: Description of the overall supramolecular type, i.e., a complex +-- * Slot: molecular_type Description: Description of the overall supramolecular type, i.e., a complex -- * Slot: molecular_class Description: Class of the molecule -- * Slot: sequence Description: Full sequence of the sample as in the data, i.e., cleaved tags should also be removed from sequence here -- * Slot: natural_source Description: Scientific name of the natural host organism @@ -178,9 +181,6 @@ -- # Class: "EMDataset_authors" Description: "" -- * Slot: EMDataset_id Description: Autocreated FK slot -- * Slot: authors_id Description: List of authors associated with the project --- # Class: "Author_institution" Description: "" --- * Slot: Author_id Description: Autocreated FK slot --- * Slot: institution_id Description: institution -- # Class: "Sample_molecule" Description: "" -- * Slot: Sample_id Description: Autocreated FK slot -- * Slot: molecule_id Description: List of molecule associated with the sample @@ -195,6 +195,10 @@ CREATE TABLE "TiltAngle" ( maximal FLOAT, PRIMARY KEY (id) ); +CREATE TABLE "Any" ( + id INTEGER NOT NULL, + PRIMARY KEY (id) +); CREATE TABLE "Range" ( id INTEGER NOT NULL, minimal FLOAT, @@ -232,19 +236,19 @@ CREATE TABLE "EnergyFilter" ( CREATE TABLE "Phaseplate" ( id INTEGER NOT NULL, used BOOLEAN NOT NULL, - type TEXT NOT NULL, + instrument_type TEXT NOT NULL, PRIMARY KEY (id) ); CREATE TABLE "SphericalAberrationCorrector" ( id INTEGER NOT NULL, used BOOLEAN NOT NULL, - type TEXT NOT NULL, + instrument_type TEXT NOT NULL, PRIMARY KEY (id) ); CREATE TABLE "ChromaticAberrationCorrector" ( id INTEGER NOT NULL, used BOOLEAN NOT NULL, - type TEXT NOT NULL, + instrument_type TEXT NOT NULL, PRIMARY KEY (id) ); CREATE TABLE "Instrument" ( @@ -267,18 +271,6 @@ CREATE TABLE "Person" ( work_phone TEXT, PRIMARY KEY (id) ); -CREATE TABLE "Author" ( - id INTEGER NOT NULL, - orcid TEXT NOT NULL, - country TEXT NOT NULL, - role TEXT, - name TEXT NOT NULL, - first_name TEXT, - work_status BOOLEAN, - email TEXT NOT NULL, - work_phone TEXT NOT NULL, - PRIMARY KEY (id) -); CREATE TABLE "Institution" ( id INTEGER NOT NULL, name_org TEXT, @@ -293,7 +285,7 @@ CREATE TABLE "QuantityValue" ( ); CREATE TABLE "OverallMolecule" ( id INTEGER NOT NULL, - type TEXT NOT NULL, + molecular_type TEXT NOT NULL, name_sample TEXT NOT NULL, source TEXT NOT NULL, molecular_weight FLOAT, @@ -302,7 +294,7 @@ CREATE TABLE "OverallMolecule" ( CREATE TABLE "Molecule" ( id INTEGER NOT NULL, name_mol TEXT NOT NULL, - type TEXT NOT NULL, + molecular_type TEXT NOT NULL, molecular_class VARCHAR(13) NOT NULL, sequence TEXT NOT NULL, natural_source TEXT NOT NULL, @@ -358,6 +350,20 @@ CREATE TABLE "SpecialistOptics" ( FOREIGN KEY(spherical_aberration_corrector_id) REFERENCES "SphericalAberrationCorrector" (id), FOREIGN KEY(chromatic_aberration_corrector_id) REFERENCES "ChromaticAberrationCorrector" (id) ); +CREATE TABLE "Author" ( + id INTEGER NOT NULL, + orcid TEXT NOT NULL, + country TEXT NOT NULL, + role TEXT, + name TEXT NOT NULL, + first_name TEXT, + work_status BOOLEAN, + email TEXT NOT NULL, + work_phone TEXT NOT NULL, + institution_id INTEGER NOT NULL, + PRIMARY KEY (id), + FOREIGN KEY(institution_id) REFERENCES "Institution" (id) +); CREATE TABLE "Grant" ( id INTEGER NOT NULL, name TEXT, @@ -379,13 +385,6 @@ CREATE TABLE "Sample" ( FOREIGN KEY(specimen_id) REFERENCES "Specimen" (id), FOREIGN KEY(grid_id) REFERENCES "Grid" (id) ); -CREATE TABLE "Author_institution" ( - "Author_id" INTEGER, - institution_id INTEGER NOT NULL, - PRIMARY KEY ("Author_id", institution_id), - FOREIGN KEY("Author_id") REFERENCES "Author" (id), - FOREIGN KEY(institution_id) REFERENCES "Institution" (id) -); CREATE TABLE "Acquisition" ( id INTEGER NOT NULL, nominal_magnification INTEGER, @@ -396,7 +395,6 @@ CREATE TABLE "Acquisition" ( detector TEXT NOT NULL, detector_mode TEXT, dose_per_movie FLOAT NOT NULL, - datetime DATETIME NOT NULL, exposure_time FLOAT, cryogen TEXT, frames_per_movie INTEGER, @@ -411,6 +409,7 @@ CREATE TABLE "Acquisition" ( temperature_id INTEGER, energy_filter_id INTEGER, image_size_id INTEGER, + datetime_id INTEGER NOT NULL, specialist_optics_id INTEGER, beamshift_id INTEGER, beamtilt_id INTEGER, @@ -421,6 +420,7 @@ CREATE TABLE "Acquisition" ( FOREIGN KEY(temperature_id) REFERENCES "Range" (id), FOREIGN KEY(energy_filter_id) REFERENCES "EnergyFilter" (id), FOREIGN KEY(image_size_id) REFERENCES "ImageSize" (id), + FOREIGN KEY(datetime_id) REFERENCES "Any" (id), FOREIGN KEY(specialist_optics_id) REFERENCES "SpecialistOptics" (id), FOREIGN KEY(beamshift_id) REFERENCES "BoundingBox2D" (id), FOREIGN KEY(beamtilt_id) REFERENCES "BoundingBox2D" (id), diff --git a/src/data/examples/EMDataset-001.yaml b/src/data/examples/EMDataset-001.yaml index 3cdd300..9263c77 100644 --- a/src/data/examples/EMDataset-001.yaml +++ b/src/data/examples/EMDataset-001.yaml @@ -6,7 +6,7 @@ instrument: imaging: Brightfield electron_source: FEG acceleration_voltage: 300 - c2_Aperture: 70 + c2_aperture: 70 cs: 2.7 acquisition: holder: testitest @@ -16,14 +16,14 @@ acquisition: datetime: "2024-01-01" binning_camera: 2 pixel_size: 1.2 -grant: - - grant_id: SNF321 - funding_agency: SNF - - grant_id: Fundingofsomekind - funding_agency: SNF -author: +grants: + - project_id: SNF321 + funder: SNF + - project_id: Fundingofsomekind + funder: SNF +authors: - name: Doe - first_name: John + first_name: John email: john.doe@gmail.com work_phone: "+4132112312" orcid: ORCID_123124151231 @@ -42,13 +42,13 @@ author: country: Switzerland sample: overall_molecule: - type: Complex + molecular_type: Complex name_sample: Ribosome source: yeast molecular_weight: 3000000 molecule: - name_mol: Ribosome_ - type: polypeptide + molecular_type: polypeptide molecular_class: None of these sequence: MMKNMMKYMMMYSYKEKSEKRRWMMKREMMKYLELLNMRMNKWVKRMMMSRKRLLSRMNRLEKKNHMNDYKLMSYNFNKNSMMMKSMLSKLMMNLLENVMNGVDLKSGKSKMSGGNMMMSKPVMKENLNTVNMLFYYFLPNNKSYKYFNRMNMYLNKHMKNYKKLVKLNKNYSKSSYLLQDKLMMSNMFNNMMFNRNNMKYMNNNVNNLMSSLNMNSNNKSLYLSLLNKTLNNNLSNLYSNNNINKSIINNTLVNMSMLNNNYNNNNTTFNINNNLFNLLNLLNNNYNNNNNYNNMMSNTNMLLNNYNNNNNNNNNNKCNMHSKMKLERKNMMLNYLLKNEMMNKNQMWMSKMENNKMNNINNNNNMLKMNKENDKTNMFGYMMSYMDMLLGNMMNKSKKSNDMKMMMSKYFGLKEVNMTGMNLKYEFNNTEMLLKLMRKGMSKRKRTLSRMFRFRLKNRMPLLNDKGMLKNKMSNNLLKNLALNNNILNVEYNIKNVLFNSINNNNINNNNNNNMYNDMKDYYNNMSLENKKDLSLNNELLYKNMVGWSLLLKGKVGARKGKNRSNRMLMTKGSFKNNNLYIYNIFDDNSNNNGYTKDRLRLNYMKNSNFISYMDKSTNNGKLGMTLKVNIL natural_source: yeast diff --git a/src/oscem_schemas/datamodel/oscem_schemas.py b/src/oscem_schemas/datamodel/oscem_schemas.py index 028fa83..34015a4 100644 --- a/src/oscem_schemas/datamodel/oscem_schemas.py +++ b/src/oscem_schemas/datamodel/oscem_schemas.py @@ -1,5 +1,5 @@ # Auto generated from oscem_schemas.yaml by pythongen.py version: 0.0.1 -# Generation date: 2024-08-22T23:22:34 +# Generation date: 2024-08-23T00:59:03 # Schema: oscem-schemas # # id: https://w3id.org/osc-em/oscem-schemas @@ -22,8 +22,8 @@ from linkml_runtime.utils.enumerations import EnumDefinitionImpl from rdflib import Namespace, URIRef from linkml_runtime.utils.curienamespace import CurieNamespace -from linkml_runtime.linkml_model.types import Boolean, Date, Datetime, Double, Float, Integer, String -from linkml_runtime.utils.metamodelcore import Bool, XSDDate, XSDDateTime +from linkml_runtime.linkml_model.types import Boolean, Date, Double, Float, Integer, String +from linkml_runtime.utils.metamodelcore import Bool, XSDDate metamodel_version = "1.7.0" version = None @@ -105,7 +105,7 @@ class Acquisition(YAMLRoot): detector: str = None dose_per_movie: float = None - datetime: Union[str, XSDDateTime] = None + datetime: Union[dict, "Any"] = None binning_camera: float = None pixel_size: float = None nominal_defocus: Optional[Union[dict, "Range"]] = None @@ -142,11 +142,6 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.dose_per_movie, float): self.dose_per_movie = float(self.dose_per_movie) - if self._is_empty(self.datetime): - self.MissingRequiredField("datetime") - if not isinstance(self.datetime, XSDDateTime): - self.datetime = XSDDateTime(self.datetime) - if self._is_empty(self.binning_camera): self.MissingRequiredField("binning_camera") if not isinstance(self.binning_camera, float): @@ -292,7 +287,7 @@ class Phaseplate(YAMLRoot): class_model_uri: ClassVar[URIRef] = URIRef("https://w3id.org/osc-em/oscem-schemas/Phaseplate") used: Union[bool, Bool] = None - type: str = None + instrument_type: str = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.used): @@ -300,10 +295,10 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.used, Bool): self.used = Bool(self.used) - if self._is_empty(self.type): - self.MissingRequiredField("type") - if not isinstance(self.type, str): - self.type = str(self.type) + if self._is_empty(self.instrument_type): + self.MissingRequiredField("instrument_type") + if not isinstance(self.instrument_type, str): + self.instrument_type = str(self.instrument_type) super().__post_init__(**kwargs) @@ -318,7 +313,7 @@ class SphericalAberrationCorrector(YAMLRoot): class_model_uri: ClassVar[URIRef] = URIRef("https://w3id.org/osc-em/oscem-schemas/SphericalAberrationCorrector") used: Union[bool, Bool] = None - type: str = None + instrument_type: str = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.used): @@ -326,10 +321,10 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.used, Bool): self.used = Bool(self.used) - if self._is_empty(self.type): - self.MissingRequiredField("type") - if not isinstance(self.type, str): - self.type = str(self.type) + if self._is_empty(self.instrument_type): + self.MissingRequiredField("instrument_type") + if not isinstance(self.instrument_type, str): + self.instrument_type = str(self.instrument_type) super().__post_init__(**kwargs) @@ -344,7 +339,7 @@ class ChromaticAberrationCorrector(YAMLRoot): class_model_uri: ClassVar[URIRef] = URIRef("https://w3id.org/osc-em/oscem-schemas/ChromaticAberrationCorrector") used: Union[bool, Bool] = None - type: str = None + instrument_type: str = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.used): @@ -352,10 +347,10 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.used, Bool): self.used = Bool(self.used) - if self._is_empty(self.type): - self.MissingRequiredField("type") - if not isinstance(self.type, str): - self.type = str(self.type) + if self._is_empty(self.instrument_type): + self.MissingRequiredField("instrument_type") + if not isinstance(self.instrument_type, str): + self.instrument_type = str(self.instrument_type) super().__post_init__(**kwargs) @@ -460,7 +455,7 @@ class Author(Person): class_name: ClassVar[str] = "Author" class_model_uri: ClassVar[URIRef] = URIRef("https://w3id.org/osc-em/oscem-schemas/Author") - institution: Union[Union[dict, "Institution"], List[Union[dict, "Institution"]]] = None + institution: Union[dict, "Institution"] = None orcid: str = None country: str = None name: str = None @@ -471,7 +466,8 @@ class Author(Person): def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.institution): self.MissingRequiredField("institution") - self._normalize_inlined_as_dict(slot_name="institution", slot_type=Institution, key_name="type_org", keyed=False) + if not isinstance(self.institution, Institution): + self.institution = Institution(**as_dict(self.institution)) if self._is_empty(self.orcid): self.MissingRequiredField("orcid") @@ -609,16 +605,16 @@ class OverallMolecule(YAMLRoot): class_name: ClassVar[str] = "OverallMolecule" class_model_uri: ClassVar[URIRef] = URIRef("https://w3id.org/osc-em/oscem-schemas/OverallMolecule") - type: str = None + molecular_type: str = None name_sample: str = None source: str = None molecular_weight: Optional[float] = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): - if self._is_empty(self.type): - self.MissingRequiredField("type") - if not isinstance(self.type, str): - self.type = str(self.type) + if self._is_empty(self.molecular_type): + self.MissingRequiredField("molecular_type") + if not isinstance(self.molecular_type, str): + self.molecular_type = str(self.molecular_type) if self._is_empty(self.name_sample): self.MissingRequiredField("name_sample") @@ -649,7 +645,7 @@ class Molecule(YAMLRoot): class_model_uri: ClassVar[URIRef] = URIRef("https://w3id.org/osc-em/oscem-schemas/Molecule") name_mol: str = None - type: str = None + molecular_type: str = None molecular_class: Union[str, "MoleculeClassEnum"] = None sequence: str = None natural_source: str = None @@ -664,10 +660,10 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.name_mol, str): self.name_mol = str(self.name_mol) - if self._is_empty(self.type): - self.MissingRequiredField("type") - if not isinstance(self.type, str): - self.type = str(self.type) + if self._is_empty(self.molecular_type): + self.MissingRequiredField("molecular_type") + if not isinstance(self.molecular_type, str): + self.molecular_type = str(self.molecular_type) if self._is_empty(self.molecular_class): self.MissingRequiredField("molecular_class") @@ -907,6 +903,8 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) +Any = Any + @dataclass(repr=False) class Range(YAMLRoot): """ @@ -1131,7 +1129,7 @@ class slots: model_uri=DEFAULT_.image_size, domain=None, range=Optional[Union[dict, ImageSize]]) slots.datetime = Slot(uri=ACQUISITION.datetime, name="datetime", curie=ACQUISITION.curie('datetime'), - model_uri=DEFAULT_.datetime, domain=None, range=Optional[Union[str, XSDDateTime]]) + model_uri=DEFAULT_.datetime, domain=None, range=Optional[Union[dict, Any]]) slots.exposure_time = Slot(uri=ACQUISITION.exposure_time, name="exposure_time", curie=ACQUISITION.curie('exposure_time'), model_uri=DEFAULT_.exposure_time, domain=None, range=Optional[float]) @@ -1160,7 +1158,7 @@ class slots: slots.phaseplate = Slot(uri=ACQUISITION.phaseplate, name="phaseplate", curie=ACQUISITION.curie('phaseplate'), model_uri=DEFAULT_.phaseplate, domain=None, range=Optional[Union[dict, Phaseplate]]) -slots.instrument_type = Slot(uri=ACQUISITION.type, name="instrument_type", curie=ACQUISITION.curie('type'), +slots.instrument_type = Slot(uri=ACQUISITION.instrument_type, name="instrument_type", curie=ACQUISITION.curie('instrument_type'), model_uri=DEFAULT_.instrument_type, domain=None, range=Optional[str]) slots.spherical_aberration_corrector = Slot(uri=ACQUISITION.spherical_aberration_corrector, name="spherical_aberration_corrector", curie=ACQUISITION.curie('spherical_aberration_corrector'), @@ -1225,7 +1223,7 @@ class slots: model_uri=DEFAULT_.name, domain=None, range=Optional[str]) slots.institution = Slot(uri=SCHEMA.Organization, name="institution", curie=SCHEMA.curie('Organization'), - model_uri=DEFAULT_.institution, domain=None, range=Optional[Union[Union[dict, Institution], List[Union[dict, Institution]]]]) + model_uri=DEFAULT_.institution, domain=None, range=Optional[Union[dict, Institution]]) slots.name_org = Slot(uri="str(uriorcurie)", name="name_org", curie=None, model_uri=DEFAULT_.name_org, domain=None, range=Optional[str]) @@ -1263,7 +1261,7 @@ class slots: slots.project_id = Slot(uri=SCHEMA.identifier, name="project_id", curie=SCHEMA.curie('identifier'), model_uri=DEFAULT_.project_id, domain=None, range=Optional[str]) -slots.molecular_type = Slot(uri=SAMPLE['/type'], name="molecular_type", curie=SAMPLE.curie('/type'), +slots.molecular_type = Slot(uri=SAMPLE['/molecular_type'], name="molecular_type", curie=SAMPLE.curie('/molecular_type'), model_uri=DEFAULT_.molecular_type, domain=None, range=Optional[str]) slots.name_sample = Slot(uri=SAMPLE['/name_sample'], name="name_sample", curie=SAMPLE.curie('/name_sample'), @@ -1441,7 +1439,7 @@ class slots: model_uri=DEFAULT_.Acquisition_dose_per_movie, domain=Acquisition, range=float) slots.Acquisition_datetime = Slot(uri=ACQUISITION.datetime, name="Acquisition_datetime", curie=ACQUISITION.curie('datetime'), - model_uri=DEFAULT_.Acquisition_datetime, domain=Acquisition, range=Union[str, XSDDateTime]) + model_uri=DEFAULT_.Acquisition_datetime, domain=Acquisition, range=Union[dict, "Any"]) slots.Acquisition_binning_camera = Slot(uri=ACQUISITION.binning_camera, name="Acquisition_binning_camera", curie=ACQUISITION.curie('binning_camera'), model_uri=DEFAULT_.Acquisition_binning_camera, domain=Acquisition, range=float) @@ -1458,19 +1456,19 @@ class slots: slots.Phaseplate_used = Slot(uri=ACQUISITION.used, name="Phaseplate_used", curie=ACQUISITION.curie('used'), model_uri=DEFAULT_.Phaseplate_used, domain=Phaseplate, range=Union[bool, Bool]) -slots.Phaseplate_instrument_type = Slot(uri=ACQUISITION.type, name="Phaseplate_instrument_type", curie=ACQUISITION.curie('type'), +slots.Phaseplate_instrument_type = Slot(uri=ACQUISITION.instrument_type, name="Phaseplate_instrument_type", curie=ACQUISITION.curie('instrument_type'), model_uri=DEFAULT_.Phaseplate_instrument_type, domain=Phaseplate, range=str) slots.SphericalAberrationCorrector_used = Slot(uri=ACQUISITION.used, name="SphericalAberrationCorrector_used", curie=ACQUISITION.curie('used'), model_uri=DEFAULT_.SphericalAberrationCorrector_used, domain=SphericalAberrationCorrector, range=Union[bool, Bool]) -slots.SphericalAberrationCorrector_instrument_type = Slot(uri=ACQUISITION.type, name="SphericalAberrationCorrector_instrument_type", curie=ACQUISITION.curie('type'), +slots.SphericalAberrationCorrector_instrument_type = Slot(uri=ACQUISITION.instrument_type, name="SphericalAberrationCorrector_instrument_type", curie=ACQUISITION.curie('instrument_type'), model_uri=DEFAULT_.SphericalAberrationCorrector_instrument_type, domain=SphericalAberrationCorrector, range=str) slots.ChromaticAberrationCorrector_used = Slot(uri=ACQUISITION.used, name="ChromaticAberrationCorrector_used", curie=ACQUISITION.curie('used'), model_uri=DEFAULT_.ChromaticAberrationCorrector_used, domain=ChromaticAberrationCorrector, range=Union[bool, Bool]) -slots.ChromaticAberrationCorrector_instrument_type = Slot(uri=ACQUISITION.type, name="ChromaticAberrationCorrector_instrument_type", curie=ACQUISITION.curie('type'), +slots.ChromaticAberrationCorrector_instrument_type = Slot(uri=ACQUISITION.instrument_type, name="ChromaticAberrationCorrector_instrument_type", curie=ACQUISITION.curie('instrument_type'), model_uri=DEFAULT_.ChromaticAberrationCorrector_instrument_type, domain=ChromaticAberrationCorrector, range=str) slots.Instrument_microscope = Slot(uri="str(uriorcurie)", name="Instrument_microscope", curie=None, @@ -1505,7 +1503,7 @@ class slots: model_uri=DEFAULT_.Author_orcid, domain=Author, range=str) slots.Author_institution = Slot(uri=SCHEMA.Organization, name="Author_institution", curie=SCHEMA.curie('Organization'), - model_uri=DEFAULT_.Author_institution, domain=Author, range=Union[Union[dict, "Institution"], List[Union[dict, "Institution"]]]) + model_uri=DEFAULT_.Author_institution, domain=Author, range=Union[dict, "Institution"]) slots.Author_country = Slot(uri="str(uriorcurie)", name="Author_country", curie=None, model_uri=DEFAULT_.Author_country, domain=Author, range=str) @@ -1513,7 +1511,7 @@ class slots: slots.Institution_type_org = Slot(uri="str(uriorcurie)", name="Institution_type_org", curie=None, model_uri=DEFAULT_.Institution_type_org, domain=Institution, range=Union[str, "OrganizationTypeEnum"]) -slots.OverallMolecule_molecular_type = Slot(uri=SAMPLE['/type'], name="OverallMolecule_molecular_type", curie=SAMPLE.curie('/type'), +slots.OverallMolecule_molecular_type = Slot(uri=SAMPLE['/molecular_type'], name="OverallMolecule_molecular_type", curie=SAMPLE.curie('/molecular_type'), model_uri=DEFAULT_.OverallMolecule_molecular_type, domain=OverallMolecule, range=str) slots.OverallMolecule_name_sample = Slot(uri=SAMPLE['/name_sample'], name="OverallMolecule_name_sample", curie=SAMPLE.curie('/name_sample'), @@ -1528,7 +1526,7 @@ class slots: slots.Molecule_name_mol = Slot(uri=SAMPLE['/name_mol'], name="Molecule_name_mol", curie=SAMPLE.curie('/name_mol'), model_uri=DEFAULT_.Molecule_name_mol, domain=Molecule, range=str) -slots.Molecule_molecular_type = Slot(uri=SAMPLE['/type'], name="Molecule_molecular_type", curie=SAMPLE.curie('/type'), +slots.Molecule_molecular_type = Slot(uri=SAMPLE['/molecular_type'], name="Molecule_molecular_type", curie=SAMPLE.curie('/molecular_type'), model_uri=DEFAULT_.Molecule_molecular_type, domain=Molecule, range=str) slots.Molecule_molecular_class = Slot(uri=SAMPLE['/molecular_class'], name="Molecule_molecular_class", curie=SAMPLE.curie('/molecular_class'), diff --git a/src/oscem_schemas/schema/acquisition.yaml b/src/oscem_schemas/schema/acquisition.yaml index dfe50e5..912ea05 100644 --- a/src/oscem_schemas/schema/acquisition.yaml +++ b/src/oscem_schemas/schema/acquisition.yaml @@ -153,7 +153,11 @@ slots: description: The size of the image in pixels, height and width given. datetime: description: Time and date of the data acquisition - range: datetime + # range is required + range: Any + any_of: + - range: datetime + - range: date exposure_time: description: Time of data acquisition per movie/tilt - in s range: float @@ -182,7 +186,6 @@ slots: description: Phaseplate is a special optics device that can be used to enhance contrast range: Phaseplate instrument_type: - alias: type description: Details of a given specialist instrument range: string spherical_aberration_corrector: diff --git a/src/oscem_schemas/schema/organizational.yaml b/src/oscem_schemas/schema/organizational.yaml index c0274b3..b79855f 100644 --- a/src/oscem_schemas/schema/organizational.yaml +++ b/src/oscem_schemas/schema/organizational.yaml @@ -108,9 +108,8 @@ slots: slot_uri: schema:name institution: range: Institution - description: institution + description: author's institution slot_uri: schema:Organization - multivalued: true name_org: title: Name_org description: Name of the organization diff --git a/src/oscem_schemas/schema/sample.yaml b/src/oscem_schemas/schema/sample.yaml index e5d4aba..3bb67c6 100644 --- a/src/oscem_schemas/schema/sample.yaml +++ b/src/oscem_schemas/schema/sample.yaml @@ -203,7 +203,6 @@ classes: slots: molecular_type: - alias: type title: Type description: Description of the overall supramolecular type, i.e., a complex range: string diff --git a/src/oscem_schemas/schema/types.yaml b/src/oscem_schemas/schema/types.yaml index 895f113..2748729 100644 --- a/src/oscem_schemas/schema/types.yaml +++ b/src/oscem_schemas/schema/types.yaml @@ -6,6 +6,12 @@ imports: - linkml:types classes: + Any: + description: |- + Any type, used as the base for type-narrowing. + + See https://linkml.io/linkml/schemas/advanced.html + class_uri: linkml:Any Range: description: A range constructed from min and max slots: