Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Develop #8

Merged
merged 5 commits into from
Sep 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 6 additions & 63 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,14 @@
# operando catalysis (meta)data schema
# HZB (meta)data schema: operando catalysis

(Meta)data schema for operando catalysis: A datamodel for describing entities and their semantic associations (vocabularies/ontologies) for scientific (particularly catalytic) data at HZB, particularly for operando and in situ characterization of catalytic materials.

At the moment, this schema is organized into 2 separate modules:
* energy definitions (lab-based)
* matter definitions (synchrotron-based)
* catlabs definitions (catalysis lab-based)
* BESSY definitions (synchrotron-based)
* operandoCatalysis definitions (catalysis + synchrotron-based)
* core (common)

# Basic content for our yml schema definitions:
* names, identifiers, and metadata
* id – the unique identifier for the schema, as a IRI
* name – the schema name. Use only alphanumeric characters, underscores, and dashes
* description – a summary of the schema. Can include markdown formatting
* license – CC0 recommended (I put MIT just to have something now, has to be changed)
* modules
* imports – allows for modular development. See imports
* prefix management
* prefixes – A map of prefixes. See prefixes
* default_prefixes – The prefix used for all elements in this schema
* default_curi_maps – prefix maps from prefixcommons
* other
* default_range – The default range for all slots

See also uris-and-mappings: https://linkml.io/linkml/schemas/models.html

# Mappings to:
### Mappings to:
* voc4cat
* Chemical Entities Mixtures and Reactions Ontological Framework
* NeXus definitions?? -
Expand Down Expand Up @@ -57,45 +42,3 @@ Use the `make` command to generate project artefacts:

This project was made with
[linkml-project-cookiecutter](https://github.com/linkml/linkml-project-cookiecutter).




# Conventions and notes
ATM following the same conventions a Biolink. In Biolink Model YAML any class, slot, or type is defined in `sentence case` form. When this model is compiled to various forms (like JSON-Schema, OWL, Markdown) the representation is based on the following convention:

- classes are named in `CamelCase` form
- slots are named in `snake_case` form
- types are named in `snake_case` form

At a glance the structure is as follows,
- Classes

- Entities
- Associations
- Mixins
- Slots
- Predicates
- Node Properties
- Edge Properties
- Types

A `class` represents an entity or an association. A class can have one more `slots` (properties). Within the Biolink Model there are two hierarchies of classes: `Named Things` and `Associations`; Named Things are disjoint from Associations. They do share a common ancestor class: `entity`.

`Named Things`: classes that represent real world entities such as genes, diseases, chemical substances, etc. In a graph serialization, 'Named Things' are represented by nodes in a graph. Each class in the named thing has one or more slots (properties). The root of the "Named Things" hierarchy is the biolink:NamedThing class.

`Associations`: classes that represent an assertion or statement. In RDF sense, an association is an `rdf:Statement`. In a graph formalism, associations are represented using edges in a graph. In general, Associations have three main properties (or slots): subject: the subject of the association; predicate: the predicate or relationship between the subject and the object of the association; object: the object of the association These three properties (or slots) define what Biolink calls a "core triple".

A `slot` is similar to `rdf:Property` where it can link: i) an instance of a class to another instance of a class; ii) an instance of a class to a literal/data type. slot_usage slot can be used to specify how a particular slot ought to be used in a class.

The `mixin:true` setting is used to extend the properties (or slots) of a class, without changing its position in the class hierarchy. Mixins can be extremely helpful in a number of ways: 1) to generalize a set of attributes that can apply to classes in different parts of the class hierarchy, 2) reduce duplication of shared attributes between classes that do not inherit from one another.

The `aliases` slot can be used to define a list of aliases for a Model class (or slot). This is useful for adding synonymous names to your class (or slot).


The `slot_uri` slot can be used to define a canonical URI that is the true representation for that particular slot. That is, the value of slot_uri can be used interchangeably with the slot being defined.

`id_prefixes` slot can be used to define a list of valid ID prefixes that instances of this class ought to have as part of their CURIE. The order of the list matters since its a prioritized list with the ID prefix with the highest priority appearing at the top of the list.

Please check more details here: https://github.com/biolink/biolink-model/blob/master/src/docs/understanding-the-model.md

Binary file modified project/excel/hzb_metadata_schema.xlsx
Binary file not shown.
243 changes: 237 additions & 6 deletions project/graphql/hzb_metadata_schema.graphql
Original file line number Diff line number Diff line change
@@ -1,43 +1,274 @@
# metamodel_version: 1.7.0
type CatalysisSample
type Beamline
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type BeamlineExperiment
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type BeamlineScientist
{
id: Uriorcurie!
iri: String
name: String
category: String!
primaryEmail: String
birthDate: Date
ageInYears: Integer
vitalStatus: PersonStatus
sampleEnvironment: String
gender: GenderEnum
hasEmploymentHistory: [String]
}

type CatalysisSample
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type CatalysisSampleCollection
{
entries: [CatalysisSample]
}

type Catalyst
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

interface ChemicalOrDrugOrTreatment
{
}

type DataCite
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type Device
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type EMILOAESE
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type EMILPink
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

interface Entity
{
id: Uriorcurie!
iri: String
name: String
}

type NamedThing
type Experiment
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type Sample
type Measurement
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type Mixture
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type MySpot
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type NamedEntity
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type Parameter
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type Person
{
id: Uriorcurie!
iri: String
name: String
category: String!
primaryEmail: String
birthDate: Date
ageInYears: Integer
vitalStatus: PersonStatus
gender: GenderEnum
hasEmploymentHistory: [String]
}

type PowderCatalyst
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type Process
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type Project
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type Reaction
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type ReactionProduct
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type ReactionProductCollection
{
entries: [ReactionProduct]
}

type Reactor
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type Recipe
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type Sample
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type SampleCollection
{
entries: [Sample]
}

type SampleEnvironment
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type SamplePositioning
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type Scientist
{
id: Uriorcurie!
iri: String
name: String
category: String!
primaryEmail: String
birthDate: Date
ageInYears: Integer
gender: GenderEnum
hasEmploymentHistory: [String]
}

type ThinFilmCatalyst
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

type Workflow
{
id: Uriorcurie!
iri: String
name: String
category: String!
}

Loading
Loading