From 4664636bc17d05ef4e3e65ea800ab27077db6f89 Mon Sep 17 00:00:00 2001 From: Deepak Date: Fri, 29 Apr 2022 15:41:59 +0200 Subject: [PATCH 1/3] Hot fix (#62) * Fix range for slots in Dataset * Bump version to 0.7.0 * Add case control status slot to Sample * Add enum for capturing paired end or single end status --- src/schema/ghga.yaml | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/src/schema/ghga.yaml b/src/schema/ghga.yaml index adc15fab..61df4b0d 100644 --- a/src/schema/ghga.yaml +++ b/src/schema/ghga.yaml @@ -2,7 +2,7 @@ id: https://w3id.org/GHGA-Metadata-Schema name: GHGA-Metadata-Schema description: >- The metadata schema for the German Human Genome-Phenome Archive (GHGA). -version: 0.6.0 +version: 0.7.0 imports: - linkml:types @@ -713,6 +713,7 @@ classes: - name - type - description + - case control status - vital status at sampling - isolation - storage @@ -1086,15 +1087,15 @@ classes: inlined_as_list: true has experiment: description: >- - One or more Analysis entities that are referenced by this Dataset. - range: analysis + One or more Experiment entities that are referenced by this Dataset. + range: experiment multivalued: true inlined: true inlined_as_list: true has sample: description: >- One or more Sample entities that are referenced by this Dataset. - range: study + range: sample multivalued: true required: true inlined: true @@ -1102,13 +1103,14 @@ classes: has analysis: description: >- One or more Analysis entities that are referenced by this Dataset. - range: study + range: analysis multivalued: true inlined: true inlined_as_list: true has file: description: >- One or more File entities that collectively are part of this Dataset. + range: file required: true multivalued: true inlined: true @@ -2172,6 +2174,10 @@ slots: description: >- Denotes whether a submitted FASTQ file contains forward (R1) or reverse (R2) reads for paired-end sequencing. The number that identifies each read direction in a paired-end nucleotide sequencing replications. + range: paired or single end enum + in_subset: + - recommended + - public reference chromosome: description: >- @@ -2267,6 +2273,14 @@ slots: - recommended - public + case control status: + description: >- + Whether the sample is to be treated as Case or Control in a Study. + range: case control status enum + in_subset: + - recommended + - public + vital status at sampling: description: >- Vital Status of an Individual at the point of sampling (eg:'Alive', 'Deceased'). @@ -2441,6 +2455,23 @@ enums: description: >- Other format. + case control status enum: + description: >- + Enum to capture whether a Sample in a Study is to be considered as Case or Control. + permissible_values: + control: + description: The Sample is to be treated as Control + case: + description: The Sample is to be treated as Case + + paired or single end enum: + description: >- + Enum to capture whether a sequencing experiment generates reads that are Paired-end or Single-end. + permissible_values: + paired: + description: The reads are Paired-end + single: + description: The reads are Single-end submission status enum: description: >- From 099f7b32fad79d2240c5e94bb4eaf5431e164cdf Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Fri, 29 Apr 2022 13:43:13 +0000 Subject: [PATCH 2/3] Autogenerate artifacts --- artifacts/csv/ghga.csv | 2 +- .../derived_schema/creation/ghga_creation.py | 65 +- .../creation/ghga_creation.schema.json | 36 +- .../creation/ghga_creation.yaml | 44 +- .../creation/ghga_creation_models.py | 25 +- artifacts/graphql/ghga.graphql | 11 +- artifacts/jsonschema/ghga.schema.json | 36 +- artifacts/owl/ghga.owl.ttl | 1134 +++++++++-------- artifacts/pydantic/ghga_models.py | 25 +- artifacts/python/ghga.py | 65 +- artifacts/rdf/ghga.ttl | 253 ++-- artifacts/shex/ghga.shex | 11 +- artifacts/sql/ghga.sql | 96 +- artifacts/sql/ghga_models.py | 9 +- 14 files changed, 1021 insertions(+), 791 deletions(-) diff --git a/artifacts/csv/ghga.csv b/artifacts/csv/ghga.csv index 4a9cb589..2a07ac1f 100644 --- a/artifacts/csv/ghga.csv +++ b/artifacts/csv/ghga.csv @@ -1,5 +1,5 @@ # metamodel_version: 1.7.0 -# version: 0.6.0 +# version: 0.7.0 id,mappings,description accession_mixin,,Mixin for entities that can be assigned a GHGA accession. agent,,"An agent is something that bears some form of responsibility for an activity taking place, for the existence of an entity, or for another agent's activity. Agents include a Person, Organization, or Software that performs an activity." diff --git a/artifacts/derived_schema/creation/ghga_creation.py b/artifacts/derived_schema/creation/ghga_creation.py index 0626a6ed..1fd00d10 100644 --- a/artifacts/derived_schema/creation/ghga_creation.py +++ b/artifacts/derived_schema/creation/ghga_creation.py @@ -1,5 +1,5 @@ # Auto generated from ghga_creation.yaml by pythongen.py version: 0.9.0 -# Generation date: 2022-04-26T10:28:08 +# Generation date: 2022-04-29T13:43:08 # Schema: GHGA-Metadata-Schema # # id: https://w3id.org/GHGA-Metadata-Schema @@ -25,7 +25,7 @@ from linkml_runtime.linkml_model.types import Integer, String metamodel_version = "1.7.0" -version = "0.6.0" +version = "0.7.0" # Overwrite dataclasses _init_fn to add **kwargs in __init__ dataclasses._init_fn = dataclasses_init_fn_with_kwargs @@ -787,7 +787,7 @@ class CreateSequencingProtocol(CreateProtocol): alias: str = None description: str = None sequencing_center: Optional[str] = None - paired_or_single_end: Optional[str] = None + paired_or_single_end: Optional[Union[str, "PairedOrSingleEndEnum"]] = None sequencing_read_length: Optional[str] = None index_sequence: Optional[str] = None target_coverage: Optional[str] = None @@ -823,8 +823,8 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.sequencing_center is not None and not isinstance(self.sequencing_center, str): self.sequencing_center = str(self.sequencing_center) - if self.paired_or_single_end is not None and not isinstance(self.paired_or_single_end, str): - self.paired_or_single_end = str(self.paired_or_single_end) + if self.paired_or_single_end is not None and not isinstance(self.paired_or_single_end, PairedOrSingleEndEnum): + self.paired_or_single_end = PairedOrSingleEndEnum(self.paired_or_single_end) if self.sequencing_read_length is not None and not isinstance(self.sequencing_read_length, str): self.sequencing_read_length = str(self.sequencing_read_length) @@ -1107,6 +1107,7 @@ class CreateSample(MaterialEntity): description: str = None alias: str = None type: Optional[str] = None + case_control_status: Optional[Union[str, "CaseControlStatusEnum"]] = None vital_status_at_sampling: Optional[Union[str, "VitalStatusEnum"]] = None isolation: Optional[str] = None storage: Optional[str] = None @@ -1137,6 +1138,9 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.type is not None and not isinstance(self.type, str): self.type = str(self.type) + if self.case_control_status is not None and not isinstance(self.case_control_status, CaseControlStatusEnum): + self.case_control_status = CaseControlStatusEnum(self.case_control_status) + if self.vital_status_at_sampling is not None and not isinstance(self.vital_status_at_sampling, VitalStatusEnum): self.vital_status_at_sampling = VitalStatusEnum(self.vital_status_at_sampling) @@ -1610,9 +1614,9 @@ class CreateDataset(InformationContentEntity): alias: str = None type: Optional[str] = None has_study: Optional[Union[Union[dict, CreateStudy], List[Union[dict, CreateStudy]]]] = empty_list() - has_experiment: Optional[Union[Union[dict, CreateAnalysis], List[Union[dict, CreateAnalysis]]]] = empty_list() - has_sample: Optional[Union[Union[dict, CreateStudy], List[Union[dict, CreateStudy]]]] = empty_list() - has_analysis: Optional[Union[Union[dict, CreateStudy], List[Union[dict, CreateStudy]]]] = empty_list() + has_experiment: Optional[Union[Union[dict, CreateExperiment], List[Union[dict, CreateExperiment]]]] = empty_list() + has_sample: Optional[Union[Union[dict, CreateSample], List[Union[dict, CreateSample]]]] = empty_list() + has_analysis: Optional[Union[Union[dict, CreateAnalysis], List[Union[dict, CreateAnalysis]]]] = empty_list() has_publication: Optional[Union[Union[dict, "CreatePublication"], List[Union[dict, "CreatePublication"]]]] = empty_list() release_status: Optional[Union[str, "ReleaseStatusEnum"]] = None accession: Optional[str] = None @@ -1656,15 +1660,15 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.has_experiment, list): self.has_experiment = [self.has_experiment] if self.has_experiment is not None else [] - self.has_experiment = [v if isinstance(v, CreateAnalysis) else CreateAnalysis(**as_dict(v)) for v in self.has_experiment] + self.has_experiment = [v if isinstance(v, CreateExperiment) else CreateExperiment(**as_dict(v)) for v in self.has_experiment] if not isinstance(self.has_sample, list): self.has_sample = [self.has_sample] if self.has_sample is not None else [] - self.has_sample = [v if isinstance(v, CreateStudy) else CreateStudy(**as_dict(v)) for v in self.has_sample] + self.has_sample = [v if isinstance(v, CreateSample) else CreateSample(**as_dict(v)) for v in self.has_sample] if not isinstance(self.has_analysis, list): self.has_analysis = [self.has_analysis] if self.has_analysis is not None else [] - self.has_analysis = [v if isinstance(v, CreateStudy) else CreateStudy(**as_dict(v)) for v in self.has_analysis] + self.has_analysis = [v if isinstance(v, CreateAnalysis) else CreateAnalysis(**as_dict(v)) for v in self.has_analysis] if not isinstance(self.has_publication, list): self.has_publication = [self.has_publication] if self.has_publication is not None else [] @@ -2523,6 +2527,34 @@ class FileFormatEnum(EnumDefinitionImpl): description="Enum to capture file types.", ) +class CaseControlStatusEnum(EnumDefinitionImpl): + """ + Enum to capture whether a Sample in a Study is to be considered as Case or Control. + """ + control = PermissibleValue(text="control", + description="The Sample is to be treated as Control") + case = PermissibleValue(text="case", + description="The Sample is to be treated as Case") + + _defn = EnumDefinition( + name="CaseControlStatusEnum", + description="Enum to capture whether a Sample in a Study is to be considered as Case or Control.", + ) + +class PairedOrSingleEndEnum(EnumDefinitionImpl): + """ + Enum to capture whether a sequencing experiment generates reads that are Paired-end or Single-end. + """ + paired = PermissibleValue(text="paired", + description="The reads are Paired-end") + single = PermissibleValue(text="single", + description="The reads are Single-end") + + _defn = EnumDefinition( + name="PairedOrSingleEndEnum", + description="Enum to capture whether a sequencing experiment generates reads that are Paired-end or Single-end.", + ) + class SubmissionStatusEnum(EnumDefinitionImpl): """ Enum to capture the status of a Submission. @@ -2921,7 +2953,7 @@ class slots: model_uri=GHGA.index_sequence, domain=None, range=Optional[str]) slots.paired_or_single_end = Slot(uri=GHGA.paired_or_single_end, name="paired or single end", curie=GHGA.curie('paired_or_single_end'), - model_uri=GHGA.paired_or_single_end, domain=None, range=Optional[str]) + model_uri=GHGA.paired_or_single_end, domain=None, range=Optional[Union[str, "PairedOrSingleEndEnum"]]) slots.reference_chromosome = Slot(uri=GHGA.reference_chromosome, name="reference chromosome", curie=GHGA.curie('reference_chromosome'), model_uri=GHGA.reference_chromosome, domain=None, range=Optional[str]) @@ -2962,6 +2994,9 @@ class slots: slots.sample_barcode_read = Slot(uri=GHGA.sample_barcode_read, name="sample barcode read", curie=GHGA.curie('sample_barcode_read'), model_uri=GHGA.sample_barcode_read, domain=None, range=Optional[str]) +slots.case_control_status = Slot(uri=GHGA.case_control_status, name="case control status", curie=GHGA.curie('case_control_status'), + model_uri=GHGA.case_control_status, domain=None, range=Optional[Union[str, "CaseControlStatusEnum"]]) + slots.vital_status_at_sampling = Slot(uri=GHGA.vital_status_at_sampling, name="vital status at sampling", curie=GHGA.curie('vital_status_at_sampling'), model_uri=GHGA.vital_status_at_sampling, domain=None, range=Optional[Union[str, "VitalStatusEnum"]]) @@ -3344,13 +3379,13 @@ class slots: model_uri=GHGA.create_dataset_has_study, domain=CreateDataset, range=Optional[Union[Union[dict, CreateStudy], List[Union[dict, CreateStudy]]]]) slots.create_dataset_has_experiment = Slot(uri=GHGA.has_experiment, name="create dataset_has experiment", curie=GHGA.curie('has_experiment'), - model_uri=GHGA.create_dataset_has_experiment, domain=CreateDataset, range=Optional[Union[Union[dict, CreateAnalysis], List[Union[dict, CreateAnalysis]]]]) + model_uri=GHGA.create_dataset_has_experiment, domain=CreateDataset, range=Optional[Union[Union[dict, CreateExperiment], List[Union[dict, CreateExperiment]]]]) slots.create_dataset_has_sample = Slot(uri=GHGA.has_sample, name="create dataset_has sample", curie=GHGA.curie('has_sample'), - model_uri=GHGA.create_dataset_has_sample, domain=CreateDataset, range=Optional[Union[Union[dict, CreateStudy], List[Union[dict, CreateStudy]]]]) + model_uri=GHGA.create_dataset_has_sample, domain=CreateDataset, range=Optional[Union[Union[dict, CreateSample], List[Union[dict, CreateSample]]]]) slots.create_dataset_has_analysis = Slot(uri=GHGA.has_analysis, name="create dataset_has analysis", curie=GHGA.curie('has_analysis'), - model_uri=GHGA.create_dataset_has_analysis, domain=CreateDataset, range=Optional[Union[Union[dict, CreateStudy], List[Union[dict, CreateStudy]]]]) + model_uri=GHGA.create_dataset_has_analysis, domain=CreateDataset, range=Optional[Union[Union[dict, CreateAnalysis], List[Union[dict, CreateAnalysis]]]]) slots.create_dataset_has_file = Slot(uri=GHGA.has_file, name="create dataset_has file", curie=GHGA.curie('has_file'), model_uri=GHGA.create_dataset_has_file, domain=CreateDataset, range=Union[Union[dict, CreateFile], List[Union[dict, CreateFile]]]) diff --git a/artifacts/derived_schema/creation/ghga_creation.schema.json b/artifacts/derived_schema/creation/ghga_creation.schema.json index 28866b73..4e187e67 100644 --- a/artifacts/derived_schema/creation/ghga_creation.schema.json +++ b/artifacts/derived_schema/creation/ghga_creation.schema.json @@ -63,6 +63,15 @@ "title": "BiologicalSexEnum", "type": "string" }, + "CaseControlStatusEnum": { + "description": "Enum to capture whether a Sample in a Study is to be considered as Case or Control.", + "enum": [ + "control", + "case" + ], + "title": "CaseControlStatusEnum", + "type": "string" + }, "CreateAgent": { "additionalProperties": false, "description": "An agent is something that bears some form of responsibility for an activity taking place, for the existence of an entity, or for another agent's activity. Agents include a Person, Organization, or Software that performs an activity.", @@ -980,7 +989,7 @@ "items": { "oneOf": [ { - "$ref": "#/$defs/CreateStudy" + "$ref": "#/$defs/CreateAnalysis" }, { "type": "string" @@ -1012,11 +1021,11 @@ ] }, "has_experiment": { - "description": "One or more Analysis entities that are referenced by this Dataset.", + "description": "One or more Experiment entities that are referenced by this Dataset.", "items": { "oneOf": [ { - "$ref": "#/$defs/CreateAnalysis" + "$ref": "#/$defs/CreateExperiment" }, { "type": "string" @@ -1058,7 +1067,7 @@ "items": { "oneOf": [ { - "$ref": "#/$defs/CreateStudy" + "$ref": "#/$defs/CreateSample" }, { "type": "string" @@ -2372,6 +2381,10 @@ "description": "The alias for an entity.", "type": "string" }, + "case_control_status": { + "$ref": "#/$defs/CaseControlStatusEnum", + "description": "Whether the sample is to be treated as Case or Control in a Study." + }, "description": { "description": "Short textual description of the sample (How the sample was collected, sample source, protocol followed for processing the sample etc).", "type": "string" @@ -2545,8 +2558,8 @@ "type": "string" }, "paired_or_single_end": { - "description": "Denotes whether a submitted FASTQ file contains forward (R1) or reverse (R2) reads for paired-end sequencing. The number that identifies each read direction in a paired-end nucleotide sequencing replications.", - "type": "string" + "$ref": "#/$defs/PairedOrSingleEndEnum", + "description": "Denotes whether a submitted FASTQ file contains forward (R1) or reverse (R2) reads for paired-end sequencing. The number that identifies each read direction in a paired-end nucleotide sequencing replications." }, "sample_barcode_read": { "description": "The type of read that contains the sample barcode (eg: index1/index2/read1/read2).", @@ -3102,6 +3115,15 @@ "title": "FileFormatEnum", "type": "string" }, + "PairedOrSingleEndEnum": { + "description": "Enum to capture whether a sequencing experiment generates reads that are Paired-end or Single-end.", + "enum": [ + "paired", + "single" + ], + "title": "PairedOrSingleEndEnum", + "type": "string" + }, "ReleaseStatusEnum": { "description": "Enum to capture the release status of an entity.", "enum": [ @@ -3187,6 +3209,6 @@ "required": [], "title": "GHGA-Metadata-Schema", "type": "object", - "version": "0.6.0" + "version": "0.7.0" } diff --git a/artifacts/derived_schema/creation/ghga_creation.yaml b/artifacts/derived_schema/creation/ghga_creation.yaml index 6165ceef..60aedd26 100644 --- a/artifacts/derived_schema/creation/ghga_creation.yaml +++ b/artifacts/derived_schema/creation/ghga_creation.yaml @@ -2,7 +2,7 @@ id: https://w3id.org/GHGA-Metadata-Schema name: GHGA-Metadata-Schema description: >- The metadata schema for the German Human Genome-Phenome Archive (GHGA). -version: 0.6.0 +version: 0.7.0 imports: - linkml:types @@ -153,6 +153,24 @@ enums: description: >- Other format. + case control status enum: + description: >- + Enum to capture whether a Sample in a Study is to be considered as Case or Control. + permissible_values: + control: + description: The Sample is to be treated as Control + case: + description: The Sample is to be treated as Case + + paired or single end enum: + description: >- + Enum to capture whether a sequencing experiment generates reads that are Paired-end + or Single-end. + permissible_values: + paired: + description: The reads are Paired-end + single: + description: The reads are Single-end submission status enum: description: >- @@ -233,7 +251,7 @@ enums: description: Age above 80. unknown: description: Age range unknown. -comments: This schema was autogenerated from the GHGA Metadata Schema 0.6.0 and is +comments: This schema was autogenerated from the GHGA Metadata Schema 0.7.0 and is intended solely for consumption by GHGA microservices. slots: schema type: @@ -881,6 +899,10 @@ slots: reads for paired-end sequencing. The number that identifies each read direction in a paired-end nucleotide sequencing replications. + range: paired or single end enum + in_subset: + - recommended + - public reference chromosome: description: >- @@ -982,6 +1004,14 @@ slots: - recommended - public + case control status: + description: >- + Whether the sample is to be treated as Case or Control in a Study. + range: case control status enum + in_subset: + - recommended + - public + vital status at sampling: description: >- Vital Status of an Individual at the point of sampling (eg:'Alive', 'Deceased'). @@ -1736,6 +1766,7 @@ classes: - name - type - description + - case control status - vital status at sampling - isolation - storage @@ -2120,8 +2151,8 @@ classes: inlined_as_list: true has experiment: description: >- - One or more Analysis entities that are referenced by this Dataset. - range: create analysis + One or more Experiment entities that are referenced by this Dataset. + range: create experiment multivalued: true inlined: true inlined_as_list: true @@ -2129,7 +2160,7 @@ classes: has sample: description: >- One or more Sample entities that are referenced by this Dataset. - range: create study + range: create sample multivalued: true required: false inlined: true @@ -2137,7 +2168,7 @@ classes: has analysis: description: >- One or more Analysis entities that are referenced by this Dataset. - range: create study + range: create analysis multivalued: true inlined: true inlined_as_list: true @@ -2145,6 +2176,7 @@ classes: has file: description: >- One or more File entities that collectively are part of this Dataset. + range: create file required: true multivalued: true inlined: true diff --git a/artifacts/derived_schema/creation/ghga_creation_models.py b/artifacts/derived_schema/creation/ghga_creation_models.py index fba8c6c3..8a3d0a1f 100644 --- a/artifacts/derived_schema/creation/ghga_creation_models.py +++ b/artifacts/derived_schema/creation/ghga_creation_models.py @@ -4,7 +4,7 @@ from pydantic import BaseModel, Field metamodel_version = "None" -version = "0.6.0" +version = "0.7.0" class BiologicalSexEnum(str, Enum): @@ -67,6 +67,20 @@ class FileFormatEnum(str, Enum): +class CaseControlStatusEnum(str, Enum): + + control = "control" + case = "case" + + + +class PairedOrSingleEndEnum(str, Enum): + + paired = "paired" + single = "single" + + + class SubmissionStatusEnum(str, Enum): in_progress = "in_progress" @@ -814,7 +828,7 @@ class CreateSequencingProtocol(CreateProtocol): """ sequencing_center: Optional[str] = Field(None, description="""Center where sample was sequenced.""") instrument_model: str = Field(None, description="""The name and model of the technology platform used to perform sequencing.""") - paired_or_single_end: Optional[str] = Field(None, description="""Denotes whether a submitted FASTQ file contains forward (R1) or reverse (R2) reads for paired-end sequencing. The number that identifies each read direction in a paired-end nucleotide sequencing replications.""") + paired_or_single_end: Optional[PairedOrSingleEndEnum] = Field(None, description="""Denotes whether a submitted FASTQ file contains forward (R1) or reverse (R2) reads for paired-end sequencing. The number that identifies each read direction in a paired-end nucleotide sequencing replications.""") sequencing_read_length: Optional[str] = Field(None, description="""Length of sequencing reads (eg: Long or short or actual number of the read length etc). The number of nucleotides successfully ordered from each side of a nucleic acid fragment obtained after the completion of a sequencing process""") index_sequence: Optional[str] = Field(None, description="""A unique nucleotide sequence that is added to a sample during library preparation to serve as a unique identifier for the sample.""") target_coverage: Optional[str] = Field(None, description="""Mean coverage for whole genome sequencing, or mean target coverage for whole exome and targeted sequencing. The number of times a particular locus (site, nucleotide, amplicon, region) was sequenced.""") @@ -848,6 +862,7 @@ class CreateSample(MaterialEntity): name: str = Field(None, description="""Name of the sample (eg:GHGAS_Blood_Sample1 or GHGAS_PBMC_RNAseq_S1).""") type: Optional[str] = Field(None, description="""The type of sample.""") description: str = Field(None, description="""Short textual description of the sample (How the sample was collected, sample source, protocol followed for processing the sample etc).""") + case_control_status: Optional[CaseControlStatusEnum] = Field(None, description="""Whether the sample is to be treated as Case or Control in a Study.""") vital_status_at_sampling: Optional[VitalStatusEnum] = Field(None, description="""Vital Status of an Individual at the point of sampling (eg:'Alive', 'Deceased').""") isolation: Optional[str] = Field(None, description="""Method or device employed for collecting/isolating a biospecimen or a sample.""") storage: Optional[str] = Field(None, description="""Methods by which a biospecimen or a sample is stored (e.g. frozen in liquid nitrogen).""") @@ -980,9 +995,9 @@ class CreateDataset(InformationContentEntity): description: str = Field(None, description="""Description of an entity.""") type: Optional[str] = Field(None, description="""The type of an entity.""") has_study: Optional[Union[List[CreateStudy], List[str]]] = Field(None, description="""One or more Study entities that are referenced by this Dataset.""") - has_experiment: Optional[Union[List[CreateAnalysis], List[str]]] = Field(None, description="""One or more Analysis entities that are referenced by this Dataset.""") - has_sample: Optional[Union[List[CreateStudy], List[str]]] = Field(None, description="""One or more Sample entities that are referenced by this Dataset.""") - has_analysis: Optional[Union[List[CreateStudy], List[str]]] = Field(None, description="""One or more Analysis entities that are referenced by this Dataset.""") + has_experiment: Optional[Union[List[CreateExperiment], List[str]]] = Field(None, description="""One or more Experiment entities that are referenced by this Dataset.""") + has_sample: Optional[Union[List[CreateSample], List[str]]] = Field(None, description="""One or more Sample entities that are referenced by this Dataset.""") + has_analysis: Optional[Union[List[CreateAnalysis], List[str]]] = Field(None, description="""One or more Analysis entities that are referenced by this Dataset.""") has_file: Union[List[CreateFile], List[str]] = Field(None, description="""One or more File entities that collectively are part of this Dataset.""") has_data_access_policy: Union[CreateDataAccessPolicy, str] = Field(None, description="""The Data Access Policy that applies to this Dataset.""") accession: Optional[str] = Field(None, description="""A unique GHGA identifier assigned to an entity for the sole purpose of referring to that entity in a global scope.""") diff --git a/artifacts/graphql/ghga.graphql b/artifacts/graphql/ghga.graphql index fbf6746d..48a24676 100644 --- a/artifacts/graphql/ghga.graphql +++ b/artifacts/graphql/ghga.graphql @@ -1,5 +1,5 @@ # metamodel_version: 1.7.0 -# version: 0.6.0 +# version: 0.7.0 interface AccessionMixin { accession: String @@ -284,9 +284,9 @@ type Dataset implements AccessionMixin, EgaAccessionMixin, PublicationMixin, Rel description: String! type: String hasStudy: [Study]! - hasExperiment: [Analysis] - hasSample: [Study]! - hasAnalysis: [Study] + hasExperiment: [Experiment] + hasSample: [Sample]! + hasAnalysis: [Analysis] hasFile: [File]! hasDataAccessPolicy: DataAccessPolicy! alias: String! @@ -717,6 +717,7 @@ type Sample implements AccessionMixin, EgaAccessionMixin, AttributeMixin name: String! type: String description: String! + caseControlStatus: CaseControlStatusEnum vitalStatusAtSampling: VitalStatusEnum isolation: String storage: String @@ -743,7 +744,7 @@ type SequencingProtocol xref: [String] sequencingCenter: String instrumentModel: String! - pairedOrSingleEnd: String + pairedOrSingleEnd: PairedOrSingleEndEnum sequencingReadLength: String indexSequence: String targetCoverage: String diff --git a/artifacts/jsonschema/ghga.schema.json b/artifacts/jsonschema/ghga.schema.json index 85aad63d..b603a2b8 100644 --- a/artifacts/jsonschema/ghga.schema.json +++ b/artifacts/jsonschema/ghga.schema.json @@ -607,6 +607,15 @@ "title": "Biospecimen", "type": "object" }, + "CaseControlStatusEnum": { + "description": "Enum to capture whether a Sample in a Study is to be considered as Case or Control.", + "enum": [ + "control", + "case" + ], + "title": "CaseControlStatusEnum", + "type": "string" + }, "CellLine": { "additionalProperties": false, "description": "A cultured cell population that represents a genetically stable and homogenous population of cultured cells that shares a common propagation history.", @@ -1144,7 +1153,7 @@ "items": { "oneOf": [ { - "$ref": "#/$defs/Study" + "$ref": "#/$defs/Analysis" }, { "type": "string" @@ -1176,11 +1185,11 @@ ] }, "has_experiment": { - "description": "One or more Analysis entities that are referenced by this Dataset.", + "description": "One or more Experiment entities that are referenced by this Dataset.", "items": { "oneOf": [ { - "$ref": "#/$defs/Analysis" + "$ref": "#/$defs/Experiment" }, { "type": "string" @@ -1222,7 +1231,7 @@ "items": { "oneOf": [ { - "$ref": "#/$defs/Study" + "$ref": "#/$defs/Sample" }, { "type": "string" @@ -2533,6 +2542,15 @@ "title": "Member", "type": "object" }, + "PairedOrSingleEndEnum": { + "description": "Enum to capture whether a sequencing experiment generates reads that are Paired-end or Single-end.", + "enum": [ + "paired", + "single" + ], + "title": "PairedOrSingleEndEnum", + "type": "string" + }, "PhenotypicFeature": { "additionalProperties": false, "description": "The observable form taken by some character (or group of characters) in an individual or an organism, excluding pathology and disease. The detectable outward manifestations of a specific genotype.", @@ -2827,6 +2845,10 @@ "description": "The alias for an entity.", "type": "string" }, + "case_control_status": { + "$ref": "#/$defs/CaseControlStatusEnum", + "description": "Whether the sample is to be treated as Case or Control in a Study." + }, "creation_date": { "description": "Timestamp (in ISO 8601 format) when the entity was created.", "type": "string" @@ -3014,8 +3036,8 @@ "type": "string" }, "paired_or_single_end": { - "description": "Denotes whether a submitted FASTQ file contains forward (R1) or reverse (R2) reads for paired-end sequencing. The number that identifies each read direction in a paired-end nucleotide sequencing replications.", - "type": "string" + "$ref": "#/$defs/PairedOrSingleEndEnum", + "description": "Denotes whether a submitted FASTQ file contains forward (R1) or reverse (R2) reads for paired-end sequencing. The number that identifies each read direction in a paired-end nucleotide sequencing replications." }, "sample_barcode_read": { "description": "The type of read that contains the sample barcode (eg: index1/index2/read1/read2).", @@ -3699,6 +3721,6 @@ "required": [], "title": "GHGA-Metadata-Schema", "type": "object", - "version": "0.6.0" + "version": "0.7.0" } diff --git a/artifacts/owl/ghga.owl.ttl b/artifacts/owl/ghga.owl.ttl index d94fef38..59a79681 100644 --- a/artifacts/owl/ghga.owl.ttl +++ b/artifacts/owl/ghga.owl.ttl @@ -28,12 +28,12 @@ GHGA:ReleaseStatusMixin, GHGA:WorkflowParameter ; dcterms:license "https://creativecommons.org/publicdomain/zero/1.0/" ; - pav:version "0.6.0" ; - linkml:generation_date "2022-04-26T10:27:56" ; + pav:version "0.7.0" ; + linkml:generation_date "2022-04-29T13:42:53" ; linkml:metamodel_version "1.7.0" ; linkml:source_file "ghga.yaml" ; - linkml:source_file_date "2022-04-26T10:27:24" ; - linkml:source_file_size 72332 . + linkml:source_file_date "2022-04-29T13:42:15" ; + linkml:source_file_size 73283 . GHGA:CellLine a owl:Class, linkml:ClassDefinition ; @@ -47,12 +47,12 @@ GHGA:Cohort a owl:Class, linkml:ClassDefinition ; rdfs:label "cohort" ; rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom GHGA:Individual ; + owl:onProperty GHGA:has_member ], + [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:accession ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Individual ; - owl:onProperty GHGA:has_member ], GHGA:AccessionMixin, GHGA:Population ; skos:definition "A cohort is a collection of individuals that share a common characteristic/observation and have been grouped together for a research study/investigation." . @@ -68,6 +68,9 @@ GHGA:Family a owl:Class, linkml:ClassDefinition ; rdfs:label "family" ; rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom GHGA:Individual ; + owl:onProperty GHGA:has_member ], + [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Individual ; owl:onProperty GHGA:has_proband ], @@ -75,9 +78,6 @@ GHGA:Family a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:accession ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Individual ; - owl:onProperty GHGA:has_member ], GHGA:AccessionMixin, GHGA:Population ; skos:definition "A domestic group, or a number of domestic groups linked through descent (demonstrated or stipulated) from a common ancestor, marriage, or adoption." . @@ -86,60 +86,60 @@ GHGA:LibraryPreparationProtocol a owl:Class, linkml:ClassDefinition ; rdfs:label "library preparation protocol" ; rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom GHGA:Attribute ; + owl:onProperty GHGA:has_attribute ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_layout ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:end_bias ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:library_preparation_kit_manufacturer ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:end_bias ], + owl:onProperty GHGA:library_preparation ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:target_regions ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:primer ], + owl:onProperty GHGA:library_selection ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:description ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:rnaseq_strandedness ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_preparation_kit_retail_name ; + owl:onProperty GHGA:library_name ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_preparation ; + owl:onProperty GHGA:library_preparation_kit_retail_name ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_name ; + owl:onProperty GHGA:library_layout ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:rnaseq_strandedness ], + owl:onProperty GHGA:primer ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_selection ; + owl:onProperty GHGA:alias ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:library_type ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:alias ; - owl:qualifiedCardinality 1 ], GHGA:Protocol ; skos:definition "Information about the library preparation of an Experiment." . @@ -147,84 +147,84 @@ GHGA:SequencingProtocol a owl:Class, linkml:ClassDefinition ; rdfs:label "sequencing protocol" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:alias ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:umi_barcode_offset ], [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:instrument_model ; - owl:qualifiedCardinality 1 ], + owl:allValuesFrom GHGA:Attribute ; + owl:onProperty GHGA:has_attribute ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:umi_barcode_read ], + owl:onClass GHGA:PairedOrSingleEndEnum ; + owl:onProperty GHGA:paired_or_single_end ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:index_sequence ], + owl:onProperty GHGA:umi_barcode_size ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:lane_number ], + owl:onProperty GHGA:description ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:flow_cell_id ], + owl:onProperty GHGA:instrument_model ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:flow_cell_type ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], + owl:onProperty GHGA:cell_barcode_read ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:sequencing_center ], + owl:onProperty GHGA:sample_barcode_read ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ; + owl:onProperty GHGA:alias ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:cell_barcode_size ], + owl:onProperty GHGA:target_coverage ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:cell_barcode_read ], + owl:onProperty GHGA:cell_barcode_offset ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:cell_barcode_offset ], + owl:onProperty GHGA:sequencing_center ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:paired_or_single_end ], + owl:onProperty GHGA:flow_cell_id ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:sequencing_read_length ], + owl:onProperty GHGA:index_sequence ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:umi_barcode_size ], + owl:onProperty GHGA:flow_cell_type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:type ], + owl:onProperty GHGA:cell_barcode_size ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:sample_barcode_read ], + owl:onProperty GHGA:lane_number ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:target_coverage ], + owl:onProperty GHGA:sequencing_read_length ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:umi_barcode_read ], GHGA:Protocol ; skos:definition "Information about the sequencing of a sample." . @@ -232,72 +232,72 @@ GHGA:Submission a owl:Class, linkml:ClassDefinition ; rdfs:label "submission" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom GHGA:Experiment ; - owl:onProperty GHGA:has_experiment ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_file ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:schema_version ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Study ; - owl:onProperty GHGA:has_study ], + owl:allValuesFrom GHGA:Biospecimen ; + owl:onProperty GHGA:has_biospecimen ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:schema_type ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Individual ; - owl:onProperty GHGA:has_individual ], - [ a owl:Class ; - owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom GHGA:Protocol ; - owl:onProperty GHGA:has_protocol ] [ a owl:Restriction ; - owl:onProperty GHGA:has_protocol ; - owl:someValuesFrom GHGA:Protocol ] ) ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:affiliation ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Publication ; - owl:onProperty GHGA:has_publication ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Sample ; owl:onProperty GHGA:has_sample ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Publication ; + owl:onProperty GHGA:has_publication ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:update_date ], + owl:onProperty GHGA:schema_version ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:SubmissionStatusEnum ; - owl:onProperty GHGA:submission_status ], - [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:id ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:submission_date ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Analysis ; owl:onProperty GHGA:has_analysis ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:Biospecimen ; - owl:onProperty GHGA:has_biospecimen ], + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_file ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Project ; + owl:onProperty GHGA:has_project ], + [ a owl:Class ; + owl:intersectionOf ( [ a owl:Restriction ; + owl:allValuesFrom GHGA:Protocol ; + owl:onProperty GHGA:has_protocol ] [ a owl:Restriction ; + owl:onProperty GHGA:has_protocol ; + owl:someValuesFrom GHGA:Protocol ] ) ], + [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:submission_date ], + owl:onProperty GHGA:id ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:SubmissionStatusEnum ; + owl:onProperty GHGA:submission_status ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:creation_date ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Project ; - owl:onProperty GHGA:has_project ], + owl:onClass GHGA:Study ; + owl:onProperty GHGA:has_study ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Experiment ; + owl:onProperty GHGA:has_experiment ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:update_date ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Individual ; + owl:onProperty GHGA:has_individual ], GHGA:MetadataMixin ; skos:definition "A grouping entity that represents information about one or more entities. A submission can be considered as a set of inter-related (and inter-connected) entities that represent a data submission to GHGA." . @@ -395,13 +395,13 @@ GHGA:DataUseCondition a owl:Class, linkml:ClassDefinition ; rdfs:label "data use condition" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:DataUseModifier ; - owl:onProperty GHGA:has_data_use_modifier ], - [ a owl:Restriction ; owl:onClass GHGA:DataUsePermission ; owl:onProperty GHGA:has_data_use_permission ; owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:DataUseModifier ; + owl:onProperty GHGA:has_data_use_modifier ], GHGA:InformationContentEntity ; skos:definition "Data Use Condition represents the use conditions associated with a policy." . @@ -409,18 +409,6 @@ GHGA:Dataset a owl:Class, linkml:ClassDefinition ; rdfs:label "dataset" ; rdfs:subClassOf [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:alias ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:ReleaseStatusEnum ; - owl:onProperty GHGA:release_status ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:release_date ], - [ a owl:Restriction ; owl:allValuesFrom GHGA:Publication ; owl:onProperty GHGA:has_publication ], [ a owl:Class ; @@ -431,23 +419,41 @@ GHGA:Dataset a owl:Class, owl:someValuesFrom GHGA:File ] ) ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ; + owl:onProperty GHGA:title ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:Analysis ; - owl:onProperty GHGA:has_experiment ], + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:release_date ], [ a owl:Restriction ; - owl:onClass GHGA:DataAccessPolicy ; - owl:onProperty GHGA:has_data_access_policy ; + owl:onClass linkml:String ; + owl:onProperty GHGA:alias ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:title ; + owl:onProperty GHGA:accession ], + [ a owl:Restriction ; + owl:onClass GHGA:DataAccessPolicy ; + owl:onProperty GHGA:has_data_access_policy ; owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Analysis ; + owl:onProperty GHGA:has_analysis ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:ReleaseStatusEnum ; + owl:onProperty GHGA:release_status ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:ega_accession ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Attribute ; + owl:onProperty GHGA:has_attribute ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Experiment ; + owl:onProperty GHGA:has_experiment ], [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; owl:allValuesFrom GHGA:Study ; @@ -460,20 +466,14 @@ GHGA:Dataset a owl:Class, owl:onProperty GHGA:type ], [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom GHGA:Study ; + owl:allValuesFrom GHGA:Sample ; owl:onProperty GHGA:has_sample ] [ a owl:Restriction ; owl:onProperty GHGA:has_sample ; - owl:someValuesFrom GHGA:Study ] ) ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Study ; - owl:onProperty GHGA:has_analysis ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], + owl:someValuesFrom GHGA:Sample ] ) ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:accession ], + owl:onProperty GHGA:description ; + owl:qualifiedCardinality 1 ], GHGA:AccessionMixin, GHGA:AttributeMixin, GHGA:EgaAccessionMixin, @@ -487,13 +487,13 @@ GHGA:DeprecatedMixin a owl:Class, linkml:ClassDefinition ; rdfs:label "deprecated mixin" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:NamedThing ; - owl:onProperty GHGA:replaced_by ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:deprecation_date ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:NamedThing ; + owl:onProperty GHGA:replaced_by ], linkml:mixin ; skos:definition "Mixin for entities that can be deprecated." . @@ -503,11 +503,11 @@ GHGA:ResearchActivity a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:title ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:title ], + owl:onProperty GHGA:description ], GHGA:PlannedProcess ; skos:definition "A planned process executed in the performance of scientific research wherein systematic investigations are performed to establish facts and reach new conclusions about phenomena in the world." ; skos:exactMatch . @@ -543,6 +543,12 @@ GHGA:biological_replicates a owl:ObjectProperty, skos:definition "A biological replicate is a replicate role that consists of independent biological replicates made from different individual biosamples." ; skos:exactMatch EFO:0002091 . +GHGA:case_control_status a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "case control status" ; + rdfs:range GHGA:CaseControlStatusEnum ; + skos:definition "Whether the sample is to be treated as Case or Control in a Study." . + GHGA:cell_barcode_offset a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "cell barcode offset" ; @@ -807,7 +813,7 @@ GHGA:organization a owl:ObjectProperty, GHGA:paired_or_single_end a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "paired or single end" ; - rdfs:range linkml:String ; + rdfs:range GHGA:PairedOrSingleEndEnum ; skos:definition "Denotes whether a submitted FASTQ file contains forward (R1) or reverse (R2) reads for paired-end sequencing. The number that identifies each read direction in a paired-end nucleotide sequencing replications." . GHGA:policy_text a owl:ObjectProperty, @@ -1046,22 +1052,26 @@ GHGA:Analysis a owl:Class, linkml:ClassDefinition ; rdfs:label "analysis" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:accession ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:ega_accession ], + owl:allValuesFrom GHGA:AnalysisProcess ; + owl:onProperty GHGA:has_analysis_process ], [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_input ] [ a owl:Restriction ; - owl:onProperty GHGA:has_input ; - owl:someValuesFrom GHGA:File ] ) ], + owl:allValuesFrom GHGA:Workflow ; + owl:onProperty GHGA:has_workflow ] [ a owl:Restriction ; + owl:onProperty GHGA:has_workflow ; + owl:someValuesFrom GHGA:Workflow ] ) ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:AnalysisProcess ; - owl:onProperty GHGA:has_analysis_process ], + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Study ; + owl:onProperty GHGA:has_study ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:accession ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:ega_accession ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -1072,14 +1082,20 @@ GHGA:Analysis a owl:Class, owl:onProperty GHGA:has_output ] [ a owl:Restriction ; owl:onProperty GHGA:has_output ; owl:someValuesFrom GHGA:File ] ) ], + [ a owl:Class ; + owl:intersectionOf ( [ a owl:Restriction ; + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_input ] [ a owl:Restriction ; + owl:onProperty GHGA:has_input ; + owl:someValuesFrom GHGA:File ] ) ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:reference_chromosome ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Study ; - owl:onProperty GHGA:has_study ], + owl:onClass linkml:String ; + owl:onProperty GHGA:description ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:alias ; @@ -1088,16 +1104,6 @@ GHGA:Analysis a owl:Class, owl:onClass linkml:String ; owl:onProperty GHGA:reference_genome ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:description ], - [ a owl:Class ; - owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom GHGA:Workflow ; - owl:onProperty GHGA:has_workflow ] [ a owl:Restriction ; - owl:onProperty GHGA:has_workflow ; - owl:someValuesFrom GHGA:Workflow ] ) ], GHGA:AccessionMixin, GHGA:DataTransformation, GHGA:EgaAccessionMixin ; @@ -1111,20 +1117,20 @@ GHGA:AnalysisProcess a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Workflow ; owl:onProperty GHGA:has_workflow ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Agent ; - owl:onProperty GHGA:has_agent ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:title ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_input ], + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Agent ; + owl:onProperty GHGA:has_agent ], [ a owl:Restriction ; owl:allValuesFrom GHGA:File ; owl:onProperty GHGA:has_output ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_input ], GHGA:PlannedProcess ; skos:definition "An analysis process is a process that describes how one or more Files, from a Study, are transformed to another set of Files via a Workflow. The analysis process also keeps track of the workflow metadata and the Agent that is running the Analysis." . @@ -1134,15 +1140,15 @@ GHGA:Ancestry a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:ontology_version ], + owl:onProperty GHGA:concept_name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:ontology_version ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:concept_name ], + owl:onProperty GHGA:description ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -1170,39 +1176,47 @@ GHGA:Ancestry a owl:Class, GHGA:BiologicalSexEnum ; rdfs:label "unknown" . + a owl:Class, + GHGA:CaseControlStatusEnum ; + rdfs:label "case" . + + a owl:Class, + GHGA:CaseControlStatusEnum ; + rdfs:label "control" . + GHGA:DataAccessCommittee a owl:Class, linkml:ClassDefinition ; rdfs:label "data access committee" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:ega_accession ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:accession ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Member ; - owl:onProperty GHGA:has_member ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:alias ; owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Attribute ; + owl:onProperty GHGA:has_attribute ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:name ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Member ; - owl:onProperty GHGA:main_contact ], + owl:onClass linkml:String ; + owl:onProperty GHGA:description ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Member ; + owl:onProperty GHGA:has_member ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:ega_accession ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Member ; + owl:onProperty GHGA:main_contact ], GHGA:AccessionMixin, GHGA:AttributeMixin, GHGA:Committee, @@ -1213,47 +1227,47 @@ GHGA:DataAccessPolicy a owl:Class, linkml:ClassDefinition ; rdfs:label "data access policy" ; rdfs:subClassOf [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:alias ; + owl:onClass GHGA:DataAccessCommittee ; + owl:onProperty GHGA:has_data_access_committee ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:ega_accession ], + owl:onProperty GHGA:data_request_form ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], + owl:allValuesFrom GHGA:DataUseCondition ; + owl:onProperty GHGA:has_data_use_condition ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:policy_url ], + owl:onProperty GHGA:description ], [ a owl:Restriction ; - owl:onClass GHGA:DataAccessCommittee ; - owl:onProperty GHGA:has_data_access_committee ; - owl:qualifiedCardinality 1 ], + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:policy_url ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ], + owl:onProperty GHGA:ega_accession ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:accession ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:policy_text ; + owl:onProperty GHGA:alias ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:DataUseCondition ; - owl:onProperty GHGA:has_data_use_condition ], + owl:allValuesFrom GHGA:Attribute ; + owl:onProperty GHGA:has_attribute ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:data_request_form ], + owl:onProperty GHGA:policy_text ; + owl:qualifiedCardinality 1 ], GHGA:AccessionMixin, GHGA:AttributeMixin, GHGA:EgaAccessionMixin, @@ -1266,19 +1280,19 @@ GHGA:DataUseModifier a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ], + owl:onProperty GHGA:ontology_name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:concept_name ], + owl:onProperty GHGA:ontology_version ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:ontology_version ], + owl:onProperty GHGA:concept_name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -1286,7 +1300,7 @@ GHGA:DataUseModifier a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:ontology_name ], + owl:onProperty GHGA:description ], GHGA:InformationContentEntity, GHGA:OntologyClassMixin ; skos:definition "Data use modifiers indicate additional conditions for use." ; @@ -1298,11 +1312,11 @@ GHGA:DataUsePermission a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:ontology_version ], + owl:onProperty GHGA:concept_name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ], + owl:onProperty GHGA:ontology_name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -1310,15 +1324,15 @@ GHGA:DataUsePermission a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:concept_name ], + owl:onProperty GHGA:description ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:ontology_version ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:ontology_name ], + owl:onProperty GHGA:name ], GHGA:InformationContentEntity, GHGA:OntologyClassMixin ; skos:definition "A data item that is used to indicate consent permissions for datasets and/or materials and relates to the purposes for which datasets and/or material might be removed, stored or used." ; @@ -1330,11 +1344,11 @@ GHGA:DiseaseOrPhenotypicFeature a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:ontology_name ], + owl:onProperty GHGA:concept_name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ], + owl:onProperty GHGA:description ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -1342,120 +1356,49 @@ GHGA:DiseaseOrPhenotypicFeature a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:ontology_version ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:ontology_version ], + owl:onProperty GHGA:ontology_name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:concept_name ], + owl:onProperty GHGA:name ], GHGA:BiologicalQuality, GHGA:OntologyClassMixin ; skos:definition "Disease or Phenotypic Feature that the entity is associated with. This entity is a union of Disease and Phenotypic Feature and exists to accommodate situations where Disease concepts are used interchangeably with Phenotype concepts or vice-versa." ; skos:exactMatch biolink:DiseaseOrPhenotypicFeature . -GHGA:Experiment a owl:Class, +GHGA:ExperimentProcess a owl:Class, linkml:ClassDefinition ; - rdfs:label "experiment" ; + rdfs:label "experiment process" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:title ], - [ a owl:Restriction ; - owl:onClass GHGA:Study ; - owl:onProperty GHGA:has_study ; - owl:qualifiedCardinality 1 ], - [ a owl:Class ; - owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom GHGA:Sample ; - owl:onProperty GHGA:has_sample ] [ a owl:Restriction ; - owl:onProperty GHGA:has_sample ; - owl:someValuesFrom GHGA:Sample ] ) ], - [ a owl:Restriction ; owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_file ], - [ a owl:Class ; - owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom GHGA:Protocol ; - owl:onProperty GHGA:has_protocol ] [ a owl:Restriction ; - owl:onProperty GHGA:has_protocol ; - owl:someValuesFrom GHGA:Protocol ] ) ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:technical_replicates ], + owl:onProperty GHGA:has_output ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:accession ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:ExperimentProcess ; - owl:onProperty GHGA:has_experiment_process ], + owl:onClass GHGA:ExperimentProcessTypeEnum ; + owl:onProperty GHGA:type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:ega_accession ], + owl:onClass GHGA:Agent ; + owl:onProperty GHGA:has_agent ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:type ], + owl:onProperty GHGA:title ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Attribute ; owl:onProperty GHGA:has_attribute ], [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:alias ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:biological_replicates ], - [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:description ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:experimental_replicates ], - GHGA:AccessionMixin, - GHGA:AttributeMixin, - GHGA:EgaAccessionMixin, - GHGA:Investigation ; - skos:definition "An experiment is an investigation that consists of a coordinated set of actions and observations designed to generate data with the goal of verifying, falsifying, or establishing the validity of a hypothesis." ; - skos:exactMatch SIO:000994 . - -GHGA:ExperimentProcess a owl:Class, - linkml:ClassDefinition ; - rdfs:label "experiment process" ; - rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Protocol ; owl:onProperty GHGA:has_protocol ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:title ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_output ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Sample ; owl:onProperty GHGA:has_input ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:ExperimentProcessTypeEnum ; - owl:onProperty GHGA:type ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Agent ; - owl:onProperty GHGA:has_agent ], GHGA:AttributeMixin, GHGA:PlannedProcess ; skos:definition "An Experiment Process is a process that describes how a Sample is transformed to a File via an assay. The Experiment Process also keeps track of the Protocol used and the Agent that is running the experiment." . @@ -1522,16 +1465,24 @@ GHGA:Investigation a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:title ], + owl:onProperty GHGA:description ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:title ], GHGA:PlannedProcess ; skos:definition "Investigation is the process of carrying out a plan or procedure so as to discover fact or information about the object of study." ; skos:exactMatch , SIO:000747 . + a owl:Class, + GHGA:PairedOrSingleEndEnum ; + rdfs:label "paired" . + + a owl:Class, + GHGA:PairedOrSingleEndEnum ; + rdfs:label "single" . + a owl:Class, GHGA:ReleaseStatusEnum ; rdfs:label "released" . @@ -1756,27 +1707,27 @@ GHGA:AnatomicalEntity a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:ontology_version ], + owl:onProperty GHGA:name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:ontology_version ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:concept_identifier ], + owl:onProperty GHGA:description ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:ontology_name ], + owl:onProperty GHGA:concept_name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:concept_name ], + owl:onProperty GHGA:concept_identifier ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ], + owl:onProperty GHGA:ontology_name ], GHGA:MaterialEntity, GHGA:OntologyClassMixin ; skos:definition "Biological entity that is either an individual member of a biological species or constitutes the structural organization of an individual member of a biological species." ; @@ -1786,46 +1737,46 @@ GHGA:Biospecimen a owl:Class, linkml:ClassDefinition ; rdfs:label "biospecimen" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:allValuesFrom GHGA:AnatomicalEntity ; + owl:onProperty GHGA:has_anatomical_entity ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Individual ; owl:onProperty GHGA:has_individual ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ], + owl:onProperty GHGA:alias ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:storage ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:isolation ], + owl:allValuesFrom GHGA:Disease ; + owl:onProperty GHGA:has_disease ], [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:alias ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:name ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:AnatomicalEntity ; - owl:onProperty GHGA:has_anatomical_entity ], + owl:allValuesFrom GHGA:PhenotypicFeature ; + owl:onProperty GHGA:has_phenotypic_feature ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:type ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:Disease ; - owl:onProperty GHGA:has_disease ], + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:accession ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:PhenotypicFeature ; - owl:onProperty GHGA:has_phenotypic_feature ], + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:description ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:accession ], + owl:onProperty GHGA:isolation ], GHGA:AccessionMixin, GHGA:MaterialEntity ; skos:definition "A Biospecimen is any natural material taken from a biological entity (usually a human) for testing, diagnostics, treatment, or research purposes. The Biospecimen is linked to the Individual from which the Biospecimen is derived." ; @@ -1839,6 +1790,77 @@ GHGA:Disease a owl:Class, skos:exactMatch , EFO:0000408 . +GHGA:Experiment a owl:Class, + linkml:ClassDefinition ; + rdfs:label "experiment" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:type ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:experimental_replicates ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:ExperimentProcess ; + owl:onProperty GHGA:has_experiment_process ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:accession ], + [ a owl:Class ; + owl:intersectionOf ( [ a owl:Restriction ; + owl:allValuesFrom GHGA:Sample ; + owl:onProperty GHGA:has_sample ] [ a owl:Restriction ; + owl:onProperty GHGA:has_sample ; + owl:someValuesFrom GHGA:Sample ] ) ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:title ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:ega_accession ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Attribute ; + owl:onProperty GHGA:has_attribute ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_file ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:biological_replicates ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:technical_replicates ], + [ a owl:Class ; + owl:intersectionOf ( [ a owl:Restriction ; + owl:allValuesFrom GHGA:Protocol ; + owl:onProperty GHGA:has_protocol ] [ a owl:Restriction ; + owl:onProperty GHGA:has_protocol ; + owl:someValuesFrom GHGA:Protocol ] ) ], + [ a owl:Restriction ; + owl:onClass GHGA:Study ; + owl:onProperty GHGA:has_study ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:alias ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:description ; + owl:qualifiedCardinality 1 ], + GHGA:AccessionMixin, + GHGA:AttributeMixin, + GHGA:EgaAccessionMixin, + GHGA:Investigation ; + skos:definition "An experiment is an investigation that consists of a coordinated set of actions and observations designed to generate data with the goal of verifying, falsifying, or establishing the validity of a hypothesis." ; + skos:exactMatch SIO:000994 . + GHGA:ExperimentProcessTypeEnum a owl:Class, linkml:EnumDefinition ; rdfs:label "experiment process type enum" ; @@ -1850,17 +1872,17 @@ GHGA:Member a owl:Class, linkml:ClassDefinition ; rdfs:label "member" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:organization ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:telephone ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:email ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:telephone ], + owl:onProperty GHGA:organization ; + owl:qualifiedCardinality 1 ], GHGA:Person ; skos:definition "Member of an Organization or a Committee." . @@ -1884,15 +1906,15 @@ GHGA:Person a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:additional_name ], + owl:onProperty GHGA:given_name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:family_name ], + owl:onProperty GHGA:additional_name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:given_name ], + owl:onProperty GHGA:family_name ], GHGA:NamedThing ; skos:definition "A member of the species Homo sapiens." ; skos:exactMatch , @@ -1922,9 +1944,12 @@ GHGA:Project a owl:Class, linkml:ClassDefinition ; rdfs:label "project" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:accession ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Publication ; + owl:onProperty GHGA:has_publication ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Attribute ; owl:onProperty GHGA:has_attribute ], @@ -1932,17 +1957,14 @@ GHGA:Project a owl:Class, owl:onClass linkml:String ; owl:onProperty GHGA:title ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Publication ; - owl:onProperty GHGA:has_publication ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:alias ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:accession ], + owl:onProperty GHGA:description ; + owl:qualifiedCardinality 1 ], GHGA:AccessionMixin, GHGA:AttributeMixin, GHGA:ResearchActivity ; @@ -1964,11 +1986,11 @@ GHGA:ReleaseStatusMixin a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:release_date ], + owl:onProperty GHGA:release_status ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:release_status ], + owl:onProperty GHGA:release_date ], linkml:mixin ; skos:definition "Mixin for entities that can be released at a later point in time." . @@ -1985,11 +2007,11 @@ GHGA:WorkflowParameter a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:key ], + owl:onProperty GHGA:value ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:value ] ; + owl:onProperty GHGA:key ] ; skos:definition "A key/value pair that represents a parameter used in a Workflow Step." . GHGA:affiliation a owl:ObjectProperty, @@ -2040,6 +2062,20 @@ GHGA:schema_version a owl:ObjectProperty, rdfs:range linkml:String ; skos:definition "The version of the schema an instance corresponds to." . +GHGA:CaseControlStatusEnum a owl:Class, + linkml:EnumDefinition ; + rdfs:label "case control status enum" ; + owl:unionOf ( ) ; + linkml:permissible_values , + . + +GHGA:PairedOrSingleEndEnum a owl:Class, + linkml:EnumDefinition ; + rdfs:label "paired or single end enum" ; + owl:unionOf ( ) ; + linkml:permissible_values , + . + GHGA:ReleaseStatusEnum a owl:Class, linkml:EnumDefinition ; rdfs:label "release status enum" ; @@ -2058,16 +2094,16 @@ GHGA:Workflow a owl:Class, linkml:ClassDefinition ; rdfs:label "workflow" ; rdfs:subClassOf [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:name ; - owl:qualifiedCardinality 1 ], + owl:allValuesFrom GHGA:WorkflowStep ; + owl:onProperty GHGA:has_workflow_step ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:alias ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:WorkflowStep ; - owl:onProperty GHGA:has_workflow_step ], + owl:onClass linkml:String ; + owl:onProperty GHGA:name ; + owl:qualifiedCardinality 1 ], GHGA:InformationContentEntity ; skos:definition "A Workflow is an abstraction that represents the workflow used to perform an analysis. The Workflow entity captures workflow-specific attributes that are relevant for an Analysis entity. The Workflow entity may be further characterized by its children where each child has fields that are relevant to that particular workflow." . @@ -2119,70 +2155,6 @@ GHGA:PlannedProcess a owl:Class, , EFO:0004542 . -GHGA:Sample a owl:Class, - linkml:ClassDefinition ; - rdfs:label "sample" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:storage ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:ega_accession ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], - [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:name ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:alias ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Individual ; - owl:onProperty GHGA:has_individual ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:isolation ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:AnatomicalEntity ; - owl:onProperty GHGA:has_anatomical_entity ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty GHGA:xref ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:type ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Biospecimen ; - owl:onProperty GHGA:has_biospecimen ], - [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:description ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:accession ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:VitalStatusEnum ; - owl:onProperty GHGA:vital_status_at_sampling ], - GHGA:AccessionMixin, - GHGA:AttributeMixin, - GHGA:EgaAccessionMixin, - GHGA:MaterialEntity ; - skos:definition "A sample is a limited quantity of something to be used for testing, analysis, inspection, investigation, demonstration, or trial use. A sample is prepared from a Biospecimen (isolate or tissue)." ; - skos:exactMatch SIO:001050, - biolink:MaterialSample . - GHGA:has_protocol a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "has protocol" ; @@ -2213,15 +2185,11 @@ GHGA:OntologyClassMixin a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:concept_identifier ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:concept_name ], + owl:onProperty GHGA:ontology_version ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ], + owl:onProperty GHGA:ontology_name ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:id ; @@ -2229,15 +2197,19 @@ GHGA:OntologyClassMixin a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:ontology_version ], + owl:onProperty GHGA:description ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:ontology_name ], + owl:onProperty GHGA:name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:concept_identifier ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:concept_name ], linkml:mixin ; skos:definition "Mixin for entities that represent an class/term/concept from an ontology." . @@ -2245,6 +2217,13 @@ GHGA:Publication a owl:Class, linkml:ClassDefinition ; rdfs:label "publication" ; rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty GHGA:xref ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:alias ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:id ; owl:qualifiedCardinality 1 ], @@ -2252,13 +2231,6 @@ GHGA:Publication a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:abstract ], - [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:alias ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty GHGA:xref ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -2266,17 +2238,79 @@ GHGA:Publication a owl:Class, GHGA:InformationContentEntity ; skos:definition "The Publication entity represents a publication. While a publication can be any article that is published, the minimum expectation is that the publication has a valid DOI." . -GHGA:concept_identifier a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "concept identifier" ; - rdfs:range linkml:String ; - skos:definition "The Compact URI (CURIE) that uniquely identifies a concept from an ontology, thesaurus, or terminology." . - -GHGA:concept_name a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "concept name" ; - rdfs:range linkml:String ; - skos:definition "The name or label (typically, rdfs:label) of concept from an ontology, thesaurus, or terminology." . +GHGA:Study a owl:Class, + linkml:ClassDefinition ; + rdfs:label "study" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom GHGA:Attribute ; + owl:onProperty GHGA:has_attribute ], + [ a owl:Class ; + owl:intersectionOf ( [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty GHGA:affiliation ] [ a owl:Restriction ; + owl:onProperty GHGA:affiliation ; + owl:someValuesFrom linkml:String ] ) ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:ReleaseStatusEnum ; + owl:onProperty GHGA:release_status ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Publication ; + owl:onProperty GHGA:has_publication ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:description ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:alias ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:onClass GHGA:StudyTypeEnum ; + owl:onProperty GHGA:type ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:title ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_file ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:accession ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:ega_accession ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Project ; + owl:onProperty GHGA:has_project ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:release_date ], + GHGA:AccessionMixin, + GHGA:AttributeMixin, + GHGA:EgaAccessionMixin, + GHGA:Investigation, + GHGA:PublicationMixin, + GHGA:ReleaseStatusMixin ; + skos:definition "Studies are experimental investigations of a particular phenomenon. It involves a detailed examination and analysis of a subject to learn more about the phenomenon being studied." . + +GHGA:concept_identifier a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "concept identifier" ; + rdfs:range linkml:String ; + skos:definition "The Compact URI (CURIE) that uniquely identifies a concept from an ontology, thesaurus, or terminology." . + +GHGA:concept_name a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "concept name" ; + rdfs:range linkml:String ; + skos:definition "The name or label (typically, rdfs:label) of concept from an ontology, thesaurus, or terminology." . GHGA:ontology_name a owl:ObjectProperty, linkml:SlotDefinition ; @@ -2290,33 +2324,24 @@ GHGA:ontology_version a owl:ObjectProperty, rdfs:range linkml:String ; skos:definition "The version of the ontology from which this ontology class was chosen." . -GHGA:VitalStatusEnum a owl:Class, - linkml:EnumDefinition ; - rdfs:label "vital status enum" ; - owl:unionOf ( ) ; - linkml:permissible_values , - , - . - -GHGA:has_file a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "has file" ; - rdfs:range GHGA:File ; - skos:definition "The file associated with an entity." . - -GHGA:Protocol a owl:Class, +GHGA:Sample a owl:Class, linkml:ClassDefinition ; - rdfs:label "protocol" ; + rdfs:label "sample" ; rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom GHGA:Attribute ; + owl:onProperty GHGA:has_attribute ], + [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:File ; - owl:onProperty GHGA:has_file ], + owl:onClass GHGA:CaseControlStatusEnum ; + owl:onProperty GHGA:case_control_status ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty GHGA:xref ], + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:accession ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], + owl:onClass linkml:String ; + owl:onProperty GHGA:alias ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -2324,85 +2349,100 @@ GHGA:Protocol a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:isolation ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:alias ; + owl:onProperty GHGA:name ; owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:AnatomicalEntity ; + owl:onProperty GHGA:has_anatomical_entity ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:VitalStatusEnum ; + owl:onProperty GHGA:vital_status_at_sampling ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Biospecimen ; + owl:onProperty GHGA:has_biospecimen ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Individual ; + owl:onProperty GHGA:has_individual ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty GHGA:xref ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:url ], + owl:onProperty GHGA:ega_accession ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ], + owl:onProperty GHGA:storage ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:description ; + owl:qualifiedCardinality 1 ], + GHGA:AccessionMixin, GHGA:AttributeMixin, - GHGA:InformationContentEntity ; - skos:definition "A plan specification which has sufficient level of detail and quantitative information to communicate it between investigation agents, so that different investigation agents will reliably be able to independently reproduce the process." ; - skos:exactMatch . + GHGA:EgaAccessionMixin, + GHGA:MaterialEntity ; + skos:definition "A sample is a limited quantity of something to be used for testing, analysis, inspection, investigation, demonstration, or trial use. A sample is prepared from a Biospecimen (isolate or tissue)." ; + skos:exactMatch SIO:001050, + biolink:MaterialSample . -GHGA:Study a owl:Class, +GHGA:VitalStatusEnum a owl:Class, + linkml:EnumDefinition ; + rdfs:label "vital status enum" ; + owl:unionOf ( ) ; + linkml:permissible_values , + , + . + +GHGA:has_file a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "has file" ; + rdfs:range GHGA:File ; + skos:definition "The file associated with an entity." . + +GHGA:Protocol a owl:Class, linkml:ClassDefinition ; - rdfs:label "study" ; + rdfs:label "protocol" ; rdfs:subClassOf [ a owl:Restriction ; owl:allValuesFrom GHGA:Attribute ; owl:onProperty GHGA:has_attribute ], [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:alias ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Project ; - owl:onProperty GHGA:has_project ], + owl:onClass GHGA:File ; + owl:onProperty GHGA:has_file ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty GHGA:xref ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:title ; + owl:onProperty GHGA:alias ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:release_date ], + owl:onProperty GHGA:url ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:accession ], - [ a owl:Restriction ; - owl:onClass GHGA:StudyTypeEnum ; - owl:onProperty GHGA:type ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_file ], + owl:onProperty GHGA:description ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:ega_accession ], - [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:description ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:ReleaseStatusEnum ; - owl:onProperty GHGA:release_status ], - [ a owl:Class ; - owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty GHGA:affiliation ] [ a owl:Restriction ; - owl:onProperty GHGA:affiliation ; - owl:someValuesFrom linkml:String ] ) ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Publication ; - owl:onProperty GHGA:has_publication ], - GHGA:AccessionMixin, + owl:onProperty GHGA:type ], GHGA:AttributeMixin, - GHGA:EgaAccessionMixin, - GHGA:Investigation, - GHGA:PublicationMixin, - GHGA:ReleaseStatusMixin ; - skos:definition "Studies are experimental investigations of a particular phenomenon. It involves a detailed examination and analysis of a subject to learn more about the phenomenon being studied." . + GHGA:InformationContentEntity ; + skos:definition "A plan specification which has sufficient level of detail and quantitative information to communicate it between investigation agents, so that different investigation agents will reliably be able to independently reproduce the process." ; + skos:exactMatch . GHGA:type a owl:ObjectProperty, linkml:SlotDefinition ; @@ -2445,55 +2485,55 @@ GHGA:Individual a owl:Class, linkml:ClassDefinition ; rdfs:label "individual" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:ega_accession ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Disease ; - owl:onProperty GHGA:has_disease ], + owl:allValuesFrom GHGA:Ancestry ; + owl:onProperty GHGA:has_ancestry ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Individual ; owl:onProperty GHGA:has_children ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_file ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:karyotype ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:PhenotypicFeature ; - owl:onProperty GHGA:has_phenotypic_feature ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Individual ; - owl:onProperty GHGA:has_parent ], + owl:onClass GHGA:BiologicalSexEnum ; + owl:onProperty GHGA:sex ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:onClass GHGA:VitalStatusEnum ; owl:onProperty GHGA:vital_status ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:onClass GHGA:BiologicalSexEnum ; - owl:onProperty GHGA:sex ; + owl:onClass GHGA:AgeRangeEnum ; + owl:onProperty GHGA:age ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:Ancestry ; - owl:onProperty GHGA:has_ancestry ], + owl:onClass linkml:String ; + owl:onProperty GHGA:alias ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:geographical_region ], [ a owl:Restriction ; - owl:onClass GHGA:AgeRangeEnum ; - owl:onProperty GHGA:age ; - owl:qualifiedCardinality 1 ], + owl:allValuesFrom GHGA:Individual ; + owl:onProperty GHGA:has_parent ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:accession ], + owl:onProperty GHGA:karyotype ], [ a owl:Restriction ; + owl:allValuesFrom GHGA:PhenotypicFeature ; + owl:onProperty GHGA:has_phenotypic_feature ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:alias ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:ega_accession ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:accession ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Disease ; + owl:onProperty GHGA:has_disease ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_file ], GHGA:AccessionMixin, GHGA:EgaAccessionMixin, GHGA:Person ; @@ -2512,20 +2552,13 @@ GHGA:NamedThing a owl:Class, linkml:ClassDefinition ; rdfs:label "named thing" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty GHGA:xref ], - [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:id ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:alias ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:schema_version ], + owl:onProperty GHGA:update_date ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -2533,11 +2566,18 @@ GHGA:NamedThing a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:creation_date ], + owl:onProperty GHGA:schema_version ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:id ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty GHGA:xref ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:update_date ], + owl:onProperty GHGA:creation_date ], GHGA:MetadataMixin ; skos:altLabel "entity", "named entity", @@ -2589,11 +2629,11 @@ GHGA:Attribute a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:key_type ], + owl:onProperty GHGA:value_type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:value_type ], + owl:onProperty GHGA:key_type ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:key ; @@ -2636,8 +2676,12 @@ GHGA:File a owl:Class, rdfs:label "file" ; rdfs:subClassOf [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:alias ; + owl:onProperty GHGA:name ; owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:ega_accession ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Attribute ; owl:onProperty GHGA:has_attribute ], @@ -2645,34 +2689,30 @@ GHGA:File a owl:Class, owl:onClass GHGA:FileFormatEnum ; owl:onProperty GHGA:format ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:accession ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:checksum_type ; + owl:onProperty GHGA:checksum ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:checksum ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:accession ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ; + owl:onProperty GHGA:alias ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:Integer ; - owl:onProperty GHGA:size ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:drs_uri ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:Integer ; + owl:onProperty GHGA:size ], + [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:ega_accession ], + owl:onProperty GHGA:checksum_type ; + owl:qualifiedCardinality 1 ], GHGA:AccessionMixin, GHGA:AttributeMixin, GHGA:EgaAccessionMixin, diff --git a/artifacts/pydantic/ghga_models.py b/artifacts/pydantic/ghga_models.py index a76f938e..b1995283 100644 --- a/artifacts/pydantic/ghga_models.py +++ b/artifacts/pydantic/ghga_models.py @@ -4,7 +4,7 @@ from pydantic import BaseModel, Field metamodel_version = "None" -version = "0.6.0" +version = "0.7.0" class BiologicalSexEnum(str, Enum): @@ -67,6 +67,20 @@ class FileFormatEnum(str, Enum): +class CaseControlStatusEnum(str, Enum): + + control = "control" + case = "case" + + + +class PairedOrSingleEndEnum(str, Enum): + + paired = "paired" + single = "single" + + + class SubmissionStatusEnum(str, Enum): in_progress = "in_progress" @@ -935,7 +949,7 @@ class SequencingProtocol(Protocol): """ sequencing_center: Optional[str] = Field(None, description="""Center where sample was sequenced.""") instrument_model: str = Field(None, description="""The name and model of the technology platform used to perform sequencing.""") - paired_or_single_end: Optional[str] = Field(None, description="""Denotes whether a submitted FASTQ file contains forward (R1) or reverse (R2) reads for paired-end sequencing. The number that identifies each read direction in a paired-end nucleotide sequencing replications.""") + paired_or_single_end: Optional[PairedOrSingleEndEnum] = Field(None, description="""Denotes whether a submitted FASTQ file contains forward (R1) or reverse (R2) reads for paired-end sequencing. The number that identifies each read direction in a paired-end nucleotide sequencing replications.""") sequencing_read_length: Optional[str] = Field(None, description="""Length of sequencing reads (eg: Long or short or actual number of the read length etc). The number of nucleotides successfully ordered from each side of a nucleic acid fragment obtained after the completion of a sequencing process""") index_sequence: Optional[str] = Field(None, description="""A unique nucleotide sequence that is added to a sample during library preparation to serve as a unique identifier for the sample.""") target_coverage: Optional[str] = Field(None, description="""Mean coverage for whole genome sequencing, or mean target coverage for whole exome and targeted sequencing. The number of times a particular locus (site, nucleotide, amplicon, region) was sequenced.""") @@ -972,6 +986,7 @@ class Sample(MaterialEntity): name: str = Field(None, description="""Name of the sample (eg:GHGAS_Blood_Sample1 or GHGAS_PBMC_RNAseq_S1).""") type: Optional[str] = Field(None, description="""The type of sample.""") description: str = Field(None, description="""Short textual description of the sample (How the sample was collected, sample source, protocol followed for processing the sample etc).""") + case_control_status: Optional[CaseControlStatusEnum] = Field(None, description="""Whether the sample is to be treated as Case or Control in a Study.""") vital_status_at_sampling: Optional[VitalStatusEnum] = Field(None, description="""Vital Status of an Individual at the point of sampling (eg:'Alive', 'Deceased').""") isolation: Optional[str] = Field(None, description="""Method or device employed for collecting/isolating a biospecimen or a sample.""") storage: Optional[str] = Field(None, description="""Methods by which a biospecimen or a sample is stored (e.g. frozen in liquid nitrogen).""") @@ -1119,9 +1134,9 @@ class Dataset(InformationContentEntity): description: str = Field(None, description="""Description of an entity.""") type: Optional[str] = Field(None, description="""The type of an entity.""") has_study: Union[List[Study], List[str]] = Field(None, description="""One or more Study entities that are referenced by this Dataset.""") - has_experiment: Optional[Union[List[Analysis], List[str]]] = Field(None, description="""One or more Analysis entities that are referenced by this Dataset.""") - has_sample: Union[List[Study], List[str]] = Field(None, description="""One or more Sample entities that are referenced by this Dataset.""") - has_analysis: Optional[Union[List[Study], List[str]]] = Field(None, description="""One or more Analysis entities that are referenced by this Dataset.""") + has_experiment: Optional[Union[List[Experiment], List[str]]] = Field(None, description="""One or more Experiment entities that are referenced by this Dataset.""") + has_sample: Union[List[Sample], List[str]] = Field(None, description="""One or more Sample entities that are referenced by this Dataset.""") + has_analysis: Optional[Union[List[Analysis], List[str]]] = Field(None, description="""One or more Analysis entities that are referenced by this Dataset.""") has_file: Union[List[File], List[str]] = Field(None, description="""One or more File entities that collectively are part of this Dataset.""") has_data_access_policy: Union[DataAccessPolicy, str] = Field(None, description="""The Data Access Policy that applies to this Dataset.""") accession: Optional[str] = Field(None, description="""A unique GHGA identifier assigned to an entity for the sole purpose of referring to that entity in a global scope.""") diff --git a/artifacts/python/ghga.py b/artifacts/python/ghga.py index 0c8b6086..4cff7c8a 100644 --- a/artifacts/python/ghga.py +++ b/artifacts/python/ghga.py @@ -1,5 +1,5 @@ # Auto generated from ghga.yaml by pythongen.py version: 0.9.0 -# Generation date: 2022-04-26T10:28:00 +# Generation date: 2022-04-29T13:42:57 # Schema: GHGA-Metadata-Schema # # id: https://w3id.org/GHGA-Metadata-Schema @@ -25,7 +25,7 @@ from linkml_runtime.linkml_model.types import Integer, String metamodel_version = "1.7.0" -version = "0.6.0" +version = "0.7.0" # Overwrite dataclasses _init_fn to add **kwargs in __init__ dataclasses._init_fn = dataclasses_init_fn_with_kwargs @@ -1015,7 +1015,7 @@ class SequencingProtocol(Protocol): alias: str = None description: str = None sequencing_center: Optional[str] = None - paired_or_single_end: Optional[str] = None + paired_or_single_end: Optional[Union[str, "PairedOrSingleEndEnum"]] = None sequencing_read_length: Optional[str] = None index_sequence: Optional[str] = None target_coverage: Optional[str] = None @@ -1056,8 +1056,8 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.sequencing_center is not None and not isinstance(self.sequencing_center, str): self.sequencing_center = str(self.sequencing_center) - if self.paired_or_single_end is not None and not isinstance(self.paired_or_single_end, str): - self.paired_or_single_end = str(self.paired_or_single_end) + if self.paired_or_single_end is not None and not isinstance(self.paired_or_single_end, PairedOrSingleEndEnum): + self.paired_or_single_end = PairedOrSingleEndEnum(self.paired_or_single_end) if self.sequencing_read_length is not None and not isinstance(self.sequencing_read_length, str): self.sequencing_read_length = str(self.sequencing_read_length) @@ -1364,6 +1364,7 @@ class Sample(MaterialEntity): description: str = None alias: str = None type: Optional[str] = None + case_control_status: Optional[Union[str, "CaseControlStatusEnum"]] = None vital_status_at_sampling: Optional[Union[str, "VitalStatusEnum"]] = None isolation: Optional[str] = None storage: Optional[str] = None @@ -1399,6 +1400,9 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.type is not None and not isinstance(self.type, str): self.type = str(self.type) + if self.case_control_status is not None and not isinstance(self.case_control_status, CaseControlStatusEnum): + self.case_control_status = CaseControlStatusEnum(self.case_control_status) + if self.vital_status_at_sampling is not None and not isinstance(self.vital_status_at_sampling, VitalStatusEnum): self.vital_status_at_sampling = VitalStatusEnum(self.vital_status_at_sampling) @@ -1887,13 +1891,13 @@ class Dataset(InformationContentEntity): title: str = None description: str = None has_study: Union[Dict[Union[str, StudyId], Union[dict, Study]], List[Union[dict, Study]]] = empty_dict() - has_sample: Union[Dict[Union[str, StudyId], Union[dict, Study]], List[Union[dict, Study]]] = empty_dict() + has_sample: Union[Dict[Union[str, SampleId], Union[dict, Sample]], List[Union[dict, Sample]]] = empty_dict() has_file: Union[Dict[Union[str, FileId], Union[dict, File]], List[Union[dict, File]]] = empty_dict() has_data_access_policy: Union[dict, "DataAccessPolicy"] = None alias: str = None type: Optional[str] = None - has_experiment: Optional[Union[Dict[Union[str, AnalysisId], Union[dict, Analysis]], List[Union[dict, Analysis]]]] = empty_dict() - has_analysis: Optional[Union[Dict[Union[str, StudyId], Union[dict, Study]], List[Union[dict, Study]]]] = empty_dict() + has_experiment: Optional[Union[Dict[Union[str, ExperimentId], Union[dict, Experiment]], List[Union[dict, Experiment]]]] = empty_dict() + has_analysis: Optional[Union[Dict[Union[str, AnalysisId], Union[dict, Analysis]], List[Union[dict, Analysis]]]] = empty_dict() has_publication: Optional[Union[Dict[Union[str, PublicationId], Union[dict, "Publication"]], List[Union[dict, "Publication"]]]] = empty_dict() release_status: Optional[Union[str, "ReleaseStatusEnum"]] = None accession: Optional[str] = None @@ -1923,7 +1927,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.has_sample): self.MissingRequiredField("has_sample") - self._normalize_inlined_as_list(slot_name="has_sample", slot_type=Study, key_name="id", keyed=True) + self._normalize_inlined_as_list(slot_name="has_sample", slot_type=Sample, key_name="id", keyed=True) if self._is_empty(self.has_file): self.MissingRequiredField("has_file") @@ -1942,9 +1946,9 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.type is not None and not isinstance(self.type, str): self.type = str(self.type) - self._normalize_inlined_as_list(slot_name="has_experiment", slot_type=Analysis, key_name="id", keyed=True) + self._normalize_inlined_as_list(slot_name="has_experiment", slot_type=Experiment, key_name="id", keyed=True) - self._normalize_inlined_as_list(slot_name="has_analysis", slot_type=Study, key_name="id", keyed=True) + self._normalize_inlined_as_list(slot_name="has_analysis", slot_type=Analysis, key_name="id", keyed=True) self._normalize_inlined_as_list(slot_name="has_publication", slot_type=Publication, key_name="id", keyed=True) @@ -2876,6 +2880,34 @@ class FileFormatEnum(EnumDefinitionImpl): description="Enum to capture file types.", ) +class CaseControlStatusEnum(EnumDefinitionImpl): + """ + Enum to capture whether a Sample in a Study is to be considered as Case or Control. + """ + control = PermissibleValue(text="control", + description="The Sample is to be treated as Control") + case = PermissibleValue(text="case", + description="The Sample is to be treated as Case") + + _defn = EnumDefinition( + name="CaseControlStatusEnum", + description="Enum to capture whether a Sample in a Study is to be considered as Case or Control.", + ) + +class PairedOrSingleEndEnum(EnumDefinitionImpl): + """ + Enum to capture whether a sequencing experiment generates reads that are Paired-end or Single-end. + """ + paired = PermissibleValue(text="paired", + description="The reads are Paired-end") + single = PermissibleValue(text="single", + description="The reads are Single-end") + + _defn = EnumDefinition( + name="PairedOrSingleEndEnum", + description="Enum to capture whether a sequencing experiment generates reads that are Paired-end or Single-end.", + ) + class SubmissionStatusEnum(EnumDefinitionImpl): """ Enum to capture the status of a Submission. @@ -3283,7 +3315,7 @@ class slots: model_uri=GHGA.index_sequence, domain=None, range=Optional[str]) slots.paired_or_single_end = Slot(uri=GHGA.paired_or_single_end, name="paired or single end", curie=GHGA.curie('paired_or_single_end'), - model_uri=GHGA.paired_or_single_end, domain=None, range=Optional[str]) + model_uri=GHGA.paired_or_single_end, domain=None, range=Optional[Union[str, "PairedOrSingleEndEnum"]]) slots.reference_chromosome = Slot(uri=GHGA.reference_chromosome, name="reference chromosome", curie=GHGA.curie('reference_chromosome'), model_uri=GHGA.reference_chromosome, domain=None, range=Optional[str]) @@ -3324,6 +3356,9 @@ class slots: slots.sample_barcode_read = Slot(uri=GHGA.sample_barcode_read, name="sample barcode read", curie=GHGA.curie('sample_barcode_read'), model_uri=GHGA.sample_barcode_read, domain=None, range=Optional[str]) +slots.case_control_status = Slot(uri=GHGA.case_control_status, name="case control status", curie=GHGA.curie('case_control_status'), + model_uri=GHGA.case_control_status, domain=None, range=Optional[Union[str, "CaseControlStatusEnum"]]) + slots.vital_status_at_sampling = Slot(uri=GHGA.vital_status_at_sampling, name="vital status at sampling", curie=GHGA.curie('vital_status_at_sampling'), model_uri=GHGA.vital_status_at_sampling, domain=None, range=Optional[Union[str, "VitalStatusEnum"]]) @@ -3715,13 +3750,13 @@ class slots: model_uri=GHGA.dataset_has_study, domain=Dataset, range=Union[Dict[Union[str, StudyId], Union[dict, Study]], List[Union[dict, Study]]]) slots.dataset_has_experiment = Slot(uri=GHGA.has_experiment, name="dataset_has experiment", curie=GHGA.curie('has_experiment'), - model_uri=GHGA.dataset_has_experiment, domain=Dataset, range=Optional[Union[Dict[Union[str, AnalysisId], Union[dict, Analysis]], List[Union[dict, Analysis]]]]) + model_uri=GHGA.dataset_has_experiment, domain=Dataset, range=Optional[Union[Dict[Union[str, ExperimentId], Union[dict, Experiment]], List[Union[dict, Experiment]]]]) slots.dataset_has_sample = Slot(uri=GHGA.has_sample, name="dataset_has sample", curie=GHGA.curie('has_sample'), - model_uri=GHGA.dataset_has_sample, domain=Dataset, range=Union[Dict[Union[str, StudyId], Union[dict, Study]], List[Union[dict, Study]]]) + model_uri=GHGA.dataset_has_sample, domain=Dataset, range=Union[Dict[Union[str, SampleId], Union[dict, Sample]], List[Union[dict, Sample]]]) slots.dataset_has_analysis = Slot(uri=GHGA.has_analysis, name="dataset_has analysis", curie=GHGA.curie('has_analysis'), - model_uri=GHGA.dataset_has_analysis, domain=Dataset, range=Optional[Union[Dict[Union[str, StudyId], Union[dict, Study]], List[Union[dict, Study]]]]) + model_uri=GHGA.dataset_has_analysis, domain=Dataset, range=Optional[Union[Dict[Union[str, AnalysisId], Union[dict, Analysis]], List[Union[dict, Analysis]]]]) slots.dataset_has_file = Slot(uri=GHGA.has_file, name="dataset_has file", curie=GHGA.curie('has_file'), model_uri=GHGA.dataset_has_file, domain=Dataset, range=Union[Dict[Union[str, FileId], Union[dict, File]], List[Union[dict, File]]]) diff --git a/artifacts/rdf/ghga.ttl b/artifacts/rdf/ghga.ttl index a0ab23b0..7bc19716 100644 --- a/artifacts/rdf/ghga.ttl +++ b/artifacts/rdf/ghga.ttl @@ -11,7 +11,7 @@ a linkml:SchemaDefinition ; dcterms:license "https://creativecommons.org/publicdomain/zero/1.0/" ; - pav:version "0.6.0" ; + pav:version "0.7.0" ; skos:definition "The metadata schema for the German Human Genome-Phenome Archive (GHGA)." ; linkml:classes , , @@ -75,28 +75,28 @@ "semweb_context" ; linkml:default_prefix "GHGA" ; linkml:default_range ; - linkml:generation_date "2022-04-26T10:28:03"^^xsd:dateTime ; + linkml:generation_date "2022-04-29T13:43:01"^^xsd:dateTime ; linkml:id ; linkml:imports linkml:types ; linkml:metamodel_version "1.7.0" ; - linkml:prefixes [ linkml:prefix_prefix "COB" ; - linkml:prefix_reference ], + linkml:prefixes [ linkml:prefix_prefix "biolink" ; + linkml:prefix_reference ], + [ linkml:prefix_prefix "GENEPIO" ; + linkml:prefix_reference ], + [ linkml:prefix_prefix "SNOMEDCT" ; + linkml:prefix_reference ], [ linkml:prefix_prefix "HANCESTRO" ; linkml:prefix_reference ], [ linkml:prefix_prefix "EFO" ; linkml:prefix_reference ], - [ linkml:prefix_prefix "SNOMEDCT" ; - linkml:prefix_reference ], - [ linkml:prefix_prefix "GENEPIO" ; - linkml:prefix_reference ], [ linkml:prefix_prefix "SIO" ; linkml:prefix_reference ], [ linkml:prefix_prefix "GHGA" ; linkml:prefix_reference ], [ linkml:prefix_prefix "linkml" ; linkml:prefix_reference linkml: ], - [ linkml:prefix_prefix "biolink" ; - linkml:prefix_reference ] ; + [ linkml:prefix_prefix "COB" ; + linkml:prefix_reference ] ; linkml:slots , , , @@ -128,6 +128,7 @@ , , , + , , , , @@ -389,8 +390,8 @@ , ; linkml:source_file "ghga.yaml" ; - linkml:source_file_date "2022-04-26T10:27:24"^^xsd:dateTime ; - linkml:source_file_size 72332 ; + linkml:source_file_date "2022-04-29T13:42:15"^^xsd:dateTime ; + linkml:source_file_size 73283 ; linkml:subsets , , , @@ -1251,7 +1252,7 @@ linkml:is_usage_slot true ; linkml:multivalued true ; linkml:owner ; - linkml:range ; + linkml:range ; linkml:slot_uri ; linkml:usage_slot_name "has analysis" . @@ -1276,7 +1277,7 @@ a linkml:SlotDefinition ; OIO:inSubset , ; - skos:definition "One or more Analysis entities that are referenced by this Dataset." ; + skos:definition "One or more Experiment entities that are referenced by this Dataset." ; skos:inScheme ; skos:prefLabel "has experiment" ; linkml:definition_uri ; @@ -1288,7 +1289,7 @@ linkml:is_usage_slot true ; linkml:multivalued true ; linkml:owner ; - linkml:range ; + linkml:range ; linkml:slot_uri ; linkml:usage_slot_name "has experiment" . @@ -1346,7 +1347,7 @@ linkml:is_usage_slot true ; linkml:multivalued true ; linkml:owner ; - linkml:range ; + linkml:range ; linkml:required true ; linkml:slot_uri ; linkml:usage_slot_name "has sample" . @@ -3283,6 +3284,17 @@ linkml:range ; linkml:slot_uri . + a linkml:SlotDefinition ; + OIO:inSubset , + ; + skos:definition "Whether the sample is to be treated as Case or Control in a Study." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + a linkml:SlotDefinition ; OIO:inSubset , ; @@ -3404,12 +3416,14 @@ linkml:slot_uri . a linkml:SlotDefinition ; + OIO:inSubset , + ; skos:definition "Denotes whether a submitted FASTQ file contains forward (R1) or reverse (R2) reads for paired-end sequencing. The number that identifies each read direction in a paired-end nucleotide sequencing replications." ; skos:inScheme ; linkml:definition_uri ; linkml:domain_of ; linkml:owner ; - linkml:range ; + linkml:range ; linkml:slot_uri . a linkml:SlotDefinition ; @@ -5415,11 +5429,6 @@ , . - a linkml:SubsetDefinition ; - skos:definition "Subset of properties that are considered to be of importance for FAIR data sharing." ; - skos:inScheme ; - linkml:definition_uri . - a linkml:ClassDefinition ; skos:altLabel "entity", "named entity", @@ -5439,6 +5448,11 @@ , . + a linkml:SubsetDefinition ; + skos:definition "Subset of properties that are considered to be of importance for FAIR data sharing." ; + skos:inScheme ; + linkml:definition_uri . + a linkml:SlotDefinition ; OIO:inSubset , ; @@ -5501,6 +5515,38 @@ , . + a linkml:ClassDefinition ; + skos:definition "Studies are experimental investigations of a particular phenomenon. It involves a detailed examination and analysis of a subject to learn more about the phenomenon being studied." ; + skos:inScheme ; + linkml:class_uri ; + linkml:definition_uri ; + linkml:is_a ; + linkml:mixins , + , + , + , + ; + linkml:slot_usage [ ] ; + linkml:slots , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + . + a linkml:SlotDefinition ; OIO:inSubset , ; @@ -5556,70 +5602,6 @@ , . - a linkml:ClassDefinition ; - skos:definition "A sample is a limited quantity of something to be used for testing, analysis, inspection, investigation, demonstration, or trial use. A sample is prepared from a Biospecimen (isolate or tissue)." ; - skos:exactMatch , - ; - skos:inScheme ; - linkml:class_uri ; - linkml:definition_uri ; - linkml:is_a ; - linkml:mixins , - , - ; - linkml:slot_usage [ ] ; - linkml:slots , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - . - - a linkml:ClassDefinition ; - skos:definition "Studies are experimental investigations of a particular phenomenon. It involves a detailed examination and analysis of a subject to learn more about the phenomenon being studied." ; - skos:inScheme ; - linkml:class_uri ; - linkml:definition_uri ; - linkml:is_a ; - linkml:mixins , - , - , - , - ; - linkml:slot_usage [ ] ; - linkml:slots , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - . - a linkml:SlotDefinition ; OIO:inSubset , ; @@ -5636,39 +5618,6 @@ linkml:slot_uri ; linkml:usage_slot_name "alias" . - a linkml:ClassDefinition ; - skos:definition "An experiment is an investigation that consists of a coordinated set of actions and observations designed to generate data with the goal of verifying, falsifying, or establishing the validity of a hypothesis." ; - skos:exactMatch ; - skos:inScheme ; - linkml:class_uri ; - linkml:definition_uri ; - linkml:is_a ; - linkml:mixins , - , - ; - linkml:slot_usage [ ] ; - linkml:slots , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - . - a linkml:SlotDefinition ; OIO:inSubset , ; @@ -5716,6 +5665,72 @@ , . + a linkml:ClassDefinition ; + skos:definition "An experiment is an investigation that consists of a coordinated set of actions and observations designed to generate data with the goal of verifying, falsifying, or establishing the validity of a hypothesis." ; + skos:exactMatch ; + skos:inScheme ; + linkml:class_uri ; + linkml:definition_uri ; + linkml:is_a ; + linkml:mixins , + , + ; + linkml:slot_usage [ ] ; + linkml:slots , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + . + + a linkml:ClassDefinition ; + skos:definition "A sample is a limited quantity of something to be used for testing, analysis, inspection, investigation, demonstration, or trial use. A sample is prepared from a Biospecimen (isolate or tissue)." ; + skos:exactMatch , + ; + skos:inScheme ; + linkml:class_uri ; + linkml:definition_uri ; + linkml:is_a ; + linkml:mixins , + , + ; + linkml:slot_usage [ ] ; + linkml:slots , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + . + a linkml:SlotDefinition ; skos:definition "Timestamp (in ISO 8601 format) when the entity was created." ; skos:inScheme ; diff --git a/artifacts/shex/ghga.shex b/artifacts/shex/ghga.shex index c0666673..a762ea1e 100644 --- a/artifacts/shex/ghga.shex +++ b/artifacts/shex/ghga.shex @@ -1,5 +1,5 @@ # metamodel_version: 1.7.0 -# version: 0.6.0 +# version: 0.7.0 BASE PREFIX rdf: PREFIX xsd: @@ -314,9 +314,9 @@ linkml:Nodeidentifier NONLITERAL @linkml:String ; @linkml:String ? ; @ + ; - @ * ; - @ + ; - @ * ; + @ * ; + @ + ; + @ * ; @ + ; @ ; @linkml:String ; @@ -737,6 +737,7 @@ linkml:Nodeidentifier NONLITERAL @linkml:String ; @linkml:String ? ; @linkml:String ; + @ ? ; @ ? ; @linkml:String ? ; @linkml:String ? ; @@ -758,7 +759,7 @@ linkml:Nodeidentifier NONLITERAL rdf:type [ ] ? ; @linkml:String ? ; @linkml:String ; - @linkml:String ? ; + @ ? ; @linkml:String ? ; @linkml:String ? ; @linkml:String ? ; diff --git a/artifacts/sql/ghga.sql b/artifacts/sql/ghga.sql index 1dbfd9c8..326b8957 100644 --- a/artifacts/sql/ghga.sql +++ b/artifacts/sql/ghga.sql @@ -1,5 +1,5 @@ /* metamodel_version: 1.7.0 */ -/* version: 0.6.0 */ +/* version: 0.7.0 */ CREATE TYPE "release status enum" AS ENUM ('unreleased', 'released'); CREATE TYPE "biological sex enum" AS ENUM ('female', 'male', 'unknown'); @@ -7,6 +7,8 @@ CREATE TYPE "age range enum" AS ENUM ('0-5', '6-10', '11-15', '16-20', '21-25', CREATE TYPE "vital status enum" AS ENUM ('alive', 'deceased', 'unknown'); CREATE TYPE "experiment process type enum" AS ENUM ('sample_preparation', 'assay'); CREATE TYPE "file format enum" AS ENUM ('bam', 'complete_genomics', 'cram', 'fasta', 'fastq', 'pacbio_hdf5', 'sff', 'srf', 'vcf', 'txt', 'pxf', 'other'); +CREATE TYPE "case control status enum" AS ENUM ('control', 'case'); +CREATE TYPE "paired or single end enum" AS ENUM ('paired', 'single'); CREATE TYPE "study type enum" AS ENUM ('whole_genome_sequencing', 'metagenomics', 'transcriptome_analysis', 'resequencing', 'epigenetics', 'synthetic_genomics', 'forensic_paleo_genomics', 'gene_regulation', 'cancer_genomics', 'population_genomics', 'rna_seq', 'exome_sequencing', 'pooled_clone_sequencing', 'genome_wide_association_study', 'other'); CREATE TYPE "submission status enum" AS ENUM ('in_progress', 'completed'); CREATE TYPE "user role enum" AS ENUM ('data_requester', 'data_steward'); @@ -426,7 +428,7 @@ CREATE TABLE sequencing_protocol ( has_file TEXT, sequencing_center TEXT, instrument_model TEXT NOT NULL, - paired_or_single_end TEXT, + paired_or_single_end "paired or single end enum", sequencing_read_length TEXT, index_sequence TEXT, target_coverage TEXT, @@ -657,6 +659,30 @@ CREATE TABLE data_access_policy ( FOREIGN KEY(has_data_access_committee) REFERENCES data_access_committee (id) ); +CREATE TABLE experiment ( + id TEXT NOT NULL, + creation_date TEXT, + update_date TEXT, + schema_type TEXT, + schema_version TEXT, + type TEXT, + biological_replicates TEXT, + technical_replicates TEXT, + experimental_replicates TEXT, + has_study TEXT NOT NULL, + has_sample TEXT NOT NULL, + has_file TEXT, + has_protocol TEXT NOT NULL, + alias TEXT NOT NULL, + title TEXT, + description TEXT NOT NULL, + has_attribute TEXT, + accession TEXT, + ega_accession TEXT, + PRIMARY KEY (id), + FOREIGN KEY(has_study) REFERENCES study (id) +); + CREATE TABLE sample ( id TEXT NOT NULL, creation_date TEXT, @@ -666,6 +692,7 @@ CREATE TABLE sample ( name TEXT NOT NULL, type TEXT, description TEXT NOT NULL, + case_control_status "case control status enum", vital_status_at_sampling "vital status enum", isolation TEXT, storage TEXT, @@ -689,6 +716,7 @@ CREATE TABLE submission ( has_sample TEXT, has_biospecimen TEXT, has_individual TEXT, + has_experiment TEXT, has_protocol TEXT NOT NULL, has_analysis TEXT, has_file TEXT, @@ -836,30 +864,26 @@ CREATE TABLE dataset ( FOREIGN KEY(has_data_access_policy) REFERENCES data_access_policy (id) ); -CREATE TABLE experiment ( +CREATE TABLE experiment_process ( id TEXT NOT NULL, + alias TEXT, creation_date TEXT, update_date TEXT, schema_type TEXT, schema_version TEXT, - type TEXT, - biological_replicates TEXT, - technical_replicates TEXT, - experimental_replicates TEXT, - has_study TEXT NOT NULL, - has_sample TEXT NOT NULL, - has_file TEXT, - has_protocol TEXT NOT NULL, - alias TEXT NOT NULL, + type "experiment process type enum", title TEXT, - description TEXT NOT NULL, + has_input TEXT, + has_protocol TEXT, + has_agent TEXT, + has_output TEXT, has_attribute TEXT, - accession TEXT, - ega_accession TEXT, - submission_id TEXT, + experiment_id TEXT, PRIMARY KEY (id), - FOREIGN KEY(has_study) REFERENCES study (id), - FOREIGN KEY(submission_id) REFERENCES submission (id) + FOREIGN KEY(has_input) REFERENCES sample (id), + FOREIGN KEY(has_protocol) REFERENCES protocol (id), + FOREIGN KEY(has_agent) REFERENCES agent (id), + FOREIGN KEY(experiment_id) REFERENCES experiment (id) ); CREATE TABLE analysis_xref ( @@ -876,33 +900,18 @@ CREATE TABLE data_access_policy_xref ( FOREIGN KEY(backref_id) REFERENCES data_access_policy (id) ); -CREATE TABLE sample_xref ( +CREATE TABLE experiment_xref ( backref_id TEXT, xref TEXT, PRIMARY KEY (backref_id, xref), - FOREIGN KEY(backref_id) REFERENCES sample (id) + FOREIGN KEY(backref_id) REFERENCES experiment (id) ); -CREATE TABLE experiment_process ( - id TEXT NOT NULL, - alias TEXT, - creation_date TEXT, - update_date TEXT, - schema_type TEXT, - schema_version TEXT, - type "experiment process type enum", - title TEXT, - has_input TEXT, - has_protocol TEXT, - has_agent TEXT, - has_output TEXT, - has_attribute TEXT, - experiment_id TEXT, - PRIMARY KEY (id), - FOREIGN KEY(has_input) REFERENCES sample (id), - FOREIGN KEY(has_protocol) REFERENCES protocol (id), - FOREIGN KEY(has_agent) REFERENCES agent (id), - FOREIGN KEY(experiment_id) REFERENCES experiment (id) +CREATE TABLE sample_xref ( + backref_id TEXT, + xref TEXT, + PRIMARY KEY (backref_id, xref), + FOREIGN KEY(backref_id) REFERENCES sample (id) ); CREATE TABLE analysis_process_xref ( @@ -926,13 +935,6 @@ CREATE TABLE dataset_xref ( FOREIGN KEY(backref_id) REFERENCES dataset (id) ); -CREATE TABLE experiment_xref ( - backref_id TEXT, - xref TEXT, - PRIMARY KEY (backref_id, xref), - FOREIGN KEY(backref_id) REFERENCES experiment (id) -); - CREATE TABLE experiment_process_xref ( backref_id TEXT, xref TEXT, diff --git a/artifacts/sql/ghga_models.py b/artifacts/sql/ghga_models.py index 5b9baf01..8ae28f63 100644 --- a/artifacts/sql/ghga_models.py +++ b/artifacts/sql/ghga_models.py @@ -300,7 +300,6 @@ Column('has_attribute', Text), Column('accession', Text), Column('ega_accession', Text), - Column('submission_id', Text, ForeignKey('submission.id')), ) tbl_experiment_process = Table('experiment_process', metadata, Column('id', Text, primary_key=True), @@ -470,6 +469,7 @@ Column('name', Text), Column('type', Text), Column('description', Text), + Column('case_control_status', Text), Column('vital_status_at_sampling', Text), Column('isolation', Text), Column('storage', Text), @@ -538,6 +538,7 @@ Column('has_sample', Text), Column('has_biospecimen', Text), Column('has_individual', Text), + Column('has_experiment', Text), Column('has_protocol', Text), Column('has_analysis', Text), Column('has_file', Text), @@ -820,12 +821,6 @@ mapper_registry.map_imperatively(Study, tbl_study, properties={ }) mapper_registry.map_imperatively(Submission, tbl_submission, properties={ - - 'has_experiment': - relationship(Experiment, - foreign_keys=tbl_experiment.columns["submission_id"], - backref='Submission'), - }) mapper_registry.map_imperatively(Technology, tbl_technology, properties={ }) From 515ed58310fa706cdc5b1dce033ec8c5d29b0f00 Mon Sep 17 00:00:00 2001 From: deepakunni3 Date: Fri, 29 Apr 2022 15:47:32 +0200 Subject: [PATCH 3/3] Update changelog.md --- changelog.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/changelog.md b/changelog.md index ffa3326f..e3f20da8 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,44 @@ +## 0.7.0 release + +- Fixed range for Dataset slots +- Added `case control status` slot to Sample +- Added enum for paired end/single end read status + +## 0.6.0 release + +- Added `type` to appropriate classes +- Removed redundant declaration of slots in class definitions +- Changed `has parameter` slot to `has workflow parameter` +- Added `data request form` slot to the `data access policy` class +- Added `ancestry`, `data use permission`, `data use modifier` classes +- Added `has data user permission` and `has data use modifier` slots to `data use permission` class +- Added `has ancestry` that refers to the ancestral group an individual is part of +- Reorganized classes that are ontology classes +- Added `metadata mixin` to `submission` class +- Changed `has anatomical entity` to a multivalued field +- Removed `has data access policy` from `submission` class +- Added `has protocol` and `has publication` to `submission` class +- Added `type` to `experiment process` +- Added `has attribute` to `experiment process` +- Added `concept identifier` and `concept name` to `ontology class mixin` +- Added enum for age range +- Normalized representation of enum values +- Added `affiliation` to `submission` class to track the data hub/institution that is making the submission +- Fixed `id` and `alias` for `publication` class +- Added `has file` to `individual` class and `study` class +- Added GWAS to `study type enum` +- Added `drs uri` to `file` class +- Changed `has output` of `experiment process` class to be multivalued +- Changed `has sample` of `experiment` class to be multivalued +- Added `has file` to `protocol` class +- Added `type` to `biospecimen` class +- Removed `has experiment` and `has analysis` from `study` class +- Added `has attribute` to `experiment`, `file`, `data access policy`, `data access committee clases +- Added `other` category for 'file type enum' and 'age range enum' +- Changed `has individual` to optional for `sample` class +- Changed `type` to optional for `dataset` class +- Fixed range of `size` to integer + ## 0.5.0 release - Deprecated `technology` class and `has technology` slot