From 410dfaa49462f5e7c0633173b134a9d864351486 Mon Sep 17 00:00:00 2001 From: Florian Kraus <84305754+krausf@users.noreply.github.com> Date: Tue, 16 Nov 2021 14:49:20 +0100 Subject: [PATCH 01/16] Updated Schema for MVP (#22) - addition of slots and descriptions - Definition of the Sequencing and LibraryPreparation Protocol coauthored with @krausf --- src/schema/ghga.yaml | 376 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 362 insertions(+), 14 deletions(-) diff --git a/src/schema/ghga.yaml b/src/schema/ghga.yaml index 551ce750..4dccb632 100644 --- a/src/schema/ghga.yaml +++ b/src/schema/ghga.yaml @@ -156,9 +156,15 @@ classes: slots: - has study slot_usage: + title: + description: >- + Comprehensive title for the project. + required: true description: description: >- - A detailed description about this Project. + Short textual description of the project + (Some information on the protocol, sample used and collected etc) + required: true has publication: description: >- One or more Publication entities associated with this Project. @@ -171,7 +177,8 @@ classes: range: experiment has attribute: description: >- - Custom key/value pairs that further characterizes this Project. + Custom attributes for the Project + (eg: Cancer - Colon cancer, prostrate cancer, blood cancer etc) multivalued: true range: attribute @@ -182,12 +189,15 @@ classes: detailed examination and analysis of a subject to learn more about the phenomenon being studied. slots: + - affiliation + - has publication - has experiment - has analysis + - has attribute slot_usage: title: description: >- - A descriptive title for the Study. + Comprehensive title for the study. required: true description: description: >- @@ -196,8 +206,13 @@ classes: type: description: >- The type of Study. For example, "Cancer Genomics", "Epigenetics", "Exome Sequencing". - # TODO: Enum + range: study_type_enum + required: true + affiliation: + description: >- + Affiliations with this study. required: true + multivalued: true has publication: description: >- One or more Publication entities associated with this Study. @@ -215,7 +230,8 @@ classes: range: analysis has attribute: description: >- - Custom key/value pairs that further characterizes the Study. + Custom key/value pairs that further characterizes the Study. + (e.g.: approaches - single-cell, bulk etc) multivalued: true range: attribute @@ -232,6 +248,9 @@ classes: slots: - name - description + - biological replicates + - technical replicates + - experimental replicates - has study - has sample - has technology @@ -240,11 +259,12 @@ classes: slot_usage: name: description: >- - Name for the Experiment. + Name for the experiment (eg: GHGAE_PBMC_RNAseq). required: true description: description: >- - A description for the Experiment. + A detailed description of the Experiment. + required: true has study: description: >- The Study entity associated with this Experiment. @@ -277,16 +297,20 @@ classes: to a File via an assay. The Experiment Process also keeps track of the Protocol used and the Agent that is running the experiment. slots: - - title + - name - has input - has protocol - has agent - has output slot_usage: + name: + description: >- + Explanation of the step(s) involved in performing the experiment until Sequencing part + (eg: Sample extraction -> Target Enrichment) has input: description: >- The input to the Experiment Process. Usually a Sample entity. - range: sample + range: sample has protocol: description: >- The Protocol entity used by this Experiment Process. @@ -302,6 +326,76 @@ classes: # TODO: what happens when we want to represent multiple samples via ExperimentProcess? range: file + library preparation protocol: + is_a: protocol + description: >- + Information about the library preparation of an Experiment. + slots: + - name + - description + - library name + - library layout + - library type + - library selection + - library construction + - library preparation + - library level + - library construction kit retail name + - library construction kit manufacturer + - primer + - end bias + - target regions + - rnaseq strandedness + - has attribute + - description + slot_usage: + name: + description: >- + Name of the library preparation protocol (eg: mRNA-seq library preparation). + required: true + description: + description: >- + Description about how a sequencing library was prepared (eg: Library construction method). + required: true + has attribute: + description: >- + One or more attributes that further characterizes this Library Preparation Protocol. + + sequencing protocol: + is_a: protocol + description: >- + Information about the sequencing of a sample. + slots: + - name + - description + - sequencing center + - instrument model + - read length + - read pair number + - target coverage + - reference annotation + - lane number + - flow cell id + - flow cell type + - umi barcode read + - umi barcode size + - umi barcode offset + - cell barcode read + - cell barcode offset + - cell barcode size + - sample barcode read + - has attribute + slot_usage: + name: + description: >- + Name of the library preparation protocol (eg: mRNA-seq,Whole exome long-read sequencing etc). + description: + description: >- + Description about the sequencing protocol (eg: mRNA-seq,Whole exome long-read sequencing etc). + has attribute: + description: >- + One or more attributes that further characterizes this Sequencing Protocol. + protocol: is_a: information content entity aliases: ['library protocol', 'experiment protocol'] @@ -461,20 +555,39 @@ classes: - biolink:MaterialSample slots: - name + - type - description + - vital status at sampling + - tissue #TODO + - isolation #TODO + - storage #TODO - has individual - has biospecimen slot_usage: name: description: >- Name of the Sample. + required: true type: description: >- Type of sample: 'Case' or 'Control'. range: case_control_enum description: description: >- - Brief description of the Sample. + Short textual description of the sample + (How the sample was collected, sample source, + protocol followed for processing the sample etc) + tissue: + description: >- + Description of Sample Source (eg: Blood, Serum etc). + required: true + isolation: + description: >- + Method or Device employed for collecting sample. + storage: + description: >- + Methods by which sample is stored + (e.g. frozen in liquid nitrogen). has individual: description: >- The Individual from which this Sample was derived from. @@ -520,19 +633,27 @@ classes: - has children slot_usage: gender: - description: Gender of an Individual. + description: >- + Gender of an Individual/ Identification as male/masculine, + female/feminine or something else, and association + with a (social) role or set of behavioral and cultural traits sex: - description: Biological Sex of an Individual. + description: Biological sex of a sequenced individual. ("Female", "Male"). required: true range: biological_sex_enum age: description: Age of an Individual. + required: true year of birth: description: Year of Birth of an Individual. vital status: - description: Vital status of an Individual. + description: Last known Vital Status of an Individual. + required: true + range: vital_status_enum ethnicity: - description: Ethnicity of an Individual. + description: >- + A social group characterized by a distinctive social and cultural + tradition that is maintained from generation to generation.. ancestry: description: >- Ancestry of an Individual. Typically a value from Human Ancestry Ontology. @@ -615,6 +736,7 @@ classes: type: description: >- The file type: Aligned Reads, Unaligned Reads, etc. + range: file_type_enum size: description: >- The file size in bytes. @@ -914,6 +1036,7 @@ classes: valid DOI. slots: - title + - abstract slot_usage: id: description: >- @@ -921,6 +1044,9 @@ classes: title: description: >- The title for the Publication. + abstract: + description: >- + The abstract of the Publication. xref: description: >- One or more cross-references for this Publication. @@ -1033,6 +1159,15 @@ slots: abstract: description: The abstract - a short blurb - associated with an entity. + technical replicates: + description: Number of replicate samples (technical replicates). + + biological replicates: + description: Number of independent samples (biological replicates). + + experimental replicates: + description: Number of experiment replications. + xref: description: Alternate identifiers for an entity. multivalued: true @@ -1081,6 +1216,12 @@ slots: has analysis: description: The analysis associated with an entity. + has sequencing protocol: + description: The sequencing protocol associated with an entity. + + has library preparation protocol: + description: The Library Preparation Protocol associated with an entity. + has technology: description: The technology associated with an entity. range: technology @@ -1175,6 +1316,15 @@ slots: description: The age of a person. range: integer + tissue: + description: The source of a sample. + + isolation: + description: Method or device employed for collecting/isolating a sample. + + storage: + description: Methods by which a sample is stored. + year of birth: description: Year of Birth of a person. @@ -1245,6 +1395,133 @@ slots: value type: description: The semantic type for the value of an attribute. + affiliation: + description: Affiliations associated with an instance. + + library name: + description: >- + Library Name (e.g.: Sequencer layout_macromolecule) + + library layout: + description: >- + Describe whether the library was sequenced in single-end (forward or reverse) or paired-end mode + + library type: + description: >- + Describe the level of omics analysis (eg: Metagenome, transcriptome, etc) + + library selection: + description: >- + Library Selection method (e.g. random, PCA, cDNA, etc ) + + library construction: + description: >- + The name of a library construction approach being used. (eg: "10X v2 sequencing" or "Smart-seq2") + + library preparation: + description: >- + The general method for sequencing library construction (e.g. KAPA PCR-free). + + library level: + description: >- + Single Cell Sequencing or Bulk Sequencing + + library construction kit retail name: + description: >- + A unique identifier for the kit used to construct a genomic library. + This may include the vendor name, kit name and kit version + (e.g. Agilent sure select Human Exome V8, Twist RefSeq Exome, etc.) + + library construction kit manufacturer: + description: >- + Manufacturer of library construction kit + + primer: + description: >- + The type of primer used for reverse transcription, e.g. "oligo-dT" or "random" primer. + This allows users to identify content of the cDNA library input e.g. enriched for mRNA. + + end bias: + description: >- + The end of the cDNA molecule that is preferentially sequenced, + e.g. 3/5 prime tag or end, or the full-length transcript. + + target regions: + description: >- + subset of genes or specific regions of the genome, which are most likely to be involved in the phenotype under study + + rnaseq strandedness: + description: >- + The strandedness of the library, whether reads come from both strands of the cDNA or only from the first (antisense) or the second (sense) strand. + + sequencing center: + description: >- + Center where sample was sequenced. + + instrument model: + description: >- + The name and model of the technology platform used to perform sequencing. + + read length: + description: >- + Length of sequencing reads (eg: Long or short or actual number of the read length etc). + + read pair number: + description: >- + Denotes whether a submitted FASTQ file contains forward (R1) or reverse (R2) reads for paired-end sequencing. + + reference annotation: + description: >- + Reference genome(s) or annotation(s) used for prior analyses (eg: GRCh38.p13). + + lane number: + description: >- + Number of lanes on used flow cell. + + target coverage: + description: >- + Mean coverage for whole genome sequencing, or mean target coverage for whole exome and targeted sequencing + + flow cell id: + description: >- + Flow Cell ID (eg: Experiment ID_Cell 1_Lane_1). + + flow cell type: + description: >- + Type of flow cell used (e.g. S4, S2 for NovaSeq; PromethION, Flongle for Nanopore) + + umi barcode read: + description: >- + The type of read that contains the UMI barcode (Eg: index1/index2/read1/read2) + + umi barcode offset: + description: >- + The offset in sequence of the UMI identifying barcode. (E.g. "16"). + + umi barcode size: + description: >- + The size of the UMI identifying barcode (Eg. "10"). + + cell barcode read: + description: >- + The type of read that contains the cell barcode (eg: index1/index2/read1/read2). + + cell barcode offset: + description: >- + The offset in sequence of the cell identifying barcode. (Eg. "0"). + + cell barcode size: + description: >- + The size of the cell identifying barcode (E.g. "16"). + + sample barcode read: + description: >- + The type of read that contains the sample barcode (eg: index1/index2/read1/read2). + + vital status at sampling: + description: >- + Vital status at the age of the sampling. + enums: case_control_enum: description: >- @@ -1278,3 +1555,74 @@ enums: description: >- Role of a Data Steward where the user is responsible for approving request from a user for one or more Datasets. + + vital_status_enum: + description: >- + Enum to capture the vital status of an individual. + permissible_values: + alive: + description: >- + Showing characteristics of life; displaying signs of life. + deceased: + description: >- + The cessation of life. + + study_type_enum: + description: >- + Enum to capture the type of a study. + permissible_values: + whole_genome_sequencing: + description: Whole Genome Sequencing + metagenomics: + description: Metagenomics + transcriptome_analysis: + description: Transcriptome Analysis + resequencing: + description: Resequencing + epigenetics: + description: Epigenetics + synthetic_genomics: + description: Sythetic Genomics + forensic_paleo_genomics: + description: Forensic or Paleo-genomics + gene_regulation: + description: Gene Regulation Study + cancer_genomics: + description: Cancer Genomics + population_genomics: + description: Population Genomics + rna_seq: + description: RNAseq + exome_sequencing: + description: Exome Sequencing + pooled_clone_sequencing: + description: Pooled Clone Sequencing + other: + description: Other study + + file_type_enum: + description: >- + Enum to capture file types. + permissible_values: + bam: + description: BAM File + complete_genomics: + description: Complete Genomics File + cram: + description: CRAM File + fasta: + description: Fasta File + fastq: + description: FastQ File + pacbio_hdf5: + description: PacBio HDF5 File + sff: + description: >- + Standard flowgram format used to encode results + of pyrosequencing from the 454 Life Sciences platform. + srf: + description: >- + SRF is a generic format for DNA sequence data. + vcf: + description: >- + vcf File for storing gene sequence variations. From 2ed7d1d331841042d8c238f3f217de734094b83f Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 16 Nov 2021 13:50:24 +0000 Subject: [PATCH 02/16] Autogenerate artifacts --- artifacts/csv/ghga.csv | 2 + artifacts/graphql/ghga.graphql | 94 +- artifacts/jsonschema/ghga.schema.json | 386 ++++++- artifacts/owl/ghga.owl.ttl | 827 +++++++++++---- artifacts/python/ghga.py | 579 +++++++++- artifacts/rdf/ghga.ttl | 1416 +++++++++++++++++++------ artifacts/shex/ghga.shex | 107 +- artifacts/sql/ghga.sql | 116 +- artifacts/sql/ghga_models.py | 83 +- 9 files changed, 2958 insertions(+), 652 deletions(-) diff --git a/artifacts/csv/ghga.csv b/artifacts/csv/ghga.csv index 22733463..98dcde59 100644 --- a/artifacts/csv/ghga.csv +++ b/artifacts/csv/ghga.csv @@ -27,6 +27,7 @@ file,, individual,,An Individual is a Person who is participating in a Study. information_content_entity,,A generically dependent continuant that is about some thing. investigation,,Investigation is the process of carrying out a plan or procedure so as to discover fact or information about the object of study. +library_preparation_protocol,,Information about the library preparation of an Experiment. material_entity,,"A material entity is a physical entity that is spatially extended, exists as a whole at any point in time and has mass." member,,Member of an Organization or a Committee. named_thing,,"A databased entity, concept or class. This is a generic class that is the root of all the other classes." @@ -39,6 +40,7 @@ protocol,,"A plan specification which has sufficient level of detail and quantit publication,,"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." research_activity,,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. sample,,"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)." +sequencing_protocol,,Information about the sequencing of a sample. study,,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. technology,,A Technology is an abstraction that represents the instrument used for an assay. The Technology entity captures instrument-specific attributes that are relevant for an Experiment entity. The Technology entity may be further characterized by its children where each child has fields that are relevant to that particular technology. user,,A user in GHGA. diff --git a/artifacts/graphql/ghga.graphql b/artifacts/graphql/ghga.graphql index 7da17e62..8e0a46af 100644 --- a/artifacts/graphql/ghga.graphql +++ b/artifacts/graphql/ghga.graphql @@ -269,9 +269,9 @@ type Donor additionalName: String gender: String sex: BiologicalSexEnum! - age: Integer + age: Integer! yearOfBirth: String - vitalStatus: String + vitalStatus: VitalStatusEnum! geographicalRegion: String ethnicity: String ancestry: String @@ -291,7 +291,10 @@ type Experiment type: String hasPublication: Publication name: String! - description: String + description: String! + biologicalReplicates: String + technicalReplicates: String + experimentalReplicates: String hasStudy: Study! hasSample: Sample! hasTechnology: Technology @@ -326,7 +329,7 @@ type ExperimentProcess hasAttribute: [Attribute] creationDate: String updateDate: String - title: String + name: String hasInput: Sample hasProtocol: Protocol hasAgent: Agent @@ -361,7 +364,7 @@ type File checksum: String fileIndex: String category: String - type: String + type: FileTypeEnum } type Individual @@ -378,9 +381,9 @@ type Individual additionalName: String gender: String sex: BiologicalSexEnum! - age: Integer + age: Integer! yearOfBirth: String - vitalStatus: String + vitalStatus: VitalStatusEnum! geographicalRegion: String ethnicity: String ancestry: String @@ -413,6 +416,33 @@ type Investigation hasPublication: Publication } +type LibraryPreparationProtocol + { + id: String! + accession: String + xref: [String] + type: String + creationDate: String + updateDate: String + url: String + name: String! + description: String! + libraryName: String + libraryLayout: String + libraryType: String + librarySelection: String + libraryConstruction: String + libraryPreparation: String + libraryLevel: String + libraryConstructionKitRetailName: String + libraryConstructionKitManufacturer: String + primer: String + endBias: String + targetRegions: String + rnaseqStrandedness: String + hasAttribute: [Attribute] + } + type MaterialEntity { id: String! @@ -510,9 +540,9 @@ type Project type: String creationDate: String updateDate: String - title: String hasStudy: [Experiment] - description: String + title: String! + description: String! hasPublication: [Publication] hasAttribute: [Attribute] } @@ -539,6 +569,7 @@ type Publication creationDate: String updateDate: String title: String + abstract: String id: String! xref: [String] } @@ -564,14 +595,48 @@ type Sample hasAttribute: [Attribute] creationDate: String updateDate: String - name: String + name: String! + type: String description: String + vitalStatusAtSampling: String + tissue: String! + isolation: String + storage: String hasIndividual: Individual! hasBiospecimen: Biospecimen - type: CaseControlEnum xref: [String] } +type SequencingProtocol + { + id: String! + accession: String + xref: [String] + type: String + creationDate: String + updateDate: String + url: String + name: String + description: String + sequencingCenter: String + instrumentModel: String + readLength: String + readPairNumber: String + targetCoverage: String + referenceAnnotation: String + laneNumber: String + flowCellId: String + flowCellType: String + umiBarcodeRead: String + umiBarcodeSize: String + umiBarcodeOffset: String + cellBarcodeRead: String + cellBarcodeOffset: String + cellBarcodeSize: String + sampleBarcodeRead: String + hasAttribute: [Attribute] + } + type Study { id: String! @@ -579,13 +644,14 @@ type Study xref: [String] creationDate: String updateDate: String + affiliation: [String]! + hasPublication: [Publication] hasExperiment: [Experiment] hasAnalysis: [Analysis] + hasAttribute: [Attribute] title: String! description: String! - type: String! - hasPublication: [Publication] - hasAttribute: [Attribute] + type: StudyTypeEnum! } type Technology diff --git a/artifacts/jsonschema/ghga.schema.json b/artifacts/jsonschema/ghga.schema.json index f2a21d5f..d808c86a 100644 --- a/artifacts/jsonschema/ghga.schema.json +++ b/artifacts/jsonschema/ghga.schema.json @@ -1148,7 +1148,7 @@ "type": "string" }, "ethnicity": { - "description": "Ethnicity of an Individual.", + "description": "A social group characterized by a distinctive social and cultural tradition that is maintained from generation to generation..", "type": "string" }, "family_name": { @@ -1156,7 +1156,7 @@ "type": "string" }, "gender": { - "description": "Gender of an Individual.", + "description": "Gender of an Individual/ Identification as male/masculine, female/feminine or something else, and association with a (social) role or set of behavioral and cultural traits", "type": "string" }, "geographical_region": { @@ -1188,7 +1188,7 @@ }, "sex": { "$ref": "#/$defs/BiologicalSexEnum", - "description": "Biological Sex of an Individual." + "description": "Biological sex of a sequenced individual. (\"Female\", \"Male\")." }, "type": { "description": "The type of an entity.", @@ -1199,8 +1199,8 @@ "type": "string" }, "vital_status": { - "description": "Vital status of an Individual.", - "type": "string" + "$ref": "#/$defs/VitalStatusEnum", + "description": "Last known Vital Status of an Individual." }, "xref": { "description": "Holds one or more database cross references.", @@ -1216,7 +1216,9 @@ }, "required": [ "id", - "sex" + "sex", + "age", + "vital_status" ], "title": "Donor", "type": "object" @@ -1229,12 +1231,20 @@ "description": "A unique identifier assigned to an entity for the sole purpose of referring to that entity in a global scope.", "type": "string" }, + "biological_replicates": { + "description": "Number of independent samples (biological replicates).", + "type": "string" + }, "creation_date": { "description": "Timestamp (in ISO 8601 format) when the entity was created.", "type": "string" }, "description": { - "description": "A description for the Experiment.", + "description": "A detailed description of the Experiment.", + "type": "string" + }, + "experimental_replicates": { + "description": "Number of experiment replications.", "type": "string" }, "has_attribute": { @@ -1279,7 +1289,11 @@ "type": "string" }, "name": { - "description": "Name for the Experiment.", + "description": "Name for the experiment (eg: GHGAE_PBMC_RNAseq).", + "type": "string" + }, + "technical_replicates": { + "description": "Number of replicate samples (technical replicates).", "type": "string" }, "title": { @@ -1305,6 +1319,7 @@ "required": [ "id", "name", + "description", "has_study", "has_sample" ], @@ -1445,8 +1460,8 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, - "title": { - "description": "The title that describes an entity.", + "name": { + "description": "Explanation of the step(s) involved in performing the experiment until Sequencing part (eg: Sample extraction -> Target Enrichment) ", "type": "string" }, "type": { @@ -1579,8 +1594,8 @@ "type": "string" }, "type": { - "description": "The file type: Aligned Reads, Unaligned Reads, etc.", - "type": "string" + "$ref": "#/$defs/FileTypeEnum", + "description": "The file type: Aligned Reads, Unaligned Reads, etc." }, "update_date": { "description": "Timestamp (in ISO 8601 format) when the entity was updated.", @@ -1600,6 +1615,22 @@ "title": "File", "type": "object" }, + "FileTypeEnum": { + "description": "Enum to capture file types.", + "enum": [ + "bam", + "complete_genomics", + "cram", + "fasta", + "fastq", + "pacbio_hdf5", + "sff", + "srf", + "vcf" + ], + "title": "FileTypeEnum", + "type": "string" + }, "Individual": { "additionalProperties": false, "description": "An Individual is a Person who is participating in a Study.", @@ -1625,7 +1656,7 @@ "type": "string" }, "ethnicity": { - "description": "Ethnicity of an Individual.", + "description": "A social group characterized by a distinctive social and cultural tradition that is maintained from generation to generation..", "type": "string" }, "family_name": { @@ -1633,7 +1664,7 @@ "type": "string" }, "gender": { - "description": "Gender of an Individual.", + "description": "Gender of an Individual/ Identification as male/masculine, female/feminine or something else, and association with a (social) role or set of behavioral and cultural traits", "type": "string" }, "geographical_region": { @@ -1665,7 +1696,7 @@ }, "sex": { "$ref": "#/$defs/BiologicalSexEnum", - "description": "Biological Sex of an Individual." + "description": "Biological sex of a sequenced individual. (\"Female\", \"Male\")." }, "type": { "description": "The type of an entity.", @@ -1676,8 +1707,8 @@ "type": "string" }, "vital_status": { - "description": "Vital status of an Individual.", - "type": "string" + "$ref": "#/$defs/VitalStatusEnum", + "description": "Last known Vital Status of an Individual." }, "xref": { "description": "Holds one or more database cross references.", @@ -1693,7 +1724,9 @@ }, "required": [ "id", - "sex" + "sex", + "age", + "vital_status" ], "title": "Individual", "type": "object" @@ -1800,6 +1833,117 @@ "title": "Investigation", "type": "object" }, + "LibraryPreparationProtocol": { + "additionalProperties": false, + "description": "Information about the library preparation of an Experiment.", + "properties": { + "accession": { + "description": "A unique identifier assigned to an entity for the sole purpose of referring to that entity in a global scope.", + "type": "string" + }, + "creation_date": { + "description": "Timestamp (in ISO 8601 format) when the entity was created.", + "type": "string" + }, + "description": { + "description": "Description about how a sequencing library was prepared (eg: Library construction method).", + "type": "string" + }, + "end_bias": { + "description": "The end of the cDNA molecule that is preferentially sequenced, e.g. 3/5 prime tag or end, or the full-length transcript.", + "type": "string" + }, + "has_attribute": { + "description": "One or more attributes that further characterizes this Library Preparation Protocol.", + "items": { + "$ref": "#/$defs/Attribute" + }, + "type": "array" + }, + "id": { + "description": "The internal unique identifier for an entity.", + "type": "string" + }, + "library_construction": { + "description": "The name of a library construction approach being used. (eg: \"10X v2 sequencing\" or \"Smart-seq2\")", + "type": "string" + }, + "library_construction_kit_manufacturer": { + "description": "Manufacturer of library construction kit", + "type": "string" + }, + "library_construction_kit_retail_name": { + "description": "A unique identifier for the kit used to construct a genomic library. This may include the vendor name, kit name and kit version (e.g. Agilent sure select Human Exome V8, Twist RefSeq Exome, etc.)", + "type": "string" + }, + "library_layout": { + "description": "Describe whether the library was sequenced in single-end (forward or reverse) or paired-end mode", + "type": "string" + }, + "library_level": { + "description": "Single Cell Sequencing or Bulk Sequencing", + "type": "string" + }, + "library_name": { + "description": "Library Name (e.g.: Sequencer layout_macromolecule)", + "type": "string" + }, + "library_preparation": { + "description": "The general method for sequencing library construction (e.g. KAPA PCR-free).", + "type": "string" + }, + "library_selection": { + "description": "Library Selection method (e.g. random, PCA, cDNA, etc )", + "type": "string" + }, + "library_type": { + "description": "Describe the level of omics analysis (eg: Metagenome, transcriptome, etc) ", + "type": "string" + }, + "name": { + "description": "Name of the library preparation protocol (eg: mRNA-seq library preparation).", + "type": "string" + }, + "primer": { + "description": "The type of primer used for reverse transcription, e.g. \"oligo-dT\" or \"random\" primer. This allows users to identify content of the cDNA library input e.g. enriched for mRNA.", + "type": "string" + }, + "rnaseq_strandedness": { + "description": "The strandedness of the library, whether reads come from both strands of the cDNA or only from the first (antisense) or the second (sense) strand.", + "type": "string" + }, + "target_regions": { + "description": "subset of genes or specific regions of the genome, which are most likely to be involved in the phenotype under study", + "type": "string" + }, + "type": { + "description": "The type of an entity.", + "type": "string" + }, + "update_date": { + "description": "Timestamp (in ISO 8601 format) when the entity was updated.", + "type": "string" + }, + "url": { + "description": "URL for the resource that describes this Protocol.", + "type": "string" + }, + "xref": { + "description": "Holds one or more database cross references.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "id", + "name", + "description" + ], + "title": "LibraryPreparationProtocol", + "type": "object" + }, "MaterialEntity": { "additionalProperties": false, "description": "A material entity is a physical entity that is spatially extended, exists as a whole at any point in time and has mass.", @@ -2178,11 +2322,11 @@ "type": "string" }, "description": { - "description": "A detailed description about this Project.", + "description": "Short textual description of the project (Some information on the protocol, sample used and collected etc) ", "type": "string" }, "has_attribute": { - "description": "Custom key/value pairs that further characterizes this Project.", + "description": "Custom attributes for the Project (eg: Cancer - Colon cancer, prostrate cancer, blood cancer etc)", "items": { "$ref": "#/$defs/Attribute" }, @@ -2207,7 +2351,7 @@ "type": "string" }, "title": { - "description": "The title that describes an entity.", + "description": "Comprehensive title for the project.", "type": "string" }, "type": { @@ -2227,7 +2371,9 @@ } }, "required": [ - "id" + "id", + "title", + "description" ], "title": "Project", "type": "object" @@ -2293,6 +2439,10 @@ "additionalProperties": false, "description": "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.", "properties": { + "abstract": { + "description": "The abstract of the Publication.", + "type": "string" + }, "accession": { "description": "A unique identifier assigned to an entity for the sole purpose of referring to that entity in a global scope.", "type": "string" @@ -2408,7 +2558,7 @@ "type": "string" }, "description": { - "description": "Brief description of the Sample.", + "description": "Short textual description of the sample (How the sample was collected, sample source, protocol followed for processing the sample etc) ", "type": "string" }, "has_attribute": { @@ -2430,18 +2580,34 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "isolation": { + "description": "Method or Device employed for collecting sample.", + "type": "string" + }, "name": { "description": "Name of the Sample.", "type": "string" }, + "storage": { + "description": "Methods by which sample is stored (e.g. frozen in liquid nitrogen).", + "type": "string" + }, + "tissue": { + "description": "Description of Sample Source (eg: Blood, Serum etc).", + "type": "string" + }, "type": { - "$ref": "#/$defs/CaseControlEnum", - "description": "Type of sample: 'Case' or 'Control'." + "description": "The type of an entity.", + "type": "string" }, "update_date": { "description": "Timestamp (in ISO 8601 format) when the entity was updated.", "type": "string" }, + "vital_status_at_sampling": { + "description": "Vital status at the age of the sampling.", + "type": "string" + }, "xref": { "description": "One or more cross-references for this Sample. For example, this Sample may have an EBI BioSamples accession or an EGA Sample accession.", "items": { @@ -2452,11 +2618,134 @@ }, "required": [ "id", + "name", + "tissue", "has_individual" ], "title": "Sample", "type": "object" }, + "SequencingProtocol": { + "additionalProperties": false, + "description": "Information about the sequencing of a sample.", + "properties": { + "accession": { + "description": "A unique identifier assigned to an entity for the sole purpose of referring to that entity in a global scope.", + "type": "string" + }, + "cell_barcode_offset": { + "description": "The offset in sequence of the cell identifying barcode. (Eg. \"0\").", + "type": "string" + }, + "cell_barcode_read": { + "description": "The type of read that contains the cell barcode (eg: index1/index2/read1/read2).", + "type": "string" + }, + "cell_barcode_size": { + "description": "The size of the cell identifying barcode (E.g. \"16\").", + "type": "string" + }, + "creation_date": { + "description": "Timestamp (in ISO 8601 format) when the entity was created.", + "type": "string" + }, + "description": { + "description": "Description about the sequencing protocol (eg: mRNA-seq,Whole exome long-read sequencing etc).", + "type": "string" + }, + "flow_cell_id": { + "description": "Flow Cell ID (eg: Experiment ID_Cell 1_Lane_1).", + "type": "string" + }, + "flow_cell_type": { + "description": "Type of flow cell used (e.g. S4, S2 for NovaSeq; PromethION, Flongle for Nanopore)", + "type": "string" + }, + "has_attribute": { + "description": "One or more attributes that further characterizes this Sequencing Protocol.", + "items": { + "$ref": "#/$defs/Attribute" + }, + "type": "array" + }, + "id": { + "description": "The internal unique identifier for an entity.", + "type": "string" + }, + "instrument_model": { + "description": "The name and model of the technology platform used to perform sequencing.", + "type": "string" + }, + "lane_number": { + "description": "Number of lanes on used flow cell.", + "type": "string" + }, + "name": { + "description": "Name of the library preparation protocol (eg: mRNA-seq,Whole exome long-read sequencing etc).", + "type": "string" + }, + "read_length": { + "description": "Length of sequencing reads (eg: Long or short or actual number of the read length etc).", + "type": "string" + }, + "read_pair_number": { + "description": "Denotes whether a submitted FASTQ file contains forward (R1) or reverse (R2) reads for paired-end sequencing.", + "type": "string" + }, + "reference_annotation": { + "description": "Reference genome(s) or annotation(s) used for prior analyses (eg: GRCh38.p13).", + "type": "string" + }, + "sample_barcode_read": { + "description": "The type of read that contains the sample barcode (eg: index1/index2/read1/read2).", + "type": "string" + }, + "sequencing_center": { + "description": "Center where sample was sequenced.", + "type": "string" + }, + "target_coverage": { + "description": "Mean coverage for whole genome sequencing, or mean target coverage for whole exome and targeted sequencing", + "type": "string" + }, + "type": { + "description": "The type of an entity.", + "type": "string" + }, + "umi_barcode_offset": { + "description": "The offset in sequence of the UMI identifying barcode. (E.g. \"16\").", + "type": "string" + }, + "umi_barcode_read": { + "description": "The type of read that contains the UMI barcode (Eg: index1/index2/read1/read2)", + "type": "string" + }, + "umi_barcode_size": { + "description": "The size of the UMI identifying barcode (Eg. \"10\").", + "type": "string" + }, + "update_date": { + "description": "Timestamp (in ISO 8601 format) when the entity was updated.", + "type": "string" + }, + "url": { + "description": "URL for the resource that describes this Protocol.", + "type": "string" + }, + "xref": { + "description": "Holds one or more database cross references.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "id" + ], + "title": "SequencingProtocol", + "type": "object" + }, "Study": { "additionalProperties": false, "description": "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.", @@ -2465,6 +2754,13 @@ "description": "A unique identifier assigned to an entity for the sole purpose of referring to that entity in a global scope.", "type": "string" }, + "affiliation": { + "description": "Affiliations with this study.", + "items": { + "type": "string" + }, + "type": "array" + }, "creation_date": { "description": "Timestamp (in ISO 8601 format) when the entity was created.", "type": "string" @@ -2481,7 +2777,7 @@ "type": "array" }, "has_attribute": { - "description": "Custom key/value pairs that further characterizes the Study.", + "description": "Key/value pairs corresponding to an entity.", "items": { "$ref": "#/$defs/Attribute" }, @@ -2506,12 +2802,12 @@ "type": "string" }, "title": { - "description": "A descriptive title for the Study.", + "description": "Comprehensive title for the study.", "type": "string" }, "type": { - "description": "The type of Study. For example, \"Cancer Genomics\", \"Epigenetics\", \"Exome Sequencing\".", - "type": "string" + "$ref": "#/$defs/StudyTypeEnum", + "description": "The type of Study. For example, \"Cancer Genomics\", \"Epigenetics\", \"Exome Sequencing\"." }, "update_date": { "description": "Timestamp (in ISO 8601 format) when the entity was updated.", @@ -2527,6 +2823,7 @@ }, "required": [ "id", + "affiliation", "title", "description", "type" @@ -2534,6 +2831,27 @@ "title": "Study", "type": "object" }, + "StudyTypeEnum": { + "description": "Enum to capture the type of a study.", + "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", + "other" + ], + "title": "StudyTypeEnum", + "type": "string" + }, "Technology": { "additionalProperties": false, "description": "A Technology is an abstraction that represents the instrument used for an assay. The Technology entity captures instrument-specific attributes that are relevant for an Experiment entity. The Technology entity may be further characterized by its children where each child has fields that are relevant to that particular technology.", @@ -2653,6 +2971,15 @@ "title": "UserRoleEnum", "type": "string" }, + "VitalStatusEnum": { + "description": "Enum to capture the vital status of an individual.", + "enum": [ + "alive", + "deceased" + ], + "title": "VitalStatusEnum", + "type": "string" + }, "Workflow": { "additionalProperties": false, "description": "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.", @@ -2772,6 +3099,7 @@ "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "properties": {}, + "required": [], "title": "GHGA-Metadata-Schema", "type": "object" } diff --git a/artifacts/owl/ghga.owl.ttl b/artifacts/owl/ghga.owl.ttl index 9c69623f..c4708c2d 100644 --- a/artifacts/owl/ghga.owl.ttl +++ b/artifacts/owl/ghga.owl.ttl @@ -22,11 +22,11 @@ dcterms:license "https://creativecommons.org/publicdomain/zero/1.0/" ; pav:version "1.0.0a" ; skos:definition "The metadata schema for the German Human Genome-Phenome Archive (GHGA)." ; - linkml:generation_date "2021-11-05 09:54" ; + linkml:generation_date "2021-11-16T13:50:14" ; linkml:metamodel_version "1.7.0" ; linkml:source_file "ghga.yaml" ; - linkml:source_file_date "Fri Nov 5 09:54:09 2021" ; - linkml:source_file_size 37658 . + linkml:source_file_date "2021-11-16T13:49:34" ; + linkml:source_file_size 48524 . GHGA:AggregateDataset a owl:Class, linkml:ClassDefinition ; @@ -46,18 +46,18 @@ GHGA:AnalysisDataset a owl:Class, owl:onProperty GHGA:has_data_access_policy ] [ a owl:Restriction ; owl:onProperty GHGA:has_data_access_policy ; owl:someValuesFrom GHGA:DataAccessPolicy ] ) ], - [ a owl:Class ; - owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom GHGA:Analysis ; - owl:onProperty GHGA:has_experiment ] [ a owl:Restriction ; - owl:onProperty GHGA:has_experiment ; - owl:someValuesFrom GHGA:Analysis ] ) ], [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; owl:allValuesFrom GHGA:Study ; owl:onProperty GHGA:has_study ] [ a owl:Restriction ; owl:onProperty GHGA:has_study ; owl:someValuesFrom GHGA:Study ] ) ], + [ a owl:Class ; + owl:intersectionOf ( [ a owl:Restriction ; + owl:allValuesFrom GHGA:Analysis ; + owl:onProperty GHGA:has_experiment ] [ a owl:Restriction ; + owl:onProperty GHGA:has_experiment ; + owl:someValuesFrom GHGA:Analysis ] ) ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -126,26 +126,180 @@ GHGA:Family a owl:Class, 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." . -GHGA:Project a owl:Class, +GHGA:LibraryPreparationProtocol a owl:Class, linkml:ClassDefinition ; - rdfs:label "project" ; + rdfs:label "library preparation protocol" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom GHGA:Publication ; - owl:onProperty GHGA:has_publication ], + owl:onClass linkml:String ; + owl:onProperty GHGA:description ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:library_name ], + [ 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:rnaseq_strandedness ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:library_type ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:library_selection ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:library_construction ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:library_layout ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:library_preparation ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:library_level ], + [ 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:library_construction_kit_retail_name ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:library_construction_kit_manufacturer ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:name ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:primer ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:end_bias ], + GHGA:Protocol ; + skos:definition "Information about the library preparation of an Experiment." . + +GHGA:Project a owl:Class, + linkml:ClassDefinition ; + rdfs:label "project" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:title ; + 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:description ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Experiment ; owl:onProperty GHGA:has_study ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Publication ; + owl:onProperty GHGA:has_publication ], GHGA:ResearchActivity ; skos:closeMatch ; skos:definition "Any specifically defined piece of work that is undertaken or attempted to meet a single requirement." . +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:read_pair_number ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:target_coverage ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:sequencing_center ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:umi_barcode_read ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:umi_barcode_size ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:reference_annotation ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:name ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:flow_cell_id ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:cell_barcode_read ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:flow_cell_type ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:lane_number ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:sample_barcode_read ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:instrument_model ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:cell_barcode_offset ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:cell_barcode_size ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:read_length ], + [ 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:umi_barcode_offset ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:description ], + GHGA:Protocol ; + skos:definition "Information about the sequencing of a sample." . + GHGA:User a owl:Class, linkml:ClassDefinition ; rdfs:label "user" ; @@ -160,11 +314,17 @@ GHGA:User a owl:Class, GHGA:Person ; skos:definition "A user in GHGA." . -GHGA:abstract a owl:ObjectProperty, +GHGA:has_library_preparation_protocol a owl:ObjectProperty, linkml:SlotDefinition ; - rdfs:label "abstract" ; + rdfs:label "has library preparation protocol" ; rdfs:range linkml:String ; - skos:definition "The abstract - a short blurb - associated with an entity." . + skos:definition "The Library Preparation Protocol associated with an entity." . + +GHGA:has_sequencing_protocol a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "has sequencing protocol" ; + rdfs:range linkml:String ; + skos:definition "The sequencing protocol associated with an entity." . GHGA:parameters a owl:ObjectProperty, linkml:SlotDefinition ; @@ -194,13 +354,13 @@ GHGA:AnalysisProcess a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:title ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_input ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Agent ; owl:onProperty GHGA:has_agent ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_input ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:WorkflowStep ; @@ -226,29 +386,29 @@ GHGA:Biospecimen a owl:Class, linkml:ClassDefinition ; rdfs:label "biospecimen" ; rdfs:subClassOf [ 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:description ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:AnatomicalEntity ; owl:onProperty GHGA:has_anatomical_entity ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:PhenotypicFeature ; - owl:onProperty GHGA:has_phenotypic_feature ], + owl:onClass linkml:String ; + owl:onProperty GHGA:name ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Individual ; + owl:onProperty GHGA:has_individual ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Disease ; owl:onProperty GHGA:has_disease ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:PhenotypicFeature ; + owl:onProperty GHGA:has_phenotypic_feature ], 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." ; skos:exactMatch . @@ -267,20 +427,20 @@ GHGA:DataAccessCommittee a owl:Class, linkml:ClassDefinition ; rdfs:label "data access committee" ; rdfs:subClassOf [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:name ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; 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 GHGA:Member ; owl:onProperty GHGA:main_contact ], [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:name ; - owl:qualifiedCardinality 1 ], + owl:allValuesFrom GHGA:Member ; + owl:onProperty GHGA:has_member ], GHGA:Committee ; skos:definition "A group of members that are delegated to grant access to one or more datasets after ensuring the minimum criteria for data sharing has been met, and request for data use does not raise ethical and/or legal concerns." . @@ -288,17 +448,17 @@ GHGA:DataTransformation a owl:Class, linkml:ClassDefinition ; rdfs:label "data transformation" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:id ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:description ], [ 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:description ], + owl:onProperty GHGA:id ; + owl:qualifiedCardinality 1 ], GHGA:PlannedProcess ; skos:definition "A data transformation technique used to analyze and interpret data to gain a better understanding of it." ; skos:exactMatch . @@ -316,24 +476,24 @@ GHGA:ExperimentProcess a owl:Class, rdfs:label "experiment process" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Sample ; - owl:onProperty GHGA:has_input ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Protocol ; - owl:onProperty GHGA:has_protocol ], + owl:onClass linkml:String ; + owl:onProperty GHGA:name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Agent ; owl:onProperty GHGA:has_agent ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Protocol ; + owl:onProperty GHGA:has_protocol ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:File ; owl:onProperty GHGA:has_output ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:title ], + owl:onClass GHGA:Sample ; + owl:onProperty GHGA:has_input ], 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." . @@ -347,39 +507,10 @@ GHGA:PhenotypicFeature a owl:Class, SIO:010056, EFO:0000651 . -GHGA:Protocol a owl:Class, - linkml:ClassDefinition ; - rdfs:label "protocol" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:name ], - [ 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:url ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:description ], - GHGA:InformationContentEntity ; - skos:altLabel "experiment protocol", - "library protocol" ; - skos:closeMatch ; - 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:ResearchActivity a owl:Class, linkml:ClassDefinition ; rdfs:label "research activity" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Publication ; - owl:onProperty GHGA:has_publication ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:description ], @@ -387,6 +518,10 @@ GHGA:ResearchActivity a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:title ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Publication ; + owl:onProperty GHGA:has_publication ], GHGA:PlannedProcess ; skos:closeMatch ; 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." ; @@ -413,6 +548,9 @@ GHGA:WorkflowStep a owl:Class, GHGA:InformationContentEntity ; skos:definition "A Workflow Step represents each individual step performed in a Workflow. If the Workflow is a single-step workflow then the Workflow has just one Workflow Step entity. If the Workflow is a multi-step workflow then the Workflow has a Workflow Step entity for each step. All Workflow step specific attributes like parameters, and metadata about execution environment are captured by the Workflow Step entity." . +GHGA:abstract a owl:ObjectProperty, + linkml:SlotDefinition . + GHGA:accession a owl:ObjectProperty, linkml:SlotDefinition . @@ -428,18 +566,54 @@ GHGA:age a owl:ObjectProperty, GHGA:ancestry a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:biological_replicates a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "biological replicates" ; + rdfs:range linkml:String ; + skos:definition "Number of independent samples (biological replicates)." . + GHGA:category a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:cell_barcode_offset a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "cell barcode offset" ; + rdfs:range linkml:String ; + skos:definition "The offset in sequence of the cell identifying barcode. (Eg. \"0\")." . + +GHGA:cell_barcode_read a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "cell barcode read" ; + rdfs:range linkml:String ; + skos:definition "The type of read that contains the cell barcode (eg: index1/index2/read1/read2)." . + +GHGA:cell_barcode_size a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "cell barcode size" ; + rdfs:range linkml:String ; + skos:definition "The size of the cell identifying barcode (E.g. \"16\")." . + GHGA:checksum a owl:ObjectProperty, linkml:SlotDefinition . GHGA:creation_date a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:end_bias a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "end bias" ; + rdfs:range linkml:String ; + skos:definition "The end of the cDNA molecule that is preferentially sequenced, e.g. 3/5 prime tag or end, or the full-length transcript." . + GHGA:ethnicity a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:experimental_replicates a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "experimental replicates" ; + rdfs:range linkml:String ; + skos:definition "Number of experiment replications." . + GHGA:family_name a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "family name" ; @@ -449,6 +623,18 @@ GHGA:family_name a owl:ObjectProperty, GHGA:file_index a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:flow_cell_id a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "flow cell id" ; + rdfs:range linkml:String ; + skos:definition "Flow Cell ID (eg: Experiment ID_Cell 1_Lane_1)." . + +GHGA:flow_cell_type a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "flow cell type" ; + rdfs:range linkml:String ; + skos:definition "Type of flow cell used (e.g. S4, S2 for NovaSeq; PromethION, Flongle for Nanopore)" . + GHGA:format a owl:ObjectProperty, linkml:SlotDefinition . @@ -515,9 +701,78 @@ GHGA:has_workflow a owl:ObjectProperty, GHGA:has_workflow_step a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:instrument_model a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "instrument model" ; + rdfs:range linkml:String ; + skos:definition "The name and model of the technology platform used to perform sequencing." . + +GHGA:isolation a owl:ObjectProperty, + linkml:SlotDefinition . + GHGA:key_type a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:lane_number a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "lane number" ; + rdfs:range linkml:String ; + skos:definition "Number of lanes on used flow cell." . + +GHGA:library_construction a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "library construction" ; + rdfs:range linkml:String ; + skos:definition "The name of a library construction approach being used. (eg: \"10X v2 sequencing\" or \"Smart-seq2\")" . + +GHGA:library_construction_kit_manufacturer a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "library construction kit manufacturer" ; + rdfs:range linkml:String ; + skos:definition "Manufacturer of library construction kit" . + +GHGA:library_construction_kit_retail_name a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "library construction kit retail name" ; + rdfs:range linkml:String ; + skos:definition "A unique identifier for the kit used to construct a genomic library. This may include the vendor name, kit name and kit version (e.g. Agilent sure select Human Exome V8, Twist RefSeq Exome, etc.)" . + +GHGA:library_layout a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "library layout" ; + rdfs:range linkml:String ; + skos:definition "Describe whether the library was sequenced in single-end (forward or reverse) or paired-end mode" . + +GHGA:library_level a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "library level" ; + rdfs:range linkml:String ; + skos:definition "Single Cell Sequencing or Bulk Sequencing" . + +GHGA:library_name a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "library name" ; + rdfs:range linkml:String ; + skos:definition "Library Name (e.g.: Sequencer layout_macromolecule)" . + +GHGA:library_preparation a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "library preparation" ; + rdfs:range linkml:String ; + skos:definition "The general method for sequencing library construction (e.g. KAPA PCR-free)." . + +GHGA:library_selection a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "library selection" ; + rdfs:range linkml:String ; + skos:definition "Library Selection method (e.g. random, PCA, cDNA, etc )" . + +GHGA:library_type a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "library type" ; + rdfs:range linkml:String ; + skos:definition "Describe the level of omics analysis (eg: Metagenome, transcriptome, etc) " . + GHGA:main_contact a owl:ObjectProperty, linkml:SlotDefinition . @@ -536,21 +791,105 @@ GHGA:policy_text a owl:ObjectProperty, GHGA:policy_url a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:primer a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "primer" ; + rdfs:range linkml:String ; + skos:definition "The type of primer used for reverse transcription, e.g. \"oligo-dT\" or \"random\" primer. This allows users to identify content of the cDNA library input e.g. enriched for mRNA." . + GHGA:proband a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:read_length a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "read length" ; + rdfs:range linkml:String ; + skos:definition "Length of sequencing reads (eg: Long or short or actual number of the read length etc)." . + +GHGA:read_pair_number a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "read pair number" ; + rdfs:range linkml:String ; + skos:definition "Denotes whether a submitted FASTQ file contains forward (R1) or reverse (R2) reads for paired-end sequencing." . + +GHGA:reference_annotation a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "reference annotation" ; + rdfs:range linkml:String ; + skos:definition "Reference genome(s) or annotation(s) used for prior analyses (eg: GRCh38.p13)." . + +GHGA:rnaseq_strandedness a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "rnaseq strandedness" ; + rdfs:range linkml:String ; + skos:definition "The strandedness of the library, whether reads come from both strands of the cDNA or only from the first (antisense) or the second (sense) strand." . + GHGA:role a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:sample_barcode_read a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "sample barcode read" ; + rdfs:range linkml:String ; + skos:definition "The type of read that contains the sample barcode (eg: index1/index2/read1/read2)." . + +GHGA:sequencing_center a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "sequencing center" ; + rdfs:range linkml:String ; + skos:definition "Center where sample was sequenced." . + GHGA:sex a owl:ObjectProperty, linkml:SlotDefinition . GHGA:size a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:storage a owl:ObjectProperty, + linkml:SlotDefinition . + +GHGA:target_coverage a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "target coverage" ; + rdfs:range linkml:String ; + skos:definition "Mean coverage for whole genome sequencing, or mean target coverage for whole exome and targeted sequencing" . + +GHGA:target_regions a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "target regions" ; + rdfs:range linkml:String ; + skos:definition "subset of genes or specific regions of the genome, which are most likely to be involved in the phenotype under study" . + +GHGA:technical_replicates a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "technical replicates" ; + rdfs:range linkml:String ; + skos:definition "Number of replicate samples (technical replicates)." . + GHGA:telephone a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:tissue a owl:ObjectProperty, + linkml:SlotDefinition . + +GHGA:umi_barcode_offset a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "umi barcode offset" ; + rdfs:range linkml:String ; + skos:definition "The offset in sequence of the UMI identifying barcode. (E.g. \"16\")." . + +GHGA:umi_barcode_read a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "umi barcode read" ; + rdfs:range linkml:String ; + skos:definition "The type of read that contains the UMI barcode (Eg: index1/index2/read1/read2)" . + +GHGA:umi_barcode_size a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "umi barcode size" ; + rdfs:range linkml:String ; + skos:definition "The size of the UMI identifying barcode (Eg. \"10\")." . + GHGA:update_date a owl:ObjectProperty, linkml:SlotDefinition . @@ -563,6 +902,12 @@ GHGA:value_type a owl:ObjectProperty, GHGA:vital_status a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:vital_status_at_sampling a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "vital status at sampling" ; + rdfs:range linkml:String ; + skos:definition "Vital status at the age of the sampling." . + GHGA:year_of_birth a owl:ObjectProperty, linkml:SlotDefinition . @@ -572,11 +917,11 @@ GHGA:Agent a owl:Class, rdfs:subClassOf [ 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 ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:name ], GHGA:NamedThing ; skos:definition "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." ; skos:exactMatch . @@ -587,11 +932,11 @@ GHGA:DataUseCondition a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:permission ], + owl:onProperty GHGA:modifier ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:modifier ] ; + owl:onProperty GHGA:permission ] ; skos:definition "Data Use Condition represents the use conditions associated with a Dataset. A permission field can have one or more terms that collectively defines the data use condition. The modifier determines the interpretation of the use permission(s)." . GHGA:DiseaseOrPhenotypicFeature a owl:Class, @@ -600,11 +945,11 @@ GHGA:DiseaseOrPhenotypicFeature 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:description ], GHGA:BiologicalQuality ; 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 . @@ -614,8 +959,8 @@ GHGA:Investigation a owl:Class, rdfs:label "investigation" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Publication ; - owl:onProperty GHGA:has_publication ], + owl:onClass linkml:String ; + owl:onProperty GHGA:description ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -626,8 +971,8 @@ GHGA:Investigation a owl:Class, owl:onProperty GHGA:title ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onClass GHGA:Publication ; + owl:onProperty GHGA:has_publication ], GHGA:PlannedProcess ; skos:closeMatch ; 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." ; @@ -638,6 +983,10 @@ GHGA:Member a owl:Class, linkml:ClassDefinition ; rdfs:label "member" ; rdfs:subClassOf [ 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:organization ], @@ -645,10 +994,6 @@ GHGA:Member a owl:Class, owl:onClass linkml:String ; owl:onProperty GHGA:telephone ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:email ; - owl:qualifiedCardinality 1 ], GHGA:Person ; skos:definition "Member of an Organization or a Committee." . @@ -666,28 +1011,44 @@ GHGA:Sample a owl:Class, linkml:ClassDefinition ; rdfs:label "sample" ; rdfs:subClassOf [ a owl:Restriction ; - owl:onClass GHGA:Individual ; - owl:onProperty GHGA:has_individual ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass ; - owl:onProperty GHGA:type ], + owl:onClass linkml:String ; + owl:onProperty GHGA:isolation ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Biospecimen ; - owl:onProperty GHGA:has_biospecimen ], + owl:onClass linkml:String ; + owl:onProperty GHGA:storage ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty GHGA:xref ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:description ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty GHGA:xref ], + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:vital_status_at_sampling ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:tissue ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Biospecimen ; + owl:onProperty GHGA:has_biospecimen ], + [ a owl:Restriction ; + owl:onClass GHGA:Individual ; + owl:onProperty GHGA:has_individual ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ], + owl:onProperty GHGA:name ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:type ], 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, @@ -699,13 +1060,16 @@ 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, + linkml:SlotDefinition . + GHGA:email a owl:ObjectProperty, linkml:SlotDefinition . @@ -728,22 +1092,22 @@ GHGA:Analysis a owl:Class, linkml:ClassDefinition ; rdfs:label "analysis" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_input ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Workflow ; - owl:onProperty GHGA:has_workflow ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Study ; owl:onProperty GHGA:has_study ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:AnalysisProcess ; + owl:onProperty GHGA:has_analysis_process ], [ a owl:Restriction ; owl:allValuesFrom GHGA:File ; owl:onProperty GHGA:has_output ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:AnalysisProcess ; - owl:onProperty GHGA:has_analysis_process ], + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Workflow ; + owl:onProperty GHGA:has_workflow ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_input ], GHGA:DataTransformation ; skos:altLabel "data analysis" ; skos:definition "An Analysis is a data transformation that transforms input data to output data. The workflow used to achieve this transformation and the individual steps are also captured." . @@ -754,7 +1118,7 @@ GHGA:Person a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:given_name ], + owl:onProperty GHGA:additional_name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -762,13 +1126,38 @@ GHGA:Person a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:additional_name ], + owl:onProperty GHGA:given_name ], GHGA:NamedThing ; skos:definition "A member of the species Homo sapiens." ; skos:exactMatch , SIO:000498, . +GHGA:Protocol a owl:Class, + linkml:ClassDefinition ; + 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:name ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:description ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:url ], + GHGA:InformationContentEntity ; + skos:altLabel "experiment protocol", + "library protocol" ; + skos:closeMatch ; + 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:has_file a owl:ObjectProperty, linkml:SlotDefinition . @@ -791,39 +1180,35 @@ GHGA:DataAccessPolicy a owl:Class, linkml:ClassDefinition ; rdfs:label "data access policy" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom GHGA:DataUseCondition ; - owl:onProperty GHGA:has_data_use_condition ], + owl:onClass linkml:String ; + owl:onProperty GHGA:policy_text ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; 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 ], [ 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:name ], + owl:allValuesFrom GHGA:DataUseCondition ; + owl:onProperty GHGA:has_data_use_condition ], [ a owl:Restriction ; owl:onClass GHGA:DataAccessCommittee ; owl:onProperty GHGA:has_data_access_committee ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:policy_text ; - owl:qualifiedCardinality 1 ], GHGA:InformationContentEntity ; skos:definition "A Data Access Policy specifies under which circumstances, legal or otherwise, a user can have access to one or more Datasets belonging to one or more Studies." . GHGA:Dataset a owl:Class, linkml:ClassDefinition ; rdfs:label "dataset" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:type ; - owl:qualifiedCardinality 1 ], - [ a owl:Class ; + rdfs:subClassOf [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; owl:allValuesFrom GHGA:File ; owl:onProperty GHGA:has_file ] [ a owl:Restriction ; @@ -832,6 +1217,10 @@ GHGA:Dataset a owl:Class, [ a owl:Restriction ; owl:allValuesFrom GHGA:Publication ; owl:onProperty GHGA:has_publication ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:type ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:title ; @@ -848,63 +1237,50 @@ GHGA:Experiment a owl:Class, linkml:ClassDefinition ; rdfs:label "experiment" ; rdfs:subClassOf [ a owl:Restriction ; - owl:onClass GHGA:Sample ; - owl:onProperty GHGA:has_sample ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:description ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Technology ; owl:onProperty GHGA:has_technology ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:technical_replicates ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:name ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:onClass GHGA:Study ; - owl:onProperty GHGA:has_study ; + owl:onClass GHGA:Sample ; + owl:onProperty GHGA:has_sample ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_file ], [ a owl:Restriction ; owl:allValuesFrom GHGA:ExperimentProcess ; owl:onProperty GHGA:has_experiment_process ], - GHGA:Investigation ; - skos:closeMatch ; - 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:has_attribute a owl:ObjectProperty, - linkml:SlotDefinition . - -GHGA:has_data_access_policy a owl:ObjectProperty, - linkml:SlotDefinition . - -GHGA:Attribute a owl:Class, - linkml:ClassDefinition ; - rdfs:label "attribute" ; - rdfs:subClassOf [ a owl:Restriction ; + [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:key ; + owl:onProperty GHGA:description ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:key_type ], + owl:onProperty GHGA:experimental_replicates ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:value_type ], + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_file ], + [ a owl:Restriction ; + owl:onClass GHGA:Study ; + owl:onProperty GHGA:has_study ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:value ; - owl:qualifiedCardinality 1 ] ; - skos:definition "A key/value pair that further characterizes an entity." ; - skos:exactMatch SIO:000614 . + owl:onProperty GHGA:biological_replicates ], + GHGA:Investigation ; + skos:closeMatch ; + 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:has_data_access_policy a owl:ObjectProperty, + linkml:SlotDefinition . GHGA:MaterialEntity a owl:Class, linkml:ClassDefinition ; @@ -933,6 +1309,10 @@ GHGA:Publication a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:title ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:abstract ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty GHGA:xref ], @@ -951,27 +1331,27 @@ GHGA:Individual a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:year_of_birth ], + owl:onProperty GHGA:gender ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:ancestry ], + owl:onClass linkml:Integer ; + owl:onProperty GHGA:age ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:gender ], + owl:onProperty GHGA:has_children ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:geographical_region ], + owl:onClass ; + owl:onProperty GHGA:vital_status ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:vital_status ], + owl:onProperty GHGA:year_of_birth ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:has_parent ], + owl:onProperty GHGA:ancestry ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -979,11 +1359,11 @@ GHGA:Individual a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:has_children ], + owl:onProperty GHGA:has_parent ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:Integer ; - owl:onProperty GHGA:age ], + owl:onClass linkml:String ; + owl:onProperty GHGA:geographical_region ], [ a owl:Restriction ; owl:onClass ; owl:onProperty GHGA:sex ; @@ -997,6 +1377,22 @@ GHGA:Study a owl:Class, linkml:ClassDefinition ; rdfs:label "study" ; rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom GHGA:Experiment ; + owl:onProperty GHGA:has_experiment ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Attribute ; + owl:onProperty GHGA:has_attribute ], + [ a owl:Restriction ; + owl:onClass ; + owl:onProperty GHGA:type ; + owl:qualifiedCardinality 1 ], + [ 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:onClass linkml:String ; owl:onProperty GHGA:description ; owl:qualifiedCardinality 1 ], @@ -1007,25 +1403,40 @@ GHGA:Study a owl:Class, [ a owl:Restriction ; owl:allValuesFrom GHGA:Analysis ; owl:onProperty GHGA:has_analysis ], - [ 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:Restriction ; owl:allValuesFrom GHGA:Publication ; owl:onProperty GHGA:has_publication ], - [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:type ; - owl:qualifiedCardinality 1 ], GHGA:Investigation ; 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:has_attribute a owl:ObjectProperty, + linkml:SlotDefinition . + GHGA:type a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:Attribute a owl:Class, + linkml:ClassDefinition ; + rdfs:label "attribute" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:value ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:key_type ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:key ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:value_type ] ; + skos:definition "A key/value pair that further characterizes an entity." ; + skos:exactMatch SIO:000614 . + GHGA:has_study a owl:ObjectProperty, linkml:SlotDefinition . @@ -1035,31 +1446,31 @@ GHGA:File a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:file_index ], + owl:onProperty GHGA:category ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:format ], + owl:onProperty GHGA:size ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:checksum ], + owl:onProperty GHGA:name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ], + owl:onProperty GHGA:checksum ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:size ], + owl:onProperty GHGA:file_index ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; + owl:onClass ; owl:onProperty GHGA:type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:category ], + owl:onProperty GHGA:format ], GHGA:InformationContentEntity ; skos:altLabel "file object" . @@ -1074,19 +1485,12 @@ GHGA:NamedThing a owl:Class, linkml:ClassDefinition ; rdfs:label "named thing" ; 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:update_date ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty GHGA:xref ], + owl:onProperty GHGA:type ], [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:id ; - owl:qualifiedCardinality 1 ], + owl:allValuesFrom GHGA:Attribute ; + owl:onProperty GHGA:has_attribute ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -1094,11 +1498,18 @@ GHGA:NamedThing a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:type ], + owl:onProperty GHGA:creation_date ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:creation_date ] ; + owl:onProperty GHGA:update_date ], + [ 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 ] ; skos:altLabel "entity", "named entity", "object" ; diff --git a/artifacts/python/ghga.py b/artifacts/python/ghga.py index 3f086d1f..ebe9f156 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: 2021-11-05 09:54 +# Generation date: 2021-11-16T13:50:19 # Schema: GHGA-Metadata-Schema # # id: https://w3id.org/GHGA-Metadata-Schema @@ -179,6 +179,14 @@ class ProtocolId(InformationContentEntityId): pass +class LibraryPreparationProtocolId(ProtocolId): + pass + + +class SequencingProtocolId(ProtocolId): + pass + + class TechnologyId(InformationContentEntityId): pass @@ -451,8 +459,9 @@ class Project(ResearchActivity): class_model_uri: ClassVar[URIRef] = GHGA.Project id: Union[str, ProjectId] = None + title: str = None + description: str = None has_study: Optional[Union[Union[str, ExperimentId], List[Union[str, ExperimentId]]]] = empty_list() - description: Optional[str] = None has_publication: Optional[Union[Union[str, PublicationId], List[Union[str, PublicationId]]]] = empty_list() has_attribute: Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]] = empty_list() @@ -462,13 +471,20 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.id, ProjectId): self.id = ProjectId(self.id) + if self._is_empty(self.title): + self.MissingRequiredField("title") + if not isinstance(self.title, str): + self.title = str(self.title) + + if self._is_empty(self.description): + self.MissingRequiredField("description") + if not isinstance(self.description, str): + self.description = str(self.description) + if not isinstance(self.has_study, list): self.has_study = [self.has_study] if self.has_study is not None else [] self.has_study = [v if isinstance(v, ExperimentId) else ExperimentId(v) for v in self.has_study] - if self.description is not None and not isinstance(self.description, str): - self.description = str(self.description) - if not isinstance(self.has_publication, list): self.has_publication = [self.has_publication] if self.has_publication is not None else [] self.has_publication = [v if isinstance(v, PublicationId) else PublicationId(v) for v in self.has_publication] @@ -492,12 +508,13 @@ class Study(Investigation): class_model_uri: ClassVar[URIRef] = GHGA.Study id: Union[str, StudyId] = None + affiliation: Union[str, List[str]] = None title: str = None description: str = None - type: str = None + type: Union[str, "StudyTypeEnum"] = None + has_publication: Optional[Union[Union[str, PublicationId], List[Union[str, PublicationId]]]] = empty_list() has_experiment: Optional[Union[Union[str, ExperimentId], List[Union[str, ExperimentId]]]] = empty_list() has_analysis: Optional[Union[Union[str, AnalysisId], List[Union[str, AnalysisId]]]] = empty_list() - has_publication: Optional[Union[Union[str, PublicationId], List[Union[str, PublicationId]]]] = empty_list() has_attribute: Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]] = empty_list() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): @@ -506,6 +523,12 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.id, StudyId): self.id = StudyId(self.id) + if self._is_empty(self.affiliation): + self.MissingRequiredField("affiliation") + if not isinstance(self.affiliation, list): + self.affiliation = [self.affiliation] if self.affiliation is not None else [] + self.affiliation = [v if isinstance(v, str) else str(v) for v in self.affiliation] + if self._is_empty(self.title): self.MissingRequiredField("title") if not isinstance(self.title, str): @@ -518,8 +541,12 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.type): self.MissingRequiredField("type") - if not isinstance(self.type, str): - self.type = str(self.type) + if not isinstance(self.type, StudyTypeEnum): + self.type = StudyTypeEnum(self.type) + + if not isinstance(self.has_publication, list): + self.has_publication = [self.has_publication] if self.has_publication is not None else [] + self.has_publication = [v if isinstance(v, PublicationId) else PublicationId(v) for v in self.has_publication] if not isinstance(self.has_experiment, list): self.has_experiment = [self.has_experiment] if self.has_experiment is not None else [] @@ -529,9 +556,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.has_analysis = [self.has_analysis] if self.has_analysis is not None else [] self.has_analysis = [v if isinstance(v, AnalysisId) else AnalysisId(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 [] - self.has_publication = [v if isinstance(v, PublicationId) else PublicationId(v) for v in self.has_publication] + self._normalize_inlined_as_dict(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) self._normalize_inlined_as_dict(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) @@ -553,9 +578,12 @@ class Experiment(Investigation): id: Union[str, ExperimentId] = None name: str = None + description: str = None has_study: Union[str, StudyId] = None has_sample: Union[str, SampleId] = None - description: Optional[str] = None + biological_replicates: Optional[str] = None + technical_replicates: Optional[str] = None + experimental_replicates: Optional[str] = None has_technology: Optional[Union[str, TechnologyId]] = None has_file: Optional[Union[Union[str, FileId], List[Union[str, FileId]]]] = empty_list() has_experiment_process: Optional[Union[Union[str, ExperimentProcessId], List[Union[str, ExperimentProcessId]]]] = empty_list() @@ -571,6 +599,11 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.name, str): self.name = str(self.name) + if self._is_empty(self.description): + self.MissingRequiredField("description") + if not isinstance(self.description, str): + self.description = str(self.description) + if self._is_empty(self.has_study): self.MissingRequiredField("has_study") if not isinstance(self.has_study, StudyId): @@ -581,8 +614,14 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.has_sample, SampleId): self.has_sample = SampleId(self.has_sample) - if self.description is not None and not isinstance(self.description, str): - self.description = str(self.description) + if self.biological_replicates is not None and not isinstance(self.biological_replicates, str): + self.biological_replicates = str(self.biological_replicates) + + if self.technical_replicates is not None and not isinstance(self.technical_replicates, str): + self.technical_replicates = str(self.technical_replicates) + + if self.experimental_replicates is not None and not isinstance(self.experimental_replicates, str): + self.experimental_replicates = str(self.experimental_replicates) if self.has_technology is not None and not isinstance(self.has_technology, TechnologyId): self.has_technology = TechnologyId(self.has_technology) @@ -612,7 +651,7 @@ class ExperimentProcess(PlannedProcess): class_model_uri: ClassVar[URIRef] = GHGA.ExperimentProcess id: Union[str, ExperimentProcessId] = None - title: Optional[str] = None + name: Optional[str] = None has_input: Optional[Union[str, SampleId]] = None has_protocol: Optional[Union[str, ProtocolId]] = None has_agent: Optional[Union[str, AgentId]] = None @@ -624,8 +663,8 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.id, ExperimentProcessId): self.id = ExperimentProcessId(self.id) - if self.title is not None and not isinstance(self.title, str): - self.title = str(self.title) + if self.name is not None and not isinstance(self.name, str): + self.name = str(self.name) if self.has_input is not None and not isinstance(self.has_input, SampleId): self.has_input = SampleId(self.has_input) @@ -749,10 +788,10 @@ class Individual(Person): id: Union[str, IndividualId] = None sex: Union[str, "BiologicalSexEnum"] = None + age: int = None + vital_status: Union[str, "VitalStatusEnum"] = None gender: Optional[str] = None - age: Optional[int] = None year_of_birth: Optional[str] = None - vital_status: Optional[str] = None geographical_region: Optional[str] = None ethnicity: Optional[str] = None ancestry: Optional[str] = None @@ -770,18 +809,22 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.sex, BiologicalSexEnum): self.sex = BiologicalSexEnum(self.sex) + if self._is_empty(self.age): + self.MissingRequiredField("age") + if not isinstance(self.age, int): + self.age = int(self.age) + + if self._is_empty(self.vital_status): + self.MissingRequiredField("vital_status") + if not isinstance(self.vital_status, VitalStatusEnum): + self.vital_status = VitalStatusEnum(self.vital_status) + if self.gender is not None and not isinstance(self.gender, str): self.gender = str(self.gender) - if self.age is not None and not isinstance(self.age, int): - self.age = int(self.age) - if self.year_of_birth is not None and not isinstance(self.year_of_birth, str): self.year_of_birth = str(self.year_of_birth) - if self.vital_status is not None and not isinstance(self.vital_status, str): - self.vital_status = str(self.vital_status) - if self.geographical_region is not None and not isinstance(self.geographical_region, str): self.geographical_region = str(self.geographical_region) @@ -815,6 +858,8 @@ class Donor(Individual): id: Union[str, DonorId] = None sex: Union[str, "BiologicalSexEnum"] = None + age: int = None + vital_status: Union[str, "VitalStatusEnum"] = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -1141,11 +1186,15 @@ class Sample(MaterialEntity): class_model_uri: ClassVar[URIRef] = GHGA.Sample id: Union[str, SampleId] = None + name: str = None + tissue: str = None has_individual: Union[str, IndividualId] = None - name: Optional[str] = None + type: Optional[str] = None description: Optional[str] = None + vital_status_at_sampling: Optional[str] = None + isolation: Optional[str] = None + storage: Optional[str] = None has_biospecimen: Optional[Union[str, BiospecimenId]] = None - type: Optional[Union[str, "CaseControlEnum"]] = None xref: Optional[Union[str, List[str]]] = empty_list() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): @@ -1154,17 +1203,36 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.id, SampleId): self.id = SampleId(self.id) + if self._is_empty(self.name): + self.MissingRequiredField("name") + if not isinstance(self.name, str): + self.name = str(self.name) + + if self._is_empty(self.tissue): + self.MissingRequiredField("tissue") + if not isinstance(self.tissue, str): + self.tissue = str(self.tissue) + if self._is_empty(self.has_individual): self.MissingRequiredField("has_individual") if not isinstance(self.has_individual, IndividualId): self.has_individual = IndividualId(self.has_individual) - if self.name is not None and not isinstance(self.name, str): - self.name = str(self.name) + if self.type is not None and not isinstance(self.type, str): + self.type = str(self.type) if self.description is not None and not isinstance(self.description, str): self.description = str(self.description) + if self.vital_status_at_sampling is not None and not isinstance(self.vital_status_at_sampling, str): + self.vital_status_at_sampling = str(self.vital_status_at_sampling) + + if self.isolation is not None and not isinstance(self.isolation, str): + self.isolation = str(self.isolation) + + if self.storage is not None and not isinstance(self.storage, str): + self.storage = str(self.storage) + if self.has_biospecimen is not None and not isinstance(self.has_biospecimen, BiospecimenId): self.has_biospecimen = BiospecimenId(self.has_biospecimen) @@ -1485,6 +1553,197 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) +@dataclass +class LibraryPreparationProtocol(Protocol): + """ + Information about the library preparation of an Experiment. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = GHGA.LibraryPreparationProtocol + class_class_curie: ClassVar[str] = "GHGA:LibraryPreparationProtocol" + class_name: ClassVar[str] = "library preparation protocol" + class_model_uri: ClassVar[URIRef] = GHGA.LibraryPreparationProtocol + + id: Union[str, LibraryPreparationProtocolId] = None + name: str = None + description: str = None + library_name: Optional[str] = None + library_layout: Optional[str] = None + library_type: Optional[str] = None + library_selection: Optional[str] = None + library_construction: Optional[str] = None + library_preparation: Optional[str] = None + library_level: Optional[str] = None + library_construction_kit_retail_name: Optional[str] = None + library_construction_kit_manufacturer: Optional[str] = None + primer: Optional[str] = None + end_bias: Optional[str] = None + target_regions: Optional[str] = None + rnaseq_strandedness: Optional[str] = None + has_attribute: Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]] = empty_list() + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, LibraryPreparationProtocolId): + self.id = LibraryPreparationProtocolId(self.id) + + if self._is_empty(self.name): + self.MissingRequiredField("name") + if not isinstance(self.name, str): + self.name = str(self.name) + + if self._is_empty(self.description): + self.MissingRequiredField("description") + if not isinstance(self.description, str): + self.description = str(self.description) + + if self.library_name is not None and not isinstance(self.library_name, str): + self.library_name = str(self.library_name) + + if self.library_layout is not None and not isinstance(self.library_layout, str): + self.library_layout = str(self.library_layout) + + if self.library_type is not None and not isinstance(self.library_type, str): + self.library_type = str(self.library_type) + + if self.library_selection is not None and not isinstance(self.library_selection, str): + self.library_selection = str(self.library_selection) + + if self.library_construction is not None and not isinstance(self.library_construction, str): + self.library_construction = str(self.library_construction) + + if self.library_preparation is not None and not isinstance(self.library_preparation, str): + self.library_preparation = str(self.library_preparation) + + if self.library_level is not None and not isinstance(self.library_level, str): + self.library_level = str(self.library_level) + + if self.library_construction_kit_retail_name is not None and not isinstance(self.library_construction_kit_retail_name, str): + self.library_construction_kit_retail_name = str(self.library_construction_kit_retail_name) + + if self.library_construction_kit_manufacturer is not None and not isinstance(self.library_construction_kit_manufacturer, str): + self.library_construction_kit_manufacturer = str(self.library_construction_kit_manufacturer) + + if self.primer is not None and not isinstance(self.primer, str): + self.primer = str(self.primer) + + if self.end_bias is not None and not isinstance(self.end_bias, str): + self.end_bias = str(self.end_bias) + + if self.target_regions is not None and not isinstance(self.target_regions, str): + self.target_regions = str(self.target_regions) + + if self.rnaseq_strandedness is not None and not isinstance(self.rnaseq_strandedness, str): + self.rnaseq_strandedness = str(self.rnaseq_strandedness) + + self._normalize_inlined_as_dict(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) + + if self.description is not None and not isinstance(self.description, str): + self.description = str(self.description) + + super().__post_init__(**kwargs) + + +@dataclass +class SequencingProtocol(Protocol): + """ + Information about the sequencing of a sample. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = GHGA.SequencingProtocol + class_class_curie: ClassVar[str] = "GHGA:SequencingProtocol" + class_name: ClassVar[str] = "sequencing protocol" + class_model_uri: ClassVar[URIRef] = GHGA.SequencingProtocol + + id: Union[str, SequencingProtocolId] = None + name: Optional[str] = None + description: Optional[str] = None + sequencing_center: Optional[str] = None + instrument_model: Optional[str] = None + read_length: Optional[str] = None + read_pair_number: Optional[str] = None + target_coverage: Optional[str] = None + reference_annotation: Optional[str] = None + lane_number: Optional[str] = None + flow_cell_id: Optional[str] = None + flow_cell_type: Optional[str] = None + umi_barcode_read: Optional[str] = None + umi_barcode_size: Optional[str] = None + umi_barcode_offset: Optional[str] = None + cell_barcode_read: Optional[str] = None + cell_barcode_offset: Optional[str] = None + cell_barcode_size: Optional[str] = None + sample_barcode_read: Optional[str] = None + has_attribute: Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]] = empty_list() + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, SequencingProtocolId): + self.id = SequencingProtocolId(self.id) + + if self.name is not None and not isinstance(self.name, str): + self.name = str(self.name) + + if self.description is not None and not isinstance(self.description, str): + self.description = str(self.description) + + if self.sequencing_center is not None and not isinstance(self.sequencing_center, str): + self.sequencing_center = str(self.sequencing_center) + + if self.instrument_model is not None and not isinstance(self.instrument_model, str): + self.instrument_model = str(self.instrument_model) + + if self.read_length is not None and not isinstance(self.read_length, str): + self.read_length = str(self.read_length) + + if self.read_pair_number is not None and not isinstance(self.read_pair_number, str): + self.read_pair_number = str(self.read_pair_number) + + if self.target_coverage is not None and not isinstance(self.target_coverage, str): + self.target_coverage = str(self.target_coverage) + + if self.reference_annotation is not None and not isinstance(self.reference_annotation, str): + self.reference_annotation = str(self.reference_annotation) + + if self.lane_number is not None and not isinstance(self.lane_number, str): + self.lane_number = str(self.lane_number) + + if self.flow_cell_id is not None and not isinstance(self.flow_cell_id, str): + self.flow_cell_id = str(self.flow_cell_id) + + if self.flow_cell_type is not None and not isinstance(self.flow_cell_type, str): + self.flow_cell_type = str(self.flow_cell_type) + + if self.umi_barcode_read is not None and not isinstance(self.umi_barcode_read, str): + self.umi_barcode_read = str(self.umi_barcode_read) + + if self.umi_barcode_size is not None and not isinstance(self.umi_barcode_size, str): + self.umi_barcode_size = str(self.umi_barcode_size) + + if self.umi_barcode_offset is not None and not isinstance(self.umi_barcode_offset, str): + self.umi_barcode_offset = str(self.umi_barcode_offset) + + if self.cell_barcode_read is not None and not isinstance(self.cell_barcode_read, str): + self.cell_barcode_read = str(self.cell_barcode_read) + + if self.cell_barcode_offset is not None and not isinstance(self.cell_barcode_offset, str): + self.cell_barcode_offset = str(self.cell_barcode_offset) + + if self.cell_barcode_size is not None and not isinstance(self.cell_barcode_size, str): + self.cell_barcode_size = str(self.cell_barcode_size) + + if self.sample_barcode_read is not None and not isinstance(self.sample_barcode_read, str): + self.sample_barcode_read = str(self.sample_barcode_read) + + self._normalize_inlined_as_dict(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) + + super().__post_init__(**kwargs) + + @dataclass class Technology(InformationContentEntity): """ @@ -1582,7 +1841,7 @@ class File(InformationContentEntity): checksum: Optional[str] = None file_index: Optional[str] = None category: Optional[str] = None - type: Optional[str] = None + type: Optional[Union[str, "FileTypeEnum"]] = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -1608,8 +1867,8 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.category is not None and not isinstance(self.category, str): self.category = str(self.category) - if self.type is not None and not isinstance(self.type, str): - self.type = str(self.type) + if self.type is not None and not isinstance(self.type, FileTypeEnum): + self.type = FileTypeEnum(self.type) super().__post_init__(**kwargs) @@ -1870,6 +2129,7 @@ class Publication(InformationContentEntity): id: Union[str, PublicationId] = None title: Optional[str] = None + abstract: Optional[str] = None xref: Optional[Union[str, List[str]]] = empty_list() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): @@ -1881,6 +2141,9 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.title is not None and not isinstance(self.title, str): self.title = str(self.title) + if self.abstract is not None and not isinstance(self.abstract, str): + self.abstract = str(self.abstract) + if not isinstance(self.xref, list): self.xref = [self.xref] if self.xref is not None else [] self.xref = [v if isinstance(v, str) else str(v) for v in self.xref] @@ -1968,6 +2231,86 @@ def _addvals(cls): PermissibleValue(text="data steward", description="Role of a Data Steward where the user is responsible for approving request from a user for one or more Datasets.") ) +class VitalStatusEnum(EnumDefinitionImpl): + """ + Enum to capture the vital status of an individual. + """ + alive = PermissibleValue(text="alive", + description="Showing characteristics of life; displaying signs of life.") + deceased = PermissibleValue(text="deceased", + description="The cessation of life.") + + _defn = EnumDefinition( + name="VitalStatusEnum", + description="Enum to capture the vital status of an individual.", + ) + +class StudyTypeEnum(EnumDefinitionImpl): + """ + Enum to capture the type of a study. + """ + whole_genome_sequencing = PermissibleValue(text="whole_genome_sequencing", + description="Whole Genome Sequencing") + metagenomics = PermissibleValue(text="metagenomics", + description="Metagenomics") + transcriptome_analysis = PermissibleValue(text="transcriptome_analysis", + description="Transcriptome Analysis") + resequencing = PermissibleValue(text="resequencing", + description="Resequencing") + epigenetics = PermissibleValue(text="epigenetics", + description="Epigenetics") + synthetic_genomics = PermissibleValue(text="synthetic_genomics", + description="Sythetic Genomics") + forensic_paleo_genomics = PermissibleValue(text="forensic_paleo_genomics", + description="Forensic or Paleo-genomics") + gene_regulation = PermissibleValue(text="gene_regulation", + description="Gene Regulation Study") + cancer_genomics = PermissibleValue(text="cancer_genomics", + description="Cancer Genomics") + population_genomics = PermissibleValue(text="population_genomics", + description="Population Genomics") + rna_seq = PermissibleValue(text="rna_seq", + description="RNAseq") + exome_sequencing = PermissibleValue(text="exome_sequencing", + description="Exome Sequencing") + pooled_clone_sequencing = PermissibleValue(text="pooled_clone_sequencing", + description="Pooled Clone Sequencing") + other = PermissibleValue(text="other", + description="Other study") + + _defn = EnumDefinition( + name="StudyTypeEnum", + description="Enum to capture the type of a study.", + ) + +class FileTypeEnum(EnumDefinitionImpl): + """ + Enum to capture file types. + """ + bam = PermissibleValue(text="bam", + description="BAM File") + complete_genomics = PermissibleValue(text="complete_genomics", + description="Complete Genomics File") + cram = PermissibleValue(text="cram", + description="CRAM File") + fasta = PermissibleValue(text="fasta", + description="Fasta File") + fastq = PermissibleValue(text="fastq", + description="FastQ File") + pacbio_hdf5 = PermissibleValue(text="pacbio_hdf5", + description="PacBio HDF5 File") + sff = PermissibleValue(text="sff", + description="Standard flowgram format used to encode results of pyrosequencing from the 454 Life Sciences platform.") + srf = PermissibleValue(text="srf", + description="SRF is a generic format for DNA sequence data.") + vcf = PermissibleValue(text="vcf", + description="vcf File for storing gene sequence variations.") + + _defn = EnumDefinition( + name="FileTypeEnum", + description="Enum to capture file types.", + ) + # Slots class slots: pass @@ -1999,6 +2342,15 @@ class slots: slots.abstract = Slot(uri=GHGA.abstract, name="abstract", curie=GHGA.curie('abstract'), model_uri=GHGA.abstract, domain=None, range=Optional[str]) +slots.technical_replicates = Slot(uri=GHGA.technical_replicates, name="technical replicates", curie=GHGA.curie('technical_replicates'), + model_uri=GHGA.technical_replicates, domain=None, range=Optional[str]) + +slots.biological_replicates = Slot(uri=GHGA.biological_replicates, name="biological replicates", curie=GHGA.curie('biological_replicates'), + model_uri=GHGA.biological_replicates, domain=None, range=Optional[str]) + +slots.experimental_replicates = Slot(uri=GHGA.experimental_replicates, name="experimental replicates", curie=GHGA.curie('experimental_replicates'), + model_uri=GHGA.experimental_replicates, domain=None, range=Optional[str]) + slots.xref = Slot(uri=GHGA.xref, name="xref", curie=GHGA.curie('xref'), model_uri=GHGA.xref, domain=None, range=Optional[Union[str, List[str]]]) @@ -2038,6 +2390,12 @@ class slots: slots.has_analysis = Slot(uri=GHGA.has_analysis, name="has analysis", curie=GHGA.curie('has_analysis'), model_uri=GHGA.has_analysis, domain=None, range=Optional[str]) +slots.has_sequencing_protocol = Slot(uri=GHGA.has_sequencing_protocol, name="has sequencing protocol", curie=GHGA.curie('has_sequencing_protocol'), + model_uri=GHGA.has_sequencing_protocol, domain=None, range=Optional[str]) + +slots.has_library_preparation_protocol = Slot(uri=GHGA.has_library_preparation_protocol, name="has library preparation protocol", curie=GHGA.curie('has_library_preparation_protocol'), + model_uri=GHGA.has_library_preparation_protocol, domain=None, range=Optional[str]) + slots.has_technology = Slot(uri=GHGA.has_technology, name="has technology", curie=GHGA.curie('has_technology'), model_uri=GHGA.has_technology, domain=None, range=Optional[Union[str, TechnologyId]]) @@ -2119,6 +2477,15 @@ class slots: slots.age = Slot(uri=GHGA.age, name="age", curie=GHGA.curie('age'), model_uri=GHGA.age, domain=None, range=Optional[int]) +slots.tissue = Slot(uri=GHGA.tissue, name="tissue", curie=GHGA.curie('tissue'), + model_uri=GHGA.tissue, domain=None, range=Optional[str]) + +slots.isolation = Slot(uri=GHGA.isolation, name="isolation", curie=GHGA.curie('isolation'), + model_uri=GHGA.isolation, domain=None, range=Optional[str]) + +slots.storage = Slot(uri=GHGA.storage, name="storage", curie=GHGA.curie('storage'), + model_uri=GHGA.storage, domain=None, range=Optional[str]) + slots.year_of_birth = Slot(uri=GHGA.year_of_birth, name="year of birth", curie=GHGA.curie('year_of_birth'), model_uri=GHGA.year_of_birth, domain=None, range=Optional[str]) @@ -2185,6 +2552,99 @@ class slots: slots.value_type = Slot(uri=GHGA.value_type, name="value type", curie=GHGA.curie('value_type'), model_uri=GHGA.value_type, domain=None, range=Optional[str]) +slots.affiliation = Slot(uri=GHGA.affiliation, name="affiliation", curie=GHGA.curie('affiliation'), + model_uri=GHGA.affiliation, domain=None, range=Optional[str]) + +slots.library_name = Slot(uri=GHGA.library_name, name="library name", curie=GHGA.curie('library_name'), + model_uri=GHGA.library_name, domain=None, range=Optional[str]) + +slots.library_layout = Slot(uri=GHGA.library_layout, name="library layout", curie=GHGA.curie('library_layout'), + model_uri=GHGA.library_layout, domain=None, range=Optional[str]) + +slots.library_type = Slot(uri=GHGA.library_type, name="library type", curie=GHGA.curie('library_type'), + model_uri=GHGA.library_type, domain=None, range=Optional[str]) + +slots.library_selection = Slot(uri=GHGA.library_selection, name="library selection", curie=GHGA.curie('library_selection'), + model_uri=GHGA.library_selection, domain=None, range=Optional[str]) + +slots.library_construction = Slot(uri=GHGA.library_construction, name="library construction", curie=GHGA.curie('library_construction'), + model_uri=GHGA.library_construction, domain=None, range=Optional[str]) + +slots.library_preparation = Slot(uri=GHGA.library_preparation, name="library preparation", curie=GHGA.curie('library_preparation'), + model_uri=GHGA.library_preparation, domain=None, range=Optional[str]) + +slots.library_level = Slot(uri=GHGA.library_level, name="library level", curie=GHGA.curie('library_level'), + model_uri=GHGA.library_level, domain=None, range=Optional[str]) + +slots.library_construction_kit_retail_name = Slot(uri=GHGA.library_construction_kit_retail_name, name="library construction kit retail name", curie=GHGA.curie('library_construction_kit_retail_name'), + model_uri=GHGA.library_construction_kit_retail_name, domain=None, range=Optional[str]) + +slots.library_construction_kit_manufacturer = Slot(uri=GHGA.library_construction_kit_manufacturer, name="library construction kit manufacturer", curie=GHGA.curie('library_construction_kit_manufacturer'), + model_uri=GHGA.library_construction_kit_manufacturer, domain=None, range=Optional[str]) + +slots.primer = Slot(uri=GHGA.primer, name="primer", curie=GHGA.curie('primer'), + model_uri=GHGA.primer, domain=None, range=Optional[str]) + +slots.end_bias = Slot(uri=GHGA.end_bias, name="end bias", curie=GHGA.curie('end_bias'), + model_uri=GHGA.end_bias, domain=None, range=Optional[str]) + +slots.target_regions = Slot(uri=GHGA.target_regions, name="target regions", curie=GHGA.curie('target_regions'), + model_uri=GHGA.target_regions, domain=None, range=Optional[str]) + +slots.rnaseq_strandedness = Slot(uri=GHGA.rnaseq_strandedness, name="rnaseq strandedness", curie=GHGA.curie('rnaseq_strandedness'), + model_uri=GHGA.rnaseq_strandedness, domain=None, range=Optional[str]) + +slots.sequencing_center = Slot(uri=GHGA.sequencing_center, name="sequencing center", curie=GHGA.curie('sequencing_center'), + model_uri=GHGA.sequencing_center, domain=None, range=Optional[str]) + +slots.instrument_model = Slot(uri=GHGA.instrument_model, name="instrument model", curie=GHGA.curie('instrument_model'), + model_uri=GHGA.instrument_model, domain=None, range=Optional[str]) + +slots.read_length = Slot(uri=GHGA.read_length, name="read length", curie=GHGA.curie('read_length'), + model_uri=GHGA.read_length, domain=None, range=Optional[str]) + +slots.read_pair_number = Slot(uri=GHGA.read_pair_number, name="read pair number", curie=GHGA.curie('read_pair_number'), + model_uri=GHGA.read_pair_number, domain=None, range=Optional[str]) + +slots.reference_annotation = Slot(uri=GHGA.reference_annotation, name="reference annotation", curie=GHGA.curie('reference_annotation'), + model_uri=GHGA.reference_annotation, domain=None, range=Optional[str]) + +slots.lane_number = Slot(uri=GHGA.lane_number, name="lane number", curie=GHGA.curie('lane_number'), + model_uri=GHGA.lane_number, domain=None, range=Optional[str]) + +slots.target_coverage = Slot(uri=GHGA.target_coverage, name="target coverage", curie=GHGA.curie('target_coverage'), + model_uri=GHGA.target_coverage, domain=None, range=Optional[str]) + +slots.flow_cell_id = Slot(uri=GHGA.flow_cell_id, name="flow cell id", curie=GHGA.curie('flow_cell_id'), + model_uri=GHGA.flow_cell_id, domain=None, range=Optional[str]) + +slots.flow_cell_type = Slot(uri=GHGA.flow_cell_type, name="flow cell type", curie=GHGA.curie('flow_cell_type'), + model_uri=GHGA.flow_cell_type, domain=None, range=Optional[str]) + +slots.umi_barcode_read = Slot(uri=GHGA.umi_barcode_read, name="umi barcode read", curie=GHGA.curie('umi_barcode_read'), + model_uri=GHGA.umi_barcode_read, domain=None, range=Optional[str]) + +slots.umi_barcode_offset = Slot(uri=GHGA.umi_barcode_offset, name="umi barcode offset", curie=GHGA.curie('umi_barcode_offset'), + model_uri=GHGA.umi_barcode_offset, domain=None, range=Optional[str]) + +slots.umi_barcode_size = Slot(uri=GHGA.umi_barcode_size, name="umi barcode size", curie=GHGA.curie('umi_barcode_size'), + model_uri=GHGA.umi_barcode_size, domain=None, range=Optional[str]) + +slots.cell_barcode_read = Slot(uri=GHGA.cell_barcode_read, name="cell barcode read", curie=GHGA.curie('cell_barcode_read'), + model_uri=GHGA.cell_barcode_read, domain=None, range=Optional[str]) + +slots.cell_barcode_offset = Slot(uri=GHGA.cell_barcode_offset, name="cell barcode offset", curie=GHGA.curie('cell_barcode_offset'), + model_uri=GHGA.cell_barcode_offset, domain=None, range=Optional[str]) + +slots.cell_barcode_size = Slot(uri=GHGA.cell_barcode_size, name="cell barcode size", curie=GHGA.curie('cell_barcode_size'), + model_uri=GHGA.cell_barcode_size, domain=None, range=Optional[str]) + +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.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[str]) + slots.named_thing_id = Slot(uri=GHGA.id, name="named thing_id", curie=GHGA.curie('id'), model_uri=GHGA.named_thing_id, domain=NamedThing, range=Union[str, NamedThingId]) @@ -2218,8 +2678,11 @@ class slots: slots.attribute_value_type = Slot(uri=GHGA.value_type, name="attribute_value type", curie=GHGA.curie('value_type'), model_uri=GHGA.attribute_value_type, domain=Attribute, range=Optional[str]) +slots.project_title = Slot(uri=GHGA.title, name="project_title", curie=GHGA.curie('title'), + model_uri=GHGA.project_title, domain=Project, range=str) + slots.project_description = Slot(uri=GHGA.description, name="project_description", curie=GHGA.curie('description'), - model_uri=GHGA.project_description, domain=Project, range=Optional[str]) + model_uri=GHGA.project_description, domain=Project, range=str) slots.project_has_publication = Slot(uri=GHGA.has_publication, name="project_has publication", curie=GHGA.curie('has_publication'), model_uri=GHGA.project_has_publication, domain=Project, range=Optional[Union[Union[str, PublicationId], List[Union[str, PublicationId]]]]) @@ -2237,7 +2700,10 @@ class slots: model_uri=GHGA.study_description, domain=Study, range=str) slots.study_type = Slot(uri=GHGA.type, name="study_type", curie=GHGA.curie('type'), - model_uri=GHGA.study_type, domain=Study, range=str) + model_uri=GHGA.study_type, domain=Study, range=Union[str, "StudyTypeEnum"]) + +slots.study_affiliation = Slot(uri=GHGA.affiliation, name="study_affiliation", curie=GHGA.curie('affiliation'), + model_uri=GHGA.study_affiliation, domain=Study, range=Union[str, List[str]]) slots.study_has_publication = Slot(uri=GHGA.has_publication, name="study_has publication", curie=GHGA.curie('has_publication'), model_uri=GHGA.study_has_publication, domain=Study, range=Optional[Union[Union[str, PublicationId], List[Union[str, PublicationId]]]]) @@ -2255,7 +2721,7 @@ class slots: model_uri=GHGA.experiment_name, domain=Experiment, range=str) slots.experiment_description = Slot(uri=GHGA.description, name="experiment_description", curie=GHGA.curie('description'), - model_uri=GHGA.experiment_description, domain=Experiment, range=Optional[str]) + model_uri=GHGA.experiment_description, domain=Experiment, range=str) slots.experiment_has_study = Slot(uri=GHGA.has_study, name="experiment_has study", curie=GHGA.curie('has_study'), model_uri=GHGA.experiment_has_study, domain=Experiment, range=Union[str, StudyId]) @@ -2272,6 +2738,9 @@ class slots: slots.experiment_has_experiment_process = Slot(uri=GHGA.has_experiment_process, name="experiment_has experiment process", curie=GHGA.curie('has_experiment_process'), model_uri=GHGA.experiment_has_experiment_process, domain=Experiment, range=Optional[Union[Union[str, ExperimentProcessId], List[Union[str, ExperimentProcessId]]]]) +slots.experiment_process_name = Slot(uri=GHGA.name, name="experiment process_name", curie=GHGA.curie('name'), + model_uri=GHGA.experiment_process_name, domain=ExperimentProcess, range=Optional[str]) + slots.experiment_process_has_input = Slot(uri=GHGA.has_input, name="experiment process_has input", curie=GHGA.curie('has_input'), model_uri=GHGA.experiment_process_has_input, domain=ExperimentProcess, range=Optional[Union[str, SampleId]]) @@ -2284,6 +2753,24 @@ class slots: slots.experiment_process_has_output = Slot(uri=GHGA.has_output, name="experiment process_has output", curie=GHGA.curie('has_output'), model_uri=GHGA.experiment_process_has_output, domain=ExperimentProcess, range=Optional[Union[str, FileId]]) +slots.library_preparation_protocol_name = Slot(uri=GHGA.name, name="library preparation protocol_name", curie=GHGA.curie('name'), + model_uri=GHGA.library_preparation_protocol_name, domain=LibraryPreparationProtocol, range=str) + +slots.library_preparation_protocol_description = Slot(uri=GHGA.description, name="library preparation protocol_description", curie=GHGA.curie('description'), + model_uri=GHGA.library_preparation_protocol_description, domain=LibraryPreparationProtocol, range=str) + +slots.library_preparation_protocol_has_attribute = Slot(uri=GHGA.has_attribute, name="library preparation protocol_has attribute", curie=GHGA.curie('has_attribute'), + model_uri=GHGA.library_preparation_protocol_has_attribute, domain=LibraryPreparationProtocol, range=Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]]) + +slots.sequencing_protocol_name = Slot(uri=GHGA.name, name="sequencing protocol_name", curie=GHGA.curie('name'), + model_uri=GHGA.sequencing_protocol_name, domain=SequencingProtocol, range=Optional[str]) + +slots.sequencing_protocol_description = Slot(uri=GHGA.description, name="sequencing protocol_description", curie=GHGA.curie('description'), + model_uri=GHGA.sequencing_protocol_description, domain=SequencingProtocol, range=Optional[str]) + +slots.sequencing_protocol_has_attribute = Slot(uri=GHGA.has_attribute, name="sequencing protocol_has attribute", curie=GHGA.curie('has_attribute'), + model_uri=GHGA.sequencing_protocol_has_attribute, domain=SequencingProtocol, range=Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]]) + slots.protocol_name = Slot(uri=GHGA.name, name="protocol_name", curie=GHGA.curie('name'), model_uri=GHGA.protocol_name, domain=Protocol, range=Optional[str]) @@ -2318,7 +2805,7 @@ class slots: model_uri=GHGA.biospecimen_has_phenotypic_feature, domain=Biospecimen, range=Optional[Union[str, PhenotypicFeatureId]]) slots.sample_name = Slot(uri=GHGA.name, name="sample_name", curie=GHGA.curie('name'), - model_uri=GHGA.sample_name, domain=Sample, range=Optional[str]) + model_uri=GHGA.sample_name, domain=Sample, range=str) slots.sample_type = Slot(uri=GHGA.type, name="sample_type", curie=GHGA.curie('type'), model_uri=GHGA.sample_type, domain=Sample, range=Optional[Union[str, "CaseControlEnum"]]) @@ -2326,6 +2813,15 @@ class slots: slots.sample_description = Slot(uri=GHGA.description, name="sample_description", curie=GHGA.curie('description'), model_uri=GHGA.sample_description, domain=Sample, range=Optional[str]) +slots.sample_tissue = Slot(uri=GHGA.tissue, name="sample_tissue", curie=GHGA.curie('tissue'), + model_uri=GHGA.sample_tissue, domain=Sample, range=str) + +slots.sample_isolation = Slot(uri=GHGA.isolation, name="sample_isolation", curie=GHGA.curie('isolation'), + model_uri=GHGA.sample_isolation, domain=Sample, range=Optional[str]) + +slots.sample_storage = Slot(uri=GHGA.storage, name="sample_storage", curie=GHGA.curie('storage'), + model_uri=GHGA.sample_storage, domain=Sample, range=Optional[str]) + slots.sample_has_individual = Slot(uri=GHGA.has_individual, name="sample_has individual", curie=GHGA.curie('has_individual'), model_uri=GHGA.sample_has_individual, domain=Sample, range=Union[str, IndividualId]) @@ -2342,13 +2838,13 @@ class slots: model_uri=GHGA.individual_sex, domain=Individual, range=Union[str, "BiologicalSexEnum"]) slots.individual_age = Slot(uri=GHGA.age, name="individual_age", curie=GHGA.curie('age'), - model_uri=GHGA.individual_age, domain=Individual, range=Optional[int]) + model_uri=GHGA.individual_age, domain=Individual, range=int) slots.individual_year_of_birth = Slot(uri=GHGA.year_of_birth, name="individual_year of birth", curie=GHGA.curie('year_of_birth'), model_uri=GHGA.individual_year_of_birth, domain=Individual, range=Optional[str]) slots.individual_vital_status = Slot(uri=GHGA.vital_status, name="individual_vital status", curie=GHGA.curie('vital_status'), - model_uri=GHGA.individual_vital_status, domain=Individual, range=Optional[str]) + model_uri=GHGA.individual_vital_status, domain=Individual, range=Union[str, "VitalStatusEnum"]) slots.individual_ethnicity = Slot(uri=GHGA.ethnicity, name="individual_ethnicity", curie=GHGA.curie('ethnicity'), model_uri=GHGA.individual_ethnicity, domain=Individual, range=Optional[str]) @@ -2378,7 +2874,7 @@ class slots: model_uri=GHGA.file_format, domain=File, range=Optional[str]) slots.file_type = Slot(uri=GHGA.type, name="file_type", curie=GHGA.curie('type'), - model_uri=GHGA.file_type, domain=File, range=Optional[str]) + model_uri=GHGA.file_type, domain=File, range=Optional[Union[str, "FileTypeEnum"]]) slots.file_size = Slot(uri=GHGA.size, name="file_size", curie=GHGA.curie('size'), model_uri=GHGA.file_size, domain=File, range=Optional[str]) @@ -2500,6 +2996,9 @@ class slots: slots.publication_title = Slot(uri=GHGA.title, name="publication_title", curie=GHGA.curie('title'), model_uri=GHGA.publication_title, domain=Publication, range=Optional[str]) +slots.publication_abstract = Slot(uri=GHGA.abstract, name="publication_abstract", curie=GHGA.curie('abstract'), + model_uri=GHGA.publication_abstract, domain=Publication, range=Optional[str]) + slots.publication_xref = Slot(uri=GHGA.xref, name="publication_xref", curie=GHGA.curie('xref'), model_uri=GHGA.publication_xref, domain=Publication, range=Optional[Union[str, List[str]]]) diff --git a/artifacts/rdf/ghga.ttl b/artifacts/rdf/ghga.ttl index 83fba3f5..f768bca2 100644 --- a/artifacts/rdf/ghga.ttl +++ b/artifacts/rdf/ghga.ttl @@ -38,6 +38,7 @@ , , , + , , , , @@ -50,6 +51,7 @@ , , , + , , , , @@ -63,26 +65,30 @@ linkml:default_range ; linkml:enums , , - ; - linkml:generation_date "2021-11-05 09:54"^^xsd:dateTime ; + , + , + , + ; + linkml:generation_date "2021-11-16T13:50:20"^^xsd:dateTime ; linkml:id ; linkml:imports linkml:types ; linkml:metamodel_version "1.7.0" ; - linkml:prefixes [ linkml:prefix_prefix "SIO" ; - linkml:prefix_reference ], - [ linkml:prefix_prefix "biolink" ; + linkml:prefixes [ linkml:prefix_prefix "biolink" ; linkml:prefix_reference ], [ linkml:prefix_prefix "EFO" ; linkml:prefix_reference ], - [ linkml:prefix_prefix "linkml" ; - linkml:prefix_reference linkml: ], + [ linkml:prefix_prefix "SIO" ; + linkml:prefix_reference ], [ linkml:prefix_prefix "COB" ; linkml:prefix_reference ], + [ linkml:prefix_prefix "linkml" ; + linkml:prefix_reference linkml: ], [ linkml:prefix_prefix "GHGA" ; linkml:prefix_reference ] ; linkml:slots , , , + , , , , @@ -102,11 +108,15 @@ , , , + , , , , , , + , + , + , , , , @@ -127,6 +137,7 @@ , , , + , , , , @@ -142,6 +153,8 @@ , , , + , + , , , , @@ -152,6 +165,8 @@ , , , + , + , , , , @@ -173,6 +188,7 @@ , , , + , , , , @@ -181,6 +197,7 @@ , , , + , , , , @@ -196,8 +213,23 @@ , , , + , + , , , + , + , + , + , + , + , + , + , + , + , + , + , + , , , , @@ -216,27 +248,44 @@ , , , + , , , , , , + , , , , , + , , , , + , + , + , + , , + , , , , + , , + , + , , , + , + , + , + , , , + , + , , , , @@ -244,23 +293,31 @@ , , , + , + , + , , + , , , + , + , + , , , , , , , + , , , , , ; linkml:source_file "ghga.yaml" ; - linkml:source_file_date "Fri Nov 5 09:54:09 2021"^^xsd:dateTime ; - linkml:source_file_size 37658 ; + linkml:source_file_date "2021-11-16T13:49:34"^^xsd:dateTime ; + linkml:source_file_size 48524 ; linkml:types , , , @@ -280,6 +337,10 @@ skos:definition "Male" . + skos:definition "Showing characteristics of life; displaying signs of life." . + + skos:definition "BAM File" . + a linkml:TypeDefinition ; skos:definition "A binary (true or false) value" ; skos:inScheme linkml:types ; @@ -289,10 +350,16 @@ linkml:repr "bool" ; linkml:uri xsd:boolean . + skos:definition "Cancer Genomics" . + skos:definition "The Sample is to be treated as Case" . + skos:definition "Complete Genomics File" . + skos:definition "The Sample is to be treated as Control" . + skos:definition "CRAM File" . + skos:definition "Role of a Data Requester where the user requests access to one or more Datasets." . skos:definition "Role of a Data Steward where the user is responsible for approving request from a user for one or more Datasets." . @@ -316,6 +383,8 @@ linkml:repr "str" ; linkml:uri xsd:dateTime . + skos:definition "The cessation of life." . + a linkml:TypeDefinition ; skos:definition "A real number with arbitrary precision that conforms to the xsd:decimal specification" ; skos:inScheme linkml:types ; @@ -332,6 +401,14 @@ linkml:imported_from "linkml:types" ; linkml:uri xsd:double . + skos:definition "Epigenetics" . + + skos:definition "Exome Sequencing" . + + skos:definition "Fasta File" . + + skos:definition "FastQ File" . + a linkml:TypeDefinition ; skos:definition "A real number that conforms to the xsd:float specification" ; skos:inScheme linkml:types ; @@ -340,6 +417,12 @@ linkml:imported_from "linkml:types" ; linkml:uri xsd:float . + skos:definition "Forensic or Paleo-genomics" . + + skos:definition "Gene Regulation Study" . + + skos:definition "Metagenomics" . + a linkml:TypeDefinition ; skos:definition "Prefix part of CURIE" ; skos:inScheme linkml:types ; @@ -370,6 +453,24 @@ linkml:repr "str" ; linkml:uri shex:iri . + skos:definition "Other study" . + + skos:definition "PacBio HDF5 File" . + + skos:definition "Pooled Clone Sequencing" . + + skos:definition "Population Genomics" . + + skos:definition "Resequencing" . + + skos:definition "RNAseq" . + + skos:definition "Standard flowgram format used to encode results of pyrosequencing from the 454 Life Sciences platform." . + + skos:definition "SRF is a generic format for DNA sequence data." . + + skos:definition "Sythetic Genomics" . + a linkml:TypeDefinition ; skos:definition "A time object represents a (local) time of day, independent of any particular day" ; skos:editorialNote "URI is dateTime because OWL reasoners don't work with straight date or time" ; @@ -380,6 +481,8 @@ linkml:repr "str" ; linkml:uri xsd:dateTime . + skos:definition "Transcriptome Analysis" . + a linkml:TypeDefinition ; skos:definition "a complete URI" ; skos:inScheme linkml:types ; @@ -398,6 +501,10 @@ linkml:repr "str" ; linkml:uri xsd:anyURI . + skos:definition "vcf File for storing gene sequence variations." . + + skos:definition "Whole Genome Sequencing" . + a linkml:SlotDefinition ; skos:definition "One or more Datasets that constitutes this Aggregate Dataset." ; skos:inScheme ; @@ -923,7 +1030,7 @@ linkml:usage_slot_name "has study" . a linkml:SlotDefinition ; - skos:definition "A description for the Experiment." ; + skos:definition "A detailed description of the Experiment." ; skos:inScheme ; skos:prefLabel "description" ; linkml:definition_uri ; @@ -933,6 +1040,7 @@ linkml:is_usage_slot true ; linkml:owner ; linkml:range ; + linkml:required true ; linkml:slot_uri ; linkml:usage_slot_name "description" . @@ -1011,7 +1119,7 @@ linkml:usage_slot_name "has technology" . a linkml:SlotDefinition ; - skos:definition "Name for the Experiment." ; + skos:definition "Name for the experiment (eg: GHGAE_PBMC_RNAseq)." ; skos:inScheme ; skos:prefLabel "name" ; linkml:definition_uri ; @@ -1081,6 +1189,20 @@ linkml:slot_uri ; linkml:usage_slot_name "has protocol" . + a linkml:SlotDefinition ; + skos:definition "Explanation of the step(s) involved in performing the experiment until Sequencing part (eg: Sample extraction -> Target Enrichment) " ; + skos:inScheme ; + skos:prefLabel "name" ; + linkml:definition_uri ; + linkml:domain ; + linkml:domain_of ; + linkml:is_a ; + linkml:is_usage_slot true ; + linkml:owner ; + linkml:range ; + linkml:slot_uri ; + linkml:usage_slot_name "name" . + a linkml:SlotDefinition ; skos:definition "One or more Individuals that collectively define this Family." ; skos:inScheme ; @@ -1190,10 +1312,69 @@ linkml:is_a ; linkml:is_usage_slot true ; linkml:owner ; - linkml:range ; + linkml:range ; linkml:slot_uri ; linkml:usage_slot_name "type" . + skos:definition "Enum to capture file types." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:permissible_values , + , + , + , + , + , + , + , + . + + a linkml:SlotDefinition ; + skos:definition "Description about how a sequencing library was prepared (eg: Library construction method)." ; + skos:inScheme ; + skos:prefLabel "description" ; + linkml:definition_uri ; + linkml:domain ; + linkml:domain_of ; + linkml:is_a ; + linkml:is_usage_slot true ; + linkml:owner ; + linkml:range ; + linkml:required true ; + linkml:slot_uri ; + linkml:usage_slot_name "description" . + + a linkml:SlotDefinition ; + skos:definition "One or more attributes that further characterizes this Library Preparation Protocol." ; + skos:inScheme ; + skos:prefLabel "has attribute" ; + linkml:definition_uri ; + linkml:domain ; + linkml:domain_of ; + linkml:inlined true ; + linkml:is_a ; + linkml:is_usage_slot true ; + linkml:multivalued true ; + linkml:owner ; + linkml:range ; + linkml:slot_uri ; + linkml:usage_slot_name "has attribute" . + + a linkml:SlotDefinition ; + skos:definition "Name of the library preparation protocol (eg: mRNA-seq library preparation)." ; + skos:inScheme ; + skos:prefLabel "name" ; + linkml:definition_uri ; + linkml:domain ; + linkml:domain_of ; + linkml:is_a ; + linkml:is_usage_slot true ; + linkml:owner ; + linkml:range ; + linkml:required true ; + linkml:slot_uri ; + linkml:usage_slot_name "name" . + a linkml:SlotDefinition ; skos:definition "The email of the Member." ; skos:inScheme ; @@ -1239,7 +1420,7 @@ linkml:usage_slot_name "telephone" . a linkml:SlotDefinition ; - skos:definition "A detailed description about this Project." ; + skos:definition "Short textual description of the project (Some information on the protocol, sample used and collected etc) " ; skos:inScheme ; skos:prefLabel "description" ; linkml:definition_uri ; @@ -1249,11 +1430,12 @@ linkml:is_usage_slot true ; linkml:owner ; linkml:range ; + linkml:required true ; linkml:slot_uri ; linkml:usage_slot_name "description" . a linkml:SlotDefinition ; - skos:definition "Custom key/value pairs that further characterizes this Project." ; + skos:definition "Custom attributes for the Project (eg: Cancer - Colon cancer, prostrate cancer, blood cancer etc)" ; skos:inScheme ; skos:prefLabel "has attribute" ; linkml:definition_uri ; @@ -1298,6 +1480,21 @@ linkml:slot_uri ; linkml:usage_slot_name "has study" . + a linkml:SlotDefinition ; + skos:definition "Comprehensive title for the project." ; + skos:inScheme ; + skos:prefLabel "title" ; + linkml:definition_uri ; + linkml:domain ; + linkml:domain_of ; + linkml:is_a ; + linkml:is_usage_slot true ; + linkml:owner ; + linkml:range ; + linkml:required true ; + linkml:slot_uri ; + linkml:usage_slot_name "title" . + a linkml:SlotDefinition ; skos:definition "Detailed description of the Protocol." ; skos:inScheme ; @@ -1342,19 +1539,19 @@ linkml:slot_uri ; linkml:usage_slot_name "name" . - a linkml:SlotDefinition ; - skos:definition "URL for the resource that describes this Protocol." ; + a linkml:SlotDefinition ; + skos:definition "The abstract of the Publication." ; skos:inScheme ; - skos:prefLabel "url" ; - linkml:definition_uri ; - linkml:domain ; - linkml:domain_of ; - linkml:is_a ; + skos:prefLabel "abstract" ; + linkml:definition_uri ; + linkml:domain ; + linkml:domain_of ; + linkml:is_a ; linkml:is_usage_slot true ; - linkml:owner ; + linkml:owner ; linkml:range ; - linkml:slot_uri ; - linkml:usage_slot_name "url" . + linkml:slot_uri ; + linkml:usage_slot_name "abstract" . a linkml:SlotDefinition ; skos:definition "A PMID or DOI for the Publication." ; @@ -1402,7 +1599,7 @@ linkml:usage_slot_name "xref" . a linkml:SlotDefinition ; - skos:definition "Brief description of the Sample." ; + skos:definition "Short textual description of the sample (How the sample was collected, sample source, protocol followed for processing the sample etc) " ; skos:inScheme ; skos:prefLabel "description" ; linkml:definition_uri ; @@ -1444,6 +1641,20 @@ linkml:slot_uri ; linkml:usage_slot_name "has individual" . + a linkml:SlotDefinition ; + skos:definition "Method or Device employed for collecting sample." ; + skos:inScheme ; + skos:prefLabel "isolation" ; + linkml:definition_uri ; + linkml:domain ; + linkml:domain_of ; + linkml:is_a ; + linkml:is_usage_slot true ; + linkml:owner ; + linkml:range ; + linkml:slot_uri ; + linkml:usage_slot_name "isolation" . + a linkml:SlotDefinition ; skos:definition "Name of the Sample." ; skos:inScheme ; @@ -1455,9 +1666,39 @@ linkml:is_usage_slot true ; linkml:owner ; linkml:range ; + linkml:required true ; linkml:slot_uri ; linkml:usage_slot_name "name" . + a linkml:SlotDefinition ; + skos:definition "Methods by which sample is stored (e.g. frozen in liquid nitrogen)." ; + skos:inScheme ; + skos:prefLabel "storage" ; + linkml:definition_uri ; + linkml:domain ; + linkml:domain_of ; + linkml:is_a ; + linkml:is_usage_slot true ; + linkml:owner ; + linkml:range ; + linkml:slot_uri ; + linkml:usage_slot_name "storage" . + + a linkml:SlotDefinition ; + skos:definition "Description of Sample Source (eg: Blood, Serum etc)." ; + skos:inScheme ; + skos:prefLabel "tissue" ; + linkml:definition_uri ; + linkml:domain ; + linkml:domain_of ; + linkml:is_a ; + linkml:is_usage_slot true ; + linkml:owner ; + linkml:range ; + linkml:required true ; + linkml:slot_uri ; + linkml:usage_slot_name "tissue" . + a linkml:SlotDefinition ; skos:definition "Type of sample: 'Case' or 'Control'." ; skos:inScheme ; @@ -1487,6 +1728,66 @@ linkml:slot_uri ; linkml:usage_slot_name "xref" . + a linkml:SlotDefinition ; + skos:definition "Description about the sequencing protocol (eg: mRNA-seq,Whole exome long-read sequencing etc)." ; + skos:inScheme ; + skos:prefLabel "description" ; + linkml:definition_uri ; + linkml:domain ; + linkml:domain_of ; + linkml:is_a ; + linkml:is_usage_slot true ; + linkml:owner ; + linkml:range ; + linkml:slot_uri ; + linkml:usage_slot_name "description" . + + a linkml:SlotDefinition ; + skos:definition "One or more attributes that further characterizes this Sequencing Protocol." ; + skos:inScheme ; + skos:prefLabel "has attribute" ; + linkml:definition_uri ; + linkml:domain ; + linkml:domain_of ; + linkml:inlined true ; + linkml:is_a ; + linkml:is_usage_slot true ; + linkml:multivalued true ; + linkml:owner ; + linkml:range ; + linkml:slot_uri ; + linkml:usage_slot_name "has attribute" . + + a linkml:SlotDefinition ; + skos:definition "Name of the library preparation protocol (eg: mRNA-seq,Whole exome long-read sequencing etc)." ; + skos:inScheme ; + skos:prefLabel "name" ; + linkml:definition_uri ; + linkml:domain ; + linkml:domain_of ; + linkml:is_a ; + linkml:is_usage_slot true ; + linkml:owner ; + linkml:range ; + linkml:slot_uri ; + linkml:usage_slot_name "name" . + + a linkml:SlotDefinition ; + skos:definition "Affiliations with this study." ; + skos:inScheme ; + skos:prefLabel "affiliation" ; + linkml:definition_uri ; + linkml:domain ; + linkml:domain_of ; + linkml:is_a ; + linkml:is_usage_slot true ; + linkml:multivalued true ; + linkml:owner ; + linkml:range ; + linkml:required true ; + linkml:slot_uri ; + linkml:usage_slot_name "affiliation" . + a linkml:SlotDefinition ; skos:definition "A detailed description (abstract) that describes the goals of this Study." ; skos:inScheme ; @@ -1518,7 +1819,7 @@ linkml:usage_slot_name "has analysis" . a linkml:SlotDefinition ; - skos:definition "Custom key/value pairs that further characterizes the Study." ; + skos:definition "Custom key/value pairs that further characterizes the Study. (e.g.: approaches - single-cell, bulk etc)" ; skos:inScheme ; skos:prefLabel "has attribute" ; linkml:definition_uri ; @@ -1564,7 +1865,7 @@ linkml:usage_slot_name "has publication" . a linkml:SlotDefinition ; - skos:definition "A descriptive title for the Study." ; + skos:definition "Comprehensive title for the study." ; skos:inScheme ; skos:prefLabel "title" ; linkml:definition_uri ; @@ -1588,11 +1889,29 @@ linkml:is_a ; linkml:is_usage_slot true ; linkml:owner ; - linkml:range ; + linkml:range ; linkml:required true ; linkml:slot_uri ; linkml:usage_slot_name "type" . + skos:definition "Enum to capture the type of a study." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:permissible_values , + , + , + , + , + , + , + , + , + , + , + , + , + . + a linkml:SlotDefinition ; skos:definition "The role of the user" ; skos:inScheme ; @@ -1607,6 +1926,12 @@ linkml:slot_uri ; linkml:usage_slot_name "role" . + skos:definition "Enum to capture the vital status of an individual." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:permissible_values , + . + a linkml:SlotDefinition ; skos:definition "Key that represents the parameter name." ; skos:inScheme ; @@ -1697,13 +2022,6 @@ , . - a linkml:SlotDefinition ; - skos:definition "The abstract - a short blurb - associated with an entity." ; - skos:inScheme ; - linkml:definition_uri ; - linkml:range ; - linkml:slot_uri . - skos:definition "The biological sex of an Individual as determined by their chromosomes." ; skos:inScheme ; linkml:definition_uri ; @@ -1711,6 +2029,20 @@ , . + a linkml:SlotDefinition ; + skos:definition "The Library Preparation Protocol associated with an entity." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "The sequencing protocol associated with an entity." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:range ; + linkml:slot_uri . + a linkml:SlotDefinition ; skos:definition "Age of an Individual." ; skos:inScheme ; @@ -1722,6 +2054,7 @@ linkml:is_usage_slot true ; linkml:owner ; linkml:range ; + linkml:required true ; linkml:slot_uri ; linkml:usage_slot_name "age" . @@ -1740,7 +2073,7 @@ linkml:usage_slot_name "ancestry" . a linkml:SlotDefinition ; - skos:definition "Ethnicity of an Individual." ; + skos:definition "A social group characterized by a distinctive social and cultural tradition that is maintained from generation to generation.." ; skos:inScheme ; skos:prefLabel "ethnicity" ; linkml:definition_uri ; @@ -1754,7 +2087,7 @@ linkml:usage_slot_name "ethnicity" . a linkml:SlotDefinition ; - skos:definition "Gender of an Individual." ; + skos:definition "Gender of an Individual/ Identification as male/masculine, female/feminine or something else, and association with a (social) role or set of behavioral and cultural traits" ; skos:inScheme ; skos:prefLabel "gender" ; linkml:definition_uri ; @@ -1810,7 +2143,7 @@ linkml:usage_slot_name "has parent" . a linkml:SlotDefinition ; - skos:definition "Biological Sex of an Individual." ; + skos:definition "Biological sex of a sequenced individual. (\"Female\", \"Male\")." ; skos:inScheme ; skos:prefLabel "sex" ; linkml:definition_uri ; @@ -1825,7 +2158,7 @@ linkml:usage_slot_name "sex" . a linkml:SlotDefinition ; - skos:definition "Vital status of an Individual." ; + skos:definition "Last known Vital Status of an Individual." ; skos:inScheme ; skos:prefLabel "vital status" ; linkml:definition_uri ; @@ -1834,7 +2167,8 @@ linkml:is_a ; linkml:is_usage_slot true ; linkml:owner ; - linkml:range ; + linkml:range ; + linkml:required true ; linkml:slot_uri ; linkml:usage_slot_name "vital status" . @@ -1890,80 +2224,391 @@ , . - a linkml:ClassDefinition ; - 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." ; - skos:exactMatch ; + a linkml:SlotDefinition ; + skos:definition "Number of independent samples (biological replicates)." ; skos:inScheme ; - linkml:class_uri ; - linkml:definition_uri ; - linkml:is_a ; - linkml:slot_usage [ ] ; - linkml:slots , - , - , - , - , - , - . + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . - a linkml:ClassDefinition ; - skos:definition "A Technology is an abstraction that represents the instrument used for an assay. The Technology entity captures instrument-specific attributes that are relevant for an Experiment entity. The Technology entity may be further characterized by its children where each child has fields that are relevant to that particular technology." ; + a linkml:SlotDefinition ; + skos:definition "The offset in sequence of the cell identifying barcode. (Eg. \"0\")." ; skos:inScheme ; - linkml:class_uri ; - linkml:definition_uri ; - linkml:is_a ; - linkml:slot_usage [ ] ; - linkml:slots , - , - , - , - , - , - . + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . - a linkml:ClassDefinition ; - 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." ; + a linkml:SlotDefinition ; + skos:definition "The type of read that contains the cell barcode (eg: index1/index2/read1/read2)." ; skos:inScheme ; - linkml:class_uri ; - linkml:definition_uri ; - linkml:is_a ; - linkml:slot_usage [ ] ; - linkml:slots , - , - , - , - , - , - . + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . - a linkml:SlotDefinition ; - skos:definition "Description of an entity." ; + a linkml:SlotDefinition ; + skos:definition "The size of the cell identifying barcode (E.g. \"16\")." ; skos:inScheme ; - skos:prefLabel "description" ; - linkml:definition_uri ; - linkml:domain ; - linkml:domain_of ; - linkml:is_a ; - linkml:is_usage_slot true ; - linkml:owner ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; linkml:range ; - linkml:required true ; - linkml:slot_uri ; - linkml:usage_slot_name "description" . + linkml:slot_uri . - a linkml:SlotDefinition ; - skos:definition "One or more File entities that collectively are part of this Dataset." ; + a linkml:SlotDefinition ; + skos:definition "The end of the cDNA molecule that is preferentially sequenced, e.g. 3/5 prime tag or end, or the full-length transcript." ; skos:inScheme ; - skos:prefLabel "has file" ; - linkml:definition_uri ; - linkml:domain ; - linkml:domain_of ; - linkml:is_a ; - linkml:is_usage_slot true ; - linkml:multivalued true ; - linkml:owner ; - linkml:range ; - linkml:required true ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "Number of experiment replications." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "Flow Cell ID (eg: Experiment ID_Cell 1_Lane_1)." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "Type of flow cell used (e.g. S4, S2 for NovaSeq; PromethION, Flongle for Nanopore)" ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "The name and model of the technology platform used to perform sequencing." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "Number of lanes on used flow cell." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "The name of a library construction approach being used. (eg: \"10X v2 sequencing\" or \"Smart-seq2\")" ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "Manufacturer of library construction kit" ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "A unique identifier for the kit used to construct a genomic library. This may include the vendor name, kit name and kit version (e.g. Agilent sure select Human Exome V8, Twist RefSeq Exome, etc.)" ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "Describe whether the library was sequenced in single-end (forward or reverse) or paired-end mode" ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "Single Cell Sequencing or Bulk Sequencing" ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "Library Name (e.g.: Sequencer layout_macromolecule)" ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "The general method for sequencing library construction (e.g. KAPA PCR-free)." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "Library Selection method (e.g. random, PCA, cDNA, etc )" ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "Describe the level of omics analysis (eg: Metagenome, transcriptome, etc) " ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "The type of primer used for reverse transcription, e.g. \"oligo-dT\" or \"random\" primer. This allows users to identify content of the cDNA library input e.g. enriched for mRNA." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "URL for the resource that describes this Protocol." ; + skos:inScheme ; + skos:prefLabel "url" ; + linkml:definition_uri ; + linkml:domain ; + linkml:domain_of ; + linkml:is_a ; + linkml:is_usage_slot true ; + linkml:owner ; + linkml:range ; + linkml:slot_uri ; + linkml:usage_slot_name "url" . + + a linkml:SlotDefinition ; + skos:definition "Length of sequencing reads (eg: Long or short or actual number of the read length etc)." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "Denotes whether a submitted FASTQ file contains forward (R1) or reverse (R2) reads for paired-end sequencing." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "Reference genome(s) or annotation(s) used for prior analyses (eg: GRCh38.p13)." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "The strandedness of the library, whether reads come from both strands of the cDNA or only from the first (antisense) or the second (sense) strand." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "The type of read that contains the sample barcode (eg: index1/index2/read1/read2)." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "Center where sample was sequenced." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "Mean coverage for whole genome sequencing, or mean target coverage for whole exome and targeted sequencing" ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "subset of genes or specific regions of the genome, which are most likely to be involved in the phenotype under study" ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "Number of replicate samples (technical replicates)." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "The offset in sequence of the UMI identifying barcode. (E.g. \"16\")." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "The type of read that contains the UMI barcode (Eg: index1/index2/read1/read2)" ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "The size of the UMI identifying barcode (Eg. \"10\")." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:SlotDefinition ; + skos:definition "Vital status at the age of the sampling." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:ClassDefinition ; + 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." ; + skos:exactMatch ; + skos:inScheme ; + linkml:class_uri ; + linkml:definition_uri ; + linkml:is_a ; + linkml:slot_usage [ ] ; + linkml:slots , + , + , + , + , + , + . + + a linkml:ClassDefinition ; + skos:definition "A Technology is an abstraction that represents the instrument used for an assay. The Technology entity captures instrument-specific attributes that are relevant for an Experiment entity. The Technology entity may be further characterized by its children where each child has fields that are relevant to that particular technology." ; + skos:inScheme ; + linkml:class_uri ; + linkml:definition_uri ; + linkml:is_a ; + linkml:slot_usage [ ] ; + linkml:slots , + , + , + , + , + , + . + + a linkml:ClassDefinition ; + 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." ; + skos:inScheme ; + linkml:class_uri ; + linkml:definition_uri ; + linkml:is_a ; + linkml:slot_usage [ ] ; + linkml:slots , + , + , + , + , + , + . + + a linkml:SlotDefinition ; + skos:definition "Description of an entity." ; + skos:inScheme ; + skos:prefLabel "description" ; + linkml:definition_uri ; + linkml:domain ; + linkml:domain_of ; + linkml:is_a ; + linkml:is_usage_slot true ; + linkml:owner ; + linkml:range ; + linkml:required true ; + linkml:slot_uri ; + linkml:usage_slot_name "description" . + + a linkml:SlotDefinition ; + skos:definition "One or more File entities that collectively are part of this Dataset." ; + skos:inScheme ; + skos:prefLabel "has file" ; + linkml:definition_uri ; + linkml:domain ; + linkml:domain_of ; + linkml:is_a ; + linkml:is_usage_slot true ; + linkml:multivalued true ; + linkml:owner ; + linkml:range ; + linkml:required true ; linkml:slot_uri ; linkml:usage_slot_name "has file" . @@ -2084,6 +2729,15 @@ , . + a linkml:SlotDefinition ; + skos:definition "The abstract - a short blurb - associated with an entity." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + a linkml:SlotDefinition ; skos:definition "A unique identifier assigned to an entity for the sole purpose of referring to that entity in a global scope." ; skos:inScheme ; @@ -2093,6 +2747,15 @@ linkml:range ; linkml:slot_uri . + a linkml:SlotDefinition ; + skos:definition "Affiliations associated with an instance." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + a linkml:SlotDefinition ; skos:definition "The age of a person." ; skos:inScheme ; @@ -2330,6 +2993,15 @@ linkml:range ; linkml:slot_uri . + a linkml:SlotDefinition ; + skos:definition "Method or device employed for collecting/isolating a sample." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + a linkml:SlotDefinition ; skos:definition "The semantic type for the key of an attribute." ; skos:inScheme ; @@ -2427,6 +3099,15 @@ linkml:range ; linkml:slot_uri . + a linkml:SlotDefinition ; + skos:definition "Methods by which a sample is stored." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + a linkml:SlotDefinition ; skos:definition "The telephone number associated with a person." ; skos:inScheme ; @@ -2436,6 +3117,15 @@ linkml:range ; linkml:slot_uri . + a linkml:SlotDefinition ; + skos:definition "The source of a sample." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + a linkml:SlotDefinition ; skos:definition "Timestamp (in ISO 8601 format) when the entity was updated." ; skos:inScheme ; @@ -2675,6 +3365,27 @@ linkml:range ; linkml:slot_uri . + a linkml:ClassDefinition ; + skos:closeMatch ; + 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 , + ; + skos:inScheme ; + linkml:class_uri ; + linkml:definition_uri ; + linkml:is_a ; + linkml:slot_usage [ ] ; + linkml:slots , + , + , + , + , + , + , + , + , + . + a linkml:SlotDefinition ; skos:inScheme ; linkml:definition_uri ; @@ -2734,27 +3445,6 @@ linkml:range ; linkml:slot_uri . - a linkml:ClassDefinition ; - skos:closeMatch ; - 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 , - ; - skos:inScheme ; - linkml:class_uri ; - linkml:definition_uri ; - linkml:is_a ; - linkml:slot_usage [ ] ; - linkml:slots , - , - , - , - , - , - , - , - , - . - a linkml:ClassDefinition ; skos:definition "A user in GHGA." ; skos:inScheme ; @@ -2910,20 +3600,8 @@ linkml:range ; linkml:slot_uri . - a linkml:SlotDefinition ; - skos:definition "Key/value pairs corresponding to an entity." ; - skos:inScheme ; - linkml:definition_uri ; - linkml:domain_of , - ; - linkml:inlined true ; - linkml:multivalued true ; - linkml:owner ; - linkml:range ; - linkml:slot_uri . - - a linkml:ClassDefinition ; - skos:definition "Data Use Condition represents the use conditions associated with a Dataset. A permission field can have one or more terms that collectively defines the data use condition. The modifier determines the interpretation of the use permission(s)." ; + a linkml:ClassDefinition ; + skos:definition "Data Use Condition represents the use conditions associated with a Dataset. A permission field can have one or more terms that collectively defines the data use condition. The modifier determines the interpretation of the use permission(s)." ; skos:inScheme ; linkml:class_uri ; linkml:definition_uri ; @@ -2946,7 +3624,8 @@ linkml:definition_uri ; linkml:domain_of , , - ; + , + ; linkml:owner ; linkml:range ; linkml:slot_uri . @@ -2973,36 +3652,6 @@ , . - a linkml:ClassDefinition ; - skos:closeMatch ; - skos:definition "Any specifically defined piece of work that is undertaken or attempted to meet a single requirement." ; - skos:inScheme ; - linkml:class_uri ; - linkml:definition_uri ; - linkml:is_a ; - linkml:slot_usage [ ] ; - linkml:slots , - , - , - , - , - , - , - , - , - , - . - - a linkml:SlotDefinition ; - skos:definition "The type of an entity." ; - skos:inScheme ; - linkml:definition_uri ; - linkml:domain_of , - ; - linkml:owner ; - linkml:range ; - linkml:slot_uri . - a linkml:ClassDefinition ; skos:definition "An Analysis Dataset is a collection of Files generated from one or more Analysis performed on data from one or more Studies." ; skos:inScheme ; @@ -3026,22 +3675,6 @@ , . - a linkml:ClassDefinition ; - 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." ; - skos:inScheme ; - linkml:class_uri ; - linkml:definition_uri ; - linkml:is_a ; - linkml:slot_usage [ ] ; - linkml:slots , - , - , - , - , - , - , - . - a linkml:SlotDefinition ; skos:definition "The study associated with an entity." ; skos:inScheme ; @@ -3055,6 +3688,37 @@ linkml:range ; linkml:slot_uri . + a linkml:SlotDefinition ; + skos:definition "The type of an entity." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of , + , + ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:ClassDefinition ; + skos:closeMatch ; + skos:definition "Any specifically defined piece of work that is undertaken or attempted to meet a single requirement." ; + skos:inScheme ; + linkml:class_uri ; + linkml:definition_uri ; + linkml:is_a ; + linkml:slot_usage [ ] ; + linkml:slots , + , + , + , + , + , + , + , + , + , + . + a linkml:ClassDefinition ; skos:definition "Member of an Organization or a Committee." ; skos:inScheme ; @@ -3076,20 +3740,20 @@ , . - a linkml:SlotDefinition ; - skos:definition "The title that describes an entity." ; + a linkml:SlotDefinition ; + skos:definition "Key/value pairs corresponding to an entity." ; skos:inScheme ; - linkml:definition_uri ; - linkml:domain_of , - , - , - , - , - , - ; - linkml:owner ; - linkml:range ; - linkml:slot_uri . + linkml:definition_uri ; + linkml:domain_of , + , + , + , + ; + linkml:inlined true ; + linkml:multivalued true ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . a linkml:ClassDefinition ; skos:definition "A group of members that are delegated to grant access to one or more datasets after ensuring the minimum criteria for data sharing has been met, and request for data use does not raise ethical and/or legal concerns." ; @@ -3110,25 +3774,36 @@ , . - a linkml:ClassDefinition ; - 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." ; + a linkml:SlotDefinition ; + skos:definition "The title that describes an entity." ; skos:inScheme ; - linkml:class_uri ; - linkml:definition_uri ; - linkml:is_a ; + linkml:definition_uri ; + linkml:domain_of , + , + , + , + , + ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + + a linkml:ClassDefinition ; + 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." ; + skos:inScheme ; + linkml:class_uri ; + linkml:definition_uri ; + linkml:is_a ; linkml:slot_usage [ ] ; - linkml:slots , - , - , - , - , + linkml:slots , , , - , , , - , - . + , + , + , + . a linkml:ClassDefinition ; skos:altLabel "experiment protocol", @@ -3173,18 +3848,6 @@ , . - a linkml:ClassDefinition ; - skos:definition "A key/value pair that further characterizes an entity." ; - skos:exactMatch ; - skos:inScheme ; - linkml:class_uri ; - linkml:definition_uri ; - linkml:slot_usage [ ] ; - linkml:slots , - , - , - . - a linkml:ClassDefinition ; 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." ; skos:exactMatch ; @@ -3207,24 +3870,25 @@ , . - a linkml:SlotDefinition ; - skos:definition "The name for an entity." ; + a linkml:ClassDefinition ; + 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." ; skos:inScheme ; - linkml:definition_uri ; - linkml:domain_of , - , - , - , - , - , - , - , - , - , - ; - linkml:owner ; - linkml:range ; - linkml:slot_uri . + linkml:class_uri ; + linkml:definition_uri ; + linkml:is_a ; + linkml:slot_usage [ ] ; + linkml:slots , + , + , + , + , + , + , + , + , + , + , + . a linkml:ClassDefinition ; skos:altLabel "data analysis" ; @@ -3249,6 +3913,18 @@ , . + a linkml:ClassDefinition ; + skos:definition "A key/value pair that further characterizes an entity." ; + skos:exactMatch ; + skos:inScheme ; + linkml:class_uri ; + linkml:definition_uri ; + linkml:slot_usage [ ] ; + linkml:slots , + , + , + . + a linkml:ClassDefinition ; skos:definition "A Dataset is a collection of Files that is prepared for distribution." ; skos:exactMatch ; @@ -3269,27 +3945,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:slot_usage [ ] ; - linkml:slots , - , - , - , - , - , - , - , - , - , - . - a linkml:ClassDefinition ; skos:definition "A Data Access Policy specifies under which circumstances, legal or otherwise, a user can have access to one or more Datasets belonging to one or more Studies." ; skos:inScheme ; @@ -3311,6 +3966,28 @@ , . + a linkml:SlotDefinition ; + skos:definition "The name for an entity." ; + skos:inScheme ; + linkml:definition_uri ; + linkml:domain_of , + , + , + , + , + , + , + , + , + , + , + , + , + ; + linkml:owner ; + linkml:range ; + linkml:slot_uri . + 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 ; @@ -3318,11 +3995,13 @@ linkml:definition_uri ; linkml:is_a ; linkml:slot_usage [ ] ; - linkml:slots , + linkml:slots , + , , , , , + , , , , @@ -3331,6 +4010,52 @@ , . + a linkml:SlotDefinition ; + skos:definition "The type of an entity." ; + skos:inScheme ; + skos:prefLabel "type" ; + linkml:definition_uri ; + linkml:domain ; + linkml:domain_of ; + linkml:is_a ; + linkml:is_usage_slot true ; + linkml:owner ; + linkml:range ; + linkml:slot_uri ; + linkml:usage_slot_name "type" . + + a linkml:ClassDefinition ; + skos:definition "Information about the library preparation of an Experiment." ; + skos:inScheme ; + linkml:class_uri ; + linkml:definition_uri ; + linkml:is_a ; + linkml:slot_usage [ ] ; + linkml:slots , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + . + a linkml:SlotDefinition ; skos:definition "Description of an entity." ; skos:inScheme ; @@ -3344,53 +4069,15 @@ , , , + , , , - ; + , + ; linkml:owner ; linkml:range ; linkml:slot_uri . - a linkml:ClassDefinition ; - skos:closeMatch ; - 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:slot_usage [ ] ; - linkml:slots , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - . - - a linkml:SlotDefinition ; - skos:definition "The type of an entity." ; - skos:inScheme ; - skos:prefLabel "type" ; - linkml:definition_uri ; - linkml:domain ; - linkml:domain_of ; - linkml:is_a ; - linkml:is_usage_slot true ; - linkml:owner ; - linkml:range ; - linkml:slot_uri ; - linkml:usage_slot_name "type" . - a linkml:ClassDefinition ; skos:altLabel "file object" ; skos:inScheme ; @@ -3429,6 +4116,51 @@ , . + a linkml:ClassDefinition ; + skos:closeMatch ; + 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:slot_usage [ ] ; + linkml:slots , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + . + + a linkml:SlotDefinition ; + skos:definition "Holds one or more Attribute entities that further characterizes this entity." ; + skos:inScheme ; + skos:prefLabel "has attribute" ; + linkml:definition_uri ; + linkml:domain ; + linkml:domain_of ; + linkml:inlined true ; + linkml:is_a ; + linkml:is_usage_slot true ; + linkml:multivalued true ; + linkml:owner ; + linkml:range ; + linkml:slot_uri ; + linkml:usage_slot_name "has attribute" . + a linkml:SlotDefinition ; skos:definition "The internal unique identifier for an entity." ; skos:inScheme ; @@ -3473,22 +4205,6 @@ linkml:slot_uri ; linkml:usage_slot_name "creation date" . - a linkml:SlotDefinition ; - skos:definition "Holds one or more Attribute entities that further characterizes this entity." ; - skos:inScheme ; - skos:prefLabel "has attribute" ; - linkml:definition_uri ; - linkml:domain ; - linkml:domain_of ; - linkml:inlined true ; - linkml:is_a ; - linkml:is_usage_slot true ; - linkml:multivalued true ; - linkml:owner ; - linkml:range ; - linkml:slot_uri ; - linkml:usage_slot_name "has attribute" . - a linkml:SlotDefinition ; skos:definition "Timestamp (in ISO 8601 format) when the entity was updated." ; skos:inScheme ; @@ -3518,6 +4234,66 @@ linkml:slot_uri ; linkml:usage_slot_name "xref" . + a linkml:ClassDefinition ; + skos:definition "Information about the sequencing of a sample." ; + skos:inScheme ; + linkml:class_uri ; + linkml:definition_uri ; + linkml:is_a ; + 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:slot_usage [ ] ; + linkml:slots , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + . + a linkml:ClassDefinition ; skos:altLabel "patient", "subject" ; diff --git a/artifacts/shex/ghga.shex b/artifacts/shex/ghga.shex index 07823740..621e7389 100644 --- a/artifacts/shex/ghga.shex +++ b/artifacts/shex/ghga.shex @@ -252,7 +252,10 @@ linkml:Nodeidentifier NONLITERAL ( $ ( & ; rdf:type [ ] ? ; @linkml:String ; - @linkml:String ? ; + @linkml:String ; + @linkml:String ? ; + @linkml:String ? ; + @linkml:String ? ; @ ; @ ; @ ? ; @@ -277,7 +280,7 @@ linkml:Nodeidentifier NONLITERAL CLOSED { ( $ ( & ; rdf:type [ ] ? ; - @linkml:String ? ; + <name> @linkml:String ? ; <has_input> @<Sample> ? ; <has_protocol> @<Protocol> ? ; <has_agent> @<Agent> ? ; @@ -306,7 +309,7 @@ linkml:Nodeidentifier NONLITERAL <checksum> @linkml:String ? ; <file_index> @linkml:String ? ; <category> @linkml:String ? ; - <type> @linkml:String ? + <type> @<FileTypeEnum> ? ) ; rdf:type [ <File> ] ) @@ -318,9 +321,9 @@ linkml:Nodeidentifier NONLITERAL rdf:type [ <Person> ] ? ; <gender> @linkml:String ? ; <sex> @<BiologicalSexEnum> ; - <age> @linkml:Integer ? ; + <age> @linkml:Integer ; <year_of_birth> @linkml:String ? ; - <vital_status> @linkml:String ? ; + <vital_status> @<VitalStatusEnum> ; <geographical_region> @linkml:String ? ; <ethnicity> @linkml:String ? ; <ancestry> @linkml:String ? ; @@ -357,6 +360,30 @@ linkml:Nodeidentifier NONLITERAL } OR @<Experiment> OR @<Study> ) +<LibraryPreparationProtocol> CLOSED { + ( $<LibraryPreparationProtocol_tes> ( &<Protocol_tes> ; + rdf:type [ <Protocol> ] ? ; + <name> @linkml:String ; + <description> @linkml:String ; + <library_name> @linkml:String ? ; + <library_layout> @linkml:String ? ; + <library_type> @linkml:String ? ; + <library_selection> @linkml:String ? ; + <library_construction> @linkml:String ? ; + <library_preparation> @linkml:String ? ; + <library_level> @linkml:String ? ; + <library_construction_kit_retail_name> @linkml:String ? ; + <library_construction_kit_manufacturer> @linkml:String ? ; + <primer> @linkml:String ? ; + <end_bias> @linkml:String ? ; + <target_regions> @linkml:String ? ; + <rnaseq_strandedness> @linkml:String ? ; + <has_attribute> @<Attribute> * + ) ; + rdf:type [ <LibraryPreparationProtocol> ] + ) +} + <MaterialEntity> ( CLOSED { ( $<MaterialEntity_tes> ( &<NamedThing_tes> ; @@ -439,7 +466,8 @@ linkml:Nodeidentifier NONLITERAL ( $<Project_tes> ( &<ResearchActivity_tes> ; rdf:type [ <ResearchActivity> ] ? ; <has_study> @<Experiment> * ; - <description> @linkml:String ? ; + <title> @linkml:String ; + <description> @linkml:String ; <has_publication> @<Publication> * ; <has_attribute> @<Attribute> * ) ; @@ -447,22 +475,25 @@ linkml:Nodeidentifier NONLITERAL ) } -<Protocol> CLOSED { - ( $<Protocol_tes> ( &<InformationContentEntity_tes> ; - rdf:type [ <InformationContentEntity> ] ? ; - <name> @linkml:String ? ; - <description> @linkml:String ? ; - <url> @linkml:String ? ; - <has_attribute> @<Attribute> * - ) ; - rdf:type [ <Protocol> ] - ) -} +<Protocol> ( + CLOSED { + ( $<Protocol_tes> ( &<InformationContentEntity_tes> ; + rdf:type [ <InformationContentEntity> ] ? ; + <name> @linkml:String ? ; + <description> @linkml:String ? ; + <url> @linkml:String ? ; + <has_attribute> @<Attribute> * + ) ; + rdf:type [ <Protocol> ] + ) + } OR @<LibraryPreparationProtocol> OR @<SequencingProtocol> +) <Publication> CLOSED { ( $<Publication_tes> ( &<InformationContentEntity_tes> ; rdf:type [ <InformationContentEntity> ] ? ; <title> @linkml:String ? ; + <abstract> @linkml:String ? ; <xref> @linkml:String * ) ; rdf:type [ <Publication> ] @@ -485,27 +516,59 @@ linkml:Nodeidentifier NONLITERAL <Sample> CLOSED { ( $<Sample_tes> ( &<MaterialEntity_tes> ; rdf:type [ <MaterialEntity> ] ? ; - <name> @linkml:String ? ; + <name> @linkml:String ; + <type> @linkml:String ? ; <description> @linkml:String ? ; + <vital_status_at_sampling> @linkml:String ? ; + <tissue> @linkml:String ; + <isolation> @linkml:String ? ; + <storage> @linkml:String ? ; <has_individual> @<Individual> ; <has_biospecimen> @<Biospecimen> ? ; - <type> @<CaseControlEnum> ? ; <xref> @linkml:String * ) ; rdf:type [ <Sample> ] ) } +<SequencingProtocol> CLOSED { + ( $<SequencingProtocol_tes> ( &<Protocol_tes> ; + rdf:type [ <Protocol> ] ? ; + <name> @linkml:String ? ; + <description> @linkml:String ? ; + <sequencing_center> @linkml:String ? ; + <instrument_model> @linkml:String ? ; + <read_length> @linkml:String ? ; + <read_pair_number> @linkml:String ? ; + <target_coverage> @linkml:String ? ; + <reference_annotation> @linkml:String ? ; + <lane_number> @linkml:String ? ; + <flow_cell_id> @linkml:String ? ; + <flow_cell_type> @linkml:String ? ; + <umi_barcode_read> @linkml:String ? ; + <umi_barcode_size> @linkml:String ? ; + <umi_barcode_offset> @linkml:String ? ; + <cell_barcode_read> @linkml:String ? ; + <cell_barcode_offset> @linkml:String ? ; + <cell_barcode_size> @linkml:String ? ; + <sample_barcode_read> @linkml:String ? ; + <has_attribute> @<Attribute> * + ) ; + rdf:type [ <SequencingProtocol> ] + ) +} + <Study> CLOSED { ( $<Study_tes> ( &<Investigation_tes> ; rdf:type [ <Investigation> ] ? ; + <affiliation> @linkml:String + ; + <has_publication> @<Publication> * ; <has_experiment> @<Experiment> * ; <has_analysis> @<Analysis> * ; + <has_attribute> @<Attribute> * ; <title> @linkml:String ; <description> @linkml:String ; - <type> @linkml:String ; - <has_publication> @<Publication> * ; - <has_attribute> @<Attribute> * + <type> @<StudyTypeEnum> ) ; rdf:type [ <Study> ] ) diff --git a/artifacts/sql/ghga.sql b/artifacts/sql/ghga.sql index df47e351..20bbe1eb 100644 --- a/artifacts/sql/ghga.sql +++ b/artifacts/sql/ghga.sql @@ -1,6 +1,8 @@ CREATE TYPE biological_sex_enum AS ENUM ('XX', 'XY', 'none'); -CREATE TYPE case_control_enum AS ENUM ('control', 'case'); +CREATE TYPE vital_status_enum AS ENUM ('alive', 'deceased'); +CREATE TYPE file_type_enum AS ENUM ('bam', 'complete_genomics', 'cram', 'fasta', 'fastq', 'pacbio_hdf5', 'sff', 'srf', 'vcf'); +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', 'other'); CREATE TYPE user_role_enum AS ENUM ('data requester', 'data steward'); CREATE TABLE agent ( @@ -156,9 +158,9 @@ CREATE TABLE donor ( additional_name TEXT, gender TEXT, sex biological_sex_enum NOT NULL, - age INTEGER, + age INTEGER NOT NULL, year_of_birth TEXT, - vital_status TEXT, + vital_status vital_status_enum NOT NULL, geographical_region TEXT, ethnicity TEXT, ancestry TEXT, @@ -196,7 +198,7 @@ CREATE TABLE file ( checksum TEXT, file_index TEXT, category TEXT, - type TEXT, + type file_type_enum, PRIMARY KEY (id) ); @@ -212,9 +214,9 @@ CREATE TABLE individual ( additional_name TEXT, gender TEXT, sex biological_sex_enum NOT NULL, - age INTEGER, + age INTEGER NOT NULL, year_of_birth TEXT, - vital_status TEXT, + vital_status vital_status_enum NOT NULL, geographical_region TEXT, ethnicity TEXT, ancestry TEXT, @@ -233,6 +235,32 @@ CREATE TABLE information_content_entity ( PRIMARY KEY (id) ); +CREATE TABLE library_preparation_protocol ( + id TEXT NOT NULL, + accession TEXT, + type TEXT, + creation_date TEXT, + update_date TEXT, + url TEXT, + name TEXT NOT NULL, + description TEXT NOT NULL, + library_name TEXT, + library_layout TEXT, + library_type TEXT, + library_selection TEXT, + library_construction TEXT, + library_preparation TEXT, + library_level TEXT, + library_construction_kit_retail_name TEXT, + library_construction_kit_manufacturer TEXT, + primer TEXT, + end_bias TEXT, + target_regions TEXT, + rnaseq_strandedness TEXT, + has_attribute TEXT, + PRIMARY KEY (id) +); + CREATE TABLE material_entity ( id TEXT NOT NULL, accession TEXT, @@ -321,9 +349,9 @@ CREATE TABLE project ( type TEXT, creation_date TEXT, update_date TEXT, - title TEXT, has_study TEXT, - description TEXT, + title TEXT NOT NULL, + description TEXT NOT NULL, has_publication TEXT, has_attribute TEXT, PRIMARY KEY (id) @@ -349,22 +377,52 @@ CREATE TABLE publication ( creation_date TEXT, update_date TEXT, title TEXT, + abstract TEXT, id TEXT NOT NULL, PRIMARY KEY (id) ); +CREATE TABLE sequencing_protocol ( + id TEXT NOT NULL, + accession TEXT, + type TEXT, + creation_date TEXT, + update_date TEXT, + url TEXT, + name TEXT, + description TEXT, + sequencing_center TEXT, + instrument_model TEXT, + read_length TEXT, + read_pair_number TEXT, + target_coverage TEXT, + reference_annotation TEXT, + lane_number TEXT, + flow_cell_id TEXT, + flow_cell_type TEXT, + umi_barcode_read TEXT, + umi_barcode_size TEXT, + umi_barcode_offset TEXT, + cell_barcode_read TEXT, + cell_barcode_offset TEXT, + cell_barcode_size TEXT, + sample_barcode_read TEXT, + has_attribute TEXT, + PRIMARY KEY (id) +); + CREATE TABLE study ( id TEXT NOT NULL, accession TEXT, creation_date TEXT, update_date TEXT, + has_publication TEXT, has_experiment TEXT, has_analysis TEXT, + has_attribute TEXT, title TEXT NOT NULL, description TEXT NOT NULL, - type TEXT NOT NULL, - has_publication TEXT, - has_attribute TEXT, + type study_type_enum NOT NULL, PRIMARY KEY (id) ); @@ -644,6 +702,13 @@ CREATE TABLE information_content_entity_xref ( FOREIGN KEY(backref_id) REFERENCES information_content_entity (id) ); +CREATE TABLE library_preparation_protocol_xref ( + backref_id TEXT, + xref TEXT, + PRIMARY KEY (backref_id, xref), + FOREIGN KEY(backref_id) REFERENCES library_preparation_protocol (id) +); + CREATE TABLE material_entity_xref ( backref_id TEXT, xref TEXT, @@ -714,6 +779,13 @@ CREATE TABLE publication_xref ( FOREIGN KEY(backref_id) REFERENCES publication (id) ); +CREATE TABLE sequencing_protocol_xref ( + backref_id TEXT, + xref TEXT, + PRIMARY KEY (backref_id, xref), + FOREIGN KEY(backref_id) REFERENCES sequencing_protocol (id) +); + CREATE TABLE study_xref ( backref_id TEXT, xref TEXT, @@ -721,6 +793,13 @@ CREATE TABLE study_xref ( FOREIGN KEY(backref_id) REFERENCES study (id) ); +CREATE TABLE study_affiliation ( + backref_id TEXT, + affiliation TEXT NOT NULL, + PRIMARY KEY (backref_id, affiliation), + FOREIGN KEY(backref_id) REFERENCES study (id) +); + CREATE TABLE technology_xref ( backref_id TEXT, xref TEXT, @@ -791,11 +870,15 @@ CREATE TABLE sample ( has_attribute TEXT, creation_date TEXT, update_date TEXT, - name TEXT, + name TEXT NOT NULL, + type TEXT, description TEXT, + vital_status_at_sampling TEXT, + tissue TEXT NOT NULL, + isolation TEXT, + storage TEXT, has_individual TEXT NOT NULL, has_biospecimen TEXT, - type case_control_enum, PRIMARY KEY (id), FOREIGN KEY(has_individual) REFERENCES individual (id), FOREIGN KEY(has_biospecimen) REFERENCES biospecimen (id) @@ -868,7 +951,10 @@ CREATE TABLE experiment ( type TEXT, has_publication TEXT, name TEXT NOT NULL, - description TEXT, + description TEXT NOT NULL, + biological_replicates TEXT, + technical_replicates TEXT, + experimental_replicates TEXT, has_study TEXT NOT NULL, has_sample TEXT NOT NULL, has_technology TEXT, @@ -908,7 +994,7 @@ CREATE TABLE experiment_process ( has_attribute TEXT, creation_date TEXT, update_date TEXT, - title TEXT, + name TEXT, has_input TEXT, has_protocol TEXT, has_agent TEXT, diff --git a/artifacts/sql/ghga_models.py b/artifacts/sql/ghga_models.py index bf40a97b..4308b349 100644 --- a/artifacts/sql/ghga_models.py +++ b/artifacts/sql/ghga_models.py @@ -254,6 +254,9 @@ Column('has_publication', Text, ForeignKey('publication.id')), Column('name', Text), Column('description', Text), + Column('biological_replicates', Text), + Column('technical_replicates', Text), + Column('experimental_replicates', Text), Column('has_study', Text, ForeignKey('study.id')), Column('has_sample', Text, ForeignKey('sample.id')), Column('has_technology', Text, ForeignKey('technology.id')), @@ -281,7 +284,7 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), - Column('title', Text), + Column('name', Text), Column('has_input', Text, ForeignKey('sample.id')), Column('has_protocol', Text, ForeignKey('protocol.id')), Column('has_agent', Text, ForeignKey('agent.id')), @@ -353,6 +356,30 @@ Column('type', Text), Column('has_publication', Text, ForeignKey('publication.id')), ) +tbl_library_preparation_protocol = Table('library_preparation_protocol', metadata, + Column('id', Text, primary_key=True), + Column('accession', Text), + Column('type', Text), + Column('creation_date', Text), + Column('update_date', Text), + Column('url', Text), + Column('name', Text), + Column('description', Text), + Column('library_name', Text), + Column('library_layout', Text), + Column('library_type', Text), + Column('library_selection', Text), + Column('library_construction', Text), + Column('library_preparation', Text), + Column('library_level', Text), + Column('library_construction_kit_retail_name', Text), + Column('library_construction_kit_manufacturer', Text), + Column('primer', Text), + Column('end_bias', Text), + Column('target_regions', Text), + Column('rnaseq_strandedness', Text), + Column('has_attribute', Text), +) tbl_material_entity = Table('material_entity', metadata, Column('id', Text, primary_key=True), Column('accession', Text), @@ -427,8 +454,8 @@ Column('type', Text), Column('creation_date', Text), Column('update_date', Text), - Column('title', Text), Column('has_study', Text), + Column('title', Text), Column('description', Text), Column('has_publication', Text), Column('has_attribute', Text), @@ -451,6 +478,7 @@ Column('creation_date', Text), Column('update_date', Text), Column('title', Text), + Column('abstract', Text), Column('id', Text, primary_key=True), ) tbl_research_activity = Table('research_activity', metadata, @@ -471,23 +499,54 @@ Column('creation_date', Text), Column('update_date', Text), Column('name', Text), + Column('type', Text), Column('description', Text), + Column('vital_status_at_sampling', Text), + Column('tissue', Text), + Column('isolation', Text), + Column('storage', Text), Column('has_individual', Text, ForeignKey('individual.id')), Column('has_biospecimen', Text, ForeignKey('biospecimen.id')), +) +tbl_sequencing_protocol = Table('sequencing_protocol', metadata, + Column('id', Text, primary_key=True), + Column('accession', Text), Column('type', Text), + Column('creation_date', Text), + Column('update_date', Text), + Column('url', Text), + Column('name', Text), + Column('description', Text), + Column('sequencing_center', Text), + Column('instrument_model', Text), + Column('read_length', Text), + Column('read_pair_number', Text), + Column('target_coverage', Text), + Column('reference_annotation', Text), + Column('lane_number', Text), + Column('flow_cell_id', Text), + Column('flow_cell_type', Text), + Column('umi_barcode_read', Text), + Column('umi_barcode_size', Text), + Column('umi_barcode_offset', Text), + Column('cell_barcode_read', Text), + Column('cell_barcode_offset', Text), + Column('cell_barcode_size', Text), + Column('sample_barcode_read', Text), + Column('has_attribute', Text), ) tbl_study = Table('study', metadata, Column('id', Text, primary_key=True), Column('accession', Text), Column('creation_date', Text), Column('update_date', Text), + Column('has_publication', Text), Column('has_experiment', Text), Column('has_analysis', Text), + Column('has_attribute', Text), Column('title', Text), Column('description', Text), Column('type', Text), - Column('has_publication', Text), - Column('has_attribute', Text), ) tbl_technology = Table('technology', metadata, Column('id', Text, primary_key=True), @@ -635,6 +694,10 @@ Column('backref_id', Text, ForeignKey('investigation.id'), primary_key=True), Column('xref', Text, primary_key=True), ) +tbl_library_preparation_protocol_xref = Table('library_preparation_protocol_xref', metadata, + Column('backref_id', Text, ForeignKey('library_preparation_protocol.id'), primary_key=True), + Column('xref', Text, primary_key=True), +) tbl_material_entity_xref = Table('material_entity_xref', metadata, Column('backref_id', Text, ForeignKey('material_entity.id'), primary_key=True), Column('xref', Text, primary_key=True), @@ -683,10 +746,18 @@ Column('backref_id', Text, ForeignKey('sample.id'), primary_key=True), Column('xref', Text, primary_key=True), ) +tbl_sequencing_protocol_xref = Table('sequencing_protocol_xref', metadata, + Column('backref_id', Text, ForeignKey('sequencing_protocol.id'), primary_key=True), + Column('xref', Text, primary_key=True), +) tbl_study_xref = Table('study_xref', metadata, Column('backref_id', Text, ForeignKey('study.id'), primary_key=True), Column('xref', Text, primary_key=True), ) +tbl_study_affiliation = Table('study_affiliation', metadata, + Column('backref_id', Text, ForeignKey('study.id'), primary_key=True), + Column('affiliation', Text, primary_key=True), +) tbl_technology_xref = Table('technology_xref', metadata, Column('backref_id', Text, ForeignKey('technology.id'), primary_key=True), Column('xref', Text, primary_key=True), @@ -783,6 +854,8 @@ }) mapper_registry.map_imperatively(Investigation, tbl_investigation, properties={ }) +mapper_registry.map_imperatively(LibraryPreparationProtocol, tbl_library_preparation_protocol, properties={ +}) mapper_registry.map_imperatively(MaterialEntity, tbl_material_entity, properties={ }) mapper_registry.map_imperatively(Member, tbl_member, properties={ @@ -807,6 +880,8 @@ }) mapper_registry.map_imperatively(Sample, tbl_sample, properties={ }) +mapper_registry.map_imperatively(SequencingProtocol, tbl_sequencing_protocol, properties={ +}) mapper_registry.map_imperatively(Study, tbl_study, properties={ }) mapper_registry.map_imperatively(Technology, tbl_technology, properties={ From d1748fa8fb3e9b2f4fb344d7b5d4962aa0119d73 Mon Sep 17 00:00:00 2001 From: Deepak <deepakunni3@users.noreply.github.com> Date: Thu, 18 Nov 2021 10:28:24 +0100 Subject: [PATCH 03/16] Add slots for tracking status (#23) * Add slots for submission status, release status, and deprecation status * Fix typo in slot name * Remove outdated overview png * Update README.md --- README.md | 4 -- ghga-overview.png | Bin 97623 -> 0 bytes src/schema/ghga.yaml | 89 +++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 86 insertions(+), 7 deletions(-) delete mode 100644 ghga-overview.png diff --git a/README.md b/README.md index d209bebe..da21a81b 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,3 @@ Artifacts that are currently a work in progress: - Pydantic classes -## GHGA Metadata Schema Overview - -![GHGA Metadata Schema](ghga-overview.png "GHGA Metadata Schema") - diff --git a/ghga-overview.png b/ghga-overview.png deleted file mode 100644 index 8d91b4c1774e087da6eb0393b6972742fc3c63b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97623 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 R84LcC6qS9HEv)VS{{Z78Lcst4 diff --git a/src/schema/ghga.yaml b/src/schema/ghga.yaml index 4dccb632..51bf86bb 100644 --- a/src/schema/ghga.yaml +++ b/src/schema/ghga.yaml @@ -105,6 +105,10 @@ classes: investigation: is_a: planned process + mixins: + - submission status mixin + - release status mixin + - deprecation mixin description: >- Investigation is the process of carrying out a plan or procedure so as to discover fact or information about the object of study. @@ -727,7 +731,7 @@ classes: - format - size - checksum - - file_index + - file index - category slot_usage: format: @@ -743,7 +747,7 @@ classes: checksum: description: >- The checksum for the file. - file_index: + file index: description: >- The index for this file. Commonly for BAM/VCF files. category: @@ -822,6 +826,10 @@ classes: dataset: is_a: information content entity + mixins: + - submission status mixin + - release status mixin + - deprecation mixin description: >- A Dataset is a collection of Files that is prepared for distribution. exact_mappings: @@ -1125,6 +1133,31 @@ classes: The role of the user range: user_role_enum + submission status mixin: + mixin: true + description: >- + A mixin that keeps track of the submission status. + slots: + - submission status + - submission date + + release status mixin: + mixin: true + description: >- + A mixin that keeps track of the release status. + slots: + - release status + - release date + + deprecation mixin: + mixin: true + description: >- + A mixin that keeps track of the deprecation status. + slots: + - deprecated + - deprecation date + - replaced by + slots: id: @@ -1346,7 +1379,7 @@ slots: checksum: description: The checksum for a file. - file_index: + file index: description: The index file corresponding to the file. category: @@ -1522,6 +1555,38 @@ slots: description: >- Vital status at the age of the sampling. + submission status: + description: >- + The status of submission. + range: submission_status_enum + + submission date: + description: >- + The date when submission was completed. + + release status: + description: >- + The release status of an entity. + range: release_status_enum + + release date: + description: >- + The date when the entity was released for public consumption. + + deprecated: + description: >- + The deprecation status of an entity. + range: boolean + + deprecation date: + description: >- + The date when the entity was deprecated. + + replaced by: + description: >- + The entity which replaces a deprecated entity. + range: named thing + enums: case_control_enum: description: >- @@ -1626,3 +1691,21 @@ enums: vcf: description: >- vcf File for storing gene sequence variations. + + submission_status_enum: + description: >- + Enum to capture submission status. + permissible_values: + in progress: + description: Signifies that a submission is in progress. + submitted: + description: Signifies that a submission is complete and submitted. + + release_status_enum: + description: >- + Enum to capture the release status. + permissible_values: + unreleased: + description: Signifies that the submission is not released for public consumption. + released: + description: Signifies that the submission is released for public consumption. From 9b0ebb8f0cfb5d2a3655330ecb873a0dd5e36717 Mon Sep 17 00:00:00 2001 From: GitHub Action <action@github.com> Date: Thu, 18 Nov 2021 09:29:44 +0000 Subject: [PATCH 04/16] Autogenerate artifacts --- artifacts/csv/ghga.csv | 3 + artifacts/graphql/ghga.graphql | 72 ++- artifacts/jsonschema/ghga.schema.json | 214 +++++++++ artifacts/owl/ghga.owl.ttl | 605 ++++++++++++++++---------- artifacts/python/ghga.py | 197 ++++++++- artifacts/rdf/ghga.ttl | 239 ++++++++-- artifacts/shex/ghga.shex | 55 ++- artifacts/sql/ghga.sql | 314 +++++++------ artifacts/sql/ghga_models.py | 49 +++ 9 files changed, 1357 insertions(+), 391 deletions(-) diff --git a/artifacts/csv/ghga.csv b/artifacts/csv/ghga.csv index 98dcde59..98c8b090 100644 --- a/artifacts/csv/ghga.csv +++ b/artifacts/csv/ghga.csv @@ -16,6 +16,7 @@ data_access_policy,,"A Data Access Policy specifies under which circumstances, l data_transformation,,A data transformation technique used to analyze and interpret data to gain a better understanding of it. data_use_condition,,Data Use Condition represents the use conditions associated with a Dataset. A permission field can have one or more terms that collectively defines the data use condition. The modifier determines the interpretation of the use permission(s). dataset,,A Dataset is a collection of Files that is prepared for distribution. +deprecation_mixin,,A mixin that keeps track of the deprecation status. disease,,A disease is a disposition to undergo pathological processes that exists in an organism because of one or more disorders in that organism. disease_or_phenotypic_feature,,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. donor,,A Donor is an Individual that participates in a research Study by donating a Biospecimen. The use of the Biospecimen is restricted to the consent provided by the Donor. @@ -38,10 +39,12 @@ population,,"A population is a collection of individuals from the same taxonomic project,,Any specifically defined piece of work that is undertaken or attempted to meet a single requirement. protocol,,"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." publication,,"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." +release_status_mixin,,A mixin that keeps track of the release status. research_activity,,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. sample,,"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)." sequencing_protocol,,Information about the sequencing of a sample. study,,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. +submission_status_mixin,,A mixin that keeps track of the submission status. technology,,A Technology is an abstraction that represents the instrument used for an assay. The Technology entity captures instrument-specific attributes that are relevant for an Experiment entity. The Technology entity may be further characterized by its children where each child has fields that are relevant to that particular technology. user,,A user in GHGA. workflow,,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. diff --git a/artifacts/graphql/ghga.graphql b/artifacts/graphql/ghga.graphql index 8e0a46af..88c9290d 100644 --- a/artifacts/graphql/ghga.graphql +++ b/artifacts/graphql/ghga.graphql @@ -24,6 +24,13 @@ type AggregateDataset hasFile: [File]! hasPublication: [Publication] type: String! + submissionStatus: SubmissionStatusEnum + submissionDate: String + releaseStatus: ReleaseStatusEnum + releaseDate: String + deprecated: Boolean + deprecationDate: String + replacedBy: NamedThing hasDataset: [Dataset] } @@ -58,6 +65,13 @@ type AnalysisDataset hasFile: [File]! hasPublication: [Publication] type: String! + submissionStatus: SubmissionStatusEnum + submissionDate: String + releaseStatus: ReleaseStatusEnum + releaseDate: String + deprecated: Boolean + deprecationDate: String + replacedBy: NamedThing hasDataAccessPolicy: [DataAccessPolicy]! hasStudy: [Study]! hasAnalysis: String @@ -214,7 +228,7 @@ type DataUseCondition modifier: String } -type Dataset +type Dataset implements SubmissionStatusMixin, ReleaseStatusMixin, DeprecationMixin { id: String! accession: String @@ -227,6 +241,20 @@ type Dataset hasFile: [File]! hasPublication: [Publication] type: String! + submissionStatus: SubmissionStatusEnum + submissionDate: String + releaseStatus: ReleaseStatusEnum + releaseDate: String + deprecated: Boolean + deprecationDate: String + replacedBy: NamedThing + } + +interface DeprecationMixin + { + deprecated: Boolean + deprecationDate: String + replacedBy: NamedThing } type Disease @@ -290,6 +318,13 @@ type Experiment title: String type: String hasPublication: Publication + submissionStatus: SubmissionStatusEnum + submissionDate: String + releaseStatus: ReleaseStatusEnum + releaseDate: String + deprecated: Boolean + deprecationDate: String + replacedBy: NamedThing name: String! description: String! biologicalReplicates: String @@ -315,6 +350,13 @@ type ExperimentDataset hasFile: [File]! hasPublication: [Publication] type: String! + submissionStatus: SubmissionStatusEnum + submissionDate: String + releaseStatus: ReleaseStatusEnum + releaseDate: String + deprecated: Boolean + deprecationDate: String + replacedBy: NamedThing hasDataAccessPolicy: [DataAccessPolicy]! hasStudy: [Study]! hasExperiment: [Experiment]! @@ -402,7 +444,7 @@ type InformationContentEntity updateDate: String } -type Investigation +type Investigation implements SubmissionStatusMixin, ReleaseStatusMixin, DeprecationMixin { id: String! accession: String @@ -414,6 +456,13 @@ type Investigation description: String type: String hasPublication: Publication + submissionStatus: SubmissionStatusEnum + submissionDate: String + releaseStatus: ReleaseStatusEnum + releaseDate: String + deprecated: Boolean + deprecationDate: String + replacedBy: NamedThing } type LibraryPreparationProtocol @@ -574,6 +623,12 @@ type Publication xref: [String] } +interface ReleaseStatusMixin + { + releaseStatus: ReleaseStatusEnum + releaseDate: String + } + type ResearchActivity { id: String! @@ -644,6 +699,13 @@ type Study xref: [String] creationDate: String updateDate: String + submissionStatus: SubmissionStatusEnum + submissionDate: String + releaseStatus: ReleaseStatusEnum + releaseDate: String + deprecated: Boolean + deprecationDate: String + replacedBy: NamedThing affiliation: [String]! hasPublication: [Publication] hasExperiment: [Experiment] @@ -654,6 +716,12 @@ type Study type: StudyTypeEnum! } +interface SubmissionStatusMixin + { + submissionStatus: SubmissionStatusEnum + submissionDate: String + } + type Technology { id: String! diff --git a/artifacts/jsonschema/ghga.schema.json b/artifacts/jsonschema/ghga.schema.json index d808c86a..a4b042c1 100644 --- a/artifacts/jsonschema/ghga.schema.json +++ b/artifacts/jsonschema/ghga.schema.json @@ -65,6 +65,14 @@ "description": "Timestamp (in ISO 8601 format) when the entity was created.", "type": "string" }, + "deprecated": { + "description": "The deprecation status of an entity.", + "type": "boolean" + }, + "deprecation_date": { + "description": "The date when the entity was deprecated.", + "type": "string" + }, "description": { "description": "Description of an entity.", "type": "string" @@ -101,6 +109,26 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "release_date": { + "description": "The date when the entity was released for public consumption.", + "type": "string" + }, + "release_status": { + "$ref": "#/$defs/ReleaseStatusEnum", + "description": "The release status of an entity." + }, + "replaced_by": { + "description": "The entity which replaces a deprecated entity.", + "type": "string" + }, + "submission_date": { + "description": "The date when submission was completed.", + "type": "string" + }, + "submission_status": { + "$ref": "#/$defs/SubmissionStatusEnum", + "description": "The status of submission." + }, "title": { "description": "The title that describes an entity.", "type": "string" @@ -225,6 +253,14 @@ "description": "Timestamp (in ISO 8601 format) when the entity was created.", "type": "string" }, + "deprecated": { + "description": "The deprecation status of an entity.", + "type": "boolean" + }, + "deprecation_date": { + "description": "The date when the entity was deprecated.", + "type": "string" + }, "description": { "description": "Description of an entity.", "type": "string" @@ -279,6 +315,26 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "release_date": { + "description": "The date when the entity was released for public consumption.", + "type": "string" + }, + "release_status": { + "$ref": "#/$defs/ReleaseStatusEnum", + "description": "The release status of an entity." + }, + "replaced_by": { + "description": "The entity which replaces a deprecated entity.", + "type": "string" + }, + "submission_date": { + "description": "The date when submission was completed.", + "type": "string" + }, + "submission_status": { + "$ref": "#/$defs/SubmissionStatusEnum", + "description": "The status of submission." + }, "title": { "description": "The title that describes an entity.", "type": "string" @@ -958,6 +1014,14 @@ "description": "Timestamp (in ISO 8601 format) when the entity was created.", "type": "string" }, + "deprecated": { + "description": "The deprecation status of an entity.", + "type": "boolean" + }, + "deprecation_date": { + "description": "The date when the entity was deprecated.", + "type": "string" + }, "description": { "description": "Description of an entity.", "type": "string" @@ -987,6 +1051,26 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "release_date": { + "description": "The date when the entity was released for public consumption.", + "type": "string" + }, + "release_status": { + "$ref": "#/$defs/ReleaseStatusEnum", + "description": "The release status of an entity." + }, + "replaced_by": { + "description": "The entity which replaces a deprecated entity.", + "type": "string" + }, + "submission_date": { + "description": "The date when submission was completed.", + "type": "string" + }, + "submission_status": { + "$ref": "#/$defs/SubmissionStatusEnum", + "description": "The status of submission." + }, "title": { "description": "The title that describes an entity.", "type": "string" @@ -1239,6 +1323,14 @@ "description": "Timestamp (in ISO 8601 format) when the entity was created.", "type": "string" }, + "deprecated": { + "description": "The deprecation status of an entity.", + "type": "boolean" + }, + "deprecation_date": { + "description": "The date when the entity was deprecated.", + "type": "string" + }, "description": { "description": "A detailed description of the Experiment.", "type": "string" @@ -1292,6 +1384,26 @@ "description": "Name for the experiment (eg: GHGAE_PBMC_RNAseq).", "type": "string" }, + "release_date": { + "description": "The date when the entity was released for public consumption.", + "type": "string" + }, + "release_status": { + "$ref": "#/$defs/ReleaseStatusEnum", + "description": "The release status of an entity." + }, + "replaced_by": { + "description": "The entity which replaces a deprecated entity.", + "type": "string" + }, + "submission_date": { + "description": "The date when submission was completed.", + "type": "string" + }, + "submission_status": { + "$ref": "#/$defs/SubmissionStatusEnum", + "description": "The status of submission." + }, "technical_replicates": { "description": "Number of replicate samples (technical replicates).", "type": "string" @@ -1338,6 +1450,14 @@ "description": "Timestamp (in ISO 8601 format) when the entity was created.", "type": "string" }, + "deprecated": { + "description": "The deprecation status of an entity.", + "type": "boolean" + }, + "deprecation_date": { + "description": "The date when the entity was deprecated.", + "type": "string" + }, "description": { "description": "Description of an entity.", "type": "string" @@ -1388,6 +1508,26 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "release_date": { + "description": "The date when the entity was released for public consumption.", + "type": "string" + }, + "release_status": { + "$ref": "#/$defs/ReleaseStatusEnum", + "description": "The release status of an entity." + }, + "replaced_by": { + "description": "The entity which replaces a deprecated entity.", + "type": "string" + }, + "submission_date": { + "description": "The date when submission was completed.", + "type": "string" + }, + "submission_status": { + "$ref": "#/$defs/SubmissionStatusEnum", + "description": "The status of submission." + }, "title": { "description": "The title that describes an entity.", "type": "string" @@ -1788,6 +1928,14 @@ "description": "Timestamp (in ISO 8601 format) when the entity was created.", "type": "string" }, + "deprecated": { + "description": "The deprecation status of an entity.", + "type": "boolean" + }, + "deprecation_date": { + "description": "The date when the entity was deprecated.", + "type": "string" + }, "description": { "description": "Description of an entity.", "type": "string" @@ -1807,6 +1955,26 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "release_date": { + "description": "The date when the entity was released for public consumption.", + "type": "string" + }, + "release_status": { + "$ref": "#/$defs/ReleaseStatusEnum", + "description": "The release status of an entity." + }, + "replaced_by": { + "description": "The entity which replaces a deprecated entity.", + "type": "string" + }, + "submission_date": { + "description": "The date when submission was completed.", + "type": "string" + }, + "submission_status": { + "$ref": "#/$defs/SubmissionStatusEnum", + "description": "The status of submission." + }, "title": { "description": "The title that describes an entity.", "type": "string" @@ -2488,6 +2656,15 @@ "title": "Publication", "type": "object" }, + "ReleaseStatusEnum": { + "description": "Enum to capture the release status.", + "enum": [ + "unreleased", + "released" + ], + "title": "ReleaseStatusEnum", + "type": "string" + }, "ResearchActivity": { "additionalProperties": false, "description": "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.", @@ -2765,6 +2942,14 @@ "description": "Timestamp (in ISO 8601 format) when the entity was created.", "type": "string" }, + "deprecated": { + "description": "The deprecation status of an entity.", + "type": "boolean" + }, + "deprecation_date": { + "description": "The date when the entity was deprecated.", + "type": "string" + }, "description": { "description": "A detailed description (abstract) that describes the goals of this Study.", "type": "string" @@ -2801,6 +2986,26 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "release_date": { + "description": "The date when the entity was released for public consumption.", + "type": "string" + }, + "release_status": { + "$ref": "#/$defs/ReleaseStatusEnum", + "description": "The release status of an entity." + }, + "replaced_by": { + "description": "The entity which replaces a deprecated entity.", + "type": "string" + }, + "submission_date": { + "description": "The date when submission was completed.", + "type": "string" + }, + "submission_status": { + "$ref": "#/$defs/SubmissionStatusEnum", + "description": "The status of submission." + }, "title": { "description": "Comprehensive title for the study.", "type": "string" @@ -2852,6 +3057,15 @@ "title": "StudyTypeEnum", "type": "string" }, + "SubmissionStatusEnum": { + "description": "Enum to capture submission status.", + "enum": [ + "in progress", + "submitted" + ], + "title": "SubmissionStatusEnum", + "type": "string" + }, "Technology": { "additionalProperties": false, "description": "A Technology is an abstraction that represents the instrument used for an assay. The Technology entity captures instrument-specific attributes that are relevant for an Experiment entity. The Technology entity may be further characterized by its children where each child has fields that are relevant to that particular technology.", diff --git a/artifacts/owl/ghga.owl.ttl b/artifacts/owl/ghga.owl.ttl index c4708c2d..149d3a94 100644 --- a/artifacts/owl/ghga.owl.ttl +++ b/artifacts/owl/ghga.owl.ttl @@ -17,16 +17,19 @@ rdfs:label "GHGA-Metadata-Schema" ; IAO:0000700 GHGA:Attribute, GHGA:DataUseCondition, + GHGA:DeprecationMixin, GHGA:NamedThing, + GHGA:ReleaseStatusMixin, + GHGA:SubmissionStatusMixin, GHGA:WorkflowParameter ; dcterms:license "https://creativecommons.org/publicdomain/zero/1.0/" ; pav:version "1.0.0a" ; skos:definition "The metadata schema for the German Human Genome-Phenome Archive (GHGA)." ; - linkml:generation_date "2021-11-16T13:50:14" ; + linkml:generation_date "2021-11-18T09:29:33" ; linkml:metamodel_version "1.7.0" ; linkml:source_file "ghga.yaml" ; - linkml:source_file_date "2021-11-16T13:49:34" ; - linkml:source_file_size 48524 . + linkml:source_file_date "2021-11-18T09:28:38" ; + linkml:source_file_size 50581 . GHGA:AggregateDataset a owl:Class, linkml:ClassDefinition ; @@ -41,27 +44,27 @@ GHGA:AnalysisDataset a owl:Class, linkml:ClassDefinition ; rdfs:label "analysis dataset" ; rdfs:subClassOf [ a owl:Class ; + owl:intersectionOf ( [ a owl:Restriction ; + owl:allValuesFrom GHGA:Analysis ; + owl:onProperty GHGA:has_experiment ] [ a owl:Restriction ; + owl:onProperty GHGA:has_experiment ; + owl:someValuesFrom GHGA:Analysis ] ) ], + [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; owl:allValuesFrom GHGA:DataAccessPolicy ; owl:onProperty GHGA:has_data_access_policy ] [ a owl:Restriction ; owl:onProperty GHGA:has_data_access_policy ; owl:someValuesFrom GHGA:DataAccessPolicy ] ) ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:has_analysis ], [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; owl:allValuesFrom GHGA:Study ; owl:onProperty GHGA:has_study ] [ a owl:Restriction ; owl:onProperty GHGA:has_study ; owl:someValuesFrom GHGA:Study ] ) ], - [ a owl:Class ; - owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom GHGA:Analysis ; - owl:onProperty GHGA:has_experiment ] [ a owl:Restriction ; - owl:onProperty GHGA:has_experiment ; - owl:someValuesFrom GHGA:Analysis ] ) ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:has_analysis ], GHGA:Dataset ; skos:definition "An Analysis Dataset is a collection of Files generated from one or more Analysis performed on data from one or more Studies." . @@ -93,6 +96,12 @@ GHGA:ExperimentDataset a owl:Class, linkml:ClassDefinition ; rdfs:label "experiment dataset" ; rdfs:subClassOf [ a owl:Class ; + owl:intersectionOf ( [ a owl:Restriction ; + owl:allValuesFrom GHGA:Experiment ; + owl:onProperty GHGA:has_experiment ] [ a owl:Restriction ; + owl:onProperty GHGA:has_experiment ; + owl:someValuesFrom GHGA:Experiment ] ) ], + [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; owl:allValuesFrom GHGA:Study ; owl:onProperty GHGA:has_study ] [ a owl:Restriction ; @@ -104,12 +113,6 @@ GHGA:ExperimentDataset a owl:Class, owl:onProperty GHGA:has_data_access_policy ] [ a owl:Restriction ; owl:onProperty GHGA:has_data_access_policy ; owl:someValuesFrom GHGA:DataAccessPolicy ] ) ], - [ a owl:Class ; - owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom GHGA:Experiment ; - owl:onProperty GHGA:has_experiment ] [ a owl:Restriction ; - owl:onProperty GHGA:has_experiment ; - owl:someValuesFrom GHGA:Experiment ] ) ], GHGA:Dataset ; skos:definition "An Experiment Dataset is a collection of Files linked to one or more Experiments from one or more Studies." . @@ -130,40 +133,36 @@ GHGA:LibraryPreparationProtocol a owl:Class, linkml:ClassDefinition ; rdfs:label "library preparation protocol" ; rdfs:subClassOf [ 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:library_name ], - [ 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:rnaseq_strandedness ], + owl:onProperty GHGA:library_preparation ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_type ], + owl:onProperty GHGA:name ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_selection ], + owl:onProperty GHGA:library_layout ], + [ 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_construction ], + owl:onProperty GHGA:primer ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_layout ], + owl:onProperty GHGA:rnaseq_strandedness ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_preparation ], + owl:onProperty GHGA:description ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -171,27 +170,31 @@ GHGA:LibraryPreparationProtocol a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:target_regions ], + owl:onProperty GHGA:library_construction_kit_manufacturer ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_construction_kit_retail_name ], + owl:onProperty GHGA:library_type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_construction_kit_manufacturer ], + owl:onProperty GHGA:target_regions ], [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:library_selection ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:primer ], + owl:onProperty GHGA:library_construction ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:end_bias ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:library_construction_kit_retail_name ], GHGA:Protocol ; skos:definition "Information about the library preparation of an Experiment." . @@ -199,9 +202,11 @@ GHGA:Project a owl:Class, linkml:ClassDefinition ; rdfs:label "project" ; rdfs:subClassOf [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:title ; - owl:qualifiedCardinality 1 ], + owl:allValuesFrom GHGA:Publication ; + owl:onProperty GHGA:has_publication ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Experiment ; + owl:onProperty GHGA:has_study ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Attribute ; owl:onProperty GHGA:has_attribute ], @@ -210,11 +215,9 @@ GHGA:Project a owl:Class, owl:onProperty GHGA:description ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:Experiment ; - owl:onProperty GHGA:has_study ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Publication ; - owl:onProperty GHGA:has_publication ], + owl:onClass linkml:String ; + owl:onProperty GHGA:title ; + owl:qualifiedCardinality 1 ], GHGA:ResearchActivity ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C47885> ; skos:definition "Any specifically defined piece of work that is undertaken or attempted to meet a single requirement." . @@ -225,11 +228,11 @@ GHGA:SequencingProtocol a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:read_pair_number ], + owl:onProperty GHGA:name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:target_coverage ], + owl:onProperty GHGA:umi_barcode_offset ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -241,62 +244,62 @@ GHGA:SequencingProtocol a owl:Class, [ 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:reference_annotation ], + owl:onProperty GHGA:target_coverage ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ], + owl:onProperty GHGA:instrument_model ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:flow_cell_id ], + owl:onProperty GHGA:cell_barcode_read ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:cell_barcode_read ], + owl:onProperty GHGA:reference_annotation ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:flow_cell_type ], + owl:onProperty GHGA:description ], + [ 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:lane_number ], + owl:onProperty GHGA:read_length ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:sample_barcode_read ], + owl:onProperty GHGA:cell_barcode_offset ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:instrument_model ], + owl:onProperty GHGA:sample_barcode_read ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:cell_barcode_offset ], + owl:onProperty GHGA:lane_number ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:cell_barcode_size ], + owl:onProperty GHGA:umi_barcode_size ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:read_length ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], + owl:onProperty GHGA:cell_barcode_size ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:umi_barcode_offset ], + owl:onProperty GHGA:read_pair_number ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:flow_cell_id ], GHGA:Protocol ; skos:definition "Information about the sequencing of a sample." . @@ -304,13 +307,13 @@ GHGA:User a owl:Class, linkml:ClassDefinition ; rdfs:label "user" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass <http://UNKNOWN.org/user_role_enum> ; - owl:onProperty GHGA:role ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:email ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass <http://UNKNOWN.org/user_role_enum> ; + owl:onProperty GHGA:role ], GHGA:Person ; skos:definition "A user in GHGA." . @@ -348,23 +351,23 @@ GHGA:AnalysisProcess a owl:Class, rdfs:label "analysis process" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:File ; - owl:onProperty GHGA:has_output ], + owl:onClass GHGA:Agent ; + owl:onProperty GHGA:has_agent ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:title ], + owl:onClass GHGA:File ; + owl:onProperty GHGA:has_output ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Agent ; - owl:onProperty GHGA:has_agent ], + owl:onClass GHGA:WorkflowStep ; + owl:onProperty GHGA:has_workflow_step ], [ a owl:Restriction ; owl:allValuesFrom GHGA:File ; owl:onProperty GHGA:has_input ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:WorkflowStep ; - owl:onProperty GHGA:has_workflow_step ], + owl:onClass linkml:String ; + owl:onProperty GHGA:title ], 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." . @@ -389,6 +392,10 @@ GHGA:Biospecimen a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:description ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:PhenotypicFeature ; + owl:onProperty GHGA:has_phenotypic_feature ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:AnatomicalEntity ; @@ -397,18 +404,14 @@ GHGA:Biospecimen a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:name ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Individual ; - owl:onProperty GHGA:has_individual ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Disease ; owl:onProperty GHGA:has_disease ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:PhenotypicFeature ; - owl:onProperty GHGA:has_phenotypic_feature ], + owl:onClass GHGA:Individual ; + owl:onProperty GHGA:has_individual ], 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." ; skos:exactMatch <http://purl.obolibrary.org/obo/OBI_0100051> . @@ -430,14 +433,14 @@ GHGA:DataAccessCommittee a owl:Class, owl:onClass linkml:String ; owl:onProperty GHGA:name ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:description ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Member ; owl:onProperty GHGA:main_contact ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:description ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Member ; owl:onProperty GHGA:has_member ], @@ -450,11 +453,11 @@ GHGA:DataTransformation 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 ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:id ; @@ -478,10 +481,6 @@ GHGA:ExperimentProcess a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:name ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Agent ; - owl:onProperty GHGA:has_agent ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Protocol ; @@ -490,6 +489,10 @@ GHGA:ExperimentProcess a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:File ; owl:onProperty GHGA:has_output ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Agent ; + owl:onProperty GHGA:has_agent ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Sample ; @@ -514,14 +517,14 @@ GHGA:ResearchActivity a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:description ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:title ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Publication ; owl:onProperty GHGA:has_publication ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:title ], GHGA:PlannedProcess ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C15429> ; 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." ; @@ -945,11 +948,11 @@ GHGA:DiseaseOrPhenotypicFeature a owl:Class, rdfs:subClassOf [ 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 ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:name ], GHGA:BiologicalQuality ; 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 . @@ -958,22 +961,53 @@ GHGA:Investigation a owl:Class, linkml:ClassDefinition ; rdfs:label "investigation" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass <http://UNKNOWN.org/release_status_enum> ; + owl:onProperty GHGA:release_status ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:submission_date ], + [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:description ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:type ], + owl:onProperty GHGA:deprecation_date ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:Boolean ; + owl:onProperty GHGA:deprecated ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass <http://UNKNOWN.org/submission_status_enum> ; + owl:onProperty GHGA:submission_status ], + [ 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:title ], + owl:onProperty GHGA:type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Publication ; owl:onProperty GHGA:has_publication ], - GHGA:PlannedProcess ; + [ 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:release_date ], + GHGA:DeprecationMixin, + GHGA:PlannedProcess, + GHGA:ReleaseStatusMixin, + GHGA:SubmissionStatusMixin ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C15429> ; 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 <http://purl.obolibrary.org/obo/OBI_0000066>, @@ -983,6 +1017,10 @@ GHGA:Member a owl:Class, linkml:ClassDefinition ; rdfs:label "member" ; rdfs:subClassOf [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:telephone ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:email ; owl:qualifiedCardinality 1 ], @@ -990,10 +1028,6 @@ GHGA:Member a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:organization ], - [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:telephone ; - owl:qualifiedCardinality 1 ], GHGA:Person ; skos:definition "Member of an Organization or a Committee." . @@ -1011,24 +1045,28 @@ 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:isolation ], + owl:onProperty GHGA:name ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:storage ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty GHGA:xref ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:description ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty GHGA:xref ], + [ a owl:Restriction ; + owl:onClass GHGA:Individual ; + owl:onProperty GHGA:has_individual ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:vital_status_at_sampling ], + owl:onProperty GHGA:type ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:tissue ; @@ -1038,17 +1076,13 @@ GHGA:Sample a owl:Class, owl:onClass GHGA:Biospecimen ; owl:onProperty GHGA:has_biospecimen ], [ a owl:Restriction ; - owl:onClass GHGA:Individual ; - owl:onProperty GHGA:has_individual ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:isolation ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:type ], + owl:onProperty GHGA:vital_status_at_sampling ], 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, @@ -1060,11 +1094,11 @@ GHGA:WorkflowParameter a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:value ], + owl:onProperty GHGA:key ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:key ] ; + owl:onProperty GHGA:value ] ; skos:definition "A key/value pair that represents a parameter used in a Workflow Step." . GHGA:affiliation a owl:ObjectProperty, @@ -1092,34 +1126,48 @@ GHGA:Analysis a owl:Class, linkml:ClassDefinition ; rdfs:label "analysis" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Workflow ; + owl:onProperty GHGA:has_workflow ], + [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Study ; owl:onProperty GHGA:has_study ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:AnalysisProcess ; - owl:onProperty GHGA:has_analysis_process ], + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_input ], [ a owl:Restriction ; owl:allValuesFrom GHGA:File ; owl:onProperty GHGA:has_output ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Workflow ; - owl:onProperty GHGA:has_workflow ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_input ], + owl:allValuesFrom GHGA:AnalysisProcess ; + owl:onProperty GHGA:has_analysis_process ], GHGA:DataTransformation ; skos:altLabel "data analysis" ; skos:definition "An Analysis is a data transformation that transforms input data to output data. The workflow used to achieve this transformation and the individual steps are also captured." . -GHGA:Person a owl:Class, +GHGA:DeprecationMixin a owl:Class, linkml:ClassDefinition ; - rdfs:label "person" ; + rdfs:label "deprecation mixin" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:Boolean ; + owl:onProperty GHGA:deprecated ], + [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:additional_name ], + owl:onProperty GHGA:deprecation_date ], [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:NamedThing ; + owl:onProperty GHGA:replaced_by ], + linkml:mixin ; + skos:definition "A mixin that keeps track of the deprecation status." . + +GHGA:Person a owl:Class, + linkml:ClassDefinition ; + rdfs:label "person" ; + rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:family_name ], @@ -1127,6 +1175,10 @@ GHGA:Person a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:given_name ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:additional_name ], GHGA:NamedThing ; skos:definition "A member of the species Homo sapiens." ; skos:exactMatch <http://purl.obolibrary.org/obo/NCIT_C25190>, @@ -1137,20 +1189,20 @@ GHGA:Protocol a owl:Class, linkml:ClassDefinition ; 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:name ], + [ 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:description ], + owl:onProperty GHGA:url ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:url ], + owl:onProperty GHGA:description ], GHGA:InformationContentEntity ; skos:altLabel "experiment protocol", "library protocol" ; @@ -1158,6 +1210,46 @@ GHGA:Protocol a owl:Class, 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 <http://purl.obolibrary.org/obo/OBI_0000272> . +GHGA:ReleaseStatusMixin a owl:Class, + linkml:ClassDefinition ; + rdfs:label "release status mixin" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass <http://UNKNOWN.org/release_status_enum> ; + owl:onProperty GHGA:release_status ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:release_date ], + linkml:mixin ; + skos:definition "A mixin that keeps track of the release status." . + +GHGA:SubmissionStatusMixin a owl:Class, + linkml:ClassDefinition ; + rdfs:label "submission status mixin" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass <http://UNKNOWN.org/submission_status_enum> ; + owl:onProperty GHGA:submission_status ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:submission_date ], + linkml:mixin ; + skos:definition "A mixin that keeps track of the submission status." . + +GHGA:deprecated a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "deprecated" ; + rdfs:range linkml:Boolean ; + skos:definition "The deprecation status of an entity." . + +GHGA:deprecation_date a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "deprecation date" ; + rdfs:range linkml:String ; + skos:definition "The date when the entity was deprecated." . + GHGA:has_file a owl:ObjectProperty, linkml:SlotDefinition . @@ -1173,6 +1265,36 @@ GHGA:has_output a owl:ObjectProperty, GHGA:id a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:release_date a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "release date" ; + rdfs:range linkml:String ; + skos:definition "The date when the entity was released for public consumption." . + +GHGA:release_status a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "release status" ; + rdfs:range <http://UNKNOWN.org/release_status_enum> ; + skos:definition "The release status of an entity." . + +GHGA:replaced_by a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "replaced by" ; + rdfs:range GHGA:NamedThing ; + skos:definition "The entity which replaces a deprecated entity." . + +GHGA:submission_date a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "submission date" ; + rdfs:range linkml:String ; + skos:definition "The date when submission was completed." . + +GHGA:submission_status a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "submission status" ; + rdfs:range <http://UNKNOWN.org/submission_status_enum> ; + skos:definition "The status of submission." . + GHGA:xref a owl:ObjectProperty, linkml:SlotDefinition . @@ -1180,10 +1302,6 @@ GHGA:DataAccessPolicy a owl:Class, linkml:ClassDefinition ; rdfs:label "data access policy" ; rdfs:subClassOf [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:policy_text ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:policy_url ], @@ -1193,7 +1311,7 @@ GHGA:DataAccessPolicy a owl:Class, owl:onProperty GHGA:name ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ; + owl:onProperty GHGA:policy_text ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:allValuesFrom GHGA:DataUseCondition ; @@ -1202,34 +1320,69 @@ GHGA:DataAccessPolicy a owl:Class, owl:onClass GHGA:DataAccessCommittee ; owl:onProperty GHGA:has_data_access_committee ; owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:description ; + owl:qualifiedCardinality 1 ], GHGA:InformationContentEntity ; skos:definition "A Data Access Policy specifies under which circumstances, legal or otherwise, a user can have access to one or more Datasets belonging to one or more Studies." . GHGA:Dataset a owl:Class, linkml:ClassDefinition ; rdfs:label "dataset" ; - rdfs:subClassOf [ a owl:Class ; - owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_file ] [ a owl:Restriction ; - owl:onProperty GHGA:has_file ; - owl:someValuesFrom GHGA:File ] ) ], + rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:Boolean ; + owl:onProperty GHGA:deprecated ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:Publication ; - owl:onProperty GHGA:has_publication ], + 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:onClass linkml:String ; - owl:onProperty GHGA:type ; + owl:onProperty GHGA:description ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:title ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ; + owl:onProperty GHGA:submission_date ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass <http://UNKNOWN.org/submission_status_enum> ; + owl:onProperty GHGA:submission_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 ; + owl:intersectionOf ( [ a owl:Restriction ; + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_file ] [ a owl:Restriction ; + owl:onProperty GHGA:has_file ; + owl:someValuesFrom GHGA:File ] ) ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:type ; owl:qualifiedCardinality 1 ], - GHGA:InformationContentEntity ; + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass <http://UNKNOWN.org/release_status_enum> ; + owl:onProperty GHGA:release_status ], + GHGA:DeprecationMixin, + GHGA:InformationContentEntity, + GHGA:ReleaseStatusMixin, + GHGA:SubmissionStatusMixin ; skos:definition "A Dataset is a collection of Files that is prepared for distribution." ; skos:exactMatch SIO:000089 . @@ -1237,43 +1390,43 @@ GHGA:Experiment a owl:Class, linkml:ClassDefinition ; rdfs:label "experiment" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Technology ; - owl:onProperty GHGA:has_technology ], + owl:onClass linkml:String ; + owl:onProperty GHGA:description ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:technical_replicates ], + owl:onProperty GHGA:experimental_replicates ], [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:onClass GHGA:Sample ; - owl:onProperty GHGA:has_sample ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:biological_replicates ], [ a owl:Restriction ; owl:allValuesFrom GHGA:ExperimentProcess ; owl:onProperty GHGA:has_experiment_process ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Technology ; + owl:onProperty GHGA:has_technology ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ; + owl:onProperty GHGA:name ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:experimental_replicates ], + owl:onProperty GHGA:technical_replicates ], [ a owl:Restriction ; owl:allValuesFrom GHGA:File ; owl:onProperty GHGA:has_file ], + [ a owl:Restriction ; + owl:onClass GHGA:Sample ; + owl:onProperty GHGA:has_sample ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:onClass GHGA:Study ; owl:onProperty GHGA:has_study ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:biological_replicates ], GHGA:Investigation ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C42790> ; 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." ; @@ -1308,11 +1461,11 @@ GHGA:Publication a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:title ], + owl:onProperty GHGA:abstract ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:abstract ], + owl:onProperty GHGA:title ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty GHGA:xref ], @@ -1331,19 +1484,11 @@ GHGA:Individual a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:gender ], - [ a owl:Restriction ; - owl:onClass linkml:Integer ; - owl:onProperty GHGA:age ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:has_parent ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:has_children ], - [ a owl:Restriction ; - owl:onClass <http://UNKNOWN.org/vital_status_enum> ; - owl:onProperty GHGA:vital_status ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:gender ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -1351,19 +1496,27 @@ GHGA:Individual a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:ancestry ], + owl:onProperty GHGA:ethnicity ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:ethnicity ], + owl:onProperty GHGA:ancestry ], + [ a owl:Restriction ; + owl:onClass <http://UNKNOWN.org/vital_status_enum> ; + owl:onProperty GHGA:vital_status ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:has_parent ], + owl:onProperty GHGA:geographical_region ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:geographical_region ], + owl:onProperty GHGA:has_children ], + [ a owl:Restriction ; + owl:onClass linkml:Integer ; + owl:onProperty GHGA:age ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:onClass <http://UNKNOWN.org/biological_sex_enum> ; owl:onProperty GHGA:sex ; @@ -1377,21 +1530,27 @@ GHGA:Study a owl:Class, linkml:ClassDefinition ; rdfs:label "study" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom GHGA:Experiment ; - owl:onProperty GHGA:has_experiment ], + owl:allValuesFrom GHGA:Publication ; + owl:onProperty GHGA:has_publication ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Attribute ; owl:onProperty GHGA:has_attribute ], [ a owl:Restriction ; - owl:onClass <http://UNKNOWN.org/study_type_enum> ; - owl:onProperty GHGA:type ; - owl:qualifiedCardinality 1 ], + owl:allValuesFrom GHGA:Experiment ; + owl:onProperty GHGA:has_experiment ], [ 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:onClass <http://UNKNOWN.org/study_type_enum> ; + owl:onProperty GHGA:type ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Analysis ; + owl:onProperty GHGA:has_analysis ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:description ; @@ -1400,12 +1559,6 @@ GHGA:Study a owl:Class, owl:onClass linkml:String ; owl:onProperty GHGA:title ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Analysis ; - owl:onProperty GHGA:has_analysis ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Publication ; - owl:onProperty GHGA:has_publication ], GHGA:Investigation ; 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." . @@ -1419,21 +1572,21 @@ GHGA:Attribute a owl:Class, linkml:ClassDefinition ; rdfs:label "attribute" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:value ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:key_type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:key_type ], + owl:onProperty GHGA:value_type ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:key ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:value_type ] ; + owl:onProperty GHGA:value ; + owl:qualifiedCardinality 1 ] ; skos:definition "A key/value pair that further characterizes an entity." ; skos:exactMatch SIO:000614 . @@ -1446,31 +1599,31 @@ GHGA:File a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:category ], + owl:onProperty GHGA:file_index ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:size ], + owl:onProperty GHGA:checksum ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ], + owl:onProperty GHGA:format ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:checksum ], + owl:onClass <http://UNKNOWN.org/file_type_enum> ; + owl:onProperty GHGA:type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:file_index ], + owl:onProperty GHGA:name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass <http://UNKNOWN.org/file_type_enum> ; - owl:onProperty GHGA:type ], + owl:onClass linkml:String ; + owl:onProperty GHGA:size ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:format ], + owl:onProperty GHGA:category ], GHGA:InformationContentEntity ; skos:altLabel "file object" . @@ -1481,6 +1634,9 @@ GHGA:InformationContentEntity a owl:Class, skos:definition "A generically dependent continuant that is about some thing." ; skos:exactMatch IAO:0000030 . +GHGA:title a owl:ObjectProperty, + linkml:SlotDefinition . + GHGA:NamedThing a owl:Class, linkml:ClassDefinition ; rdfs:label "named thing" ; @@ -1489,12 +1645,12 @@ GHGA:NamedThing a owl:Class, owl:onClass linkml:String ; owl:onProperty GHGA:type ], [ 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:accession ], + 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 ; @@ -1502,22 +1658,19 @@ GHGA:NamedThing a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:update_date ], + owl:onProperty GHGA:accession ], [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:id ; - owl:qualifiedCardinality 1 ], + owl:allValuesFrom GHGA:Attribute ; + owl:onProperty GHGA:has_attribute ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty GHGA:xref ] ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:update_date ] ; skos:altLabel "entity", "named entity", "object" ; skos:definition "A databased entity, concept or class. This is a generic class that is the root of all the other classes." . -GHGA:title a owl:ObjectProperty, - linkml:SlotDefinition . - GHGA:name a owl:ObjectProperty, linkml:SlotDefinition . diff --git a/artifacts/python/ghga.py b/artifacts/python/ghga.py index ebe9f156..d16bcf75 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: 2021-11-16T13:50:19 +# Generation date: 2021-11-18T09:29:38 # Schema: GHGA-Metadata-Schema # # id: https://w3id.org/GHGA-Metadata-Schema @@ -22,7 +22,8 @@ from linkml_runtime.utils.enumerations import EnumDefinitionImpl from rdflib import Namespace, URIRef from linkml_runtime.utils.curienamespace import CurieNamespace -from linkml_runtime.linkml_model.types import Integer, String +from linkml_runtime.linkml_model.types import Boolean, Integer, String +from linkml_runtime.utils.metamodelcore import Bool metamodel_version = "1.7.0" @@ -357,6 +358,13 @@ class Investigation(PlannedProcess): description: Optional[str] = None type: Optional[str] = None has_publication: Optional[Union[str, PublicationId]] = None + submission_status: Optional[Union[str, "SubmissionStatusEnum"]] = None + submission_date: Optional[str] = None + release_status: Optional[Union[str, "ReleaseStatusEnum"]] = None + release_date: Optional[str] = None + deprecated: Optional[Union[bool, Bool]] = None + deprecation_date: Optional[str] = None + replaced_by: Optional[Union[str, NamedThingId]] = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -376,6 +384,27 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.has_publication is not None and not isinstance(self.has_publication, PublicationId): self.has_publication = PublicationId(self.has_publication) + if self.submission_status is not None and not isinstance(self.submission_status, SubmissionStatusEnum): + self.submission_status = SubmissionStatusEnum(self.submission_status) + + if self.submission_date is not None and not isinstance(self.submission_date, str): + self.submission_date = str(self.submission_date) + + if self.release_status is not None and not isinstance(self.release_status, ReleaseStatusEnum): + self.release_status = ReleaseStatusEnum(self.release_status) + + if self.release_date is not None and not isinstance(self.release_date, str): + self.release_date = str(self.release_date) + + if self.deprecated is not None and not isinstance(self.deprecated, Bool): + self.deprecated = Bool(self.deprecated) + + if self.deprecation_date is not None and not isinstance(self.deprecation_date, str): + self.deprecation_date = str(self.deprecation_date) + + if self.replaced_by is not None and not isinstance(self.replaced_by, NamedThingId): + self.replaced_by = NamedThingId(self.replaced_by) + super().__post_init__(**kwargs) @@ -1891,6 +1920,13 @@ class Dataset(InformationContentEntity): has_file: Union[Union[str, FileId], List[Union[str, FileId]]] = None type: str = None has_publication: Optional[Union[Union[str, PublicationId], List[Union[str, PublicationId]]]] = empty_list() + submission_status: Optional[Union[str, "SubmissionStatusEnum"]] = None + submission_date: Optional[str] = None + release_status: Optional[Union[str, "ReleaseStatusEnum"]] = None + release_date: Optional[str] = None + deprecated: Optional[Union[bool, Bool]] = None + deprecation_date: Optional[str] = None + replaced_by: Optional[Union[str, NamedThingId]] = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -1923,6 +1959,27 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.has_publication = [self.has_publication] if self.has_publication is not None else [] self.has_publication = [v if isinstance(v, PublicationId) else PublicationId(v) for v in self.has_publication] + if self.submission_status is not None and not isinstance(self.submission_status, SubmissionStatusEnum): + self.submission_status = SubmissionStatusEnum(self.submission_status) + + if self.submission_date is not None and not isinstance(self.submission_date, str): + self.submission_date = str(self.submission_date) + + if self.release_status is not None and not isinstance(self.release_status, ReleaseStatusEnum): + self.release_status = ReleaseStatusEnum(self.release_status) + + if self.release_date is not None and not isinstance(self.release_date, str): + self.release_date = str(self.release_date) + + if self.deprecated is not None and not isinstance(self.deprecated, Bool): + self.deprecated = Bool(self.deprecated) + + if self.deprecation_date is not None and not isinstance(self.deprecation_date, str): + self.deprecation_date = str(self.deprecation_date) + + if self.replaced_by is not None and not isinstance(self.replaced_by, NamedThingId): + self.replaced_by = NamedThingId(self.replaced_by) + super().__post_init__(**kwargs) @@ -2182,6 +2239,85 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) +@dataclass +class SubmissionStatusMixin(YAMLRoot): + """ + A mixin that keeps track of the submission status. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = GHGA.SubmissionStatusMixin + class_class_curie: ClassVar[str] = "GHGA:SubmissionStatusMixin" + class_name: ClassVar[str] = "submission status mixin" + class_model_uri: ClassVar[URIRef] = GHGA.SubmissionStatusMixin + + submission_status: Optional[Union[str, "SubmissionStatusEnum"]] = None + submission_date: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.submission_status is not None and not isinstance(self.submission_status, SubmissionStatusEnum): + self.submission_status = SubmissionStatusEnum(self.submission_status) + + if self.submission_date is not None and not isinstance(self.submission_date, str): + self.submission_date = str(self.submission_date) + + super().__post_init__(**kwargs) + + +@dataclass +class ReleaseStatusMixin(YAMLRoot): + """ + A mixin that keeps track of the release status. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = GHGA.ReleaseStatusMixin + class_class_curie: ClassVar[str] = "GHGA:ReleaseStatusMixin" + class_name: ClassVar[str] = "release status mixin" + class_model_uri: ClassVar[URIRef] = GHGA.ReleaseStatusMixin + + release_status: Optional[Union[str, "ReleaseStatusEnum"]] = None + release_date: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.release_status is not None and not isinstance(self.release_status, ReleaseStatusEnum): + self.release_status = ReleaseStatusEnum(self.release_status) + + if self.release_date is not None and not isinstance(self.release_date, str): + self.release_date = str(self.release_date) + + super().__post_init__(**kwargs) + + +@dataclass +class DeprecationMixin(YAMLRoot): + """ + A mixin that keeps track of the deprecation status. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = GHGA.DeprecationMixin + class_class_curie: ClassVar[str] = "GHGA:DeprecationMixin" + class_name: ClassVar[str] = "deprecation mixin" + class_model_uri: ClassVar[URIRef] = GHGA.DeprecationMixin + + deprecated: Optional[Union[bool, Bool]] = None + deprecation_date: Optional[str] = None + replaced_by: Optional[Union[str, NamedThingId]] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.deprecated is not None and not isinstance(self.deprecated, Bool): + self.deprecated = Bool(self.deprecated) + + if self.deprecation_date is not None and not isinstance(self.deprecation_date, str): + self.deprecation_date = str(self.deprecation_date) + + if self.replaced_by is not None and not isinstance(self.replaced_by, NamedThingId): + self.replaced_by = NamedThingId(self.replaced_by) + + super().__post_init__(**kwargs) + + # Enumerations class CaseControlEnum(EnumDefinitionImpl): """ @@ -2311,6 +2447,38 @@ class FileTypeEnum(EnumDefinitionImpl): description="Enum to capture file types.", ) +class SubmissionStatusEnum(EnumDefinitionImpl): + """ + Enum to capture submission status. + """ + submitted = PermissibleValue(text="submitted", + description="Signifies that a submission is complete and submitted.") + + _defn = EnumDefinition( + name="SubmissionStatusEnum", + description="Enum to capture submission status.", + ) + + @classmethod + def _addvals(cls): + setattr(cls, "in progress", + PermissibleValue(text="in progress", + description="Signifies that a submission is in progress.") ) + +class ReleaseStatusEnum(EnumDefinitionImpl): + """ + Enum to capture the release status. + """ + unreleased = PermissibleValue(text="unreleased", + description="Signifies that the submission is not released for public consumption.") + released = PermissibleValue(text="released", + description="Signifies that the submission is released for public consumption.") + + _defn = EnumDefinition( + name="ReleaseStatusEnum", + description="Enum to capture the release status.", + ) + # Slots class slots: pass @@ -2507,7 +2675,7 @@ class slots: slots.checksum = Slot(uri=GHGA.checksum, name="checksum", curie=GHGA.curie('checksum'), model_uri=GHGA.checksum, domain=None, range=Optional[str]) -slots.file_index = Slot(uri=GHGA.file_index, name="file_index", curie=GHGA.curie('file_index'), +slots.file_index = Slot(uri=GHGA.file_index, name="file index", curie=GHGA.curie('file_index'), model_uri=GHGA.file_index, domain=None, range=Optional[str]) slots.category = Slot(uri=GHGA.category, name="category", curie=GHGA.curie('category'), @@ -2645,6 +2813,27 @@ class slots: 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[str]) +slots.submission_status = Slot(uri=GHGA.submission_status, name="submission status", curie=GHGA.curie('submission_status'), + model_uri=GHGA.submission_status, domain=None, range=Optional[Union[str, "SubmissionStatusEnum"]]) + +slots.submission_date = Slot(uri=GHGA.submission_date, name="submission date", curie=GHGA.curie('submission_date'), + model_uri=GHGA.submission_date, domain=None, range=Optional[str]) + +slots.release_status = Slot(uri=GHGA.release_status, name="release status", curie=GHGA.curie('release_status'), + model_uri=GHGA.release_status, domain=None, range=Optional[Union[str, "ReleaseStatusEnum"]]) + +slots.release_date = Slot(uri=GHGA.release_date, name="release date", curie=GHGA.curie('release_date'), + model_uri=GHGA.release_date, domain=None, range=Optional[str]) + +slots.deprecated = Slot(uri=GHGA.deprecated, name="deprecated", curie=GHGA.curie('deprecated'), + model_uri=GHGA.deprecated, domain=None, range=Optional[Union[bool, Bool]]) + +slots.deprecation_date = Slot(uri=GHGA.deprecation_date, name="deprecation date", curie=GHGA.curie('deprecation_date'), + model_uri=GHGA.deprecation_date, domain=None, range=Optional[str]) + +slots.replaced_by = Slot(uri=GHGA.replaced_by, name="replaced by", curie=GHGA.curie('replaced_by'), + model_uri=GHGA.replaced_by, domain=None, range=Optional[Union[str, NamedThingId]]) + slots.named_thing_id = Slot(uri=GHGA.id, name="named thing_id", curie=GHGA.curie('id'), model_uri=GHGA.named_thing_id, domain=NamedThing, range=Union[str, NamedThingId]) @@ -2882,7 +3071,7 @@ class slots: slots.file_checksum = Slot(uri=GHGA.checksum, name="file_checksum", curie=GHGA.curie('checksum'), model_uri=GHGA.file_checksum, domain=File, range=Optional[str]) -slots.file_file_index = Slot(uri=GHGA.file_index, name="file_file_index", curie=GHGA.curie('file_index'), +slots.file_file_index = Slot(uri=GHGA.file_index, name="file_file index", curie=GHGA.curie('file_index'), model_uri=GHGA.file_file_index, domain=File, range=Optional[str]) slots.file_category = Slot(uri=GHGA.category, name="file_category", curie=GHGA.curie('category'), diff --git a/artifacts/rdf/ghga.ttl b/artifacts/rdf/ghga.ttl index f768bca2..28599b16 100644 --- a/artifacts/rdf/ghga.ttl +++ b/artifacts/rdf/ghga.ttl @@ -27,6 +27,7 @@ <https://w3id.org/GHGA/DataTransformation>, <https://w3id.org/GHGA/DataUseCondition>, <https://w3id.org/GHGA/Dataset>, + <https://w3id.org/GHGA/DeprecationMixin>, <https://w3id.org/GHGA/Disease>, <https://w3id.org/GHGA/DiseaseOrPhenotypicFeature>, <https://w3id.org/GHGA/Donor>, @@ -49,10 +50,12 @@ <https://w3id.org/GHGA/Project>, <https://w3id.org/GHGA/Protocol>, <https://w3id.org/GHGA/Publication>, + <https://w3id.org/GHGA/ReleaseStatusMixin>, <https://w3id.org/GHGA/ResearchActivity>, <https://w3id.org/GHGA/Sample>, <https://w3id.org/GHGA/SequencingProtocol>, <https://w3id.org/GHGA/Study>, + <https://w3id.org/GHGA/SubmissionStatusMixin>, <https://w3id.org/GHGA/Technology>, <https://w3id.org/GHGA/User>, <https://w3id.org/GHGA/Workflow>, @@ -66,25 +69,27 @@ linkml:enums <https://w3id.org/GHGA/biological_sex_enum>, <https://w3id.org/GHGA/case_control_enum>, <https://w3id.org/GHGA/file_type_enum>, + <https://w3id.org/GHGA/release_status_enum>, <https://w3id.org/GHGA/study_type_enum>, + <https://w3id.org/GHGA/submission_status_enum>, <https://w3id.org/GHGA/user_role_enum>, <https://w3id.org/GHGA/vital_status_enum> ; - linkml:generation_date "2021-11-16T13:50:20"^^xsd:dateTime ; + linkml:generation_date "2021-11-18T09:29:40"^^xsd:dateTime ; linkml:id <https://w3id.org/GHGA-Metadata-Schema> ; linkml:imports linkml:types ; linkml:metamodel_version "1.7.0" ; - linkml:prefixes [ linkml:prefix_prefix "biolink" ; - linkml:prefix_reference <https://w3id.org/biolink/vocab/> ], - [ linkml:prefix_prefix "EFO" ; + linkml:prefixes [ linkml:prefix_prefix "EFO" ; linkml:prefix_reference <http://www.ebi.ac.uk/efo/EFO_> ], - [ linkml:prefix_prefix "SIO" ; - linkml:prefix_reference <http://semanticscience.org/resource/SIO_> ], - [ linkml:prefix_prefix "COB" ; - linkml:prefix_reference <http://purl.obolibrary.org/obo/COB_> ], [ linkml:prefix_prefix "linkml" ; linkml:prefix_reference linkml: ], + [ linkml:prefix_prefix "biolink" ; + linkml:prefix_reference <https://w3id.org/biolink/vocab/> ], + [ linkml:prefix_prefix "COB" ; + linkml:prefix_reference <http://purl.obolibrary.org/obo/COB_> ], [ linkml:prefix_prefix "GHGA" ; - linkml:prefix_reference <https://w3id.org/GHGA/> ] ; + linkml:prefix_reference <https://w3id.org/GHGA/> ], + [ linkml:prefix_prefix "SIO" ; + linkml:prefix_reference <http://semanticscience.org/resource/SIO_> ] ; linkml:slots <https://w3id.org/GHGA/abstract>, <https://w3id.org/GHGA/accession>, <https://w3id.org/GHGA/additional_name>, @@ -135,6 +140,8 @@ <https://w3id.org/GHGA/dataset_has_publication>, <https://w3id.org/GHGA/dataset_title>, <https://w3id.org/GHGA/dataset_type>, + <https://w3id.org/GHGA/deprecated>, + <https://w3id.org/GHGA/deprecation_date>, <https://w3id.org/GHGA/description>, <https://w3id.org/GHGA/email>, <https://w3id.org/GHGA/end_bias>, @@ -266,6 +273,9 @@ <https://w3id.org/GHGA/read_length>, <https://w3id.org/GHGA/read_pair_number>, <https://w3id.org/GHGA/reference_annotation>, + <https://w3id.org/GHGA/release_date>, + <https://w3id.org/GHGA/release_status>, + <https://w3id.org/GHGA/replaced_by>, <https://w3id.org/GHGA/rnaseq_strandedness>, <https://w3id.org/GHGA/role>, <https://w3id.org/GHGA/sample_barcode_read>, @@ -293,6 +303,8 @@ <https://w3id.org/GHGA/study_has_publication>, <https://w3id.org/GHGA/study_title>, <https://w3id.org/GHGA/study_type>, + <https://w3id.org/GHGA/submission_date>, + <https://w3id.org/GHGA/submission_status>, <https://w3id.org/GHGA/target_coverage>, <https://w3id.org/GHGA/target_regions>, <https://w3id.org/GHGA/technical_replicates>, @@ -316,8 +328,8 @@ <https://w3id.org/GHGA/xref>, <https://w3id.org/GHGA/year_of_birth> ; linkml:source_file "ghga.yaml" ; - linkml:source_file_date "2021-11-16T13:49:34"^^xsd:dateTime ; - linkml:source_file_size 48524 ; + linkml:source_file_date "2021-11-18T09:28:38"^^xsd:dateTime ; + linkml:source_file_size 50581 ; linkml:types <https://w3id.org/GHGA/boolean>, <https://w3id.org/GHGA/date>, <https://w3id.org/GHGA/datetime>, @@ -341,15 +353,6 @@ <https://w3id.org/GHGA/bam> skos:definition "BAM File" . -<https://w3id.org/GHGA/boolean> a linkml:TypeDefinition ; - skos:definition "A binary (true or false) value" ; - skos:inScheme linkml:types ; - linkml:base "Bool" ; - linkml:definition_uri linkml:Boolean ; - linkml:imported_from "linkml:types" ; - linkml:repr "bool" ; - linkml:uri xsd:boolean . - <https://w3id.org/GHGA/cancer_genomics> skos:definition "Cancer Genomics" . <https://w3id.org/GHGA/case> skos:definition "The Sample is to be treated as Case" . @@ -421,6 +424,8 @@ <https://w3id.org/GHGA/gene_regulation> skos:definition "Gene Regulation Study" . +<https://w3id.org/GHGA/in%20progress> skos:definition "Signifies that a submission is in progress." . + <https://w3id.org/GHGA/metagenomics> skos:definition "Metagenomics" . <https://w3id.org/GHGA/ncname> a linkml:TypeDefinition ; @@ -461,6 +466,8 @@ <https://w3id.org/GHGA/population_genomics> skos:definition "Population Genomics" . +<https://w3id.org/GHGA/released> skos:definition "Signifies that the submission is released for public consumption." . + <https://w3id.org/GHGA/resequencing> skos:definition "Resequencing" . <https://w3id.org/GHGA/rna_seq> skos:definition "RNAseq" . @@ -469,6 +476,8 @@ <https://w3id.org/GHGA/srf> skos:definition "SRF is a generic format for DNA sequence data." . +<https://w3id.org/GHGA/submitted> skos:definition "Signifies that a submission is complete and submitted." . + <https://w3id.org/GHGA/synthetic_genomics> skos:definition "Sythetic Genomics" . <https://w3id.org/GHGA/time> a linkml:TypeDefinition ; @@ -483,6 +492,8 @@ <https://w3id.org/GHGA/transcriptome_analysis> skos:definition "Transcriptome Analysis" . +<https://w3id.org/GHGA/unreleased> skos:definition "Signifies that the submission is not released for public consumption." . + <https://w3id.org/GHGA/uri> a linkml:TypeDefinition ; skos:definition "a complete URI" ; skos:inScheme linkml:types ; @@ -813,6 +824,15 @@ linkml:slot_uri <https://w3id.org/GHGA/has_phenotypic_feature> ; linkml:usage_slot_name "has phenotypic feature" . +<https://w3id.org/GHGA/boolean> a linkml:TypeDefinition ; + skos:definition "A binary (true or false) value" ; + skos:inScheme linkml:types ; + linkml:base "Bool" ; + linkml:definition_uri linkml:Boolean ; + linkml:imported_from "linkml:types" ; + linkml:repr "bool" ; + linkml:uri xsd:boolean . + <https://w3id.org/GHGA/case_control_enum> skos:definition "Enum to capture whether a Sample is to be considered as Case or Control." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/CaseControlEnum> ; @@ -1263,7 +1283,7 @@ <https://w3id.org/GHGA/file_file_index> a linkml:SlotDefinition ; skos:definition "The index for this file. Commonly for BAM/VCF files." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "file_index" ; + skos:prefLabel "file index" ; linkml:definition_uri <https://w3id.org/GHGA/file_index> ; linkml:domain <https://w3id.org/GHGA/File> ; linkml:domain_of <https://w3id.org/GHGA/File> ; @@ -1272,7 +1292,7 @@ linkml:owner <https://w3id.org/GHGA/File> ; linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/file_index> ; - linkml:usage_slot_name "file_index" . + linkml:usage_slot_name "file index" . <https://w3id.org/GHGA/file_format> a linkml:SlotDefinition ; skos:definition "The format of the file: BAM, SAM, CRAM, BAI, etc." ; @@ -1598,6 +1618,12 @@ linkml:slot_uri <https://w3id.org/GHGA/xref> ; linkml:usage_slot_name "xref" . +<https://w3id.org/GHGA/release_status_enum> skos:definition "Enum to capture the release status." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/ReleaseStatusEnum> ; + linkml:permissible_values <https://w3id.org/GHGA/released>, + <https://w3id.org/GHGA/unreleased> . + <https://w3id.org/GHGA/sample_description> a linkml:SlotDefinition ; skos:definition "Short textual description of the sample (How the sample was collected, sample source, protocol followed for processing the sample etc) " ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -1912,6 +1938,12 @@ <https://w3id.org/GHGA/transcriptome_analysis>, <https://w3id.org/GHGA/whole_genome_sequencing> . +<https://w3id.org/GHGA/submission_status_enum> skos:definition "Enum to capture submission status." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/SubmissionStatusEnum> ; + linkml:permissible_values <https://w3id.org/GHGA/in%20progress>, + <https://w3id.org/GHGA/submitted> . + <https://w3id.org/GHGA/user_role> a linkml:SlotDefinition ; skos:definition "The role of the user" ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3279,12 +3311,19 @@ <https://w3id.org/GHGA/dataset_has_publication>, <https://w3id.org/GHGA/dataset_title>, <https://w3id.org/GHGA/dataset_type>, + <https://w3id.org/GHGA/deprecated>, + <https://w3id.org/GHGA/deprecation_date>, <https://w3id.org/GHGA/named_thing_accession>, <https://w3id.org/GHGA/named_thing_creation_date>, <https://w3id.org/GHGA/named_thing_has_attribute>, <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/release_date>, + <https://w3id.org/GHGA/release_status>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/submission_date>, + <https://w3id.org/GHGA/submission_status> . <https://w3id.org/GHGA/DataTransformation> a linkml:ClassDefinition ; skos:definition "A data transformation technique used to analyze and interpret data to gain a better understanding of it." ; @@ -3374,8 +3413,13 @@ linkml:class_uri <https://w3id.org/GHGA/Investigation> ; linkml:definition_uri <https://w3id.org/GHGA/Investigation> ; linkml:is_a <https://w3id.org/GHGA/PlannedProcess> ; + linkml:mixins <https://w3id.org/GHGA/DeprecationMixin>, + <https://w3id.org/GHGA/ReleaseStatusMixin>, + <https://w3id.org/GHGA/SubmissionStatusMixin> ; linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/description>, + linkml:slots <https://w3id.org/GHGA/deprecated>, + <https://w3id.org/GHGA/deprecation_date>, + <https://w3id.org/GHGA/description>, <https://w3id.org/GHGA/has_publication>, <https://w3id.org/GHGA/named_thing_accession>, <https://w3id.org/GHGA/named_thing_creation_date>, @@ -3383,9 +3427,34 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/release_date>, + <https://w3id.org/GHGA/release_status>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/submission_date>, + <https://w3id.org/GHGA/submission_status>, <https://w3id.org/GHGA/title>, <https://w3id.org/GHGA/type> . +<https://w3id.org/GHGA/ReleaseStatusMixin> a linkml:ClassDefinition ; + skos:definition "A mixin that keeps track of the release status." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/ReleaseStatusMixin> ; + linkml:definition_uri <https://w3id.org/GHGA/ReleaseStatusMixin> ; + linkml:mixin true ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/release_date>, + <https://w3id.org/GHGA/release_status> . + +<https://w3id.org/GHGA/SubmissionStatusMixin> a linkml:ClassDefinition ; + skos:definition "A mixin that keeps track of the submission status." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/SubmissionStatusMixin> ; + linkml:definition_uri <https://w3id.org/GHGA/SubmissionStatusMixin> ; + linkml:mixin true ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/submission_date>, + <https://w3id.org/GHGA/submission_status> . + <https://w3id.org/GHGA/has_agent> a linkml:SlotDefinition ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/has_agent> ; @@ -3503,6 +3572,17 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/xref> . +<https://w3id.org/GHGA/DeprecationMixin> a linkml:ClassDefinition ; + skos:definition "A mixin that keeps track of the deprecation status." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/DeprecationMixin> ; + linkml:definition_uri <https://w3id.org/GHGA/DeprecationMixin> ; + linkml:mixin true ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/deprecated>, + <https://w3id.org/GHGA/deprecation_date>, + <https://w3id.org/GHGA/replaced_by> . + <https://w3id.org/GHGA/InformationContentEntity> a linkml:ClassDefinition ; skos:definition "A generically dependent continuant that is about some thing." ; skos:exactMatch <http://purl.obolibrary.org/obo/IAO_0000030> ; @@ -3519,6 +3599,69 @@ <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref> . +<https://w3id.org/GHGA/deprecated> a linkml:SlotDefinition ; + skos:definition "The deprecation status of an entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/deprecated> ; + linkml:domain_of <https://w3id.org/GHGA/DeprecationMixin> ; + linkml:owner <https://w3id.org/GHGA/DeprecationMixin> ; + linkml:range <https://w3id.org/GHGA/boolean> ; + linkml:slot_uri <https://w3id.org/GHGA/deprecated> . + +<https://w3id.org/GHGA/deprecation_date> a linkml:SlotDefinition ; + skos:definition "The date when the entity was deprecated." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/deprecation_date> ; + linkml:domain_of <https://w3id.org/GHGA/DeprecationMixin> ; + linkml:owner <https://w3id.org/GHGA/DeprecationMixin> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/deprecation_date> . + +<https://w3id.org/GHGA/release_date> a linkml:SlotDefinition ; + skos:definition "The date when the entity was released for public consumption." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/release_date> ; + linkml:domain_of <https://w3id.org/GHGA/ReleaseStatusMixin> ; + linkml:owner <https://w3id.org/GHGA/ReleaseStatusMixin> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/release_date> . + +<https://w3id.org/GHGA/release_status> a linkml:SlotDefinition ; + skos:definition "The release status of an entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/release_status> ; + linkml:domain_of <https://w3id.org/GHGA/ReleaseStatusMixin> ; + linkml:owner <https://w3id.org/GHGA/ReleaseStatusMixin> ; + linkml:range <https://w3id.org/GHGA/release_status_enum> ; + linkml:slot_uri <https://w3id.org/GHGA/release_status> . + +<https://w3id.org/GHGA/replaced_by> a linkml:SlotDefinition ; + skos:definition "The entity which replaces a deprecated entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/replaced_by> ; + linkml:domain_of <https://w3id.org/GHGA/DeprecationMixin> ; + linkml:owner <https://w3id.org/GHGA/DeprecationMixin> ; + linkml:range <https://w3id.org/GHGA/NamedThing> ; + linkml:slot_uri <https://w3id.org/GHGA/replaced_by> . + +<https://w3id.org/GHGA/submission_date> a linkml:SlotDefinition ; + skos:definition "The date when submission was completed." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/submission_date> ; + linkml:domain_of <https://w3id.org/GHGA/SubmissionStatusMixin> ; + linkml:owner <https://w3id.org/GHGA/SubmissionStatusMixin> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/submission_date> . + +<https://w3id.org/GHGA/submission_status> a linkml:SlotDefinition ; + skos:definition "The status of submission." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/submission_status> ; + linkml:domain_of <https://w3id.org/GHGA/SubmissionStatusMixin> ; + linkml:owner <https://w3id.org/GHGA/SubmissionStatusMixin> ; + linkml:range <https://w3id.org/GHGA/submission_status_enum> ; + linkml:slot_uri <https://w3id.org/GHGA/submission_status> . + <https://w3id.org/GHGA/Family> a linkml:ClassDefinition ; skos:definition "A domestic group, or a number of domestic groups linked through descent (demonstrated or stipulated) from a common ancestor, marriage, or adoption." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3642,6 +3785,8 @@ <https://w3id.org/GHGA/dataset_has_publication>, <https://w3id.org/GHGA/dataset_title>, <https://w3id.org/GHGA/dataset_type>, + <https://w3id.org/GHGA/deprecated>, + <https://w3id.org/GHGA/deprecation_date>, <https://w3id.org/GHGA/experiment_dataset_has_data_access_policy>, <https://w3id.org/GHGA/experiment_dataset_has_experiment>, <https://w3id.org/GHGA/experiment_dataset_has_study>, @@ -3650,7 +3795,12 @@ <https://w3id.org/GHGA/named_thing_has_attribute>, <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/release_date>, + <https://w3id.org/GHGA/release_status>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/submission_date>, + <https://w3id.org/GHGA/submission_status> . <https://w3id.org/GHGA/AnalysisDataset> a linkml:ClassDefinition ; skos:definition "An Analysis Dataset is a collection of Files generated from one or more Analysis performed on data from one or more Studies." ; @@ -3667,13 +3817,20 @@ <https://w3id.org/GHGA/dataset_has_publication>, <https://w3id.org/GHGA/dataset_title>, <https://w3id.org/GHGA/dataset_type>, + <https://w3id.org/GHGA/deprecated>, + <https://w3id.org/GHGA/deprecation_date>, <https://w3id.org/GHGA/has_analysis>, <https://w3id.org/GHGA/named_thing_accession>, <https://w3id.org/GHGA/named_thing_creation_date>, <https://w3id.org/GHGA/named_thing_has_attribute>, <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/release_date>, + <https://w3id.org/GHGA/release_status>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/submission_date>, + <https://w3id.org/GHGA/submission_status> . <https://w3id.org/GHGA/has_study> a linkml:SlotDefinition ; skos:definition "The study associated with an entity." ; @@ -3932,18 +4089,28 @@ linkml:class_uri <https://w3id.org/GHGA/Dataset> ; linkml:definition_uri <https://w3id.org/GHGA/Dataset> ; linkml:is_a <https://w3id.org/GHGA/InformationContentEntity> ; + linkml:mixins <https://w3id.org/GHGA/DeprecationMixin>, + <https://w3id.org/GHGA/ReleaseStatusMixin>, + <https://w3id.org/GHGA/SubmissionStatusMixin> ; linkml:slot_usage [ ] ; linkml:slots <https://w3id.org/GHGA/dataset_description>, <https://w3id.org/GHGA/dataset_has_file>, <https://w3id.org/GHGA/dataset_has_publication>, <https://w3id.org/GHGA/dataset_title>, <https://w3id.org/GHGA/dataset_type>, + <https://w3id.org/GHGA/deprecated>, + <https://w3id.org/GHGA/deprecation_date>, <https://w3id.org/GHGA/named_thing_accession>, <https://w3id.org/GHGA/named_thing_creation_date>, <https://w3id.org/GHGA/named_thing_has_attribute>, <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/release_date>, + <https://w3id.org/GHGA/release_status>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/submission_date>, + <https://w3id.org/GHGA/submission_status> . <https://w3id.org/GHGA/DataAccessPolicy> a linkml:ClassDefinition ; skos:definition "A Data Access Policy specifies under which circumstances, legal or otherwise, a user can have access to one or more Datasets belonging to one or more Studies." ; @@ -3995,12 +4162,17 @@ linkml:definition_uri <https://w3id.org/GHGA/Study> ; linkml:is_a <https://w3id.org/GHGA/Investigation> ; linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/has_attribute>, + linkml:slots <https://w3id.org/GHGA/deprecated>, + <https://w3id.org/GHGA/deprecation_date>, + <https://w3id.org/GHGA/has_attribute>, <https://w3id.org/GHGA/named_thing_accession>, <https://w3id.org/GHGA/named_thing_creation_date>, <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/release_date>, + <https://w3id.org/GHGA/release_status>, + <https://w3id.org/GHGA/replaced_by>, <https://w3id.org/GHGA/study_affiliation>, <https://w3id.org/GHGA/study_description>, <https://w3id.org/GHGA/study_has_analysis>, @@ -4008,7 +4180,9 @@ <https://w3id.org/GHGA/study_has_experiment>, <https://w3id.org/GHGA/study_has_publication>, <https://w3id.org/GHGA/study_title>, - <https://w3id.org/GHGA/study_type> . + <https://w3id.org/GHGA/study_type>, + <https://w3id.org/GHGA/submission_date>, + <https://w3id.org/GHGA/submission_status> . <https://w3id.org/GHGA/named_thing_type> a linkml:SlotDefinition ; skos:definition "The type of an entity." ; @@ -4126,6 +4300,8 @@ linkml:is_a <https://w3id.org/GHGA/Investigation> ; linkml:slot_usage [ ] ; linkml:slots <https://w3id.org/GHGA/biological_replicates>, + <https://w3id.org/GHGA/deprecated>, + <https://w3id.org/GHGA/deprecation_date>, <https://w3id.org/GHGA/experiment_description>, <https://w3id.org/GHGA/experiment_has_experiment_process>, <https://w3id.org/GHGA/experiment_has_file>, @@ -4141,6 +4317,11 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/release_date>, + <https://w3id.org/GHGA/release_status>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/submission_date>, + <https://w3id.org/GHGA/submission_status>, <https://w3id.org/GHGA/technical_replicates>, <https://w3id.org/GHGA/title>, <https://w3id.org/GHGA/type> . diff --git a/artifacts/shex/ghga.shex b/artifacts/shex/ghga.shex index 621e7389..ab099f71 100644 --- a/artifacts/shex/ghga.shex +++ b/artifacts/shex/ghga.shex @@ -209,17 +209,39 @@ linkml:Nodeidentifier NONLITERAL CLOSED { ( $<Dataset_tes> ( &<InformationContentEntity_tes> ; rdf:type [ <InformationContentEntity> ] ? ; + &<SubmissionStatusMixin_tes> ; + rdf:type [ <SubmissionStatusMixin> ] ? ; + &<ReleaseStatusMixin_tes> ; + rdf:type [ <ReleaseStatusMixin> ] ? ; + &<DeprecationMixin_tes> ; + rdf:type [ <DeprecationMixin> ] ? ; <title> @linkml:String ; <description> @linkml:String ; <has_file> @<File> + ; <has_publication> @<Publication> * ; - <type> @linkml:String + <type> @linkml:String ; + <submission_status> @<SubmissionStatusEnum> ? ; + <submission_date> @linkml:String ? ; + <release_status> @<ReleaseStatusEnum> ? ; + <release_date> @linkml:String ? ; + <deprecated> @linkml:Boolean ? ; + <deprecation_date> @linkml:String ? ; + <replaced_by> @<NamedThing> ? ) ; rdf:type [ <Dataset> ] ) } OR @<AggregateDataset> OR @<AnalysisDataset> OR @<ExperimentDataset> ) +<DeprecationMixin> { + ( $<DeprecationMixin_tes> ( <deprecated> @linkml:Boolean ? ; + <deprecation_date> @linkml:String ? ; + <replaced_by> @<NamedThing> ? + ) ; + rdf:type [ <DeprecationMixin> ] ? + ) +} + <Disease> CLOSED { ( $<Disease_tes> ( &<DiseaseOrPhenotypicFeature_tes> ; rdf:type [ <DiseaseOrPhenotypicFeature> ] ? @@ -350,10 +372,23 @@ linkml:Nodeidentifier NONLITERAL CLOSED { ( $<Investigation_tes> ( &<PlannedProcess_tes> ; rdf:type [ <PlannedProcess> ] ? ; + &<SubmissionStatusMixin_tes> ; + rdf:type [ <SubmissionStatusMixin> ] ? ; + &<ReleaseStatusMixin_tes> ; + rdf:type [ <ReleaseStatusMixin> ] ? ; + &<DeprecationMixin_tes> ; + rdf:type [ <DeprecationMixin> ] ? ; <title> @linkml:String ? ; <description> @linkml:String ? ; <type> @linkml:String ? ; - <has_publication> @<Publication> ? + <has_publication> @<Publication> ? ; + <submission_status> @<SubmissionStatusEnum> ? ; + <submission_date> @linkml:String ? ; + <release_status> @<ReleaseStatusEnum> ? ; + <release_date> @linkml:String ? ; + <deprecated> @linkml:Boolean ? ; + <deprecation_date> @linkml:String ? ; + <replaced_by> @<NamedThing> ? ) ; rdf:type [ <Investigation> ] ) @@ -500,6 +535,14 @@ linkml:Nodeidentifier NONLITERAL ) } +<ReleaseStatusMixin> { + ( $<ReleaseStatusMixin_tes> ( <release_status> @<ReleaseStatusEnum> ? ; + <release_date> @linkml:String ? + ) ; + rdf:type [ <ReleaseStatusMixin> ] ? + ) +} + <ResearchActivity> ( CLOSED { ( $<ResearchActivity_tes> ( &<PlannedProcess_tes> ; @@ -574,6 +617,14 @@ linkml:Nodeidentifier NONLITERAL ) } +<SubmissionStatusMixin> { + ( $<SubmissionStatusMixin_tes> ( <submission_status> @<SubmissionStatusEnum> ? ; + <submission_date> @linkml:String ? + ) ; + rdf:type [ <SubmissionStatusMixin> ] ? + ) +} + <Technology> CLOSED { ( $<Technology_tes> ( &<InformationContentEntity_tes> ; rdf:type [ <InformationContentEntity> ] ? diff --git a/artifacts/sql/ghga.sql b/artifacts/sql/ghga.sql index 20bbe1eb..6e9045be 100644 --- a/artifacts/sql/ghga.sql +++ b/artifacts/sql/ghga.sql @@ -1,4 +1,6 @@ +CREATE TYPE submission_status_enum AS ENUM ('in progress', 'submitted'); +CREATE TYPE release_status_enum AS ENUM ('unreleased', 'released'); CREATE TYPE biological_sex_enum AS ENUM ('XX', 'XY', 'none'); CREATE TYPE vital_status_enum AS ENUM ('alive', 'deceased'); CREATE TYPE file_type_enum AS ENUM ('bam', 'complete_genomics', 'cram', 'fasta', 'fastq', 'pacbio_hdf5', 'sff', 'srf', 'vcf'); @@ -17,38 +19,6 @@ CREATE TABLE agent ( PRIMARY KEY (id) ); -CREATE TABLE aggregate_dataset ( - id TEXT NOT NULL, - accession TEXT, - has_attribute TEXT, - creation_date TEXT, - update_date TEXT, - title TEXT NOT NULL, - description TEXT NOT NULL, - has_file TEXT NOT NULL, - has_publication TEXT, - type TEXT NOT NULL, - PRIMARY KEY (id) -); - -CREATE TABLE analysis_dataset ( - id TEXT NOT NULL, - accession TEXT, - has_attribute TEXT, - creation_date TEXT, - update_date TEXT, - title TEXT NOT NULL, - description TEXT NOT NULL, - has_file TEXT NOT NULL, - has_publication TEXT, - type TEXT NOT NULL, - has_data_access_policy TEXT NOT NULL, - has_study TEXT NOT NULL, - has_analysis TEXT, - has_experiment TEXT NOT NULL, - PRIMARY KEY (id) -); - CREATE TABLE anatomical_entity ( id TEXT NOT NULL, accession TEXT, @@ -169,23 +139,6 @@ CREATE TABLE donor ( PRIMARY KEY (id) ); -CREATE TABLE experiment_dataset ( - id TEXT NOT NULL, - accession TEXT, - has_attribute TEXT, - creation_date TEXT, - update_date TEXT, - title TEXT NOT NULL, - description TEXT NOT NULL, - has_file TEXT NOT NULL, - has_publication TEXT, - type TEXT NOT NULL, - has_data_access_policy TEXT NOT NULL, - has_study TEXT NOT NULL, - has_experiment TEXT NOT NULL, - PRIMARY KEY (id) -); - CREATE TABLE file ( id TEXT NOT NULL, accession TEXT, @@ -411,21 +364,6 @@ CREATE TABLE sequencing_protocol ( PRIMARY KEY (id) ); -CREATE TABLE study ( - id TEXT NOT NULL, - accession TEXT, - creation_date TEXT, - update_date TEXT, - has_publication TEXT, - has_experiment TEXT, - has_analysis TEXT, - has_attribute TEXT, - title TEXT NOT NULL, - description TEXT NOT NULL, - type study_type_enum NOT NULL, - PRIMARY KEY (id) -); - CREATE TABLE technology ( id TEXT NOT NULL, accession TEXT, @@ -471,22 +409,52 @@ CREATE TABLE workflow_step ( PRIMARY KEY (id) ); -CREATE TABLE analysis ( +CREATE TABLE aggregate_dataset ( + id TEXT NOT NULL, accession TEXT, - type TEXT, has_attribute TEXT, creation_date TEXT, update_date TEXT, + title TEXT NOT NULL, + description TEXT NOT NULL, + has_file TEXT NOT NULL, + has_publication TEXT, + type TEXT NOT NULL, + submission_status submission_status_enum, + submission_date TEXT, + release_status release_status_enum, + release_date TEXT, + deprecated BOOLEAN, + deprecation_date TEXT, + replaced_by TEXT, + PRIMARY KEY (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) +); + +CREATE TABLE analysis_dataset ( id TEXT NOT NULL, - title TEXT, - description TEXT, - has_input TEXT, - has_study TEXT, - has_workflow TEXT, - has_output TEXT, + accession TEXT, + has_attribute TEXT, + creation_date TEXT, + update_date TEXT, + title TEXT NOT NULL, + description TEXT NOT NULL, + has_file TEXT NOT NULL, + has_publication TEXT, + type TEXT NOT NULL, + submission_status submission_status_enum, + submission_date TEXT, + release_status release_status_enum, + release_date TEXT, + deprecated BOOLEAN, + deprecation_date TEXT, + replaced_by TEXT, + has_data_access_policy TEXT NOT NULL, + has_study TEXT NOT NULL, + has_analysis TEXT, + has_experiment TEXT NOT NULL, PRIMARY KEY (id), - FOREIGN KEY(has_study) REFERENCES study (id), - FOREIGN KEY(has_workflow) REFERENCES workflow (id) + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE biospecimen ( @@ -524,7 +492,7 @@ CREATE TABLE data_access_committee ( FOREIGN KEY(main_contact) REFERENCES member (id) ); -CREATE TABLE dataset ( +CREATE TABLE experiment_dataset ( id TEXT NOT NULL, accession TEXT, has_attribute TEXT, @@ -535,9 +503,18 @@ CREATE TABLE dataset ( has_file TEXT NOT NULL, has_publication TEXT, type TEXT NOT NULL, - aggregate_dataset_id TEXT, + submission_status submission_status_enum, + submission_date TEXT, + release_status release_status_enum, + release_date TEXT, + deprecated BOOLEAN, + deprecation_date TEXT, + replaced_by TEXT, + has_data_access_policy TEXT NOT NULL, + has_study TEXT NOT NULL, + has_experiment TEXT NOT NULL, PRIMARY KEY (id), - FOREIGN KEY(aggregate_dataset_id) REFERENCES aggregate_dataset (id) + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE family ( @@ -564,8 +541,16 @@ CREATE TABLE investigation ( description TEXT, type TEXT, has_publication TEXT, + submission_status submission_status_enum, + submission_date TEXT, + release_status release_status_enum, + release_date TEXT, + deprecated BOOLEAN, + deprecation_date TEXT, + replaced_by TEXT, PRIMARY KEY (id), - FOREIGN KEY(has_publication) REFERENCES publication (id) + FOREIGN KEY(has_publication) REFERENCES publication (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE research_activity ( @@ -582,6 +567,29 @@ CREATE TABLE research_activity ( FOREIGN KEY(has_publication) REFERENCES publication (id) ); +CREATE TABLE study ( + id TEXT NOT NULL, + accession TEXT, + creation_date TEXT, + update_date TEXT, + submission_status submission_status_enum, + submission_date TEXT, + release_status release_status_enum, + release_date TEXT, + deprecated BOOLEAN, + deprecation_date TEXT, + replaced_by TEXT, + has_publication TEXT, + has_experiment TEXT, + has_analysis TEXT, + has_attribute TEXT, + title TEXT NOT NULL, + description TEXT NOT NULL, + type study_type_enum NOT NULL, + PRIMARY KEY (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) +); + CREATE TABLE workflow_parameter ( key TEXT, value TEXT, @@ -597,20 +605,6 @@ CREATE TABLE agent_xref ( FOREIGN KEY(backref_id) REFERENCES agent (id) ); -CREATE TABLE aggregate_dataset_xref ( - backref_id TEXT, - xref TEXT, - PRIMARY KEY (backref_id, xref), - FOREIGN KEY(backref_id) REFERENCES aggregate_dataset (id) -); - -CREATE TABLE analysis_dataset_xref ( - backref_id TEXT, - xref TEXT, - PRIMARY KEY (backref_id, xref), - FOREIGN KEY(backref_id) REFERENCES analysis_dataset (id) -); - CREATE TABLE anatomical_entity_xref ( backref_id TEXT, xref TEXT, @@ -674,13 +668,6 @@ CREATE TABLE donor_xref ( FOREIGN KEY(backref_id) REFERENCES donor (id) ); -CREATE TABLE experiment_dataset_xref ( - backref_id TEXT, - xref TEXT, - PRIMARY KEY (backref_id, xref), - FOREIGN KEY(backref_id) REFERENCES experiment_dataset (id) -); - CREATE TABLE file_xref ( backref_id TEXT, xref TEXT, @@ -786,20 +773,6 @@ CREATE TABLE sequencing_protocol_xref ( FOREIGN KEY(backref_id) REFERENCES sequencing_protocol (id) ); -CREATE TABLE study_xref ( - backref_id TEXT, - xref TEXT, - PRIMARY KEY (backref_id, xref), - FOREIGN KEY(backref_id) REFERENCES study (id) -); - -CREATE TABLE study_affiliation ( - backref_id TEXT, - affiliation TEXT NOT NULL, - PRIMARY KEY (backref_id, affiliation), - FOREIGN KEY(backref_id) REFERENCES study (id) -); - CREATE TABLE technology_xref ( backref_id TEXT, xref TEXT, @@ -828,24 +801,22 @@ CREATE TABLE workflow_step_xref ( FOREIGN KEY(backref_id) REFERENCES workflow_step (id) ); -CREATE TABLE analysis_process ( - id TEXT NOT NULL, +CREATE TABLE analysis ( accession TEXT, type TEXT, has_attribute TEXT, creation_date TEXT, update_date TEXT, + id TEXT NOT NULL, title TEXT, + description TEXT, has_input TEXT, - has_workflow_step TEXT, - has_agent TEXT, + has_study TEXT, + has_workflow TEXT, has_output TEXT, - analysis_id TEXT, PRIMARY KEY (id), - FOREIGN KEY(has_workflow_step) REFERENCES workflow_step (id), - FOREIGN KEY(has_agent) REFERENCES agent (id), - FOREIGN KEY(has_output) REFERENCES file (id), - FOREIGN KEY(analysis_id) REFERENCES analysis (id) + FOREIGN KEY(has_study) REFERENCES study (id), + FOREIGN KEY(has_workflow) REFERENCES workflow (id) ); CREATE TABLE data_access_policy ( @@ -864,6 +835,30 @@ CREATE TABLE data_access_policy ( FOREIGN KEY(has_data_access_committee) REFERENCES data_access_committee (id) ); +CREATE TABLE dataset ( + id TEXT NOT NULL, + accession TEXT, + has_attribute TEXT, + creation_date TEXT, + update_date TEXT, + title TEXT NOT NULL, + description TEXT NOT NULL, + has_file TEXT NOT NULL, + has_publication TEXT, + type TEXT NOT NULL, + submission_status submission_status_enum, + submission_date TEXT, + release_status release_status_enum, + release_date TEXT, + deprecated BOOLEAN, + deprecation_date TEXT, + replaced_by TEXT, + aggregate_dataset_id TEXT, + PRIMARY KEY (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id), + FOREIGN KEY(aggregate_dataset_id) REFERENCES aggregate_dataset (id) +); + CREATE TABLE sample ( id TEXT NOT NULL, accession TEXT, @@ -884,11 +879,18 @@ CREATE TABLE sample ( FOREIGN KEY(has_biospecimen) REFERENCES biospecimen (id) ); -CREATE TABLE analysis_xref ( +CREATE TABLE aggregate_dataset_xref ( backref_id TEXT, xref TEXT, PRIMARY KEY (backref_id, xref), - FOREIGN KEY(backref_id) REFERENCES analysis (id) + FOREIGN KEY(backref_id) REFERENCES aggregate_dataset (id) +); + +CREATE TABLE analysis_dataset_xref ( + backref_id TEXT, + xref TEXT, + PRIMARY KEY (backref_id, xref), + FOREIGN KEY(backref_id) REFERENCES analysis_dataset (id) ); CREATE TABLE biospecimen_xref ( @@ -905,11 +907,11 @@ CREATE TABLE data_access_committee_xref ( FOREIGN KEY(backref_id) REFERENCES data_access_committee (id) ); -CREATE TABLE dataset_xref ( +CREATE TABLE experiment_dataset_xref ( backref_id TEXT, xref TEXT, PRIMARY KEY (backref_id, xref), - FOREIGN KEY(backref_id) REFERENCES dataset (id) + FOREIGN KEY(backref_id) REFERENCES experiment_dataset (id) ); CREATE TABLE family_xref ( @@ -933,6 +935,40 @@ CREATE TABLE research_activity_xref ( FOREIGN KEY(backref_id) REFERENCES research_activity (id) ); +CREATE TABLE study_xref ( + backref_id TEXT, + xref TEXT, + PRIMARY KEY (backref_id, xref), + FOREIGN KEY(backref_id) REFERENCES study (id) +); + +CREATE TABLE study_affiliation ( + backref_id TEXT, + affiliation TEXT NOT NULL, + PRIMARY KEY (backref_id, affiliation), + FOREIGN KEY(backref_id) REFERENCES study (id) +); + +CREATE TABLE analysis_process ( + id TEXT NOT NULL, + accession TEXT, + type TEXT, + has_attribute TEXT, + creation_date TEXT, + update_date TEXT, + title TEXT, + has_input TEXT, + has_workflow_step TEXT, + has_agent TEXT, + has_output TEXT, + analysis_id TEXT, + PRIMARY KEY (id), + FOREIGN KEY(has_workflow_step) REFERENCES workflow_step (id), + FOREIGN KEY(has_agent) REFERENCES agent (id), + FOREIGN KEY(has_output) REFERENCES file (id), + FOREIGN KEY(analysis_id) REFERENCES analysis (id) +); + CREATE TABLE data_use_condition ( permission TEXT, modifier TEXT, @@ -950,6 +986,13 @@ CREATE TABLE experiment ( title TEXT, type TEXT, has_publication TEXT, + submission_status submission_status_enum, + submission_date TEXT, + release_status release_status_enum, + release_date TEXT, + deprecated BOOLEAN, + deprecation_date TEXT, + replaced_by TEXT, name TEXT NOT NULL, description TEXT NOT NULL, biological_replicates TEXT, @@ -961,16 +1004,17 @@ CREATE TABLE experiment ( has_file TEXT, PRIMARY KEY (id), FOREIGN KEY(has_publication) REFERENCES publication (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id), FOREIGN KEY(has_study) REFERENCES study (id), FOREIGN KEY(has_sample) REFERENCES sample (id), FOREIGN KEY(has_technology) REFERENCES technology (id) ); -CREATE TABLE analysis_process_xref ( +CREATE TABLE analysis_xref ( backref_id TEXT, xref TEXT, PRIMARY KEY (backref_id, xref), - FOREIGN KEY(backref_id) REFERENCES analysis_process (id) + FOREIGN KEY(backref_id) REFERENCES analysis (id) ); CREATE TABLE data_access_policy_xref ( @@ -980,6 +1024,13 @@ CREATE TABLE data_access_policy_xref ( FOREIGN KEY(backref_id) REFERENCES data_access_policy (id) ); +CREATE TABLE dataset_xref ( + backref_id TEXT, + xref TEXT, + PRIMARY KEY (backref_id, xref), + FOREIGN KEY(backref_id) REFERENCES dataset (id) +); + CREATE TABLE sample_xref ( backref_id TEXT, xref TEXT, @@ -1008,6 +1059,13 @@ CREATE TABLE experiment_process ( FOREIGN KEY(experiment_id) REFERENCES experiment (id) ); +CREATE TABLE analysis_process_xref ( + backref_id TEXT, + xref TEXT, + PRIMARY KEY (backref_id, xref), + FOREIGN KEY(backref_id) REFERENCES analysis_process (id) +); + CREATE TABLE experiment_xref ( backref_id TEXT, xref TEXT, diff --git a/artifacts/sql/ghga_models.py b/artifacts/sql/ghga_models.py index 4308b349..f5532158 100644 --- a/artifacts/sql/ghga_models.py +++ b/artifacts/sql/ghga_models.py @@ -41,6 +41,13 @@ Column('has_file', Text), Column('has_publication', Text), Column('type', Text), + Column('submission_status', Text), + Column('submission_date', Text), + Column('release_status', Text), + Column('release_date', Text), + Column('deprecated', Text), + Column('deprecation_date', Text), + Column('replaced_by', Text, ForeignKey('named_thing.id')), ) tbl_analysis = Table('analysis', metadata, Column('accession', Text), @@ -67,6 +74,13 @@ Column('has_file', Text), Column('has_publication', Text), Column('type', Text), + Column('submission_status', Text), + Column('submission_date', Text), + Column('release_status', Text), + Column('release_date', Text), + Column('deprecated', Text), + Column('deprecation_date', Text), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('has_data_access_policy', Text), Column('has_study', Text), Column('has_analysis', Text), @@ -200,6 +214,13 @@ Column('has_file', Text), Column('has_publication', Text), Column('type', Text), + Column('submission_status', Text), + Column('submission_date', Text), + Column('release_status', Text), + Column('release_date', Text), + Column('deprecated', Text), + Column('deprecation_date', Text), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('aggregate_dataset_id', Text, ForeignKey('aggregate_dataset.id')), ) tbl_disease = Table('disease', metadata, @@ -252,6 +273,13 @@ Column('title', Text), Column('type', Text), Column('has_publication', Text, ForeignKey('publication.id')), + Column('submission_status', Text), + Column('submission_date', Text), + Column('release_status', Text), + Column('release_date', Text), + Column('deprecated', Text), + Column('deprecation_date', Text), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('name', Text), Column('description', Text), Column('biological_replicates', Text), @@ -273,6 +301,13 @@ Column('has_file', Text), Column('has_publication', Text), Column('type', Text), + Column('submission_status', Text), + Column('submission_date', Text), + Column('release_status', Text), + Column('release_date', Text), + Column('deprecated', Text), + Column('deprecation_date', Text), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('has_data_access_policy', Text), Column('has_study', Text), Column('has_experiment', Text), @@ -355,6 +390,13 @@ Column('description', Text), Column('type', Text), Column('has_publication', Text, ForeignKey('publication.id')), + Column('submission_status', Text), + Column('submission_date', Text), + Column('release_status', Text), + Column('release_date', Text), + Column('deprecated', Text), + Column('deprecation_date', Text), + Column('replaced_by', Text, ForeignKey('named_thing.id')), ) tbl_library_preparation_protocol = Table('library_preparation_protocol', metadata, Column('id', Text, primary_key=True), @@ -540,6 +582,13 @@ Column('accession', Text), Column('creation_date', Text), Column('update_date', Text), + Column('submission_status', Text), + Column('submission_date', Text), + Column('release_status', Text), + Column('release_date', Text), + Column('deprecated', Text), + Column('deprecation_date', Text), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('has_publication', Text), Column('has_experiment', Text), Column('has_analysis', Text), From 83b2f964dd512fbee5271114824428025d64c443 Mon Sep 17 00:00:00 2001 From: Deepak <deepakunni3@users.noreply.github.com> Date: Tue, 23 Nov 2021 09:49:52 +0100 Subject: [PATCH 05/16] Add submission entity to represent a data submission from a data submitter (#25) * Add slot to link Study with a Project * Make 'has attribute' slot as inlined * Add submission entity --- src/schema/ghga.yaml | 86 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) diff --git a/src/schema/ghga.yaml b/src/schema/ghga.yaml index 51bf86bb..db98b9b7 100644 --- a/src/schema/ghga.yaml +++ b/src/schema/ghga.yaml @@ -54,6 +54,9 @@ classes: has attribute: description: >- Holds one or more Attribute entities that further characterizes this entity. + range: attribute + multivalued: true + inlined_as_list: true creation date: description: >- Timestamp (in ISO 8601 format) when the entity was created. @@ -106,7 +109,6 @@ classes: investigation: is_a: planned process mixins: - - submission status mixin - release status mixin - deprecation mixin description: >- @@ -197,6 +199,7 @@ classes: - has publication - has experiment - has analysis + - has project - has attribute slot_usage: title: @@ -232,6 +235,9 @@ classes: One or more Analysis entities associated with this Study. multivalued: true range: analysis + has project: + description: The project associated with this Study. + range: project has attribute: description: >- Custom key/value pairs that further characterizes the Study. @@ -1133,6 +1139,80 @@ classes: The role of the user range: user_role_enum + submission: + is_a: named thing + mixins: + - submission status mixin + description: >- + 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. + slots: + - has study + - has project + - has sample + - has biospecimen + - has individual + - has experiment + - has analysis + - has file + - has data access policy + slot_usage: + has study: + description: >- + Information about a Study entities associated with this submission. + range: study + inlined: true + inlined_as_list: false + has project: + description: >- + Information about a Project entity associated with this submission. + range: project + inlined: true + inlined_as_list: false + has sample: + description: >- + Information about one or more Sample entities associated with this submission. + range: sample + multivalued: true + inlined_as_list: true + has biospecimen: + description: >- + Information about one or more Biospecimen entities associated with this submission. + range: biospecimen + multivalued: true + inlined_as_list: true + has individual: + description: >- + Information about one or more Individual entities associated with this submission. + range: individual + multivalued: true + inlined_as_list: true + has experiment: + description: >- + Information about one or more Experiment entities associated with this submission. + range: experiment + multivalued: true + inlined_as_list: true + has analysis: + description: >- + Information about one or more Analysis entities associated with this submission. + range: analysis + multivalued: true + inlined_as_list: true + has file: + description: >- + Information about one or more File entities associated with this submission. + range: file + multivalued: true + inlined_as_list: true + has data access policy: + description: >- + The Data Access Policy entity that applies to the data associated with this submission. + range: data access policy + inlined: true + inlined_as_list: false + submission status mixin: mixin: true description: >- @@ -1230,6 +1310,10 @@ slots: description: The study associated with an entity. range: study + has project: + description: The project associated with an entity. + range: project + has publication: description: The Publication associated with an entity. range: publication From 93556a8532df5c2f3e08a2c14a2e4536ffafccf9 Mon Sep 17 00:00:00 2001 From: GitHub Action <action@github.com> Date: Tue, 23 Nov 2021 08:51:04 +0000 Subject: [PATCH 06/16] Autogenerate artifacts --- artifacts/csv/ghga.csv | 1 + artifacts/graphql/ghga.graphql | 31 +- artifacts/jsonschema/ghga.schema.json | 135 +++- artifacts/owl/ghga.owl.ttl | 863 ++++++++++++++------------ artifacts/python/ghga.py | 121 +++- artifacts/rdf/ghga.ttl | 760 +++++++++++++++-------- artifacts/shex/ghga.shex | 28 +- artifacts/sql/ghga.sql | 41 +- artifacts/sql/ghga_models.py | 32 +- 9 files changed, 1268 insertions(+), 744 deletions(-) diff --git a/artifacts/csv/ghga.csv b/artifacts/csv/ghga.csv index 98c8b090..6c9614db 100644 --- a/artifacts/csv/ghga.csv +++ b/artifacts/csv/ghga.csv @@ -44,6 +44,7 @@ research_activity,,A planned process executed in the performance of scientific r sample,,"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)." sequencing_protocol,,Information about the sequencing of a sample. study,,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. +submission,,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. submission_status_mixin,,A mixin that keeps track of the submission status. technology,,A Technology is an abstraction that represents the instrument used for an assay. The Technology entity captures instrument-specific attributes that are relevant for an Experiment entity. The Technology entity may be further characterized by its children where each child has fields that are relevant to that particular technology. user,,A user in GHGA. diff --git a/artifacts/graphql/ghga.graphql b/artifacts/graphql/ghga.graphql index 88c9290d..a523468a 100644 --- a/artifacts/graphql/ghga.graphql +++ b/artifacts/graphql/ghga.graphql @@ -318,8 +318,6 @@ type Experiment title: String type: String hasPublication: Publication - submissionStatus: SubmissionStatusEnum - submissionDate: String releaseStatus: ReleaseStatusEnum releaseDate: String deprecated: Boolean @@ -444,7 +442,7 @@ type InformationContentEntity updateDate: String } -type Investigation implements SubmissionStatusMixin, ReleaseStatusMixin, DeprecationMixin +type Investigation implements ReleaseStatusMixin, DeprecationMixin { id: String! accession: String @@ -456,8 +454,6 @@ type Investigation implements SubmissionStatusMixin, ReleaseStatusMixin, Depreca description: String type: String hasPublication: Publication - submissionStatus: SubmissionStatusEnum - submissionDate: String releaseStatus: ReleaseStatusEnum releaseDate: String deprecated: Boolean @@ -699,8 +695,6 @@ type Study xref: [String] creationDate: String updateDate: String - submissionStatus: SubmissionStatusEnum - submissionDate: String releaseStatus: ReleaseStatusEnum releaseDate: String deprecated: Boolean @@ -710,12 +704,35 @@ type Study hasPublication: [Publication] hasExperiment: [Experiment] hasAnalysis: [Analysis] + hasProject: Project hasAttribute: [Attribute] title: String! description: String! type: StudyTypeEnum! } +type Submission implements SubmissionStatusMixin + { + id: String! + accession: String + xref: [String] + type: String + hasAttribute: [Attribute] + creationDate: String + updateDate: String + hasStudy: Study + hasProject: Project + hasSample: [Sample] + hasBiospecimen: [Biospecimen] + hasIndividual: [Individual] + hasExperiment: [Experiment] + hasAnalysis: [Analysis] + hasFile: [File] + hasDataAccessPolicy: DataAccessPolicy + submissionStatus: SubmissionStatusEnum + submissionDate: String + } + interface SubmissionStatusMixin { submissionStatus: SubmissionStatusEnum diff --git a/artifacts/jsonschema/ghga.schema.json b/artifacts/jsonschema/ghga.schema.json index a4b042c1..455b7f95 100644 --- a/artifacts/jsonschema/ghga.schema.json +++ b/artifacts/jsonschema/ghga.schema.json @@ -1396,14 +1396,6 @@ "description": "The entity which replaces a deprecated entity.", "type": "string" }, - "submission_date": { - "description": "The date when submission was completed.", - "type": "string" - }, - "submission_status": { - "$ref": "#/$defs/SubmissionStatusEnum", - "description": "The status of submission." - }, "technical_replicates": { "description": "Number of replicate samples (technical replicates).", "type": "string" @@ -1967,14 +1959,6 @@ "description": "The entity which replaces a deprecated entity.", "type": "string" }, - "submission_date": { - "description": "The date when submission was completed.", - "type": "string" - }, - "submission_status": { - "$ref": "#/$defs/SubmissionStatusEnum", - "description": "The status of submission." - }, "title": { "description": "The title that describes an entity.", "type": "string" @@ -2975,6 +2959,10 @@ }, "type": "array" }, + "has_project": { + "description": "The project associated with this Study.", + "type": "string" + }, "has_publication": { "description": "One or more Publication entities associated with this Study.", "items": { @@ -2998,14 +2986,6 @@ "description": "The entity which replaces a deprecated entity.", "type": "string" }, - "submission_date": { - "description": "The date when submission was completed.", - "type": "string" - }, - "submission_status": { - "$ref": "#/$defs/SubmissionStatusEnum", - "description": "The status of submission." - }, "title": { "description": "Comprehensive title for the study.", "type": "string" @@ -3057,6 +3037,113 @@ "title": "StudyTypeEnum", "type": "string" }, + "Submission": { + "additionalProperties": false, + "description": "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.", + "properties": { + "accession": { + "description": "A unique identifier assigned to an entity for the sole purpose of referring to that entity in a global scope.", + "type": "string" + }, + "creation_date": { + "description": "Timestamp (in ISO 8601 format) when the entity was created.", + "type": "string" + }, + "has_analysis": { + "description": "Information about one or more Analysis entities associated with this submission.", + "items": { + "$ref": "#/$defs/Analysis" + }, + "type": "array" + }, + "has_attribute": { + "description": "Holds one or more Attribute entities that further characterizes this entity.", + "items": { + "$ref": "#/$defs/Attribute" + }, + "type": "array" + }, + "has_biospecimen": { + "description": "Information about one or more Biospecimen entities associated with this submission.", + "items": { + "$ref": "#/$defs/Biospecimen" + }, + "type": "array" + }, + "has_data_access_policy": { + "$ref": "#/$defs/DataAccessPolicy", + "description": "The Data Access Policy entity that applies to the data associated with this submission." + }, + "has_experiment": { + "description": "Information about one or more Experiment entities associated with this submission.", + "items": { + "$ref": "#/$defs/Experiment" + }, + "type": "array" + }, + "has_file": { + "description": "Information about one or more File entities associated with this submission.", + "items": { + "$ref": "#/$defs/File" + }, + "type": "array" + }, + "has_individual": { + "description": "Information about one or more Individual entities associated with this submission.", + "items": { + "$ref": "#/$defs/Individual" + }, + "type": "array" + }, + "has_project": { + "$ref": "#/$defs/Project", + "description": "Information about a Project entity associated with this submission." + }, + "has_sample": { + "description": "Information about one or more Sample entities associated with this submission.", + "items": { + "$ref": "#/$defs/Sample" + }, + "type": "array" + }, + "has_study": { + "$ref": "#/$defs/Study", + "description": "Information about a Study entities associated with this submission." + }, + "id": { + "description": "The internal unique identifier for an entity.", + "type": "string" + }, + "submission_date": { + "description": "The date when submission was completed.", + "type": "string" + }, + "submission_status": { + "$ref": "#/$defs/SubmissionStatusEnum", + "description": "The status of submission." + }, + "type": { + "description": "The type of an entity.", + "type": "string" + }, + "update_date": { + "description": "Timestamp (in ISO 8601 format) when the entity was updated.", + "type": "string" + }, + "xref": { + "description": "Holds one or more database cross references.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "id" + ], + "title": "Submission", + "type": "object" + }, "SubmissionStatusEnum": { "description": "Enum to capture submission status.", "enum": [ diff --git a/artifacts/owl/ghga.owl.ttl b/artifacts/owl/ghga.owl.ttl index 149d3a94..91e901cc 100644 --- a/artifacts/owl/ghga.owl.ttl +++ b/artifacts/owl/ghga.owl.ttl @@ -25,11 +25,11 @@ dcterms:license "https://creativecommons.org/publicdomain/zero/1.0/" ; pav:version "1.0.0a" ; skos:definition "The metadata schema for the German Human Genome-Phenome Archive (GHGA)." ; - linkml:generation_date "2021-11-18T09:29:33" ; + linkml:generation_date "2021-11-23T08:50:53" ; linkml:metamodel_version "1.7.0" ; linkml:source_file "ghga.yaml" ; - linkml:source_file_date "2021-11-18T09:28:38" ; - linkml:source_file_size 50581 . + linkml:source_file_date "2021-11-23T08:50:06" ; + linkml:source_file_size 53312 . GHGA:AggregateDataset a owl:Class, linkml:ClassDefinition ; @@ -43,7 +43,17 @@ GHGA:AggregateDataset a owl:Class, GHGA:AnalysisDataset a owl:Class, linkml:ClassDefinition ; rdfs:label "analysis dataset" ; - rdfs:subClassOf [ a owl:Class ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:has_analysis ], + [ a owl:Class ; + owl:intersectionOf ( [ a owl:Restriction ; + owl:allValuesFrom GHGA:Study ; + owl:onProperty GHGA:has_study ] [ a owl:Restriction ; + owl:onProperty GHGA:has_study ; + owl:someValuesFrom GHGA:Study ] ) ], + [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; owl:allValuesFrom GHGA:Analysis ; owl:onProperty GHGA:has_experiment ] [ a owl:Restriction ; @@ -55,16 +65,6 @@ GHGA:AnalysisDataset a owl:Class, owl:onProperty GHGA:has_data_access_policy ] [ a owl:Restriction ; owl:onProperty GHGA:has_data_access_policy ; owl:someValuesFrom GHGA:DataAccessPolicy ] ) ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:has_analysis ], - [ a owl:Class ; - owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom GHGA:Study ; - owl:onProperty GHGA:has_study ] [ a owl:Restriction ; - owl:onProperty GHGA:has_study ; - owl:someValuesFrom GHGA:Study ] ) ], GHGA:Dataset ; skos:definition "An Analysis Dataset is a collection of Files generated from one or more Analysis performed on data from one or more Studies." . @@ -96,17 +96,17 @@ GHGA:ExperimentDataset a owl:Class, linkml:ClassDefinition ; rdfs:label "experiment dataset" ; rdfs:subClassOf [ a owl:Class ; - owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom GHGA:Experiment ; - owl:onProperty GHGA:has_experiment ] [ a owl:Restriction ; - owl:onProperty GHGA:has_experiment ; - owl:someValuesFrom GHGA:Experiment ] ) ], - [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; owl:allValuesFrom GHGA:Study ; owl:onProperty GHGA:has_study ] [ a owl:Restriction ; owl:onProperty GHGA:has_study ; owl:someValuesFrom GHGA:Study ] ) ], + [ a owl:Class ; + owl:intersectionOf ( [ a owl:Restriction ; + owl:allValuesFrom GHGA:Experiment ; + owl:onProperty GHGA:has_experiment ] [ a owl:Restriction ; + owl:onProperty GHGA:has_experiment ; + owl:someValuesFrom GHGA:Experiment ] ) ], [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; owl:allValuesFrom GHGA:DataAccessPolicy ; @@ -133,44 +133,32 @@ GHGA:LibraryPreparationProtocol a owl:Class, linkml:ClassDefinition ; rdfs:label "library preparation protocol" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:library_name ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:library_preparation ], - [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:name ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:library_layout ], [ 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:primer ], + owl:onProperty GHGA:library_construction_kit_retail_name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:rnaseq_strandedness ], + owl:onProperty GHGA:library_level ], [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:library_selection ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_level ], + owl:onProperty GHGA:library_construction ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_construction_kit_manufacturer ], + owl:onProperty GHGA:library_preparation ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -178,49 +166,37 @@ GHGA:LibraryPreparationProtocol a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:target_regions ], + owl:onProperty GHGA:library_layout ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_selection ], + owl:onProperty GHGA:target_regions ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_construction ], + owl:onProperty GHGA:library_name ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:end_bias ], + owl:onProperty GHGA:description ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_construction_kit_retail_name ], - GHGA:Protocol ; - skos:definition "Information about the library preparation of an Experiment." . - -GHGA:Project a owl:Class, - linkml:ClassDefinition ; - rdfs:label "project" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom GHGA:Publication ; - owl:onProperty GHGA:has_publication ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Experiment ; - owl:onProperty GHGA:has_study ], + owl:onProperty GHGA:library_construction_kit_manufacturer ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:end_bias ], [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:primer ], [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:title ; - owl:qualifiedCardinality 1 ], - GHGA:ResearchActivity ; - skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C47885> ; - skos:definition "Any specifically defined piece of work that is undertaken or attempted to meet a single requirement." . + owl:onProperty GHGA:rnaseq_strandedness ], + GHGA:Protocol ; + skos:definition "Information about the library preparation of an Experiment." . GHGA:SequencingProtocol a owl:Class, linkml:ClassDefinition ; @@ -228,15 +204,15 @@ GHGA:SequencingProtocol a owl:Class, rdfs:subClassOf [ 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 ; - owl:onProperty GHGA:umi_barcode_offset ], + owl:onProperty GHGA:umi_barcode_size ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:sequencing_center ], + owl:onProperty GHGA:flow_cell_type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -244,11 +220,14 @@ GHGA:SequencingProtocol a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:flow_cell_type ], + owl:onProperty GHGA:name ], + [ 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:target_coverage ], + owl:onProperty GHGA:read_length ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -256,53 +235,95 @@ GHGA:SequencingProtocol a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:cell_barcode_read ], + owl:onProperty GHGA:sequencing_center ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:reference_annotation ], + owl:onProperty GHGA:read_pair_number ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], + owl:onProperty GHGA:reference_annotation ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:read_length ], + owl:onProperty GHGA:flow_cell_id ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:cell_barcode_offset ], + owl:onProperty GHGA:umi_barcode_offset ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:sample_barcode_read ], + owl:onProperty GHGA:cell_barcode_size ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:lane_number ], + owl:onProperty GHGA:cell_barcode_read ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:umi_barcode_size ], + owl:onProperty GHGA:lane_number ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:cell_barcode_size ], + owl:onProperty GHGA:sample_barcode_read ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:read_pair_number ], + owl:onProperty GHGA:target_coverage ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:flow_cell_id ], + owl:onProperty GHGA:cell_barcode_offset ], GHGA:Protocol ; skos:definition "Information about the sequencing of a sample." . +GHGA:Submission a owl:Class, + linkml:ClassDefinition ; + rdfs:label "submission" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom GHGA:Individual ; + owl:onProperty GHGA:has_individual ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:submission_date ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass <http://UNKNOWN.org/submission_status_enum> ; + owl:onProperty GHGA:submission_status ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Biospecimen ; + owl:onProperty GHGA:has_biospecimen ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Sample ; + owl:onProperty GHGA:has_sample ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_file ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Experiment ; + owl:onProperty GHGA:has_experiment ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Project ; + owl:onProperty GHGA:has_project ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:DataAccessPolicy ; + owl:onProperty GHGA:has_data_access_policy ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Study ; + owl:onProperty GHGA:has_study ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Analysis ; + owl:onProperty GHGA:has_analysis ], + GHGA:NamedThing, + GHGA:SubmissionStatusMixin ; + 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." . + GHGA:User a owl:Class, linkml:ClassDefinition ; rdfs:label "user" ; @@ -350,9 +371,16 @@ GHGA:AnalysisProcess a owl:Class, linkml:ClassDefinition ; rdfs:label "analysis process" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:title ], + [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Agent ; owl:onProperty GHGA:has_agent ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_input ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:File ; @@ -361,13 +389,6 @@ GHGA:AnalysisProcess a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:WorkflowStep ; owl:onProperty GHGA:has_workflow_step ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_input ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:title ], 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." . @@ -385,37 +406,6 @@ GHGA:BiologicalQuality a owl:Class, skos:definition "A biological quality is a quality held by a biological entity." ; skos:exactMatch SIO:000475 . -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 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:PhenotypicFeature ; - owl:onProperty GHGA:has_phenotypic_feature ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:AnatomicalEntity ; - owl:onProperty GHGA:has_anatomical_entity ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:name ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Disease ; - owl:onProperty GHGA:has_disease ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Individual ; - owl:onProperty GHGA:has_individual ], - 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." ; - skos:exactMatch <http://purl.obolibrary.org/obo/OBI_0100051> . - GHGA:Committee a owl:Class, linkml:ClassDefinition ; rdfs:label "committee" ; @@ -433,6 +423,9 @@ GHGA:DataAccessCommittee a owl:Class, owl:onClass linkml:String ; owl:onProperty GHGA:name ; owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Member ; + owl:onProperty GHGA:has_member ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Member ; @@ -441,9 +434,6 @@ GHGA:DataAccessCommittee a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:description ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Member ; - owl:onProperty GHGA:has_member ], GHGA:Committee ; skos:definition "A group of members that are delegated to grant access to one or more datasets after ensuring the minimum criteria for data sharing has been met, and request for data use does not raise ethical and/or legal concerns." . @@ -454,14 +444,14 @@ GHGA:DataTransformation a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:title ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:description ], [ 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:description ], GHGA:PlannedProcess ; skos:definition "A data transformation technique used to analyze and interpret data to gain a better understanding of it." ; skos:exactMatch <http://purl.obolibrary.org/obo/OBI_0200000> . @@ -479,24 +469,24 @@ GHGA:ExperimentProcess a owl:Class, rdfs:label "experiment process" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:name ], + owl:onClass GHGA:Sample ; + owl:onProperty GHGA:has_input ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Protocol ; - owl:onProperty GHGA:has_protocol ], + owl:onClass GHGA:Agent ; + owl:onProperty GHGA:has_agent ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:File ; owl:onProperty GHGA:has_output ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Agent ; - owl:onProperty GHGA:has_agent ], + owl:onClass GHGA:Protocol ; + owl:onProperty GHGA:has_protocol ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Sample ; - owl:onProperty GHGA:has_input ], + owl:onClass linkml:String ; + owl:onProperty GHGA:name ], 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." . @@ -514,6 +504,10 @@ GHGA:ResearchActivity a owl:Class, linkml:ClassDefinition ; rdfs:label "research activity" ; rdfs:subClassOf [ 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:description ], @@ -521,10 +515,6 @@ GHGA:ResearchActivity a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Publication ; owl:onProperty GHGA:has_publication ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:title ], GHGA:PlannedProcess ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C15429> ; 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." ; @@ -659,9 +649,6 @@ GHGA:has_analysis_process a owl:ObjectProperty, GHGA:has_anatomical_entity a owl:ObjectProperty, linkml:SlotDefinition . -GHGA:has_biospecimen a owl:ObjectProperty, - linkml:SlotDefinition . - GHGA:has_children a owl:ObjectProperty, linkml:SlotDefinition . @@ -692,9 +679,6 @@ GHGA:has_phenotypic_feature a owl:ObjectProperty, GHGA:has_protocol a owl:ObjectProperty, linkml:SlotDefinition . -GHGA:has_sample a owl:ObjectProperty, - linkml:SlotDefinition . - GHGA:has_technology a owl:ObjectProperty, linkml:SlotDefinition . @@ -920,26 +904,57 @@ GHGA:Agent 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:description ], GHGA:NamedThing ; skos:definition "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." ; skos:exactMatch <http://www.w3.org/ns/prov#Agent> . +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:name ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:PhenotypicFeature ; + owl:onProperty GHGA:has_phenotypic_feature ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:description ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Disease ; + owl:onProperty GHGA:has_disease ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:AnatomicalEntity ; + owl:onProperty GHGA:has_anatomical_entity ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Individual ; + owl:onProperty GHGA:has_individual ], + 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." ; + skos:exactMatch <http://purl.obolibrary.org/obo/OBI_0100051> . + GHGA:DataUseCondition a owl:Class, linkml:ClassDefinition ; rdfs:label "data use condition" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:modifier ], + owl:onProperty GHGA:permission ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:permission ] ; + owl:onProperty GHGA:modifier ] ; skos:definition "Data Use Condition represents the use conditions associated with a Dataset. A permission field can have one or more terms that collectively defines the data use condition. The modifier determines the interpretation of the use permission(s)." . GHGA:DiseaseOrPhenotypicFeature a owl:Class, @@ -948,11 +963,11 @@ GHGA:DiseaseOrPhenotypicFeature 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:description ], GHGA:BiologicalQuality ; 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 . @@ -962,28 +977,16 @@ GHGA:Investigation a owl:Class, rdfs:label "investigation" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass <http://UNKNOWN.org/release_status_enum> ; - owl:onProperty GHGA:release_status ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:submission_date ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onClass GHGA:Publication ; + owl:onProperty GHGA:has_publication ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:deprecation_date ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:Boolean ; - owl:onProperty GHGA:deprecated ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass <http://UNKNOWN.org/submission_status_enum> ; - owl:onProperty GHGA:submission_status ], + owl:onClass linkml:String ; + owl:onProperty GHGA:release_date ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:NamedThing ; @@ -991,23 +994,26 @@ GHGA:Investigation a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:type ], + owl:onProperty GHGA:title ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Publication ; - owl:onProperty GHGA:has_publication ], + owl:onClass <http://UNKNOWN.org/release_status_enum> ; + owl:onProperty GHGA:release_status ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:Boolean ; + owl:onProperty GHGA:deprecated ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:title ], + owl:onProperty GHGA:type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:release_date ], + owl:onProperty GHGA:description ], GHGA:DeprecationMixin, GHGA:PlannedProcess, - GHGA:ReleaseStatusMixin, - GHGA:SubmissionStatusMixin ; + GHGA:ReleaseStatusMixin ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C15429> ; 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 <http://purl.obolibrary.org/obo/OBI_0000066>, @@ -1017,10 +1023,6 @@ GHGA:Member a owl:Class, linkml:ClassDefinition ; rdfs:label "member" ; rdfs:subClassOf [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:telephone ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:email ; owl:qualifiedCardinality 1 ], @@ -1028,6 +1030,10 @@ GHGA:Member a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:organization ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:telephone ; + owl:qualifiedCardinality 1 ], GHGA:Person ; skos:definition "Member of an Organization or a Committee." . @@ -1041,52 +1047,29 @@ GHGA:Population a owl:Class, GHGA:MaterialEntity ; skos:definition "A population is a collection of individuals from the same taxonomic class living, counted or sampled at a particular site or in a particular area." . -GHGA:Sample a owl:Class, +GHGA:Project a owl:Class, linkml:ClassDefinition ; - rdfs:label "sample" ; + rdfs:label "project" ; rdfs:subClassOf [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ; + owl:onProperty GHGA:title ; 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:description ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty GHGA:xref ], + owl:allValuesFrom GHGA:Attribute ; + owl:onProperty GHGA:has_attribute ], [ a owl:Restriction ; - owl:onClass GHGA:Individual ; - owl:onProperty GHGA:has_individual ; - owl:qualifiedCardinality 1 ], + owl:allValuesFrom GHGA:Publication ; + owl:onProperty GHGA:has_publication ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:type ], + owl:allValuesFrom GHGA:Experiment ; + owl:onProperty GHGA:has_study ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:tissue ; + owl:onProperty GHGA:description ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Biospecimen ; - owl:onProperty GHGA:has_biospecimen ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:isolation ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:vital_status_at_sampling ], - 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:ResearchActivity ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C47885> ; + skos:definition "Any specifically defined piece of work that is undertaken or attempted to meet a single requirement." . GHGA:WorkflowParameter a owl:Class, linkml:ClassDefinition ; @@ -1094,11 +1077,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, @@ -1110,10 +1093,13 @@ GHGA:email a owl:ObjectProperty, GHGA:has_agent a owl:ObjectProperty, linkml:SlotDefinition . -GHGA:has_analysis a owl:ObjectProperty, +GHGA:has_biospecimen a owl:ObjectProperty, linkml:SlotDefinition . -GHGA:has_individual a owl:ObjectProperty, +GHGA:has_project a owl:ObjectProperty, + linkml:SlotDefinition . + +GHGA:has_sample a owl:ObjectProperty, linkml:SlotDefinition . GHGA:key a owl:ObjectProperty, @@ -1122,34 +1108,14 @@ GHGA:key a owl:ObjectProperty, GHGA:value a owl:ObjectProperty, linkml:SlotDefinition . -GHGA:Analysis a owl:Class, - linkml:ClassDefinition ; - rdfs:label "analysis" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Workflow ; - owl:onProperty GHGA:has_workflow ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Study ; - owl:onProperty GHGA:has_study ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_input ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_output ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:AnalysisProcess ; - owl:onProperty GHGA:has_analysis_process ], - GHGA:DataTransformation ; - skos:altLabel "data analysis" ; - skos:definition "An Analysis is a data transformation that transforms input data to output data. The workflow used to achieve this transformation and the individual steps are also captured." . - GHGA:DeprecationMixin a owl:Class, linkml:ClassDefinition ; rdfs:label "deprecation 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:Boolean ; owl:onProperty GHGA:deprecated ], @@ -1157,10 +1123,6 @@ GHGA:DeprecationMixin a owl:Class, 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 "A mixin that keeps track of the deprecation status." . @@ -1170,11 +1132,11 @@ GHGA:Person a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:family_name ], + owl:onProperty GHGA:given_name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:given_name ], + owl:onProperty GHGA:family_name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -1189,12 +1151,12 @@ GHGA:Protocol a owl:Class, linkml:ClassDefinition ; 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:name ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -1214,15 +1176,62 @@ GHGA:ReleaseStatusMixin a owl:Class, linkml:ClassDefinition ; rdfs:label "release status mixin" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:release_date ], + [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass <http://UNKNOWN.org/release_status_enum> ; owl:onProperty GHGA:release_status ], + linkml:mixin ; + skos:definition "A mixin that keeps track of the release status." . + +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:release_date ], - linkml:mixin ; - skos:definition "A mixin that keeps track of the release status." . + owl:onProperty GHGA:vital_status_at_sampling ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:isolation ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:tissue ; + owl:qualifiedCardinality 1 ], + [ 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:description ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty GHGA:xref ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:name ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Biospecimen ; + owl:onProperty GHGA:has_biospecimen ], + [ a owl:Restriction ; + owl:onClass GHGA:Individual ; + owl:onProperty GHGA:has_individual ; + owl:qualifiedCardinality 1 ], + 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:SubmissionStatusMixin a owl:Class, linkml:ClassDefinition ; @@ -1250,7 +1259,10 @@ GHGA:deprecation_date a owl:ObjectProperty, rdfs:range linkml:String ; skos:definition "The date when the entity was deprecated." . -GHGA:has_file a owl:ObjectProperty, +GHGA:has_analysis a owl:ObjectProperty, + linkml:SlotDefinition . + +GHGA:has_individual a owl:ObjectProperty, linkml:SlotDefinition . GHGA:has_input a owl:ObjectProperty, @@ -1298,87 +1310,82 @@ GHGA:submission_status a owl:ObjectProperty, GHGA:xref a owl:ObjectProperty, linkml:SlotDefinition . -GHGA:DataAccessPolicy a owl:Class, +GHGA:Analysis a owl:Class, linkml:ClassDefinition ; - rdfs:label "data access policy" ; + rdfs:label "analysis" ; rdfs:subClassOf [ a owl:Restriction ; 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:onClass GHGA:Workflow ; + owl:onProperty GHGA:has_workflow ], [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:policy_text ; - owl:qualifiedCardinality 1 ], + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_output ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:DataUseCondition ; - owl:onProperty GHGA:has_data_use_condition ], + owl:allValuesFrom GHGA:AnalysisProcess ; + owl:onProperty GHGA:has_analysis_process ], [ a owl:Restriction ; - owl:onClass GHGA:DataAccessCommittee ; - owl:onProperty GHGA:has_data_access_committee ; - owl:qualifiedCardinality 1 ], + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_input ], [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:description ; - owl:qualifiedCardinality 1 ], - GHGA:InformationContentEntity ; - skos:definition "A Data Access Policy specifies under which circumstances, legal or otherwise, a user can have access to one or more Datasets belonging to one or more Studies." . + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Study ; + owl:onProperty GHGA:has_study ], + GHGA:DataTransformation ; + skos:altLabel "data analysis" ; + skos:definition "An Analysis is a data transformation that transforms input data to output data. The workflow used to achieve this transformation and the individual steps are also captured." . GHGA:Dataset a owl:Class, linkml:ClassDefinition ; rdfs:label "dataset" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:Boolean ; - owl:onProperty GHGA:deprecated ], + owl:allValuesFrom GHGA:Publication ; + owl:onProperty GHGA:has_publication ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:NamedThing ; - owl:onProperty GHGA:replaced_by ], + owl:onClass <http://UNKNOWN.org/release_status_enum> ; + owl:onProperty GHGA:release_status ], + [ a owl:Class ; + owl:intersectionOf ( [ a owl:Restriction ; + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_file ] [ a owl:Restriction ; + owl:onProperty GHGA:has_file ; + owl:someValuesFrom GHGA:File ] ) ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:deprecation_date ], - [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:description ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:submission_date ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:title ; + owl:onProperty GHGA:type ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:submission_date ], + owl:onProperty GHGA:deprecation_date ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass <http://UNKNOWN.org/submission_status_enum> ; owl:onProperty GHGA:submission_status ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:NamedThing ; + owl:onProperty GHGA:replaced_by ], + [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:release_date ], + owl:onProperty GHGA:description ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:Publication ; - owl:onProperty GHGA:has_publication ], - [ a owl:Class ; - owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_file ] [ a owl:Restriction ; - owl:onProperty GHGA:has_file ; - owl:someValuesFrom GHGA:File ] ) ], + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:release_date ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:type ; + owl:onProperty GHGA:title ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass <http://UNKNOWN.org/release_status_enum> ; - owl:onProperty GHGA:release_status ], + owl:onClass linkml:Boolean ; + owl:onProperty GHGA:deprecated ], GHGA:DeprecationMixin, GHGA:InformationContentEntity, GHGA:ReleaseStatusMixin, @@ -1386,28 +1393,48 @@ GHGA:Dataset a owl:Class, skos:definition "A Dataset is a collection of Files that is prepared for distribution." ; skos:exactMatch SIO:000089 . -GHGA:Experiment a owl:Class, +GHGA:has_file a owl:ObjectProperty, + linkml:SlotDefinition . + +GHGA:DataAccessPolicy a owl:Class, linkml:ClassDefinition ; - rdfs:label "experiment" ; + rdfs:label "data access policy" ; rdfs:subClassOf [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ; + owl:onProperty GHGA:policy_text ; owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:DataUseCondition ; + owl:onProperty GHGA:has_data_use_condition ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:experimental_replicates ], + owl:onProperty GHGA:name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:biological_replicates ], + owl:onProperty GHGA:policy_url ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:ExperimentProcess ; - owl:onProperty GHGA:has_experiment_process ], + owl:onClass GHGA:DataAccessCommittee ; + owl:onProperty GHGA:has_data_access_committee ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Technology ; - owl:onProperty GHGA:has_technology ], + owl:onClass linkml:String ; + owl:onProperty GHGA:description ; + owl:qualifiedCardinality 1 ], + GHGA:InformationContentEntity ; + skos:definition "A Data Access Policy specifies under which circumstances, legal or otherwise, a user can have access to one or more Datasets belonging to one or more Studies." . + +GHGA:Experiment a owl:Class, + linkml:ClassDefinition ; + rdfs:label "experiment" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:onClass GHGA:Sample ; + owl:onProperty GHGA:has_sample ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_file ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:name ; @@ -1417,24 +1444,33 @@ GHGA:Experiment a owl:Class, owl:onClass linkml:String ; owl:onProperty GHGA:technical_replicates ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_file ], - [ a owl:Restriction ; - owl:onClass GHGA:Sample ; - owl:onProperty GHGA:has_sample ; + owl:onClass linkml:String ; + owl:onProperty GHGA:description ; owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:biological_replicates ], [ a owl:Restriction ; owl:onClass GHGA:Study ; owl:onProperty GHGA:has_study ; owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Technology ; + owl:onProperty GHGA:has_technology ], + [ 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:experimental_replicates ], GHGA:Investigation ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C42790> ; 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:has_data_access_policy a owl:ObjectProperty, - linkml:SlotDefinition . - GHGA:MaterialEntity a owl:Class, linkml:ClassDefinition ; rdfs:label "material entity" ; @@ -1455,6 +1491,13 @@ GHGA:Publication a owl:Class, linkml:ClassDefinition ; rdfs:label "publication" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:title ], + [ 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 ], @@ -1462,33 +1505,53 @@ GHGA:Publication a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:abstract ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:title ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty GHGA:xref ], 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:has_experiment a owl:ObjectProperty, +GHGA:has_data_access_policy a owl:ObjectProperty, linkml:SlotDefinition . GHGA:has_publication a owl:ObjectProperty, linkml:SlotDefinition . -GHGA:Individual a owl:Class, +GHGA:has_attribute a owl:ObjectProperty, + linkml:SlotDefinition . + +GHGA:has_experiment a owl:ObjectProperty, + linkml:SlotDefinition . + +GHGA:type a owl:ObjectProperty, + linkml:SlotDefinition . + +GHGA:Attribute a owl:Class, linkml:ClassDefinition ; - rdfs:label "individual" ; + rdfs:label "attribute" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:has_parent ], + owl:onProperty GHGA:key_type ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:value ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:key ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:gender ], + owl:onProperty GHGA:value_type ] ; + skos:definition "A key/value pair that further characterizes an entity." ; + skos:exactMatch SIO:000614 . + +GHGA:Individual a owl:Class, + linkml:ClassDefinition ; + rdfs:label "individual" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:onClass <http://UNKNOWN.org/biological_sex_enum> ; + owl:onProperty GHGA:sex ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -1496,30 +1559,34 @@ GHGA:Individual a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:ethnicity ], + owl:onProperty GHGA:gender ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:ancestry ], + owl:onProperty GHGA:has_children ], [ a owl:Restriction ; - owl:onClass <http://UNKNOWN.org/vital_status_enum> ; - owl:onProperty GHGA:vital_status ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:has_parent ], + [ a owl:Restriction ; + owl:onClass linkml:Integer ; + owl:onProperty GHGA:age ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:geographical_region ], + owl:onProperty GHGA:ethnicity ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:has_children ], + owl:onProperty GHGA:geographical_region ], [ a owl:Restriction ; - owl:onClass linkml:Integer ; - owl:onProperty GHGA:age ; - owl:qualifiedCardinality 1 ], + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:ancestry ], [ a owl:Restriction ; - owl:onClass <http://UNKNOWN.org/biological_sex_enum> ; - owl:onProperty GHGA:sex ; + owl:onClass <http://UNKNOWN.org/vital_status_enum> ; + owl:onProperty GHGA:vital_status ; owl:qualifiedCardinality 1 ], GHGA:Person ; skos:altLabel "patient", @@ -1530,14 +1597,9 @@ GHGA:Study a owl:Class, linkml:ClassDefinition ; rdfs:label "study" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom GHGA:Publication ; - owl:onProperty GHGA:has_publication ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Experiment ; - owl:onProperty GHGA:has_experiment ], + owl:onClass linkml:String ; + owl:onProperty GHGA:description ; + owl:qualifiedCardinality 1 ], [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; owl:allValuesFrom linkml:String ; @@ -1545,77 +1607,68 @@ GHGA:Study a owl:Class, owl:onProperty GHGA:affiliation ; owl:someValuesFrom linkml:String ] ) ], [ a owl:Restriction ; - owl:onClass <http://UNKNOWN.org/study_type_enum> ; - owl:onProperty GHGA:type ; - owl:qualifiedCardinality 1 ], + owl:allValuesFrom GHGA:Experiment ; + owl:onProperty GHGA:has_experiment ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Analysis ; owl:onProperty GHGA:has_analysis ], [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:description ; - owl:qualifiedCardinality 1 ], + owl:allValuesFrom GHGA:Publication ; + owl:onProperty GHGA:has_publication ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Attribute ; + owl:onProperty GHGA:has_attribute ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:title ; owl:qualifiedCardinality 1 ], - GHGA:Investigation ; - 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:has_attribute a owl:ObjectProperty, - linkml:SlotDefinition . - -GHGA:type a owl:ObjectProperty, - linkml:SlotDefinition . - -GHGA:Attribute a owl:Class, - linkml:ClassDefinition ; - rdfs:label "attribute" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:key_type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:value_type ], + owl:onClass GHGA:Project ; + owl:onProperty GHGA:has_project ], [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:key ; + owl:onClass <http://UNKNOWN.org/study_type_enum> ; + owl:onProperty GHGA:type ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:value ; - owl:qualifiedCardinality 1 ] ; - skos:definition "A key/value pair that further characterizes an entity." ; - skos:exactMatch SIO:000614 . + GHGA:Investigation ; + 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 a owl:Class, + linkml:ClassDefinition ; + rdfs:label "information content entity" ; + rdfs:subClassOf GHGA:NamedThing ; + skos:definition "A generically dependent continuant that is about some thing." ; + skos:exactMatch IAO:0000030 . GHGA:has_study a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:title a owl:ObjectProperty, + linkml:SlotDefinition . + GHGA:File a owl:Class, linkml:ClassDefinition ; rdfs:label "file" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:file_index ], + owl:onProperty GHGA:format ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:checksum ], + owl:onProperty GHGA:name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:format ], + owl:onProperty GHGA:category ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass <http://UNKNOWN.org/file_type_enum> ; - owl:onProperty GHGA:type ], + owl:onClass linkml:String ; + owl:onProperty GHGA:file_index ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:name ], + owl:onClass <http://UNKNOWN.org/file_type_enum> ; + owl:onProperty GHGA:type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -1623,49 +1676,39 @@ GHGA:File a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:category ], + owl:onProperty GHGA:checksum ], GHGA:InformationContentEntity ; skos:altLabel "file object" . -GHGA:InformationContentEntity a owl:Class, - linkml:ClassDefinition ; - rdfs:label "information content entity" ; - rdfs:subClassOf GHGA:NamedThing ; - skos:definition "A generically dependent continuant that is about some thing." ; - skos:exactMatch IAO:0000030 . - -GHGA:title a owl:ObjectProperty, - linkml:SlotDefinition . - GHGA:NamedThing a owl:Class, linkml:ClassDefinition ; rdfs:label "named thing" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:type ], + owl:allValuesFrom GHGA:Attribute ; + owl:onProperty GHGA:has_attribute ], [ 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:creation_date ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty GHGA:xref ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:accession ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:update_date ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:update_date ] ; + owl:onProperty GHGA:type ] ; skos:altLabel "entity", "named entity", "object" ; diff --git a/artifacts/python/ghga.py b/artifacts/python/ghga.py index d16bcf75..40c8a254 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: 2021-11-18T09:29:38 +# Generation date: 2021-11-23T08:50:58 # Schema: GHGA-Metadata-Schema # # id: https://w3id.org/GHGA-Metadata-Schema @@ -232,6 +232,10 @@ class UserId(PersonId): pass +class SubmissionId(NamedThingId): + pass + + @dataclass class NamedThing(YAMLRoot): """ @@ -268,7 +272,7 @@ 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_dict(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) + self._normalize_inlined_as_list(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) if self.creation_date is not None and not isinstance(self.creation_date, str): self.creation_date = str(self.creation_date) @@ -358,8 +362,6 @@ class Investigation(PlannedProcess): description: Optional[str] = None type: Optional[str] = None has_publication: Optional[Union[str, PublicationId]] = None - submission_status: Optional[Union[str, "SubmissionStatusEnum"]] = None - submission_date: Optional[str] = None release_status: Optional[Union[str, "ReleaseStatusEnum"]] = None release_date: Optional[str] = None deprecated: Optional[Union[bool, Bool]] = None @@ -384,12 +386,6 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.has_publication is not None and not isinstance(self.has_publication, PublicationId): self.has_publication = PublicationId(self.has_publication) - if self.submission_status is not None and not isinstance(self.submission_status, SubmissionStatusEnum): - self.submission_status = SubmissionStatusEnum(self.submission_status) - - if self.submission_date is not None and not isinstance(self.submission_date, str): - self.submission_date = str(self.submission_date) - if self.release_status is not None and not isinstance(self.release_status, ReleaseStatusEnum): self.release_status = ReleaseStatusEnum(self.release_status) @@ -518,7 +514,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.has_publication = [self.has_publication] if self.has_publication is not None else [] self.has_publication = [v if isinstance(v, PublicationId) else PublicationId(v) for v in self.has_publication] - self._normalize_inlined_as_dict(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) + self._normalize_inlined_as_list(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) super().__post_init__(**kwargs) @@ -544,6 +540,7 @@ class Study(Investigation): has_publication: Optional[Union[Union[str, PublicationId], List[Union[str, PublicationId]]]] = empty_list() has_experiment: Optional[Union[Union[str, ExperimentId], List[Union[str, ExperimentId]]]] = empty_list() has_analysis: Optional[Union[Union[str, AnalysisId], List[Union[str, AnalysisId]]]] = empty_list() + has_project: Optional[Union[str, ProjectId]] = None has_attribute: Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]] = empty_list() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): @@ -585,10 +582,13 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.has_analysis = [self.has_analysis] if self.has_analysis is not None else [] self.has_analysis = [v if isinstance(v, AnalysisId) else AnalysisId(v) for v in self.has_analysis] - self._normalize_inlined_as_dict(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) + if self.has_project is not None and not isinstance(self.has_project, ProjectId): + self.has_project = ProjectId(self.has_project) self._normalize_inlined_as_dict(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) + self._normalize_inlined_as_list(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) + super().__post_init__(**kwargs) @@ -1577,7 +1577,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self._normalize_inlined_as_dict(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) - self._normalize_inlined_as_dict(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) + self._normalize_inlined_as_list(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) super().__post_init__(**kwargs) @@ -2239,6 +2239,68 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) +@dataclass +class Submission(NamedThing): + """ + 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. + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = GHGA.Submission + class_class_curie: ClassVar[str] = "GHGA:Submission" + class_name: ClassVar[str] = "submission" + class_model_uri: ClassVar[URIRef] = GHGA.Submission + + id: Union[str, SubmissionId] = None + has_study: Optional[Union[dict, Study]] = None + has_project: Optional[Union[dict, Project]] = None + has_sample: Optional[Union[Dict[Union[str, SampleId], Union[dict, Sample]], List[Union[dict, Sample]]]] = empty_dict() + has_biospecimen: Optional[Union[Dict[Union[str, BiospecimenId], Union[dict, Biospecimen]], List[Union[dict, Biospecimen]]]] = empty_dict() + has_individual: Optional[Union[Dict[Union[str, IndividualId], Union[dict, Individual]], List[Union[dict, Individual]]]] = 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_file: Optional[Union[Dict[Union[str, FileId], Union[dict, File]], List[Union[dict, File]]]] = empty_dict() + has_data_access_policy: Optional[Union[dict, DataAccessPolicy]] = None + submission_status: Optional[Union[str, "SubmissionStatusEnum"]] = None + submission_date: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, SubmissionId): + self.id = SubmissionId(self.id) + + if self.has_study is not None and not isinstance(self.has_study, Study): + self.has_study = Study(**as_dict(self.has_study)) + + if self.has_project is not None and not isinstance(self.has_project, Project): + self.has_project = Project(**as_dict(self.has_project)) + + self._normalize_inlined_as_list(slot_name="has_sample", slot_type=Sample, key_name="id", keyed=True) + + self._normalize_inlined_as_list(slot_name="has_biospecimen", slot_type=Biospecimen, key_name="id", keyed=True) + + self._normalize_inlined_as_list(slot_name="has_individual", slot_type=Individual, 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=Analysis, key_name="id", keyed=True) + + self._normalize_inlined_as_list(slot_name="has_file", slot_type=File, key_name="id", keyed=True) + + if self.has_data_access_policy is not None and not isinstance(self.has_data_access_policy, DataAccessPolicy): + self.has_data_access_policy = DataAccessPolicy(**as_dict(self.has_data_access_policy)) + + if self.submission_status is not None and not isinstance(self.submission_status, SubmissionStatusEnum): + self.submission_status = SubmissionStatusEnum(self.submission_status) + + if self.submission_date is not None and not isinstance(self.submission_date, str): + self.submission_date = str(self.submission_date) + + super().__post_init__(**kwargs) + + @dataclass class SubmissionStatusMixin(YAMLRoot): """ @@ -2543,6 +2605,9 @@ class slots: slots.has_study = Slot(uri=GHGA.has_study, name="has study", curie=GHGA.curie('has_study'), model_uri=GHGA.has_study, domain=None, range=Optional[Union[str, StudyId]]) +slots.has_project = Slot(uri=GHGA.has_project, name="has project", curie=GHGA.curie('has_project'), + model_uri=GHGA.has_project, domain=None, range=Optional[Union[str, ProjectId]]) + slots.has_publication = Slot(uri=GHGA.has_publication, name="has publication", curie=GHGA.curie('has_publication'), model_uri=GHGA.has_publication, domain=None, range=Optional[Union[str, PublicationId]]) @@ -2903,6 +2968,9 @@ class slots: slots.study_has_analysis = Slot(uri=GHGA.has_analysis, name="study_has analysis", curie=GHGA.curie('has_analysis'), model_uri=GHGA.study_has_analysis, domain=Study, range=Optional[Union[Union[str, AnalysisId], List[Union[str, AnalysisId]]]]) +slots.study_has_project = Slot(uri=GHGA.has_project, name="study_has project", curie=GHGA.curie('has_project'), + model_uri=GHGA.study_has_project, domain=Study, range=Optional[Union[str, ProjectId]]) + slots.study_has_attribute = Slot(uri=GHGA.has_attribute, name="study_has attribute", curie=GHGA.curie('has_attribute'), model_uri=GHGA.study_has_attribute, domain=Study, range=Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]]) @@ -3193,3 +3261,30 @@ class slots: slots.user_role = Slot(uri=GHGA.role, name="user_role", curie=GHGA.curie('role'), model_uri=GHGA.user_role, domain=User, range=Optional[Union[str, "UserRoleEnum"]]) + +slots.submission_has_study = Slot(uri=GHGA.has_study, name="submission_has study", curie=GHGA.curie('has_study'), + model_uri=GHGA.submission_has_study, domain=Submission, range=Optional[Union[dict, Study]]) + +slots.submission_has_project = Slot(uri=GHGA.has_project, name="submission_has project", curie=GHGA.curie('has_project'), + model_uri=GHGA.submission_has_project, domain=Submission, range=Optional[Union[dict, Project]]) + +slots.submission_has_sample = Slot(uri=GHGA.has_sample, name="submission_has sample", curie=GHGA.curie('has_sample'), + model_uri=GHGA.submission_has_sample, domain=Submission, range=Optional[Union[Dict[Union[str, SampleId], Union[dict, Sample]], List[Union[dict, Sample]]]]) + +slots.submission_has_biospecimen = Slot(uri=GHGA.has_biospecimen, name="submission_has biospecimen", curie=GHGA.curie('has_biospecimen'), + model_uri=GHGA.submission_has_biospecimen, domain=Submission, range=Optional[Union[Dict[Union[str, BiospecimenId], Union[dict, Biospecimen]], List[Union[dict, Biospecimen]]]]) + +slots.submission_has_individual = Slot(uri=GHGA.has_individual, name="submission_has individual", curie=GHGA.curie('has_individual'), + model_uri=GHGA.submission_has_individual, domain=Submission, range=Optional[Union[Dict[Union[str, IndividualId], Union[dict, Individual]], List[Union[dict, Individual]]]]) + +slots.submission_has_experiment = Slot(uri=GHGA.has_experiment, name="submission_has experiment", curie=GHGA.curie('has_experiment'), + model_uri=GHGA.submission_has_experiment, domain=Submission, range=Optional[Union[Dict[Union[str, ExperimentId], Union[dict, Experiment]], List[Union[dict, Experiment]]]]) + +slots.submission_has_analysis = Slot(uri=GHGA.has_analysis, name="submission_has analysis", curie=GHGA.curie('has_analysis'), + model_uri=GHGA.submission_has_analysis, domain=Submission, range=Optional[Union[Dict[Union[str, AnalysisId], Union[dict, Analysis]], List[Union[dict, Analysis]]]]) + +slots.submission_has_file = Slot(uri=GHGA.has_file, name="submission_has file", curie=GHGA.curie('has_file'), + model_uri=GHGA.submission_has_file, domain=Submission, range=Optional[Union[Dict[Union[str, FileId], Union[dict, File]], List[Union[dict, File]]]]) + +slots.submission_has_data_access_policy = Slot(uri=GHGA.has_data_access_policy, name="submission_has data access policy", curie=GHGA.curie('has_data_access_policy'), + model_uri=GHGA.submission_has_data_access_policy, domain=Submission, range=Optional[Union[dict, DataAccessPolicy]]) diff --git a/artifacts/rdf/ghga.ttl b/artifacts/rdf/ghga.ttl index 28599b16..89c8452e 100644 --- a/artifacts/rdf/ghga.ttl +++ b/artifacts/rdf/ghga.ttl @@ -55,6 +55,7 @@ <https://w3id.org/GHGA/Sample>, <https://w3id.org/GHGA/SequencingProtocol>, <https://w3id.org/GHGA/Study>, + <https://w3id.org/GHGA/Submission>, <https://w3id.org/GHGA/SubmissionStatusMixin>, <https://w3id.org/GHGA/Technology>, <https://w3id.org/GHGA/User>, @@ -74,22 +75,22 @@ <https://w3id.org/GHGA/submission_status_enum>, <https://w3id.org/GHGA/user_role_enum>, <https://w3id.org/GHGA/vital_status_enum> ; - linkml:generation_date "2021-11-18T09:29:40"^^xsd:dateTime ; + linkml:generation_date "2021-11-23T08:51:00"^^xsd:dateTime ; linkml:id <https://w3id.org/GHGA-Metadata-Schema> ; linkml:imports linkml:types ; linkml:metamodel_version "1.7.0" ; - linkml:prefixes [ linkml:prefix_prefix "EFO" ; - linkml:prefix_reference <http://www.ebi.ac.uk/efo/EFO_> ], - [ linkml:prefix_prefix "linkml" ; - linkml:prefix_reference linkml: ], + linkml:prefixes [ linkml:prefix_prefix "SIO" ; + linkml:prefix_reference <http://semanticscience.org/resource/SIO_> ], [ linkml:prefix_prefix "biolink" ; linkml:prefix_reference <https://w3id.org/biolink/vocab/> ], - [ linkml:prefix_prefix "COB" ; - linkml:prefix_reference <http://purl.obolibrary.org/obo/COB_> ], + [ linkml:prefix_prefix "linkml" ; + linkml:prefix_reference linkml: ], [ linkml:prefix_prefix "GHGA" ; linkml:prefix_reference <https://w3id.org/GHGA/> ], - [ linkml:prefix_prefix "SIO" ; - linkml:prefix_reference <http://semanticscience.org/resource/SIO_> ] ; + [ linkml:prefix_prefix "EFO" ; + linkml:prefix_reference <http://www.ebi.ac.uk/efo/EFO_> ], + [ linkml:prefix_prefix "COB" ; + linkml:prefix_reference <http://purl.obolibrary.org/obo/COB_> ] ; linkml:slots <https://w3id.org/GHGA/abstract>, <https://w3id.org/GHGA/accession>, <https://w3id.org/GHGA/additional_name>, @@ -201,6 +202,7 @@ <https://w3id.org/GHGA/has_parameter>, <https://w3id.org/GHGA/has_parent>, <https://w3id.org/GHGA/has_phenotypic_feature>, + <https://w3id.org/GHGA/has_project>, <https://w3id.org/GHGA/has_protocol>, <https://w3id.org/GHGA/has_publication>, <https://w3id.org/GHGA/has_sample>, @@ -300,10 +302,20 @@ <https://w3id.org/GHGA/study_has_analysis>, <https://w3id.org/GHGA/study_has_attribute>, <https://w3id.org/GHGA/study_has_experiment>, + <https://w3id.org/GHGA/study_has_project>, <https://w3id.org/GHGA/study_has_publication>, <https://w3id.org/GHGA/study_title>, <https://w3id.org/GHGA/study_type>, <https://w3id.org/GHGA/submission_date>, + <https://w3id.org/GHGA/submission_has_analysis>, + <https://w3id.org/GHGA/submission_has_biospecimen>, + <https://w3id.org/GHGA/submission_has_data_access_policy>, + <https://w3id.org/GHGA/submission_has_experiment>, + <https://w3id.org/GHGA/submission_has_file>, + <https://w3id.org/GHGA/submission_has_individual>, + <https://w3id.org/GHGA/submission_has_project>, + <https://w3id.org/GHGA/submission_has_sample>, + <https://w3id.org/GHGA/submission_has_study>, <https://w3id.org/GHGA/submission_status>, <https://w3id.org/GHGA/target_coverage>, <https://w3id.org/GHGA/target_regions>, @@ -328,8 +340,8 @@ <https://w3id.org/GHGA/xref>, <https://w3id.org/GHGA/year_of_birth> ; linkml:source_file "ghga.yaml" ; - linkml:source_file_date "2021-11-18T09:28:38"^^xsd:dateTime ; - linkml:source_file_size 50581 ; + linkml:source_file_date "2021-11-23T08:50:06"^^xsd:dateTime ; + linkml:source_file_size 53312 ; linkml:types <https://w3id.org/GHGA/boolean>, <https://w3id.org/GHGA/date>, <https://w3id.org/GHGA/datetime>, @@ -1462,6 +1474,7 @@ linkml:domain <https://w3id.org/GHGA/Project> ; linkml:domain_of <https://w3id.org/GHGA/Project> ; linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/named_thing_has_attribute> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -1537,6 +1550,7 @@ linkml:domain <https://w3id.org/GHGA/Protocol> ; linkml:domain_of <https://w3id.org/GHGA/Protocol> ; linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/named_thing_has_attribute> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -1852,6 +1866,7 @@ linkml:domain <https://w3id.org/GHGA/Study> ; linkml:domain_of <https://w3id.org/GHGA/Study> ; linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/named_thing_has_attribute> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -1875,6 +1890,20 @@ linkml:slot_uri <https://w3id.org/GHGA/has_experiment> ; linkml:usage_slot_name "has experiment" . +<https://w3id.org/GHGA/study_has_project> a linkml:SlotDefinition ; + skos:definition "The project associated with this Study." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "has project" ; + linkml:definition_uri <https://w3id.org/GHGA/has_project> ; + linkml:domain <https://w3id.org/GHGA/Study> ; + linkml:domain_of <https://w3id.org/GHGA/Study> ; + linkml:is_a <https://w3id.org/GHGA/has_project> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/Study> ; + linkml:range <https://w3id.org/GHGA/Project> ; + linkml:slot_uri <https://w3id.org/GHGA/has_project> ; + linkml:usage_slot_name "has project" . + <https://w3id.org/GHGA/study_has_publication> a linkml:SlotDefinition ; skos:definition "One or more Publication entities associated with this Study." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -1938,6 +1967,153 @@ <https://w3id.org/GHGA/transcriptome_analysis>, <https://w3id.org/GHGA/whole_genome_sequencing> . +<https://w3id.org/GHGA/submission_has_analysis> a linkml:SlotDefinition ; + skos:definition "Information about one or more Analysis entities associated with this submission." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "has analysis" ; + linkml:definition_uri <https://w3id.org/GHGA/has_analysis> ; + linkml:domain <https://w3id.org/GHGA/Submission> ; + linkml:domain_of <https://w3id.org/GHGA/Submission> ; + linkml:inlined true ; + linkml:inlined_as_list true ; + linkml:is_a <https://w3id.org/GHGA/has_analysis> ; + linkml:is_usage_slot true ; + linkml:multivalued true ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/Analysis> ; + linkml:slot_uri <https://w3id.org/GHGA/has_analysis> ; + linkml:usage_slot_name "has analysis" . + +<https://w3id.org/GHGA/submission_has_biospecimen> a linkml:SlotDefinition ; + skos:definition "Information about one or more Biospecimen entities associated with this submission." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "has biospecimen" ; + linkml:definition_uri <https://w3id.org/GHGA/has_biospecimen> ; + linkml:domain <https://w3id.org/GHGA/Submission> ; + linkml:domain_of <https://w3id.org/GHGA/Submission> ; + linkml:inlined true ; + linkml:inlined_as_list true ; + linkml:is_a <https://w3id.org/GHGA/has_biospecimen> ; + linkml:is_usage_slot true ; + linkml:multivalued true ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/Biospecimen> ; + linkml:slot_uri <https://w3id.org/GHGA/has_biospecimen> ; + linkml:usage_slot_name "has biospecimen" . + +<https://w3id.org/GHGA/submission_has_data_access_policy> a linkml:SlotDefinition ; + skos:definition "The Data Access Policy entity that applies to the data associated with this submission." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "has data access policy" ; + linkml:definition_uri <https://w3id.org/GHGA/has_data_access_policy> ; + linkml:domain <https://w3id.org/GHGA/Submission> ; + linkml:domain_of <https://w3id.org/GHGA/Submission> ; + linkml:inlined true ; + linkml:is_a <https://w3id.org/GHGA/has_data_access_policy> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/DataAccessPolicy> ; + linkml:slot_uri <https://w3id.org/GHGA/has_data_access_policy> ; + linkml:usage_slot_name "has data access policy" . + +<https://w3id.org/GHGA/submission_has_experiment> a linkml:SlotDefinition ; + skos:definition "Information about one or more Experiment entities associated with this submission." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "has experiment" ; + linkml:definition_uri <https://w3id.org/GHGA/has_experiment> ; + linkml:domain <https://w3id.org/GHGA/Submission> ; + linkml:domain_of <https://w3id.org/GHGA/Submission> ; + linkml:inlined true ; + linkml:inlined_as_list true ; + linkml:is_a <https://w3id.org/GHGA/has_experiment> ; + linkml:is_usage_slot true ; + linkml:multivalued true ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/Experiment> ; + linkml:slot_uri <https://w3id.org/GHGA/has_experiment> ; + linkml:usage_slot_name "has experiment" . + +<https://w3id.org/GHGA/submission_has_file> a linkml:SlotDefinition ; + skos:definition "Information about one or more File entities associated with this submission." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "has file" ; + linkml:definition_uri <https://w3id.org/GHGA/has_file> ; + linkml:domain <https://w3id.org/GHGA/Submission> ; + linkml:domain_of <https://w3id.org/GHGA/Submission> ; + linkml:inlined true ; + linkml:inlined_as_list true ; + linkml:is_a <https://w3id.org/GHGA/has_file> ; + linkml:is_usage_slot true ; + linkml:multivalued true ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/File> ; + linkml:slot_uri <https://w3id.org/GHGA/has_file> ; + linkml:usage_slot_name "has file" . + +<https://w3id.org/GHGA/submission_has_individual> a linkml:SlotDefinition ; + skos:definition "Information about one or more Individual entities associated with this submission." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "has individual" ; + linkml:definition_uri <https://w3id.org/GHGA/has_individual> ; + linkml:domain <https://w3id.org/GHGA/Submission> ; + linkml:domain_of <https://w3id.org/GHGA/Submission> ; + linkml:inlined true ; + linkml:inlined_as_list true ; + linkml:is_a <https://w3id.org/GHGA/has_individual> ; + linkml:is_usage_slot true ; + linkml:multivalued true ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/Individual> ; + linkml:slot_uri <https://w3id.org/GHGA/has_individual> ; + linkml:usage_slot_name "has individual" . + +<https://w3id.org/GHGA/submission_has_project> a linkml:SlotDefinition ; + skos:definition "Information about a Project entity associated with this submission." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "has project" ; + linkml:definition_uri <https://w3id.org/GHGA/has_project> ; + linkml:domain <https://w3id.org/GHGA/Submission> ; + linkml:domain_of <https://w3id.org/GHGA/Submission> ; + linkml:inlined true ; + linkml:is_a <https://w3id.org/GHGA/has_project> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/Project> ; + linkml:slot_uri <https://w3id.org/GHGA/has_project> ; + linkml:usage_slot_name "has project" . + +<https://w3id.org/GHGA/submission_has_sample> a linkml:SlotDefinition ; + skos:definition "Information about one or more Sample entities associated with this submission." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "has sample" ; + linkml:definition_uri <https://w3id.org/GHGA/has_sample> ; + linkml:domain <https://w3id.org/GHGA/Submission> ; + linkml:domain_of <https://w3id.org/GHGA/Submission> ; + linkml:inlined true ; + linkml:inlined_as_list true ; + linkml:is_a <https://w3id.org/GHGA/has_sample> ; + linkml:is_usage_slot true ; + linkml:multivalued true ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/Sample> ; + linkml:slot_uri <https://w3id.org/GHGA/has_sample> ; + linkml:usage_slot_name "has sample" . + +<https://w3id.org/GHGA/submission_has_study> a linkml:SlotDefinition ; + skos:definition "Information about a Study entities associated with this submission." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "has study" ; + linkml:definition_uri <https://w3id.org/GHGA/has_study> ; + linkml:domain <https://w3id.org/GHGA/Submission> ; + linkml:domain_of <https://w3id.org/GHGA/Submission> ; + linkml:inlined true ; + linkml:is_a <https://w3id.org/GHGA/has_study> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/Study> ; + linkml:slot_uri <https://w3id.org/GHGA/has_study> ; + linkml:usage_slot_name "has study" . + <https://w3id.org/GHGA/submission_status_enum> skos:definition "Enum to capture submission status." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/SubmissionStatusEnum> ; @@ -2895,14 +3071,6 @@ linkml:range <https://w3id.org/GHGA/AnatomicalEntity> ; linkml:slot_uri <https://w3id.org/GHGA/has_anatomical_entity> . -<https://w3id.org/GHGA/has_biospecimen> a linkml:SlotDefinition ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/has_biospecimen> ; - linkml:domain_of <https://w3id.org/GHGA/Sample> ; - linkml:owner <https://w3id.org/GHGA/Sample> ; - linkml:range <https://w3id.org/GHGA/Biospecimen> ; - linkml:slot_uri <https://w3id.org/GHGA/has_biospecimen> . - <https://w3id.org/GHGA/has_children> a linkml:SlotDefinition ; skos:definition "The children of an entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -2991,15 +3159,6 @@ linkml:range <https://w3id.org/GHGA/Protocol> ; linkml:slot_uri <https://w3id.org/GHGA/has_protocol> . -<https://w3id.org/GHGA/has_sample> a linkml:SlotDefinition ; - skos:definition "The sample associated with an entity." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/has_sample> ; - linkml:domain_of <https://w3id.org/GHGA/Experiment> ; - linkml:owner <https://w3id.org/GHGA/Experiment> ; - linkml:range <https://w3id.org/GHGA/Sample> ; - linkml:slot_uri <https://w3id.org/GHGA/has_sample> . - <https://w3id.org/GHGA/has_technology> a linkml:SlotDefinition ; skos:definition "The technology associated with an entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3270,16 +3429,6 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/email> . -<https://w3id.org/GHGA/has_analysis> a linkml:SlotDefinition ; - skos:definition "The analysis associated with an entity." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/has_analysis> ; - linkml:domain_of <https://w3id.org/GHGA/AnalysisDataset>, - <https://w3id.org/GHGA/Study> ; - linkml:owner <https://w3id.org/GHGA/AnalysisDataset> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/has_analysis> . - <https://w3id.org/GHGA/Agent> a linkml:ClassDefinition ; skos:definition "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." ; skos:exactMatch <prov:Agent> ; @@ -3414,8 +3563,7 @@ linkml:definition_uri <https://w3id.org/GHGA/Investigation> ; linkml:is_a <https://w3id.org/GHGA/PlannedProcess> ; linkml:mixins <https://w3id.org/GHGA/DeprecationMixin>, - <https://w3id.org/GHGA/ReleaseStatusMixin>, - <https://w3id.org/GHGA/SubmissionStatusMixin> ; + <https://w3id.org/GHGA/ReleaseStatusMixin> ; linkml:slot_usage [ ] ; linkml:slots <https://w3id.org/GHGA/deprecated>, <https://w3id.org/GHGA/deprecation_date>, @@ -3430,8 +3578,6 @@ <https://w3id.org/GHGA/release_date>, <https://w3id.org/GHGA/release_status>, <https://w3id.org/GHGA/replaced_by>, - <https://w3id.org/GHGA/submission_date>, - <https://w3id.org/GHGA/submission_status>, <https://w3id.org/GHGA/title>, <https://w3id.org/GHGA/type> . @@ -3464,35 +3610,34 @@ linkml:range <https://w3id.org/GHGA/Agent> ; linkml:slot_uri <https://w3id.org/GHGA/has_agent> . -<https://w3id.org/GHGA/has_data_access_policy> a linkml:SlotDefinition ; - skos:definition "Data Access Policy associated with an entity." ; +<https://w3id.org/GHGA/has_biospecimen> a linkml:SlotDefinition ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/has_data_access_policy> ; - linkml:domain_of <https://w3id.org/GHGA/AnalysisDataset>, - <https://w3id.org/GHGA/ExperimentDataset> ; - linkml:owner <https://w3id.org/GHGA/AnalysisDataset> ; - linkml:range <https://w3id.org/GHGA/DataAccessPolicy> ; - linkml:slot_uri <https://w3id.org/GHGA/has_data_access_policy> . + linkml:definition_uri <https://w3id.org/GHGA/has_biospecimen> ; + linkml:domain_of <https://w3id.org/GHGA/Sample>, + <https://w3id.org/GHGA/Submission> ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/Biospecimen> ; + linkml:slot_uri <https://w3id.org/GHGA/has_biospecimen> . -<https://w3id.org/GHGA/has_file> a linkml:SlotDefinition ; - skos:definition "The file associated with an entity." ; +<https://w3id.org/GHGA/has_project> a linkml:SlotDefinition ; + skos:definition "The project associated with an entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/has_file> ; - linkml:domain_of <https://w3id.org/GHGA/Dataset>, - <https://w3id.org/GHGA/Experiment> ; - linkml:owner <https://w3id.org/GHGA/Dataset> ; - linkml:range <https://w3id.org/GHGA/File> ; - linkml:slot_uri <https://w3id.org/GHGA/has_file> . + linkml:definition_uri <https://w3id.org/GHGA/has_project> ; + linkml:domain_of <https://w3id.org/GHGA/Study>, + <https://w3id.org/GHGA/Submission> ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/Project> ; + linkml:slot_uri <https://w3id.org/GHGA/has_project> . -<https://w3id.org/GHGA/has_individual> a linkml:SlotDefinition ; - skos:definition "The subject/individual associated with an entity." ; +<https://w3id.org/GHGA/has_sample> a linkml:SlotDefinition ; + skos:definition "The sample associated with an entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/has_individual> ; - linkml:domain_of <https://w3id.org/GHGA/Biospecimen>, - <https://w3id.org/GHGA/Sample> ; - linkml:owner <https://w3id.org/GHGA/Sample> ; - linkml:range <https://w3id.org/GHGA/Individual> ; - linkml:slot_uri <https://w3id.org/GHGA/has_individual> . + linkml:definition_uri <https://w3id.org/GHGA/has_sample> ; + linkml:domain_of <https://w3id.org/GHGA/Experiment>, + <https://w3id.org/GHGA/Submission> ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/Sample> ; + linkml:slot_uri <https://w3id.org/GHGA/has_sample> . <https://w3id.org/GHGA/key> a linkml:SlotDefinition ; skos:definition "The key of an attribute." ; @@ -3504,6 +3649,24 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/key> . +<https://w3id.org/GHGA/submission_date> a linkml:SlotDefinition ; + skos:definition "The date when submission was completed." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/submission_date> ; + linkml:domain_of <https://w3id.org/GHGA/SubmissionStatusMixin> ; + linkml:owner <https://w3id.org/GHGA/SubmissionStatusMixin> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/submission_date> . + +<https://w3id.org/GHGA/submission_status> a linkml:SlotDefinition ; + skos:definition "The status of submission." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/submission_status> ; + linkml:domain_of <https://w3id.org/GHGA/SubmissionStatusMixin> ; + linkml:owner <https://w3id.org/GHGA/SubmissionStatusMixin> ; + linkml:range <https://w3id.org/GHGA/submission_status_enum> ; + linkml:slot_uri <https://w3id.org/GHGA/submission_status> . + <https://w3id.org/GHGA/value> a linkml:SlotDefinition ; skos:definition "The value of an attribute" ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3550,6 +3713,17 @@ <https://w3id.org/GHGA/named_thing_xref>, <https://w3id.org/GHGA/workflow_step_has_parameter> . +<https://w3id.org/GHGA/has_analysis> a linkml:SlotDefinition ; + skos:definition "The analysis associated with an entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/has_analysis> ; + linkml:domain_of <https://w3id.org/GHGA/AnalysisDataset>, + <https://w3id.org/GHGA/Study>, + <https://w3id.org/GHGA/Submission> ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/has_analysis> . + <https://w3id.org/GHGA/id> a linkml:SlotDefinition ; skos:definition "An identifier that uniquely represents an entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3644,24 +3818,6 @@ linkml:range <https://w3id.org/GHGA/NamedThing> ; linkml:slot_uri <https://w3id.org/GHGA/replaced_by> . -<https://w3id.org/GHGA/submission_date> a linkml:SlotDefinition ; - skos:definition "The date when submission was completed." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/submission_date> ; - linkml:domain_of <https://w3id.org/GHGA/SubmissionStatusMixin> ; - linkml:owner <https://w3id.org/GHGA/SubmissionStatusMixin> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/submission_date> . - -<https://w3id.org/GHGA/submission_status> a linkml:SlotDefinition ; - skos:definition "The status of submission." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/submission_status> ; - linkml:domain_of <https://w3id.org/GHGA/SubmissionStatusMixin> ; - linkml:owner <https://w3id.org/GHGA/SubmissionStatusMixin> ; - linkml:range <https://w3id.org/GHGA/submission_status_enum> ; - linkml:slot_uri <https://w3id.org/GHGA/submission_status> . - <https://w3id.org/GHGA/Family> a linkml:ClassDefinition ; skos:definition "A domestic group, or a number of domestic groups linked through descent (demonstrated or stipulated) from a common ancestor, marriage, or adoption." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3701,15 +3857,38 @@ <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref> . -<https://w3id.org/GHGA/has_experiment> a linkml:SlotDefinition ; - skos:definition "The experiment associated with an entity." ; +<https://w3id.org/GHGA/has_data_access_policy> a linkml:SlotDefinition ; + skos:definition "Data Access Policy associated with an entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/has_experiment> ; - linkml:domain_of <https://w3id.org/GHGA/ExperimentDataset>, - <https://w3id.org/GHGA/Study> ; - linkml:owner <https://w3id.org/GHGA/ExperimentDataset> ; - linkml:range <https://w3id.org/GHGA/Experiment> ; - linkml:slot_uri <https://w3id.org/GHGA/has_experiment> . + linkml:definition_uri <https://w3id.org/GHGA/has_data_access_policy> ; + linkml:domain_of <https://w3id.org/GHGA/AnalysisDataset>, + <https://w3id.org/GHGA/ExperimentDataset>, + <https://w3id.org/GHGA/Submission> ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/DataAccessPolicy> ; + linkml:slot_uri <https://w3id.org/GHGA/has_data_access_policy> . + +<https://w3id.org/GHGA/has_file> a linkml:SlotDefinition ; + skos:definition "The file associated with an entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/has_file> ; + linkml:domain_of <https://w3id.org/GHGA/Dataset>, + <https://w3id.org/GHGA/Experiment>, + <https://w3id.org/GHGA/Submission> ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/File> ; + linkml:slot_uri <https://w3id.org/GHGA/has_file> . + +<https://w3id.org/GHGA/has_individual> a linkml:SlotDefinition ; + skos:definition "The subject/individual associated with an entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/has_individual> ; + linkml:domain_of <https://w3id.org/GHGA/Biospecimen>, + <https://w3id.org/GHGA/Sample>, + <https://w3id.org/GHGA/Submission> ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/Individual> ; + linkml:slot_uri <https://w3id.org/GHGA/has_individual> . <https://w3id.org/GHGA/has_input> a linkml:SlotDefinition ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3752,44 +3931,24 @@ linkml:slots <https://w3id.org/GHGA/data_use_condition_modifier>, <https://w3id.org/GHGA/data_use_condition_permission> . -<https://w3id.org/GHGA/WorkflowParameter> a linkml:ClassDefinition ; - skos:definition "A key/value pair that represents a parameter used in a Workflow Step." ; +<https://w3id.org/GHGA/AnalysisDataset> a linkml:ClassDefinition ; + skos:definition "An Analysis Dataset is a collection of Files generated from one or more Analysis performed on data from one or more Studies." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/WorkflowParameter> ; - linkml:definition_uri <https://w3id.org/GHGA/WorkflowParameter> ; + linkml:class_uri <https://w3id.org/GHGA/AnalysisDataset> ; + linkml:definition_uri <https://w3id.org/GHGA/AnalysisDataset> ; + linkml:is_a <https://w3id.org/GHGA/Dataset> ; linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/workflow_parameter_key>, - <https://w3id.org/GHGA/workflow_parameter_value> . - -<https://w3id.org/GHGA/has_publication> a linkml:SlotDefinition ; - skos:definition "The Publication associated with an entity." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/has_publication> ; - linkml:domain_of <https://w3id.org/GHGA/Dataset>, - <https://w3id.org/GHGA/Investigation>, - <https://w3id.org/GHGA/ResearchActivity>, - <https://w3id.org/GHGA/Study> ; - linkml:owner <https://w3id.org/GHGA/Dataset> ; - linkml:range <https://w3id.org/GHGA/Publication> ; - linkml:slot_uri <https://w3id.org/GHGA/has_publication> . - -<https://w3id.org/GHGA/ExperimentDataset> a linkml:ClassDefinition ; - skos:definition "An Experiment Dataset is a collection of Files linked to one or more Experiments from one or more Studies." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/ExperimentDataset> ; - linkml:definition_uri <https://w3id.org/GHGA/ExperimentDataset> ; - linkml:is_a <https://w3id.org/GHGA/Dataset> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/dataset_description>, + linkml:slots <https://w3id.org/GHGA/analysis_dataset_has_data_access_policy>, + <https://w3id.org/GHGA/analysis_dataset_has_experiment>, + <https://w3id.org/GHGA/analysis_dataset_has_study>, + <https://w3id.org/GHGA/dataset_description>, <https://w3id.org/GHGA/dataset_has_file>, <https://w3id.org/GHGA/dataset_has_publication>, <https://w3id.org/GHGA/dataset_title>, <https://w3id.org/GHGA/dataset_type>, <https://w3id.org/GHGA/deprecated>, <https://w3id.org/GHGA/deprecation_date>, - <https://w3id.org/GHGA/experiment_dataset_has_data_access_policy>, - <https://w3id.org/GHGA/experiment_dataset_has_experiment>, - <https://w3id.org/GHGA/experiment_dataset_has_study>, + <https://w3id.org/GHGA/has_analysis>, <https://w3id.org/GHGA/named_thing_accession>, <https://w3id.org/GHGA/named_thing_creation_date>, <https://w3id.org/GHGA/named_thing_has_attribute>, @@ -3802,24 +3961,23 @@ <https://w3id.org/GHGA/submission_date>, <https://w3id.org/GHGA/submission_status> . -<https://w3id.org/GHGA/AnalysisDataset> a linkml:ClassDefinition ; - skos:definition "An Analysis Dataset is a collection of Files generated from one or more Analysis performed on data from one or more Studies." ; +<https://w3id.org/GHGA/ExperimentDataset> a linkml:ClassDefinition ; + skos:definition "An Experiment Dataset is a collection of Files linked to one or more Experiments from one or more Studies." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/AnalysisDataset> ; - linkml:definition_uri <https://w3id.org/GHGA/AnalysisDataset> ; + linkml:class_uri <https://w3id.org/GHGA/ExperimentDataset> ; + linkml:definition_uri <https://w3id.org/GHGA/ExperimentDataset> ; linkml:is_a <https://w3id.org/GHGA/Dataset> ; linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/analysis_dataset_has_data_access_policy>, - <https://w3id.org/GHGA/analysis_dataset_has_experiment>, - <https://w3id.org/GHGA/analysis_dataset_has_study>, - <https://w3id.org/GHGA/dataset_description>, + linkml:slots <https://w3id.org/GHGA/dataset_description>, <https://w3id.org/GHGA/dataset_has_file>, <https://w3id.org/GHGA/dataset_has_publication>, <https://w3id.org/GHGA/dataset_title>, <https://w3id.org/GHGA/dataset_type>, <https://w3id.org/GHGA/deprecated>, <https://w3id.org/GHGA/deprecation_date>, - <https://w3id.org/GHGA/has_analysis>, + <https://w3id.org/GHGA/experiment_dataset_has_data_access_policy>, + <https://w3id.org/GHGA/experiment_dataset_has_experiment>, + <https://w3id.org/GHGA/experiment_dataset_has_study>, <https://w3id.org/GHGA/named_thing_accession>, <https://w3id.org/GHGA/named_thing_creation_date>, <https://w3id.org/GHGA/named_thing_has_attribute>, @@ -3832,18 +3990,37 @@ <https://w3id.org/GHGA/submission_date>, <https://w3id.org/GHGA/submission_status> . -<https://w3id.org/GHGA/has_study> a linkml:SlotDefinition ; - skos:definition "The study associated with an entity." ; +<https://w3id.org/GHGA/WorkflowParameter> a linkml:ClassDefinition ; + skos:definition "A key/value pair that represents a parameter used in a Workflow Step." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/has_study> ; - linkml:domain_of <https://w3id.org/GHGA/Analysis>, - <https://w3id.org/GHGA/AnalysisDataset>, - <https://w3id.org/GHGA/Experiment>, - <https://w3id.org/GHGA/ExperimentDataset>, - <https://w3id.org/GHGA/Project> ; - linkml:owner <https://w3id.org/GHGA/AnalysisDataset> ; - linkml:range <https://w3id.org/GHGA/Study> ; - linkml:slot_uri <https://w3id.org/GHGA/has_study> . + linkml:class_uri <https://w3id.org/GHGA/WorkflowParameter> ; + linkml:definition_uri <https://w3id.org/GHGA/WorkflowParameter> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/workflow_parameter_key>, + <https://w3id.org/GHGA/workflow_parameter_value> . + +<https://w3id.org/GHGA/has_experiment> a linkml:SlotDefinition ; + skos:definition "The experiment associated with an entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/has_experiment> ; + linkml:domain_of <https://w3id.org/GHGA/ExperimentDataset>, + <https://w3id.org/GHGA/Study>, + <https://w3id.org/GHGA/Submission> ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/Experiment> ; + linkml:slot_uri <https://w3id.org/GHGA/has_experiment> . + +<https://w3id.org/GHGA/has_publication> a linkml:SlotDefinition ; + skos:definition "The Publication associated with an entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/has_publication> ; + linkml:domain_of <https://w3id.org/GHGA/Dataset>, + <https://w3id.org/GHGA/Investigation>, + <https://w3id.org/GHGA/ResearchActivity>, + <https://w3id.org/GHGA/Study> ; + linkml:owner <https://w3id.org/GHGA/Dataset> ; + linkml:range <https://w3id.org/GHGA/Publication> ; + linkml:slot_uri <https://w3id.org/GHGA/has_publication> . <https://w3id.org/GHGA/type> a linkml:SlotDefinition ; skos:definition "The type of an entity." ; @@ -3856,26 +4033,6 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/type> . -<https://w3id.org/GHGA/Project> a linkml:ClassDefinition ; - skos:closeMatch <ncit:C47885> ; - skos:definition "Any specifically defined piece of work that is undertaken or attempted to meet a single requirement." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/Project> ; - linkml:definition_uri <https://w3id.org/GHGA/Project> ; - linkml:is_a <https://w3id.org/GHGA/ResearchActivity> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_type>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref>, - <https://w3id.org/GHGA/project_description>, - <https://w3id.org/GHGA/project_has_attribute>, - <https://w3id.org/GHGA/project_has_publication>, - <https://w3id.org/GHGA/project_has_study>, - <https://w3id.org/GHGA/project_title> . - <https://w3id.org/GHGA/Member> a linkml:ClassDefinition ; skos:definition "Member of an Organization or a Committee." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3931,6 +4088,20 @@ <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref> . +<https://w3id.org/GHGA/has_study> a linkml:SlotDefinition ; + skos:definition "The study associated with an entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/has_study> ; + linkml:domain_of <https://w3id.org/GHGA/Analysis>, + <https://w3id.org/GHGA/AnalysisDataset>, + <https://w3id.org/GHGA/Experiment>, + <https://w3id.org/GHGA/ExperimentDataset>, + <https://w3id.org/GHGA/Project>, + <https://w3id.org/GHGA/Submission> ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/Study> ; + linkml:slot_uri <https://w3id.org/GHGA/has_study> . + <https://w3id.org/GHGA/title> a linkml:SlotDefinition ; skos:definition "The title that describes an entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3945,6 +4116,26 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/title> . +<https://w3id.org/GHGA/Project> a linkml:ClassDefinition ; + skos:closeMatch <ncit:C47885> ; + skos:definition "Any specifically defined piece of work that is undertaken or attempted to meet a single requirement." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/Project> ; + linkml:definition_uri <https://w3id.org/GHGA/Project> ; + linkml:is_a <https://w3id.org/GHGA/ResearchActivity> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_type>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/project_description>, + <https://w3id.org/GHGA/project_has_attribute>, + <https://w3id.org/GHGA/project_has_publication>, + <https://w3id.org/GHGA/project_has_study>, + <https://w3id.org/GHGA/project_title> . + <https://w3id.org/GHGA/Publication> a linkml:ClassDefinition ; 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." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4005,6 +4196,26 @@ <https://w3id.org/GHGA/named_thing_xref>, <https://w3id.org/GHGA/title> . +<https://w3id.org/GHGA/ExperimentProcess> a linkml:ClassDefinition ; + 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." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/ExperimentProcess> ; + linkml:definition_uri <https://w3id.org/GHGA/ExperimentProcess> ; + linkml:is_a <https://w3id.org/GHGA/PlannedProcess> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/experiment_process_has_agent>, + <https://w3id.org/GHGA/experiment_process_has_input>, + <https://w3id.org/GHGA/experiment_process_has_output>, + <https://w3id.org/GHGA/experiment_process_has_protocol>, + <https://w3id.org/GHGA/experiment_process_name>, + <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_has_attribute>, + <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_type>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/Biospecimen> a linkml:ClassDefinition ; 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." ; skos:exactMatch <https://w3id.org/GHGA/OBI:0100051> ; @@ -4027,26 +4238,6 @@ <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref> . -<https://w3id.org/GHGA/ExperimentProcess> a linkml:ClassDefinition ; - 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." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/ExperimentProcess> ; - linkml:definition_uri <https://w3id.org/GHGA/ExperimentProcess> ; - linkml:is_a <https://w3id.org/GHGA/PlannedProcess> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/experiment_process_has_agent>, - <https://w3id.org/GHGA/experiment_process_has_input>, - <https://w3id.org/GHGA/experiment_process_has_output>, - <https://w3id.org/GHGA/experiment_process_has_protocol>, - <https://w3id.org/GHGA/experiment_process_name>, - <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_has_attribute>, - <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_type>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . - <https://w3id.org/GHGA/Analysis> a linkml:ClassDefinition ; skos:altLabel "data analysis" ; skos:definition "An Analysis is a data transformation that transforms input data to output data. The workflow used to achieve this transformation and the individual steps are also captured." ; @@ -4155,49 +4346,6 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/name> . -<https://w3id.org/GHGA/Study> 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 <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/Study> ; - linkml:definition_uri <https://w3id.org/GHGA/Study> ; - linkml:is_a <https://w3id.org/GHGA/Investigation> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/deprecated>, - <https://w3id.org/GHGA/deprecation_date>, - <https://w3id.org/GHGA/has_attribute>, - <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref>, - <https://w3id.org/GHGA/release_date>, - <https://w3id.org/GHGA/release_status>, - <https://w3id.org/GHGA/replaced_by>, - <https://w3id.org/GHGA/study_affiliation>, - <https://w3id.org/GHGA/study_description>, - <https://w3id.org/GHGA/study_has_analysis>, - <https://w3id.org/GHGA/study_has_attribute>, - <https://w3id.org/GHGA/study_has_experiment>, - <https://w3id.org/GHGA/study_has_publication>, - <https://w3id.org/GHGA/study_title>, - <https://w3id.org/GHGA/study_type>, - <https://w3id.org/GHGA/submission_date>, - <https://w3id.org/GHGA/submission_status> . - -<https://w3id.org/GHGA/named_thing_type> a linkml:SlotDefinition ; - skos:definition "The type of an entity." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "type" ; - linkml:definition_uri <https://w3id.org/GHGA/type> ; - linkml:domain <https://w3id.org/GHGA/NamedThing> ; - linkml:domain_of <https://w3id.org/GHGA/NamedThing> ; - linkml:is_a <https://w3id.org/GHGA/type> ; - linkml:is_usage_slot true ; - linkml:owner <https://w3id.org/GHGA/NamedThing> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/type> ; - linkml:usage_slot_name "type" . - <https://w3id.org/GHGA/LibraryPreparationProtocol> a linkml:ClassDefinition ; skos:definition "Information about the library preparation of an Experiment." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4252,6 +4400,20 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/description> . +<https://w3id.org/GHGA/named_thing_type> a linkml:SlotDefinition ; + skos:definition "The type of an entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "type" ; + linkml:definition_uri <https://w3id.org/GHGA/type> ; + linkml:domain <https://w3id.org/GHGA/NamedThing> ; + linkml:domain_of <https://w3id.org/GHGA/NamedThing> ; + linkml:is_a <https://w3id.org/GHGA/type> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/NamedThing> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/type> ; + linkml:usage_slot_name "type" . + <https://w3id.org/GHGA/File> a linkml:ClassDefinition ; skos:altLabel "file object" ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4273,22 +4435,33 @@ <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref> . -<https://w3id.org/GHGA/NamedThing> a linkml:ClassDefinition ; - skos:altLabel "entity", - "named entity", - "object" ; - skos:definition "A databased entity, concept or class. This is a generic class that is the root of all the other classes." ; +<https://w3id.org/GHGA/Study> 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 <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/NamedThing> ; - linkml:definition_uri <https://w3id.org/GHGA/NamedThing> ; + linkml:class_uri <https://w3id.org/GHGA/Study> ; + linkml:definition_uri <https://w3id.org/GHGA/Study> ; + linkml:is_a <https://w3id.org/GHGA/Investigation> ; linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/named_thing_accession>, + linkml:slots <https://w3id.org/GHGA/deprecated>, + <https://w3id.org/GHGA/deprecation_date>, + <https://w3id.org/GHGA/has_attribute>, + <https://w3id.org/GHGA/named_thing_accession>, <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_has_attribute>, <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/release_date>, + <https://w3id.org/GHGA/release_status>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/study_affiliation>, + <https://w3id.org/GHGA/study_description>, + <https://w3id.org/GHGA/study_has_analysis>, + <https://w3id.org/GHGA/study_has_attribute>, + <https://w3id.org/GHGA/study_has_experiment>, + <https://w3id.org/GHGA/study_has_project>, + <https://w3id.org/GHGA/study_has_publication>, + <https://w3id.org/GHGA/study_title>, + <https://w3id.org/GHGA/study_type> . <https://w3id.org/GHGA/Experiment> a linkml:ClassDefinition ; skos:closeMatch <ncit:C42790> ; @@ -4320,12 +4493,27 @@ <https://w3id.org/GHGA/release_date>, <https://w3id.org/GHGA/release_status>, <https://w3id.org/GHGA/replaced_by>, - <https://w3id.org/GHGA/submission_date>, - <https://w3id.org/GHGA/submission_status>, <https://w3id.org/GHGA/technical_replicates>, <https://w3id.org/GHGA/title>, <https://w3id.org/GHGA/type> . +<https://w3id.org/GHGA/NamedThing> a linkml:ClassDefinition ; + skos:altLabel "entity", + "named entity", + "object" ; + skos:definition "A databased entity, concept or class. This is a generic class that is the root of all the other classes." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/NamedThing> ; + linkml:definition_uri <https://w3id.org/GHGA/NamedThing> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_has_attribute>, + <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_type>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_has_attribute> a linkml:SlotDefinition ; skos:definition "Holds one or more Attribute entities that further characterizes this entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4334,6 +4522,7 @@ linkml:domain <https://w3id.org/GHGA/NamedThing> ; linkml:domain_of <https://w3id.org/GHGA/NamedThing> ; linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_attribute> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -4358,6 +4547,40 @@ linkml:slot_uri <https://w3id.org/GHGA/id> ; linkml:usage_slot_name "id" . +<https://w3id.org/GHGA/SequencingProtocol> a linkml:ClassDefinition ; + skos:definition "Information about the sequencing of a sample." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/SequencingProtocol> ; + linkml:definition_uri <https://w3id.org/GHGA/SequencingProtocol> ; + linkml:is_a <https://w3id.org/GHGA/Protocol> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/cell_barcode_offset>, + <https://w3id.org/GHGA/cell_barcode_read>, + <https://w3id.org/GHGA/cell_barcode_size>, + <https://w3id.org/GHGA/flow_cell_id>, + <https://w3id.org/GHGA/flow_cell_type>, + <https://w3id.org/GHGA/instrument_model>, + <https://w3id.org/GHGA/lane_number>, + <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_type>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/protocol_url>, + <https://w3id.org/GHGA/read_length>, + <https://w3id.org/GHGA/read_pair_number>, + <https://w3id.org/GHGA/reference_annotation>, + <https://w3id.org/GHGA/sample_barcode_read>, + <https://w3id.org/GHGA/sequencing_center>, + <https://w3id.org/GHGA/sequencing_protocol_description>, + <https://w3id.org/GHGA/sequencing_protocol_has_attribute>, + <https://w3id.org/GHGA/sequencing_protocol_name>, + <https://w3id.org/GHGA/target_coverage>, + <https://w3id.org/GHGA/umi_barcode_offset>, + <https://w3id.org/GHGA/umi_barcode_read>, + <https://w3id.org/GHGA/umi_barcode_size> . + <https://w3id.org/GHGA/named_thing_accession> a linkml:SlotDefinition ; skos:definition "A unique identifier assigned to an entity for the sole purpose of referring to that entity in a global scope." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4415,40 +4638,6 @@ linkml:slot_uri <https://w3id.org/GHGA/xref> ; linkml:usage_slot_name "xref" . -<https://w3id.org/GHGA/SequencingProtocol> a linkml:ClassDefinition ; - skos:definition "Information about the sequencing of a sample." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/SequencingProtocol> ; - linkml:definition_uri <https://w3id.org/GHGA/SequencingProtocol> ; - linkml:is_a <https://w3id.org/GHGA/Protocol> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/cell_barcode_offset>, - <https://w3id.org/GHGA/cell_barcode_read>, - <https://w3id.org/GHGA/cell_barcode_size>, - <https://w3id.org/GHGA/flow_cell_id>, - <https://w3id.org/GHGA/flow_cell_type>, - <https://w3id.org/GHGA/instrument_model>, - <https://w3id.org/GHGA/lane_number>, - <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_type>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref>, - <https://w3id.org/GHGA/protocol_url>, - <https://w3id.org/GHGA/read_length>, - <https://w3id.org/GHGA/read_pair_number>, - <https://w3id.org/GHGA/reference_annotation>, - <https://w3id.org/GHGA/sample_barcode_read>, - <https://w3id.org/GHGA/sequencing_center>, - <https://w3id.org/GHGA/sequencing_protocol_description>, - <https://w3id.org/GHGA/sequencing_protocol_has_attribute>, - <https://w3id.org/GHGA/sequencing_protocol_name>, - <https://w3id.org/GHGA/target_coverage>, - <https://w3id.org/GHGA/umi_barcode_offset>, - <https://w3id.org/GHGA/umi_barcode_read>, - <https://w3id.org/GHGA/umi_barcode_size> . - <https://w3id.org/GHGA/Sample> 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 <biolink:MaterialSample>, @@ -4475,6 +4664,33 @@ <https://w3id.org/GHGA/type>, <https://w3id.org/GHGA/vital_status_at_sampling> . +<https://w3id.org/GHGA/Submission> a linkml:ClassDefinition ; + 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." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/Submission> ; + linkml:definition_uri <https://w3id.org/GHGA/Submission> ; + linkml:is_a <https://w3id.org/GHGA/NamedThing> ; + linkml:mixins <https://w3id.org/GHGA/SubmissionStatusMixin> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_has_attribute>, + <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_type>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/submission_date>, + <https://w3id.org/GHGA/submission_has_analysis>, + <https://w3id.org/GHGA/submission_has_biospecimen>, + <https://w3id.org/GHGA/submission_has_data_access_policy>, + <https://w3id.org/GHGA/submission_has_experiment>, + <https://w3id.org/GHGA/submission_has_file>, + <https://w3id.org/GHGA/submission_has_individual>, + <https://w3id.org/GHGA/submission_has_project>, + <https://w3id.org/GHGA/submission_has_sample>, + <https://w3id.org/GHGA/submission_has_study>, + <https://w3id.org/GHGA/submission_status> . + <https://w3id.org/GHGA/Individual> a linkml:ClassDefinition ; skos:altLabel "patient", "subject" ; diff --git a/artifacts/shex/ghga.shex b/artifacts/shex/ghga.shex index ab099f71..c564e219 100644 --- a/artifacts/shex/ghga.shex +++ b/artifacts/shex/ghga.shex @@ -372,8 +372,6 @@ linkml:Nodeidentifier NONLITERAL CLOSED { ( $<Investigation_tes> ( &<PlannedProcess_tes> ; rdf:type [ <PlannedProcess> ] ? ; - &<SubmissionStatusMixin_tes> ; - rdf:type [ <SubmissionStatusMixin> ] ? ; &<ReleaseStatusMixin_tes> ; rdf:type [ <ReleaseStatusMixin> ] ? ; &<DeprecationMixin_tes> ; @@ -382,8 +380,6 @@ linkml:Nodeidentifier NONLITERAL <description> @linkml:String ? ; <type> @linkml:String ? ; <has_publication> @<Publication> ? ; - <submission_status> @<SubmissionStatusEnum> ? ; - <submission_date> @linkml:String ? ; <release_status> @<ReleaseStatusEnum> ? ; <release_date> @linkml:String ? ; <deprecated> @linkml:Boolean ? ; @@ -452,7 +448,7 @@ linkml:Nodeidentifier NONLITERAL rdf:type [ <NamedThing> ] ) } OR @<Agent> OR @<BiologicalQuality> OR @<Committee> OR @<InformationContentEntity> OR @<MaterialEntity> OR @<Person> OR - @<PlannedProcess> + @<PlannedProcess> OR @<Submission> ) <Person> ( @@ -608,6 +604,7 @@ linkml:Nodeidentifier NONLITERAL <has_publication> @<Publication> * ; <has_experiment> @<Experiment> * ; <has_analysis> @<Analysis> * ; + <has_project> @<Project> ? ; <has_attribute> @<Attribute> * ; <title> @linkml:String ; <description> @linkml:String ; @@ -617,6 +614,27 @@ linkml:Nodeidentifier NONLITERAL ) } +<Submission> CLOSED { + ( $<Submission_tes> ( &<NamedThing_tes> ; + rdf:type [ <NamedThing> ] ? ; + &<SubmissionStatusMixin_tes> ; + rdf:type [ <SubmissionStatusMixin> ] ? ; + <has_study> @<Study> ? ; + <has_project> @<Project> ? ; + <has_sample> @<Sample> * ; + <has_biospecimen> @<Biospecimen> * ; + <has_individual> @<Individual> * ; + <has_experiment> @<Experiment> * ; + <has_analysis> @<Analysis> * ; + <has_file> @<File> * ; + <has_data_access_policy> @<DataAccessPolicy> ? ; + <submission_status> @<SubmissionStatusEnum> ? ; + <submission_date> @linkml:String ? + ) ; + rdf:type [ <Submission> ] + ) +} + <SubmissionStatusMixin> { ( $<SubmissionStatusMixin_tes> ( <submission_status> @<SubmissionStatusEnum> ? ; <submission_date> @linkml:String ? diff --git a/artifacts/sql/ghga.sql b/artifacts/sql/ghga.sql index 6e9045be..731e1e7b 100644 --- a/artifacts/sql/ghga.sql +++ b/artifacts/sql/ghga.sql @@ -541,8 +541,6 @@ CREATE TABLE investigation ( description TEXT, type TEXT, has_publication TEXT, - submission_status submission_status_enum, - submission_date TEXT, release_status release_status_enum, release_date TEXT, deprecated BOOLEAN, @@ -572,8 +570,6 @@ CREATE TABLE study ( accession TEXT, creation_date TEXT, update_date TEXT, - submission_status submission_status_enum, - submission_date TEXT, release_status release_status_enum, release_date TEXT, deprecated BOOLEAN, @@ -582,12 +578,14 @@ CREATE TABLE study ( has_publication TEXT, has_experiment TEXT, has_analysis TEXT, + has_project TEXT, has_attribute TEXT, title TEXT NOT NULL, description TEXT NOT NULL, type study_type_enum NOT NULL, PRIMARY KEY (id), - FOREIGN KEY(replaced_by) REFERENCES named_thing (id) + FOREIGN KEY(replaced_by) REFERENCES named_thing (id), + FOREIGN KEY(has_project) REFERENCES project (id) ); CREATE TABLE workflow_parameter ( @@ -986,8 +984,6 @@ CREATE TABLE experiment ( title TEXT, type TEXT, has_publication TEXT, - submission_status submission_status_enum, - submission_date TEXT, release_status release_status_enum, release_date TEXT, deprecated BOOLEAN, @@ -1010,6 +1006,30 @@ CREATE TABLE experiment ( FOREIGN KEY(has_technology) REFERENCES technology (id) ); +CREATE TABLE submission ( + id TEXT NOT NULL, + accession TEXT, + type TEXT, + has_attribute TEXT, + creation_date TEXT, + update_date TEXT, + has_study TEXT, + has_project TEXT, + has_sample TEXT, + has_biospecimen TEXT, + has_individual TEXT, + has_experiment TEXT, + has_analysis TEXT, + has_file TEXT, + has_data_access_policy TEXT, + submission_status submission_status_enum, + submission_date TEXT, + PRIMARY KEY (id), + FOREIGN KEY(has_study) REFERENCES study (id), + FOREIGN KEY(has_project) REFERENCES project (id), + FOREIGN KEY(has_data_access_policy) REFERENCES data_access_policy (id) +); + CREATE TABLE analysis_xref ( backref_id TEXT, xref TEXT, @@ -1073,6 +1093,13 @@ CREATE TABLE experiment_xref ( FOREIGN KEY(backref_id) REFERENCES experiment (id) ); +CREATE TABLE submission_xref ( + backref_id TEXT, + xref TEXT, + PRIMARY KEY (backref_id, xref), + FOREIGN KEY(backref_id) REFERENCES submission (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 f5532158..3411d90a 100644 --- a/artifacts/sql/ghga_models.py +++ b/artifacts/sql/ghga_models.py @@ -273,8 +273,6 @@ Column('title', Text), Column('type', Text), Column('has_publication', Text, ForeignKey('publication.id')), - Column('submission_status', Text), - Column('submission_date', Text), Column('release_status', Text), Column('release_date', Text), Column('deprecated', Text), @@ -390,8 +388,6 @@ Column('description', Text), Column('type', Text), Column('has_publication', Text, ForeignKey('publication.id')), - Column('submission_status', Text), - Column('submission_date', Text), Column('release_status', Text), Column('release_date', Text), Column('deprecated', Text), @@ -582,8 +578,6 @@ Column('accession', Text), Column('creation_date', Text), Column('update_date', Text), - Column('submission_status', Text), - Column('submission_date', Text), Column('release_status', Text), Column('release_date', Text), Column('deprecated', Text), @@ -592,11 +586,31 @@ Column('has_publication', Text), Column('has_experiment', Text), Column('has_analysis', Text), + Column('has_project', Text, ForeignKey('project.id')), Column('has_attribute', Text), Column('title', Text), Column('description', Text), Column('type', Text), ) +tbl_submission = Table('submission', metadata, + Column('id', Text, primary_key=True), + Column('accession', Text), + Column('type', Text), + Column('has_attribute', Text), + Column('creation_date', Text), + Column('update_date', Text), + Column('has_study', Text, ForeignKey('study.id')), + Column('has_project', Text, ForeignKey('project.id')), + Column('has_sample', Text), + Column('has_biospecimen', Text), + Column('has_individual', Text), + Column('has_experiment', Text), + Column('has_analysis', Text), + Column('has_file', Text), + Column('has_data_access_policy', Text, ForeignKey('data_access_policy.id')), + Column('submission_status', Text), + Column('submission_date', Text), +) tbl_technology = Table('technology', metadata, Column('id', Text, primary_key=True), Column('accession', Text), @@ -807,6 +821,10 @@ Column('backref_id', Text, ForeignKey('study.id'), primary_key=True), Column('affiliation', Text, primary_key=True), ) +tbl_submission_xref = Table('submission_xref', metadata, + Column('backref_id', Text, ForeignKey('submission.id'), primary_key=True), + Column('xref', Text, primary_key=True), +) tbl_technology_xref = Table('technology_xref', metadata, Column('backref_id', Text, ForeignKey('technology.id'), primary_key=True), Column('xref', Text, primary_key=True), @@ -933,6 +951,8 @@ }) mapper_registry.map_imperatively(Study, tbl_study, properties={ }) +mapper_registry.map_imperatively(Submission, tbl_submission, properties={ +}) mapper_registry.map_imperatively(Technology, tbl_technology, properties={ }) mapper_registry.map_imperatively(User, tbl_user, properties={ From eff1a1bc38755d39046555f64f93e3b96795ea62 Mon Sep 17 00:00:00 2001 From: deepakunni3 <deepak.unni3@gmail.com> Date: Tue, 23 Nov 2021 11:12:39 +0100 Subject: [PATCH 07/16] Remove duplicated slots and tidy up --- src/schema/ghga.yaml | 100 +++++++++++++++++++++---------------------- 1 file changed, 48 insertions(+), 52 deletions(-) diff --git a/src/schema/ghga.yaml b/src/schema/ghga.yaml index db98b9b7..5c47f04e 100644 --- a/src/schema/ghga.yaml +++ b/src/schema/ghga.yaml @@ -117,7 +117,6 @@ classes: slots: - title - description - - type - has publication exact_mappings: - SIO:000747 @@ -196,11 +195,9 @@ classes: being studied. slots: - affiliation - - has publication - has experiment - has analysis - has project - - has attribute slot_usage: title: description: >- @@ -256,8 +253,6 @@ classes: close_mappings: - NCIT:C42790 slots: - - name - - description - biological replicates - technical replicates - experimental replicates @@ -267,7 +262,7 @@ classes: - has file - has experiment process slot_usage: - name: + title: description: >- Name for the experiment (eg: GHGAE_PBMC_RNAseq). required: true @@ -307,15 +302,16 @@ classes: to a File via an assay. The Experiment Process also keeps track of the Protocol used and the Agent that is running the experiment. slots: - - name + - title - has input - has protocol - has agent - has output slot_usage: - name: + title: description: >- - Explanation of the step(s) involved in performing the experiment until Sequencing part + A descriptive title that explains the step(s) involved in performing the experiment + leading up to the sequencing of the sample and generation of raw data from the instrument. (eg: Sample extraction -> Target Enrichment) has input: description: >- @@ -336,13 +332,40 @@ classes: # TODO: what happens when we want to represent multiple samples via ExperimentProcess? range: file + protocol: + is_a: information content entity + aliases: ['library protocol', 'experiment protocol'] + description: >- + 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. + slots: + - name + - description + - url + exact_mappings: + - OBI:0000272 + close_mappings: + - NCIT:C41111 + slot_usage: + name: + description: >- + Name of the Protocol. + description: + description: >- + Detailed description of the Protocol. + url: + description: >- + URL for the resource that describes this Protocol. + has attribute: + description: >- + One or more attributes that further characterizes this Protocol. + library preparation protocol: is_a: protocol description: >- Information about the library preparation of an Experiment. slots: - - name - - description - library name - library layout - library type @@ -356,8 +379,6 @@ classes: - end bias - target regions - rnaseq strandedness - - has attribute - - description slot_usage: name: description: >- @@ -376,8 +397,6 @@ classes: description: >- Information about the sequencing of a sample. slots: - - name - - description - sequencing center - instrument model - read length @@ -394,7 +413,6 @@ classes: - cell barcode offset - cell barcode size - sample barcode read - - has attribute slot_usage: name: description: >- @@ -406,36 +424,6 @@ classes: description: >- One or more attributes that further characterizes this Sequencing Protocol. - protocol: - is_a: information content entity - aliases: ['library protocol', 'experiment protocol'] - description: >- - 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. - slots: - - name - - description - - url - - has attribute - exact_mappings: - - OBI:0000272 - close_mappings: - - NCIT:C41111 - slot_usage: - name: - description: >- - Name of the Protocol. - description: - description: >- - Detailed description of the Protocol. - url: - description: >- - URL for the resource that describes this Protocol. - has attribute: - description: >- - One or more attributes that further characterizes this Protocol. - agent: is_a: named thing description: >- @@ -565,7 +553,6 @@ classes: - biolink:MaterialSample slots: - name - - type - description - vital status at sampling - tissue #TODO @@ -702,14 +689,14 @@ classes: from a common ancestor, marriage, or adoption. slots: - has member - - proband + - has proband slot_usage: has member: description: >- One or more Individuals that collectively define this Family. multivalued: true range: individual - proband: + has proband: description: >- The Individual that is reported to have a disorder which results in the Family being brought into a Study. @@ -833,7 +820,6 @@ classes: dataset: is_a: information content entity mixins: - - submission status mixin - release status mixin - deprecation mixin description: >- @@ -1355,27 +1341,35 @@ slots: range: file has input: + description: The input to a Planned Process. range: file has output: + description: The output of a Planned Process entity. range: file has agent: + description: A person or an entity that is performing a Planned Process entity. range: agent has workflow: + description: The Workflow entity associated wtih a Planned Process entity. range: workflow has workflow step: + description: The individual workflow step that with other workflow step(s) collectively defines a Workflow entity. range: workflow step has parameter: + description: The parameter(s) associated with a Workflow Step entity. range: workflow parameter has dataset: + description: The Dataset associated with an entity. range: dataset has biospecimen: + description: The biospecimen associated with an entity. range: biospecimen has individual: @@ -1407,9 +1401,11 @@ slots: description: Data Use Condition entities that are associated with an entity. role: + description: The role that a user has within GHGA. range: user_role_enum - proband: + has proband: + description: The Individual that is reported to have a disorder in a Family. range: individual permission: @@ -1426,7 +1422,7 @@ slots: sex: description: >- The assemblage of physical properties or qualities - by which male is distinguished from female.[NCI] + by which male is distinguished from female. [NCI] range: biological_sex_enum age: From c1a8327ee02b71199d93d652e09b97dd6469cd6f Mon Sep 17 00:00:00 2001 From: deepakunni3 <deepak.unni3@gmail.com> Date: Tue, 23 Nov 2021 11:51:21 +0100 Subject: [PATCH 08/16] Set slots to be inlined where applicable Marking slots as inlined is required for proper JSONSchema generation --- src/schema/ghga.yaml | 196 +++++++++++++++++++++++++++++++++---------- 1 file changed, 150 insertions(+), 46 deletions(-) diff --git a/src/schema/ghga.yaml b/src/schema/ghga.yaml index 5c47f04e..d9d36135 100644 --- a/src/schema/ghga.yaml +++ b/src/schema/ghga.yaml @@ -56,6 +56,7 @@ classes: Holds one or more Attribute entities that further characterizes this entity. range: attribute multivalued: true + inlined: true inlined_as_list: true creation date: description: >- @@ -169,23 +170,25 @@ classes: description: >- Short textual description of the project (Some information on the protocol, sample used and collected etc) - required: true + required: true has publication: description: >- One or more Publication entities associated with this Project. - multivalued: true range: publication + multivalued: true + inlined: true + inlined_as_list: true has study: description: >- One or more Study entities associated with this Project. - multivalued: true range: experiment + multivalued: true + inlined: true + inlined_as_list: true has attribute: description: >- Custom attributes for the Project (eg: Cancer - Colon cancer, prostrate cancer, blood cancer etc) - multivalued: true - range: attribute study: is_a: investigation @@ -220,27 +223,33 @@ classes: has publication: description: >- One or more Publication entities associated with this Study. - multivalued: true range: publication + multivalued: true + inlined: true + inlined_as_list: true has experiment: description: >- One or more Experiment entities associated with this Study. - multivalued: true range: experiment + multivalued: true + inlined: true + inlined_as_list: true has analysis: description: >- One or more Analysis entities associated with this Study. - multivalued: true range: analysis + multivalued: true + inlined: true + inlined_as_list: true has project: description: The project associated with this Study. range: project + inlined: true + inlined_as_list: false has attribute: description: >- Custom key/value pairs that further characterizes the Study. (e.g.: approaches - single-cell, bulk etc) - multivalued: true - range: attribute experiment: is_a: investigation @@ -273,27 +282,37 @@ classes: has study: description: >- The Study entity associated with this Experiment. - required: true range: study + required: true + inlined: true + inlined_as_list: false has sample: description: >- The Sample entity associated with this Experiment. - required: true range: sample + required: true + inlined: true + inlined_as_list: false has technology: description: >- The Technology entity associated with this Experiment. range: technology + inlined: true + inlined_as_list: false has file: description: >- One or more Files entities that are generated as output of this Experiment. - multivalued: true range: file + multivalued: true + inlined: true + inlined_as_list: true has experiment process: description: >- One or more Experiment Processes entities associated with this Experiment. - multivalued: true range: experiment process + multivalued: true + inlined: true + inlined_as_list: true experiment process: is_a: planned process @@ -316,21 +335,29 @@ classes: has input: description: >- The input to the Experiment Process. Usually a Sample entity. - range: sample + range: sample + inlined: true + inlined_as_list: false has protocol: description: >- The Protocol entity used by this Experiment Process. range: protocol + inlined: true + inlined_as_list: false has agent: description: >- The Agent - a software, institution, or human - that is executing or responsible for executing the Experiment Process. range: agent + inlined: true + inlined_as_list: false has output: description: >- The output of this Experiment Process. Usually a File entity. # TODO: what happens when we want to represent multiple samples via ExperimentProcess? range: file + inlined: true + inlined_as_list: false protocol: is_a: information content entity @@ -466,8 +493,10 @@ classes: has parameter: description: >- One or more parameters that are associated with this Workflow Step. - multivalued: true range: workflow parameter + multivalued: true + inlined: true + inlined_as_list: true workflow parameter: description: >- @@ -503,6 +532,8 @@ classes: description: >- The Individual entity from which this Biospecimen was derived. range: individual + inlined: true + inlined_as_list: false has anatomical entity: description: >- The Anatomical entity, that represents the site, from which the Biospecimen was retrieved. @@ -510,6 +541,8 @@ classes: For example, 'UBERON:0008307' indicates that the Biospecimen was extracted from the 'Heart Endothelium' of an Individual. range: anatomical entity + inlined: true + inlined_as_list: false broad_mappings: - EFO:0000635 has disease: @@ -519,6 +552,9 @@ classes: For example, 'MONDO:0003742' indicates that the Individual - from which the Biospecimen was extracted from - suffers from 'Heart Fibrosarcoma'. range: disease + multivalued: true + inlined: true + inlined_as_list: true has phenotypic feature: description: >- The Phenotypic Feature entity that is associated with this Biospecimen at the time of retrieval @@ -526,6 +562,9 @@ classes: For example, 'HP:0100244' indicates that the Individual - from which the Biospecimen was extracted from - exhibits 'Fibrosarcoma' as one of its phenotype. range: phenotypic feature + multivalued: true + inlined: true + inlined_as_list: true disease or phenotypic feature: is_a: biological quality @@ -588,8 +627,10 @@ classes: has individual: description: >- The Individual from which this Sample was derived from. - required: true range: individual + required: true + inlined: true + inlined_as_list: false xref: description: >- One or more cross-references for this Sample. For example, this Sample @@ -598,6 +639,9 @@ classes: has biospecimen: description: >- The Biospecimen from which this Sample was prepared from. + range: biospecimen + inlined: true + inlined_as_list: false person: is_a: named thing @@ -663,8 +707,16 @@ classes: Individual is from 'Western Europe' region. has parent: description: One or more parent for this Individual. + range: individual + multivalued: true + inlined: true + inlined_as_list: true has children: description: One or more children for this Individual. + range: individual + multivalued: true + inlined: true + inlined_as_list: true donor: is_a: individual @@ -694,13 +746,17 @@ classes: has member: description: >- One or more Individuals that collectively define this Family. - multivalued: true range: individual + multivalued: true + inlined: true + inlined_as_list: true has proband: description: >- The Individual that is reported to have a disorder which results in the Family being brought into a Study. range: individual + inlined: true + inlined_as_list: false cohort: is_a: population @@ -713,8 +769,10 @@ classes: has member: description: >- One or more Individuals that collectively define this Cohort. - multivalued: true range: individual + multivalued: true + inlined: true + inlined_as_list: true file: is_a: information content entity @@ -764,25 +822,36 @@ classes: has input: description: >- The input data File entities used in the Analysis. - multivalued: true range: file + multivalued: true + inlined: true + inlined_as_list: true has study: description: >- The Study entity associated with this Analysis. range: study + inlined: true + inlined_as_list: false has workflow: description: >- The Workflow entity associated with this Analysis. + range: workflow + inlined: true + inlined_as_list: false has analysis process: description: >- One or more Analysis Process entities associated with this Analysis. - multivalued: true range: analysis process + multivalued: true + inlined: true + inlined_as_list: true has output: description: >- The output data File entities generated by this Analysis. - multivalued: true range: file + multivalued: true + inlined: true + inlined_as_list: true analysis process: is_a: planned process @@ -800,22 +869,31 @@ classes: has input: description: >- The input data File entities used in the Analysis Process. - multivalued: true range: file + multivalued: true + inlined: true + inlined_as_list: true has workflow step: description: >- Workflow Step entity that performs a set of operations on the input data Files to generate a set of output data Files. range: workflow step + inlined: true + inlined_as_list: false has agent: description: >- The Agent - a software, institution, or human - that is executing or responsible for executing the workflow. range: agent + inlined: true + inlined_as_list: false has output: description: >- The output data File entities generated by the Analysis Process. range: file + multivalued: true + inlined: true + inlined_as_list: true dataset: is_a: information content entity @@ -843,11 +921,15 @@ classes: One or more File entities that collectively are part of this Dataset. required: true multivalued: true + inlined: true + inlined_as_list: true has publication: description: >- One or more Publication entities associated with this Dataset. - multivalued: true range: publication + multivalued: true + inlined: true + inlined_as_list: true experiment dataset: is_a: dataset @@ -862,21 +944,27 @@ classes: has data access policy: description: >- The Data Access Policy that applies to this Dataset. - required: true - multivalued: true range: data access policy + multivalued: true + required: true + inlined: true + inlined_as_list: true has study: description: >- One or more Study entities that are referenced by this Dataset. - required: true - multivalued: true range: study + multivalued: true + required: true + inlined: true + inlined_as_list: true has experiment: description: >- One or more Experiment entities that are referenced by this Dataset. - required: true - multivalued: true range: experiment + multivalued: true + required: true + inlined: true + inlined_as_list: true analysis dataset: is_a: dataset @@ -891,21 +979,27 @@ classes: has data access policy: description: >- The Data Access Policy that applies to this Dataset. - required: true - multivalued: true range: data access policy + multivalued: true + required: true + inlined: true + inlined_as_list: true has study: description: >- One or more Study entities that are referenced by this Dataset. - required: true - multivalued: true range: study + multivalued: true + required: true + inlined: true + inlined_as_list: true has experiment: description: >- One or more Analysis entities that are referenced by this Dataset. - required: true - multivalued: true range: analysis + multivalued: true + required: true + inlined: true + inlined_as_list: true aggregate dataset: is_a: dataset @@ -918,8 +1012,10 @@ classes: has dataset: description: >- One or more Datasets that constitutes this Aggregate Dataset. - multivalued: true range: dataset + multivalued: true + inlined: true + inlined_as_list: true data use condition: description: >- @@ -968,13 +1064,17 @@ classes: has data access committee: description: >- The Data Access Committee linked to this policy. - required: true range: data access committee + required: true + inlined: true + inlined_as_list: false has data use condition: description: >- Data Use Condition entities that are associated with the Data Access Policy. - multivalued: true range: data use condition + multivalued: true + inlined: true + inlined_as_list: true data access committee: is_a: committee @@ -994,11 +1094,15 @@ classes: description: >- The main contact for the Data Access Committee. range: member + inlined: true + inlined_as_list: false has member: description: >- All the members that are part of this Data Access Committee. - multivalued: true range: member + multivalued: true + inlined: true + inlined_as_list: true committee: is_a: named thing @@ -1161,36 +1265,42 @@ classes: Information about one or more Sample entities associated with this submission. range: sample multivalued: true + inlined: true inlined_as_list: true has biospecimen: description: >- Information about one or more Biospecimen entities associated with this submission. range: biospecimen multivalued: true + inlined: true inlined_as_list: true has individual: description: >- Information about one or more Individual entities associated with this submission. range: individual multivalued: true + inlined: true inlined_as_list: true has experiment: description: >- Information about one or more Experiment entities associated with this submission. range: experiment multivalued: true + inlined: true inlined_as_list: true has analysis: description: >- Information about one or more Analysis entities associated with this submission. range: analysis multivalued: true + inlined: true inlined_as_list: true has file: description: >- Information about one or more File entities associated with this submission. range: file multivalued: true + inlined: true inlined_as_list: true has data access policy: description: >- @@ -1282,13 +1392,8 @@ slots: has attribute: description: Key/value pairs corresponding to an entity. - multivalued: true range: attribute - parameters: - description: Paramaters associated with a Workflow Step entity. - multivalued: true - description: description: Description of an entity. @@ -1485,7 +1590,6 @@ slots: has member: description: The members associated with a committee. - multivalued: true telephone: description: The telephone number associated with a person. From 1d6be97020cd5bf11f7de25bcb190f4f47d08a32 Mon Sep 17 00:00:00 2001 From: GitHub Action <action@github.com> Date: Tue, 23 Nov 2021 14:05:10 +0000 Subject: [PATCH 09/16] Autogenerate artifacts --- artifacts/graphql/ghga.graphql | 51 +- artifacts/jsonschema/ghga.schema.json | 229 ++++---- artifacts/owl/ghga.owl.ttl | 686 +++++++++++----------- artifacts/python/ghga.py | 496 +++++++--------- artifacts/rdf/ghga.ttl | 808 ++++++++++++++------------ artifacts/shex/ghga.shex | 41 +- artifacts/sql/ghga.sql | 127 ++-- artifacts/sql/ghga_models.py | 53 +- 8 files changed, 1206 insertions(+), 1285 deletions(-) diff --git a/artifacts/graphql/ghga.graphql b/artifacts/graphql/ghga.graphql index a523468a..d7d5c716 100644 --- a/artifacts/graphql/ghga.graphql +++ b/artifacts/graphql/ghga.graphql @@ -24,8 +24,6 @@ type AggregateDataset hasFile: [File]! hasPublication: [Publication] type: String! - submissionStatus: SubmissionStatusEnum - submissionDate: String releaseStatus: ReleaseStatusEnum releaseDate: String deprecated: Boolean @@ -65,8 +63,6 @@ type AnalysisDataset hasFile: [File]! hasPublication: [Publication] type: String! - submissionStatus: SubmissionStatusEnum - submissionDate: String releaseStatus: ReleaseStatusEnum releaseDate: String deprecated: Boolean @@ -91,7 +87,7 @@ type AnalysisProcess hasInput: [File] hasWorkflowStep: WorkflowStep hasAgent: Agent - hasOutput: File + hasOutput: [File] } type AnatomicalEntity @@ -137,8 +133,8 @@ type Biospecimen description: String hasIndividual: Individual hasAnatomicalEntity: AnatomicalEntity - hasDisease: Disease - hasPhenotypicFeature: PhenotypicFeature + hasDisease: [Disease] + hasPhenotypicFeature: [PhenotypicFeature] } type CellLine @@ -228,7 +224,7 @@ type DataUseCondition modifier: String } -type Dataset implements SubmissionStatusMixin, ReleaseStatusMixin, DeprecationMixin +type Dataset implements ReleaseStatusMixin, DeprecationMixin { id: String! accession: String @@ -241,8 +237,6 @@ type Dataset implements SubmissionStatusMixin, ReleaseStatusMixin, DeprecationMi hasFile: [File]! hasPublication: [Publication] type: String! - submissionStatus: SubmissionStatusEnum - submissionDate: String releaseStatus: ReleaseStatusEnum releaseDate: String deprecated: Boolean @@ -303,8 +297,8 @@ type Donor geographicalRegion: String ethnicity: String ancestry: String - hasParent: String - hasChildren: String + hasParent: [Individual] + hasChildren: [Individual] } type Experiment @@ -312,19 +306,16 @@ type Experiment id: String! accession: String xref: [String] + type: String hasAttribute: [Attribute] creationDate: String updateDate: String - title: String - type: String hasPublication: Publication releaseStatus: ReleaseStatusEnum releaseDate: String deprecated: Boolean deprecationDate: String replacedBy: NamedThing - name: String! - description: String! biologicalReplicates: String technicalReplicates: String experimentalReplicates: String @@ -333,6 +324,8 @@ type Experiment hasTechnology: Technology hasFile: [File] hasExperimentProcess: [ExperimentProcess] + title: String! + description: String! } type ExperimentDataset @@ -348,8 +341,6 @@ type ExperimentDataset hasFile: [File]! hasPublication: [Publication] type: String! - submissionStatus: SubmissionStatusEnum - submissionDate: String releaseStatus: ReleaseStatusEnum releaseDate: String deprecated: Boolean @@ -369,7 +360,7 @@ type ExperimentProcess hasAttribute: [Attribute] creationDate: String updateDate: String - name: String + title: String hasInput: Sample hasProtocol: Protocol hasAgent: Agent @@ -387,7 +378,7 @@ type Family updateDate: String name: String hasMember: [Individual] - proband: Individual + hasProband: Individual } type File @@ -427,8 +418,8 @@ type Individual geographicalRegion: String ethnicity: String ancestry: String - hasParent: String - hasChildren: String + hasParent: [Individual] + hasChildren: [Individual] } type InformationContentEntity @@ -447,12 +438,12 @@ type Investigation implements ReleaseStatusMixin, DeprecationMixin id: String! accession: String xref: [String] + type: String hasAttribute: [Attribute] creationDate: String updateDate: String title: String description: String - type: String hasPublication: Publication releaseStatus: ReleaseStatusEnum releaseDate: String @@ -470,8 +461,6 @@ type LibraryPreparationProtocol creationDate: String updateDate: String url: String - name: String! - description: String! libraryName: String libraryLayout: String libraryType: String @@ -485,6 +474,8 @@ type LibraryPreparationProtocol endBias: String targetRegions: String rnaseqStrandedness: String + name: String! + description: String! hasAttribute: [Attribute] } @@ -647,7 +638,6 @@ type Sample creationDate: String updateDate: String name: String! - type: String description: String vitalStatusAtSampling: String tissue: String! @@ -655,6 +645,7 @@ type Sample storage: String hasIndividual: Individual! hasBiospecimen: Biospecimen + type: CaseControlEnum xref: [String] } @@ -667,8 +658,6 @@ type SequencingProtocol creationDate: String updateDate: String url: String - name: String - description: String sequencingCenter: String instrumentModel: String readLength: String @@ -685,6 +674,8 @@ type SequencingProtocol cellBarcodeOffset: String cellBarcodeSize: String sampleBarcodeRead: String + name: String + description: String hasAttribute: [Attribute] } @@ -701,14 +692,14 @@ type Study deprecationDate: String replacedBy: NamedThing affiliation: [String]! - hasPublication: [Publication] hasExperiment: [Experiment] hasAnalysis: [Analysis] hasProject: Project - hasAttribute: [Attribute] title: String! description: String! type: StudyTypeEnum! + hasPublication: [Publication] + hasAttribute: [Attribute] } type Submission implements SubmissionStatusMixin diff --git a/artifacts/jsonschema/ghga.schema.json b/artifacts/jsonschema/ghga.schema.json index 455b7f95..21fb642f 100644 --- a/artifacts/jsonschema/ghga.schema.json +++ b/artifacts/jsonschema/ghga.schema.json @@ -87,21 +87,21 @@ "has_dataset": { "description": "One or more Datasets that constitutes this Aggregate Dataset.", "items": { - "type": "string" + "$ref": "#/$defs/Dataset" }, "type": "array" }, "has_file": { "description": "One or more File entities that collectively are part of this Dataset.", "items": { - "type": "string" + "$ref": "#/$defs/File" }, "type": "array" }, "has_publication": { "description": "One or more Publication entities associated with this Dataset.", "items": { - "type": "string" + "$ref": "#/$defs/Publication" }, "type": "array" }, @@ -121,14 +121,6 @@ "description": "The entity which replaces a deprecated entity.", "type": "string" }, - "submission_date": { - "description": "The date when submission was completed.", - "type": "string" - }, - "submission_status": { - "$ref": "#/$defs/SubmissionStatusEnum", - "description": "The status of submission." - }, "title": { "description": "The title that describes an entity.", "type": "string" @@ -178,7 +170,7 @@ "has_analysis_process": { "description": "One or more Analysis Process entities associated with this Analysis.", "items": { - "type": "string" + "$ref": "#/$defs/AnalysisProcess" }, "type": "array" }, @@ -192,24 +184,24 @@ "has_input": { "description": "The input data File entities used in the Analysis.", "items": { - "type": "string" + "$ref": "#/$defs/File" }, "type": "array" }, "has_output": { "description": "The output data File entities generated by this Analysis.", "items": { - "type": "string" + "$ref": "#/$defs/File" }, "type": "array" }, "has_study": { - "description": "The Study entity associated with this Analysis.", - "type": "string" + "$ref": "#/$defs/Study", + "description": "The Study entity associated with this Analysis." }, "has_workflow": { - "description": "The Workflow entity associated with this Analysis.", - "type": "string" + "$ref": "#/$defs/Workflow", + "description": "The Workflow entity associated with this Analysis." }, "id": { "description": "An identifier that uniquely represents an entity.", @@ -279,35 +271,35 @@ "has_data_access_policy": { "description": "The Data Access Policy that applies to this Dataset.", "items": { - "type": "string" + "$ref": "#/$defs/DataAccessPolicy" }, "type": "array" }, "has_experiment": { "description": "One or more Analysis entities that are referenced by this Dataset.", "items": { - "type": "string" + "$ref": "#/$defs/Analysis" }, "type": "array" }, "has_file": { "description": "One or more File entities that collectively are part of this Dataset.", "items": { - "type": "string" + "$ref": "#/$defs/File" }, "type": "array" }, "has_publication": { "description": "One or more Publication entities associated with this Dataset.", "items": { - "type": "string" + "$ref": "#/$defs/Publication" }, "type": "array" }, "has_study": { "description": "One or more Study entities that are referenced by this Dataset.", "items": { - "type": "string" + "$ref": "#/$defs/Study" }, "type": "array" }, @@ -327,14 +319,6 @@ "description": "The entity which replaces a deprecated entity.", "type": "string" }, - "submission_date": { - "description": "The date when submission was completed.", - "type": "string" - }, - "submission_status": { - "$ref": "#/$defs/SubmissionStatusEnum", - "description": "The status of submission." - }, "title": { "description": "The title that describes an entity.", "type": "string" @@ -381,8 +365,8 @@ "type": "string" }, "has_agent": { - "description": "The Agent - a software, institution, or human - that is executing or responsible for executing the workflow.", - "type": "string" + "$ref": "#/$defs/Agent", + "description": "The Agent - a software, institution, or human - that is executing or responsible for executing the workflow." }, "has_attribute": { "description": "Holds one or more Attribute entities that further characterizes this entity.", @@ -394,17 +378,20 @@ "has_input": { "description": "The input data File entities used in the Analysis Process.", "items": { - "type": "string" + "$ref": "#/$defs/File" }, "type": "array" }, "has_output": { "description": "The output data File entities generated by the Analysis Process.", - "type": "string" + "items": { + "$ref": "#/$defs/File" + }, + "type": "array" }, "has_workflow_step": { - "description": "Workflow Step entity that performs a set of operations on the input data Files to generate a set of output data Files.", - "type": "string" + "$ref": "#/$defs/WorkflowStep", + "description": "Workflow Step entity that performs a set of operations on the input data Files to generate a set of output data Files." }, "id": { "description": "The internal unique identifier for an entity.", @@ -581,8 +568,8 @@ "type": "string" }, "has_anatomical_entity": { - "description": "The Anatomical entity, that represents the site, from which the Biospecimen was retrieved. Typically, a concept from Uber-anatomy Ontology (UBERON). For example, 'UBERON:0008307' indicates that the Biospecimen was extracted from the 'Heart Endothelium' of an Individual.", - "type": "string" + "$ref": "#/$defs/AnatomicalEntity", + "description": "The Anatomical entity, that represents the site, from which the Biospecimen was retrieved. Typically, a concept from Uber-anatomy Ontology (UBERON). For example, 'UBERON:0008307' indicates that the Biospecimen was extracted from the 'Heart Endothelium' of an Individual." }, "has_attribute": { "description": "Holds one or more Attribute entities that further characterizes this entity.", @@ -593,15 +580,21 @@ }, "has_disease": { "description": "The Disease entity that is associated with this Biospecimen at the time of retrieval from the organism. Typically, a concept from Mondo Disease Ontology. For example, 'MONDO:0003742' indicates that the Individual - from which the Biospecimen was extracted from - suffers from 'Heart Fibrosarcoma'.", - "type": "string" + "items": { + "$ref": "#/$defs/Disease" + }, + "type": "array" }, "has_individual": { - "description": "The Individual entity from which this Biospecimen was derived.", - "type": "string" + "$ref": "#/$defs/Individual", + "description": "The Individual entity from which this Biospecimen was derived." }, "has_phenotypic_feature": { "description": "The Phenotypic Feature entity that is associated with this Biospecimen at the time of retrieval from the organism. Typically, a concept from Human Phenotype Ontology. For example, 'HP:0100244' indicates that the Individual - from which the Biospecimen was extracted from - exhibits 'Fibrosarcoma' as one of its phenotype.", - "type": "string" + "items": { + "$ref": "#/$defs/PhenotypicFeature" + }, + "type": "array" }, "id": { "description": "The internal unique identifier for an entity.", @@ -709,7 +702,7 @@ "has_member": { "description": "One or more Individuals that collectively define this Cohort.", "items": { - "type": "string" + "$ref": "#/$defs/Individual" }, "type": "array" }, @@ -818,7 +811,7 @@ "has_member": { "description": "All the members that are part of this Data Access Committee.", "items": { - "type": "string" + "$ref": "#/$defs/Member" }, "type": "array" }, @@ -827,8 +820,8 @@ "type": "string" }, "main_contact": { - "description": "The main contact for the Data Access Committee.", - "type": "string" + "$ref": "#/$defs/Member", + "description": "The main contact for the Data Access Committee." }, "name": { "description": "The name for an entity.", @@ -881,8 +874,8 @@ "type": "array" }, "has_data_access_committee": { - "description": "The Data Access Committee linked to this policy.", - "type": "string" + "$ref": "#/$defs/DataAccessCommittee", + "description": "The Data Access Committee linked to this policy." }, "has_data_use_condition": { "description": "Data Use Condition entities that are associated with the Data Access Policy.", @@ -1036,14 +1029,14 @@ "has_file": { "description": "One or more File entities that collectively are part of this Dataset.", "items": { - "type": "string" + "$ref": "#/$defs/File" }, "type": "array" }, "has_publication": { "description": "One or more Publication entities associated with this Dataset.", "items": { - "type": "string" + "$ref": "#/$defs/Publication" }, "type": "array" }, @@ -1063,14 +1056,6 @@ "description": "The entity which replaces a deprecated entity.", "type": "string" }, - "submission_date": { - "description": "The date when submission was completed.", - "type": "string" - }, - "submission_status": { - "$ref": "#/$defs/SubmissionStatusEnum", - "description": "The status of submission." - }, "title": { "description": "The title that describes an entity.", "type": "string" @@ -1260,11 +1245,17 @@ }, "has_children": { "description": "One or more children for this Individual.", - "type": "string" + "items": { + "$ref": "#/$defs/Individual" + }, + "type": "array" }, "has_parent": { "description": "One or more parent for this Individual.", - "type": "string" + "items": { + "$ref": "#/$defs/Individual" + }, + "type": "array" }, "id": { "description": "The internal unique identifier for an entity.", @@ -1349,14 +1340,14 @@ "has_experiment_process": { "description": "One or more Experiment Processes entities associated with this Experiment.", "items": { - "type": "string" + "$ref": "#/$defs/ExperimentProcess" }, "type": "array" }, "has_file": { "description": "One or more Files entities that are generated as output of this Experiment.", "items": { - "type": "string" + "$ref": "#/$defs/File" }, "type": "array" }, @@ -1365,25 +1356,21 @@ "type": "string" }, "has_sample": { - "description": "The Sample entity associated with this Experiment.", - "type": "string" + "$ref": "#/$defs/Sample", + "description": "The Sample entity associated with this Experiment." }, "has_study": { - "description": "The Study entity associated with this Experiment.", - "type": "string" + "$ref": "#/$defs/Study", + "description": "The Study entity associated with this Experiment." }, "has_technology": { - "description": "The Technology entity associated with this Experiment.", - "type": "string" + "$ref": "#/$defs/Technology", + "description": "The Technology entity associated with this Experiment." }, "id": { "description": "The internal unique identifier for an entity.", "type": "string" }, - "name": { - "description": "Name for the experiment (eg: GHGAE_PBMC_RNAseq).", - "type": "string" - }, "release_date": { "description": "The date when the entity was released for public consumption.", "type": "string" @@ -1401,7 +1388,7 @@ "type": "string" }, "title": { - "description": "The title that describes an entity.", + "description": "Name for the experiment (eg: GHGAE_PBMC_RNAseq).", "type": "string" }, "type": { @@ -1422,10 +1409,10 @@ }, "required": [ "id", - "name", - "description", "has_study", - "has_sample" + "has_sample", + "title", + "description" ], "title": "Experiment", "type": "object" @@ -1464,35 +1451,35 @@ "has_data_access_policy": { "description": "The Data Access Policy that applies to this Dataset.", "items": { - "type": "string" + "$ref": "#/$defs/DataAccessPolicy" }, "type": "array" }, "has_experiment": { "description": "One or more Experiment entities that are referenced by this Dataset.", "items": { - "type": "string" + "$ref": "#/$defs/Experiment" }, "type": "array" }, "has_file": { "description": "One or more File entities that collectively are part of this Dataset.", "items": { - "type": "string" + "$ref": "#/$defs/File" }, "type": "array" }, "has_publication": { "description": "One or more Publication entities associated with this Dataset.", "items": { - "type": "string" + "$ref": "#/$defs/Publication" }, "type": "array" }, "has_study": { "description": "One or more Study entities that are referenced by this Dataset.", "items": { - "type": "string" + "$ref": "#/$defs/Study" }, "type": "array" }, @@ -1512,14 +1499,6 @@ "description": "The entity which replaces a deprecated entity.", "type": "string" }, - "submission_date": { - "description": "The date when submission was completed.", - "type": "string" - }, - "submission_status": { - "$ref": "#/$defs/SubmissionStatusEnum", - "description": "The status of submission." - }, "title": { "description": "The title that describes an entity.", "type": "string" @@ -1566,8 +1545,8 @@ "type": "string" }, "has_agent": { - "description": "The Agent - a software, institution, or human - that is executing or responsible for executing the Experiment Process.", - "type": "string" + "$ref": "#/$defs/Agent", + "description": "The Agent - a software, institution, or human - that is executing or responsible for executing the Experiment Process." }, "has_attribute": { "description": "Holds one or more Attribute entities that further characterizes this entity.", @@ -1577,23 +1556,23 @@ "type": "array" }, "has_input": { - "description": "The input to the Experiment Process. Usually a Sample entity.", - "type": "string" + "$ref": "#/$defs/Sample", + "description": "The input to the Experiment Process. Usually a Sample entity." }, "has_output": { - "description": "The output of this Experiment Process. Usually a File entity.", - "type": "string" + "$ref": "#/$defs/File", + "description": "The output of this Experiment Process. Usually a File entity." }, "has_protocol": { - "description": "The Protocol entity used by this Experiment Process.", - "type": "string" + "$ref": "#/$defs/Protocol", + "description": "The Protocol entity used by this Experiment Process." }, "id": { "description": "The internal unique identifier for an entity.", "type": "string" }, - "name": { - "description": "Explanation of the step(s) involved in performing the experiment until Sequencing part (eg: Sample extraction -> Target Enrichment) ", + "title": { + "description": "A descriptive title that explains the step(s) involved in performing the experiment leading up to the sequencing of the sample and generation of raw data from the instrument. (eg: Sample extraction -> Target Enrichment) ", "type": "string" }, "type": { @@ -1640,10 +1619,14 @@ "has_member": { "description": "One or more Individuals that collectively define this Family.", "items": { - "type": "string" + "$ref": "#/$defs/Individual" }, "type": "array" }, + "has_proband": { + "$ref": "#/$defs/Individual", + "description": "The Individual that is reported to have a disorder which results in the Family being brought into a Study." + }, "id": { "description": "The internal unique identifier for an entity.", "type": "string" @@ -1652,10 +1635,6 @@ "description": "The name for an entity.", "type": "string" }, - "proband": { - "description": "The Individual that is reported to have a disorder which results in the Family being brought into a Study.", - "type": "string" - }, "type": { "description": "The type of an entity.", "type": "string" @@ -1816,11 +1795,17 @@ }, "has_children": { "description": "One or more children for this Individual.", - "type": "string" + "items": { + "$ref": "#/$defs/Individual" + }, + "type": "array" }, "has_parent": { "description": "One or more parent for this Individual.", - "type": "string" + "items": { + "$ref": "#/$defs/Individual" + }, + "type": "array" }, "id": { "description": "The internal unique identifier for an entity.", @@ -2487,14 +2472,14 @@ "has_publication": { "description": "One or more Publication entities associated with this Project.", "items": { - "type": "string" + "$ref": "#/$defs/Publication" }, "type": "array" }, "has_study": { "description": "One or more Study entities associated with this Project.", "items": { - "type": "string" + "$ref": "#/$defs/Experiment" }, "type": "array" }, @@ -2547,7 +2532,7 @@ "type": "string" }, "has_attribute": { - "description": "Key/value pairs corresponding to an entity.", + "description": "One or more attributes that further characterizes this Protocol.", "items": { "$ref": "#/$defs/Attribute" }, @@ -2730,12 +2715,12 @@ "type": "array" }, "has_biospecimen": { - "description": "The Biospecimen from which this Sample was prepared from.", - "type": "string" + "$ref": "#/$defs/Biospecimen", + "description": "The Biospecimen from which this Sample was prepared from." }, "has_individual": { - "description": "The Individual from which this Sample was derived from.", - "type": "string" + "$ref": "#/$defs/Individual", + "description": "The Individual from which this Sample was derived from." }, "id": { "description": "The internal unique identifier for an entity.", @@ -2758,8 +2743,8 @@ "type": "string" }, "type": { - "description": "The type of an entity.", - "type": "string" + "$ref": "#/$defs/CaseControlEnum", + "description": "Type of sample: 'Case' or 'Control'." }, "update_date": { "description": "Timestamp (in ISO 8601 format) when the entity was updated.", @@ -2941,12 +2926,12 @@ "has_analysis": { "description": "One or more Analysis entities associated with this Study.", "items": { - "type": "string" + "$ref": "#/$defs/Analysis" }, "type": "array" }, "has_attribute": { - "description": "Key/value pairs corresponding to an entity.", + "description": "Custom key/value pairs that further characterizes the Study. (e.g.: approaches - single-cell, bulk etc)", "items": { "$ref": "#/$defs/Attribute" }, @@ -2955,18 +2940,18 @@ "has_experiment": { "description": "One or more Experiment entities associated with this Study.", "items": { - "type": "string" + "$ref": "#/$defs/Experiment" }, "type": "array" }, "has_project": { - "description": "The project associated with this Study.", - "type": "string" + "$ref": "#/$defs/Project", + "description": "The project associated with this Study." }, "has_publication": { "description": "One or more Publication entities associated with this Study.", "items": { - "type": "string" + "$ref": "#/$defs/Publication" }, "type": "array" }, diff --git a/artifacts/owl/ghga.owl.ttl b/artifacts/owl/ghga.owl.ttl index 91e901cc..a8512a73 100644 --- a/artifacts/owl/ghga.owl.ttl +++ b/artifacts/owl/ghga.owl.ttl @@ -25,11 +25,11 @@ dcterms:license "https://creativecommons.org/publicdomain/zero/1.0/" ; pav:version "1.0.0a" ; skos:definition "The metadata schema for the German Human Genome-Phenome Archive (GHGA)." ; - linkml:generation_date "2021-11-23T08:50:53" ; + linkml:generation_date "2021-11-23T14:05:02" ; linkml:metamodel_version "1.7.0" ; linkml:source_file "ghga.yaml" ; - linkml:source_file_date "2021-11-23T08:50:06" ; - linkml:source_file_size 53312 . + linkml:source_file_date "2021-11-23T14:04:26" ; + linkml:source_file_size 56544 . GHGA:AggregateDataset a owl:Class, linkml:ClassDefinition ; @@ -43,22 +43,22 @@ GHGA:AggregateDataset a owl:Class, GHGA:AnalysisDataset a owl:Class, linkml:ClassDefinition ; rdfs:label "analysis dataset" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:has_analysis ], + rdfs:subClassOf [ a owl:Class ; + owl:intersectionOf ( [ a owl:Restriction ; + owl:allValuesFrom GHGA:Analysis ; + owl:onProperty GHGA:has_experiment ] [ a owl:Restriction ; + owl:onProperty GHGA:has_experiment ; + owl:someValuesFrom GHGA:Analysis ] ) ], [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; owl:allValuesFrom GHGA:Study ; owl:onProperty GHGA:has_study ] [ a owl:Restriction ; owl:onProperty GHGA:has_study ; owl:someValuesFrom GHGA:Study ] ) ], - [ a owl:Class ; - owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom GHGA:Analysis ; - owl:onProperty GHGA:has_experiment ] [ a owl:Restriction ; - owl:onProperty GHGA:has_experiment ; - owl:someValuesFrom GHGA:Analysis ] ) ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:has_analysis ], [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; owl:allValuesFrom GHGA:DataAccessPolicy ; @@ -101,18 +101,18 @@ GHGA:ExperimentDataset a owl:Class, owl:onProperty GHGA:has_study ] [ a owl:Restriction ; owl:onProperty GHGA:has_study ; owl:someValuesFrom GHGA:Study ] ) ], - [ a owl:Class ; - owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom GHGA:Experiment ; - owl:onProperty GHGA:has_experiment ] [ a owl:Restriction ; - owl:onProperty GHGA:has_experiment ; - owl:someValuesFrom GHGA:Experiment ] ) ], [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; owl:allValuesFrom GHGA:DataAccessPolicy ; owl:onProperty GHGA:has_data_access_policy ] [ a owl:Restriction ; owl:onProperty GHGA:has_data_access_policy ; owl:someValuesFrom GHGA:DataAccessPolicy ] ) ], + [ a owl:Class ; + owl:intersectionOf ( [ a owl:Restriction ; + owl:allValuesFrom GHGA:Experiment ; + owl:onProperty GHGA:has_experiment ] [ a owl:Restriction ; + owl:onProperty GHGA:has_experiment ; + owl:someValuesFrom GHGA:Experiment ] ) ], GHGA:Dataset ; skos:definition "An Experiment Dataset is a collection of Files linked to one or more Experiments from one or more Studies." . @@ -125,7 +125,7 @@ GHGA:Family a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Individual ; - owl:onProperty GHGA:proband ], + owl:onProperty GHGA:has_proband ], 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." . @@ -133,32 +133,32 @@ GHGA:LibraryPreparationProtocol a owl:Class, linkml:ClassDefinition ; rdfs:label "library preparation protocol" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], + owl:onProperty GHGA:library_selection ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_construction_kit_retail_name ], + owl:onProperty GHGA:library_preparation ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_level ], + owl:onProperty GHGA:primer ], + [ 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_selection ], + owl:onProperty GHGA:library_name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_construction ], + owl:onProperty GHGA:library_construction_kit_manufacturer ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_preparation ], + owl:onProperty GHGA:library_construction ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -166,35 +166,35 @@ GHGA:LibraryPreparationProtocol a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_layout ], + owl:onProperty GHGA:end_bias ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:target_regions ], + owl:onProperty GHGA:library_layout ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_name ], + owl:onProperty GHGA:rnaseq_strandedness ], [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:target_regions ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_construction_kit_manufacturer ], + owl:onProperty GHGA:library_construction_kit_retail_name ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:end_bias ], + owl:onProperty GHGA:name ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:primer ], + owl:onProperty GHGA:description ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:rnaseq_strandedness ], + owl:onProperty GHGA:library_level ], GHGA:Protocol ; skos:definition "Information about the library preparation of an Experiment." . @@ -204,46 +204,43 @@ GHGA:SequencingProtocol a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:sequencing_center ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:umi_barcode_size ], + owl:onProperty GHGA:umi_barcode_offset ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:flow_cell_type ], + owl:onProperty GHGA:sample_barcode_read ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:umi_barcode_read ], + owl:onProperty GHGA:cell_barcode_size ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], + owl:onProperty GHGA:description ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:read_length ], + owl:onProperty GHGA:instrument_model ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:instrument_model ], + owl:onProperty GHGA:flow_cell_type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:sequencing_center ], + owl:onProperty GHGA:name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:read_pair_number ], + owl:onProperty GHGA:lane_number ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:reference_annotation ], + owl:onProperty GHGA:cell_barcode_offset ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -251,31 +248,34 @@ GHGA:SequencingProtocol a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:umi_barcode_offset ], + owl:onProperty GHGA:umi_barcode_read ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:cell_barcode_size ], + owl:onProperty GHGA:read_length ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:cell_barcode_read ], + owl:onProperty GHGA:reference_annotation ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:lane_number ], + owl:onProperty GHGA:target_coverage ], + [ 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:sample_barcode_read ], + owl:onProperty GHGA:umi_barcode_size ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:target_coverage ], + owl:onProperty GHGA:cell_barcode_read ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:cell_barcode_offset ], + owl:onProperty GHGA:read_pair_number ], GHGA:Protocol ; skos:definition "Information about the sequencing of a sample." . @@ -283,28 +283,31 @@ GHGA:Submission a owl:Class, linkml:ClassDefinition ; rdfs:label "submission" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom GHGA:Individual ; - owl:onProperty GHGA:has_individual ], + owl:allValuesFrom GHGA:Experiment ; + owl:onProperty GHGA:has_experiment ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:submission_date ], + owl:allValuesFrom GHGA:Sample ; + owl:onProperty GHGA:has_sample ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass <http://UNKNOWN.org/submission_status_enum> ; - owl:onProperty GHGA:submission_status ], + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_file ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Individual ; + owl:onProperty GHGA:has_individual ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Biospecimen ; owl:onProperty GHGA:has_biospecimen ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:Sample ; - owl:onProperty GHGA:has_sample ], + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:submission_date ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_file ], + owl:allValuesFrom GHGA:Analysis ; + owl:onProperty GHGA:has_analysis ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:Experiment ; - owl:onProperty GHGA:has_experiment ], + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Study ; + owl:onProperty GHGA:has_study ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Project ; @@ -315,11 +318,8 @@ GHGA:Submission a owl:Class, owl:onProperty GHGA:has_data_access_policy ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Study ; - owl:onProperty GHGA:has_study ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Analysis ; - owl:onProperty GHGA:has_analysis ], + owl:onClass <http://UNKNOWN.org/submission_status_enum> ; + owl:onProperty GHGA:submission_status ], GHGA:NamedThing, GHGA:SubmissionStatusMixin ; 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." . @@ -350,12 +350,6 @@ GHGA:has_sequencing_protocol a owl:ObjectProperty, rdfs:range linkml:String ; skos:definition "The sequencing protocol associated with an entity." . -GHGA:parameters a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "parameters" ; - rdfs:range linkml:String ; - skos:definition "Paramaters associated with a Workflow Step entity." . - linkml:SubsetDefinition a owl:Class ; rdfs:label "subset_definition" ; skos:definition "the name and description of a subset" . @@ -371,24 +365,23 @@ GHGA:AnalysisProcess a owl:Class, linkml:ClassDefinition ; rdfs:label "analysis process" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:title ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Agent ; owl:onProperty GHGA:has_agent ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_input ], + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:WorkflowStep ; + owl:onProperty GHGA:has_workflow_step ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:File ; + 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:WorkflowStep ; - owl:onProperty GHGA:has_workflow_step ], + 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." . @@ -420,20 +413,20 @@ 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:name ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Member ; - owl:onProperty GHGA:has_member ], + owl:onProperty GHGA:description ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Member ; owl:onProperty GHGA:main_contact ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; + owl:allValuesFrom GHGA:Member ; + owl:onProperty GHGA:has_member ], + [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:name ; + owl:qualifiedCardinality 1 ], GHGA:Committee ; skos:definition "A group of members that are delegated to grant access to one or more datasets after ensuring the minimum criteria for data sharing has been met, and request for data use does not raise ethical and/or legal concerns." . @@ -441,6 +434,10 @@ GHGA:DataTransformation a owl:Class, linkml:ClassDefinition ; rdfs:label "data transformation" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:description ], + [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:title ], @@ -448,10 +445,6 @@ GHGA:DataTransformation a owl:Class, owl:onClass linkml:String ; owl:onProperty GHGA:id ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:description ], GHGA:PlannedProcess ; skos:definition "A data transformation technique used to analyze and interpret data to gain a better understanding of it." ; skos:exactMatch <http://purl.obolibrary.org/obo/OBI_0200000> . @@ -468,6 +461,10 @@ GHGA:ExperimentProcess a owl:Class, linkml:ClassDefinition ; rdfs:label "experiment process" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:title ], + [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Sample ; owl:onProperty GHGA:has_input ], @@ -475,18 +472,14 @@ GHGA:ExperimentProcess a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Agent ; owl:onProperty GHGA:has_agent ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:File ; - owl:onProperty GHGA:has_output ], [ 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:name ], + owl:onClass GHGA:File ; + owl:onProperty GHGA:has_output ], 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." . @@ -507,14 +500,14 @@ GHGA:ResearchActivity a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:title ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:description ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Publication ; owl:onProperty GHGA:has_publication ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:description ], GHGA:PlannedProcess ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C15429> ; 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." ; @@ -676,6 +669,9 @@ GHGA:has_parent a owl:ObjectProperty, GHGA:has_phenotypic_feature a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:has_proband a owl:ObjectProperty, + linkml:SlotDefinition . + GHGA:has_protocol a owl:ObjectProperty, linkml:SlotDefinition . @@ -784,9 +780,6 @@ GHGA:primer a owl:ObjectProperty, rdfs:range linkml:String ; skos:definition "The type of primer used for reverse transcription, e.g. \"oligo-dT\" or \"random\" primer. This allows users to identify content of the cDNA library input e.g. enriched for mRNA." . -GHGA:proband a owl:ObjectProperty, - linkml:SlotDefinition . - GHGA:read_length a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "read length" ; @@ -904,11 +897,11 @@ GHGA:Agent a owl:Class, rdfs:subClassOf [ 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 ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:name ], GHGA:NamedThing ; skos:definition "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." ; skos:exactMatch <http://www.w3.org/ns/prov#Agent> . @@ -917,25 +910,23 @@ 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:name ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:PhenotypicFeature ; - owl:onProperty GHGA:has_phenotypic_feature ], + owl:allValuesFrom GHGA:Disease ; + owl:onProperty GHGA:has_disease ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:description ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Disease ; - owl:onProperty GHGA:has_disease ], + owl:onClass linkml:String ; + owl:onProperty GHGA:name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:AnatomicalEntity ; owl:onProperty GHGA:has_anatomical_entity ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:PhenotypicFeature ; + owl:onProperty GHGA:has_phenotypic_feature ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Individual ; @@ -977,16 +968,16 @@ GHGA:Investigation a owl:Class, rdfs:label "investigation" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Publication ; - owl:onProperty GHGA:has_publication ], + owl:onClass linkml:String ; + owl:onProperty GHGA:release_date ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:deprecation_date ], + owl:onProperty GHGA:description ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:release_date ], + owl:onProperty GHGA:title ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:NamedThing ; @@ -994,7 +985,7 @@ GHGA:Investigation a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:title ], + owl:onProperty GHGA:deprecation_date ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass <http://UNKNOWN.org/release_status_enum> ; @@ -1005,12 +996,8 @@ GHGA:Investigation a owl:Class, owl:onProperty GHGA:deprecated ], [ 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:description ], + owl:onClass GHGA:Publication ; + owl:onProperty GHGA:has_publication ], GHGA:DeprecationMixin, GHGA:PlannedProcess, GHGA:ReleaseStatusMixin ; @@ -1023,17 +1010,17 @@ GHGA:Member a owl:Class, linkml:ClassDefinition ; rdfs:label "member" ; rdfs:subClassOf [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:email ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:organization ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:telephone ; owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:email ; + owl:qualifiedCardinality 1 ], GHGA:Person ; skos:definition "Member of an Organization or a Committee." . @@ -1051,26 +1038,40 @@ GHGA:Project a owl:Class, linkml:ClassDefinition ; rdfs:label "project" ; rdfs:subClassOf [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:title ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], - [ a owl:Restriction ; owl:allValuesFrom GHGA:Publication ; owl:onProperty GHGA:has_publication ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Experiment ; owl:onProperty GHGA:has_study ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:title ; + 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 ], GHGA:ResearchActivity ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C47885> ; skos:definition "Any specifically defined piece of work that is undertaken or attempted to meet a single requirement." . +GHGA:SubmissionStatusMixin a owl:Class, + linkml:ClassDefinition ; + rdfs:label "submission status mixin" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass <http://UNKNOWN.org/submission_status_enum> ; + owl:onProperty GHGA:submission_status ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:submission_date ], + linkml:mixin ; + skos:definition "A mixin that keeps track of the submission status." . + GHGA:WorkflowParameter a owl:Class, linkml:ClassDefinition ; rdfs:label "workflow parameter" ; @@ -1105,6 +1106,18 @@ GHGA:has_sample a owl:ObjectProperty, GHGA:key a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:submission_date a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "submission date" ; + rdfs:range linkml:String ; + skos:definition "The date when submission was completed." . + +GHGA:submission_status a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "submission status" ; + rdfs:range <http://UNKNOWN.org/submission_status_enum> ; + skos:definition "The status of submission." . + GHGA:value a owl:ObjectProperty, linkml:SlotDefinition . @@ -1113,16 +1126,16 @@ GHGA:DeprecationMixin a owl:Class, rdfs:label "deprecation mixin" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:NamedThing ; - owl:onProperty GHGA:replaced_by ], + owl:onClass linkml:String ; + owl:onProperty GHGA:deprecation_date ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:Boolean ; owl:onProperty GHGA:deprecated ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:deprecation_date ], + owl:onClass GHGA:NamedThing ; + owl:onProperty GHGA:replaced_by ], linkml:mixin ; skos:definition "A mixin that keeps track of the deprecation status." . @@ -1176,13 +1189,13 @@ GHGA:ReleaseStatusMixin a owl:Class, linkml:ClassDefinition ; rdfs:label "release status mixin" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:release_date ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass <http://UNKNOWN.org/release_status_enum> ; owl:onProperty GHGA:release_status ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:release_date ], linkml:mixin ; skos:definition "A mixin that keeps track of the release status." . @@ -1190,25 +1203,29 @@ 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 ], + owl:onClass GHGA:Individual ; + owl:onProperty GHGA:has_individual ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:vital_status_at_sampling ], + owl:onProperty GHGA:storage ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:isolation ], + owl:onClass <http://UNKNOWN.org/case_control_enum> ; + owl:onProperty GHGA:type ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:tissue ; + owl:onProperty GHGA:name ; owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Biospecimen ; + owl:onProperty GHGA:has_biospecimen ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:type ], + owl:onProperty GHGA:isolation ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -1216,37 +1233,19 @@ GHGA:Sample a owl:Class, [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty GHGA:xref ], - [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:name ; - owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Biospecimen ; - owl:onProperty GHGA:has_biospecimen ], + owl:onClass linkml:String ; + owl:onProperty GHGA:vital_status_at_sampling ], [ a owl:Restriction ; - owl:onClass GHGA:Individual ; - owl:onProperty GHGA:has_individual ; + owl:onClass linkml:String ; + owl:onProperty GHGA:tissue ; owl:qualifiedCardinality 1 ], 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:SubmissionStatusMixin a owl:Class, - linkml:ClassDefinition ; - rdfs:label "submission status mixin" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass <http://UNKNOWN.org/submission_status_enum> ; - owl:onProperty GHGA:submission_status ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:submission_date ], - linkml:mixin ; - skos:definition "A mixin that keeps track of the submission status." . - GHGA:deprecated a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "deprecated" ; @@ -1295,18 +1294,6 @@ GHGA:replaced_by a owl:ObjectProperty, rdfs:range GHGA:NamedThing ; skos:definition "The entity which replaces a deprecated entity." . -GHGA:submission_date a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "submission date" ; - rdfs:range linkml:String ; - skos:definition "The date when submission was completed." . - -GHGA:submission_status a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "submission status" ; - rdfs:range <http://UNKNOWN.org/submission_status_enum> ; - skos:definition "The status of submission." . - GHGA:xref a owl:ObjectProperty, linkml:SlotDefinition . @@ -1314,18 +1301,18 @@ GHGA:Analysis a owl:Class, linkml:ClassDefinition ; rdfs:label "analysis" ; rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_output ], + [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Workflow ; owl:onProperty GHGA:has_workflow ], [ a owl:Restriction ; owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_output ], + owl:onProperty GHGA:has_input ], [ a owl:Restriction ; owl:allValuesFrom GHGA:AnalysisProcess ; owl:onProperty GHGA:has_analysis_process ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_input ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Study ; @@ -1338,58 +1325,49 @@ GHGA:Dataset a owl:Class, linkml:ClassDefinition ; rdfs:label "dataset" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom GHGA:Publication ; - owl:onProperty GHGA:has_publication ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass <http://UNKNOWN.org/release_status_enum> ; - owl:onProperty GHGA:release_status ], - [ a owl:Class ; - owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_file ] [ a owl:Restriction ; - owl:onProperty GHGA:has_file ; - owl:someValuesFrom GHGA:File ] ) ], + owl:onClass GHGA:NamedThing ; + owl:onProperty GHGA:replaced_by ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:submission_date ], - [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:type ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:release_date ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:deprecation_date ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass <http://UNKNOWN.org/submission_status_enum> ; - owl:onProperty GHGA:submission_status ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:NamedThing ; - owl:onProperty GHGA:replaced_by ], + owl:onClass linkml:Boolean ; + owl:onProperty GHGA:deprecated ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ; + owl:onProperty GHGA:type ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:release_date ], [ a owl:Restriction ; 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:Class ; + owl:intersectionOf ( [ a owl:Restriction ; + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_file ] [ a owl:Restriction ; + owl:onProperty GHGA:has_file ; + owl:someValuesFrom GHGA:File ] ) ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:Boolean ; - owl:onProperty GHGA:deprecated ], + owl:onClass <http://UNKNOWN.org/release_status_enum> ; + owl:onProperty GHGA:release_status ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:description ; + owl:qualifiedCardinality 1 ], GHGA:DeprecationMixin, GHGA:InformationContentEntity, - GHGA:ReleaseStatusMixin, - GHGA:SubmissionStatusMixin ; + GHGA:ReleaseStatusMixin ; skos:definition "A Dataset is a collection of Files that is prepared for distribution." ; skos:exactMatch SIO:000089 . @@ -1400,28 +1378,28 @@ GHGA:DataAccessPolicy a owl:Class, linkml:ClassDefinition ; rdfs:label "data access policy" ; rdfs:subClassOf [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:policy_text ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:DataUseCondition ; - owl:onProperty GHGA:has_data_use_condition ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:name ], + [ a owl:Restriction ; + 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:policy_url ], [ a owl:Restriction ; - owl:onClass GHGA:DataAccessCommittee ; - owl:onProperty GHGA:has_data_access_committee ; - owl:qualifiedCardinality 1 ], + owl:allValuesFrom GHGA:DataUseCondition ; + owl:onProperty GHGA:has_data_use_condition ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:description ; owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:policy_text ; + owl:qualifiedCardinality 1 ], GHGA:InformationContentEntity ; skos:definition "A Data Access Policy specifies under which circumstances, legal or otherwise, a user can have access to one or more Datasets belonging to one or more Studies." . @@ -1429,20 +1407,16 @@ GHGA:Experiment a owl:Class, linkml:ClassDefinition ; rdfs:label "experiment" ; rdfs:subClassOf [ a owl:Restriction ; - owl:onClass GHGA:Sample ; - owl:onProperty GHGA:has_sample ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; owl:allValuesFrom GHGA:File ; owl:onProperty GHGA:has_file ], - [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:name ; - owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:technical_replicates ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Technology ; + owl:onProperty GHGA:has_technology ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:description ; @@ -1450,22 +1424,26 @@ GHGA:Experiment a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:biological_replicates ], + owl:onProperty GHGA:experimental_replicates ], [ a owl:Restriction ; owl:onClass GHGA:Study ; owl:onProperty GHGA:has_study ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Technology ; - owl:onProperty GHGA:has_technology ], + owl:onClass linkml:String ; + owl:onProperty GHGA:biological_replicates ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:title ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:onClass GHGA:Sample ; + owl:onProperty GHGA:has_sample ; + owl:qualifiedCardinality 1 ], [ 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:experimental_replicates ], GHGA:Investigation ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C42790> ; 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." ; @@ -1497,14 +1475,14 @@ GHGA:Publication a owl:Class, [ 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:abstract ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:id ; + owl:qualifiedCardinality 1 ], 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." . @@ -1514,13 +1492,13 @@ GHGA:has_data_access_policy a owl:ObjectProperty, GHGA:has_publication a owl:ObjectProperty, linkml:SlotDefinition . -GHGA:has_attribute a owl:ObjectProperty, +GHGA:type a owl:ObjectProperty, linkml:SlotDefinition . -GHGA:has_experiment a owl:ObjectProperty, +GHGA:has_attribute a owl:ObjectProperty, linkml:SlotDefinition . -GHGA:type a owl:ObjectProperty, +GHGA:has_experiment a owl:ObjectProperty, linkml:SlotDefinition . GHGA:Attribute a owl:Class, @@ -1529,7 +1507,7 @@ 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:onClass linkml:String ; owl:onProperty GHGA:value ; @@ -1541,94 +1519,46 @@ GHGA:Attribute a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:value_type ] ; + owl:onProperty GHGA:key_type ] ; skos:definition "A key/value pair that further characterizes an entity." ; skos:exactMatch SIO:000614 . -GHGA:Individual a owl:Class, +GHGA:Study a owl:Class, linkml:ClassDefinition ; - rdfs:label "individual" ; + rdfs:label "study" ; rdfs:subClassOf [ a owl:Restriction ; - owl:onClass <http://UNKNOWN.org/biological_sex_enum> ; - owl:onProperty GHGA:sex ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:year_of_birth ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:gender ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:has_children ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:has_parent ], + owl:allValuesFrom GHGA:Experiment ; + owl:onProperty GHGA:has_experiment ], [ a owl:Restriction ; - owl:onClass linkml:Integer ; - owl:onProperty GHGA:age ; + owl:onClass <http://UNKNOWN.org/study_type_enum> ; + owl:onProperty GHGA:type ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:ethnicity ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:geographical_region ], + owl:allValuesFrom GHGA:Attribute ; + owl:onProperty GHGA:has_attribute ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:ancestry ], - [ a owl:Restriction ; - owl:onClass <http://UNKNOWN.org/vital_status_enum> ; - owl:onProperty GHGA:vital_status ; - owl:qualifiedCardinality 1 ], - GHGA:Person ; - skos:altLabel "patient", - "subject" ; - skos:definition "An Individual is a Person who is participating in a Study." . - -GHGA:Study a owl:Class, - linkml:ClassDefinition ; - rdfs:label "study" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:description ; - owl:qualifiedCardinality 1 ], + owl:onClass GHGA:Project ; + owl:onProperty GHGA:has_project ], [ 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:Experiment ; - owl:onProperty GHGA:has_experiment ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Analysis ; owl:onProperty GHGA:has_analysis ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Publication ; owl:onProperty GHGA:has_publication ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:title ; + owl:onProperty GHGA:description ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Project ; - owl:onProperty GHGA:has_project ], - [ a owl:Restriction ; - owl:onClass <http://UNKNOWN.org/study_type_enum> ; - owl:onProperty GHGA:type ; + owl:onClass linkml:String ; + owl:onProperty GHGA:title ; owl:qualifiedCardinality 1 ], GHGA:Investigation ; 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." . @@ -1643,9 +1573,6 @@ GHGA:InformationContentEntity a owl:Class, GHGA:has_study a owl:ObjectProperty, linkml:SlotDefinition . -GHGA:title a owl:ObjectProperty, - linkml:SlotDefinition . - GHGA:File a owl:Class, linkml:ClassDefinition ; rdfs:label "file" ; @@ -1656,51 +1583,99 @@ GHGA:File a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ], + owl:onProperty GHGA:checksum ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:category ], + owl:onProperty GHGA:size ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:file_index ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass <http://UNKNOWN.org/file_type_enum> ; - owl:onProperty GHGA:type ], + owl:onClass linkml:String ; + owl:onProperty GHGA:category ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:size ], + owl:onProperty GHGA:name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:checksum ], + owl:onClass <http://UNKNOWN.org/file_type_enum> ; + owl:onProperty GHGA:type ], GHGA:InformationContentEntity ; skos:altLabel "file object" . -GHGA:NamedThing a owl:Class, +GHGA:Individual a owl:Class, linkml:ClassDefinition ; - rdfs:label "named thing" ; + rdfs:label "individual" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], + owl:allValuesFrom GHGA:Individual ; + owl:onProperty GHGA:has_children ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Individual ; + owl:onProperty GHGA:has_parent ], + [ a owl:Restriction ; + owl:onClass <http://UNKNOWN.org/vital_status_enum> ; + owl:onProperty GHGA:vital_status ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:id ; + owl:onProperty GHGA:ancestry ], + [ a owl:Restriction ; + owl:onClass <http://UNKNOWN.org/biological_sex_enum> ; + owl:onProperty GHGA:sex ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:creation_date ], + owl:onProperty GHGA:geographical_region ], + [ a owl:Restriction ; + owl:onClass linkml:Integer ; + owl:onProperty GHGA:age ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:ethnicity ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:year_of_birth ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:gender ], + GHGA:Person ; + skos:altLabel "patient", + "subject" ; + skos:definition "An Individual is a Person who is participating in a Study." . + +GHGA:title a owl:ObjectProperty, + linkml:SlotDefinition . + +GHGA:name a owl:ObjectProperty, + linkml:SlotDefinition . + +GHGA:NamedThing a owl:Class, + linkml:ClassDefinition ; + rdfs:label "named thing" ; + rdfs:subClassOf [ 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:allValuesFrom GHGA:Attribute ; + owl:onProperty GHGA:has_attribute ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:accession ], + owl:onProperty GHGA:creation_date ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -1708,15 +1683,16 @@ GHGA:NamedThing a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:type ] ; + owl:onProperty GHGA:type ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:accession ] ; skos:altLabel "entity", "named entity", "object" ; skos:definition "A databased entity, concept or class. This is a generic class that is the root of all the other classes." . -GHGA:name a owl:ObjectProperty, - linkml:SlotDefinition . - GHGA:description a owl:ObjectProperty, linkml:SlotDefinition . diff --git a/artifacts/python/ghga.py b/artifacts/python/ghga.py index 40c8a254..c6a0fb5c 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: 2021-11-23T08:50:58 +# Generation date: 2021-11-23T14:05:06 # Schema: GHGA-Metadata-Schema # # id: https://w3id.org/GHGA-Metadata-Schema @@ -360,7 +360,6 @@ class Investigation(PlannedProcess): id: Union[str, InvestigationId] = None title: Optional[str] = None description: Optional[str] = None - type: Optional[str] = None has_publication: Optional[Union[str, PublicationId]] = None release_status: Optional[Union[str, "ReleaseStatusEnum"]] = None release_date: Optional[str] = None @@ -380,9 +379,6 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.description is not None and not isinstance(self.description, str): self.description = str(self.description) - if self.type is not None and not isinstance(self.type, str): - self.type = str(self.type) - if self.has_publication is not None and not isinstance(self.has_publication, PublicationId): self.has_publication = PublicationId(self.has_publication) @@ -486,8 +482,8 @@ class Project(ResearchActivity): id: Union[str, ProjectId] = None title: str = None description: str = None - has_study: Optional[Union[Union[str, ExperimentId], List[Union[str, ExperimentId]]]] = empty_list() - has_publication: Optional[Union[Union[str, PublicationId], List[Union[str, PublicationId]]]] = empty_list() + has_study: Optional[Union[Dict[Union[str, ExperimentId], Union[dict, "Experiment"]], List[Union[dict, "Experiment"]]]] = empty_dict() + has_publication: Optional[Union[Dict[Union[str, PublicationId], Union[dict, "Publication"]], List[Union[dict, "Publication"]]]] = empty_dict() has_attribute: Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]] = empty_list() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): @@ -506,13 +502,9 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.description, str): self.description = str(self.description) - if not isinstance(self.has_study, list): - self.has_study = [self.has_study] if self.has_study is not None else [] - self.has_study = [v if isinstance(v, ExperimentId) else ExperimentId(v) for v in self.has_study] + self._normalize_inlined_as_list(slot_name="has_study", slot_type=Experiment, key_name="id", keyed=True) - if not isinstance(self.has_publication, list): - self.has_publication = [self.has_publication] if self.has_publication is not None else [] - self.has_publication = [v if isinstance(v, PublicationId) else PublicationId(v) for v in self.has_publication] + self._normalize_inlined_as_list(slot_name="has_publication", slot_type=Publication, key_name="id", keyed=True) self._normalize_inlined_as_list(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) @@ -537,10 +529,10 @@ class Study(Investigation): title: str = None description: str = None type: Union[str, "StudyTypeEnum"] = None - has_publication: Optional[Union[Union[str, PublicationId], List[Union[str, PublicationId]]]] = empty_list() - has_experiment: Optional[Union[Union[str, ExperimentId], List[Union[str, ExperimentId]]]] = empty_list() - has_analysis: Optional[Union[Union[str, AnalysisId], List[Union[str, AnalysisId]]]] = empty_list() - has_project: Optional[Union[str, ProjectId]] = None + 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_project: Optional[Union[dict, Project]] = None + has_publication: Optional[Union[Dict[Union[str, PublicationId], Union[dict, "Publication"]], List[Union[dict, "Publication"]]]] = empty_dict() has_attribute: Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]] = empty_list() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): @@ -570,22 +562,14 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.type, StudyTypeEnum): self.type = StudyTypeEnum(self.type) - if not isinstance(self.has_publication, list): - self.has_publication = [self.has_publication] if self.has_publication is not None else [] - self.has_publication = [v if isinstance(v, PublicationId) else PublicationId(v) for v in self.has_publication] - - 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, ExperimentId) else ExperimentId(v) for v in self.has_experiment] + self._normalize_inlined_as_list(slot_name="has_experiment", slot_type=Experiment, key_name="id", keyed=True) - 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, AnalysisId) else AnalysisId(v) for v in self.has_analysis] + self._normalize_inlined_as_list(slot_name="has_analysis", slot_type=Analysis, key_name="id", keyed=True) - if self.has_project is not None and not isinstance(self.has_project, ProjectId): - self.has_project = ProjectId(self.has_project) + if self.has_project is not None and not isinstance(self.has_project, Project): + self.has_project = Project(**as_dict(self.has_project)) - self._normalize_inlined_as_dict(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) + self._normalize_inlined_as_list(slot_name="has_publication", slot_type=Publication, key_name="id", keyed=True) self._normalize_inlined_as_list(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) @@ -606,16 +590,16 @@ class Experiment(Investigation): class_model_uri: ClassVar[URIRef] = GHGA.Experiment id: Union[str, ExperimentId] = None - name: str = None + has_study: Union[dict, Study] = None + has_sample: Union[dict, "Sample"] = None + title: str = None description: str = None - has_study: Union[str, StudyId] = None - has_sample: Union[str, SampleId] = None biological_replicates: Optional[str] = None technical_replicates: Optional[str] = None experimental_replicates: Optional[str] = None - has_technology: Optional[Union[str, TechnologyId]] = None - has_file: Optional[Union[Union[str, FileId], List[Union[str, FileId]]]] = empty_list() - has_experiment_process: Optional[Union[Union[str, ExperimentProcessId], List[Union[str, ExperimentProcessId]]]] = empty_list() + has_technology: Optional[Union[dict, "Technology"]] = None + has_file: Optional[Union[Dict[Union[str, FileId], Union[dict, "File"]], List[Union[dict, "File"]]]] = empty_dict() + has_experiment_process: Optional[Union[Dict[Union[str, ExperimentProcessId], Union[dict, "ExperimentProcess"]], List[Union[dict, "ExperimentProcess"]]]] = empty_dict() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -623,25 +607,25 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.id, ExperimentId): self.id = ExperimentId(self.id) - if self._is_empty(self.name): - self.MissingRequiredField("name") - if not isinstance(self.name, str): - self.name = str(self.name) - - if self._is_empty(self.description): - self.MissingRequiredField("description") - if not isinstance(self.description, str): - self.description = str(self.description) - if self._is_empty(self.has_study): self.MissingRequiredField("has_study") - if not isinstance(self.has_study, StudyId): - self.has_study = StudyId(self.has_study) + if not isinstance(self.has_study, Study): + self.has_study = Study(**as_dict(self.has_study)) if self._is_empty(self.has_sample): self.MissingRequiredField("has_sample") - if not isinstance(self.has_sample, SampleId): - self.has_sample = SampleId(self.has_sample) + if not isinstance(self.has_sample, Sample): + self.has_sample = Sample(**as_dict(self.has_sample)) + + if self._is_empty(self.title): + self.MissingRequiredField("title") + if not isinstance(self.title, str): + self.title = str(self.title) + + if self._is_empty(self.description): + self.MissingRequiredField("description") + if not isinstance(self.description, str): + self.description = str(self.description) if self.biological_replicates is not None and not isinstance(self.biological_replicates, str): self.biological_replicates = str(self.biological_replicates) @@ -652,16 +636,12 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.experimental_replicates is not None and not isinstance(self.experimental_replicates, str): self.experimental_replicates = str(self.experimental_replicates) - if self.has_technology is not None and not isinstance(self.has_technology, TechnologyId): - self.has_technology = TechnologyId(self.has_technology) + if self.has_technology is not None and not isinstance(self.has_technology, Technology): + self.has_technology = Technology(**as_dict(self.has_technology)) - if not isinstance(self.has_file, list): - self.has_file = [self.has_file] if self.has_file is not None else [] - self.has_file = [v if isinstance(v, FileId) else FileId(v) for v in self.has_file] + self._normalize_inlined_as_list(slot_name="has_file", slot_type=File, key_name="id", keyed=True) - if not isinstance(self.has_experiment_process, list): - self.has_experiment_process = [self.has_experiment_process] if self.has_experiment_process is not None else [] - self.has_experiment_process = [v if isinstance(v, ExperimentProcessId) else ExperimentProcessId(v) for v in self.has_experiment_process] + self._normalize_inlined_as_list(slot_name="has_experiment_process", slot_type=ExperimentProcess, key_name="id", keyed=True) super().__post_init__(**kwargs) @@ -680,11 +660,11 @@ class ExperimentProcess(PlannedProcess): class_model_uri: ClassVar[URIRef] = GHGA.ExperimentProcess id: Union[str, ExperimentProcessId] = None - name: Optional[str] = None - has_input: Optional[Union[str, SampleId]] = None - has_protocol: Optional[Union[str, ProtocolId]] = None - has_agent: Optional[Union[str, AgentId]] = None - has_output: Optional[Union[str, FileId]] = None + title: Optional[str] = None + has_input: Optional[Union[dict, "Sample"]] = None + has_protocol: Optional[Union[dict, "Protocol"]] = None + has_agent: Optional[Union[dict, "Agent"]] = None + has_output: Optional[Union[dict, "File"]] = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -692,20 +672,20 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.id, ExperimentProcessId): self.id = ExperimentProcessId(self.id) - if self.name is not None and not isinstance(self.name, str): - self.name = str(self.name) + if self.title is not None and not isinstance(self.title, str): + self.title = str(self.title) - if self.has_input is not None and not isinstance(self.has_input, SampleId): - self.has_input = SampleId(self.has_input) + if self.has_input is not None and not isinstance(self.has_input, Sample): + self.has_input = Sample(**as_dict(self.has_input)) - if self.has_protocol is not None and not isinstance(self.has_protocol, ProtocolId): - self.has_protocol = ProtocolId(self.has_protocol) + if self.has_protocol is not None and not isinstance(self.has_protocol, Protocol): + self.has_protocol = Protocol(**as_dict(self.has_protocol)) - if self.has_agent is not None and not isinstance(self.has_agent, AgentId): - self.has_agent = AgentId(self.has_agent) + if self.has_agent is not None and not isinstance(self.has_agent, Agent): + self.has_agent = Agent(**as_dict(self.has_agent)) - if self.has_output is not None and not isinstance(self.has_output, FileId): - self.has_output = FileId(self.has_output) + if self.has_output is not None and not isinstance(self.has_output, File): + self.has_output = File(**as_dict(self.has_output)) super().__post_init__(**kwargs) @@ -824,8 +804,8 @@ class Individual(Person): geographical_region: Optional[str] = None ethnicity: Optional[str] = None ancestry: Optional[str] = None - has_parent: Optional[str] = None - has_children: Optional[str] = None + has_parent: Optional[Union[Dict[Union[str, IndividualId], Union[dict, "Individual"]], List[Union[dict, "Individual"]]]] = empty_dict() + has_children: Optional[Union[Dict[Union[str, IndividualId], Union[dict, "Individual"]], List[Union[dict, "Individual"]]]] = empty_dict() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -863,11 +843,9 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.ancestry is not None and not isinstance(self.ancestry, str): self.ancestry = str(self.ancestry) - if self.has_parent is not None and not isinstance(self.has_parent, str): - self.has_parent = str(self.has_parent) + self._normalize_inlined_as_list(slot_name="has_parent", slot_type=Individual, key_name="id", keyed=True) - if self.has_children is not None and not isinstance(self.has_children, str): - self.has_children = str(self.has_children) + self._normalize_inlined_as_list(slot_name="has_children", slot_type=Individual, key_name="id", keyed=True) super().__post_init__(**kwargs) @@ -913,11 +891,11 @@ class Analysis(DataTransformation): class_model_uri: ClassVar[URIRef] = GHGA.Analysis id: Union[str, AnalysisId] = None - has_input: Optional[Union[Union[str, FileId], List[Union[str, FileId]]]] = empty_list() - has_study: Optional[Union[str, StudyId]] = None - has_workflow: Optional[Union[str, WorkflowId]] = None - has_analysis_process: Optional[Union[Union[str, AnalysisProcessId], List[Union[str, AnalysisProcessId]]]] = empty_list() - has_output: Optional[Union[Union[str, FileId], List[Union[str, FileId]]]] = empty_list() + has_input: Optional[Union[Dict[Union[str, FileId], Union[dict, File]], List[Union[dict, File]]]] = empty_dict() + has_study: Optional[Union[dict, Study]] = None + has_workflow: Optional[Union[dict, Workflow]] = None + has_analysis_process: Optional[Union[Dict[Union[str, AnalysisProcessId], Union[dict, "AnalysisProcess"]], List[Union[dict, "AnalysisProcess"]]]] = empty_dict() + has_output: Optional[Union[Dict[Union[str, FileId], Union[dict, File]], List[Union[dict, File]]]] = empty_dict() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -925,23 +903,17 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.id, AnalysisId): self.id = AnalysisId(self.id) - if not isinstance(self.has_input, list): - self.has_input = [self.has_input] if self.has_input is not None else [] - self.has_input = [v if isinstance(v, FileId) else FileId(v) for v in self.has_input] + self._normalize_inlined_as_list(slot_name="has_input", slot_type=File, key_name="id", keyed=True) - if self.has_study is not None and not isinstance(self.has_study, StudyId): - self.has_study = StudyId(self.has_study) + if self.has_study is not None and not isinstance(self.has_study, Study): + self.has_study = Study(**as_dict(self.has_study)) - if self.has_workflow is not None and not isinstance(self.has_workflow, WorkflowId): - self.has_workflow = WorkflowId(self.has_workflow) + if self.has_workflow is not None and not isinstance(self.has_workflow, Workflow): + self.has_workflow = Workflow(**as_dict(self.has_workflow)) - if not isinstance(self.has_analysis_process, list): - self.has_analysis_process = [self.has_analysis_process] if self.has_analysis_process is not None else [] - self.has_analysis_process = [v if isinstance(v, AnalysisProcessId) else AnalysisProcessId(v) for v in self.has_analysis_process] + self._normalize_inlined_as_list(slot_name="has_analysis_process", slot_type=AnalysisProcess, key_name="id", keyed=True) - if not isinstance(self.has_output, list): - self.has_output = [self.has_output] if self.has_output is not None else [] - self.has_output = [v if isinstance(v, FileId) else FileId(v) for v in self.has_output] + self._normalize_inlined_as_list(slot_name="has_output", slot_type=File, key_name="id", keyed=True) super().__post_init__(**kwargs) @@ -962,10 +934,10 @@ class AnalysisProcess(PlannedProcess): id: Union[str, AnalysisProcessId] = None title: Optional[str] = None - has_input: Optional[Union[Union[str, FileId], List[Union[str, FileId]]]] = empty_list() - has_workflow_step: Optional[Union[str, WorkflowStepId]] = None - has_agent: Optional[Union[str, AgentId]] = None - has_output: Optional[Union[str, FileId]] = None + has_input: Optional[Union[Dict[Union[str, FileId], Union[dict, File]], List[Union[dict, File]]]] = empty_dict() + has_workflow_step: Optional[Union[dict, WorkflowStep]] = None + has_agent: Optional[Union[dict, Agent]] = None + has_output: Optional[Union[Dict[Union[str, FileId], Union[dict, File]], List[Union[dict, File]]]] = empty_dict() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -976,18 +948,15 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.title is not None and not isinstance(self.title, str): self.title = str(self.title) - if not isinstance(self.has_input, list): - self.has_input = [self.has_input] if self.has_input is not None else [] - self.has_input = [v if isinstance(v, FileId) else FileId(v) for v in self.has_input] + self._normalize_inlined_as_list(slot_name="has_input", slot_type=File, key_name="id", keyed=True) - if self.has_workflow_step is not None and not isinstance(self.has_workflow_step, WorkflowStepId): - self.has_workflow_step = WorkflowStepId(self.has_workflow_step) + if self.has_workflow_step is not None and not isinstance(self.has_workflow_step, WorkflowStep): + self.has_workflow_step = WorkflowStep(**as_dict(self.has_workflow_step)) - if self.has_agent is not None and not isinstance(self.has_agent, AgentId): - self.has_agent = AgentId(self.has_agent) + if self.has_agent is not None and not isinstance(self.has_agent, Agent): + self.has_agent = Agent(**as_dict(self.has_agent)) - if self.has_output is not None and not isinstance(self.has_output, FileId): - self.has_output = FileId(self.has_output) + self._normalize_inlined_as_list(slot_name="has_output", slot_type=File, key_name="id", keyed=True) super().__post_init__(**kwargs) @@ -1062,8 +1031,8 @@ class DataAccessCommittee(Committee): id: Union[str, DataAccessCommitteeId] = None name: str = None description: Optional[str] = None - main_contact: Optional[Union[str, MemberId]] = None - has_member: Optional[Union[Union[str, MemberId], List[Union[str, MemberId]]]] = empty_list() + main_contact: Optional[Union[dict, "Member"]] = None + has_member: Optional[Union[Dict[Union[str, MemberId], Union[dict, "Member"]], List[Union[dict, "Member"]]]] = empty_dict() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -1079,12 +1048,10 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.description is not None and not isinstance(self.description, str): self.description = str(self.description) - if self.main_contact is not None and not isinstance(self.main_contact, MemberId): - self.main_contact = MemberId(self.main_contact) + if self.main_contact is not None and not isinstance(self.main_contact, Member): + self.main_contact = Member(**as_dict(self.main_contact)) - if not isinstance(self.has_member, list): - self.has_member = [self.has_member] if self.has_member is not None else [] - self.has_member = [v if isinstance(v, MemberId) else MemberId(v) for v in self.has_member] + self._normalize_inlined_as_list(slot_name="has_member", slot_type=Member, key_name="id", keyed=True) super().__post_init__(**kwargs) @@ -1169,10 +1136,10 @@ class Biospecimen(MaterialEntity): id: Union[str, BiospecimenId] = None name: Optional[str] = None description: Optional[str] = None - has_individual: Optional[Union[str, IndividualId]] = None - has_anatomical_entity: Optional[Union[str, AnatomicalEntityId]] = None - has_disease: Optional[Union[str, DiseaseId]] = None - has_phenotypic_feature: Optional[Union[str, PhenotypicFeatureId]] = None + has_individual: Optional[Union[dict, "Individual"]] = None + has_anatomical_entity: Optional[Union[dict, "AnatomicalEntity"]] = None + has_disease: Optional[Union[Dict[Union[str, DiseaseId], Union[dict, "Disease"]], List[Union[dict, "Disease"]]]] = empty_dict() + has_phenotypic_feature: Optional[Union[Dict[Union[str, PhenotypicFeatureId], Union[dict, "PhenotypicFeature"]], List[Union[dict, "PhenotypicFeature"]]]] = empty_dict() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -1186,17 +1153,15 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.description is not None and not isinstance(self.description, str): self.description = str(self.description) - if self.has_individual is not None and not isinstance(self.has_individual, IndividualId): - self.has_individual = IndividualId(self.has_individual) + if self.has_individual is not None and not isinstance(self.has_individual, Individual): + self.has_individual = Individual(**as_dict(self.has_individual)) - if self.has_anatomical_entity is not None and not isinstance(self.has_anatomical_entity, AnatomicalEntityId): - self.has_anatomical_entity = AnatomicalEntityId(self.has_anatomical_entity) + if self.has_anatomical_entity is not None and not isinstance(self.has_anatomical_entity, AnatomicalEntity): + self.has_anatomical_entity = AnatomicalEntity(**as_dict(self.has_anatomical_entity)) - if self.has_disease is not None and not isinstance(self.has_disease, DiseaseId): - self.has_disease = DiseaseId(self.has_disease) + self._normalize_inlined_as_list(slot_name="has_disease", slot_type=Disease, key_name="id", keyed=True) - if self.has_phenotypic_feature is not None and not isinstance(self.has_phenotypic_feature, PhenotypicFeatureId): - self.has_phenotypic_feature = PhenotypicFeatureId(self.has_phenotypic_feature) + self._normalize_inlined_as_list(slot_name="has_phenotypic_feature", slot_type=PhenotypicFeature, key_name="id", keyed=True) super().__post_init__(**kwargs) @@ -1217,13 +1182,13 @@ class Sample(MaterialEntity): id: Union[str, SampleId] = None name: str = None tissue: str = None - has_individual: Union[str, IndividualId] = None - type: Optional[str] = None + has_individual: Union[dict, "Individual"] = None description: Optional[str] = None vital_status_at_sampling: Optional[str] = None isolation: Optional[str] = None storage: Optional[str] = None - has_biospecimen: Optional[Union[str, BiospecimenId]] = None + has_biospecimen: Optional[Union[dict, Biospecimen]] = None + type: Optional[Union[str, "CaseControlEnum"]] = None xref: Optional[Union[str, List[str]]] = empty_list() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): @@ -1244,11 +1209,8 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.has_individual): self.MissingRequiredField("has_individual") - if not isinstance(self.has_individual, IndividualId): - self.has_individual = IndividualId(self.has_individual) - - if self.type is not None and not isinstance(self.type, str): - self.type = str(self.type) + if not isinstance(self.has_individual, Individual): + self.has_individual = Individual(**as_dict(self.has_individual)) if self.description is not None and not isinstance(self.description, str): self.description = str(self.description) @@ -1262,8 +1224,8 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.storage is not None and not isinstance(self.storage, str): self.storage = str(self.storage) - if self.has_biospecimen is not None and not isinstance(self.has_biospecimen, BiospecimenId): - self.has_biospecimen = BiospecimenId(self.has_biospecimen) + if self.has_biospecimen is not None and not isinstance(self.has_biospecimen, Biospecimen): + self.has_biospecimen = Biospecimen(**as_dict(self.has_biospecimen)) if self.type is not None and not isinstance(self.type, CaseControlEnum): self.type = CaseControlEnum(self.type) @@ -1317,8 +1279,8 @@ class Family(Population): class_model_uri: ClassVar[URIRef] = GHGA.Family id: Union[str, FamilyId] = None - has_member: Optional[Union[Union[str, IndividualId], List[Union[str, IndividualId]]]] = empty_list() - proband: Optional[Union[str, IndividualId]] = None + has_member: Optional[Union[Dict[Union[str, IndividualId], Union[dict, Individual]], List[Union[dict, Individual]]]] = empty_dict() + has_proband: Optional[Union[dict, Individual]] = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -1326,12 +1288,10 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.id, FamilyId): self.id = FamilyId(self.id) - if not isinstance(self.has_member, list): - self.has_member = [self.has_member] if self.has_member is not None else [] - self.has_member = [v if isinstance(v, IndividualId) else IndividualId(v) for v in self.has_member] + self._normalize_inlined_as_list(slot_name="has_member", slot_type=Individual, key_name="id", keyed=True) - if self.proband is not None and not isinstance(self.proband, IndividualId): - self.proband = IndividualId(self.proband) + if self.has_proband is not None and not isinstance(self.has_proband, Individual): + self.has_proband = Individual(**as_dict(self.has_proband)) super().__post_init__(**kwargs) @@ -1350,7 +1310,7 @@ class Cohort(Population): class_model_uri: ClassVar[URIRef] = GHGA.Cohort id: Union[str, CohortId] = None - has_member: Optional[Union[Union[str, IndividualId], List[Union[str, IndividualId]]]] = empty_list() + has_member: Optional[Union[Dict[Union[str, IndividualId], Union[dict, Individual]], List[Union[dict, Individual]]]] = empty_dict() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -1358,9 +1318,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.id, CohortId): self.id = CohortId(self.id) - if not isinstance(self.has_member, list): - self.has_member = [self.has_member] if self.has_member is not None else [] - self.has_member = [v if isinstance(v, IndividualId) else IndividualId(v) for v in self.has_member] + self._normalize_inlined_as_list(slot_name="has_member", slot_type=Individual, key_name="id", keyed=True) super().__post_init__(**kwargs) @@ -1575,8 +1533,6 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.url is not None and not isinstance(self.url, str): self.url = str(self.url) - self._normalize_inlined_as_dict(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) - self._normalize_inlined_as_list(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) super().__post_init__(**kwargs) @@ -1667,10 +1623,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.rnaseq_strandedness is not None and not isinstance(self.rnaseq_strandedness, str): self.rnaseq_strandedness = str(self.rnaseq_strandedness) - self._normalize_inlined_as_dict(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) - - if self.description is not None and not isinstance(self.description, str): - self.description = str(self.description) + self._normalize_inlined_as_list(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) super().__post_init__(**kwargs) @@ -1688,8 +1641,6 @@ class SequencingProtocol(Protocol): class_model_uri: ClassVar[URIRef] = GHGA.SequencingProtocol id: Union[str, SequencingProtocolId] = None - name: Optional[str] = None - description: Optional[str] = None sequencing_center: Optional[str] = None instrument_model: Optional[str] = None read_length: Optional[str] = None @@ -1706,6 +1657,8 @@ class SequencingProtocol(Protocol): cell_barcode_offset: Optional[str] = None cell_barcode_size: Optional[str] = None sample_barcode_read: Optional[str] = None + name: Optional[str] = None + description: Optional[str] = None has_attribute: Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]] = empty_list() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): @@ -1714,12 +1667,6 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.id, SequencingProtocolId): self.id = SequencingProtocolId(self.id) - if self.name is not None and not isinstance(self.name, str): - self.name = str(self.name) - - if self.description is not None and not isinstance(self.description, str): - self.description = str(self.description) - if self.sequencing_center is not None and not isinstance(self.sequencing_center, str): self.sequencing_center = str(self.sequencing_center) @@ -1768,7 +1715,13 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.sample_barcode_read is not None and not isinstance(self.sample_barcode_read, str): self.sample_barcode_read = str(self.sample_barcode_read) - self._normalize_inlined_as_dict(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) + if self.name is not None and not isinstance(self.name, str): + self.name = str(self.name) + + if self.description is not None and not isinstance(self.description, str): + self.description = str(self.description) + + self._normalize_inlined_as_list(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) super().__post_init__(**kwargs) @@ -1917,11 +1870,9 @@ class Dataset(InformationContentEntity): id: Union[str, DatasetId] = None title: str = None description: str = None - has_file: Union[Union[str, FileId], List[Union[str, FileId]]] = None + has_file: Union[Dict[Union[str, FileId], Union[dict, File]], List[Union[dict, File]]] = empty_dict() type: str = None - has_publication: Optional[Union[Union[str, PublicationId], List[Union[str, PublicationId]]]] = empty_list() - submission_status: Optional[Union[str, "SubmissionStatusEnum"]] = None - submission_date: Optional[str] = None + has_publication: Optional[Union[Dict[Union[str, PublicationId], Union[dict, "Publication"]], List[Union[dict, "Publication"]]]] = empty_dict() release_status: Optional[Union[str, "ReleaseStatusEnum"]] = None release_date: Optional[str] = None deprecated: Optional[Union[bool, Bool]] = None @@ -1946,24 +1897,14 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.has_file): self.MissingRequiredField("has_file") - if not isinstance(self.has_file, list): - self.has_file = [self.has_file] if self.has_file is not None else [] - self.has_file = [v if isinstance(v, FileId) else FileId(v) for v in self.has_file] + self._normalize_inlined_as_list(slot_name="has_file", slot_type=File, key_name="id", keyed=True) if self._is_empty(self.type): self.MissingRequiredField("type") if not isinstance(self.type, str): self.type = str(self.type) - if not isinstance(self.has_publication, list): - self.has_publication = [self.has_publication] if self.has_publication is not None else [] - self.has_publication = [v if isinstance(v, PublicationId) else PublicationId(v) for v in self.has_publication] - - if self.submission_status is not None and not isinstance(self.submission_status, SubmissionStatusEnum): - self.submission_status = SubmissionStatusEnum(self.submission_status) - - if self.submission_date is not None and not isinstance(self.submission_date, str): - self.submission_date = str(self.submission_date) + self._normalize_inlined_as_list(slot_name="has_publication", slot_type=Publication, key_name="id", keyed=True) if self.release_status is not None and not isinstance(self.release_status, ReleaseStatusEnum): self.release_status = ReleaseStatusEnum(self.release_status) @@ -1998,11 +1939,11 @@ class ExperimentDataset(Dataset): id: Union[str, ExperimentDatasetId] = None title: str = None description: str = None - has_file: Union[Union[str, FileId], List[Union[str, FileId]]] = None + has_file: Union[Dict[Union[str, FileId], Union[dict, File]], List[Union[dict, File]]] = empty_dict() type: str = None - has_data_access_policy: Union[Union[str, DataAccessPolicyId], List[Union[str, DataAccessPolicyId]]] = None - has_study: Union[Union[str, StudyId], List[Union[str, StudyId]]] = None - has_experiment: Union[Union[str, ExperimentId], List[Union[str, ExperimentId]]] = None + has_data_access_policy: Union[Dict[Union[str, DataAccessPolicyId], Union[dict, "DataAccessPolicy"]], List[Union[dict, "DataAccessPolicy"]]] = empty_dict() + has_study: Union[Dict[Union[str, StudyId], Union[dict, Study]], List[Union[dict, Study]]] = empty_dict() + has_experiment: Union[Dict[Union[str, ExperimentId], Union[dict, Experiment]], List[Union[dict, Experiment]]] = empty_dict() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -2012,21 +1953,15 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.has_data_access_policy): self.MissingRequiredField("has_data_access_policy") - if not isinstance(self.has_data_access_policy, list): - self.has_data_access_policy = [self.has_data_access_policy] if self.has_data_access_policy is not None else [] - self.has_data_access_policy = [v if isinstance(v, DataAccessPolicyId) else DataAccessPolicyId(v) for v in self.has_data_access_policy] + self._normalize_inlined_as_list(slot_name="has_data_access_policy", slot_type=DataAccessPolicy, key_name="id", keyed=True) if self._is_empty(self.has_study): self.MissingRequiredField("has_study") - if not isinstance(self.has_study, list): - self.has_study = [self.has_study] if self.has_study is not None else [] - self.has_study = [v if isinstance(v, StudyId) else StudyId(v) for v in self.has_study] + self._normalize_inlined_as_list(slot_name="has_study", slot_type=Study, key_name="id", keyed=True) if self._is_empty(self.has_experiment): self.MissingRequiredField("has_experiment") - 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, ExperimentId) else ExperimentId(v) for v in self.has_experiment] + self._normalize_inlined_as_list(slot_name="has_experiment", slot_type=Experiment, key_name="id", keyed=True) super().__post_init__(**kwargs) @@ -2047,11 +1982,11 @@ class AnalysisDataset(Dataset): id: Union[str, AnalysisDatasetId] = None title: str = None description: str = None - has_file: Union[Union[str, FileId], List[Union[str, FileId]]] = None + has_file: Union[Dict[Union[str, FileId], Union[dict, File]], List[Union[dict, File]]] = empty_dict() type: str = None - has_data_access_policy: Union[Union[str, DataAccessPolicyId], List[Union[str, DataAccessPolicyId]]] = None - has_study: Union[Union[str, StudyId], List[Union[str, StudyId]]] = None - has_experiment: Union[Union[str, AnalysisId], List[Union[str, AnalysisId]]] = None + has_data_access_policy: Union[Dict[Union[str, DataAccessPolicyId], Union[dict, "DataAccessPolicy"]], List[Union[dict, "DataAccessPolicy"]]] = empty_dict() + has_study: Union[Dict[Union[str, StudyId], Union[dict, Study]], List[Union[dict, Study]]] = empty_dict() + has_experiment: Union[Dict[Union[str, AnalysisId], Union[dict, Analysis]], List[Union[dict, Analysis]]] = empty_dict() has_analysis: Optional[str] = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): @@ -2062,21 +1997,15 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.has_data_access_policy): self.MissingRequiredField("has_data_access_policy") - if not isinstance(self.has_data_access_policy, list): - self.has_data_access_policy = [self.has_data_access_policy] if self.has_data_access_policy is not None else [] - self.has_data_access_policy = [v if isinstance(v, DataAccessPolicyId) else DataAccessPolicyId(v) for v in self.has_data_access_policy] + self._normalize_inlined_as_list(slot_name="has_data_access_policy", slot_type=DataAccessPolicy, key_name="id", keyed=True) if self._is_empty(self.has_study): self.MissingRequiredField("has_study") - if not isinstance(self.has_study, list): - self.has_study = [self.has_study] if self.has_study is not None else [] - self.has_study = [v if isinstance(v, StudyId) else StudyId(v) for v in self.has_study] + self._normalize_inlined_as_list(slot_name="has_study", slot_type=Study, key_name="id", keyed=True) if self._is_empty(self.has_experiment): self.MissingRequiredField("has_experiment") - 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, AnalysisId) else AnalysisId(v) for v in self.has_experiment] + self._normalize_inlined_as_list(slot_name="has_experiment", slot_type=Analysis, key_name="id", keyed=True) if self.has_analysis is not None and not isinstance(self.has_analysis, str): self.has_analysis = str(self.has_analysis) @@ -2099,9 +2028,9 @@ class AggregateDataset(Dataset): id: Union[str, AggregateDatasetId] = None title: str = None description: str = None - has_file: Union[Union[str, FileId], List[Union[str, FileId]]] = None + has_file: Union[Dict[Union[str, FileId], Union[dict, File]], List[Union[dict, File]]] = empty_dict() type: str = None - has_dataset: Optional[Union[Union[str, DatasetId], List[Union[str, DatasetId]]]] = empty_list() + has_dataset: Optional[Union[Dict[Union[str, DatasetId], Union[dict, Dataset]], List[Union[dict, Dataset]]]] = empty_dict() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -2109,9 +2038,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.id, AggregateDatasetId): self.id = AggregateDatasetId(self.id) - if not isinstance(self.has_dataset, list): - self.has_dataset = [self.has_dataset] if self.has_dataset is not None else [] - self.has_dataset = [v if isinstance(v, DatasetId) else DatasetId(v) for v in self.has_dataset] + self._normalize_inlined_as_list(slot_name="has_dataset", slot_type=Dataset, key_name="id", keyed=True) super().__post_init__(**kwargs) @@ -2132,7 +2059,7 @@ class DataAccessPolicy(InformationContentEntity): id: Union[str, DataAccessPolicyId] = None description: str = None policy_text: str = None - has_data_access_committee: Union[str, DataAccessCommitteeId] = None + has_data_access_committee: Union[dict, "DataAccessCommittee"] = None name: Optional[str] = None policy_url: Optional[str] = None has_data_use_condition: Optional[Union[Union[dict, DataUseCondition], List[Union[dict, DataUseCondition]]]] = empty_list() @@ -2155,8 +2082,8 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.has_data_access_committee): self.MissingRequiredField("has_data_access_committee") - if not isinstance(self.has_data_access_committee, DataAccessCommitteeId): - self.has_data_access_committee = DataAccessCommitteeId(self.has_data_access_committee) + if not isinstance(self.has_data_access_committee, DataAccessCommittee): + self.has_data_access_committee = DataAccessCommittee(**as_dict(self.has_data_access_committee)) if self.name is not None and not isinstance(self.name, str): self.name = str(self.name) @@ -2594,10 +2521,7 @@ class slots: model_uri=GHGA.url, domain=None, range=Optional[str]) slots.has_attribute = Slot(uri=GHGA.has_attribute, name="has attribute", curie=GHGA.curie('has_attribute'), - model_uri=GHGA.has_attribute, domain=None, range=Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]]) - -slots.parameters = Slot(uri=GHGA.parameters, name="parameters", curie=GHGA.curie('parameters'), - model_uri=GHGA.parameters, domain=None, range=Optional[Union[str, List[str]]]) + model_uri=GHGA.has_attribute, domain=None, range=Optional[Union[dict, Attribute]]) slots.description = Slot(uri=GHGA.description, name="description", curie=GHGA.curie('description'), model_uri=GHGA.description, domain=None, range=Optional[str]) @@ -2692,8 +2616,8 @@ class slots: slots.role = Slot(uri=GHGA.role, name="role", curie=GHGA.curie('role'), model_uri=GHGA.role, domain=None, range=Optional[Union[str, "UserRoleEnum"]]) -slots.proband = Slot(uri=GHGA.proband, name="proband", curie=GHGA.curie('proband'), - model_uri=GHGA.proband, domain=None, range=Optional[Union[str, IndividualId]]) +slots.has_proband = Slot(uri=GHGA.has_proband, name="has proband", curie=GHGA.curie('has_proband'), + model_uri=GHGA.has_proband, domain=None, range=Optional[Union[str, IndividualId]]) slots.permission = Slot(uri=GHGA.permission, name="permission", curie=GHGA.curie('permission'), model_uri=GHGA.permission, domain=None, range=Optional[str]) @@ -2762,7 +2686,7 @@ class slots: model_uri=GHGA.main_contact, domain=None, range=Optional[Union[str, MemberId]]) slots.has_member = Slot(uri=GHGA.has_member, name="has member", curie=GHGA.curie('has_member'), - model_uri=GHGA.has_member, domain=None, range=Optional[Union[str, List[str]]]) + model_uri=GHGA.has_member, domain=None, range=Optional[str]) slots.telephone = Slot(uri=GHGA.telephone, name="telephone", curie=GHGA.curie('telephone'), model_uri=GHGA.telephone, domain=None, range=Optional[str]) @@ -2939,10 +2863,10 @@ class slots: model_uri=GHGA.project_description, domain=Project, range=str) slots.project_has_publication = Slot(uri=GHGA.has_publication, name="project_has publication", curie=GHGA.curie('has_publication'), - model_uri=GHGA.project_has_publication, domain=Project, range=Optional[Union[Union[str, PublicationId], List[Union[str, PublicationId]]]]) + model_uri=GHGA.project_has_publication, domain=Project, range=Optional[Union[Dict[Union[str, PublicationId], Union[dict, "Publication"]], List[Union[dict, "Publication"]]]]) slots.project_has_study = Slot(uri=GHGA.has_study, name="project_has study", curie=GHGA.curie('has_study'), - model_uri=GHGA.project_has_study, domain=Project, range=Optional[Union[Union[str, ExperimentId], List[Union[str, ExperimentId]]]]) + model_uri=GHGA.project_has_study, domain=Project, range=Optional[Union[Dict[Union[str, ExperimentId], Union[dict, "Experiment"]], List[Union[dict, "Experiment"]]]]) slots.project_has_attribute = Slot(uri=GHGA.has_attribute, name="project_has attribute", curie=GHGA.curie('has_attribute'), model_uri=GHGA.project_has_attribute, domain=Project, range=Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]]) @@ -2960,55 +2884,67 @@ class slots: model_uri=GHGA.study_affiliation, domain=Study, range=Union[str, List[str]]) slots.study_has_publication = Slot(uri=GHGA.has_publication, name="study_has publication", curie=GHGA.curie('has_publication'), - model_uri=GHGA.study_has_publication, domain=Study, range=Optional[Union[Union[str, PublicationId], List[Union[str, PublicationId]]]]) + model_uri=GHGA.study_has_publication, domain=Study, range=Optional[Union[Dict[Union[str, PublicationId], Union[dict, "Publication"]], List[Union[dict, "Publication"]]]]) slots.study_has_experiment = Slot(uri=GHGA.has_experiment, name="study_has experiment", curie=GHGA.curie('has_experiment'), - model_uri=GHGA.study_has_experiment, domain=Study, range=Optional[Union[Union[str, ExperimentId], List[Union[str, ExperimentId]]]]) + model_uri=GHGA.study_has_experiment, domain=Study, range=Optional[Union[Dict[Union[str, ExperimentId], Union[dict, "Experiment"]], List[Union[dict, "Experiment"]]]]) slots.study_has_analysis = Slot(uri=GHGA.has_analysis, name="study_has analysis", curie=GHGA.curie('has_analysis'), - model_uri=GHGA.study_has_analysis, domain=Study, range=Optional[Union[Union[str, AnalysisId], List[Union[str, AnalysisId]]]]) + model_uri=GHGA.study_has_analysis, domain=Study, range=Optional[Union[Dict[Union[str, AnalysisId], Union[dict, "Analysis"]], List[Union[dict, "Analysis"]]]]) slots.study_has_project = Slot(uri=GHGA.has_project, name="study_has project", curie=GHGA.curie('has_project'), - model_uri=GHGA.study_has_project, domain=Study, range=Optional[Union[str, ProjectId]]) + model_uri=GHGA.study_has_project, domain=Study, range=Optional[Union[dict, Project]]) slots.study_has_attribute = Slot(uri=GHGA.has_attribute, name="study_has attribute", curie=GHGA.curie('has_attribute'), model_uri=GHGA.study_has_attribute, domain=Study, range=Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]]) -slots.experiment_name = Slot(uri=GHGA.name, name="experiment_name", curie=GHGA.curie('name'), - model_uri=GHGA.experiment_name, domain=Experiment, range=str) +slots.experiment_title = Slot(uri=GHGA.title, name="experiment_title", curie=GHGA.curie('title'), + model_uri=GHGA.experiment_title, domain=Experiment, range=str) slots.experiment_description = Slot(uri=GHGA.description, name="experiment_description", curie=GHGA.curie('description'), model_uri=GHGA.experiment_description, domain=Experiment, range=str) slots.experiment_has_study = Slot(uri=GHGA.has_study, name="experiment_has study", curie=GHGA.curie('has_study'), - model_uri=GHGA.experiment_has_study, domain=Experiment, range=Union[str, StudyId]) + model_uri=GHGA.experiment_has_study, domain=Experiment, range=Union[dict, Study]) slots.experiment_has_sample = Slot(uri=GHGA.has_sample, name="experiment_has sample", curie=GHGA.curie('has_sample'), - model_uri=GHGA.experiment_has_sample, domain=Experiment, range=Union[str, SampleId]) + model_uri=GHGA.experiment_has_sample, domain=Experiment, range=Union[dict, "Sample"]) slots.experiment_has_technology = Slot(uri=GHGA.has_technology, name="experiment_has technology", curie=GHGA.curie('has_technology'), - model_uri=GHGA.experiment_has_technology, domain=Experiment, range=Optional[Union[str, TechnologyId]]) + model_uri=GHGA.experiment_has_technology, domain=Experiment, range=Optional[Union[dict, "Technology"]]) slots.experiment_has_file = Slot(uri=GHGA.has_file, name="experiment_has file", curie=GHGA.curie('has_file'), - model_uri=GHGA.experiment_has_file, domain=Experiment, range=Optional[Union[Union[str, FileId], List[Union[str, FileId]]]]) + model_uri=GHGA.experiment_has_file, domain=Experiment, range=Optional[Union[Dict[Union[str, FileId], Union[dict, "File"]], List[Union[dict, "File"]]]]) slots.experiment_has_experiment_process = Slot(uri=GHGA.has_experiment_process, name="experiment_has experiment process", curie=GHGA.curie('has_experiment_process'), - model_uri=GHGA.experiment_has_experiment_process, domain=Experiment, range=Optional[Union[Union[str, ExperimentProcessId], List[Union[str, ExperimentProcessId]]]]) + model_uri=GHGA.experiment_has_experiment_process, domain=Experiment, range=Optional[Union[Dict[Union[str, ExperimentProcessId], Union[dict, "ExperimentProcess"]], List[Union[dict, "ExperimentProcess"]]]]) -slots.experiment_process_name = Slot(uri=GHGA.name, name="experiment process_name", curie=GHGA.curie('name'), - model_uri=GHGA.experiment_process_name, domain=ExperimentProcess, range=Optional[str]) +slots.experiment_process_title = Slot(uri=GHGA.title, name="experiment process_title", curie=GHGA.curie('title'), + model_uri=GHGA.experiment_process_title, domain=ExperimentProcess, range=Optional[str]) slots.experiment_process_has_input = Slot(uri=GHGA.has_input, name="experiment process_has input", curie=GHGA.curie('has_input'), - model_uri=GHGA.experiment_process_has_input, domain=ExperimentProcess, range=Optional[Union[str, SampleId]]) + model_uri=GHGA.experiment_process_has_input, domain=ExperimentProcess, range=Optional[Union[dict, "Sample"]]) slots.experiment_process_has_protocol = Slot(uri=GHGA.has_protocol, name="experiment process_has protocol", curie=GHGA.curie('has_protocol'), - model_uri=GHGA.experiment_process_has_protocol, domain=ExperimentProcess, range=Optional[Union[str, ProtocolId]]) + model_uri=GHGA.experiment_process_has_protocol, domain=ExperimentProcess, range=Optional[Union[dict, "Protocol"]]) slots.experiment_process_has_agent = Slot(uri=GHGA.has_agent, name="experiment process_has agent", curie=GHGA.curie('has_agent'), - model_uri=GHGA.experiment_process_has_agent, domain=ExperimentProcess, range=Optional[Union[str, AgentId]]) + model_uri=GHGA.experiment_process_has_agent, domain=ExperimentProcess, range=Optional[Union[dict, "Agent"]]) slots.experiment_process_has_output = Slot(uri=GHGA.has_output, name="experiment process_has output", curie=GHGA.curie('has_output'), - model_uri=GHGA.experiment_process_has_output, domain=ExperimentProcess, range=Optional[Union[str, FileId]]) + model_uri=GHGA.experiment_process_has_output, domain=ExperimentProcess, range=Optional[Union[dict, "File"]]) + +slots.protocol_name = Slot(uri=GHGA.name, name="protocol_name", curie=GHGA.curie('name'), + model_uri=GHGA.protocol_name, domain=Protocol, range=Optional[str]) + +slots.protocol_description = Slot(uri=GHGA.description, name="protocol_description", curie=GHGA.curie('description'), + model_uri=GHGA.protocol_description, domain=Protocol, range=Optional[str]) + +slots.protocol_url = Slot(uri=GHGA.url, name="protocol_url", curie=GHGA.curie('url'), + model_uri=GHGA.protocol_url, domain=Protocol, range=Optional[str]) + +slots.protocol_has_attribute = Slot(uri=GHGA.has_attribute, name="protocol_has attribute", curie=GHGA.curie('has_attribute'), + model_uri=GHGA.protocol_has_attribute, domain=Protocol, range=Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]]) slots.library_preparation_protocol_name = Slot(uri=GHGA.name, name="library preparation protocol_name", curie=GHGA.curie('name'), model_uri=GHGA.library_preparation_protocol_name, domain=LibraryPreparationProtocol, range=str) @@ -3028,18 +2964,6 @@ class slots: slots.sequencing_protocol_has_attribute = Slot(uri=GHGA.has_attribute, name="sequencing protocol_has attribute", curie=GHGA.curie('has_attribute'), model_uri=GHGA.sequencing_protocol_has_attribute, domain=SequencingProtocol, range=Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]]) -slots.protocol_name = Slot(uri=GHGA.name, name="protocol_name", curie=GHGA.curie('name'), - model_uri=GHGA.protocol_name, domain=Protocol, range=Optional[str]) - -slots.protocol_description = Slot(uri=GHGA.description, name="protocol_description", curie=GHGA.curie('description'), - model_uri=GHGA.protocol_description, domain=Protocol, range=Optional[str]) - -slots.protocol_url = Slot(uri=GHGA.url, name="protocol_url", curie=GHGA.curie('url'), - model_uri=GHGA.protocol_url, domain=Protocol, range=Optional[str]) - -slots.protocol_has_attribute = Slot(uri=GHGA.has_attribute, name="protocol_has attribute", curie=GHGA.curie('has_attribute'), - model_uri=GHGA.protocol_has_attribute, domain=Protocol, range=Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]]) - slots.workflow_step_has_parameter = Slot(uri=GHGA.has_parameter, name="workflow step_has parameter", curie=GHGA.curie('has_parameter'), model_uri=GHGA.workflow_step_has_parameter, domain=WorkflowStep, range=Optional[Union[Union[dict, "WorkflowParameter"], List[Union[dict, "WorkflowParameter"]]]]) @@ -3050,16 +2974,16 @@ class slots: model_uri=GHGA.workflow_parameter_value, domain=WorkflowParameter, range=Optional[str]) slots.biospecimen_has_individual = Slot(uri=GHGA.has_individual, name="biospecimen_has individual", curie=GHGA.curie('has_individual'), - model_uri=GHGA.biospecimen_has_individual, domain=Biospecimen, range=Optional[Union[str, IndividualId]]) + model_uri=GHGA.biospecimen_has_individual, domain=Biospecimen, range=Optional[Union[dict, "Individual"]]) slots.biospecimen_has_anatomical_entity = Slot(uri=GHGA.has_anatomical_entity, name="biospecimen_has anatomical entity", curie=GHGA.curie('has_anatomical_entity'), - model_uri=GHGA.biospecimen_has_anatomical_entity, domain=Biospecimen, range=Optional[Union[str, AnatomicalEntityId]]) + model_uri=GHGA.biospecimen_has_anatomical_entity, domain=Biospecimen, range=Optional[Union[dict, "AnatomicalEntity"]]) slots.biospecimen_has_disease = Slot(uri=GHGA.has_disease, name="biospecimen_has disease", curie=GHGA.curie('has_disease'), - model_uri=GHGA.biospecimen_has_disease, domain=Biospecimen, range=Optional[Union[str, DiseaseId]]) + model_uri=GHGA.biospecimen_has_disease, domain=Biospecimen, range=Optional[Union[Dict[Union[str, DiseaseId], Union[dict, "Disease"]], List[Union[dict, "Disease"]]]]) slots.biospecimen_has_phenotypic_feature = Slot(uri=GHGA.has_phenotypic_feature, name="biospecimen_has phenotypic feature", curie=GHGA.curie('has_phenotypic_feature'), - model_uri=GHGA.biospecimen_has_phenotypic_feature, domain=Biospecimen, range=Optional[Union[str, PhenotypicFeatureId]]) + model_uri=GHGA.biospecimen_has_phenotypic_feature, domain=Biospecimen, range=Optional[Union[Dict[Union[str, PhenotypicFeatureId], Union[dict, "PhenotypicFeature"]], List[Union[dict, "PhenotypicFeature"]]]]) slots.sample_name = Slot(uri=GHGA.name, name="sample_name", curie=GHGA.curie('name'), model_uri=GHGA.sample_name, domain=Sample, range=str) @@ -3080,13 +3004,13 @@ class slots: model_uri=GHGA.sample_storage, domain=Sample, range=Optional[str]) slots.sample_has_individual = Slot(uri=GHGA.has_individual, name="sample_has individual", curie=GHGA.curie('has_individual'), - model_uri=GHGA.sample_has_individual, domain=Sample, range=Union[str, IndividualId]) + model_uri=GHGA.sample_has_individual, domain=Sample, range=Union[dict, "Individual"]) slots.sample_xref = Slot(uri=GHGA.xref, name="sample_xref", curie=GHGA.curie('xref'), model_uri=GHGA.sample_xref, domain=Sample, range=Optional[Union[str, List[str]]]) slots.sample_has_biospecimen = Slot(uri=GHGA.has_biospecimen, name="sample_has biospecimen", curie=GHGA.curie('has_biospecimen'), - model_uri=GHGA.sample_has_biospecimen, domain=Sample, range=Optional[Union[str, BiospecimenId]]) + model_uri=GHGA.sample_has_biospecimen, domain=Sample, range=Optional[Union[dict, Biospecimen]]) slots.individual_gender = Slot(uri=GHGA.gender, name="individual_gender", curie=GHGA.curie('gender'), model_uri=GHGA.individual_gender, domain=Individual, range=Optional[str]) @@ -3113,19 +3037,19 @@ class slots: model_uri=GHGA.individual_geographical_region, domain=Individual, range=Optional[str]) slots.individual_has_parent = Slot(uri=GHGA.has_parent, name="individual_has parent", curie=GHGA.curie('has_parent'), - model_uri=GHGA.individual_has_parent, domain=Individual, range=Optional[str]) + model_uri=GHGA.individual_has_parent, domain=Individual, range=Optional[Union[Dict[Union[str, IndividualId], Union[dict, "Individual"]], List[Union[dict, "Individual"]]]]) slots.individual_has_children = Slot(uri=GHGA.has_children, name="individual_has children", curie=GHGA.curie('has_children'), - model_uri=GHGA.individual_has_children, domain=Individual, range=Optional[str]) + model_uri=GHGA.individual_has_children, domain=Individual, range=Optional[Union[Dict[Union[str, IndividualId], Union[dict, "Individual"]], List[Union[dict, "Individual"]]]]) slots.family_has_member = Slot(uri=GHGA.has_member, name="family_has member", curie=GHGA.curie('has_member'), - model_uri=GHGA.family_has_member, domain=Family, range=Optional[Union[Union[str, IndividualId], List[Union[str, IndividualId]]]]) + model_uri=GHGA.family_has_member, domain=Family, range=Optional[Union[Dict[Union[str, IndividualId], Union[dict, Individual]], List[Union[dict, Individual]]]]) -slots.family_proband = Slot(uri=GHGA.proband, name="family_proband", curie=GHGA.curie('proband'), - model_uri=GHGA.family_proband, domain=Family, range=Optional[Union[str, IndividualId]]) +slots.family_has_proband = Slot(uri=GHGA.has_proband, name="family_has proband", curie=GHGA.curie('has_proband'), + model_uri=GHGA.family_has_proband, domain=Family, range=Optional[Union[dict, Individual]]) slots.cohort_has_member = Slot(uri=GHGA.has_member, name="cohort_has member", curie=GHGA.curie('has_member'), - model_uri=GHGA.cohort_has_member, domain=Cohort, range=Optional[Union[Union[str, IndividualId], List[Union[str, IndividualId]]]]) + model_uri=GHGA.cohort_has_member, domain=Cohort, range=Optional[Union[Dict[Union[str, IndividualId], Union[dict, Individual]], List[Union[dict, Individual]]]]) slots.file_format = Slot(uri=GHGA.format, name="file_format", curie=GHGA.curie('format'), model_uri=GHGA.file_format, domain=File, range=Optional[str]) @@ -3146,31 +3070,31 @@ class slots: model_uri=GHGA.file_category, domain=File, range=Optional[str]) slots.analysis_has_input = Slot(uri=GHGA.has_input, name="analysis_has input", curie=GHGA.curie('has_input'), - model_uri=GHGA.analysis_has_input, domain=Analysis, range=Optional[Union[Union[str, FileId], List[Union[str, FileId]]]]) + model_uri=GHGA.analysis_has_input, domain=Analysis, range=Optional[Union[Dict[Union[str, FileId], Union[dict, File]], List[Union[dict, File]]]]) slots.analysis_has_study = Slot(uri=GHGA.has_study, name="analysis_has study", curie=GHGA.curie('has_study'), - model_uri=GHGA.analysis_has_study, domain=Analysis, range=Optional[Union[str, StudyId]]) + model_uri=GHGA.analysis_has_study, domain=Analysis, range=Optional[Union[dict, Study]]) slots.analysis_has_workflow = Slot(uri=GHGA.has_workflow, name="analysis_has workflow", curie=GHGA.curie('has_workflow'), - model_uri=GHGA.analysis_has_workflow, domain=Analysis, range=Optional[Union[str, WorkflowId]]) + model_uri=GHGA.analysis_has_workflow, domain=Analysis, range=Optional[Union[dict, Workflow]]) slots.analysis_has_analysis_process = Slot(uri=GHGA.has_analysis_process, name="analysis_has analysis process", curie=GHGA.curie('has_analysis_process'), - model_uri=GHGA.analysis_has_analysis_process, domain=Analysis, range=Optional[Union[Union[str, AnalysisProcessId], List[Union[str, AnalysisProcessId]]]]) + model_uri=GHGA.analysis_has_analysis_process, domain=Analysis, range=Optional[Union[Dict[Union[str, AnalysisProcessId], Union[dict, "AnalysisProcess"]], List[Union[dict, "AnalysisProcess"]]]]) slots.analysis_has_output = Slot(uri=GHGA.has_output, name="analysis_has output", curie=GHGA.curie('has_output'), - model_uri=GHGA.analysis_has_output, domain=Analysis, range=Optional[Union[Union[str, FileId], List[Union[str, FileId]]]]) + model_uri=GHGA.analysis_has_output, domain=Analysis, range=Optional[Union[Dict[Union[str, FileId], Union[dict, File]], List[Union[dict, File]]]]) slots.analysis_process_has_input = Slot(uri=GHGA.has_input, name="analysis process_has input", curie=GHGA.curie('has_input'), - model_uri=GHGA.analysis_process_has_input, domain=AnalysisProcess, range=Optional[Union[Union[str, FileId], List[Union[str, FileId]]]]) + model_uri=GHGA.analysis_process_has_input, domain=AnalysisProcess, range=Optional[Union[Dict[Union[str, FileId], Union[dict, File]], List[Union[dict, File]]]]) slots.analysis_process_has_workflow_step = Slot(uri=GHGA.has_workflow_step, name="analysis process_has workflow step", curie=GHGA.curie('has_workflow_step'), - model_uri=GHGA.analysis_process_has_workflow_step, domain=AnalysisProcess, range=Optional[Union[str, WorkflowStepId]]) + model_uri=GHGA.analysis_process_has_workflow_step, domain=AnalysisProcess, range=Optional[Union[dict, WorkflowStep]]) slots.analysis_process_has_agent = Slot(uri=GHGA.has_agent, name="analysis process_has agent", curie=GHGA.curie('has_agent'), - model_uri=GHGA.analysis_process_has_agent, domain=AnalysisProcess, range=Optional[Union[str, AgentId]]) + model_uri=GHGA.analysis_process_has_agent, domain=AnalysisProcess, range=Optional[Union[dict, Agent]]) slots.analysis_process_has_output = Slot(uri=GHGA.has_output, name="analysis process_has output", curie=GHGA.curie('has_output'), - model_uri=GHGA.analysis_process_has_output, domain=AnalysisProcess, range=Optional[Union[str, FileId]]) + model_uri=GHGA.analysis_process_has_output, domain=AnalysisProcess, range=Optional[Union[Dict[Union[str, FileId], Union[dict, File]], List[Union[dict, File]]]]) slots.dataset_title = Slot(uri=GHGA.title, name="dataset_title", curie=GHGA.curie('title'), model_uri=GHGA.dataset_title, domain=Dataset, range=str) @@ -3182,31 +3106,31 @@ class slots: model_uri=GHGA.dataset_type, domain=Dataset, range=str) 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[Union[str, FileId], List[Union[str, FileId]]]) + model_uri=GHGA.dataset_has_file, domain=Dataset, range=Union[Dict[Union[str, FileId], Union[dict, File]], List[Union[dict, File]]]) slots.dataset_has_publication = Slot(uri=GHGA.has_publication, name="dataset_has publication", curie=GHGA.curie('has_publication'), - model_uri=GHGA.dataset_has_publication, domain=Dataset, range=Optional[Union[Union[str, PublicationId], List[Union[str, PublicationId]]]]) + model_uri=GHGA.dataset_has_publication, domain=Dataset, range=Optional[Union[Dict[Union[str, PublicationId], Union[dict, "Publication"]], List[Union[dict, "Publication"]]]]) slots.experiment_dataset_has_data_access_policy = Slot(uri=GHGA.has_data_access_policy, name="experiment dataset_has data access policy", curie=GHGA.curie('has_data_access_policy'), - model_uri=GHGA.experiment_dataset_has_data_access_policy, domain=ExperimentDataset, range=Union[Union[str, DataAccessPolicyId], List[Union[str, DataAccessPolicyId]]]) + model_uri=GHGA.experiment_dataset_has_data_access_policy, domain=ExperimentDataset, range=Union[Dict[Union[str, DataAccessPolicyId], Union[dict, "DataAccessPolicy"]], List[Union[dict, "DataAccessPolicy"]]]) slots.experiment_dataset_has_study = Slot(uri=GHGA.has_study, name="experiment dataset_has study", curie=GHGA.curie('has_study'), - model_uri=GHGA.experiment_dataset_has_study, domain=ExperimentDataset, range=Union[Union[str, StudyId], List[Union[str, StudyId]]]) + model_uri=GHGA.experiment_dataset_has_study, domain=ExperimentDataset, range=Union[Dict[Union[str, StudyId], Union[dict, Study]], List[Union[dict, Study]]]) slots.experiment_dataset_has_experiment = Slot(uri=GHGA.has_experiment, name="experiment dataset_has experiment", curie=GHGA.curie('has_experiment'), - model_uri=GHGA.experiment_dataset_has_experiment, domain=ExperimentDataset, range=Union[Union[str, ExperimentId], List[Union[str, ExperimentId]]]) + model_uri=GHGA.experiment_dataset_has_experiment, domain=ExperimentDataset, range=Union[Dict[Union[str, ExperimentId], Union[dict, Experiment]], List[Union[dict, Experiment]]]) slots.analysis_dataset_has_data_access_policy = Slot(uri=GHGA.has_data_access_policy, name="analysis dataset_has data access policy", curie=GHGA.curie('has_data_access_policy'), - model_uri=GHGA.analysis_dataset_has_data_access_policy, domain=AnalysisDataset, range=Union[Union[str, DataAccessPolicyId], List[Union[str, DataAccessPolicyId]]]) + model_uri=GHGA.analysis_dataset_has_data_access_policy, domain=AnalysisDataset, range=Union[Dict[Union[str, DataAccessPolicyId], Union[dict, "DataAccessPolicy"]], List[Union[dict, "DataAccessPolicy"]]]) slots.analysis_dataset_has_study = Slot(uri=GHGA.has_study, name="analysis dataset_has study", curie=GHGA.curie('has_study'), - model_uri=GHGA.analysis_dataset_has_study, domain=AnalysisDataset, range=Union[Union[str, StudyId], List[Union[str, StudyId]]]) + model_uri=GHGA.analysis_dataset_has_study, domain=AnalysisDataset, range=Union[Dict[Union[str, StudyId], Union[dict, Study]], List[Union[dict, Study]]]) slots.analysis_dataset_has_experiment = Slot(uri=GHGA.has_experiment, name="analysis dataset_has experiment", curie=GHGA.curie('has_experiment'), - model_uri=GHGA.analysis_dataset_has_experiment, domain=AnalysisDataset, range=Union[Union[str, AnalysisId], List[Union[str, AnalysisId]]]) + model_uri=GHGA.analysis_dataset_has_experiment, domain=AnalysisDataset, range=Union[Dict[Union[str, AnalysisId], Union[dict, Analysis]], List[Union[dict, Analysis]]]) slots.aggregate_dataset_has_dataset = Slot(uri=GHGA.has_dataset, name="aggregate dataset_has dataset", curie=GHGA.curie('has_dataset'), - model_uri=GHGA.aggregate_dataset_has_dataset, domain=AggregateDataset, range=Optional[Union[Union[str, DatasetId], List[Union[str, DatasetId]]]]) + model_uri=GHGA.aggregate_dataset_has_dataset, domain=AggregateDataset, range=Optional[Union[Dict[Union[str, DatasetId], Union[dict, Dataset]], List[Union[dict, Dataset]]]]) slots.data_use_condition_permission = Slot(uri=GHGA.permission, name="data use condition_permission", curie=GHGA.curie('permission'), model_uri=GHGA.data_use_condition_permission, domain=DataUseCondition, range=Optional[str]) @@ -3224,7 +3148,7 @@ class slots: model_uri=GHGA.data_access_policy_policy_url, domain=DataAccessPolicy, range=Optional[str]) slots.data_access_policy_has_data_access_committee = Slot(uri=GHGA.has_data_access_committee, name="data access policy_has data access committee", curie=GHGA.curie('has_data_access_committee'), - model_uri=GHGA.data_access_policy_has_data_access_committee, domain=DataAccessPolicy, range=Union[str, DataAccessCommitteeId]) + model_uri=GHGA.data_access_policy_has_data_access_committee, domain=DataAccessPolicy, range=Union[dict, "DataAccessCommittee"]) slots.data_access_policy_has_data_use_condition = Slot(uri=GHGA.has_data_use_condition, name="data access policy_has data use condition", curie=GHGA.curie('has_data_use_condition'), model_uri=GHGA.data_access_policy_has_data_use_condition, domain=DataAccessPolicy, range=Optional[Union[Union[dict, DataUseCondition], List[Union[dict, DataUseCondition]]]]) @@ -3233,10 +3157,10 @@ class slots: model_uri=GHGA.data_access_committee_name, domain=DataAccessCommittee, range=str) slots.data_access_committee_main_contact = Slot(uri=GHGA.main_contact, name="data access committee_main contact", curie=GHGA.curie('main_contact'), - model_uri=GHGA.data_access_committee_main_contact, domain=DataAccessCommittee, range=Optional[Union[str, MemberId]]) + model_uri=GHGA.data_access_committee_main_contact, domain=DataAccessCommittee, range=Optional[Union[dict, "Member"]]) slots.data_access_committee_has_member = Slot(uri=GHGA.has_member, name="data access committee_has member", curie=GHGA.curie('has_member'), - model_uri=GHGA.data_access_committee_has_member, domain=DataAccessCommittee, range=Optional[Union[Union[str, MemberId], List[Union[str, MemberId]]]]) + model_uri=GHGA.data_access_committee_has_member, domain=DataAccessCommittee, range=Optional[Union[Dict[Union[str, MemberId], Union[dict, "Member"]], List[Union[dict, "Member"]]]]) slots.member_email = Slot(uri=GHGA.email, name="member_email", curie=GHGA.curie('email'), model_uri=GHGA.member_email, domain=Member, range=str) diff --git a/artifacts/rdf/ghga.ttl b/artifacts/rdf/ghga.ttl index 89c8452e..abed2507 100644 --- a/artifacts/rdf/ghga.ttl +++ b/artifacts/rdf/ghga.ttl @@ -75,22 +75,22 @@ <https://w3id.org/GHGA/submission_status_enum>, <https://w3id.org/GHGA/user_role_enum>, <https://w3id.org/GHGA/vital_status_enum> ; - linkml:generation_date "2021-11-23T08:51:00"^^xsd:dateTime ; + linkml:generation_date "2021-11-23T14:05:07"^^xsd:dateTime ; linkml:id <https://w3id.org/GHGA-Metadata-Schema> ; linkml:imports linkml:types ; linkml:metamodel_version "1.7.0" ; - linkml:prefixes [ linkml:prefix_prefix "SIO" ; - linkml:prefix_reference <http://semanticscience.org/resource/SIO_> ], + linkml:prefixes [ linkml:prefix_prefix "linkml" ; + linkml:prefix_reference linkml: ], [ linkml:prefix_prefix "biolink" ; linkml:prefix_reference <https://w3id.org/biolink/vocab/> ], - [ linkml:prefix_prefix "linkml" ; - linkml:prefix_reference linkml: ], [ linkml:prefix_prefix "GHGA" ; linkml:prefix_reference <https://w3id.org/GHGA/> ], + [ linkml:prefix_prefix "COB" ; + linkml:prefix_reference <http://purl.obolibrary.org/obo/COB_> ], [ linkml:prefix_prefix "EFO" ; linkml:prefix_reference <http://www.ebi.ac.uk/efo/EFO_> ], - [ linkml:prefix_prefix "COB" ; - linkml:prefix_reference <http://purl.obolibrary.org/obo/COB_> ] ; + [ linkml:prefix_prefix "SIO" ; + linkml:prefix_reference <http://semanticscience.org/resource/SIO_> ] ; linkml:slots <https://w3id.org/GHGA/abstract>, <https://w3id.org/GHGA/accession>, <https://w3id.org/GHGA/additional_name>, @@ -156,16 +156,16 @@ <https://w3id.org/GHGA/experiment_has_sample>, <https://w3id.org/GHGA/experiment_has_study>, <https://w3id.org/GHGA/experiment_has_technology>, - <https://w3id.org/GHGA/experiment_name>, <https://w3id.org/GHGA/experiment_process_has_agent>, <https://w3id.org/GHGA/experiment_process_has_input>, <https://w3id.org/GHGA/experiment_process_has_output>, <https://w3id.org/GHGA/experiment_process_has_protocol>, - <https://w3id.org/GHGA/experiment_process_name>, + <https://w3id.org/GHGA/experiment_process_title>, + <https://w3id.org/GHGA/experiment_title>, <https://w3id.org/GHGA/experimental_replicates>, <https://w3id.org/GHGA/family_has_member>, + <https://w3id.org/GHGA/family_has_proband>, <https://w3id.org/GHGA/family_name>, - <https://w3id.org/GHGA/family_proband>, <https://w3id.org/GHGA/file_category>, <https://w3id.org/GHGA/file_checksum>, <https://w3id.org/GHGA/file_file_index>, @@ -202,6 +202,7 @@ <https://w3id.org/GHGA/has_parameter>, <https://w3id.org/GHGA/has_parent>, <https://w3id.org/GHGA/has_phenotypic_feature>, + <https://w3id.org/GHGA/has_proband>, <https://w3id.org/GHGA/has_project>, <https://w3id.org/GHGA/has_protocol>, <https://w3id.org/GHGA/has_publication>, @@ -253,12 +254,10 @@ <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref>, <https://w3id.org/GHGA/organization>, - <https://w3id.org/GHGA/parameters>, <https://w3id.org/GHGA/permission>, <https://w3id.org/GHGA/policy_text>, <https://w3id.org/GHGA/policy_url>, <https://w3id.org/GHGA/primer>, - <https://w3id.org/GHGA/proband>, <https://w3id.org/GHGA/project_description>, <https://w3id.org/GHGA/project_has_attribute>, <https://w3id.org/GHGA/project_has_publication>, @@ -340,8 +339,8 @@ <https://w3id.org/GHGA/xref>, <https://w3id.org/GHGA/year_of_birth> ; linkml:source_file "ghga.yaml" ; - linkml:source_file_date "2021-11-23T08:50:06"^^xsd:dateTime ; - linkml:source_file_size 53312 ; + linkml:source_file_date "2021-11-23T14:04:26"^^xsd:dateTime ; + linkml:source_file_size 56544 ; linkml:types <https://w3id.org/GHGA/boolean>, <https://w3id.org/GHGA/date>, <https://w3id.org/GHGA/datetime>, @@ -535,6 +534,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_dataset> ; linkml:domain <https://w3id.org/GHGA/AggregateDataset> ; linkml:domain_of <https://w3id.org/GHGA/AggregateDataset> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_dataset> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -550,6 +551,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_data_access_policy> ; linkml:domain <https://w3id.org/GHGA/AnalysisDataset> ; linkml:domain_of <https://w3id.org/GHGA/AnalysisDataset> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_data_access_policy> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -566,6 +569,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_experiment> ; linkml:domain <https://w3id.org/GHGA/AnalysisDataset> ; linkml:domain_of <https://w3id.org/GHGA/AnalysisDataset> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_experiment> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -582,6 +587,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_study> ; linkml:domain <https://w3id.org/GHGA/AnalysisDataset> ; linkml:domain_of <https://w3id.org/GHGA/AnalysisDataset> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_study> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -598,6 +605,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_analysis_process> ; linkml:domain <https://w3id.org/GHGA/Analysis> ; linkml:domain_of <https://w3id.org/GHGA/Analysis> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_analysis_process> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -613,6 +622,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_input> ; linkml:domain <https://w3id.org/GHGA/Analysis> ; linkml:domain_of <https://w3id.org/GHGA/Analysis> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_input> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -628,6 +639,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_output> ; linkml:domain <https://w3id.org/GHGA/Analysis> ; linkml:domain_of <https://w3id.org/GHGA/Analysis> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_output> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -643,6 +656,7 @@ linkml:definition_uri <https://w3id.org/GHGA/has_study> ; linkml:domain <https://w3id.org/GHGA/Analysis> ; linkml:domain_of <https://w3id.org/GHGA/Analysis> ; + linkml:inlined true ; linkml:is_a <https://w3id.org/GHGA/has_study> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/Analysis> ; @@ -657,6 +671,7 @@ linkml:definition_uri <https://w3id.org/GHGA/has_workflow> ; linkml:domain <https://w3id.org/GHGA/Analysis> ; linkml:domain_of <https://w3id.org/GHGA/Analysis> ; + linkml:inlined true ; linkml:is_a <https://w3id.org/GHGA/has_workflow> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/Analysis> ; @@ -671,6 +686,7 @@ linkml:definition_uri <https://w3id.org/GHGA/has_agent> ; linkml:domain <https://w3id.org/GHGA/AnalysisProcess> ; linkml:domain_of <https://w3id.org/GHGA/AnalysisProcess> ; + linkml:inlined true ; linkml:is_a <https://w3id.org/GHGA/has_agent> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/AnalysisProcess> ; @@ -685,6 +701,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_input> ; linkml:domain <https://w3id.org/GHGA/AnalysisProcess> ; linkml:domain_of <https://w3id.org/GHGA/AnalysisProcess> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_input> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -700,8 +718,11 @@ linkml:definition_uri <https://w3id.org/GHGA/has_output> ; linkml:domain <https://w3id.org/GHGA/AnalysisProcess> ; linkml:domain_of <https://w3id.org/GHGA/AnalysisProcess> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_output> ; linkml:is_usage_slot true ; + linkml:multivalued true ; linkml:owner <https://w3id.org/GHGA/AnalysisProcess> ; linkml:range <https://w3id.org/GHGA/File> ; linkml:slot_uri <https://w3id.org/GHGA/has_output> ; @@ -714,6 +735,7 @@ linkml:definition_uri <https://w3id.org/GHGA/has_workflow_step> ; linkml:domain <https://w3id.org/GHGA/AnalysisProcess> ; linkml:domain_of <https://w3id.org/GHGA/AnalysisProcess> ; + linkml:inlined true ; linkml:is_a <https://w3id.org/GHGA/has_workflow_step> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/AnalysisProcess> ; @@ -787,6 +809,7 @@ linkml:definition_uri <https://w3id.org/GHGA/has_anatomical_entity> ; linkml:domain <https://w3id.org/GHGA/Biospecimen> ; linkml:domain_of <https://w3id.org/GHGA/Biospecimen> ; + linkml:inlined true ; linkml:is_a <https://w3id.org/GHGA/has_anatomical_entity> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/Biospecimen> ; @@ -801,8 +824,11 @@ linkml:definition_uri <https://w3id.org/GHGA/has_disease> ; linkml:domain <https://w3id.org/GHGA/Biospecimen> ; linkml:domain_of <https://w3id.org/GHGA/Biospecimen> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_disease> ; linkml:is_usage_slot true ; + linkml:multivalued true ; linkml:owner <https://w3id.org/GHGA/Biospecimen> ; linkml:range <https://w3id.org/GHGA/Disease> ; linkml:slot_uri <https://w3id.org/GHGA/has_disease> ; @@ -815,6 +841,7 @@ linkml:definition_uri <https://w3id.org/GHGA/has_individual> ; linkml:domain <https://w3id.org/GHGA/Biospecimen> ; linkml:domain_of <https://w3id.org/GHGA/Biospecimen> ; + linkml:inlined true ; linkml:is_a <https://w3id.org/GHGA/has_individual> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/Biospecimen> ; @@ -829,8 +856,11 @@ linkml:definition_uri <https://w3id.org/GHGA/has_phenotypic_feature> ; linkml:domain <https://w3id.org/GHGA/Biospecimen> ; linkml:domain_of <https://w3id.org/GHGA/Biospecimen> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_phenotypic_feature> ; linkml:is_usage_slot true ; + linkml:multivalued true ; linkml:owner <https://w3id.org/GHGA/Biospecimen> ; linkml:range <https://w3id.org/GHGA/PhenotypicFeature> ; linkml:slot_uri <https://w3id.org/GHGA/has_phenotypic_feature> ; @@ -858,6 +888,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_member> ; linkml:domain <https://w3id.org/GHGA/Cohort> ; linkml:domain_of <https://w3id.org/GHGA/Cohort> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_member> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -873,6 +905,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_member> ; linkml:domain <https://w3id.org/GHGA/DataAccessCommittee> ; linkml:domain_of <https://w3id.org/GHGA/DataAccessCommittee> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_member> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -888,6 +922,7 @@ linkml:definition_uri <https://w3id.org/GHGA/main_contact> ; linkml:domain <https://w3id.org/GHGA/DataAccessCommittee> ; linkml:domain_of <https://w3id.org/GHGA/DataAccessCommittee> ; + linkml:inlined true ; linkml:is_a <https://w3id.org/GHGA/main_contact> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/DataAccessCommittee> ; @@ -932,6 +967,7 @@ linkml:definition_uri <https://w3id.org/GHGA/has_data_access_committee> ; linkml:domain <https://w3id.org/GHGA/DataAccessPolicy> ; linkml:domain_of <https://w3id.org/GHGA/DataAccessPolicy> ; + linkml:inlined true ; linkml:is_a <https://w3id.org/GHGA/has_data_access_committee> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/DataAccessPolicy> ; @@ -948,6 +984,7 @@ linkml:domain <https://w3id.org/GHGA/DataAccessPolicy> ; linkml:domain_of <https://w3id.org/GHGA/DataAccessPolicy> ; linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_data_use_condition> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -1020,6 +1057,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_data_access_policy> ; linkml:domain <https://w3id.org/GHGA/ExperimentDataset> ; linkml:domain_of <https://w3id.org/GHGA/ExperimentDataset> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_data_access_policy> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -1036,6 +1075,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_experiment> ; linkml:domain <https://w3id.org/GHGA/ExperimentDataset> ; linkml:domain_of <https://w3id.org/GHGA/ExperimentDataset> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_experiment> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -1052,6 +1093,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_study> ; linkml:domain <https://w3id.org/GHGA/ExperimentDataset> ; linkml:domain_of <https://w3id.org/GHGA/ExperimentDataset> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_study> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -1083,6 +1126,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_experiment_process> ; linkml:domain <https://w3id.org/GHGA/Experiment> ; linkml:domain_of <https://w3id.org/GHGA/Experiment> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_experiment_process> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -1098,6 +1143,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_file> ; linkml:domain <https://w3id.org/GHGA/Experiment> ; linkml:domain_of <https://w3id.org/GHGA/Experiment> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_file> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -1113,6 +1160,7 @@ linkml:definition_uri <https://w3id.org/GHGA/has_sample> ; linkml:domain <https://w3id.org/GHGA/Experiment> ; linkml:domain_of <https://w3id.org/GHGA/Experiment> ; + linkml:inlined true ; linkml:is_a <https://w3id.org/GHGA/has_sample> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/Experiment> ; @@ -1128,6 +1176,7 @@ linkml:definition_uri <https://w3id.org/GHGA/has_study> ; linkml:domain <https://w3id.org/GHGA/Experiment> ; linkml:domain_of <https://w3id.org/GHGA/Experiment> ; + linkml:inlined true ; linkml:is_a <https://w3id.org/GHGA/has_study> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/Experiment> ; @@ -1143,6 +1192,7 @@ linkml:definition_uri <https://w3id.org/GHGA/has_technology> ; linkml:domain <https://w3id.org/GHGA/Experiment> ; linkml:domain_of <https://w3id.org/GHGA/Experiment> ; + linkml:inlined true ; linkml:is_a <https://w3id.org/GHGA/has_technology> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/Experiment> ; @@ -1150,21 +1200,6 @@ linkml:slot_uri <https://w3id.org/GHGA/has_technology> ; linkml:usage_slot_name "has technology" . -<https://w3id.org/GHGA/experiment_name> a linkml:SlotDefinition ; - skos:definition "Name for the experiment (eg: GHGAE_PBMC_RNAseq)." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "name" ; - linkml:definition_uri <https://w3id.org/GHGA/name> ; - linkml:domain <https://w3id.org/GHGA/Experiment> ; - linkml:domain_of <https://w3id.org/GHGA/Experiment> ; - linkml:is_a <https://w3id.org/GHGA/name> ; - linkml:is_usage_slot true ; - linkml:owner <https://w3id.org/GHGA/Experiment> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:required true ; - linkml:slot_uri <https://w3id.org/GHGA/name> ; - linkml:usage_slot_name "name" . - <https://w3id.org/GHGA/experiment_process_has_agent> a linkml:SlotDefinition ; skos:definition "The Agent - a software, institution, or human - that is executing or responsible for executing the Experiment Process." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -1172,6 +1207,7 @@ linkml:definition_uri <https://w3id.org/GHGA/has_agent> ; linkml:domain <https://w3id.org/GHGA/ExperimentProcess> ; linkml:domain_of <https://w3id.org/GHGA/ExperimentProcess> ; + linkml:inlined true ; linkml:is_a <https://w3id.org/GHGA/has_agent> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/ExperimentProcess> ; @@ -1186,6 +1222,7 @@ linkml:definition_uri <https://w3id.org/GHGA/has_input> ; linkml:domain <https://w3id.org/GHGA/ExperimentProcess> ; linkml:domain_of <https://w3id.org/GHGA/ExperimentProcess> ; + linkml:inlined true ; linkml:is_a <https://w3id.org/GHGA/has_input> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/ExperimentProcess> ; @@ -1200,6 +1237,7 @@ linkml:definition_uri <https://w3id.org/GHGA/has_output> ; linkml:domain <https://w3id.org/GHGA/ExperimentProcess> ; linkml:domain_of <https://w3id.org/GHGA/ExperimentProcess> ; + linkml:inlined true ; linkml:is_a <https://w3id.org/GHGA/has_output> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/ExperimentProcess> ; @@ -1214,6 +1252,7 @@ linkml:definition_uri <https://w3id.org/GHGA/has_protocol> ; linkml:domain <https://w3id.org/GHGA/ExperimentProcess> ; linkml:domain_of <https://w3id.org/GHGA/ExperimentProcess> ; + linkml:inlined true ; linkml:is_a <https://w3id.org/GHGA/has_protocol> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/ExperimentProcess> ; @@ -1221,19 +1260,34 @@ linkml:slot_uri <https://w3id.org/GHGA/has_protocol> ; linkml:usage_slot_name "has protocol" . -<https://w3id.org/GHGA/experiment_process_name> a linkml:SlotDefinition ; - skos:definition "Explanation of the step(s) involved in performing the experiment until Sequencing part (eg: Sample extraction -> Target Enrichment) " ; +<https://w3id.org/GHGA/experiment_process_title> a linkml:SlotDefinition ; + skos:definition "A descriptive title that explains the step(s) involved in performing the experiment leading up to the sequencing of the sample and generation of raw data from the instrument. (eg: Sample extraction -> Target Enrichment) " ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "name" ; - linkml:definition_uri <https://w3id.org/GHGA/name> ; + skos:prefLabel "title" ; + linkml:definition_uri <https://w3id.org/GHGA/title> ; linkml:domain <https://w3id.org/GHGA/ExperimentProcess> ; linkml:domain_of <https://w3id.org/GHGA/ExperimentProcess> ; - linkml:is_a <https://w3id.org/GHGA/name> ; + linkml:is_a <https://w3id.org/GHGA/title> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/ExperimentProcess> ; linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/name> ; - linkml:usage_slot_name "name" . + linkml:slot_uri <https://w3id.org/GHGA/title> ; + linkml:usage_slot_name "title" . + +<https://w3id.org/GHGA/experiment_title> a linkml:SlotDefinition ; + skos:definition "Name for the experiment (eg: GHGAE_PBMC_RNAseq)." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "title" ; + linkml:definition_uri <https://w3id.org/GHGA/title> ; + linkml:domain <https://w3id.org/GHGA/Experiment> ; + linkml:domain_of <https://w3id.org/GHGA/Experiment> ; + linkml:is_a <https://w3id.org/GHGA/title> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/Experiment> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:required true ; + linkml:slot_uri <https://w3id.org/GHGA/title> ; + linkml:usage_slot_name "title" . <https://w3id.org/GHGA/family_has_member> a linkml:SlotDefinition ; skos:definition "One or more Individuals that collectively define this Family." ; @@ -1242,6 +1296,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_member> ; linkml:domain <https://w3id.org/GHGA/Family> ; linkml:domain_of <https://w3id.org/GHGA/Family> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_member> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -1250,19 +1306,20 @@ linkml:slot_uri <https://w3id.org/GHGA/has_member> ; linkml:usage_slot_name "has member" . -<https://w3id.org/GHGA/family_proband> a linkml:SlotDefinition ; +<https://w3id.org/GHGA/family_has_proband> a linkml:SlotDefinition ; skos:definition "The Individual that is reported to have a disorder which results in the Family being brought into a Study." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "proband" ; - linkml:definition_uri <https://w3id.org/GHGA/proband> ; + skos:prefLabel "has proband" ; + linkml:definition_uri <https://w3id.org/GHGA/has_proband> ; linkml:domain <https://w3id.org/GHGA/Family> ; linkml:domain_of <https://w3id.org/GHGA/Family> ; - linkml:is_a <https://w3id.org/GHGA/proband> ; + linkml:inlined true ; + linkml:is_a <https://w3id.org/GHGA/has_proband> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/Family> ; linkml:range <https://w3id.org/GHGA/Individual> ; - linkml:slot_uri <https://w3id.org/GHGA/proband> ; - linkml:usage_slot_name "proband" . + linkml:slot_uri <https://w3id.org/GHGA/has_proband> ; + linkml:usage_slot_name "has proband" . <https://w3id.org/GHGA/file_category> a linkml:SlotDefinition ; skos:definition "The category for this file: Whole Genome Sequencing, Whole Exome Sequencing, etc." ; @@ -1368,7 +1425,7 @@ linkml:definition_uri <https://w3id.org/GHGA/description> ; linkml:domain <https://w3id.org/GHGA/LibraryPreparationProtocol> ; linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; - linkml:is_a <https://w3id.org/GHGA/description> ; + linkml:is_a <https://w3id.org/GHGA/protocol_description> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; linkml:range <https://w3id.org/GHGA/string> ; @@ -1384,7 +1441,8 @@ linkml:domain <https://w3id.org/GHGA/LibraryPreparationProtocol> ; linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; linkml:inlined true ; - linkml:is_a <https://w3id.org/GHGA/has_attribute> ; + linkml:inlined_as_list true ; + linkml:is_a <https://w3id.org/GHGA/protocol_has_attribute> ; linkml:is_usage_slot true ; linkml:multivalued true ; linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; @@ -1399,7 +1457,7 @@ linkml:definition_uri <https://w3id.org/GHGA/name> ; linkml:domain <https://w3id.org/GHGA/LibraryPreparationProtocol> ; linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; - linkml:is_a <https://w3id.org/GHGA/name> ; + linkml:is_a <https://w3id.org/GHGA/protocol_name> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; linkml:range <https://w3id.org/GHGA/string> ; @@ -1490,6 +1548,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_publication> ; linkml:domain <https://w3id.org/GHGA/Project> ; linkml:domain_of <https://w3id.org/GHGA/Project> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_publication> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -1505,6 +1565,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_study> ; linkml:domain <https://w3id.org/GHGA/Project> ; linkml:domain_of <https://w3id.org/GHGA/Project> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_study> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -1528,51 +1590,6 @@ linkml:slot_uri <https://w3id.org/GHGA/title> ; linkml:usage_slot_name "title" . -<https://w3id.org/GHGA/protocol_description> a linkml:SlotDefinition ; - skos:definition "Detailed description of the Protocol." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "description" ; - linkml:definition_uri <https://w3id.org/GHGA/description> ; - linkml:domain <https://w3id.org/GHGA/Protocol> ; - linkml:domain_of <https://w3id.org/GHGA/Protocol> ; - linkml:is_a <https://w3id.org/GHGA/description> ; - linkml:is_usage_slot true ; - linkml:owner <https://w3id.org/GHGA/Protocol> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/description> ; - linkml:usage_slot_name "description" . - -<https://w3id.org/GHGA/protocol_has_attribute> a linkml:SlotDefinition ; - skos:definition "One or more attributes that further characterizes this Protocol." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "has attribute" ; - linkml:definition_uri <https://w3id.org/GHGA/has_attribute> ; - linkml:domain <https://w3id.org/GHGA/Protocol> ; - linkml:domain_of <https://w3id.org/GHGA/Protocol> ; - linkml:inlined true ; - linkml:inlined_as_list true ; - linkml:is_a <https://w3id.org/GHGA/named_thing_has_attribute> ; - linkml:is_usage_slot true ; - linkml:multivalued true ; - linkml:owner <https://w3id.org/GHGA/Protocol> ; - linkml:range <https://w3id.org/GHGA/Attribute> ; - linkml:slot_uri <https://w3id.org/GHGA/has_attribute> ; - linkml:usage_slot_name "has attribute" . - -<https://w3id.org/GHGA/protocol_name> a linkml:SlotDefinition ; - skos:definition "Name of the Protocol." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "name" ; - linkml:definition_uri <https://w3id.org/GHGA/name> ; - linkml:domain <https://w3id.org/GHGA/Protocol> ; - linkml:domain_of <https://w3id.org/GHGA/Protocol> ; - linkml:is_a <https://w3id.org/GHGA/name> ; - linkml:is_usage_slot true ; - linkml:owner <https://w3id.org/GHGA/Protocol> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/name> ; - linkml:usage_slot_name "name" . - <https://w3id.org/GHGA/publication_abstract> a linkml:SlotDefinition ; skos:definition "The abstract of the Publication." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -1659,6 +1676,7 @@ linkml:definition_uri <https://w3id.org/GHGA/has_biospecimen> ; linkml:domain <https://w3id.org/GHGA/Sample> ; linkml:domain_of <https://w3id.org/GHGA/Sample> ; + linkml:inlined true ; linkml:is_a <https://w3id.org/GHGA/has_biospecimen> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/Sample> ; @@ -1673,6 +1691,7 @@ linkml:definition_uri <https://w3id.org/GHGA/has_individual> ; linkml:domain <https://w3id.org/GHGA/Sample> ; linkml:domain_of <https://w3id.org/GHGA/Sample> ; + linkml:inlined true ; linkml:is_a <https://w3id.org/GHGA/has_individual> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/Sample> ; @@ -1775,7 +1794,7 @@ linkml:definition_uri <https://w3id.org/GHGA/description> ; linkml:domain <https://w3id.org/GHGA/SequencingProtocol> ; linkml:domain_of <https://w3id.org/GHGA/SequencingProtocol> ; - linkml:is_a <https://w3id.org/GHGA/description> ; + linkml:is_a <https://w3id.org/GHGA/protocol_description> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/SequencingProtocol> ; linkml:range <https://w3id.org/GHGA/string> ; @@ -1790,7 +1809,8 @@ linkml:domain <https://w3id.org/GHGA/SequencingProtocol> ; linkml:domain_of <https://w3id.org/GHGA/SequencingProtocol> ; linkml:inlined true ; - linkml:is_a <https://w3id.org/GHGA/has_attribute> ; + linkml:inlined_as_list true ; + linkml:is_a <https://w3id.org/GHGA/protocol_has_attribute> ; linkml:is_usage_slot true ; linkml:multivalued true ; linkml:owner <https://w3id.org/GHGA/SequencingProtocol> ; @@ -1805,7 +1825,7 @@ linkml:definition_uri <https://w3id.org/GHGA/name> ; linkml:domain <https://w3id.org/GHGA/SequencingProtocol> ; linkml:domain_of <https://w3id.org/GHGA/SequencingProtocol> ; - linkml:is_a <https://w3id.org/GHGA/name> ; + linkml:is_a <https://w3id.org/GHGA/protocol_name> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/SequencingProtocol> ; linkml:range <https://w3id.org/GHGA/string> ; @@ -1850,6 +1870,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_analysis> ; linkml:domain <https://w3id.org/GHGA/Study> ; linkml:domain_of <https://w3id.org/GHGA/Study> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_analysis> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -1882,6 +1904,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_experiment> ; linkml:domain <https://w3id.org/GHGA/Study> ; linkml:domain_of <https://w3id.org/GHGA/Study> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_experiment> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -1897,6 +1921,7 @@ linkml:definition_uri <https://w3id.org/GHGA/has_project> ; linkml:domain <https://w3id.org/GHGA/Study> ; linkml:domain_of <https://w3id.org/GHGA/Study> ; + linkml:inlined true ; linkml:is_a <https://w3id.org/GHGA/has_project> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/Study> ; @@ -1911,6 +1936,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_publication> ; linkml:domain <https://w3id.org/GHGA/Study> ; linkml:domain_of <https://w3id.org/GHGA/Study> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_publication> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -1941,7 +1968,7 @@ linkml:definition_uri <https://w3id.org/GHGA/type> ; linkml:domain <https://w3id.org/GHGA/Study> ; linkml:domain_of <https://w3id.org/GHGA/Study> ; - linkml:is_a <https://w3id.org/GHGA/type> ; + linkml:is_a <https://w3id.org/GHGA/named_thing_type> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/Study> ; linkml:range <https://w3id.org/GHGA/study_type_enum> ; @@ -2176,6 +2203,7 @@ linkml:domain <https://w3id.org/GHGA/WorkflowStep> ; linkml:domain_of <https://w3id.org/GHGA/WorkflowStep> ; linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_parameter> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -2329,10 +2357,13 @@ linkml:definition_uri <https://w3id.org/GHGA/has_children> ; linkml:domain <https://w3id.org/GHGA/Individual> ; linkml:domain_of <https://w3id.org/GHGA/Individual> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_children> ; linkml:is_usage_slot true ; + linkml:multivalued true ; linkml:owner <https://w3id.org/GHGA/Individual> ; - linkml:range <https://w3id.org/GHGA/string> ; + linkml:range <https://w3id.org/GHGA/Individual> ; linkml:slot_uri <https://w3id.org/GHGA/has_children> ; linkml:usage_slot_name "has children" . @@ -2343,10 +2374,13 @@ linkml:definition_uri <https://w3id.org/GHGA/has_parent> ; linkml:domain <https://w3id.org/GHGA/Individual> ; linkml:domain_of <https://w3id.org/GHGA/Individual> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_parent> ; linkml:is_usage_slot true ; + linkml:multivalued true ; linkml:owner <https://w3id.org/GHGA/Individual> ; - linkml:range <https://w3id.org/GHGA/string> ; + linkml:range <https://w3id.org/GHGA/Individual> ; linkml:slot_uri <https://w3id.org/GHGA/has_parent> ; linkml:usage_slot_name "has parent" . @@ -2402,14 +2436,6 @@ linkml:imported_from "linkml:types" ; linkml:uri xsd:integer . -<https://w3id.org/GHGA/parameters> a linkml:SlotDefinition ; - skos:definition "Paramaters associated with a Workflow Step entity." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/parameters> ; - linkml:multivalued true ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/parameters> . - <https://w3id.org/GHGA/user_role_enum> skos:definition "Enum to capture the different roles a GHGA User can have." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/UserRoleEnum> ; @@ -2612,6 +2638,51 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/primer> . +<https://w3id.org/GHGA/protocol_description> a linkml:SlotDefinition ; + skos:definition "Detailed description of the Protocol." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "description" ; + linkml:definition_uri <https://w3id.org/GHGA/description> ; + linkml:domain <https://w3id.org/GHGA/Protocol> ; + linkml:domain_of <https://w3id.org/GHGA/Protocol> ; + linkml:is_a <https://w3id.org/GHGA/description> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/Protocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/description> ; + linkml:usage_slot_name "description" . + +<https://w3id.org/GHGA/protocol_has_attribute> a linkml:SlotDefinition ; + skos:definition "One or more attributes that further characterizes this Protocol." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "has attribute" ; + linkml:definition_uri <https://w3id.org/GHGA/has_attribute> ; + linkml:domain <https://w3id.org/GHGA/Protocol> ; + linkml:domain_of <https://w3id.org/GHGA/Protocol> ; + linkml:inlined true ; + linkml:inlined_as_list true ; + linkml:is_a <https://w3id.org/GHGA/named_thing_has_attribute> ; + linkml:is_usage_slot true ; + linkml:multivalued true ; + linkml:owner <https://w3id.org/GHGA/Protocol> ; + linkml:range <https://w3id.org/GHGA/Attribute> ; + linkml:slot_uri <https://w3id.org/GHGA/has_attribute> ; + linkml:usage_slot_name "has attribute" . + +<https://w3id.org/GHGA/protocol_name> a linkml:SlotDefinition ; + skos:definition "Name of the Protocol." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "name" ; + linkml:definition_uri <https://w3id.org/GHGA/name> ; + linkml:domain <https://w3id.org/GHGA/Protocol> ; + linkml:domain_of <https://w3id.org/GHGA/Protocol> ; + linkml:is_a <https://w3id.org/GHGA/name> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/Protocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/name> ; + linkml:usage_slot_name "name" . + <https://w3id.org/GHGA/protocol_url> a linkml:SlotDefinition ; skos:definition "URL for the resource that describes this Protocol." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -2811,6 +2882,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_file> ; linkml:domain <https://w3id.org/GHGA/Dataset> ; linkml:domain_of <https://w3id.org/GHGA/Dataset> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_file> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -2827,6 +2900,8 @@ linkml:definition_uri <https://w3id.org/GHGA/has_publication> ; linkml:domain <https://w3id.org/GHGA/Dataset> ; linkml:domain_of <https://w3id.org/GHGA/Dataset> ; + linkml:inlined true ; + linkml:inlined_as_list true ; linkml:is_a <https://w3id.org/GHGA/has_publication> ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -2865,6 +2940,24 @@ linkml:slot_uri <https://w3id.org/GHGA/type> ; linkml:usage_slot_name "type" . +<https://w3id.org/GHGA/submission_date> a linkml:SlotDefinition ; + skos:definition "The date when submission was completed." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/submission_date> ; + linkml:domain_of <https://w3id.org/GHGA/SubmissionStatusMixin> ; + linkml:owner <https://w3id.org/GHGA/SubmissionStatusMixin> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/submission_date> . + +<https://w3id.org/GHGA/submission_status> a linkml:SlotDefinition ; + skos:definition "The status of submission." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/submission_status> ; + linkml:domain_of <https://w3id.org/GHGA/SubmissionStatusMixin> ; + linkml:owner <https://w3id.org/GHGA/SubmissionStatusMixin> ; + linkml:range <https://w3id.org/GHGA/submission_status_enum> ; + linkml:slot_uri <https://w3id.org/GHGA/submission_status> . + <https://w3id.org/GHGA/Committee> a linkml:ClassDefinition ; skos:definition "A group of people organized for a specific purpose." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3099,6 +3192,7 @@ linkml:slot_uri <https://w3id.org/GHGA/has_data_use_condition> . <https://w3id.org/GHGA/has_dataset> a linkml:SlotDefinition ; + skos:definition "The Dataset associated with an entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/has_dataset> ; linkml:domain_of <https://w3id.org/GHGA/AggregateDataset> ; @@ -3124,6 +3218,7 @@ linkml:slot_uri <https://w3id.org/GHGA/has_experiment_process> . <https://w3id.org/GHGA/has_parameter> a linkml:SlotDefinition ; + skos:definition "The parameter(s) associated with a Workflow Step entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/has_parameter> ; linkml:domain_of <https://w3id.org/GHGA/WorkflowStep> ; @@ -3150,6 +3245,15 @@ linkml:range <https://w3id.org/GHGA/PhenotypicFeature> ; linkml:slot_uri <https://w3id.org/GHGA/has_phenotypic_feature> . +<https://w3id.org/GHGA/has_proband> a linkml:SlotDefinition ; + skos:definition "The Individual that is reported to have a disorder in a Family." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/has_proband> ; + linkml:domain_of <https://w3id.org/GHGA/Family> ; + linkml:owner <https://w3id.org/GHGA/Family> ; + linkml:range <https://w3id.org/GHGA/Individual> ; + linkml:slot_uri <https://w3id.org/GHGA/has_proband> . + <https://w3id.org/GHGA/has_protocol> a linkml:SlotDefinition ; skos:definition "The protocol associated with an entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3169,6 +3273,7 @@ linkml:slot_uri <https://w3id.org/GHGA/has_technology> . <https://w3id.org/GHGA/has_workflow> a linkml:SlotDefinition ; + skos:definition "The Workflow entity associated wtih a Planned Process entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/has_workflow> ; linkml:domain_of <https://w3id.org/GHGA/Analysis> ; @@ -3177,6 +3282,7 @@ linkml:slot_uri <https://w3id.org/GHGA/has_workflow> . <https://w3id.org/GHGA/has_workflow_step> a linkml:SlotDefinition ; + skos:definition "The individual workflow step that with other workflow step(s) collectively defines a Workflow entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/has_workflow_step> ; linkml:domain_of <https://w3id.org/GHGA/AnalysisProcess> ; @@ -3256,15 +3362,8 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/policy_url> . -<https://w3id.org/GHGA/proband> a linkml:SlotDefinition ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/proband> ; - linkml:domain_of <https://w3id.org/GHGA/Family> ; - linkml:owner <https://w3id.org/GHGA/Family> ; - linkml:range <https://w3id.org/GHGA/Individual> ; - linkml:slot_uri <https://w3id.org/GHGA/proband> . - -<https://w3id.org/GHGA/role> a linkml:SlotDefinition ; +<https://w3id.org/GHGA/role> a linkml:SlotDefinition ; + skos:definition "The role that a user has within GHGA." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/role> ; linkml:domain_of <https://w3id.org/GHGA/User> ; @@ -3273,7 +3372,7 @@ linkml:slot_uri <https://w3id.org/GHGA/role> . <https://w3id.org/GHGA/sex> a linkml:SlotDefinition ; - skos:definition "The assemblage of physical properties or qualities by which male is distinguished from female.[NCI]" ; + skos:definition "The assemblage of physical properties or qualities by which male is distinguished from female. [NCI]" ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/sex> ; linkml:domain_of <https://w3id.org/GHGA/Individual> ; @@ -3470,9 +3569,7 @@ <https://w3id.org/GHGA/named_thing_xref>, <https://w3id.org/GHGA/release_date>, <https://w3id.org/GHGA/release_status>, - <https://w3id.org/GHGA/replaced_by>, - <https://w3id.org/GHGA/submission_date>, - <https://w3id.org/GHGA/submission_status> . + <https://w3id.org/GHGA/replaced_by> . <https://w3id.org/GHGA/DataTransformation> a linkml:ClassDefinition ; skos:definition "A data transformation technique used to analyze and interpret data to gain a better understanding of it." ; @@ -3492,6 +3589,34 @@ <https://w3id.org/GHGA/named_thing_xref>, <https://w3id.org/GHGA/title> . +<https://w3id.org/GHGA/Investigation> a linkml:ClassDefinition ; + skos:closeMatch <ncit:C15429> ; + 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 <https://w3id.org/GHGA/OBI:0000066>, + <https://w3id.org/GHGA/SIO:000747> ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/Investigation> ; + linkml:definition_uri <https://w3id.org/GHGA/Investigation> ; + linkml:is_a <https://w3id.org/GHGA/PlannedProcess> ; + linkml:mixins <https://w3id.org/GHGA/DeprecationMixin>, + <https://w3id.org/GHGA/ReleaseStatusMixin> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/deprecated>, + <https://w3id.org/GHGA/deprecation_date>, + <https://w3id.org/GHGA/description>, + <https://w3id.org/GHGA/has_publication>, + <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_has_attribute>, + <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_type>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/release_date>, + <https://w3id.org/GHGA/release_status>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/title> . + <https://w3id.org/GHGA/MaterialEntity> a linkml:ClassDefinition ; skos:definition "A material entity is a physical entity that is spatially extended, exists as a whole at any point in time and has mass." ; skos:exactMatch <https://w3id.org/GHGA/SIO:000004> ; @@ -3526,6 +3651,16 @@ <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref> . +<https://w3id.org/GHGA/SubmissionStatusMixin> a linkml:ClassDefinition ; + skos:definition "A mixin that keeps track of the submission status." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/SubmissionStatusMixin> ; + linkml:definition_uri <https://w3id.org/GHGA/SubmissionStatusMixin> ; + linkml:mixin true ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/submission_date>, + <https://w3id.org/GHGA/submission_status> . + <https://w3id.org/GHGA/additional_name> a linkml:SlotDefinition ; skos:definition "Additional name(s)." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3553,34 +3688,6 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/given_name> . -<https://w3id.org/GHGA/Investigation> a linkml:ClassDefinition ; - skos:closeMatch <ncit:C15429> ; - 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 <https://w3id.org/GHGA/OBI:0000066>, - <https://w3id.org/GHGA/SIO:000747> ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/Investigation> ; - linkml:definition_uri <https://w3id.org/GHGA/Investigation> ; - linkml:is_a <https://w3id.org/GHGA/PlannedProcess> ; - linkml:mixins <https://w3id.org/GHGA/DeprecationMixin>, - <https://w3id.org/GHGA/ReleaseStatusMixin> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/deprecated>, - <https://w3id.org/GHGA/deprecation_date>, - <https://w3id.org/GHGA/description>, - <https://w3id.org/GHGA/has_publication>, - <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_has_attribute>, - <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref>, - <https://w3id.org/GHGA/release_date>, - <https://w3id.org/GHGA/release_status>, - <https://w3id.org/GHGA/replaced_by>, - <https://w3id.org/GHGA/title>, - <https://w3id.org/GHGA/type> . - <https://w3id.org/GHGA/ReleaseStatusMixin> a linkml:ClassDefinition ; skos:definition "A mixin that keeps track of the release status." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3591,17 +3698,8 @@ linkml:slots <https://w3id.org/GHGA/release_date>, <https://w3id.org/GHGA/release_status> . -<https://w3id.org/GHGA/SubmissionStatusMixin> a linkml:ClassDefinition ; - skos:definition "A mixin that keeps track of the submission status." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/SubmissionStatusMixin> ; - linkml:definition_uri <https://w3id.org/GHGA/SubmissionStatusMixin> ; - linkml:mixin true ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/submission_date>, - <https://w3id.org/GHGA/submission_status> . - <https://w3id.org/GHGA/has_agent> a linkml:SlotDefinition ; + skos:definition "A person or an entity that is performing a Planned Process entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/has_agent> ; linkml:domain_of <https://w3id.org/GHGA/AnalysisProcess>, @@ -3611,6 +3709,7 @@ linkml:slot_uri <https://w3id.org/GHGA/has_agent> . <https://w3id.org/GHGA/has_biospecimen> a linkml:SlotDefinition ; + skos:definition "The biospecimen associated with an entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/has_biospecimen> ; linkml:domain_of <https://w3id.org/GHGA/Sample>, @@ -3649,24 +3748,6 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/key> . -<https://w3id.org/GHGA/submission_date> a linkml:SlotDefinition ; - skos:definition "The date when submission was completed." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/submission_date> ; - linkml:domain_of <https://w3id.org/GHGA/SubmissionStatusMixin> ; - linkml:owner <https://w3id.org/GHGA/SubmissionStatusMixin> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/submission_date> . - -<https://w3id.org/GHGA/submission_status> a linkml:SlotDefinition ; - skos:definition "The status of submission." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/submission_status> ; - linkml:domain_of <https://w3id.org/GHGA/SubmissionStatusMixin> ; - linkml:owner <https://w3id.org/GHGA/SubmissionStatusMixin> ; - linkml:range <https://w3id.org/GHGA/submission_status_enum> ; - linkml:slot_uri <https://w3id.org/GHGA/submission_status> . - <https://w3id.org/GHGA/value> a linkml:SlotDefinition ; skos:definition "The value of an attribute" ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3826,7 +3907,7 @@ linkml:is_a <https://w3id.org/GHGA/Population> ; linkml:slot_usage [ ] ; linkml:slots <https://w3id.org/GHGA/family_has_member>, - <https://w3id.org/GHGA/family_proband>, + <https://w3id.org/GHGA/family_has_proband>, <https://w3id.org/GHGA/name>, <https://w3id.org/GHGA/named_thing_accession>, <https://w3id.org/GHGA/named_thing_creation_date>, @@ -3891,6 +3972,7 @@ linkml:slot_uri <https://w3id.org/GHGA/has_individual> . <https://w3id.org/GHGA/has_input> a linkml:SlotDefinition ; + skos:definition "The input to a Planned Process." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/has_input> ; linkml:domain_of <https://w3id.org/GHGA/Analysis>, @@ -3907,12 +3989,12 @@ linkml:domain_of <https://w3id.org/GHGA/Cohort>, <https://w3id.org/GHGA/DataAccessCommittee>, <https://w3id.org/GHGA/Family> ; - linkml:multivalued true ; linkml:owner <https://w3id.org/GHGA/DataAccessCommittee> ; linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/has_member> . <https://w3id.org/GHGA/has_output> a linkml:SlotDefinition ; + skos:definition "The output of a Planned Process entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/has_output> ; linkml:domain_of <https://w3id.org/GHGA/Analysis>, @@ -3931,6 +4013,15 @@ linkml:slots <https://w3id.org/GHGA/data_use_condition_modifier>, <https://w3id.org/GHGA/data_use_condition_permission> . +<https://w3id.org/GHGA/type> a linkml:SlotDefinition ; + skos:definition "The type of an entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/type> ; + linkml:domain_of <https://w3id.org/GHGA/NamedThing> ; + linkml:owner <https://w3id.org/GHGA/NamedThing> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/type> . + <https://w3id.org/GHGA/AnalysisDataset> a linkml:ClassDefinition ; skos:definition "An Analysis Dataset is a collection of Files generated from one or more Analysis performed on data from one or more Studies." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3957,9 +4048,7 @@ <https://w3id.org/GHGA/named_thing_xref>, <https://w3id.org/GHGA/release_date>, <https://w3id.org/GHGA/release_status>, - <https://w3id.org/GHGA/replaced_by>, - <https://w3id.org/GHGA/submission_date>, - <https://w3id.org/GHGA/submission_status> . + <https://w3id.org/GHGA/replaced_by> . <https://w3id.org/GHGA/ExperimentDataset> a linkml:ClassDefinition ; skos:definition "An Experiment Dataset is a collection of Files linked to one or more Experiments from one or more Studies." ; @@ -3986,9 +4075,7 @@ <https://w3id.org/GHGA/named_thing_xref>, <https://w3id.org/GHGA/release_date>, <https://w3id.org/GHGA/release_status>, - <https://w3id.org/GHGA/replaced_by>, - <https://w3id.org/GHGA/submission_date>, - <https://w3id.org/GHGA/submission_status> . + <https://w3id.org/GHGA/replaced_by> . <https://w3id.org/GHGA/WorkflowParameter> a linkml:ClassDefinition ; skos:definition "A key/value pair that represents a parameter used in a Workflow Step." ; @@ -4016,22 +4103,20 @@ linkml:definition_uri <https://w3id.org/GHGA/has_publication> ; linkml:domain_of <https://w3id.org/GHGA/Dataset>, <https://w3id.org/GHGA/Investigation>, - <https://w3id.org/GHGA/ResearchActivity>, - <https://w3id.org/GHGA/Study> ; + <https://w3id.org/GHGA/ResearchActivity> ; linkml:owner <https://w3id.org/GHGA/Dataset> ; linkml:range <https://w3id.org/GHGA/Publication> ; linkml:slot_uri <https://w3id.org/GHGA/has_publication> . -<https://w3id.org/GHGA/type> a linkml:SlotDefinition ; - skos:definition "The type of an entity." ; +<https://w3id.org/GHGA/has_attribute> a linkml:SlotDefinition ; + skos:definition "Key/value pairs corresponding to an entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/type> ; - linkml:domain_of <https://w3id.org/GHGA/Investigation>, - <https://w3id.org/GHGA/NamedThing>, - <https://w3id.org/GHGA/Sample> ; - linkml:owner <https://w3id.org/GHGA/Sample> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/type> . + linkml:definition_uri <https://w3id.org/GHGA/has_attribute> ; + linkml:domain_of <https://w3id.org/GHGA/NamedThing> ; + linkml:inlined true ; + linkml:owner <https://w3id.org/GHGA/NamedThing> ; + linkml:range <https://w3id.org/GHGA/Attribute> ; + linkml:slot_uri <https://w3id.org/GHGA/has_attribute> . <https://w3id.org/GHGA/Member> a linkml:ClassDefinition ; skos:definition "Member of an Organization or a Committee." ; @@ -4054,21 +4139,6 @@ <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref> . -<https://w3id.org/GHGA/has_attribute> a linkml:SlotDefinition ; - skos:definition "Key/value pairs corresponding to an entity." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/has_attribute> ; - linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol>, - <https://w3id.org/GHGA/NamedThing>, - <https://w3id.org/GHGA/Protocol>, - <https://w3id.org/GHGA/SequencingProtocol>, - <https://w3id.org/GHGA/Study> ; - linkml:inlined true ; - linkml:multivalued true ; - linkml:owner <https://w3id.org/GHGA/Protocol> ; - linkml:range <https://w3id.org/GHGA/Attribute> ; - linkml:slot_uri <https://w3id.org/GHGA/has_attribute> . - <https://w3id.org/GHGA/DataAccessCommittee> a linkml:ClassDefinition ; skos:definition "A group of members that are delegated to grant access to one or more datasets after ensuring the minimum criteria for data sharing has been met, and request for data use does not raise ethical and/or legal concerns." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4102,20 +4172,6 @@ linkml:range <https://w3id.org/GHGA/Study> ; linkml:slot_uri <https://w3id.org/GHGA/has_study> . -<https://w3id.org/GHGA/title> a linkml:SlotDefinition ; - skos:definition "The title that describes an entity." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/title> ; - linkml:domain_of <https://w3id.org/GHGA/AnalysisProcess>, - <https://w3id.org/GHGA/DataTransformation>, - <https://w3id.org/GHGA/Dataset>, - <https://w3id.org/GHGA/Investigation>, - <https://w3id.org/GHGA/Publication>, - <https://w3id.org/GHGA/ResearchActivity> ; - linkml:owner <https://w3id.org/GHGA/Publication> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/title> . - <https://w3id.org/GHGA/Project> a linkml:ClassDefinition ; skos:closeMatch <ncit:C47885> ; skos:definition "Any specifically defined piece of work that is undertaken or attempted to meet a single requirement." ; @@ -4136,23 +4192,6 @@ <https://w3id.org/GHGA/project_has_study>, <https://w3id.org/GHGA/project_title> . -<https://w3id.org/GHGA/Publication> a linkml:ClassDefinition ; - 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." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/Publication> ; - linkml:definition_uri <https://w3id.org/GHGA/Publication> ; - linkml:is_a <https://w3id.org/GHGA/InformationContentEntity> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_has_attribute>, - <https://w3id.org/GHGA/named_thing_type>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/publication_abstract>, - <https://w3id.org/GHGA/publication_id>, - <https://w3id.org/GHGA/publication_title>, - <https://w3id.org/GHGA/publication_xref> . - <https://w3id.org/GHGA/Protocol> a linkml:ClassDefinition ; skos:altLabel "experiment protocol", "library protocol" ; @@ -4164,8 +4203,7 @@ linkml:definition_uri <https://w3id.org/GHGA/Protocol> ; linkml:is_a <https://w3id.org/GHGA/InformationContentEntity> ; linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/has_attribute>, - <https://w3id.org/GHGA/named_thing_accession>, + linkml:slots <https://w3id.org/GHGA/named_thing_accession>, <https://w3id.org/GHGA/named_thing_creation_date>, <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, @@ -4176,6 +4214,23 @@ <https://w3id.org/GHGA/protocol_name>, <https://w3id.org/GHGA/protocol_url> . +<https://w3id.org/GHGA/Publication> a linkml:ClassDefinition ; + 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." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/Publication> ; + linkml:definition_uri <https://w3id.org/GHGA/Publication> ; + linkml:is_a <https://w3id.org/GHGA/InformationContentEntity> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_has_attribute>, + <https://w3id.org/GHGA/named_thing_type>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/publication_abstract>, + <https://w3id.org/GHGA/publication_id>, + <https://w3id.org/GHGA/publication_title>, + <https://w3id.org/GHGA/publication_xref> . + <https://w3id.org/GHGA/AnalysisProcess> a linkml:ClassDefinition ; 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." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4207,7 +4262,7 @@ <https://w3id.org/GHGA/experiment_process_has_input>, <https://w3id.org/GHGA/experiment_process_has_output>, <https://w3id.org/GHGA/experiment_process_has_protocol>, - <https://w3id.org/GHGA/experiment_process_name>, + <https://w3id.org/GHGA/experiment_process_title>, <https://w3id.org/GHGA/named_thing_accession>, <https://w3id.org/GHGA/named_thing_creation_date>, <https://w3id.org/GHGA/named_thing_has_attribute>, @@ -4216,6 +4271,21 @@ <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref> . +<https://w3id.org/GHGA/title> a linkml:SlotDefinition ; + skos:definition "The title that describes an entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/title> ; + linkml:domain_of <https://w3id.org/GHGA/AnalysisProcess>, + <https://w3id.org/GHGA/DataTransformation>, + <https://w3id.org/GHGA/Dataset>, + <https://w3id.org/GHGA/ExperimentProcess>, + <https://w3id.org/GHGA/Investigation>, + <https://w3id.org/GHGA/Publication>, + <https://w3id.org/GHGA/ResearchActivity> ; + linkml:owner <https://w3id.org/GHGA/Publication> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/title> . + <https://w3id.org/GHGA/Biospecimen> a linkml:ClassDefinition ; 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." ; skos:exactMatch <https://w3id.org/GHGA/OBI:0100051> ; @@ -4238,6 +4308,24 @@ <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref> . +<https://w3id.org/GHGA/name> a linkml:SlotDefinition ; + skos:definition "The name for an entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/name> ; + linkml:domain_of <https://w3id.org/GHGA/Agent>, + <https://w3id.org/GHGA/Biospecimen>, + <https://w3id.org/GHGA/Committee>, + <https://w3id.org/GHGA/DataAccessCommittee>, + <https://w3id.org/GHGA/DataAccessPolicy>, + <https://w3id.org/GHGA/DiseaseOrPhenotypicFeature>, + <https://w3id.org/GHGA/File>, + <https://w3id.org/GHGA/Population>, + <https://w3id.org/GHGA/Protocol>, + <https://w3id.org/GHGA/Sample> ; + linkml:owner <https://w3id.org/GHGA/Committee> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/name> . + <https://w3id.org/GHGA/Analysis> a linkml:ClassDefinition ; skos:altLabel "data analysis" ; skos:definition "An Analysis is a data transformation that transforms input data to output data. The workflow used to achieve this transformation and the individual steps are also captured." ; @@ -4281,8 +4369,7 @@ linkml:definition_uri <https://w3id.org/GHGA/Dataset> ; linkml:is_a <https://w3id.org/GHGA/InformationContentEntity> ; linkml:mixins <https://w3id.org/GHGA/DeprecationMixin>, - <https://w3id.org/GHGA/ReleaseStatusMixin>, - <https://w3id.org/GHGA/SubmissionStatusMixin> ; + <https://w3id.org/GHGA/ReleaseStatusMixin> ; linkml:slot_usage [ ] ; linkml:slots <https://w3id.org/GHGA/dataset_description>, <https://w3id.org/GHGA/dataset_has_file>, @@ -4299,9 +4386,7 @@ <https://w3id.org/GHGA/named_thing_xref>, <https://w3id.org/GHGA/release_date>, <https://w3id.org/GHGA/release_status>, - <https://w3id.org/GHGA/replaced_by>, - <https://w3id.org/GHGA/submission_date>, - <https://w3id.org/GHGA/submission_status> . + <https://w3id.org/GHGA/replaced_by> . <https://w3id.org/GHGA/DataAccessPolicy> a linkml:ClassDefinition ; skos:definition "A Data Access Policy specifies under which circumstances, legal or otherwise, a user can have access to one or more Datasets belonging to one or more Studies." ; @@ -4324,28 +4409,6 @@ <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref> . -<https://w3id.org/GHGA/name> a linkml:SlotDefinition ; - skos:definition "The name for an entity." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/name> ; - linkml:domain_of <https://w3id.org/GHGA/Agent>, - <https://w3id.org/GHGA/Biospecimen>, - <https://w3id.org/GHGA/Committee>, - <https://w3id.org/GHGA/DataAccessCommittee>, - <https://w3id.org/GHGA/DataAccessPolicy>, - <https://w3id.org/GHGA/DiseaseOrPhenotypicFeature>, - <https://w3id.org/GHGA/Experiment>, - <https://w3id.org/GHGA/ExperimentProcess>, - <https://w3id.org/GHGA/File>, - <https://w3id.org/GHGA/LibraryPreparationProtocol>, - <https://w3id.org/GHGA/Population>, - <https://w3id.org/GHGA/Protocol>, - <https://w3id.org/GHGA/Sample>, - <https://w3id.org/GHGA/SequencingProtocol> ; - linkml:owner <https://w3id.org/GHGA/Committee> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/name> . - <https://w3id.org/GHGA/LibraryPreparationProtocol> a linkml:ClassDefinition ; skos:definition "Information about the library preparation of an Experiment." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4353,8 +4416,7 @@ linkml:definition_uri <https://w3id.org/GHGA/LibraryPreparationProtocol> ; linkml:is_a <https://w3id.org/GHGA/Protocol> ; linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/description>, - <https://w3id.org/GHGA/end_bias>, + linkml:slots <https://w3id.org/GHGA/end_bias>, <https://w3id.org/GHGA/library_construction>, <https://w3id.org/GHGA/library_construction_kit_manufacturer>, <https://w3id.org/GHGA/library_construction_kit_retail_name>, @@ -4389,52 +4451,14 @@ <https://w3id.org/GHGA/DataTransformation>, <https://w3id.org/GHGA/Dataset>, <https://w3id.org/GHGA/DiseaseOrPhenotypicFeature>, - <https://w3id.org/GHGA/Experiment>, <https://w3id.org/GHGA/Investigation>, - <https://w3id.org/GHGA/LibraryPreparationProtocol>, <https://w3id.org/GHGA/Protocol>, <https://w3id.org/GHGA/ResearchActivity>, - <https://w3id.org/GHGA/Sample>, - <https://w3id.org/GHGA/SequencingProtocol> ; + <https://w3id.org/GHGA/Sample> ; linkml:owner <https://w3id.org/GHGA/DataAccessCommittee> ; linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/description> . -<https://w3id.org/GHGA/named_thing_type> a linkml:SlotDefinition ; - skos:definition "The type of an entity." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "type" ; - linkml:definition_uri <https://w3id.org/GHGA/type> ; - linkml:domain <https://w3id.org/GHGA/NamedThing> ; - linkml:domain_of <https://w3id.org/GHGA/NamedThing> ; - linkml:is_a <https://w3id.org/GHGA/type> ; - linkml:is_usage_slot true ; - linkml:owner <https://w3id.org/GHGA/NamedThing> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/type> ; - linkml:usage_slot_name "type" . - -<https://w3id.org/GHGA/File> a linkml:ClassDefinition ; - skos:altLabel "file object" ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/File> ; - linkml:definition_uri <https://w3id.org/GHGA/File> ; - linkml:is_a <https://w3id.org/GHGA/InformationContentEntity> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/file_category>, - <https://w3id.org/GHGA/file_checksum>, - <https://w3id.org/GHGA/file_file_index>, - <https://w3id.org/GHGA/file_format>, - <https://w3id.org/GHGA/file_size>, - <https://w3id.org/GHGA/file_type>, - <https://w3id.org/GHGA/name>, - <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_has_attribute>, - <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . - <https://w3id.org/GHGA/Study> 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 <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4444,7 +4468,6 @@ linkml:slot_usage [ ] ; linkml:slots <https://w3id.org/GHGA/deprecated>, <https://w3id.org/GHGA/deprecation_date>, - <https://w3id.org/GHGA/has_attribute>, <https://w3id.org/GHGA/named_thing_accession>, <https://w3id.org/GHGA/named_thing_creation_date>, <https://w3id.org/GHGA/named_thing_id>, @@ -4481,39 +4504,90 @@ <https://w3id.org/GHGA/experiment_has_sample>, <https://w3id.org/GHGA/experiment_has_study>, <https://w3id.org/GHGA/experiment_has_technology>, - <https://w3id.org/GHGA/experiment_name>, + <https://w3id.org/GHGA/experiment_title>, <https://w3id.org/GHGA/experimental_replicates>, <https://w3id.org/GHGA/has_publication>, <https://w3id.org/GHGA/named_thing_accession>, <https://w3id.org/GHGA/named_thing_creation_date>, <https://w3id.org/GHGA/named_thing_has_attribute>, <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref>, <https://w3id.org/GHGA/release_date>, <https://w3id.org/GHGA/release_status>, <https://w3id.org/GHGA/replaced_by>, - <https://w3id.org/GHGA/technical_replicates>, - <https://w3id.org/GHGA/title>, - <https://w3id.org/GHGA/type> . + <https://w3id.org/GHGA/technical_replicates> . -<https://w3id.org/GHGA/NamedThing> a linkml:ClassDefinition ; - skos:altLabel "entity", - "named entity", - "object" ; - skos:definition "A databased entity, concept or class. This is a generic class that is the root of all the other classes." ; +<https://w3id.org/GHGA/File> a linkml:ClassDefinition ; + skos:altLabel "file object" ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/NamedThing> ; - linkml:definition_uri <https://w3id.org/GHGA/NamedThing> ; + linkml:class_uri <https://w3id.org/GHGA/File> ; + linkml:definition_uri <https://w3id.org/GHGA/File> ; + linkml:is_a <https://w3id.org/GHGA/InformationContentEntity> ; linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/named_thing_accession>, + linkml:slots <https://w3id.org/GHGA/file_category>, + <https://w3id.org/GHGA/file_checksum>, + <https://w3id.org/GHGA/file_file_index>, + <https://w3id.org/GHGA/file_format>, + <https://w3id.org/GHGA/file_size>, + <https://w3id.org/GHGA/file_type>, + <https://w3id.org/GHGA/name>, + <https://w3id.org/GHGA/named_thing_accession>, <https://w3id.org/GHGA/named_thing_creation_date>, <https://w3id.org/GHGA/named_thing_has_attribute>, <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref> . +<https://w3id.org/GHGA/SequencingProtocol> a linkml:ClassDefinition ; + skos:definition "Information about the sequencing of a sample." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/SequencingProtocol> ; + linkml:definition_uri <https://w3id.org/GHGA/SequencingProtocol> ; + linkml:is_a <https://w3id.org/GHGA/Protocol> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/cell_barcode_offset>, + <https://w3id.org/GHGA/cell_barcode_read>, + <https://w3id.org/GHGA/cell_barcode_size>, + <https://w3id.org/GHGA/flow_cell_id>, + <https://w3id.org/GHGA/flow_cell_type>, + <https://w3id.org/GHGA/instrument_model>, + <https://w3id.org/GHGA/lane_number>, + <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_type>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/protocol_url>, + <https://w3id.org/GHGA/read_length>, + <https://w3id.org/GHGA/read_pair_number>, + <https://w3id.org/GHGA/reference_annotation>, + <https://w3id.org/GHGA/sample_barcode_read>, + <https://w3id.org/GHGA/sequencing_center>, + <https://w3id.org/GHGA/sequencing_protocol_description>, + <https://w3id.org/GHGA/sequencing_protocol_has_attribute>, + <https://w3id.org/GHGA/sequencing_protocol_name>, + <https://w3id.org/GHGA/target_coverage>, + <https://w3id.org/GHGA/umi_barcode_offset>, + <https://w3id.org/GHGA/umi_barcode_read>, + <https://w3id.org/GHGA/umi_barcode_size> . + +<https://w3id.org/GHGA/named_thing_type> a linkml:SlotDefinition ; + skos:definition "The type of an entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "type" ; + linkml:definition_uri <https://w3id.org/GHGA/type> ; + linkml:domain <https://w3id.org/GHGA/NamedThing> ; + linkml:domain_of <https://w3id.org/GHGA/NamedThing> ; + linkml:is_a <https://w3id.org/GHGA/type> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/NamedThing> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/type> ; + linkml:usage_slot_name "type" . + <https://w3id.org/GHGA/named_thing_has_attribute> a linkml:SlotDefinition ; skos:definition "Holds one or more Attribute entities that further characterizes this entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4547,39 +4621,47 @@ linkml:slot_uri <https://w3id.org/GHGA/id> ; linkml:usage_slot_name "id" . -<https://w3id.org/GHGA/SequencingProtocol> a linkml:ClassDefinition ; - skos:definition "Information about the sequencing of a sample." ; +<https://w3id.org/GHGA/NamedThing> a linkml:ClassDefinition ; + skos:altLabel "entity", + "named entity", + "object" ; + skos:definition "A databased entity, concept or class. This is a generic class that is the root of all the other classes." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/SequencingProtocol> ; - linkml:definition_uri <https://w3id.org/GHGA/SequencingProtocol> ; - linkml:is_a <https://w3id.org/GHGA/Protocol> ; + linkml:class_uri <https://w3id.org/GHGA/NamedThing> ; + linkml:definition_uri <https://w3id.org/GHGA/NamedThing> ; linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/cell_barcode_offset>, - <https://w3id.org/GHGA/cell_barcode_read>, - <https://w3id.org/GHGA/cell_barcode_size>, - <https://w3id.org/GHGA/flow_cell_id>, - <https://w3id.org/GHGA/flow_cell_type>, - <https://w3id.org/GHGA/instrument_model>, - <https://w3id.org/GHGA/lane_number>, - <https://w3id.org/GHGA/named_thing_accession>, + linkml:slots <https://w3id.org/GHGA/named_thing_accession>, <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_has_attribute>, <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref>, - <https://w3id.org/GHGA/protocol_url>, - <https://w3id.org/GHGA/read_length>, - <https://w3id.org/GHGA/read_pair_number>, - <https://w3id.org/GHGA/reference_annotation>, - <https://w3id.org/GHGA/sample_barcode_read>, - <https://w3id.org/GHGA/sequencing_center>, - <https://w3id.org/GHGA/sequencing_protocol_description>, - <https://w3id.org/GHGA/sequencing_protocol_has_attribute>, - <https://w3id.org/GHGA/sequencing_protocol_name>, - <https://w3id.org/GHGA/target_coverage>, - <https://w3id.org/GHGA/umi_barcode_offset>, - <https://w3id.org/GHGA/umi_barcode_read>, - <https://w3id.org/GHGA/umi_barcode_size> . + <https://w3id.org/GHGA/named_thing_xref> . + +<https://w3id.org/GHGA/Sample> 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 <biolink:MaterialSample>, + <https://w3id.org/GHGA/SIO:001050> ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/Sample> ; + linkml:definition_uri <https://w3id.org/GHGA/Sample> ; + linkml:is_a <https://w3id.org/GHGA/MaterialEntity> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_has_attribute>, + <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/sample_description>, + <https://w3id.org/GHGA/sample_has_biospecimen>, + <https://w3id.org/GHGA/sample_has_individual>, + <https://w3id.org/GHGA/sample_isolation>, + <https://w3id.org/GHGA/sample_name>, + <https://w3id.org/GHGA/sample_storage>, + <https://w3id.org/GHGA/sample_tissue>, + <https://w3id.org/GHGA/sample_type>, + <https://w3id.org/GHGA/sample_xref>, + <https://w3id.org/GHGA/vital_status_at_sampling> . <https://w3id.org/GHGA/named_thing_accession> a linkml:SlotDefinition ; skos:definition "A unique identifier assigned to an entity for the sole purpose of referring to that entity in a global scope." ; @@ -4638,32 +4720,6 @@ linkml:slot_uri <https://w3id.org/GHGA/xref> ; linkml:usage_slot_name "xref" . -<https://w3id.org/GHGA/Sample> 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 <biolink:MaterialSample>, - <https://w3id.org/GHGA/SIO:001050> ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/Sample> ; - linkml:definition_uri <https://w3id.org/GHGA/Sample> ; - linkml:is_a <https://w3id.org/GHGA/MaterialEntity> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_has_attribute>, - <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/sample_description>, - <https://w3id.org/GHGA/sample_has_biospecimen>, - <https://w3id.org/GHGA/sample_has_individual>, - <https://w3id.org/GHGA/sample_isolation>, - <https://w3id.org/GHGA/sample_name>, - <https://w3id.org/GHGA/sample_storage>, - <https://w3id.org/GHGA/sample_tissue>, - <https://w3id.org/GHGA/sample_type>, - <https://w3id.org/GHGA/sample_xref>, - <https://w3id.org/GHGA/type>, - <https://w3id.org/GHGA/vital_status_at_sampling> . - <https://w3id.org/GHGA/Submission> a linkml:ClassDefinition ; 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." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; diff --git a/artifacts/shex/ghga.shex b/artifacts/shex/ghga.shex index c564e219..9b842da3 100644 --- a/artifacts/shex/ghga.shex +++ b/artifacts/shex/ghga.shex @@ -83,7 +83,7 @@ linkml:Nodeidentifier NONLITERAL <has_input> @<File> * ; <has_workflow_step> @<WorkflowStep> ? ; <has_agent> @<Agent> ? ; - <has_output> @<File> ? + <has_output> @<File> * ) ; rdf:type [ <AnalysisProcess> ] ) @@ -124,8 +124,8 @@ linkml:Nodeidentifier NONLITERAL <description> @linkml:String ? ; <has_individual> @<Individual> ? ; <has_anatomical_entity> @<AnatomicalEntity> ? ; - <has_disease> @<Disease> ? ; - <has_phenotypic_feature> @<PhenotypicFeature> ? + <has_disease> @<Disease> * ; + <has_phenotypic_feature> @<PhenotypicFeature> * ) ; rdf:type [ <Biospecimen> ] ) @@ -209,8 +209,6 @@ linkml:Nodeidentifier NONLITERAL CLOSED { ( $<Dataset_tes> ( &<InformationContentEntity_tes> ; rdf:type [ <InformationContentEntity> ] ? ; - &<SubmissionStatusMixin_tes> ; - rdf:type [ <SubmissionStatusMixin> ] ? ; &<ReleaseStatusMixin_tes> ; rdf:type [ <ReleaseStatusMixin> ] ? ; &<DeprecationMixin_tes> ; @@ -220,8 +218,6 @@ linkml:Nodeidentifier NONLITERAL <has_file> @<File> + ; <has_publication> @<Publication> * ; <type> @linkml:String ; - <submission_status> @<SubmissionStatusEnum> ? ; - <submission_date> @linkml:String ? ; <release_status> @<ReleaseStatusEnum> ? ; <release_date> @linkml:String ? ; <deprecated> @linkml:Boolean ? ; @@ -273,8 +269,6 @@ linkml:Nodeidentifier NONLITERAL <Experiment> CLOSED { ( $<Experiment_tes> ( &<Investigation_tes> ; rdf:type [ <Investigation> ] ? ; - <name> @linkml:String ; - <description> @linkml:String ; <biological_replicates> @linkml:String ? ; <technical_replicates> @linkml:String ? ; <experimental_replicates> @linkml:String ? ; @@ -282,7 +276,9 @@ linkml:Nodeidentifier NONLITERAL <has_sample> @<Sample> ; <has_technology> @<Technology> ? ; <has_file> @<File> * ; - <has_experiment_process> @<ExperimentProcess> * + <has_experiment_process> @<ExperimentProcess> * ; + <title> @linkml:String ; + <description> @linkml:String ) ; rdf:type [ <Experiment> ] ) @@ -302,7 +298,7 @@ linkml:Nodeidentifier NONLITERAL <ExperimentProcess> CLOSED { ( $<ExperimentProcess_tes> ( &<PlannedProcess_tes> ; rdf:type [ <PlannedProcess> ] ? ; - <name> @linkml:String ? ; + <title> @linkml:String ? ; <has_input> @<Sample> ? ; <has_protocol> @<Protocol> ? ; <has_agent> @<Agent> ? ; @@ -316,7 +312,7 @@ linkml:Nodeidentifier NONLITERAL ( $<Family_tes> ( &<Population_tes> ; rdf:type [ <Population> ] ? ; <has_member> @<Individual> * ; - <proband> @<Individual> ? + <has_proband> @<Individual> ? ) ; rdf:type [ <Family> ] ) @@ -349,8 +345,8 @@ linkml:Nodeidentifier NONLITERAL <geographical_region> @linkml:String ? ; <ethnicity> @linkml:String ? ; <ancestry> @linkml:String ? ; - <has_parent> @linkml:String ? ; - <has_children> @linkml:String ? + <has_parent> @<Individual> * ; + <has_children> @<Individual> * ) ; rdf:type [ <Individual> ] ) @@ -378,7 +374,6 @@ linkml:Nodeidentifier NONLITERAL rdf:type [ <DeprecationMixin> ] ? ; <title> @linkml:String ? ; <description> @linkml:String ? ; - <type> @linkml:String ? ; <has_publication> @<Publication> ? ; <release_status> @<ReleaseStatusEnum> ? ; <release_date> @linkml:String ? ; @@ -394,8 +389,6 @@ linkml:Nodeidentifier NONLITERAL <LibraryPreparationProtocol> CLOSED { ( $<LibraryPreparationProtocol_tes> ( &<Protocol_tes> ; rdf:type [ <Protocol> ] ? ; - <name> @linkml:String ; - <description> @linkml:String ; <library_name> @linkml:String ? ; <library_layout> @linkml:String ? ; <library_type> @linkml:String ? ; @@ -409,6 +402,8 @@ linkml:Nodeidentifier NONLITERAL <end_bias> @linkml:String ? ; <target_regions> @linkml:String ? ; <rnaseq_strandedness> @linkml:String ? ; + <name> @linkml:String ; + <description> @linkml:String ; <has_attribute> @<Attribute> * ) ; rdf:type [ <LibraryPreparationProtocol> ] @@ -556,7 +551,6 @@ linkml:Nodeidentifier NONLITERAL ( $<Sample_tes> ( &<MaterialEntity_tes> ; rdf:type [ <MaterialEntity> ] ? ; <name> @linkml:String ; - <type> @linkml:String ? ; <description> @linkml:String ? ; <vital_status_at_sampling> @linkml:String ? ; <tissue> @linkml:String ; @@ -564,6 +558,7 @@ linkml:Nodeidentifier NONLITERAL <storage> @linkml:String ? ; <has_individual> @<Individual> ; <has_biospecimen> @<Biospecimen> ? ; + <type> @<CaseControlEnum> ? ; <xref> @linkml:String * ) ; rdf:type [ <Sample> ] @@ -573,8 +568,6 @@ linkml:Nodeidentifier NONLITERAL <SequencingProtocol> CLOSED { ( $<SequencingProtocol_tes> ( &<Protocol_tes> ; rdf:type [ <Protocol> ] ? ; - <name> @linkml:String ? ; - <description> @linkml:String ? ; <sequencing_center> @linkml:String ? ; <instrument_model> @linkml:String ? ; <read_length> @linkml:String ? ; @@ -591,6 +584,8 @@ linkml:Nodeidentifier NONLITERAL <cell_barcode_offset> @linkml:String ? ; <cell_barcode_size> @linkml:String ? ; <sample_barcode_read> @linkml:String ? ; + <name> @linkml:String ? ; + <description> @linkml:String ? ; <has_attribute> @<Attribute> * ) ; rdf:type [ <SequencingProtocol> ] @@ -601,14 +596,14 @@ linkml:Nodeidentifier NONLITERAL ( $<Study_tes> ( &<Investigation_tes> ; rdf:type [ <Investigation> ] ? ; <affiliation> @linkml:String + ; - <has_publication> @<Publication> * ; <has_experiment> @<Experiment> * ; <has_analysis> @<Analysis> * ; <has_project> @<Project> ? ; - <has_attribute> @<Attribute> * ; <title> @linkml:String ; <description> @linkml:String ; - <type> @<StudyTypeEnum> + <type> @<StudyTypeEnum> ; + <has_publication> @<Publication> * ; + <has_attribute> @<Attribute> * ) ; rdf:type [ <Study> ] ) diff --git a/artifacts/sql/ghga.sql b/artifacts/sql/ghga.sql index 731e1e7b..5d646d96 100644 --- a/artifacts/sql/ghga.sql +++ b/artifacts/sql/ghga.sql @@ -1,10 +1,11 @@ -CREATE TYPE submission_status_enum AS ENUM ('in progress', 'submitted'); CREATE TYPE release_status_enum AS ENUM ('unreleased', 'released'); CREATE TYPE biological_sex_enum AS ENUM ('XX', 'XY', 'none'); CREATE TYPE vital_status_enum AS ENUM ('alive', 'deceased'); CREATE TYPE file_type_enum AS ENUM ('bam', 'complete_genomics', 'cram', 'fasta', 'fastq', 'pacbio_hdf5', 'sff', 'srf', 'vcf'); +CREATE TYPE case_control_enum AS ENUM ('control', 'case'); 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', 'other'); +CREATE TYPE submission_status_enum AS ENUM ('in progress', 'submitted'); CREATE TYPE user_role_enum AS ENUM ('data requester', 'data steward'); CREATE TABLE agent ( @@ -92,18 +93,6 @@ CREATE TABLE data_transformation ( PRIMARY KEY (id) ); -CREATE TABLE disease ( - id TEXT NOT NULL, - accession TEXT, - type TEXT, - has_attribute TEXT, - creation_date TEXT, - update_date TEXT, - name TEXT, - description TEXT, - PRIMARY KEY (id) -); - CREATE TABLE disease_or_phenotypic_feature ( id TEXT NOT NULL, accession TEXT, @@ -195,8 +184,6 @@ CREATE TABLE library_preparation_protocol ( creation_date TEXT, update_date TEXT, url TEXT, - name TEXT NOT NULL, - description TEXT NOT NULL, library_name TEXT, library_layout TEXT, library_type TEXT, @@ -210,6 +197,8 @@ CREATE TABLE library_preparation_protocol ( end_bias TEXT, target_regions TEXT, rnaseq_strandedness TEXT, + name TEXT NOT NULL, + description TEXT NOT NULL, has_attribute TEXT, PRIMARY KEY (id) ); @@ -263,18 +252,6 @@ CREATE TABLE person ( PRIMARY KEY (id) ); -CREATE TABLE phenotypic_feature ( - id TEXT NOT NULL, - accession TEXT, - type TEXT, - has_attribute TEXT, - creation_date TEXT, - update_date TEXT, - name TEXT, - description TEXT, - PRIMARY KEY (id) -); - CREATE TABLE planned_process ( id TEXT NOT NULL, accession TEXT, @@ -342,8 +319,6 @@ CREATE TABLE sequencing_protocol ( creation_date TEXT, update_date TEXT, url TEXT, - name TEXT, - description TEXT, sequencing_center TEXT, instrument_model TEXT, read_length TEXT, @@ -360,6 +335,8 @@ CREATE TABLE sequencing_protocol ( cell_barcode_offset TEXT, cell_barcode_size TEXT, sample_barcode_read TEXT, + name TEXT, + description TEXT, has_attribute TEXT, PRIMARY KEY (id) ); @@ -420,8 +397,6 @@ CREATE TABLE aggregate_dataset ( has_file TEXT NOT NULL, has_publication TEXT, type TEXT NOT NULL, - submission_status submission_status_enum, - submission_date TEXT, release_status release_status_enum, release_date TEXT, deprecated BOOLEAN, @@ -442,8 +417,6 @@ CREATE TABLE analysis_dataset ( has_file TEXT NOT NULL, has_publication TEXT, type TEXT NOT NULL, - submission_status submission_status_enum, - submission_date TEXT, release_status release_status_enum, release_date TEXT, deprecated BOOLEAN, @@ -468,13 +441,9 @@ CREATE TABLE biospecimen ( description TEXT, has_individual TEXT, has_anatomical_entity TEXT, - has_disease TEXT, - has_phenotypic_feature TEXT, PRIMARY KEY (id), FOREIGN KEY(has_individual) REFERENCES individual (id), - FOREIGN KEY(has_anatomical_entity) REFERENCES anatomical_entity (id), - FOREIGN KEY(has_disease) REFERENCES disease (id), - FOREIGN KEY(has_phenotypic_feature) REFERENCES phenotypic_feature (id) + FOREIGN KEY(has_anatomical_entity) REFERENCES anatomical_entity (id) ); CREATE TABLE data_access_committee ( @@ -503,8 +472,6 @@ CREATE TABLE experiment_dataset ( has_file TEXT NOT NULL, has_publication TEXT, type TEXT NOT NULL, - submission_status submission_status_enum, - submission_date TEXT, release_status release_status_enum, release_date TEXT, deprecated BOOLEAN, @@ -526,20 +493,20 @@ CREATE TABLE family ( update_date TEXT, name TEXT, has_member TEXT, - proband TEXT, + has_proband TEXT, PRIMARY KEY (id), - FOREIGN KEY(proband) REFERENCES individual (id) + FOREIGN KEY(has_proband) REFERENCES individual (id) ); CREATE TABLE investigation ( id TEXT NOT NULL, accession TEXT, + type TEXT, has_attribute TEXT, creation_date TEXT, update_date TEXT, title TEXT, description TEXT, - type TEXT, has_publication TEXT, release_status release_status_enum, release_date TEXT, @@ -575,14 +542,14 @@ CREATE TABLE study ( deprecated BOOLEAN, deprecation_date TEXT, replaced_by TEXT, - has_publication TEXT, has_experiment TEXT, has_analysis TEXT, has_project TEXT, - has_attribute TEXT, title TEXT NOT NULL, description TEXT NOT NULL, type study_type_enum NOT NULL, + has_publication TEXT, + has_attribute TEXT, PRIMARY KEY (id), FOREIGN KEY(replaced_by) REFERENCES named_thing (id), FOREIGN KEY(has_project) REFERENCES project (id) @@ -645,13 +612,6 @@ CREATE TABLE data_transformation_xref ( FOREIGN KEY(backref_id) REFERENCES data_transformation (id) ); -CREATE TABLE disease_xref ( - backref_id TEXT, - xref TEXT, - PRIMARY KEY (backref_id, xref), - FOREIGN KEY(backref_id) REFERENCES disease (id) -); - CREATE TABLE disease_or_phenotypic_feature_xref ( backref_id TEXT, xref TEXT, @@ -722,13 +682,6 @@ CREATE TABLE person_xref ( FOREIGN KEY(backref_id) REFERENCES person (id) ); -CREATE TABLE phenotypic_feature_xref ( - backref_id TEXT, - xref TEXT, - PRIMARY KEY (backref_id, xref), - FOREIGN KEY(backref_id) REFERENCES phenotypic_feature (id) -); - CREATE TABLE planned_process_xref ( backref_id TEXT, xref TEXT, @@ -844,8 +797,6 @@ CREATE TABLE dataset ( has_file TEXT NOT NULL, has_publication TEXT, type TEXT NOT NULL, - submission_status submission_status_enum, - submission_date TEXT, release_status release_status_enum, release_date TEXT, deprecated BOOLEAN, @@ -857,6 +808,34 @@ CREATE TABLE dataset ( FOREIGN KEY(aggregate_dataset_id) REFERENCES aggregate_dataset (id) ); +CREATE TABLE disease ( + id TEXT NOT NULL, + accession TEXT, + type TEXT, + has_attribute TEXT, + creation_date TEXT, + update_date TEXT, + name TEXT, + description TEXT, + biospecimen_id TEXT, + PRIMARY KEY (id), + FOREIGN KEY(biospecimen_id) REFERENCES biospecimen (id) +); + +CREATE TABLE phenotypic_feature ( + id TEXT NOT NULL, + accession TEXT, + type TEXT, + has_attribute TEXT, + creation_date TEXT, + update_date TEXT, + name TEXT, + description TEXT, + biospecimen_id TEXT, + PRIMARY KEY (id), + FOREIGN KEY(biospecimen_id) REFERENCES biospecimen (id) +); + CREATE TABLE sample ( id TEXT NOT NULL, accession TEXT, @@ -864,7 +843,6 @@ CREATE TABLE sample ( creation_date TEXT, update_date TEXT, name TEXT NOT NULL, - type TEXT, description TEXT, vital_status_at_sampling TEXT, tissue TEXT NOT NULL, @@ -872,6 +850,7 @@ CREATE TABLE sample ( storage TEXT, has_individual TEXT NOT NULL, has_biospecimen TEXT, + type case_control_enum, PRIMARY KEY (id), FOREIGN KEY(has_individual) REFERENCES individual (id), FOREIGN KEY(has_biospecimen) REFERENCES biospecimen (id) @@ -963,7 +942,6 @@ CREATE TABLE analysis_process ( PRIMARY KEY (id), FOREIGN KEY(has_workflow_step) REFERENCES workflow_step (id), FOREIGN KEY(has_agent) REFERENCES agent (id), - FOREIGN KEY(has_output) REFERENCES file (id), FOREIGN KEY(analysis_id) REFERENCES analysis (id) ); @@ -978,19 +956,16 @@ CREATE TABLE data_use_condition ( CREATE TABLE experiment ( id TEXT NOT NULL, accession TEXT, + type TEXT, has_attribute TEXT, creation_date TEXT, update_date TEXT, - title TEXT, - type TEXT, has_publication TEXT, release_status release_status_enum, release_date TEXT, deprecated BOOLEAN, deprecation_date TEXT, replaced_by TEXT, - name TEXT NOT NULL, - description TEXT NOT NULL, biological_replicates TEXT, technical_replicates TEXT, experimental_replicates TEXT, @@ -998,6 +973,8 @@ CREATE TABLE experiment ( has_sample TEXT NOT NULL, has_technology TEXT, has_file TEXT, + title TEXT NOT NULL, + description TEXT NOT NULL, PRIMARY KEY (id), FOREIGN KEY(has_publication) REFERENCES publication (id), FOREIGN KEY(replaced_by) REFERENCES named_thing (id), @@ -1051,6 +1028,20 @@ CREATE TABLE dataset_xref ( FOREIGN KEY(backref_id) REFERENCES dataset (id) ); +CREATE TABLE disease_xref ( + backref_id TEXT, + xref TEXT, + PRIMARY KEY (backref_id, xref), + FOREIGN KEY(backref_id) REFERENCES disease (id) +); + +CREATE TABLE phenotypic_feature_xref ( + backref_id TEXT, + xref TEXT, + PRIMARY KEY (backref_id, xref), + FOREIGN KEY(backref_id) REFERENCES phenotypic_feature (id) +); + CREATE TABLE sample_xref ( backref_id TEXT, xref TEXT, @@ -1065,7 +1056,7 @@ CREATE TABLE experiment_process ( has_attribute TEXT, creation_date TEXT, update_date TEXT, - name TEXT, + title TEXT, has_input TEXT, has_protocol TEXT, has_agent TEXT, diff --git a/artifacts/sql/ghga_models.py b/artifacts/sql/ghga_models.py index 3411d90a..3c0de856 100644 --- a/artifacts/sql/ghga_models.py +++ b/artifacts/sql/ghga_models.py @@ -41,8 +41,6 @@ Column('has_file', Text), Column('has_publication', Text), Column('type', Text), - Column('submission_status', Text), - Column('submission_date', Text), Column('release_status', Text), Column('release_date', Text), Column('deprecated', Text), @@ -74,8 +72,6 @@ Column('has_file', Text), Column('has_publication', Text), Column('type', Text), - Column('submission_status', Text), - Column('submission_date', Text), Column('release_status', Text), Column('release_date', Text), Column('deprecated', Text), @@ -97,7 +93,7 @@ Column('has_input', Text), Column('has_workflow_step', Text, ForeignKey('workflow_step.id')), Column('has_agent', Text, ForeignKey('agent.id')), - Column('has_output', Text, ForeignKey('file.id')), + Column('has_output', Text), Column('analysis_id', Text, ForeignKey('analysis.id')), ) tbl_anatomical_entity = Table('anatomical_entity', metadata, @@ -133,8 +129,6 @@ Column('description', Text), Column('has_individual', Text, ForeignKey('individual.id')), Column('has_anatomical_entity', Text, ForeignKey('anatomical_entity.id')), - Column('has_disease', Text, ForeignKey('disease.id')), - Column('has_phenotypic_feature', Text, ForeignKey('phenotypic_feature.id')), ) tbl_cell_line = Table('cell_line', metadata, Column('id', Text, primary_key=True), @@ -214,8 +208,6 @@ Column('has_file', Text), Column('has_publication', Text), Column('type', Text), - Column('submission_status', Text), - Column('submission_date', Text), Column('release_status', Text), Column('release_date', Text), Column('deprecated', Text), @@ -232,6 +224,7 @@ Column('update_date', Text), Column('name', Text), Column('description', Text), + Column('biospecimen_id', Text, ForeignKey('biospecimen.id')), ) tbl_disease_or_phenotypic_feature = Table('disease_or_phenotypic_feature', metadata, Column('id', Text, primary_key=True), @@ -267,19 +260,16 @@ tbl_experiment = Table('experiment', metadata, Column('id', Text, primary_key=True), Column('accession', Text), + Column('type', Text), Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), - Column('title', Text), - Column('type', Text), Column('has_publication', Text, ForeignKey('publication.id')), Column('release_status', Text), Column('release_date', Text), Column('deprecated', Text), Column('deprecation_date', Text), Column('replaced_by', Text, ForeignKey('named_thing.id')), - Column('name', Text), - Column('description', Text), Column('biological_replicates', Text), Column('technical_replicates', Text), Column('experimental_replicates', Text), @@ -287,6 +277,8 @@ Column('has_sample', Text, ForeignKey('sample.id')), Column('has_technology', Text, ForeignKey('technology.id')), Column('has_file', Text), + Column('title', Text), + Column('description', Text), ) tbl_experiment_dataset = Table('experiment_dataset', metadata, Column('id', Text, primary_key=True), @@ -299,8 +291,6 @@ Column('has_file', Text), Column('has_publication', Text), Column('type', Text), - Column('submission_status', Text), - Column('submission_date', Text), Column('release_status', Text), Column('release_date', Text), Column('deprecated', Text), @@ -317,7 +307,7 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), - Column('name', Text), + Column('title', Text), Column('has_input', Text, ForeignKey('sample.id')), Column('has_protocol', Text, ForeignKey('protocol.id')), Column('has_agent', Text, ForeignKey('agent.id')), @@ -333,7 +323,7 @@ Column('update_date', Text), Column('name', Text), Column('has_member', Text), - Column('proband', Text, ForeignKey('individual.id')), + Column('has_proband', Text, ForeignKey('individual.id')), ) tbl_file = Table('file', metadata, Column('id', Text, primary_key=True), @@ -381,12 +371,12 @@ tbl_investigation = Table('investigation', metadata, Column('id', Text, primary_key=True), Column('accession', Text), + Column('type', Text), Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), Column('title', Text), Column('description', Text), - Column('type', Text), Column('has_publication', Text, ForeignKey('publication.id')), Column('release_status', Text), Column('release_date', Text), @@ -401,8 +391,6 @@ Column('creation_date', Text), Column('update_date', Text), Column('url', Text), - Column('name', Text), - Column('description', Text), Column('library_name', Text), Column('library_layout', Text), Column('library_type', Text), @@ -416,6 +404,8 @@ Column('end_bias', Text), Column('target_regions', Text), Column('rnaseq_strandedness', Text), + Column('name', Text), + Column('description', Text), Column('has_attribute', Text), ) tbl_material_entity = Table('material_entity', metadata, @@ -468,6 +458,7 @@ Column('update_date', Text), Column('name', Text), Column('description', Text), + Column('biospecimen_id', Text, ForeignKey('biospecimen.id')), ) tbl_planned_process = Table('planned_process', metadata, Column('id', Text, primary_key=True), @@ -537,7 +528,6 @@ Column('creation_date', Text), Column('update_date', Text), Column('name', Text), - Column('type', Text), Column('description', Text), Column('vital_status_at_sampling', Text), Column('tissue', Text), @@ -545,6 +535,7 @@ Column('storage', Text), Column('has_individual', Text, ForeignKey('individual.id')), Column('has_biospecimen', Text, ForeignKey('biospecimen.id')), + Column('type', Text), ) tbl_sequencing_protocol = Table('sequencing_protocol', metadata, Column('id', Text, primary_key=True), @@ -553,8 +544,6 @@ Column('creation_date', Text), Column('update_date', Text), Column('url', Text), - Column('name', Text), - Column('description', Text), Column('sequencing_center', Text), Column('instrument_model', Text), Column('read_length', Text), @@ -571,6 +560,8 @@ Column('cell_barcode_offset', Text), Column('cell_barcode_size', Text), Column('sample_barcode_read', Text), + Column('name', Text), + Column('description', Text), Column('has_attribute', Text), ) tbl_study = Table('study', metadata, @@ -583,14 +574,14 @@ Column('deprecated', Text), Column('deprecation_date', Text), Column('replaced_by', Text, ForeignKey('named_thing.id')), - Column('has_publication', Text), Column('has_experiment', Text), Column('has_analysis', Text), Column('has_project', Text, ForeignKey('project.id')), - Column('has_attribute', Text), Column('title', Text), Column('description', Text), Column('type', Text), + Column('has_publication', Text), + Column('has_attribute', Text), ) tbl_submission = Table('submission', metadata, Column('id', Text, primary_key=True), @@ -870,6 +861,18 @@ mapper_registry.map_imperatively(BiologicalQuality, tbl_biological_quality, properties={ }) mapper_registry.map_imperatively(Biospecimen, tbl_biospecimen, properties={ + + 'has_disease': + relationship(Disease, + foreign_keys=tbl_disease.columns["biospecimen_id"], + backref='Biospecimen'), + + + 'has_phenotypic_feature': + relationship(PhenotypicFeature, + foreign_keys=tbl_phenotypic_feature.columns["biospecimen_id"], + backref='Biospecimen'), + }) mapper_registry.map_imperatively(CellLine, tbl_cell_line, properties={ }) From 42f6943ec84f437a85ff16e6be3c60dbadbbe47d Mon Sep 17 00:00:00 2001 From: Florian Kraus <84305754+krausf@users.noreply.github.com> Date: Tue, 23 Nov 2021 14:06:21 +0100 Subject: [PATCH 10/16] Creating PR template Template for PR --- .github/pull_request_template.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..24b5fbc6 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,10 @@ +Fixes issue (if applicable) # + +## Proposed Changes + + - + - + - + +## Checks + - [ ] Builds locally From 06f1775ae4d37046dd46b6266469a81fdc25ca1f Mon Sep 17 00:00:00 2001 From: Florian Kraus <florian.kraus@qbic.uni-tuebingen.de> Date: Tue, 23 Nov 2021 17:25:29 +0100 Subject: [PATCH 11/16] Updated Schema with most recent version of Spreadsheet --- src/schema/ghga.yaml | 313 +++++++++++++++++++++++++++++++------------ 1 file changed, 226 insertions(+), 87 deletions(-) diff --git a/src/schema/ghga.yaml b/src/schema/ghga.yaml index d9d36135..c1a0d6d8 100644 --- a/src/schema/ghga.yaml +++ b/src/schema/ghga.yaml @@ -14,6 +14,8 @@ prefixes: biolink: https://w3id.org/biolink/vocab/ EFO: http://www.ebi.ac.uk/efo/EFO_ COB: http://purl.obolibrary.org/obo/COB_ + GENEPIO: http://purl.obolibrary.org/obo/GENEPIO_ + SNOMEDCT: http://purl.bioontology.org/ontology/SNOMEDCT/ default_prefix: GHGA @@ -166,11 +168,15 @@ classes: description: >- Comprehensive title for the project. required: true + related_mappings: + - SIO:000185 description: description: >- Short textual description of the project (Some information on the protocol, sample used and collected etc) required: true + broad_mappings: + - NCIT:C25365 has publication: description: >- One or more Publication entities associated with this Project. @@ -215,9 +221,9 @@ classes: The type of Study. For example, "Cancer Genomics", "Epigenetics", "Exome Sequencing". range: study_type_enum required: true + broad_mappings: + - NCIT:C142175 affiliation: - description: >- - Affiliations with this study. required: true multivalued: true has publication: @@ -275,10 +281,31 @@ classes: description: >- Name for the experiment (eg: GHGAE_PBMC_RNAseq). required: true + broad_mappings: + - NCIT:C181729 description: description: >- A detailed description of the Experiment. required: true + biological replicates: + description: >- + A biological replicate is a replicate role that consists of + independent biological replicates made from different individual biosamples. + exact_mappings: + - EFO:0002091 + technical replicates: + description: >- + A technical replicate is a replicate role where the same BioSample is use e.g. + the same pool of RNA used to assess technical (as opposed to biological) + variation within an experiment. + exact_mappings: + - EFO:0002090 + experimental replicates: + description: >- + The replicate number of the assay, i.e. the numeric iteration + for the assay that was repeated. + exact_mappings: + - NCIT:C178859 has study: description: >- The Study entity associated with this Experiment. @@ -377,13 +404,20 @@ classes: slot_usage: name: description: >- - Name of the Protocol. + Name of the protocol (eg: Sample extraction_PCR amplification). + type: + description: >- + Type of the protocol (eg: Target enrichment). description: description: >- Detailed description of the Protocol. url: description: >- URL for the resource that describes this Protocol. + xref: + description: >- + One or more cross-references for this Protocol. + (Eg: manufacturer protocol, protocol from publication etc ) has attribute: description: >- One or more attributes that further characterizes this Protocol. @@ -415,6 +449,26 @@ classes: description: >- Description about how a sequencing library was prepared (eg: Library construction method). required: true + library name: + required: true + library layout: + required: true + library type: + required: true + library selection: + required: true + library construction: + required: true + library preparation: + required: true + library construction kit retail name: + required: true + library construction kit manufacturer: + required: true + + + + has attribute: description: >- One or more attributes that further characterizes this Library Preparation Protocol. @@ -428,6 +482,7 @@ classes: - instrument model - read length - read pair number + - sequencing length - target coverage - reference annotation - lane number @@ -441,6 +496,10 @@ classes: - cell barcode size - sample barcode read slot_usage: + sequencing center: + required: true + instrument model: + required: true name: description: >- Name of the library preparation protocol (eg: mRNA-seq,Whole exome long-read sequencing etc). @@ -602,28 +661,22 @@ classes: slot_usage: name: description: >- - Name of the Sample. + Name of the sample (eg:GHGAS_Blood_Sample1 or GHGAS_PBMC_RNAseq_S1). required: true type: description: >- Type of sample: 'Case' or 'Control'. range: case_control_enum + related_mappings: + - NCIT:C15197 description: description: >- Short textual description of the sample (How the sample was collected, sample source, - protocol followed for processing the sample etc) + protocol followed for processing the sample etc). + required: true tissue: - description: >- - Description of Sample Source (eg: Blood, Serum etc). required: true - isolation: - description: >- - Method or Device employed for collecting sample. - storage: - description: >- - Methods by which sample is stored - (e.g. frozen in liquid nitrogen). has individual: description: >- The Individual from which this Sample was derived from. @@ -673,38 +726,14 @@ classes: - has parent - has children slot_usage: - gender: - description: >- - Gender of an Individual/ Identification as male/masculine, - female/feminine or something else, and association - with a (social) role or set of behavioral and cultural traits sex: - description: Biological sex of a sequenced individual. ("Female", "Male"). required: true - range: biological_sex_enum age: - description: Age of an Individual. required: true - year of birth: - description: Year of Birth of an Individual. vital status: description: Last known Vital Status of an Individual. required: true range: vital_status_enum - ethnicity: - description: >- - A social group characterized by a distinctive social and cultural - tradition that is maintained from generation to generation.. - ancestry: - description: >- - Ancestry of an Individual. Typically a value from Human Ancestry Ontology. - For example, 'HANCESTRO:0005' signifies this Individual belongs to the - 'European' ancestry. - geographical region: - description: >- - The geographical region where the Individual is located. Typically a value - from Human Ancestry Ontology. For example, 'HANCESTRO:0047' signifies this - Individual is from 'Western Europe' region. has parent: description: One or more parent for this Individual. range: individual @@ -785,26 +814,12 @@ classes: - file index - category slot_usage: - format: - description: >- - The format of the file: BAM, SAM, CRAM, BAI, etc. + name: + required: true type: description: >- The file type: Aligned Reads, Unaligned Reads, etc. range: file_type_enum - size: - description: >- - The file size in bytes. - checksum: - description: >- - The checksum for the file. - file index: - description: >- - The index for this file. Commonly for BAM/VCF files. - category: - description: >- - The category for this file: Whole Genome Sequencing, - Whole Exome Sequencing, etc. analysis: is_a: data transformation @@ -1131,6 +1146,7 @@ classes: organization: description: >- The organization that the Member is part of. + required: true publication: is_a: information content entity @@ -1148,9 +1164,6 @@ classes: title: description: >- The title for the Publication. - abstract: - description: >- - The abstract of the Publication. xref: description: >- One or more cross-references for this Publication. @@ -1366,7 +1379,11 @@ slots: description: The title that describes an entity. abstract: - description: The abstract - a short blurb - associated with an entity. + description: >- + The study abstract that describes the goals. + Can also hold abstract from a publication related to this study + related_mappings: + - NCIT:C60765 technical replicates: description: Number of replicate samples (technical replicates). @@ -1486,7 +1503,11 @@ slots: range: anatomical entity geographical region: - description: The geographical region linked to an entity. + description: >- + The geographical region where the Individual is located. + Any demarcated area of the Earth; may be determined by both natural and human boundaries. + close_mappings: + - NCIT:C16632 has disease: description: Disease concept that the entity is associated with. @@ -1521,54 +1542,94 @@ slots: gender: description: >- - The assemblage of properties that distinguish people on the basis - of the societal role s expected for the two sexes. [NCI] + Identification as male/masculine, female/feminine or something else, + and association with a (social) role or set of behavioral and cultural traits. + close_mappings: + - NCIT:C17357 sex: description: >- - The assemblage of physical properties or qualities - by which male is distinguished from female. [NCI] + The assemblage of physical properties or qualities by which male is distinguished from female; + the physical difference between male and female; the distinguishing peculiarity of male or female. range: biological_sex_enum + close_mappings: + - NCIT:C28421 age: - description: The age of a person. + description: Age of an individual. range: integer + close_mappings: + - SNOMEDCT:397669002 tissue: - description: The source of a sample. + description: >- + An anatomical structure consisting of similarly specialized cells and intercellular matrix, + aggregated according to genetically determined spatial relationships, performing a specific function. + broad_mappings: + - NCIT:C12801 isolation: - description: Method or device employed for collecting/isolating a sample. + description: >- + Method or device employed for collecting/isolating a sample. + related_mappings: + - NCIT:C25549 storage: - description: Methods by which a sample is stored. + description: >- + Methods by which sample is stored + (e.g. frozen in liquid nitrogen). + related_mappings: + - NCIT:C60824 year of birth: - description: Year of Birth of a person. + description: The year in which the individual was born. + close_mappings: + - NCIT:C83164 vital status: - description: Vital status of a person. + description: >- + The state or condition of being living or deceased; + also includes the case where the vital status is unknown. + range: vital_status_enum + close_mappings: + - NCIT:C25717 ethnicity: - description: Ethnicity of a person. + description: >- + A social group characterized by a distinctive social and cultural tradition + that is maintained from generation to generation. + related_mappings: + - SIO:001014 ancestry: - description: Ancestral group to which a person belongs to. + description: >- + A person's descent or lineage, from a person or from a population. + close_mappings: + - NCIT:C176763 format: - description: The format of a file. + description: >- + The format of the file: BAM, SAM, CRAM, BAI, etc. size: description: The size of a file in bytes. checksum: - description: The checksum for a file. + description: >- + A computed value which depends on the contents of a block of data and which is transmitted or + stored along with the data in order to detect corruption of the data. + The receiving system recomputes the checksum based upon the received data and compares this + value with the one sent with the data. If the two values are the same, the receiver has some confidence + that the data was received correctly. + exact_mappings: + - NCIT:C43522 file index: - description: The index file corresponding to the file. + description: The index for this file. Commonly for BAM/VCF files. category: - description: The file category. + description: >- + The category for this file: Whole Genome Sequencing, Whole Exome Sequencing, etc. has data access policy: description: Data Access Policy associated with an entity. @@ -1592,13 +1653,19 @@ slots: description: The members associated with a committee. telephone: - description: The telephone number associated with a person. + description: >- + The telephone number associated with a person. + close_mappings: + - NCIT:C40978 organization: description: The organization associated with a person. email: - description: Email of a person. + description: >- + Email of a person. + close_mappings: + - NCIT:C42775 key: description: The key of an attribute. @@ -1613,15 +1680,21 @@ slots: description: The semantic type for the value of an attribute. affiliation: - description: Affiliations associated with an instance. + description: >- + Institutions associated with this study. + related_mappings: + - NCIT:C25412 library name: description: >- - Library Name (e.g.: Sequencer layout_macromolecule) + A short name identifying the library to potential users. + The same name may refer to multiple versions of the same continually updated library. library layout: description: >- Describe whether the library was sequenced in single-end (forward or reverse) or paired-end mode + exact_mappings: + - NCIT:C175894 library type: description: >- @@ -1629,15 +1702,22 @@ slots: library selection: description: >- - Library Selection method (e.g. random, PCA, cDNA, etc ) + Whether any method was used to select for or against, enrich, or screen the material being sequenced. + Library Selection method (e.g. random, PCA, cDNA, etc ) + broad_mappings: + - GENEPIO:0001940 library construction: description: >- The name of a library construction approach being used. (eg: "10X v2 sequencing" or "Smart-seq2") + close_mappings: + - OBI:0000711 library preparation: description: >- The general method for sequencing library construction (e.g. KAPA PCR-free). + close_mappings: + - OBI:0000711 library level: description: >- @@ -1648,6 +1728,8 @@ slots: A unique identifier for the kit used to construct a genomic library. This may include the vendor name, kit name and kit version (e.g. Agilent sure select Human Exome V8, Twist RefSeq Exome, etc.) + broad_mappings: + - NCIT:C177583 library construction kit manufacturer: description: >- @@ -1657,23 +1739,34 @@ slots: description: >- The type of primer used for reverse transcription, e.g. "oligo-dT" or "random" primer. This allows users to identify content of the cDNA library input e.g. enriched for mRNA. + broad_mappings: + - NCIT:C1451 end bias: description: >- The end of the cDNA molecule that is preferentially sequenced, e.g. 3/5 prime tag or end, or the full-length transcript. + broad_mappings: + - EFO:0010187 target regions: description: >- - subset of genes or specific regions of the genome, which are most likely to be involved in the phenotype under study + Subset of genes or specific regions of the genome, which are most likely to be involved in the phenotype under study. + broad_mappings: + - NCIT:C130177 rnaseq strandedness: description: >- - The strandedness of the library, whether reads come from both strands of the cDNA or only from the first (antisense) or the second (sense) strand. + The strandedness of the library, whether reads come from both strands of the cDNA + or only from the first (antisense) or the second (sense) strand. + broad_mappings: + - NCIT:C48673 sequencing center: description: >- Center where sample was sequenced. + close_mappings: + - NCIT:C172274 instrument model: description: >- @@ -1682,62 +1775,105 @@ slots: read length: 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 + close_mappings: + - NCIT:C153362 + + sequencing length: + description: >- + Long or Short Read. read pair number: 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. + close_mappings: + - NCIT:C172300 reference annotation: description: >- + A published genetic sequence that is used as a reference sequence against which other sequences are compared. Reference genome(s) or annotation(s) used for prior analyses (eg: GRCh38.p13). + close_mappings: + - NCIT:C164388 lane number: description: >- - Number of lanes on used flow cell. + he numerical identifier for the lane or machine unit where a sample was located during nucleotide sequencing. + close_mappings: + - NCIT:C182081 target coverage: description: >- - Mean coverage for whole genome sequencing, or mean target coverage for whole exome and targeted sequencing + 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. + close_mappings: + - NCIT:C155320 flow cell id: description: >- Flow Cell ID (eg: Experiment ID_Cell 1_Lane_1). + The barcode assigned to a flow cell used in nucleotide sequencing. + close_mappings: + - NCIT:C181843 flow cell type: description: >- - Type of flow cell used (e.g. S4, S2 for NovaSeq; PromethION, Flongle for Nanopore) + Type of flow cell used (e.g. S4, S2 for NovaSeq; PromethION, Flongle for Nanopore). + Aparatus in the fluidic subsystem where the sheath and sample meet. + Can be one of several types; jet-in-air, quartz cuvette, or a hybrid of the two. + The sample flows through the center of a fluid column of sheath fluid in the flow cell. + close_mappings: + - OBI:0400043 umi barcode read: description: >- - The type of read that contains the UMI barcode (Eg: index1/index2/read1/read2) + The type of read that contains the UMI barcode (Eg: index1/index2/read1/read2). + close_mappings: + - EFO:0010208 umi barcode offset: description: >- The offset in sequence of the UMI identifying barcode. (E.g. "16"). + close_mappings: + - EFO:0010207 umi barcode size: description: >- The size of the UMI identifying barcode (Eg. "10"). + close_mappings: + - EFO:0010209 cell barcode read: description: >- The type of read that contains the cell barcode (eg: index1/index2/read1/read2). + close_mappings: + - EFO:0010203 cell barcode offset: description: >- The offset in sequence of the cell identifying barcode. (Eg. "0"). + close_mappings: + - EFO:0010204 cell barcode size: description: >- The size of the cell identifying barcode (E.g. "16"). + close_mappings: + - EFO:0010205 sample barcode read: description: >- The type of read that contains the sample barcode (eg: index1/index2/read1/read2). + close_mappings: + - EFO:0010210 vital status at sampling: description: >- - Vital status at the age of the sampling. + Vital Status of an Individual at the point of sampling (eg:"Alive", "Deceased"). + close_mappings: + - NCIT:C25717 submission status: description: >- @@ -1815,6 +1951,9 @@ enums: deceased: description: >- The cessation of life. + unknown: + description: >- + Vital status is unknown. study_type_enum: description: >- From ccf73255393e031767b2c4cf5cc8220580ab176c Mon Sep 17 00:00:00 2001 From: Florian Kraus <florian.kraus@qbic.uni-tuebingen.de> Date: Wed, 24 Nov 2021 12:37:45 +0100 Subject: [PATCH 12/16] Updated Schema with suggested comments --- src/schema/ghga.yaml | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/schema/ghga.yaml b/src/schema/ghga.yaml index c1a0d6d8..a774e9c6 100644 --- a/src/schema/ghga.yaml +++ b/src/schema/ghga.yaml @@ -168,15 +168,15 @@ classes: description: >- Comprehensive title for the project. required: true - related_mappings: - - SIO:000185 description: description: >- Short textual description of the project (Some information on the protocol, sample used and collected etc) required: true - broad_mappings: + exact_mappings: - NCIT:C25365 + - SIO:000136 + has publication: description: >- One or more Publication entities associated with this Project. @@ -281,8 +281,6 @@ classes: description: >- Name for the experiment (eg: GHGAE_PBMC_RNAseq). required: true - broad_mappings: - - NCIT:C181729 description: description: >- A detailed description of the Experiment. @@ -667,8 +665,6 @@ classes: description: >- Type of sample: 'Case' or 'Control'. range: case_control_enum - related_mappings: - - NCIT:C15197 description: description: >- Short textual description of the sample @@ -1382,7 +1378,7 @@ slots: description: >- The study abstract that describes the goals. Can also hold abstract from a publication related to this study - related_mappings: + close_mappings: - NCIT:C60765 technical replicates: @@ -1413,6 +1409,8 @@ slots: description: description: Description of an entity. + exact_mappings: + - SIO:000185 has study: description: The study associated with an entity. @@ -1559,26 +1557,26 @@ slots: description: Age of an individual. range: integer close_mappings: - - SNOMEDCT:397669002 + - EFO:0000246 tissue: description: >- An anatomical structure consisting of similarly specialized cells and intercellular matrix, aggregated according to genetically determined spatial relationships, performing a specific function. - broad_mappings: + close_mappings: - NCIT:C12801 isolation: description: >- Method or device employed for collecting/isolating a sample. - related_mappings: + close_mappings: - NCIT:C25549 storage: description: >- Methods by which sample is stored (e.g. frozen in liquid nitrogen). - related_mappings: + close_mappings: - NCIT:C60824 year of birth: @@ -1598,7 +1596,7 @@ slots: description: >- A social group characterized by a distinctive social and cultural tradition that is maintained from generation to generation. - related_mappings: + exact_mappings: - SIO:001014 ancestry: @@ -1682,7 +1680,7 @@ slots: affiliation: description: >- Institutions associated with this study. - related_mappings: + close_mappings: - NCIT:C25412 library name: @@ -1704,7 +1702,7 @@ slots: description: >- Whether any method was used to select for or against, enrich, or screen the material being sequenced. Library Selection method (e.g. random, PCA, cDNA, etc ) - broad_mappings: + close_mappings: - GENEPIO:0001940 library construction: @@ -1741,12 +1739,14 @@ slots: This allows users to identify content of the cDNA library input e.g. enriched for mRNA. broad_mappings: - NCIT:C1451 + exact_mappings: + - EFO:0010192 end bias: description: >- The end of the cDNA molecule that is preferentially sequenced, e.g. 3/5 prime tag or end, or the full-length transcript. - broad_mappings: + exact_mappings: - EFO:0010187 target regions: @@ -1766,7 +1766,7 @@ slots: description: >- Center where sample was sequenced. close_mappings: - - NCIT:C172274 + - GENEPIO:0000070 instrument model: description: >- From 83f7ed7585d14a5b22f3a70926441f7f86325fbe Mon Sep 17 00:00:00 2001 From: GitHub Action <action@github.com> Date: Wed, 24 Nov 2021 12:26:32 +0000 Subject: [PATCH 13/16] Autogenerate artifacts --- artifacts/graphql/ghga.graphql | 39 +- artifacts/jsonschema/ghga.schema.json | 116 +- artifacts/owl/ghga.owl.ttl | 737 ++++++------ artifacts/python/ghga.py | 221 ++-- artifacts/rdf/ghga.ttl | 1545 ++++++++++++++----------- artifacts/shex/ghga.shex | 29 +- artifacts/sql/ghga.sql | 35 +- artifacts/sql/ghga_models.py | 7 +- 8 files changed, 1486 insertions(+), 1243 deletions(-) diff --git a/artifacts/graphql/ghga.graphql b/artifacts/graphql/ghga.graphql index d7d5c716..baef7fb5 100644 --- a/artifacts/graphql/ghga.graphql +++ b/artifacts/graphql/ghga.graphql @@ -389,7 +389,7 @@ type File hasAttribute: [Attribute] creationDate: String updateDate: String - name: String + name: String! format: String size: String checksum: String @@ -456,20 +456,20 @@ type LibraryPreparationProtocol { id: String! accession: String - xref: [String] - type: String creationDate: String updateDate: String url: String - libraryName: String - libraryLayout: String - libraryType: String - librarySelection: String - libraryConstruction: String - libraryPreparation: String + type: String + xref: [String] + libraryName: String! + libraryLayout: String! + libraryType: String! + librarySelection: String! + libraryConstruction: String! + libraryPreparation: String! libraryLevel: String - libraryConstructionKitRetailName: String - libraryConstructionKitManufacturer: String + libraryConstructionKitRetailName: String! + libraryConstructionKitManufacturer: String! primer: String endBias: String targetRegions: String @@ -504,7 +504,7 @@ type Member additionalName: String email: String! telephone: String! - organization: String + organization: String! } type NamedThing @@ -587,13 +587,13 @@ type Protocol { id: String! accession: String - xref: [String] - type: String creationDate: String updateDate: String name: String description: String url: String + type: String + xref: [String] hasAttribute: [Attribute] } @@ -638,7 +638,7 @@ type Sample creationDate: String updateDate: String name: String! - description: String + description: String! vitalStatusAtSampling: String tissue: String! isolation: String @@ -653,15 +653,16 @@ type SequencingProtocol { id: String! accession: String - xref: [String] - type: String creationDate: String updateDate: String url: String - sequencingCenter: String - instrumentModel: String + type: String + xref: [String] + sequencingCenter: String! + instrumentModel: String! readLength: String readPairNumber: String + sequencingLength: String targetCoverage: String referenceAnnotation: String laneNumber: String diff --git a/artifacts/jsonschema/ghga.schema.json b/artifacts/jsonschema/ghga.schema.json index 21fb642f..7678080a 100644 --- a/artifacts/jsonschema/ghga.schema.json +++ b/artifacts/jsonschema/ghga.schema.json @@ -1205,11 +1205,11 @@ "type": "string" }, "age": { - "description": "Age of an Individual.", + "description": "Age of an individual.", "type": "integer" }, "ancestry": { - "description": "Ancestry of an Individual. Typically a value from Human Ancestry Ontology. For example, 'HANCESTRO:0005' signifies this Individual belongs to the 'European' ancestry.", + "description": "A person's descent or lineage, from a person or from a population.", "type": "string" }, "creation_date": { @@ -1217,7 +1217,7 @@ "type": "string" }, "ethnicity": { - "description": "A social group characterized by a distinctive social and cultural tradition that is maintained from generation to generation..", + "description": "A social group characterized by a distinctive social and cultural tradition that is maintained from generation to generation.", "type": "string" }, "family_name": { @@ -1225,11 +1225,11 @@ "type": "string" }, "gender": { - "description": "Gender of an Individual/ Identification as male/masculine, female/feminine or something else, and association with a (social) role or set of behavioral and cultural traits", + "description": "Identification as male/masculine, female/feminine or something else, and association with a (social) role or set of behavioral and cultural traits.", "type": "string" }, "geographical_region": { - "description": "The geographical region where the Individual is located. Typically a value from Human Ancestry Ontology. For example, 'HANCESTRO:0047' signifies this Individual is from 'Western Europe' region.", + "description": "The geographical region where the Individual is located. Any demarcated area of the Earth; may be determined by both natural and human boundaries.", "type": "string" }, "given_name": { @@ -1263,7 +1263,7 @@ }, "sex": { "$ref": "#/$defs/BiologicalSexEnum", - "description": "Biological sex of a sequenced individual. (\"Female\", \"Male\")." + "description": "The assemblage of physical properties or qualities by which male is distinguished from female; the physical difference between male and female; the distinguishing peculiarity of male or female." }, "type": { "description": "The type of an entity.", @@ -1285,7 +1285,7 @@ "type": "array" }, "year_of_birth": { - "description": "Year of Birth of an Individual.", + "description": "The year in which the individual was born.", "type": "string" } }, @@ -1307,7 +1307,7 @@ "type": "string" }, "biological_replicates": { - "description": "Number of independent samples (biological replicates).", + "description": "A biological replicate is a replicate role that consists of independent biological replicates made from different individual biosamples.", "type": "string" }, "creation_date": { @@ -1327,7 +1327,7 @@ "type": "string" }, "experimental_replicates": { - "description": "Number of experiment replications.", + "description": "The replicate number of the assay, i.e. the numeric iteration for the assay that was repeated.", "type": "string" }, "has_attribute": { @@ -1384,7 +1384,7 @@ "type": "string" }, "technical_replicates": { - "description": "Number of replicate samples (technical replicates).", + "description": "A technical replicate is a replicate role where the same BioSample is use e.g. the same pool of RNA used to assess technical (as opposed to biological) variation within an experiment.", "type": "string" }, "title": { @@ -1670,7 +1670,7 @@ "type": "string" }, "checksum": { - "description": "The checksum for the file.", + "description": "A computed value which depends on the contents of a block of data and which is transmitted or stored along with the data in order to detect corruption of the data. The receiving system recomputes the checksum based upon the received data and compares this value with the one sent with the data. If the two values are the same, the receiver has some confidence that the data was received correctly.", "type": "string" }, "creation_date": { @@ -1701,7 +1701,7 @@ "type": "string" }, "size": { - "description": "The file size in bytes.", + "description": "The size of a file in bytes.", "type": "string" }, "type": { @@ -1721,7 +1721,8 @@ } }, "required": [ - "id" + "id", + "name" ], "title": "File", "type": "object" @@ -1755,11 +1756,11 @@ "type": "string" }, "age": { - "description": "Age of an Individual.", + "description": "Age of an individual.", "type": "integer" }, "ancestry": { - "description": "Ancestry of an Individual. Typically a value from Human Ancestry Ontology. For example, 'HANCESTRO:0005' signifies this Individual belongs to the 'European' ancestry.", + "description": "A person's descent or lineage, from a person or from a population.", "type": "string" }, "creation_date": { @@ -1767,7 +1768,7 @@ "type": "string" }, "ethnicity": { - "description": "A social group characterized by a distinctive social and cultural tradition that is maintained from generation to generation..", + "description": "A social group characterized by a distinctive social and cultural tradition that is maintained from generation to generation.", "type": "string" }, "family_name": { @@ -1775,11 +1776,11 @@ "type": "string" }, "gender": { - "description": "Gender of an Individual/ Identification as male/masculine, female/feminine or something else, and association with a (social) role or set of behavioral and cultural traits", + "description": "Identification as male/masculine, female/feminine or something else, and association with a (social) role or set of behavioral and cultural traits.", "type": "string" }, "geographical_region": { - "description": "The geographical region where the Individual is located. Typically a value from Human Ancestry Ontology. For example, 'HANCESTRO:0047' signifies this Individual is from 'Western Europe' region.", + "description": "The geographical region where the Individual is located. Any demarcated area of the Earth; may be determined by both natural and human boundaries.", "type": "string" }, "given_name": { @@ -1813,7 +1814,7 @@ }, "sex": { "$ref": "#/$defs/BiologicalSexEnum", - "description": "Biological sex of a sequenced individual. (\"Female\", \"Male\")." + "description": "The assemblage of physical properties or qualities by which male is distinguished from female; the physical difference between male and female; the distinguishing peculiarity of male or female." }, "type": { "description": "The type of an entity.", @@ -1835,7 +1836,7 @@ "type": "array" }, "year_of_birth": { - "description": "Year of Birth of an Individual.", + "description": "The year in which the individual was born.", "type": "string" } }, @@ -2022,7 +2023,7 @@ "type": "string" }, "library_name": { - "description": "Library Name (e.g.: Sequencer layout_macromolecule)", + "description": "A short name identifying the library to potential users. The same name may refer to multiple versions of the same continually updated library.", "type": "string" }, "library_preparation": { @@ -2030,7 +2031,7 @@ "type": "string" }, "library_selection": { - "description": "Library Selection method (e.g. random, PCA, cDNA, etc )", + "description": "Whether any method was used to select for or against, enrich, or screen the material being sequenced. Library Selection method (e.g. random, PCA, cDNA, etc )", "type": "string" }, "library_type": { @@ -2046,15 +2047,15 @@ "type": "string" }, "rnaseq_strandedness": { - "description": "The strandedness of the library, whether reads come from both strands of the cDNA or only from the first (antisense) or the second (sense) strand.", + "description": "The strandedness of the library, whether reads come from both strands of the cDNA or only from the first (antisense) or the second (sense) strand.", "type": "string" }, "target_regions": { - "description": "subset of genes or specific regions of the genome, which are most likely to be involved in the phenotype under study", + "description": "Subset of genes or specific regions of the genome, which are most likely to be involved in the phenotype under study. ", "type": "string" }, "type": { - "description": "The type of an entity.", + "description": "Type of the protocol (eg: Target enrichment).", "type": "string" }, "update_date": { @@ -2066,7 +2067,7 @@ "type": "string" }, "xref": { - "description": "Holds one or more database cross references.", + "description": "One or more cross-references for this Protocol. (Eg: manufacturer protocol, protocol from publication etc )", "items": { "type": "string" }, @@ -2075,6 +2076,14 @@ }, "required": [ "id", + "library_name", + "library_layout", + "library_type", + "library_selection", + "library_construction", + "library_preparation", + "library_construction_kit_retail_name", + "library_construction_kit_manufacturer", "name", "description" ], @@ -2192,7 +2201,8 @@ "required": [ "id", "email", - "telephone" + "telephone", + "organization" ], "title": "Member", "type": "object" @@ -2543,11 +2553,11 @@ "type": "string" }, "name": { - "description": "Name of the Protocol.", + "description": "Name of the protocol (eg: Sample extraction_PCR amplification).", "type": "string" }, "type": { - "description": "The type of an entity.", + "description": "Type of the protocol (eg: Target enrichment).", "type": "string" }, "update_date": { @@ -2559,7 +2569,7 @@ "type": "string" }, "xref": { - "description": "Holds one or more database cross references.", + "description": "One or more cross-references for this Protocol. (Eg: manufacturer protocol, protocol from publication etc )", "items": { "type": "string" }, @@ -2577,7 +2587,7 @@ "description": "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.", "properties": { "abstract": { - "description": "The abstract of the Publication.", + "description": "The study abstract that describes the goals. Can also hold abstract from a publication related to this study", "type": "string" }, "accession": { @@ -2704,7 +2714,7 @@ "type": "string" }, "description": { - "description": "Short textual description of the sample (How the sample was collected, sample source, protocol followed for processing the sample etc) ", + "description": "Short textual description of the sample (How the sample was collected, sample source, protocol followed for processing the sample etc).", "type": "string" }, "has_attribute": { @@ -2727,11 +2737,11 @@ "type": "string" }, "isolation": { - "description": "Method or Device employed for collecting sample.", + "description": "Method or device employed for collecting/isolating a sample.", "type": "string" }, "name": { - "description": "Name of the Sample.", + "description": "Name of the sample (eg:GHGAS_Blood_Sample1 or GHGAS_PBMC_RNAseq_S1).", "type": "string" }, "storage": { @@ -2739,7 +2749,7 @@ "type": "string" }, "tissue": { - "description": "Description of Sample Source (eg: Blood, Serum etc).", + "description": "An anatomical structure consisting of similarly specialized cells and intercellular matrix, aggregated according to genetically determined spatial relationships, performing a specific function.", "type": "string" }, "type": { @@ -2751,7 +2761,7 @@ "type": "string" }, "vital_status_at_sampling": { - "description": "Vital status at the age of the sampling.", + "description": "Vital Status of an Individual at the point of sampling (eg:\"Alive\", \"Deceased\").", "type": "string" }, "xref": { @@ -2765,6 +2775,7 @@ "required": [ "id", "name", + "description", "tissue", "has_individual" ], @@ -2800,11 +2811,11 @@ "type": "string" }, "flow_cell_id": { - "description": "Flow Cell ID (eg: Experiment ID_Cell 1_Lane_1).", + "description": "Flow Cell ID (eg: Experiment ID_Cell 1_Lane_1). The barcode assigned to a flow cell used in nucleotide sequencing.", "type": "string" }, "flow_cell_type": { - "description": "Type of flow cell used (e.g. S4, S2 for NovaSeq; PromethION, Flongle for Nanopore)", + "description": "Type of flow cell used (e.g. S4, S2 for NovaSeq; PromethION, Flongle for Nanopore). Aparatus in the fluidic subsystem where the sheath and sample meet. Can be one of several types; jet-in-air, quartz cuvette, or a hybrid of the two. The sample flows through the center of a fluid column of sheath fluid in the flow cell.", "type": "string" }, "has_attribute": { @@ -2823,7 +2834,7 @@ "type": "string" }, "lane_number": { - "description": "Number of lanes on used flow cell.", + "description": "he numerical identifier for the lane or machine unit where a sample was located during nucleotide sequencing.", "type": "string" }, "name": { @@ -2831,15 +2842,15 @@ "type": "string" }, "read_length": { - "description": "Length of sequencing reads (eg: Long or short or actual number of the read length etc).", + "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", "type": "string" }, "read_pair_number": { - "description": "Denotes whether a submitted FASTQ file contains forward (R1) or reverse (R2) reads for paired-end sequencing.", + "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" }, "reference_annotation": { - "description": "Reference genome(s) or annotation(s) used for prior analyses (eg: GRCh38.p13).", + "description": "A published genetic sequence that is used as a reference sequence against which other sequences are compared. Reference genome(s) or annotation(s) used for prior analyses (eg: GRCh38.p13).", "type": "string" }, "sample_barcode_read": { @@ -2850,12 +2861,16 @@ "description": "Center where sample was sequenced.", "type": "string" }, + "sequencing_length": { + "description": "Long or Short Read.", + "type": "string" + }, "target_coverage": { - "description": "Mean coverage for whole genome sequencing, or mean target coverage for whole exome and targeted sequencing", + "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.", "type": "string" }, "type": { - "description": "The type of an entity.", + "description": "Type of the protocol (eg: Target enrichment).", "type": "string" }, "umi_barcode_offset": { @@ -2863,7 +2878,7 @@ "type": "string" }, "umi_barcode_read": { - "description": "The type of read that contains the UMI barcode (Eg: index1/index2/read1/read2)", + "description": "The type of read that contains the UMI barcode (Eg: index1/index2/read1/read2).", "type": "string" }, "umi_barcode_size": { @@ -2879,7 +2894,7 @@ "type": "string" }, "xref": { - "description": "Holds one or more database cross references.", + "description": "One or more cross-references for this Protocol. (Eg: manufacturer protocol, protocol from publication etc )", "items": { "type": "string" }, @@ -2887,7 +2902,9 @@ } }, "required": [ - "id" + "id", + "sequencing_center", + "instrument_model" ], "title": "SequencingProtocol", "type": "object" @@ -2901,7 +2918,7 @@ "type": "string" }, "affiliation": { - "description": "Affiliations with this study.", + "description": "Institutions associated with this study.", "items": { "type": "string" }, @@ -3261,7 +3278,8 @@ "description": "Enum to capture the vital status of an individual.", "enum": [ "alive", - "deceased" + "deceased", + "unknown" ], "title": "VitalStatusEnum", "type": "string" diff --git a/artifacts/owl/ghga.owl.ttl b/artifacts/owl/ghga.owl.ttl index a8512a73..2c926c14 100644 --- a/artifacts/owl/ghga.owl.ttl +++ b/artifacts/owl/ghga.owl.ttl @@ -25,11 +25,11 @@ dcterms:license "https://creativecommons.org/publicdomain/zero/1.0/" ; pav:version "1.0.0a" ; skos:definition "The metadata schema for the German Human Genome-Phenome Archive (GHGA)." ; - linkml:generation_date "2021-11-23T14:05:02" ; + linkml:generation_date "2021-11-24T12:26:20" ; linkml:metamodel_version "1.7.0" ; linkml:source_file "ghga.yaml" ; - linkml:source_file_date "2021-11-23T14:04:26" ; - linkml:source_file_size 56544 . + linkml:source_file_date "2021-11-24T12:25:33" ; + linkml:source_file_size 60843 . GHGA:AggregateDataset a owl:Class, linkml:ClassDefinition ; @@ -44,27 +44,27 @@ GHGA:AnalysisDataset a owl:Class, linkml:ClassDefinition ; rdfs:label "analysis dataset" ; rdfs:subClassOf [ a owl:Class ; - owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom GHGA:Analysis ; - owl:onProperty GHGA:has_experiment ] [ a owl:Restriction ; - owl:onProperty GHGA:has_experiment ; - owl:someValuesFrom GHGA:Analysis ] ) ], - [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; owl:allValuesFrom GHGA:Study ; owl:onProperty GHGA:has_study ] [ a owl:Restriction ; owl:onProperty GHGA:has_study ; owl:someValuesFrom GHGA:Study ] ) ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:has_analysis ], + [ a owl:Class ; + owl:intersectionOf ( [ a owl:Restriction ; + owl:allValuesFrom GHGA:Analysis ; + owl:onProperty GHGA:has_experiment ] [ a owl:Restriction ; + owl:onProperty GHGA:has_experiment ; + owl:someValuesFrom GHGA:Analysis ] ) ], [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; owl:allValuesFrom GHGA:DataAccessPolicy ; owl:onProperty GHGA:has_data_access_policy ] [ a owl:Restriction ; owl:onProperty GHGA:has_data_access_policy ; owl:someValuesFrom GHGA:DataAccessPolicy ] ) ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:has_analysis ], GHGA:Dataset ; skos:definition "An Analysis Dataset is a collection of Files generated from one or more Analysis performed on data from one or more Studies." . @@ -133,68 +133,68 @@ GHGA:LibraryPreparationProtocol a owl:Class, linkml:ClassDefinition ; rdfs:label "library preparation protocol" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:library_selection ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_preparation ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:primer ], + owl:onProperty GHGA:name ; + owl:qualifiedCardinality 1 ], [ 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_name ], + owl:onProperty GHGA:description ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_construction_kit_manufacturer ], + owl:onProperty GHGA:library_level ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_construction ], + owl:onProperty GHGA:end_bias ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_type ], + owl:onProperty GHGA:library_construction_kit_retail_name ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:end_bias ], + owl:onProperty GHGA:rnaseq_strandedness ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_layout ], + owl:onProperty GHGA:library_construction ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:rnaseq_strandedness ], + owl:onProperty GHGA:library_preparation ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:library_name ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:target_regions ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:library_selection ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_construction_kit_retail_name ], + owl:onProperty GHGA:primer ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ; + owl:onProperty GHGA:library_layout ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ; + owl:onProperty GHGA:library_type ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_level ], + owl:onProperty GHGA:library_construction_kit_manufacturer ; + owl:qualifiedCardinality 1 ], GHGA:Protocol ; skos:definition "Information about the library preparation of an Experiment." . @@ -204,78 +204,82 @@ GHGA:SequencingProtocol a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:sequencing_center ], + owl:onProperty GHGA:name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:umi_barcode_offset ], + owl:onProperty GHGA:target_coverage ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:sample_barcode_read ], + owl:onProperty GHGA:sequencing_center ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:cell_barcode_size ], + owl:onProperty GHGA:flow_cell_id ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:flow_cell_type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:instrument_model ], + owl:onProperty GHGA:cell_barcode_read ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:flow_cell_type ], + owl:onProperty GHGA:cell_barcode_offset ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ], + owl:onProperty GHGA:instrument_model ; + owl:qualifiedCardinality 1 ], + [ 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:lane_number ], + owl:onProperty GHGA:umi_barcode_read ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:cell_barcode_offset ], + owl:onProperty GHGA:read_pair_number ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:flow_cell_id ], + owl:onProperty GHGA:umi_barcode_offset ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:umi_barcode_read ], + owl:onProperty GHGA:description ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:read_length ], + owl:onProperty GHGA:reference_annotation ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:reference_annotation ], + owl:onProperty GHGA:sequencing_length ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:target_coverage ], + owl:onProperty GHGA:sample_barcode_read ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:cell_barcode_size ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:umi_barcode_size ], + owl:onProperty GHGA:lane_number ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:cell_barcode_read ], + owl:onProperty GHGA:umi_barcode_size ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:read_pair_number ], + owl:onProperty GHGA:read_length ], GHGA:Protocol ; skos:definition "Information about the sequencing of a sample." . @@ -285,22 +289,16 @@ GHGA:Submission a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:allValuesFrom GHGA:Experiment ; owl:onProperty GHGA:has_experiment ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Sample ; - owl:onProperty GHGA:has_sample ], [ a owl:Restriction ; owl:allValuesFrom GHGA:File ; owl:onProperty GHGA:has_file ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:Individual ; - owl:onProperty GHGA:has_individual ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Biospecimen ; - owl:onProperty GHGA:has_biospecimen ], + owl:allValuesFrom GHGA:Sample ; + owl:onProperty GHGA:has_sample ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:submission_date ], + owl:onClass <http://UNKNOWN.org/submission_status_enum> ; + owl:onProperty GHGA:submission_status ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Analysis ; owl:onProperty GHGA:has_analysis ], @@ -309,17 +307,23 @@ GHGA:Submission a owl:Class, owl:onClass GHGA:Study ; owl:onProperty GHGA:has_study ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Project ; - owl:onProperty GHGA:has_project ], + owl:allValuesFrom GHGA:Individual ; + owl:onProperty GHGA:has_individual ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Biospecimen ; + owl:onProperty GHGA:has_biospecimen ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:DataAccessPolicy ; owl:onProperty GHGA:has_data_access_policy ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass <http://UNKNOWN.org/submission_status_enum> ; - owl:onProperty GHGA:submission_status ], + owl:onClass linkml:String ; + owl:onProperty GHGA:submission_date ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Project ; + owl:onProperty GHGA:has_project ], GHGA:NamedThing, GHGA:SubmissionStatusMixin ; 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." . @@ -328,13 +332,13 @@ GHGA:User a owl:Class, linkml:ClassDefinition ; rdfs:label "user" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:email ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass <http://UNKNOWN.org/user_role_enum> ; owl:onProperty GHGA:role ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:email ], GHGA:Person ; skos:definition "A user in GHGA." . @@ -373,15 +377,15 @@ GHGA:AnalysisProcess a owl:Class, owl:onClass GHGA:WorkflowStep ; owl:onProperty GHGA:has_workflow_step ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:title ], + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_input ], [ a owl:Restriction ; owl:allValuesFrom GHGA:File ; owl:onProperty GHGA:has_output ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_input ], + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:title ], 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." . @@ -416,10 +420,6 @@ GHGA:DataAccessCommittee a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:description ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Member ; - owl:onProperty GHGA:main_contact ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Member ; owl:onProperty GHGA:has_member ], @@ -427,6 +427,10 @@ GHGA:DataAccessCommittee a owl:Class, 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 ], GHGA:Committee ; skos:definition "A group of members that are delegated to grant access to one or more datasets after ensuring the minimum criteria for data sharing has been met, and request for data use does not raise ethical and/or legal concerns." . @@ -461,14 +465,6 @@ GHGA:ExperimentProcess a owl:Class, linkml:ClassDefinition ; rdfs:label "experiment process" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:title ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Sample ; - owl:onProperty GHGA:has_input ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Agent ; owl:onProperty GHGA:has_agent ], @@ -480,6 +476,14 @@ GHGA:ExperimentProcess a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass 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:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:title ], 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." . @@ -497,10 +501,6 @@ GHGA:ResearchActivity a owl:Class, linkml:ClassDefinition ; rdfs:label "research activity" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:title ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Publication ; owl:onProperty GHGA:has_publication ], @@ -508,6 +508,10 @@ GHGA:ResearchActivity a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:description ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:title ], GHGA:PlannedProcess ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C15429> ; 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." ; @@ -535,7 +539,10 @@ GHGA:WorkflowStep a owl:Class, skos:definition "A Workflow Step represents each individual step performed in a Workflow. If the Workflow is a single-step workflow then the Workflow has just one Workflow Step entity. If the Workflow is a multi-step workflow then the Workflow has a Workflow Step entity for each step. All Workflow step specific attributes like parameters, and metadata about execution environment are captured by the Workflow Step entity." . GHGA:abstract a owl:ObjectProperty, - linkml:SlotDefinition . + linkml:SlotDefinition ; + rdfs:label "abstract" ; + rdfs:range linkml:String ; + skos:definition "The study abstract that describes the goals. Can also hold abstract from a publication related to this study" . GHGA:accession a owl:ObjectProperty, linkml:SlotDefinition . @@ -550,17 +557,20 @@ GHGA:age a owl:ObjectProperty, linkml:SlotDefinition . GHGA:ancestry a owl:ObjectProperty, - linkml:SlotDefinition . - -GHGA:biological_replicates a owl:ObjectProperty, linkml:SlotDefinition ; - rdfs:label "biological replicates" ; + rdfs:label "ancestry" ; rdfs:range linkml:String ; - skos:definition "Number of independent samples (biological replicates)." . + skos:definition "A person's descent or lineage, from a person or from a population." . -GHGA:category a owl:ObjectProperty, +GHGA:biological_replicates a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:category a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "category" ; + rdfs:range linkml:String ; + skos:definition "The category for this file: Whole Genome Sequencing, Whole Exome Sequencing, etc." . + GHGA:cell_barcode_offset a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "cell barcode offset" ; @@ -580,7 +590,10 @@ GHGA:cell_barcode_size a owl:ObjectProperty, skos:definition "The size of the cell identifying barcode (E.g. \"16\")." . GHGA:checksum a owl:ObjectProperty, - linkml:SlotDefinition . + linkml:SlotDefinition ; + rdfs:label "checksum" ; + rdfs:range linkml:String ; + skos:definition "A computed value which depends on the contents of a block of data and which is transmitted or stored along with the data in order to detect corruption of the data. The receiving system recomputes the checksum based upon the received data and compares this value with the one sent with the data. If the two values are the same, the receiver has some confidence that the data was received correctly." . GHGA:creation_date a owl:ObjectProperty, linkml:SlotDefinition . @@ -592,13 +605,13 @@ GHGA:end_bias a owl:ObjectProperty, skos:definition "The end of the cDNA molecule that is preferentially sequenced, e.g. 3/5 prime tag or end, or the full-length transcript." . GHGA:ethnicity a owl:ObjectProperty, - linkml:SlotDefinition . - -GHGA:experimental_replicates a owl:ObjectProperty, linkml:SlotDefinition ; - rdfs:label "experimental replicates" ; + rdfs:label "ethnicity" ; rdfs:range linkml:String ; - skos:definition "Number of experiment replications." . + skos:definition "A social group characterized by a distinctive social and cultural tradition that is maintained from generation to generation." . + +GHGA:experimental_replicates a owl:ObjectProperty, + linkml:SlotDefinition . GHGA:family_name a owl:ObjectProperty, linkml:SlotDefinition ; @@ -607,28 +620,40 @@ GHGA:family_name a owl:ObjectProperty, skos:definition "Last name." . GHGA:file_index a owl:ObjectProperty, - linkml:SlotDefinition . + linkml:SlotDefinition ; + rdfs:label "file index" ; + rdfs:range linkml:String ; + skos:definition "The index for this file. Commonly for BAM/VCF files." . GHGA:flow_cell_id a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "flow cell id" ; rdfs:range linkml:String ; - skos:definition "Flow Cell ID (eg: Experiment ID_Cell 1_Lane_1)." . + skos:definition "Flow Cell ID (eg: Experiment ID_Cell 1_Lane_1). The barcode assigned to a flow cell used in nucleotide sequencing." . GHGA:flow_cell_type a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "flow cell type" ; rdfs:range linkml:String ; - skos:definition "Type of flow cell used (e.g. S4, S2 for NovaSeq; PromethION, Flongle for Nanopore)" . + skos:definition "Type of flow cell used (e.g. S4, S2 for NovaSeq; PromethION, Flongle for Nanopore). Aparatus in the fluidic subsystem where the sheath and sample meet. Can be one of several types; jet-in-air, quartz cuvette, or a hybrid of the two. The sample flows through the center of a fluid column of sheath fluid in the flow cell." . GHGA:format a owl:ObjectProperty, - linkml:SlotDefinition . + linkml:SlotDefinition ; + rdfs:label "format" ; + rdfs:range linkml:String ; + skos:definition "The format of the file: BAM, SAM, CRAM, BAI, etc." . GHGA:gender a owl:ObjectProperty, - linkml:SlotDefinition . + linkml:SlotDefinition ; + rdfs:label "gender" ; + rdfs:range linkml:String ; + skos:definition "Identification as male/masculine, female/feminine or something else, and association with a (social) role or set of behavioral and cultural traits." . GHGA:geographical_region a owl:ObjectProperty, - linkml:SlotDefinition . + linkml:SlotDefinition ; + rdfs:label "geographical region" ; + rdfs:range linkml:String ; + skos:definition "The geographical region where the Individual is located. Any demarcated area of the Earth; may be determined by both natural and human boundaries." . GHGA:given_name a owl:ObjectProperty, linkml:SlotDefinition ; @@ -685,13 +710,13 @@ GHGA:has_workflow_step a owl:ObjectProperty, linkml:SlotDefinition . GHGA:instrument_model a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "instrument model" ; - rdfs:range linkml:String ; - skos:definition "The name and model of the technology platform used to perform sequencing." . + linkml:SlotDefinition . GHGA:isolation a owl:ObjectProperty, - linkml:SlotDefinition . + linkml:SlotDefinition ; + rdfs:label "isolation" ; + rdfs:range linkml:String ; + skos:definition "Method or device employed for collecting/isolating a sample." . GHGA:key_type a owl:ObjectProperty, linkml:SlotDefinition . @@ -700,31 +725,19 @@ GHGA:lane_number a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "lane number" ; rdfs:range linkml:String ; - skos:definition "Number of lanes on used flow cell." . + skos:definition "he numerical identifier for the lane or machine unit where a sample was located during nucleotide sequencing." . GHGA:library_construction a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "library construction" ; - rdfs:range linkml:String ; - skos:definition "The name of a library construction approach being used. (eg: \"10X v2 sequencing\" or \"Smart-seq2\")" . + linkml:SlotDefinition . GHGA:library_construction_kit_manufacturer a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "library construction kit manufacturer" ; - rdfs:range linkml:String ; - skos:definition "Manufacturer of library construction kit" . + linkml:SlotDefinition . GHGA:library_construction_kit_retail_name a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "library construction kit retail name" ; - rdfs:range linkml:String ; - skos:definition "A unique identifier for the kit used to construct a genomic library. This may include the vendor name, kit name and kit version (e.g. Agilent sure select Human Exome V8, Twist RefSeq Exome, etc.)" . + linkml:SlotDefinition . GHGA:library_layout a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "library layout" ; - rdfs:range linkml:String ; - skos:definition "Describe whether the library was sequenced in single-end (forward or reverse) or paired-end mode" . + linkml:SlotDefinition . GHGA:library_level a owl:ObjectProperty, linkml:SlotDefinition ; @@ -733,28 +746,16 @@ GHGA:library_level a owl:ObjectProperty, skos:definition "Single Cell Sequencing or Bulk Sequencing" . GHGA:library_name a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "library name" ; - rdfs:range linkml:String ; - skos:definition "Library Name (e.g.: Sequencer layout_macromolecule)" . + linkml:SlotDefinition . GHGA:library_preparation a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "library preparation" ; - rdfs:range linkml:String ; - skos:definition "The general method for sequencing library construction (e.g. KAPA PCR-free)." . + linkml:SlotDefinition . GHGA:library_selection a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "library selection" ; - rdfs:range linkml:String ; - skos:definition "Library Selection method (e.g. random, PCA, cDNA, etc )" . + linkml:SlotDefinition . GHGA:library_type a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "library type" ; - rdfs:range linkml:String ; - skos:definition "Describe the level of omics analysis (eg: Metagenome, transcriptome, etc) " . + linkml:SlotDefinition . GHGA:main_contact a owl:ObjectProperty, linkml:SlotDefinition . @@ -784,25 +785,25 @@ GHGA:read_length a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "read length" ; rdfs:range linkml:String ; - skos:definition "Length of sequencing reads (eg: Long or short or actual number of the read length etc)." . + skos:definition "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" . GHGA:read_pair_number a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "read pair number" ; rdfs:range linkml:String ; - skos:definition "Denotes whether a submitted FASTQ file contains forward (R1) or reverse (R2) reads for paired-end sequencing." . + 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:reference_annotation a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "reference annotation" ; rdfs:range linkml:String ; - skos:definition "Reference genome(s) or annotation(s) used for prior analyses (eg: GRCh38.p13)." . + skos:definition "A published genetic sequence that is used as a reference sequence against which other sequences are compared. Reference genome(s) or annotation(s) used for prior analyses (eg: GRCh38.p13)." . GHGA:rnaseq_strandedness a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "rnaseq strandedness" ; rdfs:range linkml:String ; - skos:definition "The strandedness of the library, whether reads come from both strands of the cDNA or only from the first (antisense) or the second (sense) strand." . + skos:definition "The strandedness of the library, whether reads come from both strands of the cDNA or only from the first (antisense) or the second (sense) strand." . GHGA:role a owl:ObjectProperty, linkml:SlotDefinition . @@ -814,37 +815,43 @@ GHGA:sample_barcode_read a owl:ObjectProperty, skos:definition "The type of read that contains the sample barcode (eg: index1/index2/read1/read2)." . GHGA:sequencing_center a owl:ObjectProperty, + linkml:SlotDefinition . + +GHGA:sequencing_length a owl:ObjectProperty, linkml:SlotDefinition ; - rdfs:label "sequencing center" ; + rdfs:label "sequencing length" ; rdfs:range linkml:String ; - skos:definition "Center where sample was sequenced." . + skos:definition "Long or Short Read." . GHGA:sex a owl:ObjectProperty, linkml:SlotDefinition . GHGA:size a owl:ObjectProperty, - linkml:SlotDefinition . + linkml:SlotDefinition ; + rdfs:label "size" ; + rdfs:range linkml:String ; + skos:definition "The size of a file in bytes." . GHGA:storage a owl:ObjectProperty, - linkml:SlotDefinition . + linkml:SlotDefinition ; + rdfs:label "storage" ; + rdfs:range linkml:String ; + skos:definition "Methods by which sample is stored (e.g. frozen in liquid nitrogen)." . GHGA:target_coverage a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "target coverage" ; rdfs:range linkml:String ; - skos:definition "Mean coverage for whole genome sequencing, or mean target coverage for whole exome and targeted sequencing" . + skos:definition "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." . GHGA:target_regions a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "target regions" ; rdfs:range linkml:String ; - skos:definition "subset of genes or specific regions of the genome, which are most likely to be involved in the phenotype under study" . + skos:definition "Subset of genes or specific regions of the genome, which are most likely to be involved in the phenotype under study. " . GHGA:technical_replicates a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "technical replicates" ; - rdfs:range linkml:String ; - skos:definition "Number of replicate samples (technical replicates)." . + linkml:SlotDefinition . GHGA:telephone a owl:ObjectProperty, linkml:SlotDefinition . @@ -862,7 +869,7 @@ GHGA:umi_barcode_read a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "umi barcode read" ; rdfs:range linkml:String ; - skos:definition "The type of read that contains the UMI barcode (Eg: index1/index2/read1/read2)" . + skos:definition "The type of read that contains the UMI barcode (Eg: index1/index2/read1/read2)." . GHGA:umi_barcode_size a owl:ObjectProperty, linkml:SlotDefinition ; @@ -886,10 +893,13 @@ GHGA:vital_status_at_sampling a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "vital status at sampling" ; rdfs:range linkml:String ; - skos:definition "Vital status at the age of the sampling." . + skos:definition "Vital Status of an Individual at the point of sampling (eg:\"Alive\", \"Deceased\")." . GHGA:year_of_birth a owl:ObjectProperty, - linkml:SlotDefinition . + linkml:SlotDefinition ; + rdfs:label "year of birth" ; + rdfs:range linkml:String ; + skos:definition "The year in which the individual was born." . GHGA:Agent a owl:Class, linkml:ClassDefinition ; @@ -910,27 +920,27 @@ GHGA:Biospecimen a owl:Class, linkml:ClassDefinition ; rdfs:label "biospecimen" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom GHGA:Disease ; - owl:onProperty GHGA:has_disease ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onClass GHGA:Individual ; + owl:onProperty GHGA:has_individual ], + [ 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:name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:AnatomicalEntity ; - owl:onProperty GHGA:has_anatomical_entity ], + owl:onClass linkml:String ; + owl:onProperty GHGA:description ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:PhenotypicFeature ; - owl:onProperty GHGA:has_phenotypic_feature ], + owl:allValuesFrom GHGA:Disease ; + owl:onProperty GHGA:has_disease ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Individual ; - owl:onProperty GHGA:has_individual ], + owl:onClass GHGA:AnatomicalEntity ; + owl:onProperty GHGA:has_anatomical_entity ], 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." ; skos:exactMatch <http://purl.obolibrary.org/obo/OBI_0100051> . @@ -941,11 +951,11 @@ GHGA:DataUseCondition a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:permission ], + owl:onProperty GHGA:modifier ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:modifier ] ; + owl:onProperty GHGA:permission ] ; skos:definition "Data Use Condition represents the use conditions associated with a Dataset. A permission field can have one or more terms that collectively defines the data use condition. The modifier determines the interpretation of the use permission(s)." . GHGA:DiseaseOrPhenotypicFeature a owl:Class, @@ -954,11 +964,11 @@ GHGA:DiseaseOrPhenotypicFeature a owl:Class, rdfs:subClassOf [ 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 ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:name ], GHGA:BiologicalQuality ; 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 . @@ -967,6 +977,18 @@ GHGA:Investigation a owl:Class, linkml:ClassDefinition ; rdfs:label "investigation" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Publication ; + owl:onProperty GHGA:has_publication ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:Boolean ; + owl:onProperty GHGA:deprecated ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass <http://UNKNOWN.org/release_status_enum> ; + owl:onProperty GHGA:release_status ], + [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:release_date ], @@ -978,26 +1000,14 @@ GHGA:Investigation a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:title ], - [ 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 <http://UNKNOWN.org/release_status_enum> ; - owl:onProperty GHGA:release_status ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:Boolean ; - owl:onProperty GHGA:deprecated ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Publication ; - owl:onProperty GHGA:has_publication ], + owl:onClass GHGA:NamedThing ; + owl:onProperty GHGA:replaced_by ], GHGA:DeprecationMixin, GHGA:PlannedProcess, GHGA:ReleaseStatusMixin ; @@ -1010,16 +1020,16 @@ 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:onProperty GHGA:email ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:telephone ; + owl:onProperty GHGA:organization ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:email ; + owl:onProperty GHGA:telephone ; owl:qualifiedCardinality 1 ], GHGA:Person ; skos:definition "Member of an Organization or a Committee." . @@ -1040,9 +1050,6 @@ GHGA:Project a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:allValuesFrom GHGA:Publication ; owl:onProperty GHGA:has_publication ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Experiment ; - owl:onProperty GHGA:has_study ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:title ; @@ -1054,6 +1061,9 @@ GHGA:Project a owl:Class, [ a owl:Restriction ; owl:allValuesFrom GHGA:Attribute ; owl:onProperty GHGA:has_attribute ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Experiment ; + owl:onProperty GHGA:has_study ], GHGA:ResearchActivity ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C47885> ; skos:definition "Any specifically defined piece of work that is undertaken or attempted to meet a single requirement." . @@ -1062,13 +1072,13 @@ GHGA:SubmissionStatusMixin a owl:Class, linkml:ClassDefinition ; rdfs:label "submission status mixin" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass <http://UNKNOWN.org/submission_status_enum> ; - owl:onProperty GHGA:submission_status ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:submission_date ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass <http://UNKNOWN.org/submission_status_enum> ; + owl:onProperty GHGA:submission_status ], linkml:mixin ; skos:definition "A mixin that keeps track of the submission status." . @@ -1078,11 +1088,11 @@ GHGA:WorkflowParameter a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:value ], + owl:onProperty GHGA:key ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:key ] ; + owl:onProperty GHGA:value ] ; skos:definition "A key/value pair that represents a parameter used in a Workflow Step." . GHGA:affiliation a owl:ObjectProperty, @@ -1125,6 +1135,10 @@ GHGA:DeprecationMixin a owl:Class, linkml:ClassDefinition ; rdfs:label "deprecation 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 ], @@ -1132,10 +1146,6 @@ GHGA:DeprecationMixin a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:Boolean ; owl:onProperty GHGA:deprecated ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:NamedThing ; - owl:onProperty GHGA:replaced_by ], linkml:mixin ; skos:definition "A mixin that keeps track of the deprecation status." . @@ -1145,7 +1155,7 @@ GHGA:Person a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:given_name ], + owl:onProperty GHGA:additional_name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -1153,7 +1163,7 @@ GHGA:Person a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:additional_name ], + owl:onProperty GHGA:given_name ], GHGA:NamedThing ; skos:definition "A member of the species Homo sapiens." ; skos:exactMatch <http://purl.obolibrary.org/obo/NCIT_C25190>, @@ -1164,20 +1174,27 @@ GHGA:Protocol a owl:Class, linkml:ClassDefinition ; rdfs:label "protocol" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:name ], + [ a owl:Restriction ; owl:allValuesFrom GHGA:Attribute ; owl:onProperty GHGA:has_attribute ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty GHGA:xref ], [ 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 ; - owl:onProperty GHGA:url ], + owl:onProperty GHGA:type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:url ], GHGA:InformationContentEntity ; skos:altLabel "experiment protocol", "library protocol" ; @@ -1189,13 +1206,13 @@ GHGA:ReleaseStatusMixin a owl:Class, linkml:ClassDefinition ; rdfs:label "release status mixin" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass <http://UNKNOWN.org/release_status_enum> ; - owl:onProperty GHGA:release_status ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:release_date ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass <http://UNKNOWN.org/release_status_enum> ; + owl:onProperty GHGA:release_status ], linkml:mixin ; skos:definition "A mixin that keeps track of the release status." . @@ -1203,40 +1220,40 @@ GHGA:Sample a owl:Class, linkml:ClassDefinition ; rdfs:label "sample" ; rdfs:subClassOf [ a owl:Restriction ; - owl:onClass GHGA:Individual ; - owl:onProperty GHGA:has_individual ; - 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 <http://UNKNOWN.org/case_control_enum> ; - owl:onProperty GHGA:type ], + owl:onClass GHGA:Biospecimen ; + owl:onProperty GHGA:has_biospecimen ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty GHGA:xref ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ; + owl:onProperty GHGA:description ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Biospecimen ; - owl:onProperty GHGA:has_biospecimen ], + owl:onClass linkml:String ; + owl:onProperty GHGA:vital_status_at_sampling ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:isolation ], + owl:onClass <http://UNKNOWN.org/case_control_enum> ; + owl:onProperty GHGA:type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty GHGA:xref ], + owl:onProperty GHGA:isolation ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:vital_status_at_sampling ], + owl:onProperty GHGA:name ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:onClass GHGA:Individual ; + owl:onProperty GHGA:has_individual ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:tissue ; @@ -1294,16 +1311,10 @@ GHGA:replaced_by a owl:ObjectProperty, rdfs:range GHGA:NamedThing ; skos:definition "The entity which replaces a deprecated entity." . -GHGA:xref a owl:ObjectProperty, - linkml:SlotDefinition . - GHGA:Analysis a owl:Class, linkml:ClassDefinition ; rdfs:label "analysis" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_output ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Workflow ; owl:onProperty GHGA:has_workflow ], @@ -1311,12 +1322,15 @@ GHGA:Analysis a owl:Class, owl:allValuesFrom GHGA:File ; owl:onProperty GHGA:has_input ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:AnalysisProcess ; - owl:onProperty GHGA:has_analysis_process ], + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_output ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Study ; owl:onProperty GHGA:has_study ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:AnalysisProcess ; + owl:onProperty GHGA:has_analysis_process ], GHGA:DataTransformation ; skos:altLabel "data analysis" ; skos:definition "An Analysis is a data transformation that transforms input data to output data. The workflow used to achieve this transformation and the individual steps are also captured." . @@ -1326,28 +1340,36 @@ GHGA:Dataset a owl:Class, rdfs:label "dataset" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:NamedThing ; - owl:onProperty GHGA:replaced_by ], + owl:onClass linkml:String ; + owl:onProperty GHGA:deprecation_date ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:release_date ], + owl:onProperty GHGA:type ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:deprecation_date ], + owl:onProperty GHGA:description ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:Boolean ; owl:onProperty GHGA:deprecated ], [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:type ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:release_date ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:title ; owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass <http://UNKNOWN.org/release_status_enum> ; + owl:onProperty GHGA:release_status ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:NamedThing ; + owl:onProperty GHGA:replaced_by ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Publication ; owl:onProperty GHGA:has_publication ], @@ -1357,14 +1379,6 @@ GHGA:Dataset a owl:Class, owl:onProperty GHGA:has_file ] [ a owl:Restriction ; owl:onProperty GHGA:has_file ; owl:someValuesFrom GHGA:File ] ) ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass <http://UNKNOWN.org/release_status_enum> ; - owl:onProperty GHGA:release_status ], - [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:description ; - owl:qualifiedCardinality 1 ], GHGA:DeprecationMixin, GHGA:InformationContentEntity, GHGA:ReleaseStatusMixin ; @@ -1374,16 +1388,15 @@ GHGA:Dataset a owl:Class, GHGA:has_file a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:xref a owl:ObjectProperty, + linkml:SlotDefinition . + GHGA:DataAccessPolicy a owl:Class, linkml:ClassDefinition ; rdfs:label "data access policy" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ], - [ a owl:Restriction ; - owl:onClass GHGA:DataAccessCommittee ; - owl:onProperty GHGA:has_data_access_committee ; + owl:onProperty GHGA:description ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; @@ -1394,11 +1407,15 @@ GHGA:DataAccessPolicy a owl:Class, owl:onProperty GHGA:has_data_use_condition ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ; + owl:onProperty GHGA:policy_text ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:policy_text ; + owl:onProperty GHGA:name ], + [ a owl:Restriction ; + owl:onClass GHGA:DataAccessCommittee ; + owl:onProperty GHGA:has_data_access_committee ; owl:qualifiedCardinality 1 ], GHGA:InformationContentEntity ; skos:definition "A Data Access Policy specifies under which circumstances, legal or otherwise, a user can have access to one or more Datasets belonging to one or more Studies." . @@ -1407,20 +1424,21 @@ GHGA:Experiment a owl:Class, linkml:ClassDefinition ; rdfs:label "experiment" ; rdfs:subClassOf [ 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:technical_replicates ], + owl:onProperty GHGA:biological_replicates ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Technology ; - owl:onProperty GHGA:has_technology ], + owl:onClass GHGA:Sample ; + owl:onProperty GHGA:has_sample ; + owl:qualifiedCardinality 1 ], [ 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:technical_replicates ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -1429,21 +1447,20 @@ GHGA:Experiment a owl:Class, owl:onClass GHGA:Study ; owl:onProperty GHGA:has_study ; owl:qualifiedCardinality 1 ], + [ 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:biological_replicates ], + owl:onClass GHGA:Technology ; + owl:onProperty GHGA:has_technology ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_file ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:title ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:onClass GHGA:Sample ; - owl:onProperty GHGA:has_sample ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:ExperimentProcess ; - owl:onProperty GHGA:has_experiment_process ], GHGA:Investigation ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C42790> ; 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." ; @@ -1469,16 +1486,16 @@ GHGA:Publication a owl:Class, linkml:ClassDefinition ; rdfs:label "publication" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:title ], - [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty GHGA:xref ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:abstract ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:title ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:id ; @@ -1492,23 +1509,19 @@ GHGA:has_data_access_policy a owl:ObjectProperty, GHGA:has_publication a owl:ObjectProperty, linkml:SlotDefinition . -GHGA:type a owl:ObjectProperty, - linkml:SlotDefinition . - GHGA:has_attribute a owl:ObjectProperty, linkml:SlotDefinition . GHGA:has_experiment a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:type a owl:ObjectProperty, + linkml:SlotDefinition . + GHGA:Attribute a owl:Class, linkml:ClassDefinition ; rdfs:label "attribute" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:value_type ], - [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:value ; owl:qualifiedCardinality 1 ], @@ -1519,7 +1532,11 @@ GHGA:Attribute a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:key_type ] ; + owl:onProperty GHGA:key_type ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:value_type ] ; skos:definition "A key/value pair that further characterizes an entity." ; skos:exactMatch SIO:000614 . @@ -1527,19 +1544,26 @@ GHGA:Study a owl:Class, linkml:ClassDefinition ; rdfs:label "study" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom GHGA:Experiment ; - owl:onProperty GHGA:has_experiment ], - [ a owl:Restriction ; - owl:onClass <http://UNKNOWN.org/study_type_enum> ; - owl:onProperty GHGA:type ; + owl:onClass linkml:String ; + owl:onProperty GHGA:description ; owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Publication ; + owl:onProperty GHGA:has_publication ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Attribute ; owl:onProperty GHGA:has_attribute ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Project ; - owl:onProperty GHGA:has_project ], + owl:onClass linkml:String ; + owl:onProperty GHGA:title ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:onClass <http://UNKNOWN.org/study_type_enum> ; + owl:onProperty GHGA:type ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Experiment ; + owl:onProperty GHGA:has_experiment ], [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; owl:allValuesFrom linkml:String ; @@ -1550,16 +1574,9 @@ GHGA:Study a owl:Class, owl:allValuesFrom GHGA:Analysis ; owl:onProperty GHGA:has_analysis ], [ 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:title ; - owl:qualifiedCardinality 1 ], + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Project ; + owl:onProperty GHGA:has_project ], GHGA:Investigation ; 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." . @@ -1579,11 +1596,7 @@ GHGA:File a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:format ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:checksum ], + owl:onProperty GHGA:category ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -1591,19 +1604,23 @@ GHGA:File a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:file_index ], + owl:onProperty GHGA:format ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:category ], + owl:onProperty GHGA:file_index ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ], + owl:onProperty GHGA:checksum ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass <http://UNKNOWN.org/file_type_enum> ; owl:onProperty GHGA:type ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:name ; + owl:qualifiedCardinality 1 ], GHGA:InformationContentEntity ; skos:altLabel "file object" . @@ -1611,43 +1628,43 @@ GHGA:Individual a owl:Class, linkml:ClassDefinition ; rdfs:label "individual" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom GHGA:Individual ; - owl:onProperty GHGA:has_children ], + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:year_of_birth ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Individual ; - owl:onProperty GHGA:has_parent ], - [ a owl:Restriction ; - owl:onClass <http://UNKNOWN.org/vital_status_enum> ; - owl:onProperty GHGA:vital_status ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:has_children ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:ancestry ], + owl:onProperty GHGA:gender ], [ a owl:Restriction ; owl:onClass <http://UNKNOWN.org/biological_sex_enum> ; owl:onProperty GHGA:sex ; owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:ethnicity ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:geographical_region ], [ a owl:Restriction ; - owl:onClass linkml:Integer ; - owl:onProperty GHGA:age ; + owl:onClass <http://UNKNOWN.org/vital_status_enum> ; + owl:onProperty GHGA:vital_status ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:ethnicity ], + owl:allValuesFrom GHGA:Individual ; + owl:onProperty GHGA:has_parent ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:year_of_birth ], + owl:onClass linkml:Integer ; + owl:onProperty GHGA:age ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:gender ], + owl:onProperty GHGA:ancestry ], GHGA:Person ; skos:altLabel "patient", "subject" ; @@ -1663,31 +1680,31 @@ GHGA:NamedThing a owl:Class, linkml:ClassDefinition ; rdfs:label "named thing" ; rdfs:subClassOf [ 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:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:creation_date ], + owl:onProperty GHGA:accession ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:update_date ], + owl:onProperty GHGA:type ], + [ 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:type ], + owl:onProperty GHGA:creation_date ], + [ 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:accession ] ; + owl:onProperty GHGA:update_date ] ; skos:altLabel "entity", "named entity", "object" ; diff --git a/artifacts/python/ghga.py b/artifacts/python/ghga.py index c6a0fb5c..1e859b51 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: 2021-11-23T14:05:06 +# Generation date: 2021-11-24T12:26:25 # Schema: GHGA-Metadata-Schema # # id: https://w3id.org/GHGA-Metadata-Schema @@ -34,6 +34,7 @@ CLO = CurieNamespace('CLO', 'http://purl.obolibrary.org/obo/CLO_') COB = CurieNamespace('COB', 'http://purl.obolibrary.org/obo/COB_') EFO = CurieNamespace('EFO', 'http://www.ebi.ac.uk/efo/EFO_') +GENEPIO = CurieNamespace('GENEPIO', 'http://purl.obolibrary.org/obo/GENEPIO_') GHGA = CurieNamespace('GHGA', 'https://w3id.org/GHGA/') HP = CurieNamespace('HP', 'http://purl.obolibrary.org/obo/HP_') IAO = CurieNamespace('IAO', 'http://purl.obolibrary.org/obo/IAO_') @@ -42,6 +43,7 @@ OBI = CurieNamespace('OBI', 'http://purl.obolibrary.org/obo/OBI_') SEPIO = CurieNamespace('SEPIO', 'http://purl.obolibrary.org/obo/SEPIO_') SIO = CurieNamespace('SIO', 'http://semanticscience.org/resource/SIO_') +SNOMEDCT = CurieNamespace('SNOMEDCT', 'http://purl.bioontology.org/ontology/SNOMEDCT/') UBERON = CurieNamespace('UBERON', 'http://purl.obolibrary.org/obo/UBERON_') BIOLINK = CurieNamespace('biolink', 'https://w3id.org/biolink/vocab/') LINKML = CurieNamespace('linkml', 'https://w3id.org/linkml/') @@ -1071,7 +1073,7 @@ class Member(Person): id: Union[str, MemberId] = None email: str = None telephone: str = None - organization: Optional[str] = None + organization: str = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -1089,7 +1091,9 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.telephone, str): self.telephone = str(self.telephone) - if self.organization is not None and not isinstance(self.organization, str): + if self._is_empty(self.organization): + self.MissingRequiredField("organization") + if not isinstance(self.organization, str): self.organization = str(self.organization) super().__post_init__(**kwargs) @@ -1181,9 +1185,9 @@ class Sample(MaterialEntity): id: Union[str, SampleId] = None name: str = None + description: str = None tissue: str = None has_individual: Union[dict, "Individual"] = None - description: Optional[str] = None vital_status_at_sampling: Optional[str] = None isolation: Optional[str] = None storage: Optional[str] = None @@ -1202,6 +1206,11 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.name, str): self.name = str(self.name) + if self._is_empty(self.description): + self.MissingRequiredField("description") + if not isinstance(self.description, str): + self.description = str(self.description) + if self._is_empty(self.tissue): self.MissingRequiredField("tissue") if not isinstance(self.tissue, str): @@ -1212,9 +1221,6 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.has_individual, Individual): self.has_individual = Individual(**as_dict(self.has_individual)) - if self.description is not None and not isinstance(self.description, str): - self.description = str(self.description) - if self.vital_status_at_sampling is not None and not isinstance(self.vital_status_at_sampling, str): self.vital_status_at_sampling = str(self.vital_status_at_sampling) @@ -1516,6 +1522,8 @@ class Protocol(InformationContentEntity): name: Optional[str] = None description: Optional[str] = None url: Optional[str] = None + type: Optional[str] = None + xref: Optional[Union[str, List[str]]] = empty_list() has_attribute: Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]] = empty_list() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): @@ -1533,6 +1541,13 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.url is not None and not isinstance(self.url, str): self.url = str(self.url) + if self.type is not None and not isinstance(self.type, str): + self.type = str(self.type) + + if not isinstance(self.xref, list): + self.xref = [self.xref] if self.xref is not None else [] + self.xref = [v if isinstance(v, str) else str(v) for v in self.xref] + self._normalize_inlined_as_list(slot_name="has_attribute", slot_type=Attribute, key_name="key", keyed=False) super().__post_init__(**kwargs) @@ -1551,17 +1566,17 @@ class LibraryPreparationProtocol(Protocol): class_model_uri: ClassVar[URIRef] = GHGA.LibraryPreparationProtocol id: Union[str, LibraryPreparationProtocolId] = None + library_name: str = None + library_layout: str = None + library_type: str = None + library_selection: str = None + library_construction: str = None + library_preparation: str = None + library_construction_kit_retail_name: str = None + library_construction_kit_manufacturer: str = None name: str = None description: str = None - library_name: Optional[str] = None - library_layout: Optional[str] = None - library_type: Optional[str] = None - library_selection: Optional[str] = None - library_construction: Optional[str] = None - library_preparation: Optional[str] = None library_level: Optional[str] = None - library_construction_kit_retail_name: Optional[str] = None - library_construction_kit_manufacturer: Optional[str] = None primer: Optional[str] = None end_bias: Optional[str] = None target_regions: Optional[str] = None @@ -1574,43 +1589,59 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.id, LibraryPreparationProtocolId): self.id = LibraryPreparationProtocolId(self.id) - if self._is_empty(self.name): - self.MissingRequiredField("name") - if not isinstance(self.name, str): - self.name = str(self.name) - - if self._is_empty(self.description): - self.MissingRequiredField("description") - if not isinstance(self.description, str): - self.description = str(self.description) - - if self.library_name is not None and not isinstance(self.library_name, str): + if self._is_empty(self.library_name): + self.MissingRequiredField("library_name") + if not isinstance(self.library_name, str): self.library_name = str(self.library_name) - if self.library_layout is not None and not isinstance(self.library_layout, str): + if self._is_empty(self.library_layout): + self.MissingRequiredField("library_layout") + if not isinstance(self.library_layout, str): self.library_layout = str(self.library_layout) - if self.library_type is not None and not isinstance(self.library_type, str): + if self._is_empty(self.library_type): + self.MissingRequiredField("library_type") + if not isinstance(self.library_type, str): self.library_type = str(self.library_type) - if self.library_selection is not None and not isinstance(self.library_selection, str): + if self._is_empty(self.library_selection): + self.MissingRequiredField("library_selection") + if not isinstance(self.library_selection, str): self.library_selection = str(self.library_selection) - if self.library_construction is not None and not isinstance(self.library_construction, str): + if self._is_empty(self.library_construction): + self.MissingRequiredField("library_construction") + if not isinstance(self.library_construction, str): self.library_construction = str(self.library_construction) - if self.library_preparation is not None and not isinstance(self.library_preparation, str): + if self._is_empty(self.library_preparation): + self.MissingRequiredField("library_preparation") + if not isinstance(self.library_preparation, str): self.library_preparation = str(self.library_preparation) - if self.library_level is not None and not isinstance(self.library_level, str): - self.library_level = str(self.library_level) - - if self.library_construction_kit_retail_name is not None and not isinstance(self.library_construction_kit_retail_name, str): + if self._is_empty(self.library_construction_kit_retail_name): + self.MissingRequiredField("library_construction_kit_retail_name") + if not isinstance(self.library_construction_kit_retail_name, str): self.library_construction_kit_retail_name = str(self.library_construction_kit_retail_name) - if self.library_construction_kit_manufacturer is not None and not isinstance(self.library_construction_kit_manufacturer, str): + if self._is_empty(self.library_construction_kit_manufacturer): + self.MissingRequiredField("library_construction_kit_manufacturer") + if not isinstance(self.library_construction_kit_manufacturer, str): self.library_construction_kit_manufacturer = str(self.library_construction_kit_manufacturer) + if self._is_empty(self.name): + self.MissingRequiredField("name") + if not isinstance(self.name, str): + self.name = str(self.name) + + if self._is_empty(self.description): + self.MissingRequiredField("description") + if not isinstance(self.description, str): + self.description = str(self.description) + + if self.library_level is not None and not isinstance(self.library_level, str): + self.library_level = str(self.library_level) + if self.primer is not None and not isinstance(self.primer, str): self.primer = str(self.primer) @@ -1641,10 +1672,11 @@ class SequencingProtocol(Protocol): class_model_uri: ClassVar[URIRef] = GHGA.SequencingProtocol id: Union[str, SequencingProtocolId] = None - sequencing_center: Optional[str] = None - instrument_model: Optional[str] = None + sequencing_center: str = None + instrument_model: str = None read_length: Optional[str] = None read_pair_number: Optional[str] = None + sequencing_length: Optional[str] = None target_coverage: Optional[str] = None reference_annotation: Optional[str] = None lane_number: Optional[str] = None @@ -1667,10 +1699,14 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.id, SequencingProtocolId): self.id = SequencingProtocolId(self.id) - if self.sequencing_center is not None and not isinstance(self.sequencing_center, str): + if self._is_empty(self.sequencing_center): + self.MissingRequiredField("sequencing_center") + if not isinstance(self.sequencing_center, str): self.sequencing_center = str(self.sequencing_center) - if self.instrument_model is not None and not isinstance(self.instrument_model, str): + if self._is_empty(self.instrument_model): + self.MissingRequiredField("instrument_model") + if not isinstance(self.instrument_model, str): self.instrument_model = str(self.instrument_model) if self.read_length is not None and not isinstance(self.read_length, str): @@ -1679,6 +1715,9 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.read_pair_number is not None and not isinstance(self.read_pair_number, str): self.read_pair_number = str(self.read_pair_number) + if self.sequencing_length is not None and not isinstance(self.sequencing_length, str): + self.sequencing_length = str(self.sequencing_length) + if self.target_coverage is not None and not isinstance(self.target_coverage, str): self.target_coverage = str(self.target_coverage) @@ -1817,7 +1856,7 @@ class File(InformationContentEntity): class_model_uri: ClassVar[URIRef] = GHGA.File id: Union[str, FileId] = None - name: Optional[str] = None + name: str = None format: Optional[str] = None size: Optional[str] = None checksum: Optional[str] = None @@ -1831,7 +1870,9 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.id, FileId): self.id = FileId(self.id) - if self.name is not None and not isinstance(self.name, str): + if self._is_empty(self.name): + self.MissingRequiredField("name") + if not isinstance(self.name, str): self.name = str(self.name) if self.format is not None and not isinstance(self.format, str): @@ -2364,6 +2405,8 @@ class VitalStatusEnum(EnumDefinitionImpl): description="Showing characteristics of life; displaying signs of life.") deceased = PermissibleValue(text="deceased", description="The cessation of life.") + unknown = PermissibleValue(text="unknown", + description="Vital status is unknown.") _defn = EnumDefinition( name="VitalStatusEnum", @@ -2647,7 +2690,7 @@ class slots: model_uri=GHGA.year_of_birth, domain=None, range=Optional[str]) slots.vital_status = Slot(uri=GHGA.vital_status, name="vital status", curie=GHGA.curie('vital_status'), - model_uri=GHGA.vital_status, domain=None, range=Optional[str]) + model_uri=GHGA.vital_status, domain=None, range=Optional[Union[str, "VitalStatusEnum"]]) slots.ethnicity = Slot(uri=GHGA.ethnicity, name="ethnicity", curie=GHGA.curie('ethnicity'), model_uri=GHGA.ethnicity, domain=None, range=Optional[str]) @@ -2760,6 +2803,9 @@ class slots: slots.read_length = Slot(uri=GHGA.read_length, name="read length", curie=GHGA.curie('read_length'), model_uri=GHGA.read_length, domain=None, range=Optional[str]) +slots.sequencing_length = Slot(uri=GHGA.sequencing_length, name="sequencing length", curie=GHGA.curie('sequencing_length'), + model_uri=GHGA.sequencing_length, domain=None, range=Optional[str]) + slots.read_pair_number = Slot(uri=GHGA.read_pair_number, name="read pair number", curie=GHGA.curie('read_pair_number'), model_uri=GHGA.read_pair_number, domain=None, range=Optional[str]) @@ -2904,6 +2950,15 @@ class slots: slots.experiment_description = Slot(uri=GHGA.description, name="experiment_description", curie=GHGA.curie('description'), model_uri=GHGA.experiment_description, domain=Experiment, range=str) +slots.experiment_biological_replicates = Slot(uri=GHGA.biological_replicates, name="experiment_biological replicates", curie=GHGA.curie('biological_replicates'), + model_uri=GHGA.experiment_biological_replicates, domain=Experiment, range=Optional[str]) + +slots.experiment_technical_replicates = Slot(uri=GHGA.technical_replicates, name="experiment_technical replicates", curie=GHGA.curie('technical_replicates'), + model_uri=GHGA.experiment_technical_replicates, domain=Experiment, range=Optional[str]) + +slots.experiment_experimental_replicates = Slot(uri=GHGA.experimental_replicates, name="experiment_experimental replicates", curie=GHGA.curie('experimental_replicates'), + model_uri=GHGA.experiment_experimental_replicates, domain=Experiment, range=Optional[str]) + slots.experiment_has_study = Slot(uri=GHGA.has_study, name="experiment_has study", curie=GHGA.curie('has_study'), model_uri=GHGA.experiment_has_study, domain=Experiment, range=Union[dict, Study]) @@ -2937,12 +2992,18 @@ class slots: slots.protocol_name = Slot(uri=GHGA.name, name="protocol_name", curie=GHGA.curie('name'), model_uri=GHGA.protocol_name, domain=Protocol, range=Optional[str]) +slots.protocol_type = Slot(uri=GHGA.type, name="protocol_type", curie=GHGA.curie('type'), + model_uri=GHGA.protocol_type, domain=Protocol, range=Optional[str]) + slots.protocol_description = Slot(uri=GHGA.description, name="protocol_description", curie=GHGA.curie('description'), model_uri=GHGA.protocol_description, domain=Protocol, range=Optional[str]) slots.protocol_url = Slot(uri=GHGA.url, name="protocol_url", curie=GHGA.curie('url'), model_uri=GHGA.protocol_url, domain=Protocol, range=Optional[str]) +slots.protocol_xref = Slot(uri=GHGA.xref, name="protocol_xref", curie=GHGA.curie('xref'), + model_uri=GHGA.protocol_xref, domain=Protocol, range=Optional[Union[str, List[str]]]) + slots.protocol_has_attribute = Slot(uri=GHGA.has_attribute, name="protocol_has attribute", curie=GHGA.curie('has_attribute'), model_uri=GHGA.protocol_has_attribute, domain=Protocol, range=Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]]) @@ -2952,9 +3013,39 @@ class slots: slots.library_preparation_protocol_description = Slot(uri=GHGA.description, name="library preparation protocol_description", curie=GHGA.curie('description'), model_uri=GHGA.library_preparation_protocol_description, domain=LibraryPreparationProtocol, range=str) +slots.library_preparation_protocol_library_name = Slot(uri=GHGA.library_name, name="library preparation protocol_library name", curie=GHGA.curie('library_name'), + model_uri=GHGA.library_preparation_protocol_library_name, domain=LibraryPreparationProtocol, range=str) + +slots.library_preparation_protocol_library_layout = Slot(uri=GHGA.library_layout, name="library preparation protocol_library layout", curie=GHGA.curie('library_layout'), + model_uri=GHGA.library_preparation_protocol_library_layout, domain=LibraryPreparationProtocol, range=str) + +slots.library_preparation_protocol_library_type = Slot(uri=GHGA.library_type, name="library preparation protocol_library type", curie=GHGA.curie('library_type'), + model_uri=GHGA.library_preparation_protocol_library_type, domain=LibraryPreparationProtocol, range=str) + +slots.library_preparation_protocol_library_selection = Slot(uri=GHGA.library_selection, name="library preparation protocol_library selection", curie=GHGA.curie('library_selection'), + model_uri=GHGA.library_preparation_protocol_library_selection, domain=LibraryPreparationProtocol, range=str) + +slots.library_preparation_protocol_library_construction = Slot(uri=GHGA.library_construction, name="library preparation protocol_library construction", curie=GHGA.curie('library_construction'), + model_uri=GHGA.library_preparation_protocol_library_construction, domain=LibraryPreparationProtocol, range=str) + +slots.library_preparation_protocol_library_preparation = Slot(uri=GHGA.library_preparation, name="library preparation protocol_library preparation", curie=GHGA.curie('library_preparation'), + model_uri=GHGA.library_preparation_protocol_library_preparation, domain=LibraryPreparationProtocol, range=str) + +slots.library_preparation_protocol_library_construction_kit_retail_name = Slot(uri=GHGA.library_construction_kit_retail_name, name="library preparation protocol_library construction kit retail name", curie=GHGA.curie('library_construction_kit_retail_name'), + model_uri=GHGA.library_preparation_protocol_library_construction_kit_retail_name, domain=LibraryPreparationProtocol, range=str) + +slots.library_preparation_protocol_library_construction_kit_manufacturer = Slot(uri=GHGA.library_construction_kit_manufacturer, name="library preparation protocol_library construction kit manufacturer", curie=GHGA.curie('library_construction_kit_manufacturer'), + model_uri=GHGA.library_preparation_protocol_library_construction_kit_manufacturer, domain=LibraryPreparationProtocol, range=str) + slots.library_preparation_protocol_has_attribute = Slot(uri=GHGA.has_attribute, name="library preparation protocol_has attribute", curie=GHGA.curie('has_attribute'), model_uri=GHGA.library_preparation_protocol_has_attribute, domain=LibraryPreparationProtocol, range=Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]]) +slots.sequencing_protocol_sequencing_center = Slot(uri=GHGA.sequencing_center, name="sequencing protocol_sequencing center", curie=GHGA.curie('sequencing_center'), + model_uri=GHGA.sequencing_protocol_sequencing_center, domain=SequencingProtocol, range=str) + +slots.sequencing_protocol_instrument_model = Slot(uri=GHGA.instrument_model, name="sequencing protocol_instrument model", curie=GHGA.curie('instrument_model'), + model_uri=GHGA.sequencing_protocol_instrument_model, domain=SequencingProtocol, range=str) + slots.sequencing_protocol_name = Slot(uri=GHGA.name, name="sequencing protocol_name", curie=GHGA.curie('name'), model_uri=GHGA.sequencing_protocol_name, domain=SequencingProtocol, range=Optional[str]) @@ -2992,17 +3083,11 @@ class slots: model_uri=GHGA.sample_type, domain=Sample, range=Optional[Union[str, "CaseControlEnum"]]) slots.sample_description = Slot(uri=GHGA.description, name="sample_description", curie=GHGA.curie('description'), - model_uri=GHGA.sample_description, domain=Sample, range=Optional[str]) + model_uri=GHGA.sample_description, domain=Sample, range=str) slots.sample_tissue = Slot(uri=GHGA.tissue, name="sample_tissue", curie=GHGA.curie('tissue'), model_uri=GHGA.sample_tissue, domain=Sample, range=str) -slots.sample_isolation = Slot(uri=GHGA.isolation, name="sample_isolation", curie=GHGA.curie('isolation'), - model_uri=GHGA.sample_isolation, domain=Sample, range=Optional[str]) - -slots.sample_storage = Slot(uri=GHGA.storage, name="sample_storage", curie=GHGA.curie('storage'), - model_uri=GHGA.sample_storage, domain=Sample, range=Optional[str]) - slots.sample_has_individual = Slot(uri=GHGA.has_individual, name="sample_has individual", curie=GHGA.curie('has_individual'), model_uri=GHGA.sample_has_individual, domain=Sample, range=Union[dict, "Individual"]) @@ -3012,30 +3097,15 @@ class slots: slots.sample_has_biospecimen = Slot(uri=GHGA.has_biospecimen, name="sample_has biospecimen", curie=GHGA.curie('has_biospecimen'), model_uri=GHGA.sample_has_biospecimen, domain=Sample, range=Optional[Union[dict, Biospecimen]]) -slots.individual_gender = Slot(uri=GHGA.gender, name="individual_gender", curie=GHGA.curie('gender'), - model_uri=GHGA.individual_gender, domain=Individual, range=Optional[str]) - slots.individual_sex = Slot(uri=GHGA.sex, name="individual_sex", curie=GHGA.curie('sex'), model_uri=GHGA.individual_sex, domain=Individual, range=Union[str, "BiologicalSexEnum"]) slots.individual_age = Slot(uri=GHGA.age, name="individual_age", curie=GHGA.curie('age'), model_uri=GHGA.individual_age, domain=Individual, range=int) -slots.individual_year_of_birth = Slot(uri=GHGA.year_of_birth, name="individual_year of birth", curie=GHGA.curie('year_of_birth'), - model_uri=GHGA.individual_year_of_birth, domain=Individual, range=Optional[str]) - slots.individual_vital_status = Slot(uri=GHGA.vital_status, name="individual_vital status", curie=GHGA.curie('vital_status'), model_uri=GHGA.individual_vital_status, domain=Individual, range=Union[str, "VitalStatusEnum"]) -slots.individual_ethnicity = Slot(uri=GHGA.ethnicity, name="individual_ethnicity", curie=GHGA.curie('ethnicity'), - model_uri=GHGA.individual_ethnicity, domain=Individual, range=Optional[str]) - -slots.individual_ancestry = Slot(uri=GHGA.ancestry, name="individual_ancestry", curie=GHGA.curie('ancestry'), - model_uri=GHGA.individual_ancestry, domain=Individual, range=Optional[str]) - -slots.individual_geographical_region = Slot(uri=GHGA.geographical_region, name="individual_geographical region", curie=GHGA.curie('geographical_region'), - model_uri=GHGA.individual_geographical_region, domain=Individual, range=Optional[str]) - slots.individual_has_parent = Slot(uri=GHGA.has_parent, name="individual_has parent", curie=GHGA.curie('has_parent'), model_uri=GHGA.individual_has_parent, domain=Individual, range=Optional[Union[Dict[Union[str, IndividualId], Union[dict, "Individual"]], List[Union[dict, "Individual"]]]]) @@ -3051,24 +3121,12 @@ class slots: slots.cohort_has_member = Slot(uri=GHGA.has_member, name="cohort_has member", curie=GHGA.curie('has_member'), model_uri=GHGA.cohort_has_member, domain=Cohort, range=Optional[Union[Dict[Union[str, IndividualId], Union[dict, Individual]], List[Union[dict, Individual]]]]) -slots.file_format = Slot(uri=GHGA.format, name="file_format", curie=GHGA.curie('format'), - model_uri=GHGA.file_format, domain=File, range=Optional[str]) +slots.file_name = Slot(uri=GHGA.name, name="file_name", curie=GHGA.curie('name'), + model_uri=GHGA.file_name, domain=File, range=str) slots.file_type = Slot(uri=GHGA.type, name="file_type", curie=GHGA.curie('type'), model_uri=GHGA.file_type, domain=File, range=Optional[Union[str, "FileTypeEnum"]]) -slots.file_size = Slot(uri=GHGA.size, name="file_size", curie=GHGA.curie('size'), - model_uri=GHGA.file_size, domain=File, range=Optional[str]) - -slots.file_checksum = Slot(uri=GHGA.checksum, name="file_checksum", curie=GHGA.curie('checksum'), - model_uri=GHGA.file_checksum, domain=File, range=Optional[str]) - -slots.file_file_index = Slot(uri=GHGA.file_index, name="file_file index", curie=GHGA.curie('file_index'), - model_uri=GHGA.file_file_index, domain=File, range=Optional[str]) - -slots.file_category = Slot(uri=GHGA.category, name="file_category", curie=GHGA.curie('category'), - model_uri=GHGA.file_category, domain=File, range=Optional[str]) - slots.analysis_has_input = Slot(uri=GHGA.has_input, name="analysis_has input", curie=GHGA.curie('has_input'), model_uri=GHGA.analysis_has_input, domain=Analysis, range=Optional[Union[Dict[Union[str, FileId], Union[dict, File]], List[Union[dict, File]]]]) @@ -3169,7 +3227,7 @@ class slots: model_uri=GHGA.member_telephone, domain=Member, range=str) slots.member_organization = Slot(uri=GHGA.organization, name="member_organization", curie=GHGA.curie('organization'), - model_uri=GHGA.member_organization, domain=Member, range=Optional[str]) + model_uri=GHGA.member_organization, domain=Member, range=str) slots.publication_id = Slot(uri=GHGA.id, name="publication_id", curie=GHGA.curie('id'), model_uri=GHGA.publication_id, domain=Publication, range=Union[str, PublicationId]) @@ -3177,9 +3235,6 @@ class slots: slots.publication_title = Slot(uri=GHGA.title, name="publication_title", curie=GHGA.curie('title'), model_uri=GHGA.publication_title, domain=Publication, range=Optional[str]) -slots.publication_abstract = Slot(uri=GHGA.abstract, name="publication_abstract", curie=GHGA.curie('abstract'), - model_uri=GHGA.publication_abstract, domain=Publication, range=Optional[str]) - slots.publication_xref = Slot(uri=GHGA.xref, name="publication_xref", curie=GHGA.curie('xref'), model_uri=GHGA.publication_xref, domain=Publication, range=Optional[Union[str, List[str]]]) diff --git a/artifacts/rdf/ghga.ttl b/artifacts/rdf/ghga.ttl index abed2507..1b4886d3 100644 --- a/artifacts/rdf/ghga.ttl +++ b/artifacts/rdf/ghga.ttl @@ -75,22 +75,26 @@ <https://w3id.org/GHGA/submission_status_enum>, <https://w3id.org/GHGA/user_role_enum>, <https://w3id.org/GHGA/vital_status_enum> ; - linkml:generation_date "2021-11-23T14:05:07"^^xsd:dateTime ; + linkml:generation_date "2021-11-24T12:26:27"^^xsd:dateTime ; linkml:id <https://w3id.org/GHGA-Metadata-Schema> ; linkml:imports linkml:types ; linkml:metamodel_version "1.7.0" ; - linkml:prefixes [ linkml:prefix_prefix "linkml" ; - linkml:prefix_reference linkml: ], - [ linkml:prefix_prefix "biolink" ; - linkml:prefix_reference <https://w3id.org/biolink/vocab/> ], + linkml:prefixes [ linkml:prefix_prefix "SIO" ; + linkml:prefix_reference <http://semanticscience.org/resource/SIO_> ], [ linkml:prefix_prefix "GHGA" ; linkml:prefix_reference <https://w3id.org/GHGA/> ], + [ linkml:prefix_prefix "GENEPIO" ; + linkml:prefix_reference <http://purl.obolibrary.org/obo/GENEPIO_> ], + [ linkml:prefix_prefix "SNOMEDCT" ; + linkml:prefix_reference <http://purl.bioontology.org/ontology/SNOMEDCT/> ], [ linkml:prefix_prefix "COB" ; linkml:prefix_reference <http://purl.obolibrary.org/obo/COB_> ], + [ linkml:prefix_prefix "linkml" ; + linkml:prefix_reference linkml: ], + [ linkml:prefix_prefix "biolink" ; + linkml:prefix_reference <https://w3id.org/biolink/vocab/> ], [ linkml:prefix_prefix "EFO" ; - linkml:prefix_reference <http://www.ebi.ac.uk/efo/EFO_> ], - [ linkml:prefix_prefix "SIO" ; - linkml:prefix_reference <http://semanticscience.org/resource/SIO_> ] ; + linkml:prefix_reference <http://www.ebi.ac.uk/efo/EFO_> ] ; linkml:slots <https://w3id.org/GHGA/abstract>, <https://w3id.org/GHGA/accession>, <https://w3id.org/GHGA/additional_name>, @@ -147,10 +151,12 @@ <https://w3id.org/GHGA/email>, <https://w3id.org/GHGA/end_bias>, <https://w3id.org/GHGA/ethnicity>, + <https://w3id.org/GHGA/experiment_biological_replicates>, <https://w3id.org/GHGA/experiment_dataset_has_data_access_policy>, <https://w3id.org/GHGA/experiment_dataset_has_experiment>, <https://w3id.org/GHGA/experiment_dataset_has_study>, <https://w3id.org/GHGA/experiment_description>, + <https://w3id.org/GHGA/experiment_experimental_replicates>, <https://w3id.org/GHGA/experiment_has_experiment_process>, <https://w3id.org/GHGA/experiment_has_file>, <https://w3id.org/GHGA/experiment_has_sample>, @@ -161,17 +167,14 @@ <https://w3id.org/GHGA/experiment_process_has_output>, <https://w3id.org/GHGA/experiment_process_has_protocol>, <https://w3id.org/GHGA/experiment_process_title>, + <https://w3id.org/GHGA/experiment_technical_replicates>, <https://w3id.org/GHGA/experiment_title>, <https://w3id.org/GHGA/experimental_replicates>, <https://w3id.org/GHGA/family_has_member>, <https://w3id.org/GHGA/family_has_proband>, <https://w3id.org/GHGA/family_name>, - <https://w3id.org/GHGA/file_category>, - <https://w3id.org/GHGA/file_checksum>, - <https://w3id.org/GHGA/file_file_index>, - <https://w3id.org/GHGA/file_format>, <https://w3id.org/GHGA/file_index>, - <https://w3id.org/GHGA/file_size>, + <https://w3id.org/GHGA/file_name>, <https://w3id.org/GHGA/file_type>, <https://w3id.org/GHGA/flow_cell_id>, <https://w3id.org/GHGA/flow_cell_type>, @@ -214,15 +217,10 @@ <https://w3id.org/GHGA/has_workflow_step>, <https://w3id.org/GHGA/id>, <https://w3id.org/GHGA/individual_age>, - <https://w3id.org/GHGA/individual_ancestry>, - <https://w3id.org/GHGA/individual_ethnicity>, - <https://w3id.org/GHGA/individual_gender>, - <https://w3id.org/GHGA/individual_geographical_region>, <https://w3id.org/GHGA/individual_has_children>, <https://w3id.org/GHGA/individual_has_parent>, <https://w3id.org/GHGA/individual_sex>, <https://w3id.org/GHGA/individual_vital_status>, - <https://w3id.org/GHGA/individual_year_of_birth>, <https://w3id.org/GHGA/instrument_model>, <https://w3id.org/GHGA/isolation>, <https://w3id.org/GHGA/key>, @@ -237,6 +235,14 @@ <https://w3id.org/GHGA/library_preparation>, <https://w3id.org/GHGA/library_preparation_protocol_description>, <https://w3id.org/GHGA/library_preparation_protocol_has_attribute>, + <https://w3id.org/GHGA/library_preparation_protocol_library_construction>, + <https://w3id.org/GHGA/library_preparation_protocol_library_construction_kit_manufacturer>, + <https://w3id.org/GHGA/library_preparation_protocol_library_construction_kit_retail_name>, + <https://w3id.org/GHGA/library_preparation_protocol_library_layout>, + <https://w3id.org/GHGA/library_preparation_protocol_library_name>, + <https://w3id.org/GHGA/library_preparation_protocol_library_preparation>, + <https://w3id.org/GHGA/library_preparation_protocol_library_selection>, + <https://w3id.org/GHGA/library_preparation_protocol_library_type>, <https://w3id.org/GHGA/library_preparation_protocol_name>, <https://w3id.org/GHGA/library_selection>, <https://w3id.org/GHGA/library_type>, @@ -266,8 +272,9 @@ <https://w3id.org/GHGA/protocol_description>, <https://w3id.org/GHGA/protocol_has_attribute>, <https://w3id.org/GHGA/protocol_name>, + <https://w3id.org/GHGA/protocol_type>, <https://w3id.org/GHGA/protocol_url>, - <https://w3id.org/GHGA/publication_abstract>, + <https://w3id.org/GHGA/protocol_xref>, <https://w3id.org/GHGA/publication_id>, <https://w3id.org/GHGA/publication_title>, <https://w3id.org/GHGA/publication_xref>, @@ -283,16 +290,17 @@ <https://w3id.org/GHGA/sample_description>, <https://w3id.org/GHGA/sample_has_biospecimen>, <https://w3id.org/GHGA/sample_has_individual>, - <https://w3id.org/GHGA/sample_isolation>, <https://w3id.org/GHGA/sample_name>, - <https://w3id.org/GHGA/sample_storage>, <https://w3id.org/GHGA/sample_tissue>, <https://w3id.org/GHGA/sample_type>, <https://w3id.org/GHGA/sample_xref>, <https://w3id.org/GHGA/sequencing_center>, + <https://w3id.org/GHGA/sequencing_length>, <https://w3id.org/GHGA/sequencing_protocol_description>, <https://w3id.org/GHGA/sequencing_protocol_has_attribute>, + <https://w3id.org/GHGA/sequencing_protocol_instrument_model>, <https://w3id.org/GHGA/sequencing_protocol_name>, + <https://w3id.org/GHGA/sequencing_protocol_sequencing_center>, <https://w3id.org/GHGA/sex>, <https://w3id.org/GHGA/size>, <https://w3id.org/GHGA/storage>, @@ -339,8 +347,8 @@ <https://w3id.org/GHGA/xref>, <https://w3id.org/GHGA/year_of_birth> ; linkml:source_file "ghga.yaml" ; - linkml:source_file_date "2021-11-23T14:04:26"^^xsd:dateTime ; - linkml:source_file_size 56544 ; + linkml:source_file_date "2021-11-24T12:25:33"^^xsd:dateTime ; + linkml:source_file_size 60843 ; linkml:types <https://w3id.org/GHGA/boolean>, <https://w3id.org/GHGA/date>, <https://w3id.org/GHGA/datetime>, @@ -503,6 +511,8 @@ <https://w3id.org/GHGA/transcriptome_analysis> skos:definition "Transcriptome Analysis" . +<https://w3id.org/GHGA/unknown> skos:definition "Vital status is unknown." . + <https://w3id.org/GHGA/unreleased> skos:definition "Signifies that the submission is not released for public consumption." . <https://w3id.org/GHGA/uri> a linkml:TypeDefinition ; @@ -947,6 +957,7 @@ <https://w3id.org/GHGA/data_access_policy_description> a linkml:SlotDefinition ; skos:definition "A short description for the Data Access Policy." ; + skos:exactMatch <http://semanticscience.org/resource/SIO_000185> ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "description" ; linkml:definition_uri <https://w3id.org/GHGA/description> ; @@ -1050,6 +1061,21 @@ linkml:slot_uri <https://w3id.org/GHGA/permission> ; linkml:usage_slot_name "permission" . +<https://w3id.org/GHGA/experiment_biological_replicates> a linkml:SlotDefinition ; + skos:definition "A biological replicate is a replicate role that consists of independent biological replicates made from different individual biosamples." ; + skos:exactMatch <http://www.ebi.ac.uk/efo/EFO_0002091> ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "biological replicates" ; + linkml:definition_uri <https://w3id.org/GHGA/biological_replicates> ; + linkml:domain <https://w3id.org/GHGA/Experiment> ; + linkml:domain_of <https://w3id.org/GHGA/Experiment> ; + linkml:is_a <https://w3id.org/GHGA/biological_replicates> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/Experiment> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/biological_replicates> ; + linkml:usage_slot_name "biological replicates" . + <https://w3id.org/GHGA/experiment_dataset_has_data_access_policy> a linkml:SlotDefinition ; skos:definition "The Data Access Policy that applies to this Dataset." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -1106,6 +1132,7 @@ <https://w3id.org/GHGA/experiment_description> a linkml:SlotDefinition ; skos:definition "A detailed description of the Experiment." ; + skos:exactMatch <http://semanticscience.org/resource/SIO_000185> ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "description" ; linkml:definition_uri <https://w3id.org/GHGA/description> ; @@ -1119,6 +1146,21 @@ linkml:slot_uri <https://w3id.org/GHGA/description> ; linkml:usage_slot_name "description" . +<https://w3id.org/GHGA/experiment_experimental_replicates> a linkml:SlotDefinition ; + skos:definition "The replicate number of the assay, i.e. the numeric iteration for the assay that was repeated." ; + skos:exactMatch <http://purl.obolibrary.org/obo/NCIT_C178859> ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "experimental replicates" ; + linkml:definition_uri <https://w3id.org/GHGA/experimental_replicates> ; + linkml:domain <https://w3id.org/GHGA/Experiment> ; + linkml:domain_of <https://w3id.org/GHGA/Experiment> ; + linkml:is_a <https://w3id.org/GHGA/experimental_replicates> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/Experiment> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/experimental_replicates> ; + linkml:usage_slot_name "experimental replicates" . + <https://w3id.org/GHGA/experiment_has_experiment_process> a linkml:SlotDefinition ; skos:definition "One or more Experiment Processes entities associated with this Experiment." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -1274,6 +1316,21 @@ linkml:slot_uri <https://w3id.org/GHGA/title> ; linkml:usage_slot_name "title" . +<https://w3id.org/GHGA/experiment_technical_replicates> a linkml:SlotDefinition ; + skos:definition "A technical replicate is a replicate role where the same BioSample is use e.g. the same pool of RNA used to assess technical (as opposed to biological) variation within an experiment." ; + skos:exactMatch <http://www.ebi.ac.uk/efo/EFO_0002090> ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "technical replicates" ; + linkml:definition_uri <https://w3id.org/GHGA/technical_replicates> ; + linkml:domain <https://w3id.org/GHGA/Experiment> ; + linkml:domain_of <https://w3id.org/GHGA/Experiment> ; + linkml:is_a <https://w3id.org/GHGA/technical_replicates> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/Experiment> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/technical_replicates> ; + linkml:usage_slot_name "technical replicates" . + <https://w3id.org/GHGA/experiment_title> a linkml:SlotDefinition ; skos:definition "Name for the experiment (eg: GHGAE_PBMC_RNAseq)." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -1321,75 +1378,20 @@ linkml:slot_uri <https://w3id.org/GHGA/has_proband> ; linkml:usage_slot_name "has proband" . -<https://w3id.org/GHGA/file_category> a linkml:SlotDefinition ; - skos:definition "The category for this file: Whole Genome Sequencing, Whole Exome Sequencing, etc." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "category" ; - linkml:definition_uri <https://w3id.org/GHGA/category> ; - linkml:domain <https://w3id.org/GHGA/File> ; - linkml:domain_of <https://w3id.org/GHGA/File> ; - linkml:is_a <https://w3id.org/GHGA/category> ; - linkml:is_usage_slot true ; - linkml:owner <https://w3id.org/GHGA/File> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/category> ; - linkml:usage_slot_name "category" . - -<https://w3id.org/GHGA/file_checksum> a linkml:SlotDefinition ; - skos:definition "The checksum for the file." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "checksum" ; - linkml:definition_uri <https://w3id.org/GHGA/checksum> ; - linkml:domain <https://w3id.org/GHGA/File> ; - linkml:domain_of <https://w3id.org/GHGA/File> ; - linkml:is_a <https://w3id.org/GHGA/checksum> ; - linkml:is_usage_slot true ; - linkml:owner <https://w3id.org/GHGA/File> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/checksum> ; - linkml:usage_slot_name "checksum" . - -<https://w3id.org/GHGA/file_file_index> a linkml:SlotDefinition ; - skos:definition "The index for this file. Commonly for BAM/VCF files." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "file index" ; - linkml:definition_uri <https://w3id.org/GHGA/file_index> ; - linkml:domain <https://w3id.org/GHGA/File> ; - linkml:domain_of <https://w3id.org/GHGA/File> ; - linkml:is_a <https://w3id.org/GHGA/file_index> ; - linkml:is_usage_slot true ; - linkml:owner <https://w3id.org/GHGA/File> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/file_index> ; - linkml:usage_slot_name "file index" . - -<https://w3id.org/GHGA/file_format> a linkml:SlotDefinition ; - skos:definition "The format of the file: BAM, SAM, CRAM, BAI, etc." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "format" ; - linkml:definition_uri <https://w3id.org/GHGA/format> ; - linkml:domain <https://w3id.org/GHGA/File> ; - linkml:domain_of <https://w3id.org/GHGA/File> ; - linkml:is_a <https://w3id.org/GHGA/format> ; - linkml:is_usage_slot true ; - linkml:owner <https://w3id.org/GHGA/File> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/format> ; - linkml:usage_slot_name "format" . - -<https://w3id.org/GHGA/file_size> a linkml:SlotDefinition ; - skos:definition "The file size in bytes." ; +<https://w3id.org/GHGA/file_name> a linkml:SlotDefinition ; + skos:definition "The name for an entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "size" ; - linkml:definition_uri <https://w3id.org/GHGA/size> ; + skos:prefLabel "name" ; + linkml:definition_uri <https://w3id.org/GHGA/name> ; linkml:domain <https://w3id.org/GHGA/File> ; linkml:domain_of <https://w3id.org/GHGA/File> ; - linkml:is_a <https://w3id.org/GHGA/size> ; + linkml:is_a <https://w3id.org/GHGA/name> ; linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/File> ; linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/size> ; - linkml:usage_slot_name "size" . + linkml:required true ; + linkml:slot_uri <https://w3id.org/GHGA/name> ; + linkml:usage_slot_name "name" . <https://w3id.org/GHGA/file_type> a linkml:SlotDefinition ; skos:definition "The file type: Aligned Reads, Unaligned Reads, etc." ; @@ -1420,6 +1422,7 @@ <https://w3id.org/GHGA/library_preparation_protocol_description> a linkml:SlotDefinition ; skos:definition "Description about how a sequencing library was prepared (eg: Library construction method)." ; + skos:exactMatch <http://semanticscience.org/resource/SIO_000185> ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "description" ; linkml:definition_uri <https://w3id.org/GHGA/description> ; @@ -1450,6 +1453,131 @@ linkml:slot_uri <https://w3id.org/GHGA/has_attribute> ; linkml:usage_slot_name "has attribute" . +<https://w3id.org/GHGA/library_preparation_protocol_library_construction> a linkml:SlotDefinition ; + skos:closeMatch <http://purl.obolibrary.org/obo/OBI_0000711> ; + skos:definition "The name of a library construction approach being used. (eg: \"10X v2 sequencing\" or \"Smart-seq2\")" ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "library construction" ; + linkml:definition_uri <https://w3id.org/GHGA/library_construction> ; + linkml:domain <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:is_a <https://w3id.org/GHGA/library_construction> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:required true ; + linkml:slot_uri <https://w3id.org/GHGA/library_construction> ; + linkml:usage_slot_name "library construction" . + +<https://w3id.org/GHGA/library_preparation_protocol_library_construction_kit_manufacturer> a linkml:SlotDefinition ; + skos:definition "Manufacturer of library construction kit" ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "library construction kit manufacturer" ; + linkml:definition_uri <https://w3id.org/GHGA/library_construction_kit_manufacturer> ; + linkml:domain <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:is_a <https://w3id.org/GHGA/library_construction_kit_manufacturer> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:required true ; + linkml:slot_uri <https://w3id.org/GHGA/library_construction_kit_manufacturer> ; + linkml:usage_slot_name "library construction kit manufacturer" . + +<https://w3id.org/GHGA/library_preparation_protocol_library_construction_kit_retail_name> a linkml:SlotDefinition ; + skos:broadMatch <http://purl.obolibrary.org/obo/NCIT_C177583> ; + skos:definition "A unique identifier for the kit used to construct a genomic library. This may include the vendor name, kit name and kit version (e.g. Agilent sure select Human Exome V8, Twist RefSeq Exome, etc.)" ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "library construction kit retail name" ; + linkml:definition_uri <https://w3id.org/GHGA/library_construction_kit_retail_name> ; + linkml:domain <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:is_a <https://w3id.org/GHGA/library_construction_kit_retail_name> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:required true ; + linkml:slot_uri <https://w3id.org/GHGA/library_construction_kit_retail_name> ; + linkml:usage_slot_name "library construction kit retail name" . + +<https://w3id.org/GHGA/library_preparation_protocol_library_layout> a linkml:SlotDefinition ; + skos:definition "Describe whether the library was sequenced in single-end (forward or reverse) or paired-end mode" ; + skos:exactMatch <http://purl.obolibrary.org/obo/NCIT_C175894> ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "library layout" ; + linkml:definition_uri <https://w3id.org/GHGA/library_layout> ; + linkml:domain <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:is_a <https://w3id.org/GHGA/library_layout> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:required true ; + linkml:slot_uri <https://w3id.org/GHGA/library_layout> ; + linkml:usage_slot_name "library layout" . + +<https://w3id.org/GHGA/library_preparation_protocol_library_name> a linkml:SlotDefinition ; + skos:definition "A short name identifying the library to potential users. The same name may refer to multiple versions of the same continually updated library." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "library name" ; + linkml:definition_uri <https://w3id.org/GHGA/library_name> ; + linkml:domain <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:is_a <https://w3id.org/GHGA/library_name> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:required true ; + linkml:slot_uri <https://w3id.org/GHGA/library_name> ; + linkml:usage_slot_name "library name" . + +<https://w3id.org/GHGA/library_preparation_protocol_library_preparation> a linkml:SlotDefinition ; + skos:closeMatch <http://purl.obolibrary.org/obo/OBI_0000711> ; + skos:definition "The general method for sequencing library construction (e.g. KAPA PCR-free)." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "library preparation" ; + linkml:definition_uri <https://w3id.org/GHGA/library_preparation> ; + linkml:domain <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:is_a <https://w3id.org/GHGA/library_preparation> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:required true ; + linkml:slot_uri <https://w3id.org/GHGA/library_preparation> ; + linkml:usage_slot_name "library preparation" . + +<https://w3id.org/GHGA/library_preparation_protocol_library_selection> a linkml:SlotDefinition ; + skos:closeMatch <http://purl.obolibrary.org/obo/GENEPIO_0001940> ; + skos:definition "Whether any method was used to select for or against, enrich, or screen the material being sequenced. Library Selection method (e.g. random, PCA, cDNA, etc )" ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "library selection" ; + linkml:definition_uri <https://w3id.org/GHGA/library_selection> ; + linkml:domain <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:is_a <https://w3id.org/GHGA/library_selection> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:required true ; + linkml:slot_uri <https://w3id.org/GHGA/library_selection> ; + linkml:usage_slot_name "library selection" . + +<https://w3id.org/GHGA/library_preparation_protocol_library_type> a linkml:SlotDefinition ; + skos:definition "Describe the level of omics analysis (eg: Metagenome, transcriptome, etc) " ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "library type" ; + linkml:definition_uri <https://w3id.org/GHGA/library_type> ; + linkml:domain <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:is_a <https://w3id.org/GHGA/library_type> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:required true ; + linkml:slot_uri <https://w3id.org/GHGA/library_type> ; + linkml:usage_slot_name "library type" . + <https://w3id.org/GHGA/library_preparation_protocol_name> a linkml:SlotDefinition ; skos:definition "Name of the library preparation protocol (eg: mRNA-seq library preparation)." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -1466,6 +1594,7 @@ linkml:usage_slot_name "name" . <https://w3id.org/GHGA/member_email> a linkml:SlotDefinition ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C42775> ; skos:definition "The email of the Member." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "email" ; @@ -1491,10 +1620,12 @@ linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/Member> ; linkml:range <https://w3id.org/GHGA/string> ; + linkml:required true ; linkml:slot_uri <https://w3id.org/GHGA/organization> ; linkml:usage_slot_name "organization" . <https://w3id.org/GHGA/member_telephone> a linkml:SlotDefinition ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C40978> ; skos:definition "The telephone number of the Member." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "telephone" ; @@ -1511,6 +1642,8 @@ <https://w3id.org/GHGA/project_description> a linkml:SlotDefinition ; skos:definition "Short textual description of the project (Some information on the protocol, sample used and collected etc) " ; + skos:exactMatch <http://purl.obolibrary.org/obo/NCIT_C25365>, + <http://semanticscience.org/resource/SIO_000136> ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "description" ; linkml:definition_uri <https://w3id.org/GHGA/description> ; @@ -1590,20 +1723,6 @@ linkml:slot_uri <https://w3id.org/GHGA/title> ; linkml:usage_slot_name "title" . -<https://w3id.org/GHGA/publication_abstract> a linkml:SlotDefinition ; - skos:definition "The abstract of the Publication." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "abstract" ; - linkml:definition_uri <https://w3id.org/GHGA/abstract> ; - linkml:domain <https://w3id.org/GHGA/Publication> ; - linkml:domain_of <https://w3id.org/GHGA/Publication> ; - linkml:is_a <https://w3id.org/GHGA/abstract> ; - linkml:is_usage_slot true ; - linkml:owner <https://w3id.org/GHGA/Publication> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/abstract> ; - linkml:usage_slot_name "abstract" . - <https://w3id.org/GHGA/publication_id> a linkml:SlotDefinition ; skos:definition "A PMID or DOI for the Publication." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -1656,7 +1775,8 @@ <https://w3id.org/GHGA/unreleased> . <https://w3id.org/GHGA/sample_description> a linkml:SlotDefinition ; - skos:definition "Short textual description of the sample (How the sample was collected, sample source, protocol followed for processing the sample etc) " ; + skos:definition "Short textual description of the sample (How the sample was collected, sample source, protocol followed for processing the sample etc)." ; + skos:exactMatch <http://semanticscience.org/resource/SIO_000185> ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "description" ; linkml:definition_uri <https://w3id.org/GHGA/description> ; @@ -1666,6 +1786,7 @@ linkml:is_usage_slot true ; linkml:owner <https://w3id.org/GHGA/Sample> ; linkml:range <https://w3id.org/GHGA/string> ; + linkml:required true ; linkml:slot_uri <https://w3id.org/GHGA/description> ; linkml:usage_slot_name "description" . @@ -1700,22 +1821,8 @@ linkml:slot_uri <https://w3id.org/GHGA/has_individual> ; linkml:usage_slot_name "has individual" . -<https://w3id.org/GHGA/sample_isolation> a linkml:SlotDefinition ; - skos:definition "Method or Device employed for collecting sample." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "isolation" ; - linkml:definition_uri <https://w3id.org/GHGA/isolation> ; - linkml:domain <https://w3id.org/GHGA/Sample> ; - linkml:domain_of <https://w3id.org/GHGA/Sample> ; - linkml:is_a <https://w3id.org/GHGA/isolation> ; - linkml:is_usage_slot true ; - linkml:owner <https://w3id.org/GHGA/Sample> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/isolation> ; - linkml:usage_slot_name "isolation" . - <https://w3id.org/GHGA/sample_name> a linkml:SlotDefinition ; - skos:definition "Name of the Sample." ; + skos:definition "Name of the sample (eg:GHGAS_Blood_Sample1 or GHGAS_PBMC_RNAseq_S1)." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "name" ; linkml:definition_uri <https://w3id.org/GHGA/name> ; @@ -1729,22 +1836,9 @@ linkml:slot_uri <https://w3id.org/GHGA/name> ; linkml:usage_slot_name "name" . -<https://w3id.org/GHGA/sample_storage> a linkml:SlotDefinition ; - skos:definition "Methods by which sample is stored (e.g. frozen in liquid nitrogen)." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "storage" ; - linkml:definition_uri <https://w3id.org/GHGA/storage> ; - linkml:domain <https://w3id.org/GHGA/Sample> ; - linkml:domain_of <https://w3id.org/GHGA/Sample> ; - linkml:is_a <https://w3id.org/GHGA/storage> ; - linkml:is_usage_slot true ; - linkml:owner <https://w3id.org/GHGA/Sample> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/storage> ; - linkml:usage_slot_name "storage" . - <https://w3id.org/GHGA/sample_tissue> a linkml:SlotDefinition ; - skos:definition "Description of Sample Source (eg: Blood, Serum etc)." ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C12801> ; + skos:definition "An anatomical structure consisting of similarly specialized cells and intercellular matrix, aggregated according to genetically determined spatial relationships, performing a specific function." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "tissue" ; linkml:definition_uri <https://w3id.org/GHGA/tissue> ; @@ -1789,6 +1883,7 @@ <https://w3id.org/GHGA/sequencing_protocol_description> a linkml:SlotDefinition ; skos:definition "Description about the sequencing protocol (eg: mRNA-seq,Whole exome long-read sequencing etc)." ; + skos:exactMatch <http://semanticscience.org/resource/SIO_000185> ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "description" ; linkml:definition_uri <https://w3id.org/GHGA/description> ; @@ -1818,6 +1913,21 @@ linkml:slot_uri <https://w3id.org/GHGA/has_attribute> ; linkml:usage_slot_name "has attribute" . +<https://w3id.org/GHGA/sequencing_protocol_instrument_model> a linkml:SlotDefinition ; + skos:definition "The name and model of the technology platform used to perform sequencing." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "instrument model" ; + linkml:definition_uri <https://w3id.org/GHGA/instrument_model> ; + linkml:domain <https://w3id.org/GHGA/SequencingProtocol> ; + linkml:domain_of <https://w3id.org/GHGA/SequencingProtocol> ; + linkml:is_a <https://w3id.org/GHGA/instrument_model> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/SequencingProtocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:required true ; + linkml:slot_uri <https://w3id.org/GHGA/instrument_model> ; + linkml:usage_slot_name "instrument model" . + <https://w3id.org/GHGA/sequencing_protocol_name> a linkml:SlotDefinition ; skos:definition "Name of the library preparation protocol (eg: mRNA-seq,Whole exome long-read sequencing etc)." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -1832,8 +1942,25 @@ linkml:slot_uri <https://w3id.org/GHGA/name> ; linkml:usage_slot_name "name" . +<https://w3id.org/GHGA/sequencing_protocol_sequencing_center> a linkml:SlotDefinition ; + skos:closeMatch <http://purl.obolibrary.org/obo/GENEPIO_0000070> ; + skos:definition "Center where sample was sequenced." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "sequencing center" ; + linkml:definition_uri <https://w3id.org/GHGA/sequencing_center> ; + linkml:domain <https://w3id.org/GHGA/SequencingProtocol> ; + linkml:domain_of <https://w3id.org/GHGA/SequencingProtocol> ; + linkml:is_a <https://w3id.org/GHGA/sequencing_center> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/SequencingProtocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:required true ; + linkml:slot_uri <https://w3id.org/GHGA/sequencing_center> ; + linkml:usage_slot_name "sequencing center" . + <https://w3id.org/GHGA/study_affiliation> a linkml:SlotDefinition ; - skos:definition "Affiliations with this study." ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C25412> ; + skos:definition "Institutions associated with this study." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "affiliation" ; linkml:definition_uri <https://w3id.org/GHGA/affiliation> ; @@ -1850,6 +1977,7 @@ <https://w3id.org/GHGA/study_description> a linkml:SlotDefinition ; skos:definition "A detailed description (abstract) that describes the goals of this Study." ; + skos:exactMatch <http://semanticscience.org/resource/SIO_000185> ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "description" ; linkml:definition_uri <https://w3id.org/GHGA/description> ; @@ -1962,6 +2090,7 @@ linkml:usage_slot_name "title" . <https://w3id.org/GHGA/study_type> a linkml:SlotDefinition ; + skos:broadMatch <http://purl.obolibrary.org/obo/NCIT_C142175> ; skos:definition "The type of Study. For example, \"Cancer Genomics\", \"Epigenetics\", \"Exome Sequencing\"." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "type" ; @@ -2161,12 +2290,6 @@ linkml:slot_uri <https://w3id.org/GHGA/role> ; linkml:usage_slot_name "role" . -<https://w3id.org/GHGA/vital_status_enum> skos:definition "Enum to capture the vital status of an individual." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/VitalStatusEnum> ; - linkml:permissible_values <https://w3id.org/GHGA/alive>, - <https://w3id.org/GHGA/deceased> . - <https://w3id.org/GHGA/workflow_parameter_key> a linkml:SlotDefinition ; skos:definition "Key that represents the parameter name." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -2238,25 +2361,25 @@ linkml:is_a <https://w3id.org/GHGA/Individual> ; linkml:slot_usage [ ] ; linkml:slots <https://w3id.org/GHGA/additional_name>, + <https://w3id.org/GHGA/ancestry>, + <https://w3id.org/GHGA/ethnicity>, <https://w3id.org/GHGA/family_name>, + <https://w3id.org/GHGA/gender>, + <https://w3id.org/GHGA/geographical_region>, <https://w3id.org/GHGA/given_name>, <https://w3id.org/GHGA/individual_age>, - <https://w3id.org/GHGA/individual_ancestry>, - <https://w3id.org/GHGA/individual_ethnicity>, - <https://w3id.org/GHGA/individual_gender>, - <https://w3id.org/GHGA/individual_geographical_region>, <https://w3id.org/GHGA/individual_has_children>, <https://w3id.org/GHGA/individual_has_parent>, <https://w3id.org/GHGA/individual_sex>, <https://w3id.org/GHGA/individual_vital_status>, - <https://w3id.org/GHGA/individual_year_of_birth>, <https://w3id.org/GHGA/named_thing_accession>, <https://w3id.org/GHGA/named_thing_creation_date>, <https://w3id.org/GHGA/named_thing_has_attribute>, <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/year_of_birth> . <https://w3id.org/GHGA/biological_sex_enum> skos:definition "The biological sex of an Individual as determined by their chromosomes." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -2280,7 +2403,8 @@ linkml:slot_uri <https://w3id.org/GHGA/has_sequencing_protocol> . <https://w3id.org/GHGA/individual_age> a linkml:SlotDefinition ; - skos:definition "Age of an Individual." ; + skos:closeMatch <http://www.ebi.ac.uk/efo/EFO_0000246> ; + skos:definition "Age of an individual." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "age" ; linkml:definition_uri <https://w3id.org/GHGA/age> ; @@ -2294,62 +2418,6 @@ linkml:slot_uri <https://w3id.org/GHGA/age> ; linkml:usage_slot_name "age" . -<https://w3id.org/GHGA/individual_ancestry> a linkml:SlotDefinition ; - skos:definition "Ancestry of an Individual. Typically a value from Human Ancestry Ontology. For example, 'HANCESTRO:0005' signifies this Individual belongs to the 'European' ancestry." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "ancestry" ; - linkml:definition_uri <https://w3id.org/GHGA/ancestry> ; - linkml:domain <https://w3id.org/GHGA/Individual> ; - linkml:domain_of <https://w3id.org/GHGA/Individual> ; - linkml:is_a <https://w3id.org/GHGA/ancestry> ; - linkml:is_usage_slot true ; - linkml:owner <https://w3id.org/GHGA/Individual> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/ancestry> ; - linkml:usage_slot_name "ancestry" . - -<https://w3id.org/GHGA/individual_ethnicity> a linkml:SlotDefinition ; - skos:definition "A social group characterized by a distinctive social and cultural tradition that is maintained from generation to generation.." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "ethnicity" ; - linkml:definition_uri <https://w3id.org/GHGA/ethnicity> ; - linkml:domain <https://w3id.org/GHGA/Individual> ; - linkml:domain_of <https://w3id.org/GHGA/Individual> ; - linkml:is_a <https://w3id.org/GHGA/ethnicity> ; - linkml:is_usage_slot true ; - linkml:owner <https://w3id.org/GHGA/Individual> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/ethnicity> ; - linkml:usage_slot_name "ethnicity" . - -<https://w3id.org/GHGA/individual_gender> a linkml:SlotDefinition ; - skos:definition "Gender of an Individual/ Identification as male/masculine, female/feminine or something else, and association with a (social) role or set of behavioral and cultural traits" ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "gender" ; - linkml:definition_uri <https://w3id.org/GHGA/gender> ; - linkml:domain <https://w3id.org/GHGA/Individual> ; - linkml:domain_of <https://w3id.org/GHGA/Individual> ; - linkml:is_a <https://w3id.org/GHGA/gender> ; - linkml:is_usage_slot true ; - linkml:owner <https://w3id.org/GHGA/Individual> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/gender> ; - linkml:usage_slot_name "gender" . - -<https://w3id.org/GHGA/individual_geographical_region> a linkml:SlotDefinition ; - skos:definition "The geographical region where the Individual is located. Typically a value from Human Ancestry Ontology. For example, 'HANCESTRO:0047' signifies this Individual is from 'Western Europe' region." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "geographical region" ; - linkml:definition_uri <https://w3id.org/GHGA/geographical_region> ; - linkml:domain <https://w3id.org/GHGA/Individual> ; - linkml:domain_of <https://w3id.org/GHGA/Individual> ; - linkml:is_a <https://w3id.org/GHGA/geographical_region> ; - linkml:is_usage_slot true ; - linkml:owner <https://w3id.org/GHGA/Individual> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/geographical_region> ; - linkml:usage_slot_name "geographical region" . - <https://w3id.org/GHGA/individual_has_children> a linkml:SlotDefinition ; skos:definition "One or more children for this Individual." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -2385,7 +2453,8 @@ linkml:usage_slot_name "has parent" . <https://w3id.org/GHGA/individual_sex> a linkml:SlotDefinition ; - skos:definition "Biological sex of a sequenced individual. (\"Female\", \"Male\")." ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C28421> ; + skos:definition "The assemblage of physical properties or qualities by which male is distinguished from female; the physical difference between male and female; the distinguishing peculiarity of male or female." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "sex" ; linkml:definition_uri <https://w3id.org/GHGA/sex> ; @@ -2400,6 +2469,7 @@ linkml:usage_slot_name "sex" . <https://w3id.org/GHGA/individual_vital_status> a linkml:SlotDefinition ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C25717> ; skos:definition "Last known Vital Status of an Individual." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "vital status" ; @@ -2414,20 +2484,6 @@ linkml:slot_uri <https://w3id.org/GHGA/vital_status> ; linkml:usage_slot_name "vital status" . -<https://w3id.org/GHGA/individual_year_of_birth> a linkml:SlotDefinition ; - skos:definition "Year of Birth of an Individual." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "year of birth" ; - linkml:definition_uri <https://w3id.org/GHGA/year_of_birth> ; - linkml:domain <https://w3id.org/GHGA/Individual> ; - linkml:domain_of <https://w3id.org/GHGA/Individual> ; - linkml:is_a <https://w3id.org/GHGA/year_of_birth> ; - linkml:is_usage_slot true ; - linkml:owner <https://w3id.org/GHGA/Individual> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/year_of_birth> ; - linkml:usage_slot_name "year of birth" . - <https://w3id.org/GHGA/integer> a linkml:TypeDefinition ; skos:definition "An integer" ; skos:inScheme linkml:types ; @@ -2442,6 +2498,13 @@ linkml:permissible_values <https://w3id.org/GHGA/data%20requester>, <https://w3id.org/GHGA/data%20steward> . +<https://w3id.org/GHGA/vital_status_enum> skos:definition "Enum to capture the vital status of an individual." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/VitalStatusEnum> ; + linkml:permissible_values <https://w3id.org/GHGA/alive>, + <https://w3id.org/GHGA/deceased>, + <https://w3id.org/GHGA/unknown> . + <https://w3id.org/GHGA/BiologicalQuality> a linkml:ClassDefinition ; skos:definition "A biological quality is a quality held by a biological entity." ; skos:exactMatch <https://w3id.org/GHGA/SIO:000475> ; @@ -2458,16 +2521,27 @@ <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref> . -<https://w3id.org/GHGA/biological_replicates> a linkml:SlotDefinition ; - skos:definition "Number of independent samples (biological replicates)." ; +<https://w3id.org/GHGA/abstract> a linkml:SlotDefinition ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C60765> ; + skos:definition "The study abstract that describes the goals. Can also hold abstract from a publication related to this study" ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/biological_replicates> ; - linkml:domain_of <https://w3id.org/GHGA/Experiment> ; - linkml:owner <https://w3id.org/GHGA/Experiment> ; + linkml:definition_uri <https://w3id.org/GHGA/abstract> ; + linkml:domain_of <https://w3id.org/GHGA/Publication> ; + linkml:owner <https://w3id.org/GHGA/Publication> ; linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/biological_replicates> . + linkml:slot_uri <https://w3id.org/GHGA/abstract> . + +<https://w3id.org/GHGA/category> a linkml:SlotDefinition ; + skos:definition "The category for this file: Whole Genome Sequencing, Whole Exome Sequencing, etc." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/category> ; + linkml:domain_of <https://w3id.org/GHGA/File> ; + linkml:owner <https://w3id.org/GHGA/File> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/category> . <https://w3id.org/GHGA/cell_barcode_offset> a linkml:SlotDefinition ; + skos:closeMatch <http://www.ebi.ac.uk/efo/EFO_0010204> ; skos:definition "The offset in sequence of the cell identifying barcode. (Eg. \"0\")." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/cell_barcode_offset> ; @@ -2477,6 +2551,7 @@ linkml:slot_uri <https://w3id.org/GHGA/cell_barcode_offset> . <https://w3id.org/GHGA/cell_barcode_read> a linkml:SlotDefinition ; + skos:closeMatch <http://www.ebi.ac.uk/efo/EFO_0010203> ; skos:definition "The type of read that contains the cell barcode (eg: index1/index2/read1/read2)." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/cell_barcode_read> ; @@ -2486,6 +2561,7 @@ linkml:slot_uri <https://w3id.org/GHGA/cell_barcode_read> . <https://w3id.org/GHGA/cell_barcode_size> a linkml:SlotDefinition ; + skos:closeMatch <http://www.ebi.ac.uk/efo/EFO_0010205> ; skos:definition "The size of the cell identifying barcode (E.g. \"16\")." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/cell_barcode_size> ; @@ -2494,8 +2570,19 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/cell_barcode_size> . +<https://w3id.org/GHGA/checksum> a linkml:SlotDefinition ; + skos:definition "A computed value which depends on the contents of a block of data and which is transmitted or stored along with the data in order to detect corruption of the data. The receiving system recomputes the checksum based upon the received data and compares this value with the one sent with the data. If the two values are the same, the receiver has some confidence that the data was received correctly." ; + skos:exactMatch <http://purl.obolibrary.org/obo/NCIT_C43522> ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/checksum> ; + linkml:domain_of <https://w3id.org/GHGA/File> ; + linkml:owner <https://w3id.org/GHGA/File> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/checksum> . + <https://w3id.org/GHGA/end_bias> a linkml:SlotDefinition ; skos:definition "The end of the cDNA molecule that is preferentially sequenced, e.g. 3/5 prime tag or end, or the full-length transcript." ; + skos:exactMatch <http://www.ebi.ac.uk/efo/EFO_0010187> ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/end_bias> ; linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; @@ -2503,17 +2590,18 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/end_bias> . -<https://w3id.org/GHGA/experimental_replicates> a linkml:SlotDefinition ; - skos:definition "Number of experiment replications." ; +<https://w3id.org/GHGA/file_index> a linkml:SlotDefinition ; + skos:definition "The index for this file. Commonly for BAM/VCF files." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/experimental_replicates> ; - linkml:domain_of <https://w3id.org/GHGA/Experiment> ; - linkml:owner <https://w3id.org/GHGA/Experiment> ; + linkml:definition_uri <https://w3id.org/GHGA/file_index> ; + linkml:domain_of <https://w3id.org/GHGA/File> ; + linkml:owner <https://w3id.org/GHGA/File> ; linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/experimental_replicates> . + linkml:slot_uri <https://w3id.org/GHGA/file_index> . <https://w3id.org/GHGA/flow_cell_id> a linkml:SlotDefinition ; - skos:definition "Flow Cell ID (eg: Experiment ID_Cell 1_Lane_1)." ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C181843> ; + skos:definition "Flow Cell ID (eg: Experiment ID_Cell 1_Lane_1). The barcode assigned to a flow cell used in nucleotide sequencing." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/flow_cell_id> ; linkml:domain_of <https://w3id.org/GHGA/SequencingProtocol> ; @@ -2522,7 +2610,8 @@ linkml:slot_uri <https://w3id.org/GHGA/flow_cell_id> . <https://w3id.org/GHGA/flow_cell_type> a linkml:SlotDefinition ; - skos:definition "Type of flow cell used (e.g. S4, S2 for NovaSeq; PromethION, Flongle for Nanopore)" ; + skos:closeMatch <http://purl.obolibrary.org/obo/OBI_0400043> ; + skos:definition "Type of flow cell used (e.g. S4, S2 for NovaSeq; PromethION, Flongle for Nanopore). Aparatus in the fluidic subsystem where the sheath and sample meet. Can be one of several types; jet-in-air, quartz cuvette, or a hybrid of the two. The sample flows through the center of a fluid column of sheath fluid in the flow cell." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/flow_cell_type> ; linkml:domain_of <https://w3id.org/GHGA/SequencingProtocol> ; @@ -2530,17 +2619,28 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/flow_cell_type> . -<https://w3id.org/GHGA/instrument_model> a linkml:SlotDefinition ; - skos:definition "The name and model of the technology platform used to perform sequencing." ; +<https://w3id.org/GHGA/format> a linkml:SlotDefinition ; + skos:definition "The format of the file: BAM, SAM, CRAM, BAI, etc." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/instrument_model> ; - linkml:domain_of <https://w3id.org/GHGA/SequencingProtocol> ; - linkml:owner <https://w3id.org/GHGA/SequencingProtocol> ; + linkml:definition_uri <https://w3id.org/GHGA/format> ; + linkml:domain_of <https://w3id.org/GHGA/File> ; + linkml:owner <https://w3id.org/GHGA/File> ; linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/instrument_model> . + linkml:slot_uri <https://w3id.org/GHGA/format> . + +<https://w3id.org/GHGA/isolation> a linkml:SlotDefinition ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C25549> ; + skos:definition "Method or device employed for collecting/isolating a sample." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/isolation> ; + linkml:domain_of <https://w3id.org/GHGA/Sample> ; + linkml:owner <https://w3id.org/GHGA/Sample> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/isolation> . <https://w3id.org/GHGA/lane_number> a linkml:SlotDefinition ; - skos:definition "Number of lanes on used flow cell." ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C182081> ; + skos:definition "he numerical identifier for the lane or machine unit where a sample was located during nucleotide sequencing." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/lane_number> ; linkml:domain_of <https://w3id.org/GHGA/SequencingProtocol> ; @@ -2548,42 +2648,6 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/lane_number> . -<https://w3id.org/GHGA/library_construction> a linkml:SlotDefinition ; - skos:definition "The name of a library construction approach being used. (eg: \"10X v2 sequencing\" or \"Smart-seq2\")" ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/library_construction> ; - linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; - linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/library_construction> . - -<https://w3id.org/GHGA/library_construction_kit_manufacturer> a linkml:SlotDefinition ; - skos:definition "Manufacturer of library construction kit" ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/library_construction_kit_manufacturer> ; - linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; - linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/library_construction_kit_manufacturer> . - -<https://w3id.org/GHGA/library_construction_kit_retail_name> a linkml:SlotDefinition ; - skos:definition "A unique identifier for the kit used to construct a genomic library. This may include the vendor name, kit name and kit version (e.g. Agilent sure select Human Exome V8, Twist RefSeq Exome, etc.)" ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/library_construction_kit_retail_name> ; - linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; - linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/library_construction_kit_retail_name> . - -<https://w3id.org/GHGA/library_layout> a linkml:SlotDefinition ; - skos:definition "Describe whether the library was sequenced in single-end (forward or reverse) or paired-end mode" ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/library_layout> ; - linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; - linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/library_layout> . - <https://w3id.org/GHGA/library_level> a linkml:SlotDefinition ; skos:definition "Single Cell Sequencing or Bulk Sequencing" ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -2593,44 +2657,10 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/library_level> . -<https://w3id.org/GHGA/library_name> a linkml:SlotDefinition ; - skos:definition "Library Name (e.g.: Sequencer layout_macromolecule)" ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/library_name> ; - linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; - linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/library_name> . - -<https://w3id.org/GHGA/library_preparation> a linkml:SlotDefinition ; - skos:definition "The general method for sequencing library construction (e.g. KAPA PCR-free)." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/library_preparation> ; - linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; - linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/library_preparation> . - -<https://w3id.org/GHGA/library_selection> a linkml:SlotDefinition ; - skos:definition "Library Selection method (e.g. random, PCA, cDNA, etc )" ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/library_selection> ; - linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; - linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/library_selection> . - -<https://w3id.org/GHGA/library_type> a linkml:SlotDefinition ; - skos:definition "Describe the level of omics analysis (eg: Metagenome, transcriptome, etc) " ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/library_type> ; - linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; - linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/library_type> . - <https://w3id.org/GHGA/primer> a linkml:SlotDefinition ; + skos:broadMatch <http://purl.obolibrary.org/obo/NCIT_C1451> ; skos:definition "The type of primer used for reverse transcription, e.g. \"oligo-dT\" or \"random\" primer. This allows users to identify content of the cDNA library input e.g. enriched for mRNA." ; + skos:exactMatch <http://www.ebi.ac.uk/efo/EFO_0010192> ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/primer> ; linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; @@ -2640,6 +2670,7 @@ <https://w3id.org/GHGA/protocol_description> a linkml:SlotDefinition ; skos:definition "Detailed description of the Protocol." ; + skos:exactMatch <http://semanticscience.org/resource/SIO_000185> ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "description" ; linkml:definition_uri <https://w3id.org/GHGA/description> ; @@ -2670,7 +2701,7 @@ linkml:usage_slot_name "has attribute" . <https://w3id.org/GHGA/protocol_name> a linkml:SlotDefinition ; - skos:definition "Name of the Protocol." ; + skos:definition "Name of the protocol (eg: Sample extraction_PCR amplification)." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "name" ; linkml:definition_uri <https://w3id.org/GHGA/name> ; @@ -2683,6 +2714,20 @@ linkml:slot_uri <https://w3id.org/GHGA/name> ; linkml:usage_slot_name "name" . +<https://w3id.org/GHGA/protocol_type> a linkml:SlotDefinition ; + skos:definition "Type of the protocol (eg: Target enrichment)." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "type" ; + linkml:definition_uri <https://w3id.org/GHGA/type> ; + linkml:domain <https://w3id.org/GHGA/Protocol> ; + linkml:domain_of <https://w3id.org/GHGA/Protocol> ; + linkml:is_a <https://w3id.org/GHGA/named_thing_type> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/Protocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/type> ; + linkml:usage_slot_name "type" . + <https://w3id.org/GHGA/protocol_url> a linkml:SlotDefinition ; skos:definition "URL for the resource that describes this Protocol." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -2697,8 +2742,24 @@ linkml:slot_uri <https://w3id.org/GHGA/url> ; linkml:usage_slot_name "url" . +<https://w3id.org/GHGA/protocol_xref> a linkml:SlotDefinition ; + skos:definition "One or more cross-references for this Protocol. (Eg: manufacturer protocol, protocol from publication etc )" ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "xref" ; + linkml:definition_uri <https://w3id.org/GHGA/xref> ; + linkml:domain <https://w3id.org/GHGA/Protocol> ; + linkml:domain_of <https://w3id.org/GHGA/Protocol> ; + linkml:is_a <https://w3id.org/GHGA/named_thing_xref> ; + linkml:is_usage_slot true ; + linkml:multivalued true ; + linkml:owner <https://w3id.org/GHGA/Protocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/xref> ; + linkml:usage_slot_name "xref" . + <https://w3id.org/GHGA/read_length> a linkml:SlotDefinition ; - skos:definition "Length of sequencing reads (eg: Long or short or actual number of the read length etc)." ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C153362> ; + skos:definition "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" ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/read_length> ; linkml:domain_of <https://w3id.org/GHGA/SequencingProtocol> ; @@ -2707,7 +2768,8 @@ linkml:slot_uri <https://w3id.org/GHGA/read_length> . <https://w3id.org/GHGA/read_pair_number> a linkml:SlotDefinition ; - skos:definition "Denotes whether a submitted FASTQ file contains forward (R1) or reverse (R2) reads for paired-end sequencing." ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C172300> ; + 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 <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/read_pair_number> ; linkml:domain_of <https://w3id.org/GHGA/SequencingProtocol> ; @@ -2716,7 +2778,8 @@ linkml:slot_uri <https://w3id.org/GHGA/read_pair_number> . <https://w3id.org/GHGA/reference_annotation> a linkml:SlotDefinition ; - skos:definition "Reference genome(s) or annotation(s) used for prior analyses (eg: GRCh38.p13)." ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C164388> ; + skos:definition "A published genetic sequence that is used as a reference sequence against which other sequences are compared. Reference genome(s) or annotation(s) used for prior analyses (eg: GRCh38.p13)." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/reference_annotation> ; linkml:domain_of <https://w3id.org/GHGA/SequencingProtocol> ; @@ -2725,7 +2788,8 @@ linkml:slot_uri <https://w3id.org/GHGA/reference_annotation> . <https://w3id.org/GHGA/rnaseq_strandedness> a linkml:SlotDefinition ; - skos:definition "The strandedness of the library, whether reads come from both strands of the cDNA or only from the first (antisense) or the second (sense) strand." ; + skos:broadMatch <http://purl.obolibrary.org/obo/NCIT_C48673> ; + skos:definition "The strandedness of the library, whether reads come from both strands of the cDNA or only from the first (antisense) or the second (sense) strand." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/rnaseq_strandedness> ; linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; @@ -2734,6 +2798,7 @@ linkml:slot_uri <https://w3id.org/GHGA/rnaseq_strandedness> . <https://w3id.org/GHGA/sample_barcode_read> a linkml:SlotDefinition ; + skos:closeMatch <http://www.ebi.ac.uk/efo/EFO_0010210> ; skos:definition "The type of read that contains the sample barcode (eg: index1/index2/read1/read2)." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/sample_barcode_read> ; @@ -2742,17 +2807,37 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/sample_barcode_read> . -<https://w3id.org/GHGA/sequencing_center> a linkml:SlotDefinition ; - skos:definition "Center where sample was sequenced." ; +<https://w3id.org/GHGA/sequencing_length> a linkml:SlotDefinition ; + skos:definition "Long or Short Read." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/sequencing_center> ; + linkml:definition_uri <https://w3id.org/GHGA/sequencing_length> ; linkml:domain_of <https://w3id.org/GHGA/SequencingProtocol> ; linkml:owner <https://w3id.org/GHGA/SequencingProtocol> ; linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/sequencing_center> . + linkml:slot_uri <https://w3id.org/GHGA/sequencing_length> . + +<https://w3id.org/GHGA/size> a linkml:SlotDefinition ; + skos:definition "The size of a file in bytes." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/size> ; + linkml:domain_of <https://w3id.org/GHGA/File> ; + linkml:owner <https://w3id.org/GHGA/File> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/size> . + +<https://w3id.org/GHGA/storage> a linkml:SlotDefinition ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C60824> ; + skos:definition "Methods by which sample is stored (e.g. frozen in liquid nitrogen)." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/storage> ; + linkml:domain_of <https://w3id.org/GHGA/Sample> ; + linkml:owner <https://w3id.org/GHGA/Sample> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/storage> . <https://w3id.org/GHGA/target_coverage> a linkml:SlotDefinition ; - skos:definition "Mean coverage for whole genome sequencing, or mean target coverage for whole exome and targeted sequencing" ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C155320> ; + skos:definition "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." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/target_coverage> ; linkml:domain_of <https://w3id.org/GHGA/SequencingProtocol> ; @@ -2761,7 +2846,8 @@ linkml:slot_uri <https://w3id.org/GHGA/target_coverage> . <https://w3id.org/GHGA/target_regions> a linkml:SlotDefinition ; - skos:definition "subset of genes or specific regions of the genome, which are most likely to be involved in the phenotype under study" ; + skos:broadMatch <http://purl.obolibrary.org/obo/NCIT_C130177> ; + skos:definition "Subset of genes or specific regions of the genome, which are most likely to be involved in the phenotype under study. " ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/target_regions> ; linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; @@ -2769,16 +2855,8 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/target_regions> . -<https://w3id.org/GHGA/technical_replicates> a linkml:SlotDefinition ; - skos:definition "Number of replicate samples (technical replicates)." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/technical_replicates> ; - linkml:domain_of <https://w3id.org/GHGA/Experiment> ; - linkml:owner <https://w3id.org/GHGA/Experiment> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/technical_replicates> . - <https://w3id.org/GHGA/umi_barcode_offset> a linkml:SlotDefinition ; + skos:closeMatch <http://www.ebi.ac.uk/efo/EFO_0010207> ; skos:definition "The offset in sequence of the UMI identifying barcode. (E.g. \"16\")." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/umi_barcode_offset> ; @@ -2788,7 +2866,8 @@ linkml:slot_uri <https://w3id.org/GHGA/umi_barcode_offset> . <https://w3id.org/GHGA/umi_barcode_read> a linkml:SlotDefinition ; - skos:definition "The type of read that contains the UMI barcode (Eg: index1/index2/read1/read2)" ; + skos:closeMatch <http://www.ebi.ac.uk/efo/EFO_0010208> ; + skos:definition "The type of read that contains the UMI barcode (Eg: index1/index2/read1/read2)." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/umi_barcode_read> ; linkml:domain_of <https://w3id.org/GHGA/SequencingProtocol> ; @@ -2797,6 +2876,7 @@ linkml:slot_uri <https://w3id.org/GHGA/umi_barcode_read> . <https://w3id.org/GHGA/umi_barcode_size> a linkml:SlotDefinition ; + skos:closeMatch <http://www.ebi.ac.uk/efo/EFO_0010209> ; skos:definition "The size of the UMI identifying barcode (Eg. \"10\")." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/umi_barcode_size> ; @@ -2806,7 +2886,8 @@ linkml:slot_uri <https://w3id.org/GHGA/umi_barcode_size> . <https://w3id.org/GHGA/vital_status_at_sampling> a linkml:SlotDefinition ; - skos:definition "Vital status at the age of the sampling." ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C25717> ; + skos:definition "Vital Status of an Individual at the point of sampling (eg:\"Alive\", \"Deceased\")." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/vital_status_at_sampling> ; linkml:domain_of <https://w3id.org/GHGA/Sample> ; @@ -2860,8 +2941,19 @@ <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref> . +<https://w3id.org/GHGA/ancestry> a linkml:SlotDefinition ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C176763> ; + skos:definition "A person's descent or lineage, from a person or from a population." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/ancestry> ; + linkml:domain_of <https://w3id.org/GHGA/Individual> ; + linkml:owner <https://w3id.org/GHGA/Individual> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/ancestry> . + <https://w3id.org/GHGA/dataset_description> a linkml:SlotDefinition ; skos:definition "Description of an entity." ; + skos:exactMatch <http://semanticscience.org/resource/SIO_000185> ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "description" ; linkml:definition_uri <https://w3id.org/GHGA/description> ; @@ -2940,6 +3032,36 @@ linkml:slot_uri <https://w3id.org/GHGA/type> ; linkml:usage_slot_name "type" . +<https://w3id.org/GHGA/ethnicity> a linkml:SlotDefinition ; + skos:definition "A social group characterized by a distinctive social and cultural tradition that is maintained from generation to generation." ; + skos:exactMatch <http://semanticscience.org/resource/SIO_001014> ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/ethnicity> ; + linkml:domain_of <https://w3id.org/GHGA/Individual> ; + linkml:owner <https://w3id.org/GHGA/Individual> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/ethnicity> . + +<https://w3id.org/GHGA/gender> a linkml:SlotDefinition ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C17357> ; + skos:definition "Identification as male/masculine, female/feminine or something else, and association with a (social) role or set of behavioral and cultural traits." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/gender> ; + linkml:domain_of <https://w3id.org/GHGA/Individual> ; + linkml:owner <https://w3id.org/GHGA/Individual> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/gender> . + +<https://w3id.org/GHGA/geographical_region> a linkml:SlotDefinition ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C16632> ; + skos:definition "The geographical region where the Individual is located. Any demarcated area of the Earth; may be determined by both natural and human boundaries." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/geographical_region> ; + linkml:domain_of <https://w3id.org/GHGA/Individual> ; + linkml:owner <https://w3id.org/GHGA/Individual> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/geographical_region> . + <https://w3id.org/GHGA/submission_date> a linkml:SlotDefinition ; skos:definition "The date when submission was completed." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -2958,6 +3080,16 @@ linkml:range <https://w3id.org/GHGA/submission_status_enum> ; linkml:slot_uri <https://w3id.org/GHGA/submission_status> . +<https://w3id.org/GHGA/year_of_birth> a linkml:SlotDefinition ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C83164> ; + skos:definition "The year in which the individual was born." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/year_of_birth> ; + linkml:domain_of <https://w3id.org/GHGA/Individual> ; + linkml:owner <https://w3id.org/GHGA/Individual> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/year_of_birth> . + <https://w3id.org/GHGA/Committee> a linkml:ClassDefinition ; skos:definition "A group of people organized for a specific purpose." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3030,15 +3162,6 @@ <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref> . -<https://w3id.org/GHGA/abstract> a linkml:SlotDefinition ; - skos:definition "The abstract - a short blurb - associated with an entity." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/abstract> ; - linkml:domain_of <https://w3id.org/GHGA/Publication> ; - linkml:owner <https://w3id.org/GHGA/Publication> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/abstract> . - <https://w3id.org/GHGA/accession> a linkml:SlotDefinition ; skos:definition "A unique identifier assigned to an entity for the sole purpose of referring to that entity in a global scope." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3049,7 +3172,8 @@ linkml:slot_uri <https://w3id.org/GHGA/accession> . <https://w3id.org/GHGA/affiliation> a linkml:SlotDefinition ; - skos:definition "Affiliations associated with an instance." ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C25412> ; + skos:definition "Institutions associated with this study." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/affiliation> ; linkml:domain_of <https://w3id.org/GHGA/Study> ; @@ -3058,7 +3182,8 @@ linkml:slot_uri <https://w3id.org/GHGA/affiliation> . <https://w3id.org/GHGA/age> a linkml:SlotDefinition ; - skos:definition "The age of a person." ; + skos:closeMatch <http://www.ebi.ac.uk/efo/EFO_0000246> ; + skos:definition "Age of an individual." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/age> ; linkml:domain_of <https://w3id.org/GHGA/Individual> ; @@ -3066,86 +3191,32 @@ linkml:range <https://w3id.org/GHGA/integer> ; linkml:slot_uri <https://w3id.org/GHGA/age> . -<https://w3id.org/GHGA/ancestry> a linkml:SlotDefinition ; - skos:definition "Ancestral group to which a person belongs to." ; +<https://w3id.org/GHGA/biological_replicates> a linkml:SlotDefinition ; + skos:definition "Number of independent samples (biological replicates)." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/ancestry> ; - linkml:domain_of <https://w3id.org/GHGA/Individual> ; - linkml:owner <https://w3id.org/GHGA/Individual> ; + linkml:definition_uri <https://w3id.org/GHGA/biological_replicates> ; + linkml:domain_of <https://w3id.org/GHGA/Experiment> ; + linkml:owner <https://w3id.org/GHGA/Experiment> ; linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/ancestry> . + linkml:slot_uri <https://w3id.org/GHGA/biological_replicates> . -<https://w3id.org/GHGA/category> a linkml:SlotDefinition ; - skos:definition "The file category." ; +<https://w3id.org/GHGA/creation_date> a linkml:SlotDefinition ; + skos:definition "Timestamp (in ISO 8601 format) when the entity was created." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/category> ; - linkml:domain_of <https://w3id.org/GHGA/File> ; - linkml:owner <https://w3id.org/GHGA/File> ; + linkml:definition_uri <https://w3id.org/GHGA/creation_date> ; + linkml:domain_of <https://w3id.org/GHGA/NamedThing> ; + linkml:owner <https://w3id.org/GHGA/NamedThing> ; linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/category> . + linkml:slot_uri <https://w3id.org/GHGA/creation_date> . -<https://w3id.org/GHGA/checksum> a linkml:SlotDefinition ; - skos:definition "The checksum for a file." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/checksum> ; - linkml:domain_of <https://w3id.org/GHGA/File> ; - linkml:owner <https://w3id.org/GHGA/File> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/checksum> . - -<https://w3id.org/GHGA/creation_date> a linkml:SlotDefinition ; - skos:definition "Timestamp (in ISO 8601 format) when the entity was created." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/creation_date> ; - linkml:domain_of <https://w3id.org/GHGA/NamedThing> ; - linkml:owner <https://w3id.org/GHGA/NamedThing> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/creation_date> . - -<https://w3id.org/GHGA/ethnicity> a linkml:SlotDefinition ; - skos:definition "Ethnicity of a person." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/ethnicity> ; - linkml:domain_of <https://w3id.org/GHGA/Individual> ; - linkml:owner <https://w3id.org/GHGA/Individual> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/ethnicity> . - -<https://w3id.org/GHGA/file_index> a linkml:SlotDefinition ; - skos:definition "The index file corresponding to the file." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/file_index> ; - linkml:domain_of <https://w3id.org/GHGA/File> ; - linkml:owner <https://w3id.org/GHGA/File> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/file_index> . - -<https://w3id.org/GHGA/format> a linkml:SlotDefinition ; - skos:definition "The format of a file." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/format> ; - linkml:domain_of <https://w3id.org/GHGA/File> ; - linkml:owner <https://w3id.org/GHGA/File> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/format> . - -<https://w3id.org/GHGA/gender> a linkml:SlotDefinition ; - skos:definition "The assemblage of properties that distinguish people on the basis of the societal role s expected for the two sexes. [NCI]" ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/gender> ; - linkml:domain_of <https://w3id.org/GHGA/Individual> ; - linkml:owner <https://w3id.org/GHGA/Individual> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/gender> . - -<https://w3id.org/GHGA/geographical_region> a linkml:SlotDefinition ; - skos:definition "The geographical region linked to an entity." ; +<https://w3id.org/GHGA/experimental_replicates> a linkml:SlotDefinition ; + skos:definition "Number of experiment replications." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/geographical_region> ; - linkml:domain_of <https://w3id.org/GHGA/Individual> ; - linkml:owner <https://w3id.org/GHGA/Individual> ; + linkml:definition_uri <https://w3id.org/GHGA/experimental_replicates> ; + linkml:domain_of <https://w3id.org/GHGA/Experiment> ; + linkml:owner <https://w3id.org/GHGA/Experiment> ; linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/geographical_region> . + linkml:slot_uri <https://w3id.org/GHGA/experimental_replicates> . <https://w3id.org/GHGA/has_analysis_process> a linkml:SlotDefinition ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3290,14 +3361,14 @@ linkml:range <https://w3id.org/GHGA/WorkflowStep> ; linkml:slot_uri <https://w3id.org/GHGA/has_workflow_step> . -<https://w3id.org/GHGA/isolation> a linkml:SlotDefinition ; - skos:definition "Method or device employed for collecting/isolating a sample." ; +<https://w3id.org/GHGA/instrument_model> a linkml:SlotDefinition ; + skos:definition "The name and model of the technology platform used to perform sequencing." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/isolation> ; - linkml:domain_of <https://w3id.org/GHGA/Sample> ; - linkml:owner <https://w3id.org/GHGA/Sample> ; + linkml:definition_uri <https://w3id.org/GHGA/instrument_model> ; + linkml:domain_of <https://w3id.org/GHGA/SequencingProtocol> ; + linkml:owner <https://w3id.org/GHGA/SequencingProtocol> ; linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/isolation> . + linkml:slot_uri <https://w3id.org/GHGA/instrument_model> . <https://w3id.org/GHGA/key_type> a linkml:SlotDefinition ; skos:definition "The semantic type for the key of an attribute." ; @@ -3308,6 +3379,83 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/key_type> . +<https://w3id.org/GHGA/library_construction> a linkml:SlotDefinition ; + skos:closeMatch <http://purl.obolibrary.org/obo/OBI_0000711> ; + skos:definition "The name of a library construction approach being used. (eg: \"10X v2 sequencing\" or \"Smart-seq2\")" ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/library_construction> ; + linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/library_construction> . + +<https://w3id.org/GHGA/library_construction_kit_manufacturer> a linkml:SlotDefinition ; + skos:definition "Manufacturer of library construction kit" ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/library_construction_kit_manufacturer> ; + linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/library_construction_kit_manufacturer> . + +<https://w3id.org/GHGA/library_construction_kit_retail_name> a linkml:SlotDefinition ; + skos:broadMatch <http://purl.obolibrary.org/obo/NCIT_C177583> ; + skos:definition "A unique identifier for the kit used to construct a genomic library. This may include the vendor name, kit name and kit version (e.g. Agilent sure select Human Exome V8, Twist RefSeq Exome, etc.)" ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/library_construction_kit_retail_name> ; + linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/library_construction_kit_retail_name> . + +<https://w3id.org/GHGA/library_layout> a linkml:SlotDefinition ; + skos:definition "Describe whether the library was sequenced in single-end (forward or reverse) or paired-end mode" ; + skos:exactMatch <http://purl.obolibrary.org/obo/NCIT_C175894> ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/library_layout> ; + linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/library_layout> . + +<https://w3id.org/GHGA/library_name> a linkml:SlotDefinition ; + skos:definition "A short name identifying the library to potential users. The same name may refer to multiple versions of the same continually updated library." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/library_name> ; + linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/library_name> . + +<https://w3id.org/GHGA/library_preparation> a linkml:SlotDefinition ; + skos:closeMatch <http://purl.obolibrary.org/obo/OBI_0000711> ; + skos:definition "The general method for sequencing library construction (e.g. KAPA PCR-free)." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/library_preparation> ; + linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/library_preparation> . + +<https://w3id.org/GHGA/library_selection> a linkml:SlotDefinition ; + skos:closeMatch <http://purl.obolibrary.org/obo/GENEPIO_0001940> ; + skos:definition "Whether any method was used to select for or against, enrich, or screen the material being sequenced. Library Selection method (e.g. random, PCA, cDNA, etc )" ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/library_selection> ; + linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/library_selection> . + +<https://w3id.org/GHGA/library_type> a linkml:SlotDefinition ; + skos:definition "Describe the level of omics analysis (eg: Metagenome, transcriptome, etc) " ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/library_type> ; + linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:owner <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/library_type> . + <https://w3id.org/GHGA/main_contact> a linkml:SlotDefinition ; skos:definition "The person who is the main contact for a committee." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3371,8 +3519,19 @@ linkml:range <https://w3id.org/GHGA/user_role_enum> ; linkml:slot_uri <https://w3id.org/GHGA/role> . +<https://w3id.org/GHGA/sequencing_center> a linkml:SlotDefinition ; + skos:closeMatch <http://purl.obolibrary.org/obo/GENEPIO_0000070> ; + skos:definition "Center where sample was sequenced." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/sequencing_center> ; + linkml:domain_of <https://w3id.org/GHGA/SequencingProtocol> ; + linkml:owner <https://w3id.org/GHGA/SequencingProtocol> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/sequencing_center> . + <https://w3id.org/GHGA/sex> a linkml:SlotDefinition ; - skos:definition "The assemblage of physical properties or qualities by which male is distinguished from female. [NCI]" ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C28421> ; + skos:definition "The assemblage of physical properties or qualities by which male is distinguished from female; the physical difference between male and female; the distinguishing peculiarity of male or female." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/sex> ; linkml:domain_of <https://w3id.org/GHGA/Individual> ; @@ -3380,25 +3539,17 @@ linkml:range <https://w3id.org/GHGA/biological_sex_enum> ; linkml:slot_uri <https://w3id.org/GHGA/sex> . -<https://w3id.org/GHGA/size> a linkml:SlotDefinition ; - skos:definition "The size of a file in bytes." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/size> ; - linkml:domain_of <https://w3id.org/GHGA/File> ; - linkml:owner <https://w3id.org/GHGA/File> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/size> . - -<https://w3id.org/GHGA/storage> a linkml:SlotDefinition ; - skos:definition "Methods by which a sample is stored." ; +<https://w3id.org/GHGA/technical_replicates> a linkml:SlotDefinition ; + skos:definition "Number of replicate samples (technical replicates)." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/storage> ; - linkml:domain_of <https://w3id.org/GHGA/Sample> ; - linkml:owner <https://w3id.org/GHGA/Sample> ; + linkml:definition_uri <https://w3id.org/GHGA/technical_replicates> ; + linkml:domain_of <https://w3id.org/GHGA/Experiment> ; + linkml:owner <https://w3id.org/GHGA/Experiment> ; linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/storage> . + linkml:slot_uri <https://w3id.org/GHGA/technical_replicates> . <https://w3id.org/GHGA/telephone> a linkml:SlotDefinition ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C40978> ; skos:definition "The telephone number associated with a person." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/telephone> ; @@ -3408,7 +3559,8 @@ linkml:slot_uri <https://w3id.org/GHGA/telephone> . <https://w3id.org/GHGA/tissue> a linkml:SlotDefinition ; - skos:definition "The source of a sample." ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C12801> ; + skos:definition "An anatomical structure consisting of similarly specialized cells and intercellular matrix, aggregated according to genetically determined spatial relationships, performing a specific function." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/tissue> ; linkml:domain_of <https://w3id.org/GHGA/Sample> ; @@ -3444,23 +3596,15 @@ linkml:slot_uri <https://w3id.org/GHGA/value_type> . <https://w3id.org/GHGA/vital_status> a linkml:SlotDefinition ; - skos:definition "Vital status of a person." ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C25717> ; + skos:definition "The state or condition of being living or deceased; also includes the case where the vital status is unknown." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/vital_status> ; linkml:domain_of <https://w3id.org/GHGA/Individual> ; linkml:owner <https://w3id.org/GHGA/Individual> ; - linkml:range <https://w3id.org/GHGA/string> ; + linkml:range <https://w3id.org/GHGA/vital_status_enum> ; linkml:slot_uri <https://w3id.org/GHGA/vital_status> . -<https://w3id.org/GHGA/year_of_birth> a linkml:SlotDefinition ; - skos:definition "Year of Birth of a person." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/year_of_birth> ; - linkml:domain_of <https://w3id.org/GHGA/Individual> ; - linkml:owner <https://w3id.org/GHGA/Individual> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/year_of_birth> . - <https://w3id.org/GHGA/Cohort> a linkml:ClassDefinition ; 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." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3519,6 +3663,7 @@ <https://w3id.org/GHGA/title> . <https://w3id.org/GHGA/email> a linkml:SlotDefinition ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C42775> ; skos:definition "Email of a person." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/email> ; @@ -3817,16 +3962,6 @@ linkml:required true ; linkml:slot_uri <https://w3id.org/GHGA/id> . -<https://w3id.org/GHGA/xref> a linkml:SlotDefinition ; - skos:definition "Alternate identifiers for an entity." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/xref> ; - linkml:domain_of <https://w3id.org/GHGA/NamedThing> ; - linkml:multivalued true ; - linkml:owner <https://w3id.org/GHGA/NamedThing> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/xref> . - <https://w3id.org/GHGA/DeprecationMixin> a linkml:ClassDefinition ; skos:definition "A mixin that keeps track of the deprecation status." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4004,6 +4139,16 @@ linkml:range <https://w3id.org/GHGA/File> ; linkml:slot_uri <https://w3id.org/GHGA/has_output> . +<https://w3id.org/GHGA/xref> a linkml:SlotDefinition ; + skos:definition "Alternate identifiers for an entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/xref> ; + linkml:domain_of <https://w3id.org/GHGA/NamedThing> ; + linkml:multivalued true ; + linkml:owner <https://w3id.org/GHGA/NamedThing> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/xref> . + <https://w3id.org/GHGA/DataUseCondition> a linkml:ClassDefinition ; skos:definition "Data Use Condition represents the use conditions associated with a Dataset. A permission field can have one or more terms that collectively defines the data use condition. The modifier determines the interpretation of the use permission(s)." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4013,15 +4158,6 @@ linkml:slots <https://w3id.org/GHGA/data_use_condition_modifier>, <https://w3id.org/GHGA/data_use_condition_permission> . -<https://w3id.org/GHGA/type> a linkml:SlotDefinition ; - skos:definition "The type of an entity." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/type> ; - linkml:domain_of <https://w3id.org/GHGA/NamedThing> ; - linkml:owner <https://w3id.org/GHGA/NamedThing> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/type> . - <https://w3id.org/GHGA/AnalysisDataset> a linkml:ClassDefinition ; skos:definition "An Analysis Dataset is a collection of Files generated from one or more Analysis performed on data from one or more Studies." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4118,6 +4254,15 @@ linkml:range <https://w3id.org/GHGA/Attribute> ; linkml:slot_uri <https://w3id.org/GHGA/has_attribute> . +<https://w3id.org/GHGA/type> a linkml:SlotDefinition ; + skos:definition "The type of an entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/type> ; + linkml:domain_of <https://w3id.org/GHGA/NamedThing> ; + linkml:owner <https://w3id.org/GHGA/NamedThing> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/type> . + <https://w3id.org/GHGA/Member> a linkml:ClassDefinition ; skos:definition "Member of an Organization or a Committee." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4139,6 +4284,23 @@ <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref> . +<https://w3id.org/GHGA/Publication> a linkml:ClassDefinition ; + 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." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/Publication> ; + linkml:definition_uri <https://w3id.org/GHGA/Publication> ; + linkml:is_a <https://w3id.org/GHGA/InformationContentEntity> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/abstract>, + <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_has_attribute>, + <https://w3id.org/GHGA/named_thing_type>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/publication_id>, + <https://w3id.org/GHGA/publication_title>, + <https://w3id.org/GHGA/publication_xref> . + <https://w3id.org/GHGA/DataAccessCommittee> a linkml:ClassDefinition ; skos:definition "A group of members that are delegated to grant access to one or more datasets after ensuring the minimum criteria for data sharing has been met, and request for data use does not raise ethical and/or legal concerns." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4192,57 +4354,18 @@ <https://w3id.org/GHGA/project_has_study>, <https://w3id.org/GHGA/project_title> . -<https://w3id.org/GHGA/Protocol> a linkml:ClassDefinition ; - skos:altLabel "experiment protocol", - "library protocol" ; - skos:closeMatch <ncit:C41111> ; - 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 <https://w3id.org/GHGA/OBI:0000272> ; +<https://w3id.org/GHGA/AnalysisProcess> a linkml:ClassDefinition ; + 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." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/Protocol> ; - linkml:definition_uri <https://w3id.org/GHGA/Protocol> ; - linkml:is_a <https://w3id.org/GHGA/InformationContentEntity> ; + linkml:class_uri <https://w3id.org/GHGA/AnalysisProcess> ; + linkml:definition_uri <https://w3id.org/GHGA/AnalysisProcess> ; + linkml:is_a <https://w3id.org/GHGA/PlannedProcess> ; linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_type>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref>, - <https://w3id.org/GHGA/protocol_description>, - <https://w3id.org/GHGA/protocol_has_attribute>, - <https://w3id.org/GHGA/protocol_name>, - <https://w3id.org/GHGA/protocol_url> . - -<https://w3id.org/GHGA/Publication> a linkml:ClassDefinition ; - 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." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/Publication> ; - linkml:definition_uri <https://w3id.org/GHGA/Publication> ; - linkml:is_a <https://w3id.org/GHGA/InformationContentEntity> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_has_attribute>, - <https://w3id.org/GHGA/named_thing_type>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/publication_abstract>, - <https://w3id.org/GHGA/publication_id>, - <https://w3id.org/GHGA/publication_title>, - <https://w3id.org/GHGA/publication_xref> . - -<https://w3id.org/GHGA/AnalysisProcess> a linkml:ClassDefinition ; - 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." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/AnalysisProcess> ; - linkml:definition_uri <https://w3id.org/GHGA/AnalysisProcess> ; - linkml:is_a <https://w3id.org/GHGA/PlannedProcess> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/analysis_process_has_agent>, - <https://w3id.org/GHGA/analysis_process_has_input>, - <https://w3id.org/GHGA/analysis_process_has_output>, - <https://w3id.org/GHGA/analysis_process_has_workflow_step>, - <https://w3id.org/GHGA/named_thing_accession>, + linkml:slots <https://w3id.org/GHGA/analysis_process_has_agent>, + <https://w3id.org/GHGA/analysis_process_has_input>, + <https://w3id.org/GHGA/analysis_process_has_output>, + <https://w3id.org/GHGA/analysis_process_has_workflow_step>, + <https://w3id.org/GHGA/named_thing_accession>, <https://w3id.org/GHGA/named_thing_creation_date>, <https://w3id.org/GHGA/named_thing_has_attribute>, <https://w3id.org/GHGA/named_thing_id>, @@ -4308,24 +4431,6 @@ <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref> . -<https://w3id.org/GHGA/name> a linkml:SlotDefinition ; - skos:definition "The name for an entity." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/name> ; - linkml:domain_of <https://w3id.org/GHGA/Agent>, - <https://w3id.org/GHGA/Biospecimen>, - <https://w3id.org/GHGA/Committee>, - <https://w3id.org/GHGA/DataAccessCommittee>, - <https://w3id.org/GHGA/DataAccessPolicy>, - <https://w3id.org/GHGA/DiseaseOrPhenotypicFeature>, - <https://w3id.org/GHGA/File>, - <https://w3id.org/GHGA/Population>, - <https://w3id.org/GHGA/Protocol>, - <https://w3id.org/GHGA/Sample> ; - linkml:owner <https://w3id.org/GHGA/Committee> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/name> . - <https://w3id.org/GHGA/Analysis> a linkml:ClassDefinition ; skos:altLabel "data analysis" ; skos:definition "An Analysis is a data transformation that transforms input data to output data. The workflow used to achieve this transformation and the individual steps are also captured." ; @@ -4388,6 +4493,67 @@ <https://w3id.org/GHGA/release_status>, <https://w3id.org/GHGA/replaced_by> . +<https://w3id.org/GHGA/Protocol> a linkml:ClassDefinition ; + skos:altLabel "experiment protocol", + "library protocol" ; + skos:closeMatch <ncit:C41111> ; + 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 <https://w3id.org/GHGA/OBI:0000272> ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/Protocol> ; + linkml:definition_uri <https://w3id.org/GHGA/Protocol> ; + linkml:is_a <https://w3id.org/GHGA/InformationContentEntity> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/protocol_description>, + <https://w3id.org/GHGA/protocol_has_attribute>, + <https://w3id.org/GHGA/protocol_name>, + <https://w3id.org/GHGA/protocol_type>, + <https://w3id.org/GHGA/protocol_url>, + <https://w3id.org/GHGA/protocol_xref> . + +<https://w3id.org/GHGA/name> a linkml:SlotDefinition ; + skos:definition "The name for an entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/name> ; + linkml:domain_of <https://w3id.org/GHGA/Agent>, + <https://w3id.org/GHGA/Biospecimen>, + <https://w3id.org/GHGA/Committee>, + <https://w3id.org/GHGA/DataAccessCommittee>, + <https://w3id.org/GHGA/DataAccessPolicy>, + <https://w3id.org/GHGA/DiseaseOrPhenotypicFeature>, + <https://w3id.org/GHGA/File>, + <https://w3id.org/GHGA/Population>, + <https://w3id.org/GHGA/Protocol>, + <https://w3id.org/GHGA/Sample> ; + linkml:owner <https://w3id.org/GHGA/Committee> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/name> . + +<https://w3id.org/GHGA/File> a linkml:ClassDefinition ; + skos:altLabel "file object" ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/File> ; + linkml:definition_uri <https://w3id.org/GHGA/File> ; + linkml:is_a <https://w3id.org/GHGA/InformationContentEntity> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/category>, + <https://w3id.org/GHGA/checksum>, + <https://w3id.org/GHGA/file_index>, + <https://w3id.org/GHGA/file_name>, + <https://w3id.org/GHGA/file_type>, + <https://w3id.org/GHGA/format>, + <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_has_attribute>, + <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/size> . + <https://w3id.org/GHGA/DataAccessPolicy> a linkml:ClassDefinition ; skos:definition "A Data Access Policy specifies under which circumstances, legal or otherwise, a user can have access to one or more Datasets belonging to one or more Studies." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4409,39 +4575,9 @@ <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref> . -<https://w3id.org/GHGA/LibraryPreparationProtocol> a linkml:ClassDefinition ; - skos:definition "Information about the library preparation of an Experiment." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/LibraryPreparationProtocol> ; - linkml:definition_uri <https://w3id.org/GHGA/LibraryPreparationProtocol> ; - linkml:is_a <https://w3id.org/GHGA/Protocol> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/end_bias>, - <https://w3id.org/GHGA/library_construction>, - <https://w3id.org/GHGA/library_construction_kit_manufacturer>, - <https://w3id.org/GHGA/library_construction_kit_retail_name>, - <https://w3id.org/GHGA/library_layout>, - <https://w3id.org/GHGA/library_level>, - <https://w3id.org/GHGA/library_name>, - <https://w3id.org/GHGA/library_preparation>, - <https://w3id.org/GHGA/library_preparation_protocol_description>, - <https://w3id.org/GHGA/library_preparation_protocol_has_attribute>, - <https://w3id.org/GHGA/library_preparation_protocol_name>, - <https://w3id.org/GHGA/library_selection>, - <https://w3id.org/GHGA/library_type>, - <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_type>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref>, - <https://w3id.org/GHGA/primer>, - <https://w3id.org/GHGA/protocol_url>, - <https://w3id.org/GHGA/rnaseq_strandedness>, - <https://w3id.org/GHGA/target_regions> . - <https://w3id.org/GHGA/description> a linkml:SlotDefinition ; skos:definition "Description of an entity." ; + skos:exactMatch <http://semanticscience.org/resource/SIO_000185> ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/description> ; linkml:domain_of <https://w3id.org/GHGA/Agent>, @@ -4459,6 +4595,31 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/description> . +<https://w3id.org/GHGA/Sample> 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 <biolink:MaterialSample>, + <https://w3id.org/GHGA/SIO:001050> ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/Sample> ; + linkml:definition_uri <https://w3id.org/GHGA/Sample> ; + linkml:is_a <https://w3id.org/GHGA/MaterialEntity> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/isolation>, + <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_has_attribute>, + <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/sample_description>, + <https://w3id.org/GHGA/sample_has_biospecimen>, + <https://w3id.org/GHGA/sample_has_individual>, + <https://w3id.org/GHGA/sample_name>, + <https://w3id.org/GHGA/sample_tissue>, + <https://w3id.org/GHGA/sample_type>, + <https://w3id.org/GHGA/sample_xref>, + <https://w3id.org/GHGA/storage>, + <https://w3id.org/GHGA/vital_status_at_sampling> . + <https://w3id.org/GHGA/Study> 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 <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4486,94 +4647,6 @@ <https://w3id.org/GHGA/study_title>, <https://w3id.org/GHGA/study_type> . -<https://w3id.org/GHGA/Experiment> a linkml:ClassDefinition ; - skos:closeMatch <ncit:C42790> ; - 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 <https://w3id.org/GHGA/SIO:000994> ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/Experiment> ; - linkml:definition_uri <https://w3id.org/GHGA/Experiment> ; - linkml:is_a <https://w3id.org/GHGA/Investigation> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/biological_replicates>, - <https://w3id.org/GHGA/deprecated>, - <https://w3id.org/GHGA/deprecation_date>, - <https://w3id.org/GHGA/experiment_description>, - <https://w3id.org/GHGA/experiment_has_experiment_process>, - <https://w3id.org/GHGA/experiment_has_file>, - <https://w3id.org/GHGA/experiment_has_sample>, - <https://w3id.org/GHGA/experiment_has_study>, - <https://w3id.org/GHGA/experiment_has_technology>, - <https://w3id.org/GHGA/experiment_title>, - <https://w3id.org/GHGA/experimental_replicates>, - <https://w3id.org/GHGA/has_publication>, - <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_has_attribute>, - <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_type>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref>, - <https://w3id.org/GHGA/release_date>, - <https://w3id.org/GHGA/release_status>, - <https://w3id.org/GHGA/replaced_by>, - <https://w3id.org/GHGA/technical_replicates> . - -<https://w3id.org/GHGA/File> a linkml:ClassDefinition ; - skos:altLabel "file object" ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/File> ; - linkml:definition_uri <https://w3id.org/GHGA/File> ; - linkml:is_a <https://w3id.org/GHGA/InformationContentEntity> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/file_category>, - <https://w3id.org/GHGA/file_checksum>, - <https://w3id.org/GHGA/file_file_index>, - <https://w3id.org/GHGA/file_format>, - <https://w3id.org/GHGA/file_size>, - <https://w3id.org/GHGA/file_type>, - <https://w3id.org/GHGA/name>, - <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_has_attribute>, - <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . - -<https://w3id.org/GHGA/SequencingProtocol> a linkml:ClassDefinition ; - skos:definition "Information about the sequencing of a sample." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/SequencingProtocol> ; - linkml:definition_uri <https://w3id.org/GHGA/SequencingProtocol> ; - linkml:is_a <https://w3id.org/GHGA/Protocol> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/cell_barcode_offset>, - <https://w3id.org/GHGA/cell_barcode_read>, - <https://w3id.org/GHGA/cell_barcode_size>, - <https://w3id.org/GHGA/flow_cell_id>, - <https://w3id.org/GHGA/flow_cell_type>, - <https://w3id.org/GHGA/instrument_model>, - <https://w3id.org/GHGA/lane_number>, - <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_type>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref>, - <https://w3id.org/GHGA/protocol_url>, - <https://w3id.org/GHGA/read_length>, - <https://w3id.org/GHGA/read_pair_number>, - <https://w3id.org/GHGA/reference_annotation>, - <https://w3id.org/GHGA/sample_barcode_read>, - <https://w3id.org/GHGA/sequencing_center>, - <https://w3id.org/GHGA/sequencing_protocol_description>, - <https://w3id.org/GHGA/sequencing_protocol_has_attribute>, - <https://w3id.org/GHGA/sequencing_protocol_name>, - <https://w3id.org/GHGA/target_coverage>, - <https://w3id.org/GHGA/umi_barcode_offset>, - <https://w3id.org/GHGA/umi_barcode_read>, - <https://w3id.org/GHGA/umi_barcode_size> . - <https://w3id.org/GHGA/named_thing_type> a linkml:SlotDefinition ; skos:definition "The type of an entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4621,6 +4694,21 @@ linkml:slot_uri <https://w3id.org/GHGA/id> ; linkml:usage_slot_name "id" . +<https://w3id.org/GHGA/named_thing_xref> a linkml:SlotDefinition ; + skos:definition "Holds one or more database cross references." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "xref" ; + linkml:definition_uri <https://w3id.org/GHGA/xref> ; + linkml:domain <https://w3id.org/GHGA/NamedThing> ; + linkml:domain_of <https://w3id.org/GHGA/NamedThing> ; + linkml:is_a <https://w3id.org/GHGA/xref> ; + linkml:is_usage_slot true ; + linkml:multivalued true ; + linkml:owner <https://w3id.org/GHGA/NamedThing> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/xref> ; + linkml:usage_slot_name "xref" . + <https://w3id.org/GHGA/NamedThing> a linkml:ClassDefinition ; skos:altLabel "entity", "named entity", @@ -4638,31 +4726,6 @@ <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref> . -<https://w3id.org/GHGA/Sample> 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 <biolink:MaterialSample>, - <https://w3id.org/GHGA/SIO:001050> ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/Sample> ; - linkml:definition_uri <https://w3id.org/GHGA/Sample> ; - linkml:is_a <https://w3id.org/GHGA/MaterialEntity> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_has_attribute>, - <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/sample_description>, - <https://w3id.org/GHGA/sample_has_biospecimen>, - <https://w3id.org/GHGA/sample_has_individual>, - <https://w3id.org/GHGA/sample_isolation>, - <https://w3id.org/GHGA/sample_name>, - <https://w3id.org/GHGA/sample_storage>, - <https://w3id.org/GHGA/sample_tissue>, - <https://w3id.org/GHGA/sample_type>, - <https://w3id.org/GHGA/sample_xref>, - <https://w3id.org/GHGA/vital_status_at_sampling> . - <https://w3id.org/GHGA/named_thing_accession> a linkml:SlotDefinition ; skos:definition "A unique identifier assigned to an entity for the sole purpose of referring to that entity in a global scope." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4705,21 +4768,6 @@ linkml:slot_uri <https://w3id.org/GHGA/update_date> ; linkml:usage_slot_name "update date" . -<https://w3id.org/GHGA/named_thing_xref> a linkml:SlotDefinition ; - skos:definition "Holds one or more database cross references." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "xref" ; - linkml:definition_uri <https://w3id.org/GHGA/xref> ; - linkml:domain <https://w3id.org/GHGA/NamedThing> ; - linkml:domain_of <https://w3id.org/GHGA/NamedThing> ; - linkml:is_a <https://w3id.org/GHGA/xref> ; - linkml:is_usage_slot true ; - linkml:multivalued true ; - linkml:owner <https://w3id.org/GHGA/NamedThing> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/xref> ; - linkml:usage_slot_name "xref" . - <https://w3id.org/GHGA/Submission> a linkml:ClassDefinition ; 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." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4757,25 +4805,124 @@ linkml:is_a <https://w3id.org/GHGA/Person> ; linkml:slot_usage [ ] ; linkml:slots <https://w3id.org/GHGA/additional_name>, + <https://w3id.org/GHGA/ancestry>, + <https://w3id.org/GHGA/ethnicity>, <https://w3id.org/GHGA/family_name>, + <https://w3id.org/GHGA/gender>, + <https://w3id.org/GHGA/geographical_region>, <https://w3id.org/GHGA/given_name>, <https://w3id.org/GHGA/individual_age>, - <https://w3id.org/GHGA/individual_ancestry>, - <https://w3id.org/GHGA/individual_ethnicity>, - <https://w3id.org/GHGA/individual_gender>, - <https://w3id.org/GHGA/individual_geographical_region>, <https://w3id.org/GHGA/individual_has_children>, <https://w3id.org/GHGA/individual_has_parent>, <https://w3id.org/GHGA/individual_sex>, <https://w3id.org/GHGA/individual_vital_status>, - <https://w3id.org/GHGA/individual_year_of_birth>, <https://w3id.org/GHGA/named_thing_accession>, <https://w3id.org/GHGA/named_thing_creation_date>, <https://w3id.org/GHGA/named_thing_has_attribute>, <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/year_of_birth> . + +<https://w3id.org/GHGA/Experiment> a linkml:ClassDefinition ; + skos:closeMatch <ncit:C42790> ; + 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 <https://w3id.org/GHGA/SIO:000994> ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/Experiment> ; + linkml:definition_uri <https://w3id.org/GHGA/Experiment> ; + linkml:is_a <https://w3id.org/GHGA/Investigation> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/deprecated>, + <https://w3id.org/GHGA/deprecation_date>, + <https://w3id.org/GHGA/experiment_biological_replicates>, + <https://w3id.org/GHGA/experiment_description>, + <https://w3id.org/GHGA/experiment_experimental_replicates>, + <https://w3id.org/GHGA/experiment_has_experiment_process>, + <https://w3id.org/GHGA/experiment_has_file>, + <https://w3id.org/GHGA/experiment_has_sample>, + <https://w3id.org/GHGA/experiment_has_study>, + <https://w3id.org/GHGA/experiment_has_technology>, + <https://w3id.org/GHGA/experiment_technical_replicates>, + <https://w3id.org/GHGA/experiment_title>, + <https://w3id.org/GHGA/has_publication>, + <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_has_attribute>, + <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_type>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/release_date>, + <https://w3id.org/GHGA/release_status>, + <https://w3id.org/GHGA/replaced_by> . + +<https://w3id.org/GHGA/SequencingProtocol> a linkml:ClassDefinition ; + skos:definition "Information about the sequencing of a sample." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/SequencingProtocol> ; + linkml:definition_uri <https://w3id.org/GHGA/SequencingProtocol> ; + linkml:is_a <https://w3id.org/GHGA/Protocol> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/cell_barcode_offset>, + <https://w3id.org/GHGA/cell_barcode_read>, + <https://w3id.org/GHGA/cell_barcode_size>, + <https://w3id.org/GHGA/flow_cell_id>, + <https://w3id.org/GHGA/flow_cell_type>, + <https://w3id.org/GHGA/lane_number>, + <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/protocol_type>, + <https://w3id.org/GHGA/protocol_url>, + <https://w3id.org/GHGA/protocol_xref>, + <https://w3id.org/GHGA/read_length>, + <https://w3id.org/GHGA/read_pair_number>, + <https://w3id.org/GHGA/reference_annotation>, + <https://w3id.org/GHGA/sample_barcode_read>, + <https://w3id.org/GHGA/sequencing_length>, + <https://w3id.org/GHGA/sequencing_protocol_description>, + <https://w3id.org/GHGA/sequencing_protocol_has_attribute>, + <https://w3id.org/GHGA/sequencing_protocol_instrument_model>, + <https://w3id.org/GHGA/sequencing_protocol_name>, + <https://w3id.org/GHGA/sequencing_protocol_sequencing_center>, + <https://w3id.org/GHGA/target_coverage>, + <https://w3id.org/GHGA/umi_barcode_offset>, + <https://w3id.org/GHGA/umi_barcode_read>, + <https://w3id.org/GHGA/umi_barcode_size> . + +<https://w3id.org/GHGA/LibraryPreparationProtocol> a linkml:ClassDefinition ; + skos:definition "Information about the library preparation of an Experiment." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:definition_uri <https://w3id.org/GHGA/LibraryPreparationProtocol> ; + linkml:is_a <https://w3id.org/GHGA/Protocol> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/end_bias>, + <https://w3id.org/GHGA/library_level>, + <https://w3id.org/GHGA/library_preparation_protocol_description>, + <https://w3id.org/GHGA/library_preparation_protocol_has_attribute>, + <https://w3id.org/GHGA/library_preparation_protocol_library_construction>, + <https://w3id.org/GHGA/library_preparation_protocol_library_construction_kit_manufacturer>, + <https://w3id.org/GHGA/library_preparation_protocol_library_construction_kit_retail_name>, + <https://w3id.org/GHGA/library_preparation_protocol_library_layout>, + <https://w3id.org/GHGA/library_preparation_protocol_library_name>, + <https://w3id.org/GHGA/library_preparation_protocol_library_preparation>, + <https://w3id.org/GHGA/library_preparation_protocol_library_selection>, + <https://w3id.org/GHGA/library_preparation_protocol_library_type>, + <https://w3id.org/GHGA/library_preparation_protocol_name>, + <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/primer>, + <https://w3id.org/GHGA/protocol_type>, + <https://w3id.org/GHGA/protocol_url>, + <https://w3id.org/GHGA/protocol_xref>, + <https://w3id.org/GHGA/rnaseq_strandedness>, + <https://w3id.org/GHGA/target_regions> . <https://w3id.org/GHGA/string> a linkml:TypeDefinition ; skos:definition "A character string" ; diff --git a/artifacts/shex/ghga.shex b/artifacts/shex/ghga.shex index 9b842da3..fea00a6d 100644 --- a/artifacts/shex/ghga.shex +++ b/artifacts/shex/ghga.shex @@ -321,7 +321,7 @@ linkml:Nodeidentifier NONLITERAL <File> CLOSED { ( $<File_tes> ( &<InformationContentEntity_tes> ; rdf:type [ <InformationContentEntity> ] ? ; - <name> @linkml:String ? ; + <name> @linkml:String ; <format> @linkml:String ? ; <size> @linkml:String ? ; <checksum> @linkml:String ? ; @@ -389,15 +389,15 @@ linkml:Nodeidentifier NONLITERAL <LibraryPreparationProtocol> CLOSED { ( $<LibraryPreparationProtocol_tes> ( &<Protocol_tes> ; rdf:type [ <Protocol> ] ? ; - <library_name> @linkml:String ? ; - <library_layout> @linkml:String ? ; - <library_type> @linkml:String ? ; - <library_selection> @linkml:String ? ; - <library_construction> @linkml:String ? ; - <library_preparation> @linkml:String ? ; + <library_name> @linkml:String ; + <library_layout> @linkml:String ; + <library_type> @linkml:String ; + <library_selection> @linkml:String ; + <library_construction> @linkml:String ; + <library_preparation> @linkml:String ; <library_level> @linkml:String ? ; - <library_construction_kit_retail_name> @linkml:String ? ; - <library_construction_kit_manufacturer> @linkml:String ? ; + <library_construction_kit_retail_name> @linkml:String ; + <library_construction_kit_manufacturer> @linkml:String ; <primer> @linkml:String ? ; <end_bias> @linkml:String ? ; <target_regions> @linkml:String ? ; @@ -425,7 +425,7 @@ linkml:Nodeidentifier NONLITERAL rdf:type [ <Person> ] ? ; <email> @linkml:String ; <telephone> @linkml:String ; - <organization> @linkml:String ? + <organization> @linkml:String ) ; rdf:type [ <Member> ] ) @@ -508,6 +508,8 @@ linkml:Nodeidentifier NONLITERAL <name> @linkml:String ? ; <description> @linkml:String ? ; <url> @linkml:String ? ; + <type> @linkml:String ? ; + <xref> @linkml:String * ; <has_attribute> @<Attribute> * ) ; rdf:type [ <Protocol> ] @@ -551,7 +553,7 @@ linkml:Nodeidentifier NONLITERAL ( $<Sample_tes> ( &<MaterialEntity_tes> ; rdf:type [ <MaterialEntity> ] ? ; <name> @linkml:String ; - <description> @linkml:String ? ; + <description> @linkml:String ; <vital_status_at_sampling> @linkml:String ? ; <tissue> @linkml:String ; <isolation> @linkml:String ? ; @@ -568,10 +570,11 @@ linkml:Nodeidentifier NONLITERAL <SequencingProtocol> CLOSED { ( $<SequencingProtocol_tes> ( &<Protocol_tes> ; rdf:type [ <Protocol> ] ? ; - <sequencing_center> @linkml:String ? ; - <instrument_model> @linkml:String ? ; + <sequencing_center> @linkml:String ; + <instrument_model> @linkml:String ; <read_length> @linkml:String ? ; <read_pair_number> @linkml:String ? ; + <sequencing_length> @linkml:String ? ; <target_coverage> @linkml:String ? ; <reference_annotation> @linkml:String ? ; <lane_number> @linkml:String ? ; diff --git a/artifacts/sql/ghga.sql b/artifacts/sql/ghga.sql index 5d646d96..fc9f275b 100644 --- a/artifacts/sql/ghga.sql +++ b/artifacts/sql/ghga.sql @@ -1,7 +1,7 @@ CREATE TYPE release_status_enum AS ENUM ('unreleased', 'released'); CREATE TYPE biological_sex_enum AS ENUM ('XX', 'XY', 'none'); -CREATE TYPE vital_status_enum AS ENUM ('alive', 'deceased'); +CREATE TYPE vital_status_enum AS ENUM ('alive', 'deceased', 'unknown'); CREATE TYPE file_type_enum AS ENUM ('bam', 'complete_genomics', 'cram', 'fasta', 'fastq', 'pacbio_hdf5', 'sff', 'srf', 'vcf'); CREATE TYPE case_control_enum AS ENUM ('control', 'case'); 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', 'other'); @@ -134,7 +134,7 @@ CREATE TABLE file ( has_attribute TEXT, creation_date TEXT, update_date TEXT, - name TEXT, + name TEXT NOT NULL, format TEXT, size TEXT, checksum TEXT, @@ -180,19 +180,19 @@ CREATE TABLE information_content_entity ( CREATE TABLE library_preparation_protocol ( id TEXT NOT NULL, accession TEXT, - type TEXT, creation_date TEXT, update_date TEXT, url TEXT, - library_name TEXT, - library_layout TEXT, - library_type TEXT, - library_selection TEXT, - library_construction TEXT, - library_preparation TEXT, + type TEXT, + library_name TEXT NOT NULL, + library_layout TEXT NOT NULL, + library_type TEXT NOT NULL, + library_selection TEXT NOT NULL, + library_construction TEXT NOT NULL, + library_preparation TEXT NOT NULL, library_level TEXT, - library_construction_kit_retail_name TEXT, - library_construction_kit_manufacturer TEXT, + library_construction_kit_retail_name TEXT NOT NULL, + library_construction_kit_manufacturer TEXT NOT NULL, primer TEXT, end_bias TEXT, target_regions TEXT, @@ -225,7 +225,7 @@ CREATE TABLE member ( additional_name TEXT, email TEXT NOT NULL, telephone TEXT NOT NULL, - organization TEXT, + organization TEXT NOT NULL, PRIMARY KEY (id) ); @@ -290,12 +290,12 @@ CREATE TABLE project ( CREATE TABLE protocol ( id TEXT NOT NULL, accession TEXT, - type TEXT, creation_date TEXT, update_date TEXT, name TEXT, description TEXT, url TEXT, + type TEXT, has_attribute TEXT, PRIMARY KEY (id) ); @@ -315,14 +315,15 @@ CREATE TABLE publication ( CREATE TABLE sequencing_protocol ( id TEXT NOT NULL, accession TEXT, - type TEXT, creation_date TEXT, update_date TEXT, url TEXT, - sequencing_center TEXT, - instrument_model TEXT, + type TEXT, + sequencing_center TEXT NOT NULL, + instrument_model TEXT NOT NULL, read_length TEXT, read_pair_number TEXT, + sequencing_length TEXT, target_coverage TEXT, reference_annotation TEXT, lane_number TEXT, @@ -843,7 +844,7 @@ CREATE TABLE sample ( creation_date TEXT, update_date TEXT, name TEXT NOT NULL, - description TEXT, + description TEXT NOT NULL, vital_status_at_sampling TEXT, tissue TEXT NOT NULL, isolation TEXT, diff --git a/artifacts/sql/ghga_models.py b/artifacts/sql/ghga_models.py index 3c0de856..83a93702 100644 --- a/artifacts/sql/ghga_models.py +++ b/artifacts/sql/ghga_models.py @@ -387,10 +387,10 @@ tbl_library_preparation_protocol = Table('library_preparation_protocol', metadata, Column('id', Text, primary_key=True), Column('accession', Text), - Column('type', Text), Column('creation_date', Text), Column('update_date', Text), Column('url', Text), + Column('type', Text), Column('library_name', Text), Column('library_layout', Text), Column('library_type', Text), @@ -492,12 +492,12 @@ tbl_protocol = Table('protocol', metadata, Column('id', Text, primary_key=True), Column('accession', Text), - Column('type', Text), Column('creation_date', Text), Column('update_date', Text), Column('name', Text), Column('description', Text), Column('url', Text), + Column('type', Text), Column('has_attribute', Text), ) tbl_publication = Table('publication', metadata, @@ -540,14 +540,15 @@ tbl_sequencing_protocol = Table('sequencing_protocol', metadata, Column('id', Text, primary_key=True), Column('accession', Text), - Column('type', Text), Column('creation_date', Text), Column('update_date', Text), Column('url', Text), + Column('type', Text), Column('sequencing_center', Text), Column('instrument_model', Text), Column('read_length', Text), Column('read_pair_number', Text), + Column('sequencing_length', Text), Column('target_coverage', Text), Column('reference_annotation', Text), Column('lane_number', Text), From 0bba26e4c33ee619d0e9fd06252d8ef956375a09 Mon Sep 17 00:00:00 2001 From: Deepak <deepakunni3@users.noreply.github.com> Date: Fri, 26 Nov 2021 08:48:53 +0100 Subject: [PATCH 14/16] Housekeeping (#29) * Fix quoting of certain descriptions * Add target for generating Pydantic models from the schema YAML * Simplify status fields into just a single enum * Remove submission entity from the named thing hierarchy * Add disease and phenotypic feature linking slots to individual * Change version to 0.1.0 --- Makefile | 11 ++- src/schema/ghga.yaml | 179 +++++++++++++++++++++++-------------------- 2 files changed, 106 insertions(+), 84 deletions(-) diff --git a/Makefile b/Makefile index 3b542e99..3e0a9004 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ SCHEMA_NAMES = $(patsubst $(SCHEMA_DIR)/%.yaml, %, $(SOURCE_FILES)) SCHEMA_NAME = ghga SCHEMA_SRC = $(SCHEMA_DIR)/$(SCHEMA_NAME).yaml -TGTS = graphql jsonschema markdown shex owl csv graphql python rdf sql +TGTS = graphql jsonschema markdown shex owl csv graphql python pydantic rdf sql # Optional arguments to supply to the generators #For example, GEN_OPTS = --no-mergeimports @@ -72,6 +72,15 @@ gen-python: $(patsubst %, target/python/%.py, $(SCHEMA_NAMES)) target/python/%.py: $(SCHEMA_DIR)/%.yaml tdir-python gen-py-classes --no-mergeimports $(GEN_OPTS) $< > $@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Pydantic classes +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +gen-pydantic: $(patsubst %, target/pydantic/%_models.py, $(SCHEMA_NAMES)) +.PHONY: gen-pydantic +target/pydantic/%_models.py: $(SCHEMA_DIR)/%.yaml tdir-pydantic + gen-pydantic --no-mergeimports $(GEN_OPTS) $< > $@ + # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # GraphQL # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/src/schema/ghga.yaml b/src/schema/ghga.yaml index a774e9c6..be9875d0 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: 1.0.0a +version: 0.1.0 imports: - linkml:types @@ -39,6 +39,8 @@ classes: - has attribute - creation date - update date + - replaces + - replaced by slot_usage: id: description: >- @@ -111,9 +113,6 @@ classes: investigation: is_a: planned process - mixins: - - release status mixin - - deprecation mixin description: >- Investigation is the process of carrying out a plan or procedure so as to discover fact or information about the object of study. @@ -121,6 +120,9 @@ classes: - title - description - has publication + - status + - release date + - deprecation date exact_mappings: - SIO:000747 - OBI:0000066 @@ -176,7 +178,6 @@ classes: exact_mappings: - NCIT:C25365 - SIO:000136 - has publication: description: >- One or more Publication entities associated with this Project. @@ -187,7 +188,7 @@ classes: has study: description: >- One or more Study entities associated with this Project. - range: experiment + range: study multivalued: true inlined: true inlined_as_list: true @@ -218,7 +219,7 @@ classes: required: true type: description: >- - The type of Study. For example, "Cancer Genomics", "Epigenetics", "Exome Sequencing". + The type of Study. For example, 'Cancer Genomics', 'Epigenetics', 'Exome Sequencing'. range: study_type_enum required: true broad_mappings: @@ -604,20 +605,18 @@ classes: - EFO:0000635 has disease: description: >- - The Disease entity that is associated with this Biospecimen at the time of retrieval - from the organism. Typically, a concept from Mondo Disease Ontology. - For example, 'MONDO:0003742' indicates that the Individual - from which the Biospecimen - was extracted from - suffers from 'Heart Fibrosarcoma'. + The Disease entity that is associated with the Individual. Typically, a concept + from Mondo Disease Ontology. For example, 'MONDO:0005267' indicates that + the Individual suffers from 'Heart Disease'. range: disease multivalued: true inlined: true inlined_as_list: true has phenotypic feature: description: >- - The Phenotypic Feature entity that is associated with this Biospecimen at the time of retrieval - from the organism. Typically, a concept from Human Phenotype Ontology. - For example, 'HP:0100244' indicates that the Individual - from which the Biospecimen - was extracted from - exhibits 'Fibrosarcoma' as one of its phenotype. + The Phenotypic Feature entity that is associated with the Individual. Typically, a + concept from Human Phenotype Ontology. For example, 'HP:0100244' indicates that the + Individual exhibits 'Fibrosarcoma' as one of its phenotype. range: phenotypic feature multivalued: true inlined: true @@ -721,6 +720,8 @@ classes: - ancestry - has parent - has children + - has disease + - has phenotypic feature slot_usage: sex: required: true @@ -742,6 +743,26 @@ classes: multivalued: true inlined: true inlined_as_list: true + has disease: + description: >- + The Disease entity that is associated with this Biospecimen at the time of retrieval + from the organism. Typically, a concept from Mondo Disease Ontology. + For example, 'MONDO:0003742' indicates that the Individual - from which the Biospecimen + was extracted from - suffers from 'Heart Fibrosarcoma'. + range: disease + multivalued: true + inlined: true + inlined_as_list: true + has phenotypic feature: + description: >- + The Phenotypic Feature entity that is associated with this Biospecimen at the time of retrieval + from the organism. Typically, a concept from Human Phenotype Ontology. + For example, 'HP:0100244' indicates that the Individual - from which the Biospecimen + was extracted from - exhibits 'Fibrosarcoma' as one of its phenotype. + range: phenotypic feature + multivalued: true + inlined: true + inlined_as_list: true donor: is_a: individual @@ -908,9 +929,6 @@ classes: dataset: is_a: information content entity - mixins: - - release status mixin - - deprecation mixin description: >- A Dataset is a collection of Files that is prepared for distribution. exact_mappings: @@ -920,6 +938,7 @@ classes: - description - has file - has publication + - status slot_usage: title: required: true @@ -941,6 +960,8 @@ classes: multivalued: true inlined: true inlined_as_list: true + status: + range: status_enum experiment dataset: is_a: dataset @@ -1239,14 +1260,12 @@ classes: range: user_role_enum submission: - is_a: named thing - mixins: - - submission status mixin description: >- 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. slots: + - id - has study - has project - has sample @@ -1256,7 +1275,16 @@ classes: - has analysis - has file - has data access policy + - submission date + - status + - creation date + - update date + - replaces + - replaced by slot_usage: + id: + description: >- + A internal unique identifier for the Submission. has study: description: >- Information about a Study entities associated with this submission. @@ -1317,31 +1345,22 @@ classes: range: data access policy inlined: true inlined_as_list: false - - submission status mixin: - mixin: true - description: >- - A mixin that keeps track of the submission status. - slots: - - submission status - - submission date - - release status mixin: - mixin: true - description: >- - A mixin that keeps track of the release status. - slots: - - release status - - release date - - deprecation mixin: - mixin: true - description: >- - A mixin that keeps track of the deprecation status. - slots: - - deprecated - - deprecation date - - replaced by + creation date: + description: >- + Timestamp (in ISO 8601 format) when the Submission was created. + update date: + description: >- + Timestamp (in ISO 8601 format) when the Submission was updated. + replaces: + description: >- + Refers to a deprecated Submission that is being replaced by the current Submission. + replaced by: + description: >- + Refers to the Submission which replaces a currently deprecated Submission. + status: + description: >- + The status of a Submission. For example, 'in progress' or 'submitted'. + range: status_enum slots: @@ -1707,7 +1726,7 @@ slots: library construction: description: >- - The name of a library construction approach being used. (eg: "10X v2 sequencing" or "Smart-seq2") + The name of a library construction approach being used. (eg: '10X v2 sequencing' or 'Smart-seq2') close_mappings: - OBI:0000711 @@ -1735,7 +1754,7 @@ slots: primer: description: >- - The type of primer used for reverse transcription, e.g. "oligo-dT" or "random" primer. + The type of primer used for reverse transcription, e.g. 'oligo-dT' or 'random' primer. This allows users to identify content of the cDNA library input e.g. enriched for mRNA. broad_mappings: - NCIT:C1451 @@ -1835,13 +1854,13 @@ slots: umi barcode offset: description: >- - The offset in sequence of the UMI identifying barcode. (E.g. "16"). + The offset in sequence of the UMI identifying barcode. (E.g. '16'). close_mappings: - EFO:0010207 umi barcode size: description: >- - The size of the UMI identifying barcode (Eg. "10"). + The size of the UMI identifying barcode (Eg. '10'). close_mappings: - EFO:0010209 @@ -1853,13 +1872,13 @@ slots: cell barcode offset: description: >- - The offset in sequence of the cell identifying barcode. (Eg. "0"). + The offset in sequence of the cell identifying barcode. (Eg. '0'). close_mappings: - EFO:0010204 cell barcode size: description: >- - The size of the cell identifying barcode (E.g. "16"). + The size of the cell identifying barcode (E.g. '16'). close_mappings: - EFO:0010205 @@ -1871,42 +1890,39 @@ slots: vital status at sampling: description: >- - Vital Status of an Individual at the point of sampling (eg:"Alive", "Deceased"). + Vital Status of an Individual at the point of sampling (eg:'Alive', 'Deceased'). close_mappings: - NCIT:C25717 - submission status: - description: >- - The status of submission. - range: submission_status_enum - submission date: description: >- - The date when submission was completed. - - release status: - description: >- - The release status of an entity. - range: release_status_enum + The timestamp (in ISO 8601 format) when submission was marked completed. release date: description: >- - The date when the entity was released for public consumption. - - deprecated: - description: >- - The deprecation status of an entity. - range: boolean + The timestamp (in ISO 8601 format) when the entity was released for public consumption. deprecation date: description: >- - The date when the entity was deprecated. + The timestamp (in ISO 8601 format) when the entity was deprecated. replaced by: description: >- - The entity which replaces a deprecated entity. + Refers to the entity which replaces a currently deprecated entity. + domain: named thing + range: named thing + + replaces: + inverse: replaced by + description: >- + Refers to a deprecated entity that is being replaced by the current entity. + domain: named thing range: named thing + status: + description: The status of an entity. + range: status_enum + enums: case_control_enum: description: >- @@ -2015,20 +2031,17 @@ enums: description: >- vcf File for storing gene sequence variations. - submission_status_enum: + status_enum: description: >- - Enum to capture submission status. + Enum to capture the status of an entity. permissible_values: in progress: - description: Signifies that a submission is in progress. + description: Signifies that the entity is in the process of being submitted. submitted: - description: Signifies that a submission is complete and submitted. - - release_status_enum: - description: >- - Enum to capture the release status. - permissible_values: + description: Signifies that the entity has been successfully submitted. unreleased: - description: Signifies that the submission is not released for public consumption. + description: Signifies that the entity is submitted but unreleased for public consumption. released: - description: Signifies that the submission is released for public consumption. + description: Signifies that the entity is submitted and released for public conusmption. + deprecated: + description: Signifies that the entity is deprecated and is replaced by another entity. From ab50390952eba5f50e5c31340966dab4aaa6a133 Mon Sep 17 00:00:00 2001 From: GitHub Action <action@github.com> Date: Fri, 26 Nov 2021 07:50:09 +0000 Subject: [PATCH 15/16] Autogenerate artifacts --- artifacts/csv/ghga.csv | 3 - artifacts/graphql/ghga.graphql | 169 ++-- artifacts/jsonschema/ghga.schema.json | 588 +++++++++---- artifacts/owl/ghga.owl.ttl | 921 ++++++++++----------- artifacts/python/ghga.py | 230 ++---- artifacts/rdf/ghga.ttl | 1103 ++++++++++++++----------- artifacts/shex/ghga.shex | 73 +- artifacts/sql/ghga.sql | 562 ++++++++----- artifacts/sql/ghga_models.py | 161 ++-- 9 files changed, 2181 insertions(+), 1629 deletions(-) diff --git a/artifacts/csv/ghga.csv b/artifacts/csv/ghga.csv index 6c9614db..cfe0dae9 100644 --- a/artifacts/csv/ghga.csv +++ b/artifacts/csv/ghga.csv @@ -16,7 +16,6 @@ data_access_policy,,"A Data Access Policy specifies under which circumstances, l data_transformation,,A data transformation technique used to analyze and interpret data to gain a better understanding of it. data_use_condition,,Data Use Condition represents the use conditions associated with a Dataset. A permission field can have one or more terms that collectively defines the data use condition. The modifier determines the interpretation of the use permission(s). dataset,,A Dataset is a collection of Files that is prepared for distribution. -deprecation_mixin,,A mixin that keeps track of the deprecation status. disease,,A disease is a disposition to undergo pathological processes that exists in an organism because of one or more disorders in that organism. disease_or_phenotypic_feature,,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. donor,,A Donor is an Individual that participates in a research Study by donating a Biospecimen. The use of the Biospecimen is restricted to the consent provided by the Donor. @@ -39,13 +38,11 @@ population,,"A population is a collection of individuals from the same taxonomic project,,Any specifically defined piece of work that is undertaken or attempted to meet a single requirement. protocol,,"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." publication,,"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." -release_status_mixin,,A mixin that keeps track of the release status. research_activity,,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. sample,,"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)." sequencing_protocol,,Information about the sequencing of a sample. study,,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. submission,,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. -submission_status_mixin,,A mixin that keeps track of the submission status. technology,,A Technology is an abstraction that represents the instrument used for an assay. The Technology entity captures instrument-specific attributes that are relevant for an Experiment entity. The Technology entity may be further characterized by its children where each child has fields that are relevant to that particular technology. user,,A user in GHGA. workflow,,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. diff --git a/artifacts/graphql/ghga.graphql b/artifacts/graphql/ghga.graphql index baef7fb5..4dc950f4 100644 --- a/artifacts/graphql/ghga.graphql +++ b/artifacts/graphql/ghga.graphql @@ -7,6 +7,8 @@ type Agent hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing name: String description: String } @@ -19,16 +21,14 @@ type AggregateDataset hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing title: String! description: String! hasFile: [File]! hasPublication: [Publication] + status: StatusEnum type: String! - releaseStatus: ReleaseStatusEnum - releaseDate: String - deprecated: Boolean - deprecationDate: String - replacedBy: NamedThing hasDataset: [Dataset] } @@ -40,6 +40,8 @@ type Analysis hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing id: String! title: String description: String @@ -58,16 +60,14 @@ type AnalysisDataset hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing title: String! description: String! hasFile: [File]! hasPublication: [Publication] + status: StatusEnum type: String! - releaseStatus: ReleaseStatusEnum - releaseDate: String - deprecated: Boolean - deprecationDate: String - replacedBy: NamedThing hasDataAccessPolicy: [DataAccessPolicy]! hasStudy: [Study]! hasAnalysis: String @@ -83,6 +83,8 @@ type AnalysisProcess hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing title: String hasInput: [File] hasWorkflowStep: WorkflowStep @@ -99,6 +101,8 @@ type AnatomicalEntity hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing } type Attribute @@ -118,6 +122,8 @@ type BiologicalQuality hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing } type Biospecimen @@ -129,6 +135,8 @@ type Biospecimen hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing name: String description: String hasIndividual: Individual @@ -146,6 +154,8 @@ type CellLine hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing } type Cohort @@ -157,6 +167,8 @@ type Cohort hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing name: String hasMember: [Individual] } @@ -170,6 +182,8 @@ type Committee hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing name: String } @@ -182,6 +196,8 @@ type DataAccessCommittee hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing name: String! description: String mainContact: Member @@ -197,6 +213,8 @@ type DataAccessPolicy hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing name: String description: String! policyText: String! @@ -213,6 +231,8 @@ type DataTransformation hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing id: String! title: String description: String @@ -224,7 +244,7 @@ type DataUseCondition modifier: String } -type Dataset implements ReleaseStatusMixin, DeprecationMixin +type Dataset { id: String! accession: String @@ -232,23 +252,14 @@ type Dataset implements ReleaseStatusMixin, DeprecationMixin hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing title: String! description: String! hasFile: [File]! hasPublication: [Publication] + status: StatusEnum type: String! - releaseStatus: ReleaseStatusEnum - releaseDate: String - deprecated: Boolean - deprecationDate: String - replacedBy: NamedThing - } - -interface DeprecationMixin - { - deprecated: Boolean - deprecationDate: String - replacedBy: NamedThing } type Disease @@ -260,6 +271,8 @@ type Disease hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing name: String description: String } @@ -273,6 +286,8 @@ type DiseaseOrPhenotypicFeature hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing name: String description: String } @@ -286,6 +301,8 @@ type Donor hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing givenName: String familyName: String additionalName: String @@ -299,6 +316,8 @@ type Donor ancestry: String hasParent: [Individual] hasChildren: [Individual] + hasDisease: [Disease] + hasPhenotypicFeature: [PhenotypicFeature] } type Experiment @@ -310,12 +329,12 @@ type Experiment hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing hasPublication: Publication - releaseStatus: ReleaseStatusEnum + status: StatusEnum releaseDate: String - deprecated: Boolean deprecationDate: String - replacedBy: NamedThing biologicalReplicates: String technicalReplicates: String experimentalReplicates: String @@ -336,16 +355,14 @@ type ExperimentDataset hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing title: String! description: String! hasFile: [File]! hasPublication: [Publication] + status: StatusEnum type: String! - releaseStatus: ReleaseStatusEnum - releaseDate: String - deprecated: Boolean - deprecationDate: String - replacedBy: NamedThing hasDataAccessPolicy: [DataAccessPolicy]! hasStudy: [Study]! hasExperiment: [Experiment]! @@ -360,6 +377,8 @@ type ExperimentProcess hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing title: String hasInput: Sample hasProtocol: Protocol @@ -376,6 +395,8 @@ type Family hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing name: String hasMember: [Individual] hasProband: Individual @@ -389,6 +410,8 @@ type File hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing name: String! format: String size: String @@ -407,6 +430,8 @@ type Individual hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing givenName: String familyName: String additionalName: String @@ -420,6 +445,8 @@ type Individual ancestry: String hasParent: [Individual] hasChildren: [Individual] + hasDisease: [Disease] + hasPhenotypicFeature: [PhenotypicFeature] } type InformationContentEntity @@ -431,9 +458,11 @@ type InformationContentEntity hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing } -type Investigation implements ReleaseStatusMixin, DeprecationMixin +type Investigation { id: String! accession: String @@ -442,14 +471,14 @@ type Investigation implements ReleaseStatusMixin, DeprecationMixin hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing title: String description: String hasPublication: Publication - releaseStatus: ReleaseStatusEnum + status: StatusEnum releaseDate: String - deprecated: Boolean deprecationDate: String - replacedBy: NamedThing } type LibraryPreparationProtocol @@ -458,6 +487,8 @@ type LibraryPreparationProtocol accession: String creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing url: String type: String xref: [String] @@ -488,6 +519,8 @@ type MaterialEntity hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing } type Member @@ -499,6 +532,8 @@ type Member hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing givenName: String familyName: String additionalName: String @@ -516,6 +551,8 @@ type NamedThing hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing } type Person @@ -527,6 +564,8 @@ type Person hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing givenName: String familyName: String additionalName: String @@ -541,6 +580,8 @@ type PhenotypicFeature hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing name: String description: String } @@ -554,6 +595,8 @@ type PlannedProcess hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing } type Population @@ -565,6 +608,8 @@ type Population hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing name: String } @@ -576,7 +621,9 @@ type Project type: String creationDate: String updateDate: String - hasStudy: [Experiment] + replaces: NamedThing + replacedBy: NamedThing + hasStudy: [Study] title: String! description: String! hasPublication: [Publication] @@ -589,6 +636,8 @@ type Protocol accession: String creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing name: String description: String url: String @@ -604,18 +653,14 @@ type Publication hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing title: String abstract: String id: String! xref: [String] } -interface ReleaseStatusMixin - { - releaseStatus: ReleaseStatusEnum - releaseDate: String - } - type ResearchActivity { id: String! @@ -625,6 +670,8 @@ type ResearchActivity hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing title: String description: String hasPublication: Publication @@ -637,6 +684,8 @@ type Sample hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing name: String! description: String! vitalStatusAtSampling: String @@ -655,6 +704,8 @@ type SequencingProtocol accession: String creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing url: String type: String xref: [String] @@ -687,11 +738,11 @@ type Study xref: [String] creationDate: String updateDate: String - releaseStatus: ReleaseStatusEnum + replaces: NamedThing + replacedBy: NamedThing + status: StatusEnum releaseDate: String - deprecated: Boolean deprecationDate: String - replacedBy: NamedThing affiliation: [String]! hasExperiment: [Experiment] hasAnalysis: [Analysis] @@ -703,15 +754,9 @@ type Study hasAttribute: [Attribute] } -type Submission implements SubmissionStatusMixin +type Submission { id: String! - accession: String - xref: [String] - type: String - hasAttribute: [Attribute] - creationDate: String - updateDate: String hasStudy: Study hasProject: Project hasSample: [Sample] @@ -721,14 +766,12 @@ type Submission implements SubmissionStatusMixin hasAnalysis: [Analysis] hasFile: [File] hasDataAccessPolicy: DataAccessPolicy - submissionStatus: SubmissionStatusEnum - submissionDate: String - } - -interface SubmissionStatusMixin - { - submissionStatus: SubmissionStatusEnum submissionDate: String + status: StatusEnum + creationDate: String + updateDate: String + replaces: NamedThing + replacedBy: NamedThing } type Technology @@ -740,6 +783,8 @@ type Technology hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing } type User @@ -751,6 +796,8 @@ type User hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing givenName: String familyName: String additionalName: String @@ -767,6 +814,8 @@ type Workflow hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing } type WorkflowParameter @@ -784,6 +833,8 @@ type WorkflowStep hasAttribute: [Attribute] creationDate: String updateDate: String + replaces: NamedThing + replacedBy: NamedThing hasParameter: [WorkflowParameter] } diff --git a/artifacts/jsonschema/ghga.schema.json b/artifacts/jsonschema/ghga.schema.json index 7678080a..b70fbe4b 100644 --- a/artifacts/jsonschema/ghga.schema.json +++ b/artifacts/jsonschema/ghga.schema.json @@ -31,6 +31,14 @@ "description": "The name for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" @@ -65,14 +73,6 @@ "description": "Timestamp (in ISO 8601 format) when the entity was created.", "type": "string" }, - "deprecated": { - "description": "The deprecation status of an entity.", - "type": "boolean" - }, - "deprecation_date": { - "description": "The date when the entity was deprecated.", - "type": "string" - }, "description": { "description": "Description of an entity.", "type": "string" @@ -109,18 +109,18 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, - "release_date": { - "description": "The date when the entity was released for public consumption.", + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", "type": "string" }, - "release_status": { - "$ref": "#/$defs/ReleaseStatusEnum", - "description": "The release status of an entity." - }, - "replaced_by": { - "description": "The entity which replaces a deprecated entity.", + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", "type": "string" }, + "status": { + "$ref": "#/$defs/StatusEnum", + "description": "The status of an entity." + }, "title": { "description": "The title that describes an entity.", "type": "string" @@ -207,6 +207,14 @@ "description": "An identifier that uniquely represents an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "title": { "description": "The title that describes an entity.", "type": "string" @@ -245,14 +253,6 @@ "description": "Timestamp (in ISO 8601 format) when the entity was created.", "type": "string" }, - "deprecated": { - "description": "The deprecation status of an entity.", - "type": "boolean" - }, - "deprecation_date": { - "description": "The date when the entity was deprecated.", - "type": "string" - }, "description": { "description": "Description of an entity.", "type": "string" @@ -307,18 +307,18 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, - "release_date": { - "description": "The date when the entity was released for public consumption.", + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", "type": "string" }, - "release_status": { - "$ref": "#/$defs/ReleaseStatusEnum", - "description": "The release status of an entity." - }, - "replaced_by": { - "description": "The entity which replaces a deprecated entity.", + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", "type": "string" }, + "status": { + "$ref": "#/$defs/StatusEnum", + "description": "The status of an entity." + }, "title": { "description": "The title that describes an entity.", "type": "string" @@ -397,6 +397,14 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "title": { "description": "The title that describes an entity.", "type": "string" @@ -446,6 +454,14 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" @@ -519,6 +535,14 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" @@ -579,7 +603,7 @@ "type": "array" }, "has_disease": { - "description": "The Disease entity that is associated with this Biospecimen at the time of retrieval from the organism. Typically, a concept from Mondo Disease Ontology. For example, 'MONDO:0003742' indicates that the Individual - from which the Biospecimen was extracted from - suffers from 'Heart Fibrosarcoma'.", + "description": "The Disease entity that is associated with the Individual. Typically, a concept from Mondo Disease Ontology. For example, 'MONDO:0005267' indicates that the Individual suffers from 'Heart Disease'.", "items": { "$ref": "#/$defs/Disease" }, @@ -590,7 +614,7 @@ "description": "The Individual entity from which this Biospecimen was derived." }, "has_phenotypic_feature": { - "description": "The Phenotypic Feature entity that is associated with this Biospecimen at the time of retrieval from the organism. Typically, a concept from Human Phenotype Ontology. For example, 'HP:0100244' indicates that the Individual - from which the Biospecimen was extracted from - exhibits 'Fibrosarcoma' as one of its phenotype.", + "description": "The Phenotypic Feature entity that is associated with the Individual. Typically, a concept from Human Phenotype Ontology. For example, 'HP:0100244' indicates that the Individual exhibits 'Fibrosarcoma' as one of its phenotype.", "items": { "$ref": "#/$defs/PhenotypicFeature" }, @@ -604,6 +628,14 @@ "description": "The name for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" @@ -658,6 +690,14 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" @@ -714,6 +754,14 @@ "description": "The name for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" @@ -763,6 +811,14 @@ "description": "The name for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" @@ -827,6 +883,14 @@ "description": "The name for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" @@ -900,6 +964,14 @@ "description": "URL for the policy, if available. This is useful if the terms of the policy is made available online at a resolvable URL.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" @@ -952,6 +1024,14 @@ "description": "An identifier that uniquely represents an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "title": { "description": "The title that describes an entity.", "type": "string" @@ -1007,14 +1087,6 @@ "description": "Timestamp (in ISO 8601 format) when the entity was created.", "type": "string" }, - "deprecated": { - "description": "The deprecation status of an entity.", - "type": "boolean" - }, - "deprecation_date": { - "description": "The date when the entity was deprecated.", - "type": "string" - }, "description": { "description": "Description of an entity.", "type": "string" @@ -1044,18 +1116,18 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, - "release_date": { - "description": "The date when the entity was released for public consumption.", + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", "type": "string" }, - "release_status": { - "$ref": "#/$defs/ReleaseStatusEnum", - "description": "The release status of an entity." - }, - "replaced_by": { - "description": "The entity which replaces a deprecated entity.", + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", "type": "string" }, + "status": { + "$ref": "#/$defs/StatusEnum", + "description": "The status of an entity." + }, "title": { "description": "The title that describes an entity.", "type": "string" @@ -1117,6 +1189,14 @@ "description": "The name for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" @@ -1170,6 +1250,14 @@ "description": "The name for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" @@ -1250,6 +1338,13 @@ }, "type": "array" }, + "has_disease": { + "description": "The Disease entity that is associated with this Biospecimen at the time of retrieval from the organism. Typically, a concept from Mondo Disease Ontology. For example, 'MONDO:0003742' indicates that the Individual - from which the Biospecimen was extracted from - suffers from 'Heart Fibrosarcoma'.", + "items": { + "$ref": "#/$defs/Disease" + }, + "type": "array" + }, "has_parent": { "description": "One or more parent for this Individual.", "items": { @@ -1257,10 +1352,25 @@ }, "type": "array" }, + "has_phenotypic_feature": { + "description": "The Phenotypic Feature entity that is associated with this Biospecimen at the time of retrieval from the organism. Typically, a concept from Human Phenotype Ontology. For example, 'HP:0100244' indicates that the Individual - from which the Biospecimen was extracted from - exhibits 'Fibrosarcoma' as one of its phenotype.", + "items": { + "$ref": "#/$defs/PhenotypicFeature" + }, + "type": "array" + }, "id": { "description": "The internal unique identifier for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "sex": { "$ref": "#/$defs/BiologicalSexEnum", "description": "The assemblage of physical properties or qualities by which male is distinguished from female; the physical difference between male and female; the distinguishing peculiarity of male or female." @@ -1314,12 +1424,8 @@ "description": "Timestamp (in ISO 8601 format) when the entity was created.", "type": "string" }, - "deprecated": { - "description": "The deprecation status of an entity.", - "type": "boolean" - }, "deprecation_date": { - "description": "The date when the entity was deprecated.", + "description": "The timestamp (in ISO 8601 format) when the entity was deprecated.", "type": "string" }, "description": { @@ -1372,17 +1478,21 @@ "type": "string" }, "release_date": { - "description": "The date when the entity was released for public consumption.", + "description": "The timestamp (in ISO 8601 format) when the entity was released for public consumption.", "type": "string" }, - "release_status": { - "$ref": "#/$defs/ReleaseStatusEnum", - "description": "The release status of an entity." - }, "replaced_by": { - "description": "The entity which replaces a deprecated entity.", + "description": "Refers to the entity which replaces a currently deprecated entity.", "type": "string" }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, + "status": { + "$ref": "#/$defs/StatusEnum", + "description": "The status of an entity." + }, "technical_replicates": { "description": "A technical replicate is a replicate role where the same BioSample is use e.g. the same pool of RNA used to assess technical (as opposed to biological) variation within an experiment.", "type": "string" @@ -1429,14 +1539,6 @@ "description": "Timestamp (in ISO 8601 format) when the entity was created.", "type": "string" }, - "deprecated": { - "description": "The deprecation status of an entity.", - "type": "boolean" - }, - "deprecation_date": { - "description": "The date when the entity was deprecated.", - "type": "string" - }, "description": { "description": "Description of an entity.", "type": "string" @@ -1487,18 +1589,18 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, - "release_date": { - "description": "The date when the entity was released for public consumption.", + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", "type": "string" }, - "release_status": { - "$ref": "#/$defs/ReleaseStatusEnum", - "description": "The release status of an entity." - }, - "replaced_by": { - "description": "The entity which replaces a deprecated entity.", + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", "type": "string" }, + "status": { + "$ref": "#/$defs/StatusEnum", + "description": "The status of an entity." + }, "title": { "description": "The title that describes an entity.", "type": "string" @@ -1571,6 +1673,14 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "title": { "description": "A descriptive title that explains the step(s) involved in performing the experiment leading up to the sequencing of the sample and generation of raw data from the instrument. (eg: Sample extraction -> Target Enrichment) ", "type": "string" @@ -1635,6 +1745,14 @@ "description": "The name for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" @@ -1700,6 +1818,14 @@ "description": "The name for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "size": { "description": "The size of a file in bytes.", "type": "string" @@ -1801,6 +1927,13 @@ }, "type": "array" }, + "has_disease": { + "description": "The Disease entity that is associated with this Biospecimen at the time of retrieval from the organism. Typically, a concept from Mondo Disease Ontology. For example, 'MONDO:0003742' indicates that the Individual - from which the Biospecimen was extracted from - suffers from 'Heart Fibrosarcoma'.", + "items": { + "$ref": "#/$defs/Disease" + }, + "type": "array" + }, "has_parent": { "description": "One or more parent for this Individual.", "items": { @@ -1808,10 +1941,25 @@ }, "type": "array" }, + "has_phenotypic_feature": { + "description": "The Phenotypic Feature entity that is associated with this Biospecimen at the time of retrieval from the organism. Typically, a concept from Human Phenotype Ontology. For example, 'HP:0100244' indicates that the Individual - from which the Biospecimen was extracted from - exhibits 'Fibrosarcoma' as one of its phenotype.", + "items": { + "$ref": "#/$defs/PhenotypicFeature" + }, + "type": "array" + }, "id": { "description": "The internal unique identifier for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "sex": { "$ref": "#/$defs/BiologicalSexEnum", "description": "The assemblage of physical properties or qualities by which male is distinguished from female; the physical difference between male and female; the distinguishing peculiarity of male or female." @@ -1872,6 +2020,14 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" @@ -1906,12 +2062,8 @@ "description": "Timestamp (in ISO 8601 format) when the entity was created.", "type": "string" }, - "deprecated": { - "description": "The deprecation status of an entity.", - "type": "boolean" - }, "deprecation_date": { - "description": "The date when the entity was deprecated.", + "description": "The timestamp (in ISO 8601 format) when the entity was deprecated.", "type": "string" }, "description": { @@ -1934,17 +2086,21 @@ "type": "string" }, "release_date": { - "description": "The date when the entity was released for public consumption.", + "description": "The timestamp (in ISO 8601 format) when the entity was released for public consumption.", "type": "string" }, - "release_status": { - "$ref": "#/$defs/ReleaseStatusEnum", - "description": "The release status of an entity." - }, "replaced_by": { - "description": "The entity which replaces a deprecated entity.", + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", "type": "string" }, + "status": { + "$ref": "#/$defs/StatusEnum", + "description": "The status of an entity." + }, "title": { "description": "The title that describes an entity.", "type": "string" @@ -2003,7 +2159,7 @@ "type": "string" }, "library_construction": { - "description": "The name of a library construction approach being used. (eg: \"10X v2 sequencing\" or \"Smart-seq2\")", + "description": "The name of a library construction approach being used. (eg: '10X v2 sequencing' or 'Smart-seq2')", "type": "string" }, "library_construction_kit_manufacturer": { @@ -2043,7 +2199,15 @@ "type": "string" }, "primer": { - "description": "The type of primer used for reverse transcription, e.g. \"oligo-dT\" or \"random\" primer. This allows users to identify content of the cDNA library input e.g. enriched for mRNA.", + "description": "The type of primer used for reverse transcription, e.g. 'oligo-dT' or 'random' primer. This allows users to identify content of the cDNA library input e.g. enriched for mRNA.", + "type": "string" + }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", "type": "string" }, "rnaseq_strandedness": { @@ -2113,6 +2277,14 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" @@ -2178,6 +2350,14 @@ "description": "The organization that the Member is part of.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "telephone": { "description": "The telephone number of the Member.", "type": "string" @@ -2230,6 +2410,14 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" @@ -2287,6 +2475,14 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" @@ -2340,6 +2536,14 @@ "description": "The name for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" @@ -2385,6 +2589,14 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" @@ -2434,6 +2646,14 @@ "description": "The name for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" @@ -2489,7 +2709,7 @@ "has_study": { "description": "One or more Study entities associated with this Project.", "items": { - "$ref": "#/$defs/Experiment" + "$ref": "#/$defs/Study" }, "type": "array" }, @@ -2497,6 +2717,14 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "title": { "description": "Comprehensive title for the project.", "type": "string" @@ -2556,6 +2784,14 @@ "description": "Name of the protocol (eg: Sample extraction_PCR amplification).", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "Type of the protocol (eg: Target enrichment).", "type": "string" @@ -2609,6 +2845,14 @@ "description": "A PMID or DOI for the Publication.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "title": { "description": "The title for the Publication.", "type": "string" @@ -2635,15 +2879,6 @@ "title": "Publication", "type": "object" }, - "ReleaseStatusEnum": { - "description": "Enum to capture the release status.", - "enum": [ - "unreleased", - "released" - ], - "title": "ReleaseStatusEnum", - "type": "string" - }, "ResearchActivity": { "additionalProperties": false, "description": "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.", @@ -2675,6 +2910,14 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "title": { "description": "The title that describes an entity.", "type": "string" @@ -2744,6 +2987,14 @@ "description": "Name of the sample (eg:GHGAS_Blood_Sample1 or GHGAS_PBMC_RNAseq_S1).", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "storage": { "description": "Methods by which sample is stored (e.g. frozen in liquid nitrogen).", "type": "string" @@ -2761,7 +3012,7 @@ "type": "string" }, "vital_status_at_sampling": { - "description": "Vital Status of an Individual at the point of sampling (eg:\"Alive\", \"Deceased\").", + "description": "Vital Status of an Individual at the point of sampling (eg:'Alive', 'Deceased').", "type": "string" }, "xref": { @@ -2791,7 +3042,7 @@ "type": "string" }, "cell_barcode_offset": { - "description": "The offset in sequence of the cell identifying barcode. (Eg. \"0\").", + "description": "The offset in sequence of the cell identifying barcode. (Eg. '0').", "type": "string" }, "cell_barcode_read": { @@ -2799,7 +3050,7 @@ "type": "string" }, "cell_barcode_size": { - "description": "The size of the cell identifying barcode (E.g. \"16\").", + "description": "The size of the cell identifying barcode (E.g. '16').", "type": "string" }, "creation_date": { @@ -2853,6 +3104,14 @@ "description": "A published genetic sequence that is used as a reference sequence against which other sequences are compared. Reference genome(s) or annotation(s) used for prior analyses (eg: GRCh38.p13).", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "sample_barcode_read": { "description": "The type of read that contains the sample barcode (eg: index1/index2/read1/read2).", "type": "string" @@ -2874,7 +3133,7 @@ "type": "string" }, "umi_barcode_offset": { - "description": "The offset in sequence of the UMI identifying barcode. (E.g. \"16\").", + "description": "The offset in sequence of the UMI identifying barcode. (E.g. '16').", "type": "string" }, "umi_barcode_read": { @@ -2882,7 +3141,7 @@ "type": "string" }, "umi_barcode_size": { - "description": "The size of the UMI identifying barcode (Eg. \"10\").", + "description": "The size of the UMI identifying barcode (Eg. '10').", "type": "string" }, "update_date": { @@ -2909,6 +3168,18 @@ "title": "SequencingProtocol", "type": "object" }, + "StatusEnum": { + "description": "Enum to capture the status of an entity.", + "enum": [ + "in progress", + "submitted", + "unreleased", + "released", + "deprecated" + ], + "title": "StatusEnum", + "type": "string" + }, "Study": { "additionalProperties": false, "description": "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.", @@ -2928,12 +3199,8 @@ "description": "Timestamp (in ISO 8601 format) when the entity was created.", "type": "string" }, - "deprecated": { - "description": "The deprecation status of an entity.", - "type": "boolean" - }, "deprecation_date": { - "description": "The date when the entity was deprecated.", + "description": "The timestamp (in ISO 8601 format) when the entity was deprecated.", "type": "string" }, "description": { @@ -2977,24 +3244,28 @@ "type": "string" }, "release_date": { - "description": "The date when the entity was released for public consumption.", + "description": "The timestamp (in ISO 8601 format) when the entity was released for public consumption.", "type": "string" }, - "release_status": { - "$ref": "#/$defs/ReleaseStatusEnum", - "description": "The release status of an entity." - }, "replaced_by": { - "description": "The entity which replaces a deprecated entity.", + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", "type": "string" }, + "status": { + "$ref": "#/$defs/StatusEnum", + "description": "The status of an entity." + }, "title": { "description": "Comprehensive title for the study.", "type": "string" }, "type": { "$ref": "#/$defs/StudyTypeEnum", - "description": "The type of Study. For example, \"Cancer Genomics\", \"Epigenetics\", \"Exome Sequencing\"." + "description": "The type of Study. For example, 'Cancer Genomics', 'Epigenetics', 'Exome Sequencing'." }, "update_date": { "description": "Timestamp (in ISO 8601 format) when the entity was updated.", @@ -3043,12 +3314,8 @@ "additionalProperties": false, "description": "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.", "properties": { - "accession": { - "description": "A unique identifier assigned to an entity for the sole purpose of referring to that entity in a global scope.", - "type": "string" - }, "creation_date": { - "description": "Timestamp (in ISO 8601 format) when the entity was created.", + "description": "Timestamp (in ISO 8601 format) when the Submission was created.", "type": "string" }, "has_analysis": { @@ -3058,13 +3325,6 @@ }, "type": "array" }, - "has_attribute": { - "description": "Holds one or more Attribute entities that further characterizes this entity.", - "items": { - "$ref": "#/$defs/Attribute" - }, - "type": "array" - }, "has_biospecimen": { "description": "Information about one or more Biospecimen entities associated with this submission.", "items": { @@ -3113,31 +3373,28 @@ "description": "Information about a Study entities associated with this submission." }, "id": { - "description": "The internal unique identifier for an entity.", + "description": "A internal unique identifier for the Submission.", "type": "string" }, - "submission_date": { - "description": "The date when submission was completed.", + "replaced_by": { + "description": "Refers to the Submission which replaces a currently deprecated Submission.", "type": "string" }, - "submission_status": { - "$ref": "#/$defs/SubmissionStatusEnum", - "description": "The status of submission." + "replaces": { + "description": "Refers to a deprecated Submission that is being replaced by the current Submission.", + "type": "string" }, - "type": { - "description": "The type of an entity.", + "status": { + "$ref": "#/$defs/StatusEnum", + "description": "The status of a Submission. For example, 'in progress' or 'submitted'." + }, + "submission_date": { + "description": "The timestamp (in ISO 8601 format) when submission was marked completed.", "type": "string" }, "update_date": { - "description": "Timestamp (in ISO 8601 format) when the entity was updated.", + "description": "Timestamp (in ISO 8601 format) when the Submission was updated.", "type": "string" - }, - "xref": { - "description": "Holds one or more database cross references.", - "items": { - "type": "string" - }, - "type": "array" } }, "required": [ @@ -3146,15 +3403,6 @@ "title": "Submission", "type": "object" }, - "SubmissionStatusEnum": { - "description": "Enum to capture submission status.", - "enum": [ - "in progress", - "submitted" - ], - "title": "SubmissionStatusEnum", - "type": "string" - }, "Technology": { "additionalProperties": false, "description": "A Technology is an abstraction that represents the instrument used for an assay. The Technology entity captures instrument-specific attributes that are relevant for an Experiment entity. The Technology entity may be further characterized by its children where each child has fields that are relevant to that particular technology.", @@ -3178,6 +3426,14 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" @@ -3239,6 +3495,14 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "role": { "$ref": "#/$defs/UserRoleEnum", "description": "The role of the user" @@ -3307,6 +3571,14 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" @@ -3376,6 +3648,14 @@ "description": "The internal unique identifier for an entity.", "type": "string" }, + "replaced_by": { + "description": "Refers to the entity which replaces a currently deprecated entity.", + "type": "string" + }, + "replaces": { + "description": "Refers to a deprecated entity that is being replaced by the current entity.", + "type": "string" + }, "type": { "description": "The type of an entity.", "type": "string" diff --git a/artifacts/owl/ghga.owl.ttl b/artifacts/owl/ghga.owl.ttl index 2c926c14..35f8fb14 100644 --- a/artifacts/owl/ghga.owl.ttl +++ b/artifacts/owl/ghga.owl.ttl @@ -17,19 +17,17 @@ rdfs:label "GHGA-Metadata-Schema" ; IAO:0000700 GHGA:Attribute, GHGA:DataUseCondition, - GHGA:DeprecationMixin, GHGA:NamedThing, - GHGA:ReleaseStatusMixin, - GHGA:SubmissionStatusMixin, + GHGA:Submission, GHGA:WorkflowParameter ; dcterms:license "https://creativecommons.org/publicdomain/zero/1.0/" ; - pav:version "1.0.0a" ; + pav:version "0.1.0" ; skos:definition "The metadata schema for the German Human Genome-Phenome Archive (GHGA)." ; - linkml:generation_date "2021-11-24T12:26:20" ; + linkml:generation_date "2021-11-26T07:49:56" ; linkml:metamodel_version "1.7.0" ; linkml:source_file "ghga.yaml" ; - linkml:source_file_date "2021-11-24T12:25:33" ; - linkml:source_file_size 60843 . + linkml:source_file_date "2021-11-26T07:49:08" ; + linkml:source_file_size 62067 . GHGA:AggregateDataset a owl:Class, linkml:ClassDefinition ; @@ -44,12 +42,6 @@ GHGA:AnalysisDataset a owl:Class, linkml:ClassDefinition ; rdfs:label "analysis dataset" ; rdfs:subClassOf [ a owl:Class ; - owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom GHGA:Study ; - owl:onProperty GHGA:has_study ] [ a owl:Restriction ; - owl:onProperty GHGA:has_study ; - owl:someValuesFrom GHGA:Study ] ) ], - [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; owl:allValuesFrom GHGA:Analysis ; owl:onProperty GHGA:has_experiment ] [ a owl:Restriction ; @@ -57,14 +49,20 @@ GHGA:AnalysisDataset a owl:Class, owl:someValuesFrom GHGA:Analysis ] ) ], [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom GHGA:DataAccessPolicy ; - owl:onProperty GHGA:has_data_access_policy ] [ a owl:Restriction ; - owl:onProperty GHGA:has_data_access_policy ; - owl:someValuesFrom GHGA:DataAccessPolicy ] ) ], + owl:allValuesFrom GHGA:Study ; + owl:onProperty GHGA:has_study ] [ a owl:Restriction ; + owl:onProperty GHGA:has_study ; + owl:someValuesFrom GHGA:Study ] ) ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:has_analysis ], + [ a owl:Class ; + owl:intersectionOf ( [ a owl:Restriction ; + owl:allValuesFrom GHGA:DataAccessPolicy ; + owl:onProperty GHGA:has_data_access_policy ] [ a owl:Restriction ; + owl:onProperty GHGA:has_data_access_policy ; + owl:someValuesFrom GHGA:DataAccessPolicy ] ) ], GHGA:Dataset ; skos:definition "An Analysis Dataset is a collection of Files generated from one or more Analysis performed on data from one or more Studies." . @@ -96,6 +94,12 @@ GHGA:ExperimentDataset a owl:Class, linkml:ClassDefinition ; rdfs:label "experiment dataset" ; rdfs:subClassOf [ a owl:Class ; + owl:intersectionOf ( [ a owl:Restriction ; + owl:allValuesFrom GHGA:Experiment ; + owl:onProperty GHGA:has_experiment ] [ a owl:Restriction ; + owl:onProperty GHGA:has_experiment ; + owl:someValuesFrom GHGA:Experiment ] ) ], + [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; owl:allValuesFrom GHGA:Study ; owl:onProperty GHGA:has_study ] [ a owl:Restriction ; @@ -107,12 +111,6 @@ GHGA:ExperimentDataset a owl:Class, owl:onProperty GHGA:has_data_access_policy ] [ a owl:Restriction ; owl:onProperty GHGA:has_data_access_policy ; owl:someValuesFrom GHGA:DataAccessPolicy ] ) ], - [ a owl:Class ; - owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom GHGA:Experiment ; - owl:onProperty GHGA:has_experiment ] [ a owl:Restriction ; - owl:onProperty GHGA:has_experiment ; - owl:someValuesFrom GHGA:Experiment ] ) ], GHGA:Dataset ; skos:definition "An Experiment Dataset is a collection of Files linked to one or more Experiments from one or more Studies." . @@ -120,12 +118,12 @@ 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 ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Individual ; + owl:onProperty GHGA:has_member ], 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." . @@ -136,64 +134,64 @@ GHGA:LibraryPreparationProtocol a owl:Class, owl:onClass linkml:String ; owl:onProperty GHGA:name ; 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:description ; + owl:onProperty GHGA:library_name ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_level ], + owl:onProperty GHGA:library_construction_kit_retail_name ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:end_bias ], + owl:allValuesFrom GHGA:Attribute ; + owl:onProperty GHGA:has_attribute ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_construction_kit_retail_name ; + owl:onProperty GHGA:library_construction_kit_manufacturer ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:rnaseq_strandedness ], + owl:onProperty GHGA:library_layout ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:library_construction ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_preparation ; + owl:onProperty GHGA:library_selection ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_name ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:library_level ], [ 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:library_selection ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:rnaseq_strandedness ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:primer ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_layout ; + owl:onProperty GHGA:library_type ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_type ; + owl:onProperty GHGA:end_bias ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:description ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:library_construction_kit_manufacturer ; + owl:onProperty GHGA:library_preparation ; owl:qualifiedCardinality 1 ], GHGA:Protocol ; skos:definition "Information about the library preparation of an Experiment." . @@ -202,60 +200,48 @@ 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:name ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:target_coverage ], - [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:sequencing_center ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:flow_cell_id ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:flow_cell_type ], + owl:onProperty GHGA:cell_barcode_size ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:cell_barcode_read ], + owl:onProperty GHGA:read_length ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:cell_barcode_offset ], + owl:onProperty GHGA:name ], [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:instrument_model ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:description ], [ 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:umi_barcode_read ], + owl:onProperty GHGA:read_pair_number ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:read_pair_number ], + owl:onProperty GHGA:sample_barcode_read ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:umi_barcode_offset ], + owl:onProperty GHGA:sequencing_center ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:lane_number ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:reference_annotation ], + owl:onProperty GHGA:instrument_model ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -263,70 +249,37 @@ GHGA:SequencingProtocol a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:sample_barcode_read ], + owl:onProperty GHGA:umi_barcode_offset ], [ 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:lane_number ], + owl:onProperty GHGA:flow_cell_type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:umi_barcode_size ], + owl:onProperty GHGA:reference_annotation ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:read_length ], - GHGA:Protocol ; - skos:definition "Information about the sequencing of a sample." . - -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:allValuesFrom GHGA:Sample ; - owl:onProperty GHGA:has_sample ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass <http://UNKNOWN.org/submission_status_enum> ; - owl:onProperty GHGA:submission_status ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Analysis ; - owl:onProperty GHGA:has_analysis ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Study ; - owl:onProperty GHGA:has_study ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Individual ; - owl:onProperty GHGA:has_individual ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Biospecimen ; - owl:onProperty GHGA:has_biospecimen ], + owl:onProperty GHGA:umi_barcode_size ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:DataAccessPolicy ; - owl:onProperty GHGA:has_data_access_policy ], + owl:onClass linkml:String ; + owl:onProperty GHGA:umi_barcode_read ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:submission_date ], + owl:onProperty GHGA:cell_barcode_read ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Project ; - owl:onProperty GHGA:has_project ], - GHGA:NamedThing, - GHGA:SubmissionStatusMixin ; - 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." . + owl:onClass linkml:String ; + owl:onProperty GHGA:cell_barcode_offset ], + GHGA:Protocol ; + skos:definition "Information about the sequencing of a sample." . GHGA:User a owl:Class, linkml:ClassDefinition ; @@ -370,22 +323,22 @@ GHGA:AnalysisProcess a owl:Class, rdfs:label "analysis process" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Agent ; - owl:onProperty GHGA:has_agent ], + owl:onClass linkml:String ; + owl:onProperty GHGA:title ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:WorkflowStep ; owl:onProperty GHGA:has_workflow_step ], [ 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:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:title ], + 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." . @@ -418,8 +371,8 @@ GHGA:DataAccessCommittee a owl:Class, rdfs:label "data access committee" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onClass GHGA:Member ; + owl:onProperty GHGA:main_contact ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Member ; owl:onProperty GHGA:has_member ], @@ -429,8 +382,8 @@ GHGA:DataAccessCommittee a owl:Class, 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 ], GHGA:Committee ; skos:definition "A group of members that are delegated to grant access to one or more datasets after ensuring the minimum criteria for data sharing has been met, and request for data use does not raise ethical and/or legal concerns." . @@ -440,11 +393,11 @@ GHGA:DataTransformation 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 ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:id ; @@ -453,29 +406,17 @@ GHGA:DataTransformation a owl:Class, skos:definition "A data transformation technique used to analyze and interpret data to gain a better understanding of it." ; skos:exactMatch <http://purl.obolibrary.org/obo/OBI_0200000> . -GHGA:Disease a owl:Class, - linkml:ClassDefinition ; - rdfs:label "disease" ; - rdfs:subClassOf GHGA:DiseaseOrPhenotypicFeature ; - skos:definition "A disease is a disposition to undergo pathological processes that exists in an organism because of one or more disorders in that organism." ; - skos:exactMatch <http://purl.obolibrary.org/obo/MONDO_0000001>, - EFO:0000408 . - GHGA:ExperimentProcess a owl:Class, linkml:ClassDefinition ; rdfs:label "experiment process" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Agent ; - owl:onProperty GHGA:has_agent ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Protocol ; owl:onProperty GHGA:has_protocol ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:File ; - owl:onProperty GHGA:has_output ], + owl:onClass GHGA:Agent ; + owl:onProperty GHGA:has_agent ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Sample ; @@ -484,19 +425,13 @@ GHGA:ExperimentProcess a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:title ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:File ; + owl:onProperty GHGA:has_output ], 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." . -GHGA:PhenotypicFeature a owl:Class, - linkml:ClassDefinition ; - rdfs:label "phenotypic feature" ; - rdfs:subClassOf GHGA:DiseaseOrPhenotypicFeature ; - skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C16977> ; - skos:definition "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." ; - skos:exactMatch <http://purl.obolibrary.org/obo/HP_0000118>, - SIO:010056, - EFO:0000651 . - GHGA:ResearchActivity a owl:Class, linkml:ClassDefinition ; rdfs:label "research activity" ; @@ -507,44 +442,107 @@ GHGA:ResearchActivity a owl:Class, [ 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:closeMatch <http://purl.obolibrary.org/obo/NCIT_C15429> ; 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 <http://purl.obolibrary.org/obo/SEPIO_0000004> . -GHGA:Technology a owl:Class, - linkml:ClassDefinition ; - rdfs:label "technology" ; - rdfs:subClassOf GHGA:InformationContentEntity ; - skos:definition "A Technology is an abstraction that represents the instrument used for an assay. The Technology entity captures instrument-specific attributes that are relevant for an Experiment entity. The Technology entity may be further characterized by its children where each child has fields that are relevant to that particular technology." . - -GHGA:Workflow a owl:Class, - linkml:ClassDefinition ; - rdfs:label "workflow" ; - rdfs:subClassOf 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." . - -GHGA:WorkflowStep a owl:Class, +GHGA:Submission a owl:Class, linkml:ClassDefinition ; - rdfs:label "workflow step" ; + rdfs:label "submission" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom GHGA:WorkflowParameter ; - owl:onProperty GHGA:has_parameter ], - GHGA:InformationContentEntity ; - skos:definition "A Workflow Step represents each individual step performed in a Workflow. If the Workflow is a single-step workflow then the Workflow has just one Workflow Step entity. If the Workflow is a multi-step workflow then the Workflow has a Workflow Step entity for each step. All Workflow step specific attributes like parameters, and metadata about execution environment are captured by the Workflow Step entity." . - -GHGA:abstract a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "abstract" ; - rdfs:range linkml:String ; - skos:definition "The study abstract that describes the goals. Can also hold abstract from a publication related to this study" . - -GHGA:accession a owl:ObjectProperty, + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:NamedThing ; + owl:onProperty GHGA:replaces ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:id ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:DataAccessPolicy ; + owl:onProperty GHGA:has_data_access_policy ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_file ], + [ 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:submission_date ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Project ; + owl:onProperty GHGA:has_project ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Sample ; + owl:onProperty GHGA:has_sample ], + [ a owl:Restriction ; + 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:update_date ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Analysis ; + owl:onProperty GHGA:has_analysis ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:creation_date ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Individual ; + owl:onProperty GHGA:has_individual ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Experiment ; + owl:onProperty GHGA:has_experiment ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Biospecimen ; + owl:onProperty GHGA:has_biospecimen ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass <http://UNKNOWN.org/status_enum> ; + owl:onProperty GHGA:status ] ; + 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." . + +GHGA:Technology a owl:Class, + linkml:ClassDefinition ; + rdfs:label "technology" ; + rdfs:subClassOf GHGA:InformationContentEntity ; + skos:definition "A Technology is an abstraction that represents the instrument used for an assay. The Technology entity captures instrument-specific attributes that are relevant for an Experiment entity. The Technology entity may be further characterized by its children where each child has fields that are relevant to that particular technology." . + +GHGA:Workflow a owl:Class, + linkml:ClassDefinition ; + rdfs:label "workflow" ; + rdfs:subClassOf 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." . + +GHGA:WorkflowStep a owl:Class, + linkml:ClassDefinition ; + rdfs:label "workflow step" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom GHGA:WorkflowParameter ; + owl:onProperty GHGA:has_parameter ], + GHGA:InformationContentEntity ; + skos:definition "A Workflow Step represents each individual step performed in a Workflow. If the Workflow is a single-step workflow then the Workflow has just one Workflow Step entity. If the Workflow is a multi-step workflow then the Workflow has a Workflow Step entity for each step. All Workflow step specific attributes like parameters, and metadata about execution environment are captured by the Workflow Step entity." . + +GHGA:abstract a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "abstract" ; + rdfs:range linkml:String ; + skos:definition "The study abstract that describes the goals. Can also hold abstract from a publication related to this study" . + +GHGA:accession a owl:ObjectProperty, linkml:SlotDefinition . GHGA:additional_name a owl:ObjectProperty, @@ -575,7 +573,7 @@ GHGA:cell_barcode_offset a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "cell barcode offset" ; rdfs:range linkml:String ; - skos:definition "The offset in sequence of the cell identifying barcode. (Eg. \"0\")." . + skos:definition "The offset in sequence of the cell identifying barcode. (Eg. '0')." . GHGA:cell_barcode_read a owl:ObjectProperty, linkml:SlotDefinition ; @@ -587,7 +585,7 @@ GHGA:cell_barcode_size a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "cell barcode size" ; rdfs:range linkml:String ; - skos:definition "The size of the cell identifying barcode (E.g. \"16\")." . + skos:definition "The size of the cell identifying barcode (E.g. '16')." . GHGA:checksum a owl:ObjectProperty, linkml:SlotDefinition ; @@ -595,8 +593,11 @@ GHGA:checksum a owl:ObjectProperty, rdfs:range linkml:String ; skos:definition "A computed value which depends on the contents of a block of data and which is transmitted or stored along with the data in order to detect corruption of the data. The receiving system recomputes the checksum based upon the received data and compares this value with the one sent with the data. If the two values are the same, the receiver has some confidence that the data was received correctly." . -GHGA:creation_date a owl:ObjectProperty, - linkml:SlotDefinition . +GHGA:deprecation_date a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "deprecation date" ; + rdfs:range linkml:String ; + skos:definition "The timestamp (in ISO 8601 format) when the entity was deprecated." . GHGA:end_bias a owl:ObjectProperty, linkml:SlotDefinition ; @@ -679,9 +680,6 @@ GHGA:has_data_use_condition a owl:ObjectProperty, GHGA:has_dataset a owl:ObjectProperty, linkml:SlotDefinition . -GHGA:has_disease a owl:ObjectProperty, - linkml:SlotDefinition . - GHGA:has_experiment_process a owl:ObjectProperty, linkml:SlotDefinition . @@ -691,9 +689,6 @@ GHGA:has_parameter a owl:ObjectProperty, GHGA:has_parent a owl:ObjectProperty, linkml:SlotDefinition . -GHGA:has_phenotypic_feature a owl:ObjectProperty, - linkml:SlotDefinition . - GHGA:has_proband a owl:ObjectProperty, linkml:SlotDefinition . @@ -779,7 +774,7 @@ GHGA:primer a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "primer" ; rdfs:range linkml:String ; - skos:definition "The type of primer used for reverse transcription, e.g. \"oligo-dT\" or \"random\" primer. This allows users to identify content of the cDNA library input e.g. enriched for mRNA." . + skos:definition "The type of primer used for reverse transcription, e.g. 'oligo-dT' or 'random' primer. This allows users to identify content of the cDNA library input e.g. enriched for mRNA." . GHGA:read_length a owl:ObjectProperty, linkml:SlotDefinition ; @@ -799,6 +794,12 @@ GHGA:reference_annotation a owl:ObjectProperty, rdfs:range linkml:String ; skos:definition "A published genetic sequence that is used as a reference sequence against which other sequences are compared. Reference genome(s) or annotation(s) used for prior analyses (eg: GRCh38.p13)." . +GHGA:release_date a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "release date" ; + rdfs:range linkml:String ; + skos:definition "The timestamp (in ISO 8601 format) when the entity was released for public consumption." . + GHGA:rnaseq_strandedness a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "rnaseq strandedness" ; @@ -838,6 +839,12 @@ GHGA:storage a owl:ObjectProperty, rdfs:range linkml:String ; skos:definition "Methods by which sample is stored (e.g. frozen in liquid nitrogen)." . +GHGA:submission_date a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "submission date" ; + rdfs:range linkml:String ; + skos:definition "The timestamp (in ISO 8601 format) when submission was marked completed." . + GHGA:target_coverage a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "target coverage" ; @@ -863,7 +870,7 @@ GHGA:umi_barcode_offset a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "umi barcode offset" ; rdfs:range linkml:String ; - skos:definition "The offset in sequence of the UMI identifying barcode. (E.g. \"16\")." . + skos:definition "The offset in sequence of the UMI identifying barcode. (E.g. '16')." . GHGA:umi_barcode_read a owl:ObjectProperty, linkml:SlotDefinition ; @@ -875,10 +882,7 @@ GHGA:umi_barcode_size a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "umi barcode size" ; rdfs:range linkml:String ; - skos:definition "The size of the UMI identifying barcode (Eg. \"10\")." . - -GHGA:update_date a owl:ObjectProperty, - linkml:SlotDefinition . + skos:definition "The size of the UMI identifying barcode (Eg. '10')." . GHGA:url a owl:ObjectProperty, linkml:SlotDefinition . @@ -893,7 +897,7 @@ GHGA:vital_status_at_sampling a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "vital status at sampling" ; rdfs:range linkml:String ; - skos:definition "Vital Status of an Individual at the point of sampling (eg:\"Alive\", \"Deceased\")." . + skos:definition "Vital Status of an Individual at the point of sampling (eg:'Alive', 'Deceased')." . GHGA:year_of_birth a owl:ObjectProperty, linkml:SlotDefinition ; @@ -921,15 +925,8 @@ GHGA:Biospecimen a owl:Class, rdfs:label "biospecimen" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Individual ; - owl:onProperty GHGA:has_individual ], - [ 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:name ], + owl:onClass GHGA:AnatomicalEntity ; + owl:onProperty GHGA:has_anatomical_entity ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -939,8 +936,15 @@ GHGA:Biospecimen a owl:Class, owl:onProperty GHGA:has_disease ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:AnatomicalEntity ; - owl:onProperty GHGA:has_anatomical_entity ], + owl:onClass linkml:String ; + owl:onProperty GHGA:name ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:PhenotypicFeature ; + owl:onProperty GHGA:has_phenotypic_feature ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Individual ; + owl:onProperty GHGA:has_individual ], 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." ; skos:exactMatch <http://purl.obolibrary.org/obo/OBI_0100051> . @@ -958,17 +962,25 @@ GHGA:DataUseCondition a owl:Class, owl:onProperty GHGA:permission ] ; skos:definition "Data Use Condition represents the use conditions associated with a Dataset. A permission field can have one or more terms that collectively defines the data use condition. The modifier determines the interpretation of the use permission(s)." . +GHGA:Disease a owl:Class, + linkml:ClassDefinition ; + rdfs:label "disease" ; + rdfs:subClassOf GHGA:DiseaseOrPhenotypicFeature ; + skos:definition "A disease is a disposition to undergo pathological processes that exists in an organism because of one or more disorders in that organism." ; + skos:exactMatch <http://purl.obolibrary.org/obo/MONDO_0000001>, + EFO:0000408 . + GHGA:DiseaseOrPhenotypicFeature a owl:Class, linkml:ClassDefinition ; rdfs:label "disease or phenotypic feature" ; 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:description ], GHGA:BiologicalQuality ; 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 . @@ -978,39 +990,29 @@ GHGA:Investigation a owl:Class, rdfs:label "investigation" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Publication ; - owl:onProperty GHGA:has_publication ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:Boolean ; - owl:onProperty GHGA:deprecated ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass <http://UNKNOWN.org/release_status_enum> ; - owl:onProperty GHGA:release_status ], + owl:onClass linkml:String ; + owl:onProperty GHGA:release_date ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:release_date ], + owl:onProperty GHGA:deprecation_date ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:description ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:title ], + owl:onClass GHGA:Publication ; + owl:onProperty GHGA:has_publication ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:deprecation_date ], + owl:onProperty GHGA:title ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:NamedThing ; - owl:onProperty GHGA:replaced_by ], - GHGA:DeprecationMixin, - GHGA:PlannedProcess, - GHGA:ReleaseStatusMixin ; + owl:onClass <http://UNKNOWN.org/status_enum> ; + owl:onProperty GHGA:status ], + GHGA:PlannedProcess ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C15429> ; 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 <http://purl.obolibrary.org/obo/OBI_0000066>, @@ -1025,15 +1027,25 @@ GHGA:Member a owl:Class, owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:organization ; + owl:onProperty GHGA:telephone ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; 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." . +GHGA:PhenotypicFeature a owl:Class, + linkml:ClassDefinition ; + rdfs:label "phenotypic feature" ; + rdfs:subClassOf GHGA:DiseaseOrPhenotypicFeature ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C16977> ; + skos:definition "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." ; + skos:exactMatch <http://purl.obolibrary.org/obo/HP_0000118>, + SIO:010056, + EFO:0000651 . + GHGA:Population a owl:Class, linkml:ClassDefinition ; rdfs:label "population" ; @@ -1058,30 +1070,16 @@ GHGA:Project a owl:Class, owl:onClass linkml:String ; owl:onProperty GHGA:description ; owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Study ; + owl:onProperty GHGA:has_study ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Attribute ; owl:onProperty GHGA:has_attribute ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Experiment ; - owl:onProperty GHGA:has_study ], GHGA:ResearchActivity ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C47885> ; skos:definition "Any specifically defined piece of work that is undertaken or attempted to meet a single requirement." . -GHGA:SubmissionStatusMixin a owl:Class, - linkml:ClassDefinition ; - rdfs:label "submission status mixin" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:submission_date ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass <http://UNKNOWN.org/submission_status_enum> ; - owl:onProperty GHGA:submission_status ], - linkml:mixin ; - skos:definition "A mixin that keeps track of the submission status." . - GHGA:WorkflowParameter a owl:Class, linkml:ClassDefinition ; rdfs:label "workflow parameter" ; @@ -1098,6 +1096,9 @@ GHGA:WorkflowParameter a owl:Class, GHGA:affiliation a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:creation_date a owl:ObjectProperty, + linkml:SlotDefinition . + GHGA:email a owl:ObjectProperty, linkml:SlotDefinition . @@ -1107,6 +1108,12 @@ GHGA:has_agent a owl:ObjectProperty, GHGA:has_biospecimen a owl:ObjectProperty, linkml:SlotDefinition . +GHGA:has_disease a owl:ObjectProperty, + linkml:SlotDefinition . + +GHGA:has_phenotypic_feature a owl:ObjectProperty, + linkml:SlotDefinition . + GHGA:has_project a owl:ObjectProperty, linkml:SlotDefinition . @@ -1116,38 +1123,17 @@ GHGA:has_sample a owl:ObjectProperty, GHGA:key a owl:ObjectProperty, linkml:SlotDefinition . -GHGA:submission_date a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "submission date" ; - rdfs:range linkml:String ; - skos:definition "The date when submission was completed." . +GHGA:replaced_by a owl:ObjectProperty, + linkml:SlotDefinition . -GHGA:submission_status a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "submission status" ; - rdfs:range <http://UNKNOWN.org/submission_status_enum> ; - skos:definition "The status of submission." . +GHGA:replaces a owl:ObjectProperty, + linkml:SlotDefinition . -GHGA:value a owl:ObjectProperty, +GHGA:update_date a owl:ObjectProperty, linkml:SlotDefinition . -GHGA:DeprecationMixin a owl:Class, - linkml:ClassDefinition ; - rdfs:label "deprecation 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 linkml:Boolean ; - owl:onProperty GHGA:deprecated ], - linkml:mixin ; - skos:definition "A mixin that keeps track of the deprecation status." . +GHGA:value a owl:ObjectProperty, + linkml:SlotDefinition . GHGA:Person a owl:Class, linkml:ClassDefinition ; @@ -1174,27 +1160,27 @@ GHGA:Protocol a owl:Class, linkml:ClassDefinition ; rdfs:label "protocol" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:name ], - [ 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:url ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty GHGA:xref ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ], + owl:onProperty GHGA:type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:type ], + owl:onProperty GHGA:name ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:url ], + owl:onProperty GHGA:description ], GHGA:InformationContentEntity ; skos:altLabel "experiment protocol", "library protocol" ; @@ -1202,37 +1188,20 @@ GHGA:Protocol a owl:Class, 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 <http://purl.obolibrary.org/obo/OBI_0000272> . -GHGA:ReleaseStatusMixin a owl:Class, - linkml:ClassDefinition ; - rdfs:label "release status mixin" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:release_date ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass <http://UNKNOWN.org/release_status_enum> ; - owl:onProperty GHGA:release_status ], - linkml:mixin ; - skos:definition "A mixin that keeps track of the release status." . - 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 GHGA:Biospecimen ; owl:onProperty GHGA:has_biospecimen ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty GHGA:xref ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:description ; + owl:onProperty GHGA:tissue ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:onClass GHGA:Individual ; + owl:onProperty GHGA:has_individual ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; @@ -1240,41 +1209,32 @@ GHGA:Sample a owl:Class, owl:onProperty GHGA:vital_status_at_sampling ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass <http://UNKNOWN.org/case_control_enum> ; - owl:onProperty GHGA:type ], + owl:onClass linkml:String ; + owl:onProperty GHGA:storage ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:isolation ], + owl:onClass <http://UNKNOWN.org/case_control_enum> ; + owl:onProperty GHGA:type ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:name ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; - owl:onClass GHGA:Individual ; - owl:onProperty GHGA:has_individual ; - owl:qualifiedCardinality 1 ], + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:isolation ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:tissue ; + owl:onProperty GHGA:description ; owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty GHGA:xref ], 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:deprecated a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "deprecated" ; - rdfs:range linkml:Boolean ; - skos:definition "The deprecation status of an entity." . - -GHGA:deprecation_date a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "deprecation date" ; - rdfs:range linkml:String ; - skos:definition "The date when the entity was deprecated." . - GHGA:has_analysis a owl:ObjectProperty, linkml:SlotDefinition . @@ -1290,47 +1250,29 @@ GHGA:has_member a owl:ObjectProperty, GHGA:has_output a owl:ObjectProperty, linkml:SlotDefinition . -GHGA:id a owl:ObjectProperty, +GHGA:status a owl:ObjectProperty, linkml:SlotDefinition . -GHGA:release_date a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "release date" ; - rdfs:range linkml:String ; - skos:definition "The date when the entity was released for public consumption." . - -GHGA:release_status a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "release status" ; - rdfs:range <http://UNKNOWN.org/release_status_enum> ; - skos:definition "The release status of an entity." . - -GHGA:replaced_by a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "replaced by" ; - rdfs:range GHGA:NamedThing ; - skos:definition "The entity which replaces a deprecated entity." . - GHGA:Analysis a owl:Class, linkml:ClassDefinition ; rdfs:label "analysis" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Workflow ; - owl:onProperty GHGA:has_workflow ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_input ], + owl:allValuesFrom GHGA:AnalysisProcess ; + owl:onProperty GHGA:has_analysis_process ], [ a owl:Restriction ; owl:allValuesFrom GHGA:File ; owl:onProperty GHGA:has_output ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Workflow ; + owl:onProperty GHGA:has_workflow ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Study ; owl:onProperty GHGA:has_study ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:AnalysisProcess ; - owl:onProperty GHGA:has_analysis_process ], + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_input ], GHGA:DataTransformation ; skos:altLabel "data analysis" ; skos:definition "An Analysis is a data transformation that transforms input data to output data. The workflow used to achieve this transformation and the individual steps are also captured." . @@ -1340,96 +1282,94 @@ GHGA:Dataset a owl:Class, rdfs:label "dataset" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:deprecation_date ], - [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:type ; - owl:qualifiedCardinality 1 ], + owl:onClass <http://UNKNOWN.org/status_enum> ; + owl:onProperty GHGA:status ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:description ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:Boolean ; - owl:onProperty GHGA:deprecated ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:release_date ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:title ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass <http://UNKNOWN.org/release_status_enum> ; - owl:onProperty GHGA:release_status ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:NamedThing ; - owl:onProperty GHGA:replaced_by ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Publication ; owl:onProperty GHGA:has_publication ], + [ a owl:Restriction ; + owl:onClass linkml:String ; + owl:onProperty GHGA:type ; + owl:qualifiedCardinality 1 ], [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; owl:allValuesFrom GHGA:File ; owl:onProperty GHGA:has_file ] [ a owl:Restriction ; owl:onProperty GHGA:has_file ; owl:someValuesFrom GHGA:File ] ) ], - GHGA:DeprecationMixin, - GHGA:InformationContentEntity, - GHGA:ReleaseStatusMixin ; + GHGA:InformationContentEntity ; skos:definition "A Dataset is a collection of Files that is prepared for distribution." ; skos:exactMatch SIO:000089 . -GHGA:has_file a owl:ObjectProperty, - linkml:SlotDefinition . - -GHGA:xref a owl:ObjectProperty, - linkml:SlotDefinition . - -GHGA:DataAccessPolicy a owl:Class, +GHGA:Experiment a owl:Class, linkml:ClassDefinition ; - rdfs:label "data access policy" ; + rdfs:label "experiment" ; rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom GHGA:File ; + owl:onProperty GHGA:has_file ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:ExperimentProcess ; + owl:onProperty GHGA:has_experiment_process ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:Technology ; + owl:onProperty GHGA:has_technology ], + [ 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:policy_url ], + owl:onProperty GHGA:biological_replicates ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:DataUseCondition ; - owl:onProperty GHGA:has_data_use_condition ], + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:technical_replicates ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:policy_text ; + owl:onProperty GHGA:title ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ], + owl:onProperty GHGA:experimental_replicates ], [ a owl:Restriction ; - owl:onClass GHGA:DataAccessCommittee ; - owl:onProperty GHGA:has_data_access_committee ; + owl:onClass GHGA:Sample ; + owl:onProperty GHGA:has_sample ; owl:qualifiedCardinality 1 ], - GHGA:InformationContentEntity ; - skos:definition "A Data Access Policy specifies under which circumstances, legal or otherwise, a user can have access to one or more Datasets belonging to one or more Studies." . + [ a owl:Restriction ; + owl:onClass GHGA:Study ; + owl:onProperty GHGA:has_study ; + owl:qualifiedCardinality 1 ], + GHGA:Investigation ; + skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C42790> ; + 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:Experiment a owl:Class, +GHGA:has_file a owl:ObjectProperty, + linkml:SlotDefinition . + +GHGA:id a owl:ObjectProperty, + linkml:SlotDefinition . + +GHGA:xref a owl:ObjectProperty, + linkml:SlotDefinition . + +GHGA:DataAccessPolicy a owl:Class, linkml:ClassDefinition ; - rdfs:label "experiment" ; + rdfs:label "data access policy" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:biological_replicates ], - [ a owl:Restriction ; - owl:onClass GHGA:Sample ; - owl:onProperty GHGA:has_sample ; + owl:onClass GHGA:DataAccessCommittee ; + owl:onProperty GHGA:has_data_access_committee ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:onClass linkml:String ; @@ -1438,33 +1378,20 @@ GHGA:Experiment a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:technical_replicates ], + owl:onProperty GHGA:name ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:experimental_replicates ], - [ a owl:Restriction ; - owl:onClass GHGA:Study ; - owl:onProperty GHGA:has_study ; + owl:onProperty GHGA:policy_text ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:ExperimentProcess ; - owl:onProperty GHGA:has_experiment_process ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass GHGA:Technology ; - owl:onProperty GHGA:has_technology ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:File ; - owl:onProperty GHGA:has_file ], - [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:title ; - owl:qualifiedCardinality 1 ], - GHGA:Investigation ; - skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C42790> ; - 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 . + owl:onProperty GHGA:policy_url ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:DataUseCondition ; + owl:onProperty GHGA:has_data_use_condition ], + GHGA:InformationContentEntity ; + skos:definition "A Data Access Policy specifies under which circumstances, legal or otherwise, a user can have access to one or more Datasets belonging to one or more Studies." . GHGA:MaterialEntity a owl:Class, linkml:ClassDefinition ; @@ -1491,11 +1418,11 @@ GHGA:Publication a owl:Class, [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:abstract ], + owl:onProperty GHGA:title ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:title ], + owl:onProperty GHGA:abstract ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:id ; @@ -1522,6 +1449,10 @@ GHGA:Attribute a owl:Class, linkml:ClassDefinition ; rdfs:label "attribute" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:key_type ], + [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:value ; owl:qualifiedCardinality 1 ], @@ -1529,10 +1460,6 @@ GHGA:Attribute a owl:Class, owl:onClass linkml:String ; owl:onProperty GHGA:key ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:key_type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -1540,30 +1467,26 @@ GHGA:Attribute a owl:Class, skos:definition "A key/value pair that further characterizes an entity." ; skos:exactMatch SIO:000614 . +GHGA:InformationContentEntity a owl:Class, + linkml:ClassDefinition ; + rdfs:label "information content entity" ; + rdfs:subClassOf GHGA:NamedThing ; + skos:definition "A generically dependent continuant that is about some thing." ; + skos:exactMatch IAO:0000030 . + GHGA:Study a owl:Class, linkml:ClassDefinition ; rdfs:label "study" ; rdfs:subClassOf [ a owl:Restriction ; - owl:onClass linkml:String ; - owl:onProperty GHGA:description ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; owl:allValuesFrom GHGA:Publication ; owl:onProperty GHGA:has_publication ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], + owl:allValuesFrom GHGA:Analysis ; + owl:onProperty GHGA:has_analysis ], [ a owl:Restriction ; owl:onClass linkml:String ; - owl:onProperty GHGA:title ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:onClass <http://UNKNOWN.org/study_type_enum> ; - owl:onProperty GHGA:type ; + owl:onProperty GHGA:description ; owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Experiment ; - owl:onProperty GHGA:has_experiment ], [ a owl:Class ; owl:intersectionOf ( [ a owl:Restriction ; owl:allValuesFrom linkml:String ; @@ -1571,22 +1494,26 @@ GHGA:Study a owl:Class, owl:onProperty GHGA:affiliation ; owl:someValuesFrom linkml:String ] ) ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:Analysis ; - owl:onProperty GHGA:has_analysis ], + owl:allValuesFrom GHGA:Experiment ; + owl:onProperty GHGA:has_experiment ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass GHGA:Project ; owl:onProperty GHGA:has_project ], + [ a owl:Restriction ; + owl:onClass <http://UNKNOWN.org/study_type_enum> ; + 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:Attribute ; + owl:onProperty GHGA:has_attribute ], GHGA:Investigation ; 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 a owl:Class, - linkml:ClassDefinition ; - rdfs:label "information content entity" ; - rdfs:subClassOf GHGA:NamedThing ; - skos:definition "A generically dependent continuant that is about some thing." ; - skos:exactMatch IAO:0000030 . - GHGA:has_study a owl:ObjectProperty, linkml:SlotDefinition . @@ -1594,33 +1521,33 @@ GHGA:File a owl:Class, linkml:ClassDefinition ; rdfs:label "file" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:category ], - [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty GHGA:size ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:format ], + owl:onProperty GHGA:name ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:file_index ], + owl:onProperty GHGA:checksum ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:checksum ], + owl:onProperty GHGA:format ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass <http://UNKNOWN.org/file_type_enum> ; owl:onProperty GHGA:type ], [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:name ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:category ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:file_index ], GHGA:InformationContentEntity ; skos:altLabel "file object" . @@ -1630,41 +1557,47 @@ GHGA:Individual a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:year_of_birth ], - [ a owl:Restriction ; - owl:allValuesFrom GHGA:Individual ; - owl:onProperty GHGA:has_children ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:gender ], + owl:onProperty GHGA:geographical_region ], [ a owl:Restriction ; owl:onClass <http://UNKNOWN.org/biological_sex_enum> ; owl:onProperty GHGA:sex ; owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Individual ; + owl:onProperty GHGA:has_parent ], + [ a owl:Restriction ; + owl:onClass <http://UNKNOWN.org/vital_status_enum> ; + owl:onProperty GHGA:vital_status ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:ethnicity ], + owl:onProperty GHGA:year_of_birth ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:geographical_region ], - [ a owl:Restriction ; - owl:onClass <http://UNKNOWN.org/vital_status_enum> ; - owl:onProperty GHGA:vital_status ; - owl:qualifiedCardinality 1 ], + owl:onProperty GHGA:ethnicity ], [ a owl:Restriction ; owl:allValuesFrom GHGA:Individual ; - owl:onProperty GHGA:has_parent ], + owl:onProperty GHGA:has_children ], + [ a owl:Restriction ; + owl:allValuesFrom GHGA:Disease ; + owl:onProperty GHGA:has_disease ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:ancestry ], [ a owl:Restriction ; owl:onClass linkml:Integer ; owl:onProperty GHGA:age ; owl:qualifiedCardinality 1 ], + [ 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:ancestry ], + owl:onProperty GHGA:gender ], GHGA:Person ; skos:altLabel "patient", "subject" ; @@ -1673,43 +1606,51 @@ GHGA:Individual a owl:Class, GHGA:title a owl:ObjectProperty, linkml:SlotDefinition . -GHGA:name a owl:ObjectProperty, - linkml:SlotDefinition . - 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:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty GHGA:accession ], + owl:onProperty GHGA:type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty GHGA:type ], + owl:onClass GHGA:NamedThing ; + owl:onProperty GHGA:replaces ], [ a owl:Restriction ; owl:onClass linkml:String ; owl:onProperty GHGA:id ; owl:qualifiedCardinality 1 ], + [ 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:creation_date ], [ a owl:Restriction ; - owl:allValuesFrom GHGA:Attribute ; - owl:onProperty GHGA:has_attribute ], + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty GHGA:update_date ], + [ 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:accession ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass GHGA:NamedThing ; + owl:onProperty GHGA:replaced_by ] ; skos:altLabel "entity", "named entity", "object" ; skos:definition "A databased entity, concept or class. This is a generic class that is the root of all the other classes." . +GHGA:name a owl:ObjectProperty, + linkml:SlotDefinition . + GHGA:description a owl:ObjectProperty, linkml:SlotDefinition . diff --git a/artifacts/python/ghga.py b/artifacts/python/ghga.py index 1e859b51..72d7de74 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: 2021-11-24T12:26:25 +# Generation date: 2021-11-26T07:50:01 # Schema: GHGA-Metadata-Schema # # id: https://w3id.org/GHGA-Metadata-Schema @@ -22,8 +22,7 @@ from linkml_runtime.utils.enumerations import EnumDefinitionImpl from rdflib import Namespace, URIRef from linkml_runtime.utils.curienamespace import CurieNamespace -from linkml_runtime.linkml_model.types import Boolean, Integer, String -from linkml_runtime.utils.metamodelcore import Bool +from linkml_runtime.linkml_model.types import Integer, String metamodel_version = "1.7.0" @@ -234,7 +233,7 @@ class UserId(PersonId): pass -class SubmissionId(NamedThingId): +class SubmissionId(extended_str): pass @@ -257,6 +256,8 @@ class NamedThing(YAMLRoot): has_attribute: Optional[Union[Union[dict, "Attribute"], List[Union[dict, "Attribute"]]]] = empty_list() creation_date: Optional[str] = None update_date: Optional[str] = None + replaces: Optional[Union[str, NamedThingId]] = None + replaced_by: Optional[Union[str, NamedThingId]] = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -282,6 +283,12 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.update_date is not None and not isinstance(self.update_date, str): self.update_date = str(self.update_date) + if self.replaces is not None and not isinstance(self.replaces, NamedThingId): + self.replaces = NamedThingId(self.replaces) + + if self.replaced_by is not None and not isinstance(self.replaced_by, NamedThingId): + self.replaced_by = NamedThingId(self.replaced_by) + super().__post_init__(**kwargs) @@ -363,11 +370,9 @@ class Investigation(PlannedProcess): title: Optional[str] = None description: Optional[str] = None has_publication: Optional[Union[str, PublicationId]] = None - release_status: Optional[Union[str, "ReleaseStatusEnum"]] = None + status: Optional[Union[str, "StatusEnum"]] = None release_date: Optional[str] = None - deprecated: Optional[Union[bool, Bool]] = None deprecation_date: Optional[str] = None - replaced_by: Optional[Union[str, NamedThingId]] = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -384,21 +389,15 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.has_publication is not None and not isinstance(self.has_publication, PublicationId): self.has_publication = PublicationId(self.has_publication) - if self.release_status is not None and not isinstance(self.release_status, ReleaseStatusEnum): - self.release_status = ReleaseStatusEnum(self.release_status) + if self.status is not None and not isinstance(self.status, StatusEnum): + self.status = StatusEnum(self.status) if self.release_date is not None and not isinstance(self.release_date, str): self.release_date = str(self.release_date) - if self.deprecated is not None and not isinstance(self.deprecated, Bool): - self.deprecated = Bool(self.deprecated) - if self.deprecation_date is not None and not isinstance(self.deprecation_date, str): self.deprecation_date = str(self.deprecation_date) - if self.replaced_by is not None and not isinstance(self.replaced_by, NamedThingId): - self.replaced_by = NamedThingId(self.replaced_by) - super().__post_init__(**kwargs) @@ -484,7 +483,7 @@ class Project(ResearchActivity): id: Union[str, ProjectId] = None title: str = None description: str = None - has_study: Optional[Union[Dict[Union[str, ExperimentId], Union[dict, "Experiment"]], List[Union[dict, "Experiment"]]]] = empty_dict() + has_study: Optional[Union[Dict[Union[str, StudyId], Union[dict, "Study"]], List[Union[dict, "Study"]]]] = empty_dict() has_publication: Optional[Union[Dict[Union[str, PublicationId], Union[dict, "Publication"]], List[Union[dict, "Publication"]]]] = empty_dict() has_attribute: Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]] = empty_list() @@ -504,7 +503,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.description, str): self.description = str(self.description) - self._normalize_inlined_as_list(slot_name="has_study", slot_type=Experiment, key_name="id", keyed=True) + self._normalize_inlined_as_list(slot_name="has_study", slot_type=Study, key_name="id", keyed=True) self._normalize_inlined_as_list(slot_name="has_publication", slot_type=Publication, key_name="id", keyed=True) @@ -808,6 +807,8 @@ class Individual(Person): ancestry: Optional[str] = None has_parent: Optional[Union[Dict[Union[str, IndividualId], Union[dict, "Individual"]], List[Union[dict, "Individual"]]]] = empty_dict() has_children: Optional[Union[Dict[Union[str, IndividualId], Union[dict, "Individual"]], List[Union[dict, "Individual"]]]] = empty_dict() + has_disease: Optional[Union[Dict[Union[str, DiseaseId], Union[dict, "Disease"]], List[Union[dict, "Disease"]]]] = empty_dict() + has_phenotypic_feature: Optional[Union[Dict[Union[str, PhenotypicFeatureId], Union[dict, "PhenotypicFeature"]], List[Union[dict, "PhenotypicFeature"]]]] = empty_dict() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -849,6 +850,10 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self._normalize_inlined_as_list(slot_name="has_children", slot_type=Individual, key_name="id", keyed=True) + self._normalize_inlined_as_list(slot_name="has_disease", slot_type=Disease, key_name="id", keyed=True) + + self._normalize_inlined_as_list(slot_name="has_phenotypic_feature", slot_type=PhenotypicFeature, key_name="id", keyed=True) + super().__post_init__(**kwargs) @@ -1914,11 +1919,7 @@ class Dataset(InformationContentEntity): has_file: Union[Dict[Union[str, FileId], Union[dict, File]], List[Union[dict, File]]] = empty_dict() type: str = None has_publication: Optional[Union[Dict[Union[str, PublicationId], Union[dict, "Publication"]], List[Union[dict, "Publication"]]]] = empty_dict() - release_status: Optional[Union[str, "ReleaseStatusEnum"]] = None - release_date: Optional[str] = None - deprecated: Optional[Union[bool, Bool]] = None - deprecation_date: Optional[str] = None - replaced_by: Optional[Union[str, NamedThingId]] = None + status: Optional[Union[str, "StatusEnum"]] = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -1947,20 +1948,8 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self._normalize_inlined_as_list(slot_name="has_publication", slot_type=Publication, key_name="id", keyed=True) - if self.release_status is not None and not isinstance(self.release_status, ReleaseStatusEnum): - self.release_status = ReleaseStatusEnum(self.release_status) - - if self.release_date is not None and not isinstance(self.release_date, str): - self.release_date = str(self.release_date) - - if self.deprecated is not None and not isinstance(self.deprecated, Bool): - self.deprecated = Bool(self.deprecated) - - if self.deprecation_date is not None and not isinstance(self.deprecation_date, str): - self.deprecation_date = str(self.deprecation_date) - - if self.replaced_by is not None and not isinstance(self.replaced_by, NamedThingId): - self.replaced_by = NamedThingId(self.replaced_by) + if self.status is not None and not isinstance(self.status, StatusEnum): + self.status = StatusEnum(self.status) super().__post_init__(**kwargs) @@ -2208,7 +2197,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): @dataclass -class Submission(NamedThing): +class Submission(YAMLRoot): """ 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. @@ -2230,8 +2219,12 @@ class Submission(NamedThing): has_analysis: Optional[Union[Dict[Union[str, AnalysisId], Union[dict, Analysis]], List[Union[dict, Analysis]]]] = empty_dict() has_file: Optional[Union[Dict[Union[str, FileId], Union[dict, File]], List[Union[dict, File]]]] = empty_dict() has_data_access_policy: Optional[Union[dict, DataAccessPolicy]] = None - submission_status: Optional[Union[str, "SubmissionStatusEnum"]] = None submission_date: Optional[str] = None + status: Optional[Union[str, "StatusEnum"]] = None + creation_date: Optional[str] = None + update_date: Optional[str] = None + replaces: Optional[Union[str, NamedThingId]] = None + replaced_by: Optional[Union[str, NamedThingId]] = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -2260,87 +2253,20 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.has_data_access_policy is not None and not isinstance(self.has_data_access_policy, DataAccessPolicy): self.has_data_access_policy = DataAccessPolicy(**as_dict(self.has_data_access_policy)) - if self.submission_status is not None and not isinstance(self.submission_status, SubmissionStatusEnum): - self.submission_status = SubmissionStatusEnum(self.submission_status) - if self.submission_date is not None and not isinstance(self.submission_date, str): self.submission_date = str(self.submission_date) - super().__post_init__(**kwargs) - - -@dataclass -class SubmissionStatusMixin(YAMLRoot): - """ - A mixin that keeps track of the submission status. - """ - _inherited_slots: ClassVar[List[str]] = [] + if self.status is not None and not isinstance(self.status, StatusEnum): + self.status = StatusEnum(self.status) - class_class_uri: ClassVar[URIRef] = GHGA.SubmissionStatusMixin - class_class_curie: ClassVar[str] = "GHGA:SubmissionStatusMixin" - class_name: ClassVar[str] = "submission status mixin" - class_model_uri: ClassVar[URIRef] = GHGA.SubmissionStatusMixin - - submission_status: Optional[Union[str, "SubmissionStatusEnum"]] = None - submission_date: Optional[str] = None - - def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): - if self.submission_status is not None and not isinstance(self.submission_status, SubmissionStatusEnum): - self.submission_status = SubmissionStatusEnum(self.submission_status) - - if self.submission_date is not None and not isinstance(self.submission_date, str): - self.submission_date = str(self.submission_date) - - super().__post_init__(**kwargs) - - -@dataclass -class ReleaseStatusMixin(YAMLRoot): - """ - A mixin that keeps track of the release status. - """ - _inherited_slots: ClassVar[List[str]] = [] - - class_class_uri: ClassVar[URIRef] = GHGA.ReleaseStatusMixin - class_class_curie: ClassVar[str] = "GHGA:ReleaseStatusMixin" - class_name: ClassVar[str] = "release status mixin" - class_model_uri: ClassVar[URIRef] = GHGA.ReleaseStatusMixin - - release_status: Optional[Union[str, "ReleaseStatusEnum"]] = None - release_date: Optional[str] = None - - def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): - if self.release_status is not None and not isinstance(self.release_status, ReleaseStatusEnum): - self.release_status = ReleaseStatusEnum(self.release_status) - - if self.release_date is not None and not isinstance(self.release_date, str): - self.release_date = str(self.release_date) - - super().__post_init__(**kwargs) - - -@dataclass -class DeprecationMixin(YAMLRoot): - """ - A mixin that keeps track of the deprecation status. - """ - _inherited_slots: ClassVar[List[str]] = [] - - class_class_uri: ClassVar[URIRef] = GHGA.DeprecationMixin - class_class_curie: ClassVar[str] = "GHGA:DeprecationMixin" - class_name: ClassVar[str] = "deprecation mixin" - class_model_uri: ClassVar[URIRef] = GHGA.DeprecationMixin + if self.creation_date is not None and not isinstance(self.creation_date, str): + self.creation_date = str(self.creation_date) - deprecated: Optional[Union[bool, Bool]] = None - deprecation_date: Optional[str] = None - replaced_by: Optional[Union[str, NamedThingId]] = None + if self.update_date is not None and not isinstance(self.update_date, str): + self.update_date = str(self.update_date) - def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): - if self.deprecated is not None and not isinstance(self.deprecated, Bool): - self.deprecated = Bool(self.deprecated) - - if self.deprecation_date is not None and not isinstance(self.deprecation_date, str): - self.deprecation_date = str(self.deprecation_date) + if self.replaces is not None and not isinstance(self.replaces, NamedThingId): + self.replaces = NamedThingId(self.replaces) if self.replaced_by is not None and not isinstance(self.replaced_by, NamedThingId): self.replaced_by = NamedThingId(self.replaced_by) @@ -2479,37 +2405,29 @@ class FileTypeEnum(EnumDefinitionImpl): description="Enum to capture file types.", ) -class SubmissionStatusEnum(EnumDefinitionImpl): +class StatusEnum(EnumDefinitionImpl): """ - Enum to capture submission status. + Enum to capture the status of an entity. """ submitted = PermissibleValue(text="submitted", - description="Signifies that a submission is complete and submitted.") + description="Signifies that the entity has been successfully submitted.") + unreleased = PermissibleValue(text="unreleased", + description="Signifies that the entity is submitted but unreleased for public consumption.") + released = PermissibleValue(text="released", + description="Signifies that the entity is submitted and released for public conusmption.") + deprecated = PermissibleValue(text="deprecated", + description="Signifies that the entity is deprecated and is replaced by another entity.") _defn = EnumDefinition( - name="SubmissionStatusEnum", - description="Enum to capture submission status.", + name="StatusEnum", + description="Enum to capture the status of an entity.", ) @classmethod def _addvals(cls): setattr(cls, "in progress", PermissibleValue(text="in progress", - description="Signifies that a submission is in progress.") ) - -class ReleaseStatusEnum(EnumDefinitionImpl): - """ - Enum to capture the release status. - """ - unreleased = PermissibleValue(text="unreleased", - description="Signifies that the submission is not released for public consumption.") - released = PermissibleValue(text="released", - description="Signifies that the submission is released for public consumption.") - - _defn = EnumDefinition( - name="ReleaseStatusEnum", - description="Enum to capture the release status.", - ) + description="Signifies that the entity is in the process of being submitted.") ) # Slots class slots: @@ -2848,26 +2766,23 @@ class slots: 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[str]) -slots.submission_status = Slot(uri=GHGA.submission_status, name="submission status", curie=GHGA.curie('submission_status'), - model_uri=GHGA.submission_status, domain=None, range=Optional[Union[str, "SubmissionStatusEnum"]]) - slots.submission_date = Slot(uri=GHGA.submission_date, name="submission date", curie=GHGA.curie('submission_date'), model_uri=GHGA.submission_date, domain=None, range=Optional[str]) -slots.release_status = Slot(uri=GHGA.release_status, name="release status", curie=GHGA.curie('release_status'), - model_uri=GHGA.release_status, domain=None, range=Optional[Union[str, "ReleaseStatusEnum"]]) - slots.release_date = Slot(uri=GHGA.release_date, name="release date", curie=GHGA.curie('release_date'), model_uri=GHGA.release_date, domain=None, range=Optional[str]) -slots.deprecated = Slot(uri=GHGA.deprecated, name="deprecated", curie=GHGA.curie('deprecated'), - model_uri=GHGA.deprecated, domain=None, range=Optional[Union[bool, Bool]]) - slots.deprecation_date = Slot(uri=GHGA.deprecation_date, name="deprecation date", curie=GHGA.curie('deprecation_date'), model_uri=GHGA.deprecation_date, domain=None, range=Optional[str]) slots.replaced_by = Slot(uri=GHGA.replaced_by, name="replaced by", curie=GHGA.curie('replaced_by'), - model_uri=GHGA.replaced_by, domain=None, range=Optional[Union[str, NamedThingId]]) + model_uri=GHGA.replaced_by, domain=NamedThing, range=Optional[Union[str, NamedThingId]]) + +slots.replaces = Slot(uri=GHGA.replaces, name="replaces", curie=GHGA.curie('replaces'), + model_uri=GHGA.replaces, domain=NamedThing, range=Optional[Union[str, NamedThingId]]) + +slots.status = Slot(uri=GHGA.status, name="status", curie=GHGA.curie('status'), + model_uri=GHGA.status, domain=None, range=Optional[Union[str, "StatusEnum"]]) slots.named_thing_id = Slot(uri=GHGA.id, name="named thing_id", curie=GHGA.curie('id'), model_uri=GHGA.named_thing_id, domain=NamedThing, range=Union[str, NamedThingId]) @@ -2912,7 +2827,7 @@ class slots: model_uri=GHGA.project_has_publication, domain=Project, range=Optional[Union[Dict[Union[str, PublicationId], Union[dict, "Publication"]], List[Union[dict, "Publication"]]]]) slots.project_has_study = Slot(uri=GHGA.has_study, name="project_has study", curie=GHGA.curie('has_study'), - model_uri=GHGA.project_has_study, domain=Project, range=Optional[Union[Dict[Union[str, ExperimentId], Union[dict, "Experiment"]], List[Union[dict, "Experiment"]]]]) + model_uri=GHGA.project_has_study, domain=Project, range=Optional[Union[Dict[Union[str, StudyId], Union[dict, "Study"]], List[Union[dict, "Study"]]]]) slots.project_has_attribute = Slot(uri=GHGA.has_attribute, name="project_has attribute", curie=GHGA.curie('has_attribute'), model_uri=GHGA.project_has_attribute, domain=Project, range=Optional[Union[Union[dict, Attribute], List[Union[dict, Attribute]]]]) @@ -3112,6 +3027,12 @@ class slots: slots.individual_has_children = Slot(uri=GHGA.has_children, name="individual_has children", curie=GHGA.curie('has_children'), model_uri=GHGA.individual_has_children, domain=Individual, range=Optional[Union[Dict[Union[str, IndividualId], Union[dict, "Individual"]], List[Union[dict, "Individual"]]]]) +slots.individual_has_disease = Slot(uri=GHGA.has_disease, name="individual_has disease", curie=GHGA.curie('has_disease'), + model_uri=GHGA.individual_has_disease, domain=Individual, range=Optional[Union[Dict[Union[str, DiseaseId], Union[dict, "Disease"]], List[Union[dict, "Disease"]]]]) + +slots.individual_has_phenotypic_feature = Slot(uri=GHGA.has_phenotypic_feature, name="individual_has phenotypic feature", curie=GHGA.curie('has_phenotypic_feature'), + model_uri=GHGA.individual_has_phenotypic_feature, domain=Individual, range=Optional[Union[Dict[Union[str, PhenotypicFeatureId], Union[dict, "PhenotypicFeature"]], List[Union[dict, "PhenotypicFeature"]]]]) + slots.family_has_member = Slot(uri=GHGA.has_member, name="family_has member", curie=GHGA.curie('has_member'), model_uri=GHGA.family_has_member, domain=Family, range=Optional[Union[Dict[Union[str, IndividualId], Union[dict, Individual]], List[Union[dict, Individual]]]]) @@ -3169,6 +3090,9 @@ class slots: slots.dataset_has_publication = Slot(uri=GHGA.has_publication, name="dataset_has publication", curie=GHGA.curie('has_publication'), model_uri=GHGA.dataset_has_publication, domain=Dataset, range=Optional[Union[Dict[Union[str, PublicationId], Union[dict, "Publication"]], List[Union[dict, "Publication"]]]]) +slots.dataset_status = Slot(uri=GHGA.status, name="dataset_status", curie=GHGA.curie('status'), + model_uri=GHGA.dataset_status, domain=Dataset, range=Optional[Union[str, "StatusEnum"]]) + slots.experiment_dataset_has_data_access_policy = Slot(uri=GHGA.has_data_access_policy, name="experiment dataset_has data access policy", curie=GHGA.curie('has_data_access_policy'), model_uri=GHGA.experiment_dataset_has_data_access_policy, domain=ExperimentDataset, range=Union[Dict[Union[str, DataAccessPolicyId], Union[dict, "DataAccessPolicy"]], List[Union[dict, "DataAccessPolicy"]]]) @@ -3241,6 +3165,9 @@ class slots: slots.user_role = Slot(uri=GHGA.role, name="user_role", curie=GHGA.curie('role'), model_uri=GHGA.user_role, domain=User, range=Optional[Union[str, "UserRoleEnum"]]) +slots.submission_id = Slot(uri=GHGA.id, name="submission_id", curie=GHGA.curie('id'), + model_uri=GHGA.submission_id, domain=Submission, range=Union[str, SubmissionId]) + slots.submission_has_study = Slot(uri=GHGA.has_study, name="submission_has study", curie=GHGA.curie('has_study'), model_uri=GHGA.submission_has_study, domain=Submission, range=Optional[Union[dict, Study]]) @@ -3267,3 +3194,18 @@ class slots: slots.submission_has_data_access_policy = Slot(uri=GHGA.has_data_access_policy, name="submission_has data access policy", curie=GHGA.curie('has_data_access_policy'), model_uri=GHGA.submission_has_data_access_policy, domain=Submission, range=Optional[Union[dict, DataAccessPolicy]]) + +slots.submission_creation_date = Slot(uri=GHGA.creation_date, name="submission_creation date", curie=GHGA.curie('creation_date'), + model_uri=GHGA.submission_creation_date, domain=Submission, range=Optional[str]) + +slots.submission_update_date = Slot(uri=GHGA.update_date, name="submission_update date", curie=GHGA.curie('update_date'), + model_uri=GHGA.submission_update_date, domain=Submission, range=Optional[str]) + +slots.submission_replaces = Slot(uri=GHGA.replaces, name="submission_replaces", curie=GHGA.curie('replaces'), + model_uri=GHGA.submission_replaces, domain=Submission, range=Optional[Union[str, NamedThingId]]) + +slots.submission_replaced_by = Slot(uri=GHGA.replaced_by, name="submission_replaced by", curie=GHGA.curie('replaced_by'), + model_uri=GHGA.submission_replaced_by, domain=Submission, range=Optional[Union[str, NamedThingId]]) + +slots.submission_status = Slot(uri=GHGA.status, name="submission_status", curie=GHGA.curie('status'), + model_uri=GHGA.submission_status, domain=Submission, range=Optional[Union[str, "StatusEnum"]]) diff --git a/artifacts/rdf/ghga.ttl b/artifacts/rdf/ghga.ttl index 1b4886d3..135c4005 100644 --- a/artifacts/rdf/ghga.ttl +++ b/artifacts/rdf/ghga.ttl @@ -1,6 +1,7 @@ @prefix : <https://w3id.org/linkml/> . @prefix dcterms: <http://purl.org/dc/terms/> . @prefix linkml: <https://w3id.org/linkml/> . +@prefix owl: <http://www.w3.org/2002/07/owl#> . @prefix pav: <http://purl.org/pav/> . @prefix shex: <http://www.w3.org/ns/shex#> . @prefix skos: <http://www.w3.org/2004/02/skos/core#> . @@ -8,7 +9,7 @@ <https://w3id.org/GHGA/GHGA-Metadata-Schema> a linkml:SchemaDefinition ; dcterms:license "https://creativecommons.org/publicdomain/zero/1.0/" ; - pav:version "1.0.0a" ; + pav:version "0.1.0" ; skos:definition "The metadata schema for the German Human Genome-Phenome Archive (GHGA)." ; linkml:classes <https://w3id.org/GHGA/Agent>, <https://w3id.org/GHGA/AggregateDataset>, @@ -27,7 +28,6 @@ <https://w3id.org/GHGA/DataTransformation>, <https://w3id.org/GHGA/DataUseCondition>, <https://w3id.org/GHGA/Dataset>, - <https://w3id.org/GHGA/DeprecationMixin>, <https://w3id.org/GHGA/Disease>, <https://w3id.org/GHGA/DiseaseOrPhenotypicFeature>, <https://w3id.org/GHGA/Donor>, @@ -50,13 +50,11 @@ <https://w3id.org/GHGA/Project>, <https://w3id.org/GHGA/Protocol>, <https://w3id.org/GHGA/Publication>, - <https://w3id.org/GHGA/ReleaseStatusMixin>, <https://w3id.org/GHGA/ResearchActivity>, <https://w3id.org/GHGA/Sample>, <https://w3id.org/GHGA/SequencingProtocol>, <https://w3id.org/GHGA/Study>, <https://w3id.org/GHGA/Submission>, - <https://w3id.org/GHGA/SubmissionStatusMixin>, <https://w3id.org/GHGA/Technology>, <https://w3id.org/GHGA/User>, <https://w3id.org/GHGA/Workflow>, @@ -70,31 +68,30 @@ linkml:enums <https://w3id.org/GHGA/biological_sex_enum>, <https://w3id.org/GHGA/case_control_enum>, <https://w3id.org/GHGA/file_type_enum>, - <https://w3id.org/GHGA/release_status_enum>, + <https://w3id.org/GHGA/status_enum>, <https://w3id.org/GHGA/study_type_enum>, - <https://w3id.org/GHGA/submission_status_enum>, <https://w3id.org/GHGA/user_role_enum>, <https://w3id.org/GHGA/vital_status_enum> ; - linkml:generation_date "2021-11-24T12:26:27"^^xsd:dateTime ; + linkml:generation_date "2021-11-26T07:50:05"^^xsd:dateTime ; linkml:id <https://w3id.org/GHGA-Metadata-Schema> ; linkml:imports linkml:types ; linkml:metamodel_version "1.7.0" ; - linkml:prefixes [ linkml:prefix_prefix "SIO" ; + linkml:prefixes [ linkml:prefix_prefix "biolink" ; + linkml:prefix_reference <https://w3id.org/biolink/vocab/> ], + [ linkml:prefix_prefix "SIO" ; linkml:prefix_reference <http://semanticscience.org/resource/SIO_> ], - [ linkml:prefix_prefix "GHGA" ; - linkml:prefix_reference <https://w3id.org/GHGA/> ], [ linkml:prefix_prefix "GENEPIO" ; linkml:prefix_reference <http://purl.obolibrary.org/obo/GENEPIO_> ], - [ linkml:prefix_prefix "SNOMEDCT" ; - linkml:prefix_reference <http://purl.bioontology.org/ontology/SNOMEDCT/> ], + [ linkml:prefix_prefix "EFO" ; + linkml:prefix_reference <http://www.ebi.ac.uk/efo/EFO_> ], [ linkml:prefix_prefix "COB" ; linkml:prefix_reference <http://purl.obolibrary.org/obo/COB_> ], + [ linkml:prefix_prefix "SNOMEDCT" ; + linkml:prefix_reference <http://purl.bioontology.org/ontology/SNOMEDCT/> ], + [ linkml:prefix_prefix "GHGA" ; + linkml:prefix_reference <https://w3id.org/GHGA/> ], [ linkml:prefix_prefix "linkml" ; - linkml:prefix_reference linkml: ], - [ linkml:prefix_prefix "biolink" ; - linkml:prefix_reference <https://w3id.org/biolink/vocab/> ], - [ linkml:prefix_prefix "EFO" ; - linkml:prefix_reference <http://www.ebi.ac.uk/efo/EFO_> ] ; + linkml:prefix_reference linkml: ] ; linkml:slots <https://w3id.org/GHGA/abstract>, <https://w3id.org/GHGA/accession>, <https://w3id.org/GHGA/additional_name>, @@ -143,9 +140,9 @@ <https://w3id.org/GHGA/dataset_description>, <https://w3id.org/GHGA/dataset_has_file>, <https://w3id.org/GHGA/dataset_has_publication>, + <https://w3id.org/GHGA/dataset_status>, <https://w3id.org/GHGA/dataset_title>, <https://w3id.org/GHGA/dataset_type>, - <https://w3id.org/GHGA/deprecated>, <https://w3id.org/GHGA/deprecation_date>, <https://w3id.org/GHGA/description>, <https://w3id.org/GHGA/email>, @@ -218,7 +215,9 @@ <https://w3id.org/GHGA/id>, <https://w3id.org/GHGA/individual_age>, <https://w3id.org/GHGA/individual_has_children>, + <https://w3id.org/GHGA/individual_has_disease>, <https://w3id.org/GHGA/individual_has_parent>, + <https://w3id.org/GHGA/individual_has_phenotypic_feature>, <https://w3id.org/GHGA/individual_sex>, <https://w3id.org/GHGA/individual_vital_status>, <https://w3id.org/GHGA/instrument_model>, @@ -282,8 +281,8 @@ <https://w3id.org/GHGA/read_pair_number>, <https://w3id.org/GHGA/reference_annotation>, <https://w3id.org/GHGA/release_date>, - <https://w3id.org/GHGA/release_status>, <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces>, <https://w3id.org/GHGA/rnaseq_strandedness>, <https://w3id.org/GHGA/role>, <https://w3id.org/GHGA/sample_barcode_read>, @@ -303,6 +302,7 @@ <https://w3id.org/GHGA/sequencing_protocol_sequencing_center>, <https://w3id.org/GHGA/sex>, <https://w3id.org/GHGA/size>, + <https://w3id.org/GHGA/status>, <https://w3id.org/GHGA/storage>, <https://w3id.org/GHGA/study_affiliation>, <https://w3id.org/GHGA/study_description>, @@ -313,6 +313,7 @@ <https://w3id.org/GHGA/study_has_publication>, <https://w3id.org/GHGA/study_title>, <https://w3id.org/GHGA/study_type>, + <https://w3id.org/GHGA/submission_creation_date>, <https://w3id.org/GHGA/submission_date>, <https://w3id.org/GHGA/submission_has_analysis>, <https://w3id.org/GHGA/submission_has_biospecimen>, @@ -323,7 +324,11 @@ <https://w3id.org/GHGA/submission_has_project>, <https://w3id.org/GHGA/submission_has_sample>, <https://w3id.org/GHGA/submission_has_study>, + <https://w3id.org/GHGA/submission_id>, + <https://w3id.org/GHGA/submission_replaced_by>, + <https://w3id.org/GHGA/submission_replaces>, <https://w3id.org/GHGA/submission_status>, + <https://w3id.org/GHGA/submission_update_date>, <https://w3id.org/GHGA/target_coverage>, <https://w3id.org/GHGA/target_regions>, <https://w3id.org/GHGA/technical_replicates>, @@ -347,8 +352,8 @@ <https://w3id.org/GHGA/xref>, <https://w3id.org/GHGA/year_of_birth> ; linkml:source_file "ghga.yaml" ; - linkml:source_file_date "2021-11-24T12:25:33"^^xsd:dateTime ; - linkml:source_file_size 60843 ; + linkml:source_file_date "2021-11-26T07:49:08"^^xsd:dateTime ; + linkml:source_file_size 62067 ; linkml:types <https://w3id.org/GHGA/boolean>, <https://w3id.org/GHGA/date>, <https://w3id.org/GHGA/datetime>, @@ -372,6 +377,15 @@ <https://w3id.org/GHGA/bam> skos:definition "BAM File" . +<https://w3id.org/GHGA/boolean> a linkml:TypeDefinition ; + skos:definition "A binary (true or false) value" ; + skos:inScheme linkml:types ; + linkml:base "Bool" ; + linkml:definition_uri linkml:Boolean ; + linkml:imported_from "linkml:types" ; + linkml:repr "bool" ; + linkml:uri xsd:boolean . + <https://w3id.org/GHGA/cancer_genomics> skos:definition "Cancer Genomics" . <https://w3id.org/GHGA/case> skos:definition "The Sample is to be treated as Case" . @@ -415,6 +429,8 @@ linkml:imported_from "linkml:types" ; linkml:uri xsd:decimal . +<https://w3id.org/GHGA/deprecated> skos:definition "Signifies that the entity is deprecated and is replaced by another entity." . + <https://w3id.org/GHGA/double> a linkml:TypeDefinition ; skos:definition "A real number that conforms to the xsd:double specification" ; skos:inScheme linkml:types ; @@ -443,7 +459,7 @@ <https://w3id.org/GHGA/gene_regulation> skos:definition "Gene Regulation Study" . -<https://w3id.org/GHGA/in%20progress> skos:definition "Signifies that a submission is in progress." . +<https://w3id.org/GHGA/in%20progress> skos:definition "Signifies that the entity is in the process of being submitted." . <https://w3id.org/GHGA/metagenomics> skos:definition "Metagenomics" . @@ -485,7 +501,7 @@ <https://w3id.org/GHGA/population_genomics> skos:definition "Population Genomics" . -<https://w3id.org/GHGA/released> skos:definition "Signifies that the submission is released for public consumption." . +<https://w3id.org/GHGA/released> skos:definition "Signifies that the entity is submitted and released for public conusmption." . <https://w3id.org/GHGA/resequencing> skos:definition "Resequencing" . @@ -495,7 +511,7 @@ <https://w3id.org/GHGA/srf> skos:definition "SRF is a generic format for DNA sequence data." . -<https://w3id.org/GHGA/submitted> skos:definition "Signifies that a submission is complete and submitted." . +<https://w3id.org/GHGA/submitted> skos:definition "Signifies that the entity has been successfully submitted." . <https://w3id.org/GHGA/synthetic_genomics> skos:definition "Sythetic Genomics" . @@ -513,7 +529,7 @@ <https://w3id.org/GHGA/unknown> skos:definition "Vital status is unknown." . -<https://w3id.org/GHGA/unreleased> skos:definition "Signifies that the submission is not released for public consumption." . +<https://w3id.org/GHGA/unreleased> skos:definition "Signifies that the entity is submitted but unreleased for public consumption." . <https://w3id.org/GHGA/uri> a linkml:TypeDefinition ; skos:definition "a complete URI" ; @@ -828,7 +844,7 @@ linkml:usage_slot_name "has anatomical entity" . <https://w3id.org/GHGA/biospecimen_has_disease> a linkml:SlotDefinition ; - skos:definition "The Disease entity that is associated with this Biospecimen at the time of retrieval from the organism. Typically, a concept from Mondo Disease Ontology. For example, 'MONDO:0003742' indicates that the Individual - from which the Biospecimen was extracted from - suffers from 'Heart Fibrosarcoma'." ; + skos:definition "The Disease entity that is associated with the Individual. Typically, a concept from Mondo Disease Ontology. For example, 'MONDO:0005267' indicates that the Individual suffers from 'Heart Disease'." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "has disease" ; linkml:definition_uri <https://w3id.org/GHGA/has_disease> ; @@ -860,7 +876,7 @@ linkml:usage_slot_name "has individual" . <https://w3id.org/GHGA/biospecimen_has_phenotypic_feature> a linkml:SlotDefinition ; - skos:definition "The Phenotypic Feature entity that is associated with this Biospecimen at the time of retrieval from the organism. Typically, a concept from Human Phenotype Ontology. For example, 'HP:0100244' indicates that the Individual - from which the Biospecimen was extracted from - exhibits 'Fibrosarcoma' as one of its phenotype." ; + skos:definition "The Phenotypic Feature entity that is associated with the Individual. Typically, a concept from Human Phenotype Ontology. For example, 'HP:0100244' indicates that the Individual exhibits 'Fibrosarcoma' as one of its phenotype." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "has phenotypic feature" ; linkml:definition_uri <https://w3id.org/GHGA/has_phenotypic_feature> ; @@ -876,15 +892,6 @@ linkml:slot_uri <https://w3id.org/GHGA/has_phenotypic_feature> ; linkml:usage_slot_name "has phenotypic feature" . -<https://w3id.org/GHGA/boolean> a linkml:TypeDefinition ; - skos:definition "A binary (true or false) value" ; - skos:inScheme linkml:types ; - linkml:base "Bool" ; - linkml:definition_uri linkml:Boolean ; - linkml:imported_from "linkml:types" ; - linkml:repr "bool" ; - linkml:uri xsd:boolean . - <https://w3id.org/GHGA/case_control_enum> skos:definition "Enum to capture whether a Sample is to be considered as Case or Control." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/CaseControlEnum> ; @@ -1455,7 +1462,7 @@ <https://w3id.org/GHGA/library_preparation_protocol_library_construction> a linkml:SlotDefinition ; skos:closeMatch <http://purl.obolibrary.org/obo/OBI_0000711> ; - skos:definition "The name of a library construction approach being used. (eg: \"10X v2 sequencing\" or \"Smart-seq2\")" ; + skos:definition "The name of a library construction approach being used. (eg: '10X v2 sequencing' or 'Smart-seq2')" ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "library construction" ; linkml:definition_uri <https://w3id.org/GHGA/library_construction> ; @@ -1704,7 +1711,7 @@ linkml:is_usage_slot true ; linkml:multivalued true ; linkml:owner <https://w3id.org/GHGA/Project> ; - linkml:range <https://w3id.org/GHGA/Experiment> ; + linkml:range <https://w3id.org/GHGA/Study> ; linkml:slot_uri <https://w3id.org/GHGA/has_study> ; linkml:usage_slot_name "has study" . @@ -1768,12 +1775,6 @@ linkml:slot_uri <https://w3id.org/GHGA/xref> ; linkml:usage_slot_name "xref" . -<https://w3id.org/GHGA/release_status_enum> skos:definition "Enum to capture the release status." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/ReleaseStatusEnum> ; - linkml:permissible_values <https://w3id.org/GHGA/released>, - <https://w3id.org/GHGA/unreleased> . - <https://w3id.org/GHGA/sample_description> a linkml:SlotDefinition ; skos:definition "Short textual description of the sample (How the sample was collected, sample source, protocol followed for processing the sample etc)." ; skos:exactMatch <http://semanticscience.org/resource/SIO_000185> ; @@ -2091,7 +2092,7 @@ <https://w3id.org/GHGA/study_type> a linkml:SlotDefinition ; skos:broadMatch <http://purl.obolibrary.org/obo/NCIT_C142175> ; - skos:definition "The type of Study. For example, \"Cancer Genomics\", \"Epigenetics\", \"Exome Sequencing\"." ; + skos:definition "The type of Study. For example, 'Cancer Genomics', 'Epigenetics', 'Exome Sequencing'." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; skos:prefLabel "type" ; linkml:definition_uri <https://w3id.org/GHGA/type> ; @@ -2123,6 +2124,20 @@ <https://w3id.org/GHGA/transcriptome_analysis>, <https://w3id.org/GHGA/whole_genome_sequencing> . +<https://w3id.org/GHGA/submission_creation_date> a linkml:SlotDefinition ; + skos:definition "Timestamp (in ISO 8601 format) when the Submission was created." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "creation date" ; + linkml:definition_uri <https://w3id.org/GHGA/creation_date> ; + linkml:domain <https://w3id.org/GHGA/Submission> ; + linkml:domain_of <https://w3id.org/GHGA/Submission> ; + linkml:is_a <https://w3id.org/GHGA/creation_date> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/creation_date> ; + linkml:usage_slot_name "creation date" . + <https://w3id.org/GHGA/submission_has_analysis> a linkml:SlotDefinition ; skos:definition "Information about one or more Analysis entities associated with this submission." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -2270,11 +2285,77 @@ linkml:slot_uri <https://w3id.org/GHGA/has_study> ; linkml:usage_slot_name "has study" . -<https://w3id.org/GHGA/submission_status_enum> skos:definition "Enum to capture submission status." ; +<https://w3id.org/GHGA/submission_id> a linkml:SlotDefinition ; + skos:definition "A internal unique identifier for the Submission." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "id" ; + linkml:definition_uri <https://w3id.org/GHGA/id> ; + linkml:domain <https://w3id.org/GHGA/Submission> ; + linkml:domain_of <https://w3id.org/GHGA/Submission> ; + linkml:identifier true ; + linkml:is_a <https://w3id.org/GHGA/id> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:required true ; + linkml:slot_uri <https://w3id.org/GHGA/id> ; + linkml:usage_slot_name "id" . + +<https://w3id.org/GHGA/submission_replaced_by> a linkml:SlotDefinition ; + skos:definition "Refers to the Submission which replaces a currently deprecated Submission." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/SubmissionStatusEnum> ; - linkml:permissible_values <https://w3id.org/GHGA/in%20progress>, - <https://w3id.org/GHGA/submitted> . + skos:prefLabel "replaced by" ; + linkml:definition_uri <https://w3id.org/GHGA/replaced_by> ; + linkml:domain <https://w3id.org/GHGA/Submission> ; + linkml:domain_of <https://w3id.org/GHGA/Submission> ; + linkml:is_a <https://w3id.org/GHGA/replaced_by> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/NamedThing> ; + linkml:slot_uri <https://w3id.org/GHGA/replaced_by> ; + linkml:usage_slot_name "replaced by" . + +<https://w3id.org/GHGA/submission_replaces> a linkml:SlotDefinition ; + skos:definition "Refers to a deprecated Submission that is being replaced by the current Submission." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "replaces" ; + linkml:definition_uri <https://w3id.org/GHGA/replaces> ; + linkml:domain <https://w3id.org/GHGA/Submission> ; + linkml:domain_of <https://w3id.org/GHGA/Submission> ; + linkml:is_a <https://w3id.org/GHGA/replaces> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/NamedThing> ; + linkml:slot_uri <https://w3id.org/GHGA/replaces> ; + linkml:usage_slot_name "replaces" . + +<https://w3id.org/GHGA/submission_status> a linkml:SlotDefinition ; + skos:definition "The status of a Submission. For example, 'in progress' or 'submitted'." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "status" ; + linkml:definition_uri <https://w3id.org/GHGA/status> ; + linkml:domain <https://w3id.org/GHGA/Submission> ; + linkml:domain_of <https://w3id.org/GHGA/Submission> ; + linkml:is_a <https://w3id.org/GHGA/status> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/status_enum> ; + linkml:slot_uri <https://w3id.org/GHGA/status> ; + linkml:usage_slot_name "status" . + +<https://w3id.org/GHGA/submission_update_date> a linkml:SlotDefinition ; + skos:definition "Timestamp (in ISO 8601 format) when the Submission was updated." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "update date" ; + linkml:definition_uri <https://w3id.org/GHGA/update_date> ; + linkml:domain <https://w3id.org/GHGA/Submission> ; + linkml:domain_of <https://w3id.org/GHGA/Submission> ; + linkml:is_a <https://w3id.org/GHGA/update_date> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/update_date> ; + linkml:usage_slot_name "update date" . <https://w3id.org/GHGA/user_role> a linkml:SlotDefinition ; skos:definition "The role of the user" ; @@ -2350,7 +2431,9 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/Donor> a linkml:ClassDefinition ; skos:altLabel "participant" ; @@ -2369,7 +2452,9 @@ <https://w3id.org/GHGA/given_name>, <https://w3id.org/GHGA/individual_age>, <https://w3id.org/GHGA/individual_has_children>, + <https://w3id.org/GHGA/individual_has_disease>, <https://w3id.org/GHGA/individual_has_parent>, + <https://w3id.org/GHGA/individual_has_phenotypic_feature>, <https://w3id.org/GHGA/individual_sex>, <https://w3id.org/GHGA/individual_vital_status>, <https://w3id.org/GHGA/named_thing_accession>, @@ -2379,6 +2464,8 @@ <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces>, <https://w3id.org/GHGA/year_of_birth> . <https://w3id.org/GHGA/biological_sex_enum> skos:definition "The biological sex of an Individual as determined by their chromosomes." ; @@ -2435,6 +2522,23 @@ linkml:slot_uri <https://w3id.org/GHGA/has_children> ; linkml:usage_slot_name "has children" . +<https://w3id.org/GHGA/individual_has_disease> a linkml:SlotDefinition ; + skos:definition "The Disease entity that is associated with this Biospecimen at the time of retrieval from the organism. Typically, a concept from Mondo Disease Ontology. For example, 'MONDO:0003742' indicates that the Individual - from which the Biospecimen was extracted from - suffers from 'Heart Fibrosarcoma'." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "has disease" ; + linkml:definition_uri <https://w3id.org/GHGA/has_disease> ; + linkml:domain <https://w3id.org/GHGA/Individual> ; + linkml:domain_of <https://w3id.org/GHGA/Individual> ; + linkml:inlined true ; + linkml:inlined_as_list true ; + linkml:is_a <https://w3id.org/GHGA/has_disease> ; + linkml:is_usage_slot true ; + linkml:multivalued true ; + linkml:owner <https://w3id.org/GHGA/Individual> ; + linkml:range <https://w3id.org/GHGA/Disease> ; + linkml:slot_uri <https://w3id.org/GHGA/has_disease> ; + linkml:usage_slot_name "has disease" . + <https://w3id.org/GHGA/individual_has_parent> a linkml:SlotDefinition ; skos:definition "One or more parent for this Individual." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -2452,6 +2556,23 @@ linkml:slot_uri <https://w3id.org/GHGA/has_parent> ; linkml:usage_slot_name "has parent" . +<https://w3id.org/GHGA/individual_has_phenotypic_feature> a linkml:SlotDefinition ; + skos:definition "The Phenotypic Feature entity that is associated with this Biospecimen at the time of retrieval from the organism. Typically, a concept from Human Phenotype Ontology. For example, 'HP:0100244' indicates that the Individual - from which the Biospecimen was extracted from - exhibits 'Fibrosarcoma' as one of its phenotype." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "has phenotypic feature" ; + linkml:definition_uri <https://w3id.org/GHGA/has_phenotypic_feature> ; + linkml:domain <https://w3id.org/GHGA/Individual> ; + linkml:domain_of <https://w3id.org/GHGA/Individual> ; + linkml:inlined true ; + linkml:inlined_as_list true ; + linkml:is_a <https://w3id.org/GHGA/has_phenotypic_feature> ; + linkml:is_usage_slot true ; + linkml:multivalued true ; + linkml:owner <https://w3id.org/GHGA/Individual> ; + linkml:range <https://w3id.org/GHGA/PhenotypicFeature> ; + linkml:slot_uri <https://w3id.org/GHGA/has_phenotypic_feature> ; + linkml:usage_slot_name "has phenotypic feature" . + <https://w3id.org/GHGA/individual_sex> a linkml:SlotDefinition ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C28421> ; skos:definition "The assemblage of physical properties or qualities by which male is distinguished from female; the physical difference between male and female; the distinguishing peculiarity of male or female." ; @@ -2519,7 +2640,9 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/abstract> a linkml:SlotDefinition ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C60765> ; @@ -2542,7 +2665,7 @@ <https://w3id.org/GHGA/cell_barcode_offset> a linkml:SlotDefinition ; skos:closeMatch <http://www.ebi.ac.uk/efo/EFO_0010204> ; - skos:definition "The offset in sequence of the cell identifying barcode. (Eg. \"0\")." ; + skos:definition "The offset in sequence of the cell identifying barcode. (Eg. '0')." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/cell_barcode_offset> ; linkml:domain_of <https://w3id.org/GHGA/SequencingProtocol> ; @@ -2562,7 +2685,7 @@ <https://w3id.org/GHGA/cell_barcode_size> a linkml:SlotDefinition ; skos:closeMatch <http://www.ebi.ac.uk/efo/EFO_0010205> ; - skos:definition "The size of the cell identifying barcode (E.g. \"16\")." ; + skos:definition "The size of the cell identifying barcode (E.g. '16')." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/cell_barcode_size> ; linkml:domain_of <https://w3id.org/GHGA/SequencingProtocol> ; @@ -2659,7 +2782,7 @@ <https://w3id.org/GHGA/primer> a linkml:SlotDefinition ; skos:broadMatch <http://purl.obolibrary.org/obo/NCIT_C1451> ; - skos:definition "The type of primer used for reverse transcription, e.g. \"oligo-dT\" or \"random\" primer. This allows users to identify content of the cDNA library input e.g. enriched for mRNA." ; + skos:definition "The type of primer used for reverse transcription, e.g. 'oligo-dT' or 'random' primer. This allows users to identify content of the cDNA library input e.g. enriched for mRNA." ; skos:exactMatch <http://www.ebi.ac.uk/efo/EFO_0010192> ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/primer> ; @@ -2825,6 +2948,15 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/size> . +<https://w3id.org/GHGA/status_enum> skos:definition "Enum to capture the status of an entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/StatusEnum> ; + linkml:permissible_values <https://w3id.org/GHGA/deprecated>, + <https://w3id.org/GHGA/in%20progress>, + <https://w3id.org/GHGA/released>, + <https://w3id.org/GHGA/submitted>, + <https://w3id.org/GHGA/unreleased> . + <https://w3id.org/GHGA/storage> a linkml:SlotDefinition ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C60824> ; skos:definition "Methods by which sample is stored (e.g. frozen in liquid nitrogen)." ; @@ -2835,6 +2967,15 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/storage> . +<https://w3id.org/GHGA/submission_date> a linkml:SlotDefinition ; + skos:definition "The timestamp (in ISO 8601 format) when submission was marked completed." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/submission_date> ; + linkml:domain_of <https://w3id.org/GHGA/Submission> ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/submission_date> . + <https://w3id.org/GHGA/target_coverage> a linkml:SlotDefinition ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C155320> ; skos:definition "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." ; @@ -2857,7 +2998,7 @@ <https://w3id.org/GHGA/umi_barcode_offset> a linkml:SlotDefinition ; skos:closeMatch <http://www.ebi.ac.uk/efo/EFO_0010207> ; - skos:definition "The offset in sequence of the UMI identifying barcode. (E.g. \"16\")." ; + skos:definition "The offset in sequence of the UMI identifying barcode. (E.g. '16')." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/umi_barcode_offset> ; linkml:domain_of <https://w3id.org/GHGA/SequencingProtocol> ; @@ -2877,7 +3018,7 @@ <https://w3id.org/GHGA/umi_barcode_size> a linkml:SlotDefinition ; skos:closeMatch <http://www.ebi.ac.uk/efo/EFO_0010209> ; - skos:definition "The size of the UMI identifying barcode (Eg. \"10\")." ; + skos:definition "The size of the UMI identifying barcode (Eg. '10')." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/umi_barcode_size> ; linkml:domain_of <https://w3id.org/GHGA/SequencingProtocol> ; @@ -2887,7 +3028,7 @@ <https://w3id.org/GHGA/vital_status_at_sampling> a linkml:SlotDefinition ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C25717> ; - skos:definition "Vital Status of an Individual at the point of sampling (eg:\"Alive\", \"Deceased\")." ; + skos:definition "Vital Status of an Individual at the point of sampling (eg:'Alive', 'Deceased')." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/vital_status_at_sampling> ; linkml:domain_of <https://w3id.org/GHGA/Sample> ; @@ -2909,7 +3050,9 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/Technology> a linkml:ClassDefinition ; skos:definition "A Technology is an abstraction that represents the instrument used for an assay. The Technology entity captures instrument-specific attributes that are relevant for an Experiment entity. The Technology entity may be further characterized by its children where each child has fields that are relevant to that particular technology." ; @@ -2924,7 +3067,9 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/Workflow> a linkml:ClassDefinition ; 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." ; @@ -2939,7 +3084,9 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/ancestry> a linkml:SlotDefinition ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C176763> ; @@ -3002,6 +3149,20 @@ linkml:slot_uri <https://w3id.org/GHGA/has_publication> ; linkml:usage_slot_name "has publication" . +<https://w3id.org/GHGA/dataset_status> a linkml:SlotDefinition ; + skos:definition "The status of an entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "status" ; + linkml:definition_uri <https://w3id.org/GHGA/status> ; + linkml:domain <https://w3id.org/GHGA/Dataset> ; + linkml:domain_of <https://w3id.org/GHGA/Dataset> ; + linkml:is_a <https://w3id.org/GHGA/status> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/Dataset> ; + linkml:range <https://w3id.org/GHGA/status_enum> ; + linkml:slot_uri <https://w3id.org/GHGA/status> ; + linkml:usage_slot_name "status" . + <https://w3id.org/GHGA/dataset_title> a linkml:SlotDefinition ; skos:definition "The title that describes an entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3062,24 +3223,6 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/geographical_region> . -<https://w3id.org/GHGA/submission_date> a linkml:SlotDefinition ; - skos:definition "The date when submission was completed." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/submission_date> ; - linkml:domain_of <https://w3id.org/GHGA/SubmissionStatusMixin> ; - linkml:owner <https://w3id.org/GHGA/SubmissionStatusMixin> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/submission_date> . - -<https://w3id.org/GHGA/submission_status> a linkml:SlotDefinition ; - skos:definition "The status of submission." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/submission_status> ; - linkml:domain_of <https://w3id.org/GHGA/SubmissionStatusMixin> ; - linkml:owner <https://w3id.org/GHGA/SubmissionStatusMixin> ; - linkml:range <https://w3id.org/GHGA/submission_status_enum> ; - linkml:slot_uri <https://w3id.org/GHGA/submission_status> . - <https://w3id.org/GHGA/year_of_birth> a linkml:SlotDefinition ; skos:closeMatch <http://purl.obolibrary.org/obo/NCIT_C83164> ; skos:definition "The year in which the individual was born." ; @@ -3104,47 +3247,9 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . - -<https://w3id.org/GHGA/Disease> a linkml:ClassDefinition ; - skos:definition "A disease is a disposition to undergo pathological processes that exists in an organism because of one or more disorders in that organism." ; - skos:exactMatch <https://w3id.org/GHGA/EFO:0000408>, - <https://w3id.org/GHGA/MONDO:0000001> ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/Disease> ; - linkml:definition_uri <https://w3id.org/GHGA/Disease> ; - linkml:is_a <https://w3id.org/GHGA/DiseaseOrPhenotypicFeature> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/description>, - <https://w3id.org/GHGA/name>, - <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_has_attribute>, - <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_type>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . - -<https://w3id.org/GHGA/PhenotypicFeature> a linkml:ClassDefinition ; - skos:closeMatch <ncit:C16977> ; - skos:definition "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." ; - skos:exactMatch <https://w3id.org/GHGA/EFO:0000651>, - <https://w3id.org/GHGA/HP:0000118>, - <https://w3id.org/GHGA/SIO:010056> ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/PhenotypicFeature> ; - linkml:definition_uri <https://w3id.org/GHGA/PhenotypicFeature> ; - linkml:is_a <https://w3id.org/GHGA/DiseaseOrPhenotypicFeature> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/description>, - <https://w3id.org/GHGA/name>, - <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_has_attribute>, - <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_type>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/Population> a linkml:ClassDefinition ; skos:definition "A population is a collection of individuals from the same taxonomic class living, counted or sampled at a particular site or in a particular area." ; @@ -3160,7 +3265,9 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/accession> a linkml:SlotDefinition ; skos:definition "A unique identifier assigned to an entity for the sole purpose of referring to that entity in a global scope." ; @@ -3200,14 +3307,14 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/biological_replicates> . -<https://w3id.org/GHGA/creation_date> a linkml:SlotDefinition ; - skos:definition "Timestamp (in ISO 8601 format) when the entity was created." ; +<https://w3id.org/GHGA/deprecation_date> a linkml:SlotDefinition ; + skos:definition "The timestamp (in ISO 8601 format) when the entity was deprecated." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/creation_date> ; - linkml:domain_of <https://w3id.org/GHGA/NamedThing> ; - linkml:owner <https://w3id.org/GHGA/NamedThing> ; + linkml:definition_uri <https://w3id.org/GHGA/deprecation_date> ; + linkml:domain_of <https://w3id.org/GHGA/Investigation> ; + linkml:owner <https://w3id.org/GHGA/Investigation> ; linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/creation_date> . + linkml:slot_uri <https://w3id.org/GHGA/deprecation_date> . <https://w3id.org/GHGA/experimental_replicates> a linkml:SlotDefinition ; skos:definition "Number of experiment replications." ; @@ -3271,15 +3378,6 @@ linkml:range <https://w3id.org/GHGA/Dataset> ; linkml:slot_uri <https://w3id.org/GHGA/has_dataset> . -<https://w3id.org/GHGA/has_disease> a linkml:SlotDefinition ; - skos:definition "Disease concept that the entity is associated with." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/has_disease> ; - linkml:domain_of <https://w3id.org/GHGA/Biospecimen> ; - linkml:owner <https://w3id.org/GHGA/Biospecimen> ; - linkml:range <https://w3id.org/GHGA/Disease> ; - linkml:slot_uri <https://w3id.org/GHGA/has_disease> . - <https://w3id.org/GHGA/has_experiment_process> a linkml:SlotDefinition ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/has_experiment_process> ; @@ -3307,15 +3405,6 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/has_parent> . -<https://w3id.org/GHGA/has_phenotypic_feature> a linkml:SlotDefinition ; - skos:definition "Phenotypic feature concept that the entity is associated with." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/has_phenotypic_feature> ; - linkml:domain_of <https://w3id.org/GHGA/Biospecimen> ; - linkml:owner <https://w3id.org/GHGA/Biospecimen> ; - linkml:range <https://w3id.org/GHGA/PhenotypicFeature> ; - linkml:slot_uri <https://w3id.org/GHGA/has_phenotypic_feature> . - <https://w3id.org/GHGA/has_proband> a linkml:SlotDefinition ; skos:definition "The Individual that is reported to have a disorder in a Family." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3381,7 +3470,7 @@ <https://w3id.org/GHGA/library_construction> a linkml:SlotDefinition ; skos:closeMatch <http://purl.obolibrary.org/obo/OBI_0000711> ; - skos:definition "The name of a library construction approach being used. (eg: \"10X v2 sequencing\" or \"Smart-seq2\")" ; + skos:definition "The name of a library construction approach being used. (eg: '10X v2 sequencing' or 'Smart-seq2')" ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; linkml:definition_uri <https://w3id.org/GHGA/library_construction> ; linkml:domain_of <https://w3id.org/GHGA/LibraryPreparationProtocol> ; @@ -3510,6 +3599,15 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/policy_url> . +<https://w3id.org/GHGA/release_date> a linkml:SlotDefinition ; + skos:definition "The timestamp (in ISO 8601 format) when the entity was released for public consumption." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/release_date> ; + linkml:domain_of <https://w3id.org/GHGA/Investigation> ; + linkml:owner <https://w3id.org/GHGA/Investigation> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/release_date> . + <https://w3id.org/GHGA/role> a linkml:SlotDefinition ; skos:definition "The role that a user has within GHGA." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3568,15 +3666,6 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/tissue> . -<https://w3id.org/GHGA/update_date> a linkml:SlotDefinition ; - skos:definition "Timestamp (in ISO 8601 format) when the entity was updated." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/update_date> ; - linkml:domain_of <https://w3id.org/GHGA/NamedThing> ; - linkml:owner <https://w3id.org/GHGA/NamedThing> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/update_date> . - <https://w3id.org/GHGA/url> a linkml:SlotDefinition ; skos:definition "A URL to a resource." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3620,13 +3709,56 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . -<https://w3id.org/GHGA/DiseaseOrPhenotypicFeature> a linkml:ClassDefinition ; - 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> ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/DiseaseOrPhenotypicFeature> ; +<https://w3id.org/GHGA/DataTransformation> a linkml:ClassDefinition ; + skos:definition "A data transformation technique used to analyze and interpret data to gain a better understanding of it." ; + skos:exactMatch <https://w3id.org/GHGA/OBI:0200000> ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/DataTransformation> ; + linkml:definition_uri <https://w3id.org/GHGA/DataTransformation> ; + linkml:is_a <https://w3id.org/GHGA/PlannedProcess> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/description>, + <https://w3id.org/GHGA/id>, + <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_has_attribute>, + <https://w3id.org/GHGA/named_thing_type>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces>, + <https://w3id.org/GHGA/title> . + +<https://w3id.org/GHGA/Disease> a linkml:ClassDefinition ; + skos:definition "A disease is a disposition to undergo pathological processes that exists in an organism because of one or more disorders in that organism." ; + skos:exactMatch <https://w3id.org/GHGA/EFO:0000408>, + <https://w3id.org/GHGA/MONDO:0000001> ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/Disease> ; + linkml:definition_uri <https://w3id.org/GHGA/Disease> ; + linkml:is_a <https://w3id.org/GHGA/DiseaseOrPhenotypicFeature> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/description>, + <https://w3id.org/GHGA/name>, + <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_has_attribute>, + <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_type>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . + +<https://w3id.org/GHGA/DiseaseOrPhenotypicFeature> a linkml:ClassDefinition ; + 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> ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/DiseaseOrPhenotypicFeature> ; linkml:definition_uri <https://w3id.org/GHGA/DiseaseOrPhenotypicFeature> ; linkml:is_a <https://w3id.org/GHGA/BiologicalQuality> ; linkml:slot_usage [ ] ; @@ -3638,10 +3770,35 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> ; + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> ; linkml:union_of <https://w3id.org/GHGA/Disease>, <https://w3id.org/GHGA/PhenotypicFeature> . +<https://w3id.org/GHGA/PhenotypicFeature> a linkml:ClassDefinition ; + skos:closeMatch <ncit:C16977> ; + skos:definition "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." ; + skos:exactMatch <https://w3id.org/GHGA/EFO:0000651>, + <https://w3id.org/GHGA/HP:0000118>, + <https://w3id.org/GHGA/SIO:010056> ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/PhenotypicFeature> ; + linkml:definition_uri <https://w3id.org/GHGA/PhenotypicFeature> ; + linkml:is_a <https://w3id.org/GHGA/DiseaseOrPhenotypicFeature> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/description>, + <https://w3id.org/GHGA/name>, + <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_has_attribute>, + <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_type>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . + <https://w3id.org/GHGA/ResearchActivity> a linkml:ClassDefinition ; skos:closeMatch <ncit:C15429> ; 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." ; @@ -3660,6 +3817,8 @@ <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces>, <https://w3id.org/GHGA/title> . <https://w3id.org/GHGA/email> a linkml:SlotDefinition ; @@ -3689,7 +3848,9 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/AggregateDataset> a linkml:ClassDefinition ; skos:definition "An Aggregate Dataset is a specialized dataset that is built by combining one or more Datasets together." ; @@ -3702,65 +3863,17 @@ <https://w3id.org/GHGA/dataset_description>, <https://w3id.org/GHGA/dataset_has_file>, <https://w3id.org/GHGA/dataset_has_publication>, + <https://w3id.org/GHGA/dataset_status>, <https://w3id.org/GHGA/dataset_title>, <https://w3id.org/GHGA/dataset_type>, - <https://w3id.org/GHGA/deprecated>, - <https://w3id.org/GHGA/deprecation_date>, - <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_has_attribute>, - <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref>, - <https://w3id.org/GHGA/release_date>, - <https://w3id.org/GHGA/release_status>, - <https://w3id.org/GHGA/replaced_by> . - -<https://w3id.org/GHGA/DataTransformation> a linkml:ClassDefinition ; - skos:definition "A data transformation technique used to analyze and interpret data to gain a better understanding of it." ; - skos:exactMatch <https://w3id.org/GHGA/OBI:0200000> ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/DataTransformation> ; - linkml:definition_uri <https://w3id.org/GHGA/DataTransformation> ; - linkml:is_a <https://w3id.org/GHGA/PlannedProcess> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/description>, - <https://w3id.org/GHGA/id>, - <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_has_attribute>, - <https://w3id.org/GHGA/named_thing_type>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref>, - <https://w3id.org/GHGA/title> . - -<https://w3id.org/GHGA/Investigation> a linkml:ClassDefinition ; - skos:closeMatch <ncit:C15429> ; - 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 <https://w3id.org/GHGA/OBI:0000066>, - <https://w3id.org/GHGA/SIO:000747> ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/Investigation> ; - linkml:definition_uri <https://w3id.org/GHGA/Investigation> ; - linkml:is_a <https://w3id.org/GHGA/PlannedProcess> ; - linkml:mixins <https://w3id.org/GHGA/DeprecationMixin>, - <https://w3id.org/GHGA/ReleaseStatusMixin> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/deprecated>, - <https://w3id.org/GHGA/deprecation_date>, - <https://w3id.org/GHGA/description>, - <https://w3id.org/GHGA/has_publication>, <https://w3id.org/GHGA/named_thing_accession>, <https://w3id.org/GHGA/named_thing_creation_date>, <https://w3id.org/GHGA/named_thing_has_attribute>, <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref>, - <https://w3id.org/GHGA/release_date>, - <https://w3id.org/GHGA/release_status>, <https://w3id.org/GHGA/replaced_by>, - <https://w3id.org/GHGA/title> . + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/MaterialEntity> a linkml:ClassDefinition ; skos:definition "A material entity is a physical entity that is spatially extended, exists as a whole at any point in time and has mass." ; @@ -3776,7 +3889,9 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/PlannedProcess> a linkml:ClassDefinition ; skos:definition "A process is an entity that exists in time by occurring or happening, has temporal parts and always involves and depends on some entity during the time it occurs." ; @@ -3794,17 +3909,9 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . - -<https://w3id.org/GHGA/SubmissionStatusMixin> a linkml:ClassDefinition ; - skos:definition "A mixin that keeps track of the submission status." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/SubmissionStatusMixin> ; - linkml:definition_uri <https://w3id.org/GHGA/SubmissionStatusMixin> ; - linkml:mixin true ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/submission_date>, - <https://w3id.org/GHGA/submission_status> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/additional_name> a linkml:SlotDefinition ; skos:definition "Additional name(s)." ; @@ -3833,15 +3940,15 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/given_name> . -<https://w3id.org/GHGA/ReleaseStatusMixin> a linkml:ClassDefinition ; - skos:definition "A mixin that keeps track of the release status." ; +<https://w3id.org/GHGA/creation_date> a linkml:SlotDefinition ; + skos:definition "Timestamp (in ISO 8601 format) when the entity was created." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/ReleaseStatusMixin> ; - linkml:definition_uri <https://w3id.org/GHGA/ReleaseStatusMixin> ; - linkml:mixin true ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/release_date>, - <https://w3id.org/GHGA/release_status> . + linkml:definition_uri <https://w3id.org/GHGA/creation_date> ; + linkml:domain_of <https://w3id.org/GHGA/NamedThing>, + <https://w3id.org/GHGA/Submission> ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/creation_date> . <https://w3id.org/GHGA/has_agent> a linkml:SlotDefinition ; skos:definition "A person or an entity that is performing a Planned Process entity." ; @@ -3863,6 +3970,26 @@ linkml:range <https://w3id.org/GHGA/Biospecimen> ; linkml:slot_uri <https://w3id.org/GHGA/has_biospecimen> . +<https://w3id.org/GHGA/has_disease> a linkml:SlotDefinition ; + skos:definition "Disease concept that the entity is associated with." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/has_disease> ; + linkml:domain_of <https://w3id.org/GHGA/Biospecimen>, + <https://w3id.org/GHGA/Individual> ; + linkml:owner <https://w3id.org/GHGA/Individual> ; + linkml:range <https://w3id.org/GHGA/Disease> ; + linkml:slot_uri <https://w3id.org/GHGA/has_disease> . + +<https://w3id.org/GHGA/has_phenotypic_feature> a linkml:SlotDefinition ; + skos:definition "Phenotypic feature concept that the entity is associated with." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/has_phenotypic_feature> ; + linkml:domain_of <https://w3id.org/GHGA/Biospecimen>, + <https://w3id.org/GHGA/Individual> ; + linkml:owner <https://w3id.org/GHGA/Individual> ; + linkml:range <https://w3id.org/GHGA/PhenotypicFeature> ; + linkml:slot_uri <https://w3id.org/GHGA/has_phenotypic_feature> . + <https://w3id.org/GHGA/has_project> a linkml:SlotDefinition ; skos:definition "The project associated with an entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3893,6 +4020,16 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/key> . +<https://w3id.org/GHGA/update_date> a linkml:SlotDefinition ; + skos:definition "Timestamp (in ISO 8601 format) when the entity was updated." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/update_date> ; + linkml:domain_of <https://w3id.org/GHGA/NamedThing>, + <https://w3id.org/GHGA/Submission> ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/update_date> . + <https://w3id.org/GHGA/value> a linkml:SlotDefinition ; skos:definition "The value of an attribute" ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -3921,6 +4058,8 @@ <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces>, <https://w3id.org/GHGA/user_role> . <https://w3id.org/GHGA/WorkflowStep> a linkml:ClassDefinition ; @@ -3937,6 +4076,8 @@ <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces>, <https://w3id.org/GHGA/workflow_step_has_parameter> . <https://w3id.org/GHGA/has_analysis> a linkml:SlotDefinition ; @@ -3950,29 +4091,6 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/has_analysis> . -<https://w3id.org/GHGA/id> a linkml:SlotDefinition ; - skos:definition "An identifier that uniquely represents an entity." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/id> ; - linkml:domain_of <https://w3id.org/GHGA/DataTransformation>, - <https://w3id.org/GHGA/NamedThing> ; - linkml:identifier true ; - linkml:owner <https://w3id.org/GHGA/DataTransformation> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:required true ; - linkml:slot_uri <https://w3id.org/GHGA/id> . - -<https://w3id.org/GHGA/DeprecationMixin> a linkml:ClassDefinition ; - skos:definition "A mixin that keeps track of the deprecation status." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/DeprecationMixin> ; - linkml:definition_uri <https://w3id.org/GHGA/DeprecationMixin> ; - linkml:mixin true ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/deprecated>, - <https://w3id.org/GHGA/deprecation_date>, - <https://w3id.org/GHGA/replaced_by> . - <https://w3id.org/GHGA/InformationContentEntity> a linkml:ClassDefinition ; skos:definition "A generically dependent continuant that is about some thing." ; skos:exactMatch <http://purl.obolibrary.org/obo/IAO_0000030> ; @@ -3987,52 +4105,9 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . - -<https://w3id.org/GHGA/deprecated> a linkml:SlotDefinition ; - skos:definition "The deprecation status of an entity." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/deprecated> ; - linkml:domain_of <https://w3id.org/GHGA/DeprecationMixin> ; - linkml:owner <https://w3id.org/GHGA/DeprecationMixin> ; - linkml:range <https://w3id.org/GHGA/boolean> ; - linkml:slot_uri <https://w3id.org/GHGA/deprecated> . - -<https://w3id.org/GHGA/deprecation_date> a linkml:SlotDefinition ; - skos:definition "The date when the entity was deprecated." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/deprecation_date> ; - linkml:domain_of <https://w3id.org/GHGA/DeprecationMixin> ; - linkml:owner <https://w3id.org/GHGA/DeprecationMixin> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/deprecation_date> . - -<https://w3id.org/GHGA/release_date> a linkml:SlotDefinition ; - skos:definition "The date when the entity was released for public consumption." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/release_date> ; - linkml:domain_of <https://w3id.org/GHGA/ReleaseStatusMixin> ; - linkml:owner <https://w3id.org/GHGA/ReleaseStatusMixin> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/release_date> . - -<https://w3id.org/GHGA/release_status> a linkml:SlotDefinition ; - skos:definition "The release status of an entity." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/release_status> ; - linkml:domain_of <https://w3id.org/GHGA/ReleaseStatusMixin> ; - linkml:owner <https://w3id.org/GHGA/ReleaseStatusMixin> ; - linkml:range <https://w3id.org/GHGA/release_status_enum> ; - linkml:slot_uri <https://w3id.org/GHGA/release_status> . - -<https://w3id.org/GHGA/replaced_by> a linkml:SlotDefinition ; - skos:definition "The entity which replaces a deprecated entity." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:definition_uri <https://w3id.org/GHGA/replaced_by> ; - linkml:domain_of <https://w3id.org/GHGA/DeprecationMixin> ; - linkml:owner <https://w3id.org/GHGA/DeprecationMixin> ; - linkml:range <https://w3id.org/GHGA/NamedThing> ; - linkml:slot_uri <https://w3id.org/GHGA/replaced_by> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/Family> a linkml:ClassDefinition ; skos:definition "A domestic group, or a number of domestic groups linked through descent (demonstrated or stipulated) from a common ancestor, marriage, or adoption." ; @@ -4050,7 +4125,9 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/Person> a linkml:ClassDefinition ; skos:definition "A member of the species Homo sapiens." ; @@ -4071,7 +4148,9 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/has_data_access_policy> a linkml:SlotDefinition ; skos:definition "Data Access Policy associated with an entity." ; @@ -4139,6 +4218,17 @@ linkml:range <https://w3id.org/GHGA/File> ; linkml:slot_uri <https://w3id.org/GHGA/has_output> . +<https://w3id.org/GHGA/status> a linkml:SlotDefinition ; + skos:definition "The status of an entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/status> ; + linkml:domain_of <https://w3id.org/GHGA/Dataset>, + <https://w3id.org/GHGA/Investigation>, + <https://w3id.org/GHGA/Submission> ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/status_enum> ; + linkml:slot_uri <https://w3id.org/GHGA/status> . + <https://w3id.org/GHGA/xref> a linkml:SlotDefinition ; skos:definition "Alternate identifiers for an entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4149,6 +4239,45 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/xref> . +<https://w3id.org/GHGA/Investigation> a linkml:ClassDefinition ; + skos:closeMatch <ncit:C15429> ; + 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 <https://w3id.org/GHGA/OBI:0000066>, + <https://w3id.org/GHGA/SIO:000747> ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/Investigation> ; + linkml:definition_uri <https://w3id.org/GHGA/Investigation> ; + linkml:is_a <https://w3id.org/GHGA/PlannedProcess> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/deprecation_date>, + <https://w3id.org/GHGA/description>, + <https://w3id.org/GHGA/has_publication>, + <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_has_attribute>, + <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_type>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/release_date>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces>, + <https://w3id.org/GHGA/status>, + <https://w3id.org/GHGA/title> . + +<https://w3id.org/GHGA/id> a linkml:SlotDefinition ; + skos:definition "An identifier that uniquely represents an entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/id> ; + linkml:domain_of <https://w3id.org/GHGA/DataTransformation>, + <https://w3id.org/GHGA/NamedThing>, + <https://w3id.org/GHGA/Submission> ; + linkml:identifier true ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:required true ; + linkml:slot_uri <https://w3id.org/GHGA/id> . + <https://w3id.org/GHGA/DataUseCondition> a linkml:ClassDefinition ; skos:definition "Data Use Condition represents the use conditions associated with a Dataset. A permission field can have one or more terms that collectively defines the data use condition. The modifier determines the interpretation of the use permission(s)." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4171,10 +4300,9 @@ <https://w3id.org/GHGA/dataset_description>, <https://w3id.org/GHGA/dataset_has_file>, <https://w3id.org/GHGA/dataset_has_publication>, + <https://w3id.org/GHGA/dataset_status>, <https://w3id.org/GHGA/dataset_title>, <https://w3id.org/GHGA/dataset_type>, - <https://w3id.org/GHGA/deprecated>, - <https://w3id.org/GHGA/deprecation_date>, <https://w3id.org/GHGA/has_analysis>, <https://w3id.org/GHGA/named_thing_accession>, <https://w3id.org/GHGA/named_thing_creation_date>, @@ -4182,9 +4310,8 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref>, - <https://w3id.org/GHGA/release_date>, - <https://w3id.org/GHGA/release_status>, - <https://w3id.org/GHGA/replaced_by> . + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/ExperimentDataset> a linkml:ClassDefinition ; skos:definition "An Experiment Dataset is a collection of Files linked to one or more Experiments from one or more Studies." ; @@ -4196,10 +4323,9 @@ linkml:slots <https://w3id.org/GHGA/dataset_description>, <https://w3id.org/GHGA/dataset_has_file>, <https://w3id.org/GHGA/dataset_has_publication>, + <https://w3id.org/GHGA/dataset_status>, <https://w3id.org/GHGA/dataset_title>, <https://w3id.org/GHGA/dataset_type>, - <https://w3id.org/GHGA/deprecated>, - <https://w3id.org/GHGA/deprecation_date>, <https://w3id.org/GHGA/experiment_dataset_has_data_access_policy>, <https://w3id.org/GHGA/experiment_dataset_has_experiment>, <https://w3id.org/GHGA/experiment_dataset_has_study>, @@ -4209,9 +4335,8 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref>, - <https://w3id.org/GHGA/release_date>, - <https://w3id.org/GHGA/release_status>, - <https://w3id.org/GHGA/replaced_by> . + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/WorkflowParameter> a linkml:ClassDefinition ; skos:definition "A key/value pair that represents a parameter used in a Workflow Step." ; @@ -4282,7 +4407,9 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/Publication> a linkml:ClassDefinition ; 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." ; @@ -4299,7 +4426,9 @@ <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/publication_id>, <https://w3id.org/GHGA/publication_title>, - <https://w3id.org/GHGA/publication_xref> . + <https://w3id.org/GHGA/publication_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/DataAccessCommittee> a linkml:ClassDefinition ; skos:definition "A group of members that are delegated to grant access to one or more datasets after ensuring the minimum criteria for data sharing has been met, and request for data use does not raise ethical and/or legal concerns." ; @@ -4318,7 +4447,9 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/has_study> a linkml:SlotDefinition ; skos:definition "The study associated with an entity." ; @@ -4352,7 +4483,33 @@ <https://w3id.org/GHGA/project_has_attribute>, <https://w3id.org/GHGA/project_has_publication>, <https://w3id.org/GHGA/project_has_study>, - <https://w3id.org/GHGA/project_title> . + <https://w3id.org/GHGA/project_title>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . + +<https://w3id.org/GHGA/Biospecimen> a linkml:ClassDefinition ; + 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." ; + skos:exactMatch <https://w3id.org/GHGA/OBI:0100051> ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/Biospecimen> ; + linkml:definition_uri <https://w3id.org/GHGA/Biospecimen> ; + linkml:is_a <https://w3id.org/GHGA/MaterialEntity> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/biospecimen_has_anatomical_entity>, + <https://w3id.org/GHGA/biospecimen_has_disease>, + <https://w3id.org/GHGA/biospecimen_has_individual>, + <https://w3id.org/GHGA/biospecimen_has_phenotypic_feature>, + <https://w3id.org/GHGA/description>, + <https://w3id.org/GHGA/name>, + <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_has_attribute>, + <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_type>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/AnalysisProcess> a linkml:ClassDefinition ; 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." ; @@ -4372,6 +4529,8 @@ <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces>, <https://w3id.org/GHGA/title> . <https://w3id.org/GHGA/ExperimentProcess> a linkml:ClassDefinition ; @@ -4392,7 +4551,9 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/title> a linkml:SlotDefinition ; skos:definition "The title that describes an entity." ; @@ -4409,28 +4570,6 @@ linkml:range <https://w3id.org/GHGA/string> ; linkml:slot_uri <https://w3id.org/GHGA/title> . -<https://w3id.org/GHGA/Biospecimen> a linkml:ClassDefinition ; - 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." ; - skos:exactMatch <https://w3id.org/GHGA/OBI:0100051> ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/Biospecimen> ; - linkml:definition_uri <https://w3id.org/GHGA/Biospecimen> ; - linkml:is_a <https://w3id.org/GHGA/MaterialEntity> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/biospecimen_has_anatomical_entity>, - <https://w3id.org/GHGA/biospecimen_has_disease>, - <https://w3id.org/GHGA/biospecimen_has_individual>, - <https://w3id.org/GHGA/biospecimen_has_phenotypic_feature>, - <https://w3id.org/GHGA/description>, - <https://w3id.org/GHGA/name>, - <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_has_attribute>, - <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_type>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . - <https://w3id.org/GHGA/Analysis> a linkml:ClassDefinition ; skos:altLabel "data analysis" ; skos:definition "An Analysis is a data transformation that transforms input data to output data. The workflow used to achieve this transformation and the individual steps are also captured." ; @@ -4452,6 +4591,8 @@ <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces>, <https://w3id.org/GHGA/title> . <https://w3id.org/GHGA/Attribute> a linkml:ClassDefinition ; @@ -4466,33 +4607,6 @@ <https://w3id.org/GHGA/attribute_value>, <https://w3id.org/GHGA/attribute_value_type> . -<https://w3id.org/GHGA/Dataset> a linkml:ClassDefinition ; - skos:definition "A Dataset is a collection of Files that is prepared for distribution." ; - skos:exactMatch <https://w3id.org/GHGA/SIO:000089> ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/Dataset> ; - linkml:definition_uri <https://w3id.org/GHGA/Dataset> ; - linkml:is_a <https://w3id.org/GHGA/InformationContentEntity> ; - linkml:mixins <https://w3id.org/GHGA/DeprecationMixin>, - <https://w3id.org/GHGA/ReleaseStatusMixin> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/dataset_description>, - <https://w3id.org/GHGA/dataset_has_file>, - <https://w3id.org/GHGA/dataset_has_publication>, - <https://w3id.org/GHGA/dataset_title>, - <https://w3id.org/GHGA/dataset_type>, - <https://w3id.org/GHGA/deprecated>, - <https://w3id.org/GHGA/deprecation_date>, - <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_has_attribute>, - <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref>, - <https://w3id.org/GHGA/release_date>, - <https://w3id.org/GHGA/release_status>, - <https://w3id.org/GHGA/replaced_by> . - <https://w3id.org/GHGA/Protocol> a linkml:ClassDefinition ; skos:altLabel "experiment protocol", "library protocol" ; @@ -4513,7 +4627,9 @@ <https://w3id.org/GHGA/protocol_name>, <https://w3id.org/GHGA/protocol_type>, <https://w3id.org/GHGA/protocol_url>, - <https://w3id.org/GHGA/protocol_xref> . + <https://w3id.org/GHGA/protocol_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/name> a linkml:SlotDefinition ; skos:definition "The name for an entity." ; @@ -4552,6 +4668,8 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces>, <https://w3id.org/GHGA/size> . <https://w3id.org/GHGA/DataAccessPolicy> a linkml:ClassDefinition ; @@ -4573,7 +4691,32 @@ <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_type>, <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . + +<https://w3id.org/GHGA/Dataset> a linkml:ClassDefinition ; + skos:definition "A Dataset is a collection of Files that is prepared for distribution." ; + skos:exactMatch <https://w3id.org/GHGA/SIO:000089> ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/Dataset> ; + linkml:definition_uri <https://w3id.org/GHGA/Dataset> ; + linkml:is_a <https://w3id.org/GHGA/InformationContentEntity> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/dataset_description>, + <https://w3id.org/GHGA/dataset_has_file>, + <https://w3id.org/GHGA/dataset_has_publication>, + <https://w3id.org/GHGA/dataset_status>, + <https://w3id.org/GHGA/dataset_title>, + <https://w3id.org/GHGA/dataset_type>, + <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_has_attribute>, + <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/description> a linkml:SlotDefinition ; skos:definition "Description of an entity." ; @@ -4610,6 +4753,8 @@ <https://w3id.org/GHGA/named_thing_has_attribute>, <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces>, <https://w3id.org/GHGA/sample_description>, <https://w3id.org/GHGA/sample_has_biospecimen>, <https://w3id.org/GHGA/sample_has_individual>, @@ -4620,6 +4765,20 @@ <https://w3id.org/GHGA/storage>, <https://w3id.org/GHGA/vital_status_at_sampling> . +<https://w3id.org/GHGA/named_thing_type> a linkml:SlotDefinition ; + skos:definition "The type of an entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + skos:prefLabel "type" ; + linkml:definition_uri <https://w3id.org/GHGA/type> ; + linkml:domain <https://w3id.org/GHGA/NamedThing> ; + linkml:domain_of <https://w3id.org/GHGA/NamedThing> ; + linkml:is_a <https://w3id.org/GHGA/type> ; + linkml:is_usage_slot true ; + linkml:owner <https://w3id.org/GHGA/NamedThing> ; + linkml:range <https://w3id.org/GHGA/string> ; + linkml:slot_uri <https://w3id.org/GHGA/type> ; + linkml:usage_slot_name "type" . + <https://w3id.org/GHGA/Study> 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 <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4627,16 +4786,16 @@ linkml:definition_uri <https://w3id.org/GHGA/Study> ; linkml:is_a <https://w3id.org/GHGA/Investigation> ; linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/deprecated>, - <https://w3id.org/GHGA/deprecation_date>, + linkml:slots <https://w3id.org/GHGA/deprecation_date>, <https://w3id.org/GHGA/named_thing_accession>, <https://w3id.org/GHGA/named_thing_creation_date>, <https://w3id.org/GHGA/named_thing_id>, <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref>, <https://w3id.org/GHGA/release_date>, - <https://w3id.org/GHGA/release_status>, <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces>, + <https://w3id.org/GHGA/status>, <https://w3id.org/GHGA/study_affiliation>, <https://w3id.org/GHGA/study_description>, <https://w3id.org/GHGA/study_has_analysis>, @@ -4647,20 +4806,6 @@ <https://w3id.org/GHGA/study_title>, <https://w3id.org/GHGA/study_type> . -<https://w3id.org/GHGA/named_thing_type> a linkml:SlotDefinition ; - skos:definition "The type of an entity." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - skos:prefLabel "type" ; - linkml:definition_uri <https://w3id.org/GHGA/type> ; - linkml:domain <https://w3id.org/GHGA/NamedThing> ; - linkml:domain_of <https://w3id.org/GHGA/NamedThing> ; - linkml:is_a <https://w3id.org/GHGA/type> ; - linkml:is_usage_slot true ; - linkml:owner <https://w3id.org/GHGA/NamedThing> ; - linkml:range <https://w3id.org/GHGA/string> ; - linkml:slot_uri <https://w3id.org/GHGA/type> ; - linkml:usage_slot_name "type" . - <https://w3id.org/GHGA/named_thing_has_attribute> a linkml:SlotDefinition ; skos:definition "Holds one or more Attribute entities that further characterizes this entity." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4709,23 +4854,6 @@ linkml:slot_uri <https://w3id.org/GHGA/xref> ; linkml:usage_slot_name "xref" . -<https://w3id.org/GHGA/NamedThing> a linkml:ClassDefinition ; - skos:altLabel "entity", - "named entity", - "object" ; - skos:definition "A databased entity, concept or class. This is a generic class that is the root of all the other classes." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/NamedThing> ; - linkml:definition_uri <https://w3id.org/GHGA/NamedThing> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_has_attribute>, - <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_type>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref> . - <https://w3id.org/GHGA/named_thing_accession> a linkml:SlotDefinition ; skos:definition "A unique identifier assigned to an entity for the sole purpose of referring to that entity in a global scope." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4768,63 +4896,6 @@ linkml:slot_uri <https://w3id.org/GHGA/update_date> ; linkml:usage_slot_name "update date" . -<https://w3id.org/GHGA/Submission> a linkml:ClassDefinition ; - 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." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/Submission> ; - linkml:definition_uri <https://w3id.org/GHGA/Submission> ; - linkml:is_a <https://w3id.org/GHGA/NamedThing> ; - linkml:mixins <https://w3id.org/GHGA/SubmissionStatusMixin> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_has_attribute>, - <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_type>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref>, - <https://w3id.org/GHGA/submission_date>, - <https://w3id.org/GHGA/submission_has_analysis>, - <https://w3id.org/GHGA/submission_has_biospecimen>, - <https://w3id.org/GHGA/submission_has_data_access_policy>, - <https://w3id.org/GHGA/submission_has_experiment>, - <https://w3id.org/GHGA/submission_has_file>, - <https://w3id.org/GHGA/submission_has_individual>, - <https://w3id.org/GHGA/submission_has_project>, - <https://w3id.org/GHGA/submission_has_sample>, - <https://w3id.org/GHGA/submission_has_study>, - <https://w3id.org/GHGA/submission_status> . - -<https://w3id.org/GHGA/Individual> a linkml:ClassDefinition ; - skos:altLabel "patient", - "subject" ; - skos:definition "An Individual is a Person who is participating in a Study." ; - skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; - linkml:class_uri <https://w3id.org/GHGA/Individual> ; - linkml:definition_uri <https://w3id.org/GHGA/Individual> ; - linkml:is_a <https://w3id.org/GHGA/Person> ; - linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/additional_name>, - <https://w3id.org/GHGA/ancestry>, - <https://w3id.org/GHGA/ethnicity>, - <https://w3id.org/GHGA/family_name>, - <https://w3id.org/GHGA/gender>, - <https://w3id.org/GHGA/geographical_region>, - <https://w3id.org/GHGA/given_name>, - <https://w3id.org/GHGA/individual_age>, - <https://w3id.org/GHGA/individual_has_children>, - <https://w3id.org/GHGA/individual_has_parent>, - <https://w3id.org/GHGA/individual_sex>, - <https://w3id.org/GHGA/individual_vital_status>, - <https://w3id.org/GHGA/named_thing_accession>, - <https://w3id.org/GHGA/named_thing_creation_date>, - <https://w3id.org/GHGA/named_thing_has_attribute>, - <https://w3id.org/GHGA/named_thing_id>, - <https://w3id.org/GHGA/named_thing_type>, - <https://w3id.org/GHGA/named_thing_update_date>, - <https://w3id.org/GHGA/named_thing_xref>, - <https://w3id.org/GHGA/year_of_birth> . - <https://w3id.org/GHGA/Experiment> a linkml:ClassDefinition ; skos:closeMatch <ncit:C42790> ; 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." ; @@ -4834,8 +4905,7 @@ linkml:definition_uri <https://w3id.org/GHGA/Experiment> ; linkml:is_a <https://w3id.org/GHGA/Investigation> ; linkml:slot_usage [ ] ; - linkml:slots <https://w3id.org/GHGA/deprecated>, - <https://w3id.org/GHGA/deprecation_date>, + linkml:slots <https://w3id.org/GHGA/deprecation_date>, <https://w3id.org/GHGA/experiment_biological_replicates>, <https://w3id.org/GHGA/experiment_description>, <https://w3id.org/GHGA/experiment_experimental_replicates>, @@ -4855,8 +4925,28 @@ <https://w3id.org/GHGA/named_thing_update_date>, <https://w3id.org/GHGA/named_thing_xref>, <https://w3id.org/GHGA/release_date>, - <https://w3id.org/GHGA/release_status>, - <https://w3id.org/GHGA/replaced_by> . + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces>, + <https://w3id.org/GHGA/status> . + +<https://w3id.org/GHGA/NamedThing> a linkml:ClassDefinition ; + skos:altLabel "entity", + "named entity", + "object" ; + skos:definition "A databased entity, concept or class. This is a generic class that is the root of all the other classes." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/NamedThing> ; + linkml:definition_uri <https://w3id.org/GHGA/NamedThing> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_has_attribute>, + <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_type>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces> . <https://w3id.org/GHGA/SequencingProtocol> a linkml:ClassDefinition ; skos:definition "Information about the sequencing of a sample." ; @@ -4881,6 +4971,8 @@ <https://w3id.org/GHGA/read_length>, <https://w3id.org/GHGA/read_pair_number>, <https://w3id.org/GHGA/reference_annotation>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces>, <https://w3id.org/GHGA/sample_barcode_read>, <https://w3id.org/GHGA/sequencing_length>, <https://w3id.org/GHGA/sequencing_protocol_description>, @@ -4893,6 +4985,64 @@ <https://w3id.org/GHGA/umi_barcode_read>, <https://w3id.org/GHGA/umi_barcode_size> . +<https://w3id.org/GHGA/replaced_by> a linkml:SlotDefinition ; + owl:inverseOf <https://w3id.org/GHGA/replaces> ; + skos:definition "Refers to the entity which replaces a currently deprecated entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/replaced_by> ; + linkml:domain <https://w3id.org/GHGA/NamedThing> ; + linkml:domain_of <https://w3id.org/GHGA/NamedThing>, + <https://w3id.org/GHGA/Submission> ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/NamedThing> ; + linkml:slot_uri <https://w3id.org/GHGA/replaced_by> . + +<https://w3id.org/GHGA/replaces> a linkml:SlotDefinition ; + owl:inverseOf <https://w3id.org/GHGA/replaced_by> ; + skos:definition "Refers to a deprecated entity that is being replaced by the current entity." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:definition_uri <https://w3id.org/GHGA/replaces> ; + linkml:domain <https://w3id.org/GHGA/NamedThing> ; + linkml:domain_of <https://w3id.org/GHGA/NamedThing>, + <https://w3id.org/GHGA/Submission> ; + linkml:owner <https://w3id.org/GHGA/Submission> ; + linkml:range <https://w3id.org/GHGA/NamedThing> ; + linkml:slot_uri <https://w3id.org/GHGA/replaces> . + +<https://w3id.org/GHGA/Individual> a linkml:ClassDefinition ; + skos:altLabel "patient", + "subject" ; + skos:definition "An Individual is a Person who is participating in a Study." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/Individual> ; + linkml:definition_uri <https://w3id.org/GHGA/Individual> ; + linkml:is_a <https://w3id.org/GHGA/Person> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/additional_name>, + <https://w3id.org/GHGA/ancestry>, + <https://w3id.org/GHGA/ethnicity>, + <https://w3id.org/GHGA/family_name>, + <https://w3id.org/GHGA/gender>, + <https://w3id.org/GHGA/geographical_region>, + <https://w3id.org/GHGA/given_name>, + <https://w3id.org/GHGA/individual_age>, + <https://w3id.org/GHGA/individual_has_children>, + <https://w3id.org/GHGA/individual_has_disease>, + <https://w3id.org/GHGA/individual_has_parent>, + <https://w3id.org/GHGA/individual_has_phenotypic_feature>, + <https://w3id.org/GHGA/individual_sex>, + <https://w3id.org/GHGA/individual_vital_status>, + <https://w3id.org/GHGA/named_thing_accession>, + <https://w3id.org/GHGA/named_thing_creation_date>, + <https://w3id.org/GHGA/named_thing_has_attribute>, + <https://w3id.org/GHGA/named_thing_id>, + <https://w3id.org/GHGA/named_thing_type>, + <https://w3id.org/GHGA/named_thing_update_date>, + <https://w3id.org/GHGA/named_thing_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces>, + <https://w3id.org/GHGA/year_of_birth> . + <https://w3id.org/GHGA/LibraryPreparationProtocol> a linkml:ClassDefinition ; skos:definition "Information about the library preparation of an Experiment." ; skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; @@ -4921,9 +5071,34 @@ <https://w3id.org/GHGA/protocol_type>, <https://w3id.org/GHGA/protocol_url>, <https://w3id.org/GHGA/protocol_xref>, + <https://w3id.org/GHGA/replaced_by>, + <https://w3id.org/GHGA/replaces>, <https://w3id.org/GHGA/rnaseq_strandedness>, <https://w3id.org/GHGA/target_regions> . +<https://w3id.org/GHGA/Submission> a linkml:ClassDefinition ; + 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." ; + skos:inScheme <https://w3id.org/GHGA-Metadata-Schema> ; + linkml:class_uri <https://w3id.org/GHGA/Submission> ; + linkml:definition_uri <https://w3id.org/GHGA/Submission> ; + linkml:slot_usage [ ] ; + linkml:slots <https://w3id.org/GHGA/submission_creation_date>, + <https://w3id.org/GHGA/submission_date>, + <https://w3id.org/GHGA/submission_has_analysis>, + <https://w3id.org/GHGA/submission_has_biospecimen>, + <https://w3id.org/GHGA/submission_has_data_access_policy>, + <https://w3id.org/GHGA/submission_has_experiment>, + <https://w3id.org/GHGA/submission_has_file>, + <https://w3id.org/GHGA/submission_has_individual>, + <https://w3id.org/GHGA/submission_has_project>, + <https://w3id.org/GHGA/submission_has_sample>, + <https://w3id.org/GHGA/submission_has_study>, + <https://w3id.org/GHGA/submission_id>, + <https://w3id.org/GHGA/submission_replaced_by>, + <https://w3id.org/GHGA/submission_replaces>, + <https://w3id.org/GHGA/submission_status>, + <https://w3id.org/GHGA/submission_update_date> . + <https://w3id.org/GHGA/string> a linkml:TypeDefinition ; skos:definition "A character string" ; skos:inScheme linkml:types ; diff --git a/artifacts/shex/ghga.shex b/artifacts/shex/ghga.shex index fea00a6d..9fc34057 100644 --- a/artifacts/shex/ghga.shex +++ b/artifacts/shex/ghga.shex @@ -209,35 +209,18 @@ linkml:Nodeidentifier NONLITERAL CLOSED { ( $<Dataset_tes> ( &<InformationContentEntity_tes> ; rdf:type [ <InformationContentEntity> ] ? ; - &<ReleaseStatusMixin_tes> ; - rdf:type [ <ReleaseStatusMixin> ] ? ; - &<DeprecationMixin_tes> ; - rdf:type [ <DeprecationMixin> ] ? ; <title> @linkml:String ; <description> @linkml:String ; <has_file> @<File> + ; <has_publication> @<Publication> * ; - <type> @linkml:String ; - <release_status> @<ReleaseStatusEnum> ? ; - <release_date> @linkml:String ? ; - <deprecated> @linkml:Boolean ? ; - <deprecation_date> @linkml:String ? ; - <replaced_by> @<NamedThing> ? + <status> @<StatusEnum> ? ; + <type> @linkml:String ) ; rdf:type [ <Dataset> ] ) } OR @<AggregateDataset> OR @<AnalysisDataset> OR @<ExperimentDataset> ) -<DeprecationMixin> { - ( $<DeprecationMixin_tes> ( <deprecated> @linkml:Boolean ? ; - <deprecation_date> @linkml:String ? ; - <replaced_by> @<NamedThing> ? - ) ; - rdf:type [ <DeprecationMixin> ] ? - ) -} - <Disease> CLOSED { ( $<Disease_tes> ( &<DiseaseOrPhenotypicFeature_tes> ; rdf:type [ <DiseaseOrPhenotypicFeature> ] ? @@ -346,7 +329,9 @@ linkml:Nodeidentifier NONLITERAL <ethnicity> @linkml:String ? ; <ancestry> @linkml:String ? ; <has_parent> @<Individual> * ; - <has_children> @<Individual> * + <has_children> @<Individual> * ; + <has_disease> @<Disease> * ; + <has_phenotypic_feature> @<PhenotypicFeature> * ) ; rdf:type [ <Individual> ] ) @@ -368,18 +353,12 @@ linkml:Nodeidentifier NONLITERAL CLOSED { ( $<Investigation_tes> ( &<PlannedProcess_tes> ; rdf:type [ <PlannedProcess> ] ? ; - &<ReleaseStatusMixin_tes> ; - rdf:type [ <ReleaseStatusMixin> ] ? ; - &<DeprecationMixin_tes> ; - rdf:type [ <DeprecationMixin> ] ? ; <title> @linkml:String ? ; <description> @linkml:String ? ; <has_publication> @<Publication> ? ; - <release_status> @<ReleaseStatusEnum> ? ; + <status> @<StatusEnum> ? ; <release_date> @linkml:String ? ; - <deprecated> @linkml:Boolean ? ; - <deprecation_date> @linkml:String ? ; - <replaced_by> @<NamedThing> ? + <deprecation_date> @linkml:String ? ) ; rdf:type [ <Investigation> ] ) @@ -438,12 +417,14 @@ linkml:Nodeidentifier NONLITERAL <type> @linkml:String ? ; <has_attribute> @<Attribute> * ; <creation_date> @linkml:String ? ; - <update_date> @linkml:String ? + <update_date> @linkml:String ? ; + <replaces> @<NamedThing> ? ; + <replaced_by> @<NamedThing> ? ) ; rdf:type [ <NamedThing> ] ) } OR @<Agent> OR @<BiologicalQuality> OR @<Committee> OR @<InformationContentEntity> OR @<MaterialEntity> OR @<Person> OR - @<PlannedProcess> OR @<Submission> + @<PlannedProcess> ) <Person> ( @@ -491,7 +472,7 @@ linkml:Nodeidentifier NONLITERAL <Project> CLOSED { ( $<Project_tes> ( &<ResearchActivity_tes> ; rdf:type [ <ResearchActivity> ] ? ; - <has_study> @<Experiment> * ; + <has_study> @<Study> * ; <title> @linkml:String ; <description> @linkml:String ; <has_publication> @<Publication> * ; @@ -528,14 +509,6 @@ linkml:Nodeidentifier NONLITERAL ) } -<ReleaseStatusMixin> { - ( $<ReleaseStatusMixin_tes> ( <release_status> @<ReleaseStatusEnum> ? ; - <release_date> @linkml:String ? - ) ; - rdf:type [ <ReleaseStatusMixin> ] ? - ) -} - <ResearchActivity> ( CLOSED { ( $<ResearchActivity_tes> ( &<PlannedProcess_tes> ; @@ -613,11 +586,7 @@ linkml:Nodeidentifier NONLITERAL } <Submission> CLOSED { - ( $<Submission_tes> ( &<NamedThing_tes> ; - rdf:type [ <NamedThing> ] ? ; - &<SubmissionStatusMixin_tes> ; - rdf:type [ <SubmissionStatusMixin> ] ? ; - <has_study> @<Study> ? ; + ( $<Submission_tes> ( <has_study> @<Study> ? ; <has_project> @<Project> ? ; <has_sample> @<Sample> * ; <has_biospecimen> @<Biospecimen> * ; @@ -626,21 +595,17 @@ linkml:Nodeidentifier NONLITERAL <has_analysis> @<Analysis> * ; <has_file> @<File> * ; <has_data_access_policy> @<DataAccessPolicy> ? ; - <submission_status> @<SubmissionStatusEnum> ? ; - <submission_date> @linkml:String ? + <submission_date> @linkml:String ? ; + <status> @<StatusEnum> ? ; + <creation_date> @linkml:String ? ; + <update_date> @linkml:String ? ; + <replaces> @<NamedThing> ? ; + <replaced_by> @<NamedThing> ? ) ; rdf:type [ <Submission> ] ) } -<SubmissionStatusMixin> { - ( $<SubmissionStatusMixin_tes> ( <submission_status> @<SubmissionStatusEnum> ? ; - <submission_date> @linkml:String ? - ) ; - rdf:type [ <SubmissionStatusMixin> ] ? - ) -} - <Technology> CLOSED { ( $<Technology_tes> ( &<InformationContentEntity_tes> ; rdf:type [ <InformationContentEntity> ] ? diff --git a/artifacts/sql/ghga.sql b/artifacts/sql/ghga.sql index fc9f275b..d777320a 100644 --- a/artifacts/sql/ghga.sql +++ b/artifacts/sql/ghga.sql @@ -1,13 +1,34 @@ -CREATE TYPE release_status_enum AS ENUM ('unreleased', 'released'); +CREATE TYPE status_enum AS ENUM ('in progress', 'submitted', 'unreleased', 'released', 'deprecated'); CREATE TYPE biological_sex_enum AS ENUM ('XX', 'XY', 'none'); CREATE TYPE vital_status_enum AS ENUM ('alive', 'deceased', 'unknown'); CREATE TYPE file_type_enum AS ENUM ('bam', 'complete_genomics', 'cram', 'fasta', 'fastq', 'pacbio_hdf5', 'sff', 'srf', 'vcf'); CREATE TYPE case_control_enum AS ENUM ('control', 'case'); 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', 'other'); -CREATE TYPE submission_status_enum AS ENUM ('in progress', 'submitted'); CREATE TYPE user_role_enum AS ENUM ('data requester', 'data steward'); +CREATE TABLE attribute ( + key TEXT NOT NULL, + key_type TEXT, + value TEXT NOT NULL, + value_type TEXT, + PRIMARY KEY (key, key_type, value, value_type) +); + +CREATE TABLE named_thing ( + id TEXT NOT NULL, + accession TEXT, + type TEXT, + has_attribute TEXT, + creation_date TEXT, + update_date TEXT, + replaces TEXT, + replaced_by TEXT, + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) +); + CREATE TABLE agent ( id TEXT NOT NULL, accession TEXT, @@ -15,27 +36,69 @@ CREATE TABLE agent ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, name TEXT, description TEXT, - PRIMARY KEY (id) + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); -CREATE TABLE anatomical_entity ( +CREATE TABLE aggregate_dataset ( id TEXT NOT NULL, accession TEXT, - type TEXT, has_attribute TEXT, creation_date TEXT, update_date TEXT, - PRIMARY KEY (id) + replaces TEXT, + replaced_by TEXT, + title TEXT NOT NULL, + description TEXT NOT NULL, + has_file TEXT NOT NULL, + has_publication TEXT, + status status_enum, + type TEXT NOT NULL, + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); -CREATE TABLE attribute ( - key TEXT NOT NULL, - key_type TEXT, - value TEXT NOT NULL, - value_type TEXT, - PRIMARY KEY (key, key_type, value, value_type) +CREATE TABLE analysis_dataset ( + id TEXT NOT NULL, + accession TEXT, + has_attribute TEXT, + creation_date TEXT, + update_date TEXT, + replaces TEXT, + replaced_by TEXT, + title TEXT NOT NULL, + description TEXT NOT NULL, + has_file TEXT NOT NULL, + has_publication TEXT, + status status_enum, + type TEXT NOT NULL, + has_data_access_policy TEXT NOT NULL, + has_study TEXT NOT NULL, + has_analysis TEXT, + has_experiment TEXT NOT NULL, + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) +); + +CREATE TABLE anatomical_entity ( + id TEXT NOT NULL, + accession TEXT, + type TEXT, + has_attribute TEXT, + creation_date TEXT, + update_date TEXT, + replaces TEXT, + replaced_by TEXT, + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE biological_quality ( @@ -45,7 +108,11 @@ CREATE TABLE biological_quality ( has_attribute TEXT, creation_date TEXT, update_date TEXT, - PRIMARY KEY (id) + replaces TEXT, + replaced_by TEXT, + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE cell_line ( @@ -55,7 +122,11 @@ CREATE TABLE cell_line ( has_attribute TEXT, creation_date TEXT, update_date TEXT, - PRIMARY KEY (id) + replaces TEXT, + replaced_by TEXT, + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE cohort ( @@ -65,9 +136,13 @@ CREATE TABLE cohort ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, name TEXT, has_member TEXT, - PRIMARY KEY (id) + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE committee ( @@ -77,8 +152,12 @@ CREATE TABLE committee ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, name TEXT, - PRIMARY KEY (id) + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE data_transformation ( @@ -87,10 +166,30 @@ CREATE TABLE data_transformation ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, id TEXT NOT NULL, title TEXT, description TEXT, - PRIMARY KEY (id) + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) +); + +CREATE TABLE disease ( + id TEXT NOT NULL, + accession TEXT, + type TEXT, + has_attribute TEXT, + creation_date TEXT, + update_date TEXT, + replaces TEXT, + replaced_by TEXT, + name TEXT, + description TEXT, + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE disease_or_phenotypic_feature ( @@ -100,9 +199,13 @@ CREATE TABLE disease_or_phenotypic_feature ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, name TEXT, description TEXT, - PRIMARY KEY (id) + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE donor ( @@ -112,6 +215,8 @@ CREATE TABLE donor ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, given_name TEXT, family_name TEXT, additional_name TEXT, @@ -125,7 +230,33 @@ CREATE TABLE donor ( ancestry TEXT, has_parent TEXT, has_children TEXT, - PRIMARY KEY (id) + has_disease TEXT, + has_phenotypic_feature TEXT, + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) +); + +CREATE TABLE experiment_dataset ( + id TEXT NOT NULL, + accession TEXT, + has_attribute TEXT, + creation_date TEXT, + update_date TEXT, + replaces TEXT, + replaced_by TEXT, + title TEXT NOT NULL, + description TEXT NOT NULL, + has_file TEXT NOT NULL, + has_publication TEXT, + status status_enum, + type TEXT NOT NULL, + has_data_access_policy TEXT NOT NULL, + has_study TEXT NOT NULL, + has_experiment TEXT NOT NULL, + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE file ( @@ -134,6 +265,8 @@ CREATE TABLE file ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, name TEXT NOT NULL, format TEXT, size TEXT, @@ -141,7 +274,9 @@ CREATE TABLE file ( file_index TEXT, category TEXT, type file_type_enum, - PRIMARY KEY (id) + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE individual ( @@ -151,6 +286,8 @@ CREATE TABLE individual ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, given_name TEXT, family_name TEXT, additional_name TEXT, @@ -164,7 +301,11 @@ CREATE TABLE individual ( ancestry TEXT, has_parent TEXT, has_children TEXT, - PRIMARY KEY (id) + has_disease TEXT, + has_phenotypic_feature TEXT, + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE information_content_entity ( @@ -174,7 +315,11 @@ CREATE TABLE information_content_entity ( has_attribute TEXT, creation_date TEXT, update_date TEXT, - PRIMARY KEY (id) + replaces TEXT, + replaced_by TEXT, + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE library_preparation_protocol ( @@ -182,6 +327,8 @@ CREATE TABLE library_preparation_protocol ( accession TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, url TEXT, type TEXT, library_name TEXT NOT NULL, @@ -200,7 +347,9 @@ CREATE TABLE library_preparation_protocol ( name TEXT NOT NULL, description TEXT NOT NULL, has_attribute TEXT, - PRIMARY KEY (id) + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE material_entity ( @@ -210,7 +359,11 @@ CREATE TABLE material_entity ( has_attribute TEXT, creation_date TEXT, update_date TEXT, - PRIMARY KEY (id) + replaces TEXT, + replaced_by TEXT, + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE member ( @@ -220,36 +373,50 @@ CREATE TABLE member ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, given_name TEXT, family_name TEXT, additional_name TEXT, email TEXT NOT NULL, telephone TEXT NOT NULL, organization TEXT NOT NULL, - PRIMARY KEY (id) + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); -CREATE TABLE named_thing ( +CREATE TABLE person ( id TEXT NOT NULL, accession TEXT, type TEXT, has_attribute TEXT, creation_date TEXT, update_date TEXT, - PRIMARY KEY (id) + replaces TEXT, + replaced_by TEXT, + given_name TEXT, + family_name TEXT, + additional_name TEXT, + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); -CREATE TABLE person ( +CREATE TABLE phenotypic_feature ( id TEXT NOT NULL, accession TEXT, type TEXT, has_attribute TEXT, creation_date TEXT, update_date TEXT, - given_name TEXT, - family_name TEXT, - additional_name TEXT, - PRIMARY KEY (id) + replaces TEXT, + replaced_by TEXT, + name TEXT, + description TEXT, + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE planned_process ( @@ -259,7 +426,11 @@ CREATE TABLE planned_process ( has_attribute TEXT, creation_date TEXT, update_date TEXT, - PRIMARY KEY (id) + replaces TEXT, + replaced_by TEXT, + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE population ( @@ -269,8 +440,12 @@ CREATE TABLE population ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, name TEXT, - PRIMARY KEY (id) + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE project ( @@ -279,12 +454,16 @@ CREATE TABLE project ( type TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, has_study TEXT, title TEXT NOT NULL, description TEXT NOT NULL, has_publication TEXT, has_attribute TEXT, - PRIMARY KEY (id) + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE protocol ( @@ -292,12 +471,16 @@ CREATE TABLE protocol ( accession TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, name TEXT, description TEXT, url TEXT, type TEXT, has_attribute TEXT, - PRIMARY KEY (id) + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE publication ( @@ -306,10 +489,14 @@ CREATE TABLE publication ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, title TEXT, abstract TEXT, id TEXT NOT NULL, - PRIMARY KEY (id) + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE sequencing_protocol ( @@ -317,6 +504,8 @@ CREATE TABLE sequencing_protocol ( accession TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, url TEXT, type TEXT, sequencing_center TEXT NOT NULL, @@ -339,7 +528,9 @@ CREATE TABLE sequencing_protocol ( name TEXT, description TEXT, has_attribute TEXT, - PRIMARY KEY (id) + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE technology ( @@ -349,7 +540,11 @@ CREATE TABLE technology ( has_attribute TEXT, creation_date TEXT, update_date TEXT, - PRIMARY KEY (id) + replaces TEXT, + replaced_by TEXT, + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE "user" ( @@ -359,12 +554,16 @@ CREATE TABLE "user" ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, given_name TEXT, family_name TEXT, additional_name TEXT, email TEXT, role user_role_enum, - PRIMARY KEY (id) + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE workflow ( @@ -374,7 +573,11 @@ CREATE TABLE workflow ( has_attribute TEXT, creation_date TEXT, update_date TEXT, - PRIMARY KEY (id) + replaces TEXT, + replaced_by TEXT, + PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE workflow_step ( @@ -384,51 +587,18 @@ CREATE TABLE workflow_step ( has_attribute TEXT, creation_date TEXT, update_date TEXT, - PRIMARY KEY (id) -); - -CREATE TABLE aggregate_dataset ( - id TEXT NOT NULL, - accession TEXT, - has_attribute TEXT, - creation_date TEXT, - update_date TEXT, - title TEXT NOT NULL, - description TEXT NOT NULL, - has_file TEXT NOT NULL, - has_publication TEXT, - type TEXT NOT NULL, - release_status release_status_enum, - release_date TEXT, - deprecated BOOLEAN, - deprecation_date TEXT, + replaces TEXT, replaced_by TEXT, PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); -CREATE TABLE analysis_dataset ( - id TEXT NOT NULL, - accession TEXT, - has_attribute TEXT, - creation_date TEXT, - update_date TEXT, - title TEXT NOT NULL, - description TEXT NOT NULL, - has_file TEXT NOT NULL, - has_publication TEXT, - type TEXT NOT NULL, - release_status release_status_enum, - release_date TEXT, - deprecated BOOLEAN, - deprecation_date TEXT, - replaced_by TEXT, - has_data_access_policy TEXT NOT NULL, - has_study TEXT NOT NULL, - has_analysis TEXT, - has_experiment TEXT NOT NULL, - PRIMARY KEY (id), - FOREIGN KEY(replaced_by) REFERENCES named_thing (id) +CREATE TABLE named_thing_xref ( + backref_id TEXT, + xref TEXT, + PRIMARY KEY (backref_id, xref), + FOREIGN KEY(backref_id) REFERENCES named_thing (id) ); CREATE TABLE biospecimen ( @@ -438,11 +608,17 @@ CREATE TABLE biospecimen ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, name TEXT, description TEXT, has_individual TEXT, has_anatomical_entity TEXT, + has_disease TEXT, + has_phenotypic_feature TEXT, PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id), FOREIGN KEY(has_individual) REFERENCES individual (id), FOREIGN KEY(has_anatomical_entity) REFERENCES anatomical_entity (id) ); @@ -454,35 +630,37 @@ CREATE TABLE data_access_committee ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, name TEXT NOT NULL, description TEXT, main_contact TEXT, has_member TEXT, PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id), FOREIGN KEY(main_contact) REFERENCES member (id) ); -CREATE TABLE experiment_dataset ( +CREATE TABLE dataset ( id TEXT NOT NULL, accession TEXT, has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, title TEXT NOT NULL, description TEXT NOT NULL, has_file TEXT NOT NULL, has_publication TEXT, + status status_enum, type TEXT NOT NULL, - release_status release_status_enum, - release_date TEXT, - deprecated BOOLEAN, - deprecation_date TEXT, - replaced_by TEXT, - has_data_access_policy TEXT NOT NULL, - has_study TEXT NOT NULL, - has_experiment TEXT NOT NULL, + aggregate_dataset_id TEXT, PRIMARY KEY (id), - FOREIGN KEY(replaced_by) REFERENCES named_thing (id) + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id), + FOREIGN KEY(aggregate_dataset_id) REFERENCES aggregate_dataset (id) ); CREATE TABLE family ( @@ -492,10 +670,14 @@ CREATE TABLE family ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, name TEXT, has_member TEXT, has_proband TEXT, PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id), FOREIGN KEY(has_proband) REFERENCES individual (id) ); @@ -506,17 +688,18 @@ CREATE TABLE investigation ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, title TEXT, description TEXT, has_publication TEXT, - release_status release_status_enum, + status status_enum, release_date TEXT, - deprecated BOOLEAN, deprecation_date TEXT, - replaced_by TEXT, PRIMARY KEY (id), - FOREIGN KEY(has_publication) REFERENCES publication (id), - FOREIGN KEY(replaced_by) REFERENCES named_thing (id) + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id), + FOREIGN KEY(has_publication) REFERENCES publication (id) ); CREATE TABLE research_activity ( @@ -526,10 +709,14 @@ CREATE TABLE research_activity ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, title TEXT, description TEXT, has_publication TEXT, PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id), FOREIGN KEY(has_publication) REFERENCES publication (id) ); @@ -538,11 +725,11 @@ CREATE TABLE study ( accession TEXT, creation_date TEXT, update_date TEXT, - release_status release_status_enum, + replaces TEXT, + replaced_by TEXT, + status status_enum, release_date TEXT, - deprecated BOOLEAN, deprecation_date TEXT, - replaced_by TEXT, has_experiment TEXT, has_analysis TEXT, has_project TEXT, @@ -552,6 +739,7 @@ CREATE TABLE study ( has_publication TEXT, has_attribute TEXT, PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), FOREIGN KEY(replaced_by) REFERENCES named_thing (id), FOREIGN KEY(has_project) REFERENCES project (id) ); @@ -571,6 +759,20 @@ CREATE TABLE agent_xref ( FOREIGN KEY(backref_id) REFERENCES agent (id) ); +CREATE TABLE aggregate_dataset_xref ( + backref_id TEXT, + xref TEXT, + PRIMARY KEY (backref_id, xref), + FOREIGN KEY(backref_id) REFERENCES aggregate_dataset (id) +); + +CREATE TABLE analysis_dataset_xref ( + backref_id TEXT, + xref TEXT, + PRIMARY KEY (backref_id, xref), + FOREIGN KEY(backref_id) REFERENCES analysis_dataset (id) +); + CREATE TABLE anatomical_entity_xref ( backref_id TEXT, xref TEXT, @@ -613,6 +815,13 @@ CREATE TABLE data_transformation_xref ( FOREIGN KEY(backref_id) REFERENCES data_transformation (id) ); +CREATE TABLE disease_xref ( + backref_id TEXT, + xref TEXT, + PRIMARY KEY (backref_id, xref), + FOREIGN KEY(backref_id) REFERENCES disease (id) +); + CREATE TABLE disease_or_phenotypic_feature_xref ( backref_id TEXT, xref TEXT, @@ -627,6 +836,13 @@ CREATE TABLE donor_xref ( FOREIGN KEY(backref_id) REFERENCES donor (id) ); +CREATE TABLE experiment_dataset_xref ( + backref_id TEXT, + xref TEXT, + PRIMARY KEY (backref_id, xref), + FOREIGN KEY(backref_id) REFERENCES experiment_dataset (id) +); + CREATE TABLE file_xref ( backref_id TEXT, xref TEXT, @@ -669,18 +885,18 @@ CREATE TABLE member_xref ( FOREIGN KEY(backref_id) REFERENCES member (id) ); -CREATE TABLE named_thing_xref ( +CREATE TABLE person_xref ( backref_id TEXT, xref TEXT, PRIMARY KEY (backref_id, xref), - FOREIGN KEY(backref_id) REFERENCES named_thing (id) + FOREIGN KEY(backref_id) REFERENCES person (id) ); -CREATE TABLE person_xref ( +CREATE TABLE phenotypic_feature_xref ( backref_id TEXT, xref TEXT, PRIMARY KEY (backref_id, xref), - FOREIGN KEY(backref_id) REFERENCES person (id) + FOREIGN KEY(backref_id) REFERENCES phenotypic_feature (id) ); CREATE TABLE planned_process_xref ( @@ -759,6 +975,8 @@ CREATE TABLE analysis ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, id TEXT NOT NULL, title TEXT, description TEXT, @@ -767,6 +985,8 @@ CREATE TABLE analysis ( has_workflow TEXT, has_output TEXT, PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id), FOREIGN KEY(has_study) REFERENCES study (id), FOREIGN KEY(has_workflow) REFERENCES workflow (id) ); @@ -778,63 +998,17 @@ CREATE TABLE data_access_policy ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, name TEXT, description TEXT NOT NULL, policy_text TEXT NOT NULL, policy_url TEXT, has_data_access_committee TEXT NOT NULL, PRIMARY KEY (id), - FOREIGN KEY(has_data_access_committee) REFERENCES data_access_committee (id) -); - -CREATE TABLE dataset ( - id TEXT NOT NULL, - accession TEXT, - has_attribute TEXT, - creation_date TEXT, - update_date TEXT, - title TEXT NOT NULL, - description TEXT NOT NULL, - has_file TEXT NOT NULL, - has_publication TEXT, - type TEXT NOT NULL, - release_status release_status_enum, - release_date TEXT, - deprecated BOOLEAN, - deprecation_date TEXT, - replaced_by TEXT, - aggregate_dataset_id TEXT, - PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), FOREIGN KEY(replaced_by) REFERENCES named_thing (id), - FOREIGN KEY(aggregate_dataset_id) REFERENCES aggregate_dataset (id) -); - -CREATE TABLE disease ( - id TEXT NOT NULL, - accession TEXT, - type TEXT, - has_attribute TEXT, - creation_date TEXT, - update_date TEXT, - name TEXT, - description TEXT, - biospecimen_id TEXT, - PRIMARY KEY (id), - FOREIGN KEY(biospecimen_id) REFERENCES biospecimen (id) -); - -CREATE TABLE phenotypic_feature ( - id TEXT NOT NULL, - accession TEXT, - type TEXT, - has_attribute TEXT, - creation_date TEXT, - update_date TEXT, - name TEXT, - description TEXT, - biospecimen_id TEXT, - PRIMARY KEY (id), - FOREIGN KEY(biospecimen_id) REFERENCES biospecimen (id) + FOREIGN KEY(has_data_access_committee) REFERENCES data_access_committee (id) ); CREATE TABLE sample ( @@ -843,6 +1017,8 @@ CREATE TABLE sample ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, name TEXT NOT NULL, description TEXT NOT NULL, vital_status_at_sampling TEXT, @@ -853,24 +1029,12 @@ CREATE TABLE sample ( has_biospecimen TEXT, type case_control_enum, PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id), FOREIGN KEY(has_individual) REFERENCES individual (id), FOREIGN KEY(has_biospecimen) REFERENCES biospecimen (id) ); -CREATE TABLE aggregate_dataset_xref ( - backref_id TEXT, - xref TEXT, - PRIMARY KEY (backref_id, xref), - FOREIGN KEY(backref_id) REFERENCES aggregate_dataset (id) -); - -CREATE TABLE analysis_dataset_xref ( - backref_id TEXT, - xref TEXT, - PRIMARY KEY (backref_id, xref), - FOREIGN KEY(backref_id) REFERENCES analysis_dataset (id) -); - CREATE TABLE biospecimen_xref ( backref_id TEXT, xref TEXT, @@ -885,11 +1049,11 @@ CREATE TABLE data_access_committee_xref ( FOREIGN KEY(backref_id) REFERENCES data_access_committee (id) ); -CREATE TABLE experiment_dataset_xref ( +CREATE TABLE dataset_xref ( backref_id TEXT, xref TEXT, PRIMARY KEY (backref_id, xref), - FOREIGN KEY(backref_id) REFERENCES experiment_dataset (id) + FOREIGN KEY(backref_id) REFERENCES dataset (id) ); CREATE TABLE family_xref ( @@ -934,6 +1098,8 @@ CREATE TABLE analysis_process ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, title TEXT, has_input TEXT, has_workflow_step TEXT, @@ -941,6 +1107,8 @@ CREATE TABLE analysis_process ( has_output TEXT, analysis_id TEXT, PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id), FOREIGN KEY(has_workflow_step) REFERENCES workflow_step (id), FOREIGN KEY(has_agent) REFERENCES agent (id), FOREIGN KEY(analysis_id) REFERENCES analysis (id) @@ -961,12 +1129,12 @@ CREATE TABLE experiment ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, has_publication TEXT, - release_status release_status_enum, + status status_enum, release_date TEXT, - deprecated BOOLEAN, deprecation_date TEXT, - replaced_by TEXT, biological_replicates TEXT, technical_replicates TEXT, experimental_replicates TEXT, @@ -977,8 +1145,9 @@ CREATE TABLE experiment ( title TEXT NOT NULL, description TEXT NOT NULL, PRIMARY KEY (id), - FOREIGN KEY(has_publication) REFERENCES publication (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), FOREIGN KEY(replaced_by) REFERENCES named_thing (id), + FOREIGN KEY(has_publication) REFERENCES publication (id), FOREIGN KEY(has_study) REFERENCES study (id), FOREIGN KEY(has_sample) REFERENCES sample (id), FOREIGN KEY(has_technology) REFERENCES technology (id) @@ -986,11 +1155,6 @@ CREATE TABLE experiment ( CREATE TABLE submission ( id TEXT NOT NULL, - accession TEXT, - type TEXT, - has_attribute TEXT, - creation_date TEXT, - update_date TEXT, has_study TEXT, has_project TEXT, has_sample TEXT, @@ -1000,12 +1164,18 @@ CREATE TABLE submission ( has_analysis TEXT, has_file TEXT, has_data_access_policy TEXT, - submission_status submission_status_enum, submission_date TEXT, + status status_enum, + creation_date TEXT, + update_date TEXT, + replaces TEXT, + replaced_by TEXT, PRIMARY KEY (id), FOREIGN KEY(has_study) REFERENCES study (id), FOREIGN KEY(has_project) REFERENCES project (id), - FOREIGN KEY(has_data_access_policy) REFERENCES data_access_policy (id) + FOREIGN KEY(has_data_access_policy) REFERENCES data_access_policy (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id) ); CREATE TABLE analysis_xref ( @@ -1022,27 +1192,6 @@ CREATE TABLE data_access_policy_xref ( FOREIGN KEY(backref_id) REFERENCES data_access_policy (id) ); -CREATE TABLE dataset_xref ( - backref_id TEXT, - xref TEXT, - PRIMARY KEY (backref_id, xref), - FOREIGN KEY(backref_id) REFERENCES dataset (id) -); - -CREATE TABLE disease_xref ( - backref_id TEXT, - xref TEXT, - PRIMARY KEY (backref_id, xref), - FOREIGN KEY(backref_id) REFERENCES disease (id) -); - -CREATE TABLE phenotypic_feature_xref ( - backref_id TEXT, - xref TEXT, - PRIMARY KEY (backref_id, xref), - FOREIGN KEY(backref_id) REFERENCES phenotypic_feature (id) -); - CREATE TABLE sample_xref ( backref_id TEXT, xref TEXT, @@ -1057,6 +1206,8 @@ CREATE TABLE experiment_process ( has_attribute TEXT, creation_date TEXT, update_date TEXT, + replaces TEXT, + replaced_by TEXT, title TEXT, has_input TEXT, has_protocol TEXT, @@ -1064,6 +1215,8 @@ CREATE TABLE experiment_process ( has_output TEXT, experiment_id TEXT, PRIMARY KEY (id), + FOREIGN KEY(replaces) REFERENCES named_thing (id), + FOREIGN KEY(replaced_by) REFERENCES named_thing (id), FOREIGN KEY(has_input) REFERENCES sample (id), FOREIGN KEY(has_protocol) REFERENCES protocol (id), FOREIGN KEY(has_agent) REFERENCES agent (id), @@ -1085,13 +1238,6 @@ CREATE TABLE experiment_xref ( FOREIGN KEY(backref_id) REFERENCES experiment (id) ); -CREATE TABLE submission_xref ( - backref_id TEXT, - xref TEXT, - PRIMARY KEY (backref_id, xref), - FOREIGN KEY(backref_id) REFERENCES submission (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 83a93702..2a2c9962 100644 --- a/artifacts/sql/ghga_models.py +++ b/artifacts/sql/ghga_models.py @@ -27,6 +27,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('name', Text), Column('description', Text), ) @@ -36,16 +38,14 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('title', Text), Column('description', Text), Column('has_file', Text), Column('has_publication', Text), + Column('status', Text), Column('type', Text), - Column('release_status', Text), - Column('release_date', Text), - Column('deprecated', Text), - Column('deprecation_date', Text), - Column('replaced_by', Text, ForeignKey('named_thing.id')), ) tbl_analysis = Table('analysis', metadata, Column('accession', Text), @@ -53,6 +53,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('id', Text, primary_key=True), Column('title', Text), Column('description', Text), @@ -67,16 +69,14 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('title', Text), Column('description', Text), Column('has_file', Text), Column('has_publication', Text), + Column('status', Text), Column('type', Text), - Column('release_status', Text), - Column('release_date', Text), - Column('deprecated', Text), - Column('deprecation_date', Text), - Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('has_data_access_policy', Text), Column('has_study', Text), Column('has_analysis', Text), @@ -89,6 +89,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('title', Text), Column('has_input', Text), Column('has_workflow_step', Text, ForeignKey('workflow_step.id')), @@ -103,6 +105,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), ) tbl_attribute = Table('attribute', metadata, Column('key', Text, primary_key=True), @@ -117,6 +121,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), ) tbl_biospecimen = Table('biospecimen', metadata, Column('id', Text, primary_key=True), @@ -125,10 +131,14 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('name', Text), Column('description', Text), Column('has_individual', Text, ForeignKey('individual.id')), Column('has_anatomical_entity', Text, ForeignKey('anatomical_entity.id')), + Column('has_disease', Text), + Column('has_phenotypic_feature', Text), ) tbl_cell_line = Table('cell_line', metadata, Column('id', Text, primary_key=True), @@ -137,6 +147,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), ) tbl_cohort = Table('cohort', metadata, Column('id', Text, primary_key=True), @@ -145,6 +157,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('name', Text), Column('has_member', Text), ) @@ -155,6 +169,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('name', Text), ) tbl_data_access_committee = Table('data_access_committee', metadata, @@ -164,6 +180,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('name', Text), Column('description', Text), Column('main_contact', Text, ForeignKey('member.id')), @@ -176,6 +194,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('name', Text), Column('description', Text), Column('policy_text', Text), @@ -188,6 +208,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('id', Text, primary_key=True), Column('title', Text), Column('description', Text), @@ -203,16 +225,14 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('title', Text), Column('description', Text), Column('has_file', Text), Column('has_publication', Text), + Column('status', Text), Column('type', Text), - Column('release_status', Text), - Column('release_date', Text), - Column('deprecated', Text), - Column('deprecation_date', Text), - Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('aggregate_dataset_id', Text, ForeignKey('aggregate_dataset.id')), ) tbl_disease = Table('disease', metadata, @@ -222,9 +242,10 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('name', Text), Column('description', Text), - Column('biospecimen_id', Text, ForeignKey('biospecimen.id')), ) tbl_disease_or_phenotypic_feature = Table('disease_or_phenotypic_feature', metadata, Column('id', Text, primary_key=True), @@ -233,6 +254,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('name', Text), Column('description', Text), ) @@ -243,6 +266,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('given_name', Text), Column('family_name', Text), Column('additional_name', Text), @@ -256,6 +281,8 @@ Column('ancestry', Text), Column('has_parent', Text), Column('has_children', Text), + Column('has_disease', Text), + Column('has_phenotypic_feature', Text), ) tbl_experiment = Table('experiment', metadata, Column('id', Text, primary_key=True), @@ -264,12 +291,12 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('has_publication', Text, ForeignKey('publication.id')), - Column('release_status', Text), + Column('status', Text), Column('release_date', Text), - Column('deprecated', Text), Column('deprecation_date', Text), - Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('biological_replicates', Text), Column('technical_replicates', Text), Column('experimental_replicates', Text), @@ -286,16 +313,14 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('title', Text), Column('description', Text), Column('has_file', Text), Column('has_publication', Text), + Column('status', Text), Column('type', Text), - Column('release_status', Text), - Column('release_date', Text), - Column('deprecated', Text), - Column('deprecation_date', Text), - Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('has_data_access_policy', Text), Column('has_study', Text), Column('has_experiment', Text), @@ -307,6 +332,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('title', Text), Column('has_input', Text, ForeignKey('sample.id')), Column('has_protocol', Text, ForeignKey('protocol.id')), @@ -321,6 +348,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('name', Text), Column('has_member', Text), Column('has_proband', Text, ForeignKey('individual.id')), @@ -331,6 +360,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('name', Text), Column('format', Text), Column('size', Text), @@ -346,6 +377,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('given_name', Text), Column('family_name', Text), Column('additional_name', Text), @@ -359,6 +392,8 @@ Column('ancestry', Text), Column('has_parent', Text), Column('has_children', Text), + Column('has_disease', Text), + Column('has_phenotypic_feature', Text), ) tbl_information_content_entity = Table('information_content_entity', metadata, Column('id', Text, primary_key=True), @@ -367,6 +402,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), ) tbl_investigation = Table('investigation', metadata, Column('id', Text, primary_key=True), @@ -375,20 +412,22 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('title', Text), Column('description', Text), Column('has_publication', Text, ForeignKey('publication.id')), - Column('release_status', Text), + Column('status', Text), Column('release_date', Text), - Column('deprecated', Text), Column('deprecation_date', Text), - Column('replaced_by', Text, ForeignKey('named_thing.id')), ) tbl_library_preparation_protocol = Table('library_preparation_protocol', metadata, Column('id', Text, primary_key=True), Column('accession', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('url', Text), Column('type', Text), Column('library_name', Text), @@ -415,6 +454,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), ) tbl_member = Table('member', metadata, Column('id', Text, primary_key=True), @@ -423,6 +464,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('given_name', Text), Column('family_name', Text), Column('additional_name', Text), @@ -437,6 +480,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), ) tbl_person = Table('person', metadata, Column('id', Text, primary_key=True), @@ -445,6 +490,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('given_name', Text), Column('family_name', Text), Column('additional_name', Text), @@ -456,9 +503,10 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('name', Text), Column('description', Text), - Column('biospecimen_id', Text, ForeignKey('biospecimen.id')), ) tbl_planned_process = Table('planned_process', metadata, Column('id', Text, primary_key=True), @@ -467,6 +515,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), ) tbl_population = Table('population', metadata, Column('id', Text, primary_key=True), @@ -475,6 +525,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('name', Text), ) tbl_project = Table('project', metadata, @@ -483,6 +535,8 @@ Column('type', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('has_study', Text), Column('title', Text), Column('description', Text), @@ -494,6 +548,8 @@ Column('accession', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('name', Text), Column('description', Text), Column('url', Text), @@ -506,6 +562,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('title', Text), Column('abstract', Text), Column('id', Text, primary_key=True), @@ -517,6 +575,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('title', Text), Column('description', Text), Column('has_publication', Text, ForeignKey('publication.id')), @@ -527,6 +587,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('name', Text), Column('description', Text), Column('vital_status_at_sampling', Text), @@ -542,6 +604,8 @@ Column('accession', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('url', Text), Column('type', Text), Column('sequencing_center', Text), @@ -570,11 +634,11 @@ Column('accession', Text), Column('creation_date', Text), Column('update_date', Text), - Column('release_status', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), + Column('status', Text), Column('release_date', Text), - Column('deprecated', Text), Column('deprecation_date', Text), - Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('has_experiment', Text), Column('has_analysis', Text), Column('has_project', Text, ForeignKey('project.id')), @@ -586,11 +650,6 @@ ) tbl_submission = Table('submission', metadata, Column('id', Text, primary_key=True), - Column('accession', Text), - Column('type', Text), - Column('has_attribute', Text), - Column('creation_date', Text), - Column('update_date', Text), Column('has_study', Text, ForeignKey('study.id')), Column('has_project', Text, ForeignKey('project.id')), Column('has_sample', Text), @@ -600,8 +659,12 @@ Column('has_analysis', Text), Column('has_file', Text), Column('has_data_access_policy', Text, ForeignKey('data_access_policy.id')), - Column('submission_status', Text), Column('submission_date', Text), + Column('status', Text), + Column('creation_date', Text), + Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), ) tbl_technology = Table('technology', metadata, Column('id', Text, primary_key=True), @@ -610,6 +673,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), ) tbl_user = Table('user', metadata, Column('id', Text, primary_key=True), @@ -618,6 +683,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), Column('given_name', Text), Column('family_name', Text), Column('additional_name', Text), @@ -631,6 +698,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), ) tbl_workflow_parameter = Table('workflow_parameter', metadata, Column('key', Text, primary_key=True), @@ -644,6 +713,8 @@ Column('has_attribute', Text), Column('creation_date', Text), Column('update_date', Text), + Column('replaces', Text, ForeignKey('named_thing.id')), + Column('replaced_by', Text, ForeignKey('named_thing.id')), ) tbl_agent_xref = Table('agent_xref', metadata, Column('backref_id', Text, ForeignKey('agent.id'), primary_key=True), @@ -813,10 +884,6 @@ Column('backref_id', Text, ForeignKey('study.id'), primary_key=True), Column('affiliation', Text, primary_key=True), ) -tbl_submission_xref = Table('submission_xref', metadata, - Column('backref_id', Text, ForeignKey('submission.id'), primary_key=True), - Column('xref', Text, primary_key=True), -) tbl_technology_xref = Table('technology_xref', metadata, Column('backref_id', Text, ForeignKey('technology.id'), primary_key=True), Column('xref', Text, primary_key=True), @@ -862,18 +929,6 @@ mapper_registry.map_imperatively(BiologicalQuality, tbl_biological_quality, properties={ }) mapper_registry.map_imperatively(Biospecimen, tbl_biospecimen, properties={ - - 'has_disease': - relationship(Disease, - foreign_keys=tbl_disease.columns["biospecimen_id"], - backref='Biospecimen'), - - - 'has_phenotypic_feature': - relationship(PhenotypicFeature, - foreign_keys=tbl_phenotypic_feature.columns["biospecimen_id"], - backref='Biospecimen'), - }) mapper_registry.map_imperatively(CellLine, tbl_cell_line, properties={ }) From cecc0c026e03205f4a968730f65a381063878c17 Mon Sep 17 00:00:00 2001 From: Deepak <deepakunni3@users.noreply.github.com> Date: Fri, 26 Nov 2021 09:36:27 +0100 Subject: [PATCH 16/16] Preparation for release (#30) * Update README * Update requirements.txt * Update changelog.md --- README.md | 29 ++++++++++++----------------- artifacts/owl/README.md | 3 ++- artifacts/pydantic/README.md | 3 +++ artifacts/python/README.md | 2 +- artifacts/rdf/README.md | 2 +- artifacts/sql/README.md | 6 ++++++ changelog.md | 9 +++++++++ requirements.txt | 2 +- 8 files changed, 35 insertions(+), 21 deletions(-) create mode 100644 artifacts/pydantic/README.md create mode 100644 artifacts/sql/README.md diff --git a/README.md b/README.md index da21a81b..69130fa4 100644 --- a/README.md +++ b/README.md @@ -23,29 +23,24 @@ found in `src/schema/`. Using the YAML, and the [LinkML framework](https://github.com/linkml/linkml), we autogenerate vendor/technology specific artifacts like: -- JSON Schema +- [JSON Schema](artifacts/jsonschema) - JSON Schema definitions of all classes and properties -- Python Dataclasses +- [Python Dataclasses](artifacts/python) - Python Dataclasses for each defined class -- SQL DDL +- [Pydantic models](artifacts/pydantic) + - Pydantic models for each defined class +- [SQL DDL](artifacts/sql) - SQL Data Definition Language to create SQL tables for all classes -- SQLAlchemy classes - - SQLAlchemy classes to map SQL tables and columns to each defined class -and slot, respectively -- GraphQL +- [SQLAlchemy classes](artifacts/sql) + - SQLAlchemy classes to map SQL tables and columns to each defined class and slot, respectively +- [GraphQL](artifacts/graphql) - GraphQL types for each defined class -- ShEx +- [ShEx](artifacts/shex) - Shape Expressions for each defined class -- RDF +- [RDF](artifacts/rdf) - The model represented as RDF Turtle (TTL) -- OWL +- [OWL](artifacts/owl) - The model in Web Ontology Language (OWL), serialized as RDF Turtle (TTL) -- CSV +- [CSV](artifacts/csv) - A CSV summary of the model and its classes - -Artifacts that are currently a work in progress: -- Protobuf -- Pydantic classes - - diff --git a/artifacts/owl/README.md b/artifacts/owl/README.md index f2c8d31e..36975dfc 100644 --- a/artifacts/owl/README.md +++ b/artifacts/owl/README.md @@ -1,5 +1,6 @@ # OWL -This folder contains autogenerated [OWL](https://www.w3.org/TR/2012/REC-owl2-overview-20121211/) representation of the GHGA Metadata Schema. +This folder contains autogenerated [OWL](https://www.w3.org/TR/2012/REC-owl2-overview-20121211/) +representation of the GHGA Metadata Schema. **Note:** The OWL is serialized as RDF Turtle instead of XML. diff --git a/artifacts/pydantic/README.md b/artifacts/pydantic/README.md new file mode 100644 index 00000000..bdb34a1d --- /dev/null +++ b/artifacts/pydantic/README.md @@ -0,0 +1,3 @@ +# Pydantic classes + +This folder contains Pydantic classes autogenerated from the GHGA Metadata Schema. diff --git a/artifacts/python/README.md b/artifacts/python/README.md index 51474baa..2c890358 100644 --- a/artifacts/python/README.md +++ b/artifacts/python/README.md @@ -1,3 +1,3 @@ # Python -This folder contains autogenerated [RDF] representation of the GHGA Metadata Schema. +This folder contains Python dataclasses autogenerated from the GHGA Metadata Schema. diff --git a/artifacts/rdf/README.md b/artifacts/rdf/README.md index 49cd41b4..8427dcdb 100644 --- a/artifacts/rdf/README.md +++ b/artifacts/rdf/README.md @@ -1,3 +1,3 @@ # RDF -This folder contains autogenerated [RDF] representation of the GHGA Metadata Schema. +This folder contains autogenerated [RDF](https://www.w3.org/RDF/) representation of the GHGA Metadata Schema. diff --git a/artifacts/sql/README.md b/artifacts/sql/README.md new file mode 100644 index 00000000..80f7b417 --- /dev/null +++ b/artifacts/sql/README.md @@ -0,0 +1,6 @@ +# SQL + +This folder contains SQL DDL and, its corresponding SQLAlchemy models, autogenerated +from the GHGA Metadata Schema. + +**Note:** The models are generated for the `postgresql+psycopg2` dialect of SQLAlchemy. diff --git a/changelog.md b/changelog.md index c69dee8f..9589051d 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,12 @@ +## 0.1.0 release + +- Restructured the schema +- Added new entities +- Added new properties for entities +- Added mappings to ontologies +- Added Pydantic models to the list of generated artifacts + + ## 0.0.1 release - First release of the GHGA Metadata Schema diff --git a/requirements.txt b/requirements.txt index 4172d72c..02e1ea0d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -linkml>=1.0.1 +linkml>=1.1.13 mkdocs>=1.2.1 mkdocs-material>=7.1.9