diff --git a/project/plantuml/cmdr.puml b/project/plantuml/cmdr.puml index ca3e3ce..b696606 100644 --- a/project/plantuml/cmdr.puml +++ b/project/plantuml/cmdr.puml @@ -2,39 +2,12 @@ skinparam nodesep 10 hide circle hide empty members -class "Container" [[{None}]] { - -} -class "Subject" [[{Demographic and clinical information about the subject}]] { - {field} id : uriorcurie - {field} name : string -} -class "MaterialEntity" [[{Physical entity that is an input our output of a process from a Subject}]] { - {field} id : uriorcurie +class "MaterialEntity" [[{Physical entity that is an input our output of a process from a Participant}]] { {field} name : string + {field} internal_id(i) : uriorcurie + {field} global_id(i) : uriorcurie + {field} description(i) : string } -class "Participation" [[{Subject/Study participation information}]] { - {field} id : uriorcurie - {field} name : string -} -class "SpecimenCollectionProcess" [[{A planned process with the objective of collecting a specimen}]] { - {field} has_input : string - {field} has_output : string - {field} id(i) : uriorcurie - {field} name(i) : string -} -"Container" *--> "0..*" "Subject" : "subjects" -"MaterialEntity" --> "0..1" "Subject" : "source" -"Participation" --> "0..1" "Subject" : "includes" -"SpecimenCollectionProcess" --> "0..*" "Subject" : "has_input"(i) -abstract "Process" [[{A planned process resulting in a material or data}]] { - {field} id : uriorcurie - {field} name : string - {field} has_input : string [0..*] - {field} has_output : string [0..*] -} -"Container" *--> "0..*" "SpecimenCollectionProcess" : "specimen_collection_processes" -"Process" ^-- "SpecimenCollectionProcess" class "Quantity" [[{None}]] { {field} has_raw_value : string {field} has_numeric_value : float @@ -43,26 +16,73 @@ class "Quantity" [[{None}]] { } "MaterialEntity" *--> "0..1" "Quantity" : "concentration" "MaterialEntity" *--> "0..1" "Quantity" : "volume" -class "MaterialProcessing" [[{A planned process which results in physical changes in a specified input material}]] { +abstract "Process" [[{A planned process resulting in a material or data}]] { + {field} name : string + {field} has_input : string [0..*] + {field} has_output : string [0..*] + {field} id : uriorcurie +} +class "SpecimenCollectionProcess" [[{A planned process with the objective of collecting a specimen}]] { + {field} has_input : string + {field} has_output : string + {field} name(i) : string {field} id(i) : uriorcurie +} +class "MaterialProcessing" [[{A planned process which results in physical changes in a specified input material}]] { {field} name(i) : string + {field} id(i) : uriorcurie } +"Process" ^-- "SpecimenCollectionProcess" "Process" ^-- "MaterialProcessing" -class "Investigation" [[{General information about the Investigation}]] { - {field} id : uriorcurie - {field} name : string +class "Container" [[{None}]] { + } -"Participation" --> "0..*" "Investigation" : "involved_in" -"Container" *--> "0..*" "Participation" : "participations" +"Container" *--> "0..*" "SpecimenCollectionProcess" : "specimen_collection_processes" "MaterialProcessing" --> "0..*" "MaterialEntity" : "has_output" "MaterialProcessing" --> "0..*" "MaterialEntity" : "has_input" "Container" *--> "0..*" "MaterialProcessing" : "material_processings" -"MaterialEntity" --> "0..*" "Investigation" : "used_in" +class "Participant" [[{Demographic and clinical information about the participant}]] { + {field} name : string + {field} internal_id(i) : uriorcurie + {field} global_id(i) : uriorcurie + {field} description(i) : string +} +class "Study" [[{General information about a Study}]] { + {field} url : string + {field} internal_id(i) : uriorcurie + {field} global_id(i) : uriorcurie + {field} name(i) : string + {field} description(i) : string +} +abstract "Entity" [[{The Entity class is the abstract parent class for all classes in the CMDR schema}]] { + {field} internal_id : uriorcurie + {field} global_id : uriorcurie + {field} name : string + {field} description : string +} +"MaterialEntity" --> "0..1" "Participant" : "source" +"MaterialEntity" --> "0..*" "Study" : "used_in" "Container" *--> "0..*" "MaterialEntity" : "materials" "SpecimenCollectionProcess" --> "0..*" "MaterialEntity" : "has_output"(i) -"Investigation" --> "0..1" "Investigation" : "part_of" -"Container" *--> "0..*" "Investigation" : "investigations" -class "DataObject" [[{A DataFile Associated with a Subject or Investigation or MaterialEntity}]] { +"Entity" ^-- "MaterialEntity" +class "Participation" [[{Study participation information}]] { + {field} name : string + {field} internal_id(i) : uriorcurie + {field} global_id(i) : uriorcurie + {field} description(i) : string +} +"Study" --> "0..1" "Study" : "part_of" +"Container" *--> "0..*" "Study" : "studies" +"Participation" --> "0..*" "Study" : "involved_in" +"Entity" ^-- "Study" +"Participation" --> "0..1" "Participant" : "includes" +"Container" *--> "0..*" "Participation" : "participations" +"Entity" ^-- "Participation" +"Container" *--> "0..*" "Participant" : "participants"(i) +"SpecimenCollectionProcess" --> "0..*" "Participant" : "has_input"(i) +"Container" --> "0..*" "Participant" : "participants" +"Entity" ^-- "Participant" +class "DataObject" [[{A DataFile Associated with a Participant or Study or MaterialEntity}]] { } @enduml diff --git a/src/cmdr/schema/cmdr.yaml b/src/cmdr/schema/cmdr.yaml index ea4cf68..6cedf6c 100644 --- a/src/cmdr/schema/cmdr.yaml +++ b/src/cmdr/schema/cmdr.yaml @@ -14,6 +14,7 @@ prefixes: schema: http://schema.org/ PATO: http://purl.obolibrary.org/obo/PATO_ example: https://example.org/ + OBI: http://purl.obolibrary.org/obo/OBI_ default_prefix: cmdr default_range: string @@ -21,253 +22,387 @@ imports: - linkml:types classes: - Container: - from_schema: TEMP + Entity: + slots: + - internalId + - globalIds + - name + - description + + Subject: + slots: + - id + - species + - sex + - ethnicity + - race + - vital_status + - yearOfBirth + - yearOfDeath + - ageAtDeath + - causeOfDeath + - associatedParticipants + + StudyParticipant: + slots: + - id + - study + - enrollment + - entSite + - demographics + - observations + - conditions + - relationships slot_usage: - investigations: - inlined: true - inlined_as_list: true - multivalued: true - range: Investigation - material_processings: - inlined: true - inlined_as_list: true - multivalued: true - range: MaterialProcessing - materials: - inlined: true - inlined_as_list: true - multivalued: true - range: MaterialEntity - participations: - inlined: true - inlined_as_list: true - multivalued: true - range: Participation - specimen_collection_processes: - inlined: true - inlined_as_list: true - multivalued: true - range: SpecimenCollectionProcess - subjects: - inlined: true - inlined_as_list: true - multivalued: true + associatedParticipants: range: Subject + relationships: + range: Relationship + + Relationship: slots: - - materials - - participations - - material_processings - - specimen_collection_processes - - investigations - - subjects - tree_root: true - DataObject: - aliases: - - File - - Data - - DataFile - description: A DataFile Associated with a Subject or Investigation or MaterialEntity - from_schema: TEMP - see_also: - - include:DataFile - Investigation: - aliases: - - Study - - Proposal - description: General information about the Investigation - from_schema: TEMP - see_also: - - include:Study + - id + - participant + - relative + - relationshipType slot_usage: - id: - identifier: true - range: uriorcurie - part_of: - range: Investigation + participant: + range: StudyParticipant + relative: + range: StudyParticipant + + Family: slots: - id - - name - - part_of - MaterialEntity: - aliases: - - Substance - - Specimen - - Sample - - Biospecimen - - Biosample - description: Physical entity that is an input our output of a process from a Subject - from_schema: TEMP - see_also: - - include:Biospecimen + - study + - family_type + - members + - relationships + - probands slot_usage: - concentration: - range: Quantity - id: - identifier: true - range: uriorcurie - source: - comments: - - this is a shortcut. to be expanded later. - range: Subject - used_in: - multivalued: true - range: Investigation - volume: - range: Quantity + members: + range: StudyParticipant + relationships: + range: Relationship + probands: + range: StudyParticipant + + Group: slots: - id - - name - - used_in - - source - - volume - - concentration - MaterialProcessing: - class_uri: OBI:0000094 - description: A planned process which results in physical changes in a specified - input material - from_schema: TEMP - is_a: Process + - memberType + - members + - memberCount + - criteria + - hasSubset + - characteristics + - subsetOf slot_usage: - has_input: - multivalued: true - range: MaterialEntity - has_output: - multivalued: true - range: MaterialEntity + members: + range: StudyParticipant + hasSubset: + range: Group + subsetOf: + range: Group + + Characteristic: slots: - - has_input - - has_output - Participation: - description: Subject/Study participation information - from_schema: TEMP - see_also: - - include:Participant - slot_usage: - id: - identifier: true - range: uriorcurie - includes: - range: Subject - involved_in: - multivalued: true - range: Investigation + - name + - values + - valueOperator + - exclude + + Study: slots: - id - name - - involved_in - - includes - Process: - abstract: true - description: A planned process resulting in a material or data - from_schema: TEMP + - design + - researchFocus + - selectionCriteriaDescription + - period + - studyGroup + - contributions + - contacts + slot_usage: + studyGroup: + range: Group + contributions: + range: StudyContribution + contacts: + range: StudyContact + + StudyContribution: + attributes: + - agent + - contributorRole + - period + - organizationalContext + - status + - preferredContact + slot_usage: + agent: + range: Agent + organizationalContext: + range: Organization + preferredContact: + range: StudyContact + + StudyContact: + attributes: + - agent + - contactPoints + - purpose + - period + - organizationalContext slot_usage: - has_input: - multivalued: true - has_output: - multivalued: true - id: - identifier: true - range: uriorcurie + agent: + range: Agent + organizationalContext: + range: Organization + + Agent: slots: - id - name - - has_input - - has_output - Quantity: - from_schema: TEMP + - urls + + Person: + slots: + - name + - contactPoints + - affiliations slot_usage: - comparator: - range: string - has_numeric_value: - range: float - has_raw_value: - range: string - has_unit: - range: string + affiliations: + range: Affiliation + + Organization: slots: - - has_raw_value - - has_numeric_value - - has_unit - - comparator - SpecimenCollectionProcess: - aliases: - - MaterialCollectionProcess - class_uri: OBI:0000659 - description: A planned process with the objective of collecting a specimen - from_schema: TEMP - is_a: Process + - name + - contactPoints + - parentOrganizations + - childOrganizations slot_usage: - has_input: - multivalued: true - range: Subject - has_output: - multivalued: true - range: MaterialEntity + parentOrganizations: + range: Organization + childOrganizations: + range: Organization + + Software: slots: - - has_input - - has_output - Subject: - aliases: - - Site - - Participant - description: Demographic and clinical information about the subject - from_schema: TEMP - see_also: - - include:Participant + - version + + TimePeriod: + slots: + - start + - end + + TimePoint: + slots: + - dateTime + - index_time_point + - offset_from_index + - event_type + + ContactPoint: + slots: + - system + - value + - validDates + + Affiliation: + slots: + - member + - organization + - memberRole + - started + - ended + - status slot_usage: - id: - identifier: true - range: uriorcurie + member: + range: Agent + organization: + range: Organization + + Quantity: slots: - - id - - name + - value + - unit + slots: - comparator: - from_schema: TEMP - concentration: - from_schema: TEMP - has_input: - from_schema: TEMP - has_numeric_value: - from_schema: TEMP - has_output: - from_schema: TEMP - has_raw_value: - from_schema: TEMP - has_unit: - from_schema: TEMP - id: - from_schema: TEMP - includes: - from_schema: TEMP - investigations: - from_schema: TEMP - involved_in: - from_schema: TEMP - material_processings: - from_schema: TEMP - materials: - from_schema: TEMP + internalId: + range: string + globalIds: + range: string name: - from_schema: TEMP - part_of: - from_schema: TEMP - participations: - from_schema: TEMP - source: - from_schema: TEMP - specimen_collection_processes: - from_schema: TEMP - subjects: - from_schema: TEMP - used_in: - from_schema: TEMP - volume: - from_schema: TEMP -subsets: - potential_phi: - from_schema: TEMP - temporal_data: - from_schema: TEMP + range: string + description: + range: string + id: + range: string + exclude: + range: boolean + species: + range: string + sex: + range: string + ethnicity: + range: string + race: + range: string + vital_status: + range: string + yearOfBirth: + range: string + yearOfDeath: + range: string + ageAtDeath: + range: string + causeOfDeath: + range: string + associatedParticipants: + range: Subject + study: + range: Study + enrollment: + range: string + entSite: + range: Organization + demographics: + range: string + observations: + range: string + conditions: + range: string + relationships: + range: Relationship + participant: + range: StudyParticipant + relative: + range: StudyParticipant + relationshipType: + range: string + family_type: + range: string + members: + range: StudyParticipant + probands: + range: StudyParticipant + memberType: + range: string + memberCount: + range: integer + criteria: + range: string + hasSubset: + range: Group + characteristics: + range: Characteristic + subsetOf: + range: Group + contributorRole: + range: string + period: + range: string + organizationalContext: + range: Organization + status: + range: string + preferredContact: + range: StudyContact + contactPoints: + range: string + purpose: + range: string + urls: + range: string + affiliations: + range: Affiliation + parentOrganizations: + range: Organization + childOrganizations: + range: Organization + version: + range: string + start: + range: TimePoint + end: + range: TimePoint + dateTime: + range: string + index_time_point: + range: TimePoint + offset_from_index: + range: Quantity + event_type: + range: string + system: + range: string + validDates: + range: TimePeriod + member: + range: Agent + organization: + range: Organization + memberRole: + range: string + started: + range: string + ended: + range: string + value: + range: string + values: + range: string + multivalued: true + valueOperator: + range: string + unit: + range: string + design: + range: string # need StudyDesignEnum + researchFocus: + range: string # need ResearchFocusEnum + selectionCriteriaDescription: + range: string # need SelectionCriteriaEnum + studyGroup: + range: string # need StudyGroupEnum + contributions: + range: StudyContributorEnum + contacts: + range: StudyContact +enums: + StudyContributorEnum: + permissible_values: + - Funder + - Sponsor + - Principal Investigator + - DCC + - Research Site + ContributionStatusEnum: + permissible_values: + - Paused + - Ongoing + - Completed + - Terminated + ContactSystemEnum: + permissible_values: + - Fax + - Email + - Telephone + - Pager + - URL + - Mailing Address + - Slack handle + AffiliationStatusEnum: + permissible_values: + - Active + - Inactive + - Pending + OrganizationalRoleEnum: + permissible_values: + - Lab Manager + - Graduate Student + - Post Doctoral Fellow + - Faculty + - Program Directory \ No newline at end of file