diff --git a/design/schema/bcdc.puml b/design/schema/bcdc.puml new file mode 100644 index 0000000..39a827e --- /dev/null +++ b/design/schema/bcdc.puml @@ -0,0 +1,319 @@ +@startuml + +hide empty members +'hide circle + + +'Enums +enum WebResourceType { + Download + Information + Explore + View +} + +enum AccessControl { + Open + Embargoed + Controlled +} + +enum CompletionState { + Complete + InProgress +} + +enum AgentType { + Person + Organization +} + + +'Entity-like +class Agent { + * id: String! + agent_id: String! + agentType: AgentType + organization: Organization + person: Person + type: AgentType! +} + +class Modality { + * id: String! + name: String! + ontology_id: String +} + +class SpecimenType { + * id: String! + name: String! + ontology_id: String +} + + +class WebResource { + * id: String! + name: String! + title: String! + shortTitle: String! + url: String! + rrid: String +} + +class Project { + * id: String! + doi: String + name: String! + title: String! + shortTitle: String! + description: String! + bkpWebResource: WebResource! + informationWebResource: WebResource + subprogram: [Subprogram]! + technique: [Technique]! + collection: [Collection]! + specimenType: [SpecimenType]! + contact: Contact + creator: [Agent]! + fundingSource: [Award]! + contributor: [Agent] + highlightedWebResource: [WebResource] + protocol: [Protocol] + dataArchive: [Organization] + externalId: String + species: [Species]! + modality: [Modality]! + publication: [Publication] + dateModified: Date + dateCreated: Date! +} + +class Collection { + * id: String! + name: String! + title: String! + shortTitle: String! + description: String! + doi: String + rrid: String + citation: String + externalId: String + bkpWebResource: [WebResource]! + dataArchive: [Organization]! + species: [Species]! + specimenCount: [SpecimenCount]! + license: License! + accessControl: AccessControl! + accessControlCode: [AccessControlCode] + accessControlDescription: String + completionState: CompletionState! + modality: [Modality]! + technique: [Technique]! + webResource: [WebResource] + dateModified: Date + dateCreated: Date! +} + +class Subprogram { + * id: String! + doi: String + name: String! + title: String! + shortTitle: String! + description: String! + bkpWebResource: WebResource + program: Program! + informationWebResource: WebResource +} + +class Program { + * id: String! + doi: String + name: String! + title: String! + shortTitle: String! + description: String! + bkpWebResource: WebResource + informationWebResource: WebResource +} + +class Protocol { + * id: String! + name: String + title: String! + shortTitle: String! + webResource: WebResource! +} + +class Person { + * id: String! + name: String! + givenName: String! + familyName: String! + orcid: String +} + +class Organization { + * id: String + name: String! + name: String! + ror: String + webResource: WebResource + contact: Contact +} + +class License { + * id: String! + name: String + name: String! + title: String! + shortTitle: String! + webResource: WebResource! +} + +class Award { + * id: String + name: String! + title: String! + identifier: String! + reportSymbol: String + funder: Agent! + awardee: [Agent]! +} + +class Technique { + * id: String! + name: String! + ontology_id: String +} + +class Species { + * id: String! + name: String! + common_name: String! + scientific_name: String + ncbi_taxonomy_id: String! + rrid: String +} + +class SpecimenCount { + * id: String! + count: Int + specimenType: SpecimenType! +} + +class Publication { + * id: String! + TBD +} + +class AccessControlCode{ + *id: String! + code: String! +} + +circle webResource +webResource --> WebResource + +circle bkpWebResource +bkpWebResource --> WebResource + +circle informationWebResource +informationWebResource --> WebResource + +circle highlightedWebResource +highlightedWebResource --> WebResource + +circle contact +contact --> Contact + +circle dataArchive +dataArchive --> Organization + +circle specimenType +specimenType --> SpecimenType + +circle species +species --> Species + +circle technique +technique --> Technique + +circle modality +modality --> Modality + +'Organization --o| Contact : contact +Organization --o| contact +Organization --o| webResource + +'Relationships +Agent --o| Person : person +Agent --o| Organization : organization +Agent --|| AgentType : type + +'SpecimenCount --|| SpecimenType : specimenType +SpecimenCount --|| specimenType + +WebResource --|| WebResourceType : type + +'Technique --o{ Protocol : protocol + +Collection --|{ modality +Collection --|{ species +Collection --|{ SpecimenCount : specimenCount +Collection --|{ technique +Collection --|| AccessControl : accessControl +Collection --|| CompletionState : completionState +Collection --|| License : license +Collection --|{ bkpWebResource +'Collection --|{ Organization : dataArchive +Collection --|{ dataArchive +Collection --o{ webResource +Collection --|{ AccessControlCode : accessControlCode + +Award --|| Agent : funder +Award --|{ Agent : awardee + +Contact --o| Person: person + +Project --|{ Collection : collection +Project --|{ Award : fundingSource +'Project --o{ WebResource : highlightedWebResource +Project ---o{ highlightedWebResource +Project --|{ Agent : creator +Project --o{ Agent : contributor +'Project --o{ Contact : contact +Project --o{ contact +'Project --|{ SpecimenType : specimenType +Project --|{ specimenType +Project --|{ technique +Project --|{ Subprogram : subprogram +'Project --o| webResource +Project --|| bkpWebResource +Project --o| informationWebResource +'Project --|| webResource : bkpWebResource +'Project --|> Program +Project --o{ Protocol : protocol +Project --|{ dataArchive +Project --|{ species +Project --|{ modality +Project --o{ Publication : publication + +Program --o| informationWebResource +Program --o| bkpWebResource +'Program --o| webResource : bkpWebResource +'Program --|| webResource : informationWebResource + +Subprogram --o| informationWebResource +Subprogram --|| Program : program +Subprogram --o| bkpWebResource +'Subprogram --|> Program: program +'Subprogram --o| webResource : bkpWebResource +'Subprogram --|| webResource: informationWebResource + +Protocol --|| webResource + +License --|| webResource + +@enduml \ No newline at end of file diff --git a/design/schema/bcdc.svg b/design/schema/bcdc.svg new file mode 100644 index 0000000..c486bc1 --- /dev/null +++ b/design/schema/bcdc.svg @@ -0,0 +1,715 @@ +WebResourceTypeDownloadInformationExploreViewAccessControlOpenEmbargoedControlledCompletionStateCompleteInProgressAgentTypePersonOrganizationAgentid: String!agent_id: String!agentType: AgentTypeorganization: Organizationperson: Persontype: AgentType!Modalityid: String!name: String!handle: StringSpecimenTypeid: String!name: String!handle: StringWebResourceid: String!handle: String!title: String!shortTitle: String!url: String!rrid: StringProjectid: String!doi: Stringhandle: String!title: String!shortTitle: String!description: String!bkpWebResource: WebResource!informationWebResource: WebResourcesubprogram: [Subprogram]!technique: [Technique]!collection: [Collection]!specimenType: [SpecimenType]!contact: Contactcreator: [Agent]!fundingSource: [Award]!contributor: [Agent]highlightedWebResource: [WebResource]protocol: [Protocol]dataArchive: [Organization]externalId: Stringspecies: [Species]!modality: [Modality]!publication: [Publication]dateModified: DatedateCreated: Date!Collectionid: String!handle: String!title: String!shortTitle: String!description: String!doi: Stringrrid: Stringcitation: StringexternalId: StringdataArchive: OrganizationbkpWebResource: [WebResource]!dataArchive: [Organization]!species: [Species]!specimenCount: [SpecimenCount]!license: License!accessControl: AccessControl!completionState: CompletionState!modality: [Modality]!technique: [Technique]!webResource: [WebResource]dateModified: DatedateCreated: Date!Subprogramid: String!doi: Stringhandle: String!title: String!shortTitle: String!description: String!bkpWebResource: WebResourceprogram: Program!informationWebResource: WebResourceProgramid: String!doi: Stringhandle: String!title: String!shortTitle: String!description: String!bkpWebResource: WebResourceinformationWebResource: WebResourceProtocolid: String!handle: Stringtitle: String!shortTitle: String!webResource: WebResource!Personid: String!name: String!givenName: String!familyName: String!handle: Stringorcid: StringOrganizationid: Stringname: String!handle: String!ror: StringwebResource: WebResourcecontact: ContactLicenseid: String!handle: Stringname: String!title: String!shortTitle: String!webResource: WebResource!Awardid: Stringname: String!title: String!identifier: String!reportSymbol: Stringfunder: Agent!awardee: [Agent]!Techniqueid: String!handle: Stringname: String!Speciesid: String!name: String!common_name: String!scientific_name: Stringncbi_taxonomy_id: String!rrid: StringSpecimenCountid: String!count: IntspecimenType: SpecimenType!Contactid: String!name: String!email: StringPublicationid: String!TBDwebResourcebkpWebResourceinformationWebResourcehighlightedWebResourcecontactdataArchivespecimenTypespeciestechniquemodalitypersonorganizationtypetypespecimenCountaccessControlcompletionStatelicensefunderawardeeagentcollectionfundingSourcecreatorcontributorsubprogramprotocolpublicationprogram \ No newline at end of file diff --git a/design/schema/boss.svg b/design/schema/boss.svg index b43b89c..a89f502 100644 --- a/design/schema/boss.svg +++ b/design/schema/boss.svg @@ -58,271 +58,271 @@ reverse link Channel to DataType-->