diff --git a/available.json b/available.json index 46bf168f..e1d172ac 100644 --- a/available.json +++ b/available.json @@ -13,7 +13,11 @@ "1.0", "1.1", "1.2", - "2.0" + "2.0", + "2.1" + ], + "CRUK": [ + "1.0.0" ], "SchemaOrg": [ "BioSchema", diff --git a/hdr_schemata/examples/CRUK/1.0.0/example.json b/hdr_schemata/examples/CRUK/1.0.0/example.json new file mode 100644 index 00000000..b602b436 --- /dev/null +++ b/hdr_schemata/examples/CRUK/1.0.0/example.json @@ -0,0 +1,109 @@ +{ + "identifier": "a7ddefbd-31d9-4703-a738-256e4689f76a", + "version": "1.0.0", + "revisions": [ + { + "version": "1.0.0", + "url": "https://example.org/datasets/a7ddefbd-31d9-4703-a738-256e4689f76a" + } + ], + "issued": "2020-08-05T14:35:59Z", + "modified": "2021-01-28T14:15:46Z", + "summary": { + "title": "CRUK DataHub Example Dataset", + "abstract": "Example CRUK dataset record extending HDRUK 4.0.0 with CRUK-specific fields.", + "dataCustodian": { + "identifier": "hdr-uk", + "name": "HEALTH DATA RESEARCH UK", + "contactPoint": "susheel.varma@hdruk.ac.uk" + }, + "populationSize": 575, + "keywords": [ + "Cancer", + "CRUK", + "Example" + ], + "doiName": "10.1093/ije/dyx196", + "contactPoint": "susheel.varma@hdruk.ac.uk" + }, + "accessibility": { + "formatAndStandards": { + "language": [ + "en" + ], + "vocabularyEncodingScheme": [ + "OTHER" + ], + "format": [ + "CSV", + "JSON" + ], + "conformsTo": [ + "OTHER" + ] + }, + "usage": { + "dataUseLimitation": [ + "General research use" + ], + "resourceCreator": "HDR UK Science Team", + "dataUseRequirements": [ + "Return to database or resource" + ] + }, + "access": { + "dataController": "HDR UK", + "jurisdiction": [ + "GB-ENG" + ], + "dataProcessor": "HDR UK", + "accessService": "https://github.com/HDRUK/papers", + "accessRights": "https://raw.githubusercontent.com/HDRUK/papers/master/LICENSE", + "accessRequestCost": "Free", + "deliveryLeadTime": "Other" + } + }, + "observations": [ + { + "observedNode": "Findings", + "measuredValue": 575, + "disambiguatingDescription": "Example observation count", + "observationDate": "2020-11-27", + "measuredProperty": "Count" + } + ], + "datasetFilters": [ + { + "id": "1", + "label": "Breast", + "category": "Cancer", + "primaryGroup": "cancer-type", + "description": "Breast cancer" + } + ], + "icons": [ + "icon-a", + "icon-b" + ], + "erd": null, + "projectGrants": [ + { + "pid": "CRUK-PROJ-001", + "projectGrantName": "CRUK Example Grant Title", + "leadResearcher": "Dr Smith", + "leadResearchInstitute": "Sussex University", + "grantNumber": "ABC123", + "projectGrantStartDate": "2020-01-01", + "projectGrantEndDate": "2024-12-31", + "projectGrantScope": "Longitudinal genomic data including somatic mutations" + } + ], + "otherDataTypes": [ + { + "title": "Mammograms", + "description": "2D images of both normal and malignant breasts", + "format": "image/jpeg" + } + ] +} + diff --git a/hdr_schemata/models/CRUK/1.0.0/schema.json b/hdr_schemata/models/CRUK/1.0.0/schema.json new file mode 100644 index 00000000..cfb9521d --- /dev/null +++ b/hdr_schemata/models/CRUK/1.0.0/schema.json @@ -0,0 +1,3422 @@ +{ + "$defs": { + "AbstractText": { + "anyOf": [ + { + "maxLength": 500, + "minLength": 5, + "type": "string" + }, + { + "type": "null" + } + ], + "title": "AbstractText" + }, + "Access": { + "additionalProperties": false, + "properties": { + "accessRights": { + "allOf": [ + { + "$ref": "#/$defs/LongDescription" + } + ], + "description": "Please provide details for the data access rights.", + "examples": [ + "In Progress" + ], + "guidance": "- The URL of a webpage where the data access request process and/or guidance is provided. If there is more than one access process i.e. industry vs academic please provide both separated by a comma.\\n- If such a resource or the underlying process doesn\u2019t exist, please provide \u201cIn Progress\u201d, until both the process and the documentation are ready.", + "title": "Access rights" + }, + "accessServiceCategory": { + "anyOf": [ + { + "$ref": "#/$defs/AccessService" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The method a Researcher will use to access the dataset, if approved.", + "examples": [ + "TRE/SDE" + ], + "guidance": "Select the category which best matches how a Researcher will access the dataset, if approved for access. If the access method changes based on the data required for the project (e.g. the dataset can be shared via secure email if the extract is fully anonymised, but must be accessed via a TRE/SDE if the extract is only pseudonymised) then select 'varies based on project'.", + "title": "Access method category" + }, + "accessService": { + "anyOf": [ + { + "$ref": "#/$defs/LongDescription" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please provide a brief description of the data access services that are available including: environment that is currently available to researchers; additional consultancy and services; any indication of costs associated. If no environment is currently available, please indicate the current plans and timelines when and how data will be made available to researchers Note: This value will be used as default access environment for all datasets submitted by the organisation. However, there will be the opportunity to overwrite this value for each dataset.", + "examples": [ + "https://re-docs.genomicsengland.co.uk/tutorials/", + "https://publichealthscotland.scot/services/data-research-and-innovation-services/electronic-data-research-and-innovation-service-edris/national-safe-haven-nsh/" + ], + "guidance": "Please provide a brief description of the data access services that are available including:\\n- environment that is currently available to researchers\\n- additional consultancy and services\\n- any indication of costs associated\\n\\n If no environment is currently available, please indicate the current plans and timelines when and how data will be made available to researchers.\\n **Note**: This value will be used as default access environment for all datasets submitted by the organisation. However, there will be the opportunity to overwrite this value for each dataset.", + "title": "Access service description" + }, + "accessRequestCost": { + "anyOf": [ + { + "$ref": "#/$defs/LongDescription" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please provide link(s) to a webpage or description detailing the service or cost model for processing data access requests.", + "guidance": "This information should cover the costs and/or services available to different audiences (i.e. academic, commercial, non-UK, etc.). This can be in the form of text or a URL.", + "title": "Access request cost" + }, + "deliveryLeadTime": { + "anyOf": [ + { + "$ref": "#/$defs/DeliveryLeadTimeV2" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please provide an indication of the typical processing times based on the types of requests typically received.", + "guidance": "- **Less than 1 week**: Access request process typically processed in less than a week.\\n- **1-2 weeks**: Access request process typically processed in one to two weeks.\\n- **2-4 weeks**: Access request process typically processed in two to four weeks.\\n- **1-2 months**: Access request process typically processed in one to two months.\\n- **2-6 months**: Access request process typically processed in two to six months.\\n- **More than 6 months**: Access request process typically processed in more than six months.\\n- **Variable**: Access request lead time is variable.\\n- **Not applicable**: Access request process duration is not applicable.\\n- **Other**: If the typical timeframe does not fit into the broad ranges i.e. lightweight application vs linked data application, please choose \u201cOther\u201d and indicate the typical timeframe within the description for the dataset.", + "title": "Time to dataset access" + }, + "jurisdiction": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/Isocountrycode" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please use country code from ISO 3166-1 country codes and the associated ISO 3166-2 for regions, cities, states etc. for the country/state under whose laws the data subjects' data is collected, processed and stored.", + "guidance": "A full list of country codes can be found here (alpha-2 column): https://www.iso.org/obp/ui/#search/code/", + "title": "Jurisdiction" + }, + "dataController": { + "anyOf": [ + { + "$ref": "#/$defs/LongDescription" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Data Controller means a person/entity who (either alone or jointly or in common with other persons/entities) determines the purposes for which and the way any Data Subject data, specifically personal data or are to be processed.", + "examples": [ + "NHS England" + ], + "guidance": "- Data Controller means a person/entity who (either alone or jointly or in common with other persons/entities) determines the purposes for which and the way any Data Subject data, specifically personal data or are to be processed.\\n- Notes: For most organisations this will be the same as the Data Custodian of the dataset. If this is not the case, please indicate that there is a different controller.\\n- If there is a different controller please complete the Data Processor attribute to indicate if the Data Custodian is a Processor rather than the Data Controller.\\n- In some cases, there may be multiple Data Controllers i.e. GP data. If this is the case, please indicate the fact in a free-text field and describe the data sharing arrangement or a link to it, so that this can be understood by research users.\\n- Example: NHS England", + "title": "Data Controller" + }, + "dataProcessor": { + "anyOf": [ + { + "$ref": "#/$defs/LongDescription" + }, + { + "type": "null" + } + ], + "default": null, + "description": "A Data Processor, in relation to any Data Subject data, specifically personal data, means any person/entity (other than an employee of the data controller) who processes the data on behalf of the data controller.", + "examples": [ + "Not Applicable", + "SAIL" + ], + "guidance": "A Data Processor, in relation to any Data Subject data, specifically personal data, means any person/entity (other than an employee of the data controller) who processes the data on behalf of the data controller.\\n- Notes: Required to complete if the Data Custodian is the Data Processor rather than the Data Controller.\\n- If the Publisher is also the Data Controller please provide \u201cNot Applicable\u201d.\\n- Examples: Not Applicable, SAIL", + "title": "Data Processor" + } + }, + "required": [ + "accessRights" + ], + "title": "Access", + "type": "object" + }, + "AccessService": { + "enum": [ + "TRE/SDE", + "Direct access", + "Open access", + "Varies based on project" + ], + "title": "AccessService", + "type": "string" + }, + "Accessibility": { + "additionalProperties": false, + "properties": { + "usage": { + "anyOf": [ + { + "$ref": "#/$defs/Usage" + }, + { + "type": "null" + } + ], + "default": null, + "description": "This section includes information about how the data can be used and how it is currently being used.", + "title": "Usage" + }, + "access": { + "allOf": [ + { + "$ref": "#/$defs/Access" + } + ], + "description": "Accessibility information allows researchers to understand access, usage, limitations, formats, standards and linkage or interoperability with toolsets.", + "title": "Accessibility" + }, + "formatAndStandards": { + "anyOf": [ + { + "$ref": "#/$defs/FormatAndStandards" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Section includes technical attributes for language vocabularies, sizes etc. and gives researchers facts about and processing the underlying data in the dataset.", + "title": "Format and Standards" + } + }, + "required": [ + "access" + ], + "title": "Accessibility", + "type": "object" + }, + "Age": { + "properties": { + "bin": { + "allOf": [ + { + "$ref": "#/$defs/AgeEnum" + } + ], + "examples": [ + "30-34 years" + ], + "title": "Age grouping" + }, + "count": { + "examples": [ + 1000 + ], + "title": "Age count", + "type": "integer" + } + }, + "required": [ + "bin", + "count" + ], + "title": "Age", + "type": "object" + }, + "AgeEnum": { + "enum": [ + "0-6 days", + "7-27 days", + "1-11 months", + "1-4 years", + "5-9 years", + "10-14 years", + "15-19 years", + "20-24 years", + "25-29 years", + "30-34 years", + "35-39 years", + "40-44 years", + "45-49 years", + "50-54 years", + "55-59 years", + "60-64 years", + "65-69 years", + "70-74 years", + "75-79 years", + "80-84 years", + "85-89 years", + "90-94 years", + "95-99 years", + "100+ years" + ], + "title": "AgeEnum", + "type": "string" + }, + "Assay": { + "enum": [ + "NMR spectroscopy", + "Mass-spectrometry", + "Whole genome sequencing", + "Exome sequencing", + "Genotyping by array", + "Transcriptome profiling by high-throughput sequencing", + "Transcriptome profiling by array", + "Amplicon sequencing", + "Methylation binding domain sequencing", + "Methylation profiling by high-throughput sequencing", + "Genomic variant calling", + "Chromatin accessibility profiling by high-throughput sequencing", + "Histone modification profiling by high-throughput sequencing", + "Chromatin immunoprecipitation sequencing", + "Whole genome shotgun sequencing", + "Whole transcriptome sequencing", + "Targeted mutation analysis" + ], + "title": "Assay", + "type": "string" + }, + "CommaSeparatedValues": { + "anyOf": [ + { + "pattern": "([^,]+)", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "CommaSeparatedValues" + }, + "ControlledVocabularyEnum": { + "enum": [ + "LOCAL", + "OPCS4", + "READ", + "SNOMED CT", + "SNOMED RT", + "DM PLUS D", + "DM+D", + "NHS NATIONAL CODES", + "NHS SCOTLAND NATIONAL CODES", + "NHS WALES NATIONAL CODES", + "ODS", + "LOINC", + "ICD10", + "ICD10CM", + "ICD10PCS", + "ICD9CM", + "ICD9", + "ICDO3", + "AMT", + "APC", + "ATC", + "CIEL", + "HPO", + "CPT4", + "DPD", + "DRG", + "HEMONC", + "JMDC", + "KCD7", + "MULTUM", + "NAACCR", + "NDC", + "NDFRT", + "OXMIS", + "RXNORM", + "RXNORM EXTENSION", + "SPL", + "OTHER" + ], + "title": "ControlledVocabularyEnum", + "type": "string" + }, + "Coverage": { + "additionalProperties": false, + "properties": { + "spatial": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "items": { + "$ref": "#/$defs/Url" + }, + "type": "array" + } + ], + "description": "The geographical area covered by the dataset. It is recommended that links are to entries in one of the recommended standards:\\n- For locations in the UK: [ONS standards](https://geoportal.statistics.gov.uk/datasets/208d9884575647c29f0dd5a1184e711a/about)\\n- For locations in other countries: [ISO 3166-1 & ISO 3166-2](https://github.com/HDRUK/reference-codes)", + "examples": [ + "United Kingdom", + "https://www.geonames.org/2635167/united-kingdom-of-great-britain-and-northern-ireland.html" + ], + "guidance": "- The geographical area covered by the dataset.\\n- Please provide a valid location.\\n- For locations in the UK, this location should conform to [ONS standards](https://geoportal.statistics.gov.uk/datasets/208d9884575647c29f0dd5a1184e711a/about).\\n- For locations in other countries we use [ISO 3166-1 & ISO 3166-2](https://github.com/HDRUK/reference-codes).", + "title": "Geographic coverage" + }, + "typicalAgeRangeMin": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please indicate the minimum age in years of participants in the dataset as a whole number (integer).", + "examples": [ + 18 + ], + "guidance": "- Please indicate the minimum of the age range in whole years of participants in the dataset.\\n- **What if my dataset has participants of all \u201cAll Ages\u201d or \u201cAny Ages\u201d?**: In that case, please enter 0.", + "title": "Minimum age range" + }, + "typicalAgeRangeMax": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please indicate the maximum age in years of participants in the dataset as a whole number (integer).", + "examples": [ + 90 + ], + "guidance": "- Please indicate the maximum of the age range in whole years of participants in the dataset.\\n- **What if my dataset has participants of all \u201cAll Ages\u201d or \u201cAny Ages\u201d?**: In that case, please enter 150.", + "title": "Maximum age range" + }, + "datasetCompleteness": { + "anyOf": [ + { + "$ref": "#/$defs/Url" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The URL where a Researcher can learn more about the completeness of the dataset.", + "examples": [ + "https://bhfdatasciencecentre.org/dashboard/" + ], + "guidance": "If your organisation has a publicly available site which contains information on the completeness of a dataset, add that URL here.\\n**Example**: https://bhfdatasciencecentre.org/dashboard/", + "title": "Dataset coverage/completeness/quality" + }, + "materialType": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/MaterialTypeCategoriesV2" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The type of biospecimen saved from a biological entity.", + "guidance": "Indicate the specimen type, can be several values from the list below:\\n- Availability of physical samples associated with the dataset.\\n- If samples are available, please indicate the types of samples that are available.\\n- More than one type may be provided.\\n- If samples are not yet available, please provide **\u201cAvailability to be confirmed\u201d**.\\n- If samples are not available, then please provide **\u201cNot available\u201d**.\\n- **Not available**: Samples associated with the dataset are not available.\\n- **Bone marrow**: Bone marrow samples associated with the data are available.\\n- **Cancer cell lines**: Cancer cell line samples associated with the data are available.\\n- **CDNA/MRNA**: CDNA/MRNA samples associated with the data are available.\\n- **Core biopsy**: Core biopsy samples associated with the data are available.\\n- **DNA**: DNA samples associated with the data are available.\\n- **Entire body organ**: Entire body organ associated with the data are available.\\n- **Faeces**: Faeces samples associated with the data are available.\\n- **Immortalized cell lines**: Immortalized cell line samples associated with the data are available.\\n- **Isolated pathogen**: Isolated pathogen associated with the data are available.\\n- **MicroRNA**: MicroRNA samples associated with the data are available.\\n- **Peripheral blood cells**: Peripheral blood cell samples associated with the data are available.\\n- **Plasma**: Plasma samples associated with the data are available.\\n- **PM Tissue**: PM Tissue samples associated with the data are available.\\n- **Primary cells**: Primary cell samples associated with the data are available.\\n- **RNA**: RNA samples associated with the data are available.\\n- **Saliva**: Saliva samples associated with the data are available.\\n- **Serum**: Serum samples associated with the data are available.\\n- **Swabs**: Swab samples associated with the data are available.\\n- **Tissue**: Tissue samples associated with the data are available.\\n- **Urine**: Urine samples associated with the data are available.\\n- **Whole blood**: Whole blood samples associated with the data are available.\\n- **Availability to be confirmed**: Availability of samples is currently being confirmed.\\n- **Other**: Other types of sample available.", + "title": "Biological sample availability" + }, + "followUp": { + "anyOf": [ + { + "$ref": "#/$defs/FollowupV2" + }, + { + "type": "null" + } + ], + "default": "Unknown", + "description": "If known, what is the typical time span that a patient appears in the dataset (follow up period). In a prospective cohort study, after baseline information is collected, participants are followed \u201clongitudinally\u201d i.e. new information is collected about them for a period of time afterward. This is known as the \u201cfollow up period\u201d. What is the typical time span of follow up, e.g. 1 year, 5 years? If there are multiple cohorts in the dataset with varying follow up periods, please provide the longest follow up period.", + "guidance": "If known, please indicate the typical time span that a patient appears in the dataset (follow up period).\\n-**0 - 6 MONTHS**: Data typically available for a patient over a 0-6 month period.\\n-**6 - 12 MONTHS**: Data typically available for a patient over a 6-12 month period.\\n-**1 - 10 YEARS**: Data typically available for a patient over a 1-10 year period.\\n-**> 10 YEARS**: Data typically available for a patient for over a 10 year period.\\n-**CONTINUOUS**: Data for patients is being regularly added to and updated.\\n-**UNKNOWN**: Timespan is Unknown.\\n-**OTHER**: Data available for a patient over another time period.", + "title": "Follow-up" + }, + "pathway": { + "anyOf": [ + { + "$ref": "#/$defs/Description" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please indicate if the dataset is representative of the patient pathway and any limitations the dataset may have with respect to pathway coverage. This could include if the dataset is from a single speciality or area, a single tier of care, linked across two tiers (e.g. primary and secondary care), or an integrated care record covering the whole patient pathway.", + "guidance": "- Please indicate if the dataset is representative of the patient pathway and any limitations the dataset may have with respect to pathway coverage.\\n- This could include if the dataset is from a single speciality or area, a single tier of care, linked across two tiers (e.g. primary and secondary care), or an integrated care record covering the whole patient pathway.", + "title": "Patient pathway description" + } + }, + "required": [ + "spatial" + ], + "title": "Coverage", + "type": "object" + }, + "DataColumn": { + "properties": { + "name": { + "allOf": [ + { + "$ref": "#/$defs/Name" + } + ], + "description": "The name of a column in a table.", + "title": "Column name" + }, + "dataType": { + "description": "The data type of values in the column.", + "title": "Data type", + "type": "string" + }, + "description": { + "anyOf": [ + { + "maxLength": 20000, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "A description of a column in a table.", + "title": "Column description" + }, + "sensitive": { + "description": "A True or False value, indicating if the field is sensitive or not.", + "title": "Sensitive", + "type": "boolean" + }, + "values": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/DataValue" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Values in a dataset.", + "title": "Values" + } + }, + "required": [ + "name", + "dataType", + "sensitive" + ], + "title": "DataColumn", + "type": "object" + }, + "DataTable": { + "additionalProperties": false, + "properties": { + "name": { + "anyOf": [ + { + "maxLength": 500, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The name of a table in a dataset.", + "title": "Table name" + }, + "size": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Number of Complete Entries.", + "guidance": "Provides a measure of the completeness of the data set. A row which includes n/a against columns that are not relevant or not applicable should still be counted as complete.", + "title": "Table size" + }, + "description": { + "anyOf": [ + { + "maxLength": 20000, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "A description of a table in a dataset.", + "title": "Table description" + }, + "columns": { + "description": "A list of columns contained within a table in a dataset.", + "items": { + "$ref": "#/$defs/DataColumn" + }, + "title": "Data columns", + "type": "array" + } + }, + "required": [ + "columns" + ], + "title": "DataTable", + "type": "object" + }, + "DataUseLimitationV2": { + "enum": [ + "General research use", + "Commercial research use", + "Genetic studies only", + "No general methods research", + "No restriction", + "Geographical restrictions", + "Institution-specific restrictions", + "Not for profit use", + "Project-specific restrictions", + "Research-specific restrictions", + "User-specific restrictions", + "Research use only", + "No linkage" + ], + "title": "DataUseLimitationV2", + "type": "string" + }, + "DataUseRequirementsV2": { + "enum": [ + "Collaboration required", + "Project-specific restrictions", + "Ethics approval required", + "Institution-specific restrictions", + "Geographical restrictions", + "Publication moratorium", + "Publication required", + "Return to database or resource", + "Time limit on use", + "Disclosure control", + "Not for profit use", + "User-specific restriction" + ], + "title": "DataUseRequirementsV2", + "type": "string" + }, + "DataValue": { + "properties": { + "name": { + "allOf": [ + { + "$ref": "#/$defs/Name" + } + ], + "description": "Unique value in a column.", + "title": "Value name" + }, + "description": { + "anyOf": [ + { + "maxLength": 20000, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "A description of a unique value in a column.", + "title": "Value description" + }, + "frequency": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The frequency of occurrance of a value in a column.", + "title": "Value frequency" + } + }, + "required": [ + "name" + ], + "title": "DataValue", + "type": "object" + }, + "DatasetDescriptor": { + "properties": { + "pid": { + "anyOf": [ + { + "$ref": "#/$defs/OneHundredFiftyCharacters" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Persistent identifier of a dataset" + }, + "title": { + "anyOf": [ + { + "$ref": "#/$defs/OneHundredFiftyCharacters" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Title of a dataset" + }, + "url": { + "anyOf": [ + { + "$ref": "#/$defs/Url" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Url of a dataset" + } + }, + "title": "DatasetDescriptor", + "type": "object" + }, + "DatasetFilter": { + "additionalProperties": false, + "properties": { + "id": { + "pattern": "(\\d+_){0,5}\\d+", + "title": "Id", + "type": "string" + }, + "label": { + "maxLength": 150, + "minLength": 0, + "title": "Label", + "type": "string" + }, + "category": { + "maxLength": 150, + "minLength": 0, + "title": "Category", + "type": "string" + }, + "primaryGroup": { + "enum": [ + "cancer-type", + "data-type", + "access-type" + ], + "title": "Primary group", + "type": "string" + }, + "description": { + "maxLength": 150, + "minLength": 0, + "title": "Description", + "type": "string" + } + }, + "required": [ + "id", + "label", + "category", + "primaryGroup", + "description" + ], + "title": "DatasetFilter", + "type": "object" + }, + "DeliveryLeadTimeV2": { + "enum": [ + "Less than 1 week", + "1-2 weeks", + "2-4 weeks", + "1-2 months", + "2-6 months", + "More than 6 months", + "Variable", + "Not applicable", + "Other" + ], + "title": "DeliveryLeadTimeV2", + "type": "string" + }, + "DemographicFrequency": { + "additionalProperties": false, + "properties": { + "age": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/Age" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Array of bins, based off the UK Office for National Statistics (ONS) groupings, and their corresponding counts as represented within the dataset.", + "title": "Age" + }, + "ethnicity": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/Ethnicity" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Array of bins, based off the UK Office for National Statistics (ONS) census groupings, and their corresponding counts as represented within the dataset.", + "guidance": "Enter the count of population represented in the dataset within the ethnicity bins provided. Clearly indicate where ethnicity is not stated or not known. Ensure you apply low number suppression and rounding where appropriate.", + "title": "Ethnicity" + }, + "disease": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/Disease" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Array of health conditions or diseases (based around ICD-10, SNOMED CT and MeSH disease vocabularies) and their corresponding counts as represented within the dataset.", + "guidance": "Create bins based on standard vocabulary (ICD-10, SNOMED CT or MeSH) and disease code. Then enter the count of population represented in the dataset within the disease bins created. Ensure you apply low number suppression and rounding where appropriate.", + "title": "Disease" + } + }, + "title": "DemographicFrequency", + "type": "object" + }, + "Description": { + "anyOf": [ + { + "maxLength": 10000, + "minLength": 2, + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "Disease": { + "properties": { + "diseaseCode": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ], + "examples": [ + "J45" + ], + "title": "Disease code" + }, + "diseaseCodeVocabulary": { + "allOf": [ + { + "$ref": "#/$defs/DiseaseCodeEnum" + } + ], + "examples": [ + "ICD10" + ], + "title": "Disease code vocabulary" + }, + "count": { + "examples": [ + 1000 + ], + "title": "Disease count", + "type": "integer" + } + }, + "required": [ + "diseaseCode", + "diseaseCodeVocabulary", + "count" + ], + "title": "Disease", + "type": "object" + }, + "DiseaseCodeEnum": { + "enum": [ + "ICD10", + "SNOMED CT", + "MeSH" + ], + "title": "DiseaseCodeEnum", + "type": "string" + }, + "Documentation": { + "additionalProperties": false, + "properties": { + "description": { + "allOf": [ + { + "$ref": "#/$defs/Description" + } + ], + "description": "A free-text description of the dataset.\\nA URL can also be provided as the description of the dataset.\\nGateway Feature: Keywords and text may be extracted out of the description and indexed for search.", + "examples": [ + "CPRD Aurum contains primary care data contributed by General Practitioner (GP) practices using EMIS Web\u00ae including patient registration information and all care events that GPs have chosen to record as part of their usual medical practice." + ], + "guidance": "- An HTML account of the data that **provides context and scope** of the data, **limited to 10000 characters, and/or a resolvable URL** that describes the dataset.\\n- Additional information can be recorded and included using the Associated media field." + }, + "associatedMedia": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Url" + }, + { + "type": "null" + } + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please provide any media associated with the Gateway Organisation using a valid URL for the content. This is an opportunity to provide additional context that could be useful for researchers wanting to understand more about the dataset and its relevance to their research question. The following formats will be accepted .jpg, .png or .svg, .pdf, .xslx or .docx. Note: media asset can be hosted by the organisation or uploaded using the onboarding portal.", + "examples": [ + "PDF document that describes study protocol - https://link.to/document.pdf" + ], + "guidance": "- Please provide any media associated with the Gateway Organisation **using a valid URL** for the content.\\n- This is an opportunity to **provide additional context** that could be useful for researchers wanting to understand more about the dataset and its relevance to their research question.\\n- Note: media assets should be hosted by the organisation.\n- **Example**: This could be a **link to a PDF Document** that describes methodology or further detail about the datasets, or a graph or chart that provides further context about the dataset.\\n- If you are providing multiple links for associated media, we recommend that you separate these with a comma.", + "title": "Associated media" + }, + "inPipeline": { + "anyOf": [ + { + "$ref": "#/$defs/Pipeline" + }, + { + "type": "null" + } + ], + "default": "Not available", + "description": "Indicate whether this dataset is currently available for Researchers to request access.", + "guidance": "If a dataset is being prepared for sharing but not yet ready and available for researchers to apply for access, select 'Not available'. If Researchers can currently apply for access to the dataset, select 'Available'.", + "title": "Dataset pipeline status" + } + }, + "required": [ + "description" + ], + "title": "Documentation", + "type": "object" + }, + "Doi": { + "anyOf": [ + { + "pattern": "^10.\\d{4,9}/[-._;()/:a-zA-Z0-9]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Doi" + }, + "EmailAddress": { + "anyOf": [ + { + "format": "email", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "EmailAddress" + }, + "EndDateEnum": { + "enum": [ + "CONTINUOUS", + null + ], + "title": "EndDateEnum" + }, + "EnrichmentAndLinkage": { + "additionalProperties": false, + "properties": { + "derivedFrom": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/DatasetDescriptor" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "If applicable, please provide DOIs or links to datasets from which data in this dataset has been derived or calculated from.", + "title": "Derived from" + }, + "isPartOf": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/DatasetDescriptor" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "This relationship indicates that the dataset is a component or subset of a broader collection of related datasets. For example, clinical trial data for a specific drug may be part of a larger database of pharmaceutical research data. Complete only if the dataset is part of a group or family of datasets i.e. Hospital Episode Statistics has several constituents. If your dataset is not part of a group, please enter \u201cNOT APPLICABLE\u201d **Example**: Hospital Episodes Statistics datasets (A&E, APC, OP, AC MSDS).", + "examples": [ + "Hospital Episodes Statistics datasets (A&E, APC, OP, AC MSDS)" + ], + "title": "Is part of" + }, + "linkableDatasets": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/DatasetDescriptor" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "If applicable, please provide the DOI of other datasets that have previously been linked to this dataset and their availability. If no DOI is available, please provide the title of the datasets that can be linked.", + "title": "Linked datasets" + }, + "similarToDatasets": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/DatasetDescriptor" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Datasets that are similar to each other in some way, collect similar patients, regional equivalent etc.", + "title": "Similar to datasets" + }, + "investigations": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/Url" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please provide link to any active projects that are using the dataset.", + "guidance": "- Please provide the website address(es) which document information related to active projects utilising the dataset.\\n- Please split your existing list of citations into separate fields.\\n- To add multiple entries, type in each website and press enter to add it to the list.\\n- **Example**: ", + "title": "Investigations" + }, + "tools": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/Url" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please provide the URL of any analysis tools or models that have been created for this dataset and are available for further use. Multiple tools may be provided. Note: We encourage users to adopt a model along the lines of https://www.ga4gh.org/news/tool-registry-service-api-enabling-an-interoperable-library-of-genomics-analysis-tools/", + "guidance": "- Please provide the URL of any analysis tools or models that have been created for this dataset and are available for further use.\\n- Multiple tools may be provided.\\n- Note: We encourage users to adopt a model along the lines of https://www.ga4gh.org/news/tool-registry-service-api-enabling-an-interoperable-library-of-genomics-analysis-tools/", + "title": "Tools" + }, + "publicationAboutDataset": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/Doi" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "DOIs for publications which describe the dataset.", + "examples": [ + "10.1093/ije/dyab028" + ], + "guidance": "- Please provide the DOIs for publications which describe the dataset.\\n- Please split your existing list of citations into separate fields.\\n- To add multiple entries, type in each citation and press enter to add it to the list.\\n- **Example**: <10.1093/ije/dyab028>", + "title": "Publication about the dataset" + }, + "publicationUsingDataset": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/Doi" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "DOIs for publications which use the dataset for analysis.", + "examples": [ + "10.1001/jamapediatrics.2016.3633" + ], + "guidance": "- Please provide the DOIs for publications which have used the dataset in their analysis.\\n- Please split your existing list of citations into separate fields.\\n- To add multiple entries, type in each citation and press enter to add it to the list.\\n- **Example**: <10.1001/jamapediatrics.2016.3633>", + "title": "Publication using the dataset" + } + }, + "title": "EnrichmentAndLinkage", + "type": "object" + }, + "EnvironmentAndEnergy": { + "properties": { + "name": { + "Literal": true, + "default": "Environment and energy", + "title": "Name", + "type": "string" + }, + "subTypes": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/NotApplicableSubTypes" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Subtypes" + } + }, + "required": [ + "subTypes" + ], + "title": "EnvironmentAndEnergy", + "type": "object" + }, + "Ethnicity": { + "properties": { + "bin": { + "allOf": [ + { + "$ref": "#/$defs/EthnicityEnum" + } + ], + "examples": [ + "Black or Black British - Any other Black background" + ], + "title": "Ethnicity grouping" + }, + "count": { + "examples": [ + 1000 + ], + "title": "Ethnicity count", + "type": "integer" + } + }, + "required": [ + "bin", + "count" + ], + "title": "Ethnicity", + "type": "object" + }, + "EthnicityEnum": { + "enum": [ + "White - British", + "White - Irish", + "White - Any other White background", + "Mixed - White and Black Caribbean", + "Mixed - White and Black African", + "Mixed - White and Asian", + "Mixed - Any other mixed background", + "Asian or Asian British - Indian", + "Asian or Asian British - Pakistani", + "Asian or Asian British - Bangladeshi", + "Asian or Asian British - Any other Asian background", + "Black or Black British - Caribbean", + "Black or Black British - African", + "Black or Black British - Any other Black background", + "Other Ethnic Groups - Chinese", + "Other Ethnic Groups - Any other ethnic group", + "Not stated", + "Not known" + ], + "title": "EthnicityEnum", + "type": "string" + }, + "FollowupV2": { + "enum": [ + "0 - 6 Months", + "6 - 12 Months", + "1 - 10 Years", + "> 10 Years", + "Unknown", + "Continuous", + "Other", + null + ], + "title": "FollowupV2" + }, + "Format": { + "minLength": 1, + "title": "Format", + "type": "string" + }, + "FormatAndStandards": { + "additionalProperties": false, + "properties": { + "vocabularyEncodingScheme": { + "description": "List any relevant terminologies / ontologies / controlled vocabularies, such as ICD 10 Codes, NHS Data Dictionary National Codes or SNOMED CT International, that are being used by the dataset. If the controlled vocabularies are local standards, please make that explicit. If you are using a standard that has not been included in the list, please use \u201cother\u201d and contact support desk to ask for an addition. Notes: More than one vocabulary may be provided.", + "examples": [ + "LOCAL", + "ICD10" + ], + "guidance": "- List any relevant terminologies / ontologies / controlled vocabularies, such as ICD 10 Codes, NHS Data Dictionary National Codes or SNOMED CT International, that are being used by the dataset.\\n- If the controlled vocabularies are local standards, please make that explicit. If you are using a standard that has not been included in the list, please use \u201cother\u201d and contact support desk to ask for an addition.\\n- Notes: More than one vocabulary may be provided.\\n- **Local**: Local Coding Standard.\\n- [**OPCS4**](https://digital.nhs.uk/data-and-information/information-standards/governance/latest-activity/standards-and-collections/dapb0084-opcs-classification-of-interventions-and-procedures/)\\n- [**READ**](https://digital.nhs.uk/services/terminology-and-classifications/read-codes)\\n- [**SNOMED CT**](http://www.snomed.org/)\\n- [**SNOMED RT**](https://confluence.ihtsdotools.org/display/DOCGLOSS/SNOMED+RT)\\n- [**DM+D**](https://digital.nhs.uk/data-and-information/information-standards/information-standards-and-data-collections-including-extractions/publications-and-notifications/standards-and-collections/scci0052-dictionary-of-medicines-and-devices-dm-d)\\n- [**NHS National Codes**](https://www.datadictionary.nhs.uk/)\\n- [**ODS**](https://digital.nhs.uk/services/organisation-data-service)\\n- [**LOINC**](https://loinc.org/)\\n- [**ICD10**](https://www.who.int/classifications/icd/icdonlineversions/en/)\\n- [**ICD10CM**](https://www.cdc.gov/nchs/icd/icd10cm.htm)\\n- [**ICD10PCS**](https://ec.europa.eu/eip/ageing/standards/healthcare/e-health/icd-10-pcs_en)\\n- [**ICD9CM**](https://www.cdc.gov/nchs/icd/icd9cm.htm)\\n- [**ICD9**](https://www.cdc.gov/nchs/icd/icd9.htm)\\n- [**ICDO3**](https://www.who.int/standards/classifications/other-classifications/international-classification-of-diseases-for-oncology)\\n- [**AMT**](https://www.digitalhealth.gov.au/healthcare-providers/product-releases)\\n- [**APC**](https://www.acep.org/administration/reimbursement/reimbursement-faqs/apc-ambulatory-payment-classifications-faq/)\\n- [**ATC**](https://www.whocc.no/atc_ddd_index/)\\n- [**CIEL**](https://github.com/OpenConceptLab/ocl_web/wiki/CIEL)\\n- [**HPO**](https://hpo.jax.org/app/)\\n- [**CPT4**](https://www.ama-assn.org/practice-management/cpt)\\n- [**DPD**](https://health-products.canada.ca/dpd-bdpp/index-eng.jsp)\\n- [**DRG**](https://www.who.int/publications/i/item/WHO-UHC-HGF-Guidance-20.10)\\n- [**HEMONC**](https://hemonc.org/wiki/Main_Page)\\n- [**JMDC**](https://www.jmdc.co.jp/en/)\\n- [**KCD7**](https://forums.ohdsi.org/t/adding-kcd7-code-korean-icd-10-to-the-omop-vocabulary/7576)\\n- [**MULTUM**](https://www.cerner.com/solutions/drug-database)\\n- [**NAACCR**](https://www.naaccr.org/)\\n- [**NDC**](https://www.fda.gov/drugs/drug-approvals-and-databases/national-drug-code-directory)\\n- [**NDFRT**](https://bioportal.bioontology.org/ontologies/NDFRT)\\n- [**OXMIS**](https://oxrisk.com/oxmis/)\\n- [**RXNORM**](https://www.nlm.nih.gov/research/umls/rxnorm/index.html)\\n- [**RXNORM EXTENSION**](https://www.nlm.nih.gov/research/umls/rxnorm/index.html)\\n- [**SPL**](https://www.fda.gov/industry/fda-resources-data-standards/structured-product-labeling-resources)\\n- **Other**: Please indicate if there is another standard that you are using. This will trigger a support ticket where you can request the addition of the terminology to the HOP.\\n- [**NHS Scotland National Codes**](https://www.ndc.scot.nhs.uk/Data-Dictionary/)\\n- [**NHS Wales National Codes**](http://www.datadictionary.wales.nhs.uk/)", + "items": { + "$ref": "#/$defs/ControlledVocabularyEnum" + }, + "title": "Controlled vocabulary", + "type": "array" + }, + "conformsTo": { + "description": "List standardised data models that the dataset has been stored in or transformed to, such as OMOP or FHIR. If the data is only available in a local format, please make that explicit. If you are using a standard that has not been included in the list, please use \u201cother\u201d and contact support desk to ask for an addition.", + "examples": [ + "LOCAL", + "NHS DATA DICTIONARY" + ], + "guidance": "- List standardised data models that the dataset has been stored in or transformed to, such as OMOP or FHIR.\\n- If the data is only available in a local format, please make that explicit. If you are using a standard that has not been included in the list, please use \u201cother\u201d and contact support desk to ask for an addition.\\n- [**HL7 FHIR**](https://www.hl7.org/fhir/)\\n- [**HL7 V2**](https://www.hl7.org/implement/standards/product_section.cfm?section=13)\\n- [**HL7 CDA**](https://www.hl7.org/implement/standards/product_section.cfm?section=10)\\n- [**HL7 CCOW**](https://www.hl7.org/implement/standards/product_section.cfm?section=16)\\n- [**DICOM**](https://www.dicomstandard.org/)\\n- [**I2B2**](https://www.i2b2.org/)\\n- [**IHE**](https://www.ihe.net/resources/profiles/)\\n- [**OMOP**](https://www.ohdsi.org/data-standardization/the-common-data-model/)\\n- [**openEHR**](https://www.openehr.org/)\\n- [**Sentinel**](https://www.sentinelinitiative.org/sentinel/data/distributed-database-common-data-model)\\n- [**PCORnet**](https://pcornet.org/data-driven-common-model/)\\n- [**CDISC**](https://www.cdisc.org/standards/data-exchange/odm)\\n- **Local**: In-house developed data model.\\n- **Other**: Other standardised data model.\\n- [**NHS Data Dictionary**](https://www.datadictionary.nhs.uk/)\\n- [**NHS Scotland Data Dictionary**](https://www.ndc.scot.nhs.uk/Data-Dictionary/)\\n- [**NHS Wales Data Dictionary**](https://www.datadictionary.wales.nhs.uk/)", + "items": { + "$ref": "#/$defs/StandardisedDataModelsEnum" + }, + "title": "Alignment with standardised data models", + "type": "array" + }, + "language": { + "description": "This should list all the languages in which the dataset metadata and underlying data is made available complaint with ISO 639.", + "examples": [ + "en" + ], + "guidance": "https://www.iso.org/iso-639-language-code\\n- **aa**: Afar\\n- **ab**: Abkhazian\\n- **af**: Afrikaans\\n- **ak**: Akan\\n- **sq**: Albanian\\n- **am**: Amharic\\n- **ar**: Arabic\\n- **an**: Aragonese\\n- **hy**: Armenian\\n- **as**: Assamese\\n- **av**: Avaric\\n- **ae**: Avestan\\n- **ay**: Aymara\\n- **az**: Azerbaijani\\n- **ba**: Bashkir\\n- **bm**: Bambara\\n- **eu**: Basque\\n- **be**: Belarusian\\n- **bn**: Bengali\\n- **bh**: Bihari languages\\n- **bi**: Bislama\\n- **bo**: Tibetan\\n- **bs**: Bosnian\\n- **br**: Breton\\n- **bg**: Bulgarian\\n- **my**: Burmese\\n- **ca**: Catalan; Valencian\\n- **cs**: Czech\\n- **ch**: Chamorro\\n- **ce**: Chechen\\n- **zh**: Chinese\\n- **cu**: Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic\\n- **cv**: Chuvash\\n- **kw**: Cornish\\n- **co**: Corsican\\n- **cr**: Cree\\n- **cy**: Welsh\\n- **cs**: Czech\\n- **da**: Danish\\n- **de**: German\\n- **dv**: Divehi; Dhivehi; Maldivian\\n- **nl**: Dutch; Flemish\\n- **dz**: Dzongkha\\n- **el**: Greek, Modern (1453-)\\n- **en**: English\\n- **eo**: Esperanto\\n- **et**: Estonian\\n- **eu**: Basque\\n- **ee**: Ewe\\n- **fo**: Faroese\\n- **fa**: Persian\\n- **fj**: Fijian\\n- **fi**: Finnish\\n- **fr**: French\\n- **fy**: Western Frisian\\n- **ff**: Fulah\\n- **ka**: Georgian\\n- **de**: German\\n- **gd**: Gaelic; Scottish Gaelic\\n- **ga**: Irish\\n- **gl**: Galician\\n- **gv**: Manx\\n- **el**: Greek, Modern (1453-)\\n- **gn**: Guarani\\n- **gu**: Gujarati\\n- **ht**: Haitian; Haitian Creole\\n- **ha**: Hausa\\n- **ho**: Hiri Motu\\n- **hr**: Croatian\\n- **hu**: Hungarian\\n- **hy**: Armenian\\n- **ig**: Igbo\\n- **is**: Icelandic\\n- **io**: Ido\\n- **ii**: Sichuan Yi; Nuosu\\n- **iu**: Inuktitut\\n- **ie**: Interlingue; Occidental\\n- **ia**: Interlingua (International Auxiliary Language Association)\\n- **id**: Indonesian\\n- **ik**: Inupiaq\\n- **is**: Icelandic\\n- **it**: Italian\\n- **jv**: Javanese\\n- **ja**: Japanese\\n- **kl**: Kalaallisut; Greenlandic\\n- **kn**: Kannada\\n- **ks**: Kashmiri\\n- **ka**: Georgian\\n- **kr**: Kanuri\\n- **kk**: Kazakh\\n- **km**: Central Khmer\\n- **ki**: Kikuyu; Gikuyu\\n- **rw**: Kinyarwanda\\n- **ky**: Kirghiz; Kyrgyz\\n- **kv**: Komi\\n- **kg**: Kongo\\n- **ko**: Korean\\n- **kj**: Kuanyama; Kwanyama\\n- **ku**: Kurdish\\n- **lo**: Lao\\n- **la**: Latin\\n- **lv**: Latvian\\n- **li**: Limburgan; Limburger; limburgish\\n- **ln**: Lingala\\n- **lt**: Lithuanian\\n- **lb**: Luxembourgish; Letzeburgesch\\n- **lu**: Luba-Katanga\\n- **lg**: Ganda\\n- **mk**: Macedonian\\n- **mh**: Marshallese\\n- **ml**: Malayalam\\n- **mi**: Maori\\n- **mr**: Marathi\\n- **ms**: Malay\\n- **mk**: Macedonian\\n- **mg**: Malagasy\\n- **mt**: Maltese\\n- **mn**: Mongolian\\n- **mi**: Maori\\n- **ms**: Malay\\n- **my**: Burmese\\n- **na**: Nauru\\n- **nv**: Navajo; Navaho\\n- **nr**: Ndebele, South; South Ndebele\\n- **nd**: Ndebele, North; North Ndebele\\n- **ng**: Ndonga\\n- **ne**: Nepali\\n- **nl**: Dutch; Flemish\\n- **nn**: Norwegian Nynorsk; Nynorsk, Norwegian\\n- **nb**: Bokm\u00e5l, Norwegian; Norwegian Bokm\u00e5l\\n- **no**: Norwegian\\n- **ny**: Chichewa; Chewa; Nyanja\\n- **oc**: Occitan (post 1500)\\n- **oj**: Ojibwa\\n- **or**: Oriya\\n- **om**: Oromo\\n- **os**: Ossetian; Ossetic\\n- **pa**: Panjabi; Punjabi\\n- **fa**: Persian\\n- **pi**: Pali\\n- **pl**: Polish\\n- **pt**: Portuguese\\n- **ps**: Pushto; Pashto\\n- **qu**: Quechua\\n- **rm**: Romansh\\n- **ro**: Romanian; Moldavian; Moldovan\\n- **rn**: Rundi\\n- **ru**: Russian\\n- **sg**: Sango\\n- **sa**: Sanskrit\\n- **si**: Sinhala; Sinhalese\\n- **sk**: Slovak\\n- **sl**: Slovenian\\n- **se**: Northern Sami\\n- **sm**: Samoan\\n- **sn**: Shona\\n- **sd**: Sindhi\\n- **so**: Somali\\n- **st**: Sotho, Southern\\n- **es**: Spanish; Castilian\\n- **sq**: Albanian\\n- **sc**: Sardinian\\n- **sr**: Serbian\\n- **ss**: Swati\\n- **su**: Sundanese\\n- **sw**: Swahili\\n- **sv**: Swedish\\n- **ty**: Tahitian\\n- **ta**: Tamil\\n- **tt**: Tatar\\n- **te**: Telugu\\n- **tg**: Tajik\\n- **tl**: Tagalog\\n- **th**: Thai\\n- **bo**: Tibetan\\n- **ti**: Tigrinya\\n- **to**: Tonga (Tonga Islands)\\n- **tn**: Tswana\\n- **ts**: Tsonga\\n- **tk**: Turkmen\\n- **tr**: Turkish\\n- **tw**: Twi\\n- **ug**: Uighur; Uyghur\\n- **uk**: Ukrainian\\n- **ur**: Urdu\\n- **uz**: Uzbek\\n- **ve**: Venda\\n- **vi**: Vietnamese\\n- **vo**: Volap\u00fck\\n- **cy**: Welsh\\n- **wa**: Walloon\\n- **wo**: Wolof\\n- **xh**: Xhosa\\n- **yi**: Yiddish\\n- **yo**: Yoruba\\n- **za**: Zhuang; Chuang\\n- **zh**: Chinese\\n- **zu**: Zulu", + "items": { + "$ref": "#/$defs/LanguageEnum" + }, + "title": "Language", + "type": "array" + }, + "format": { + "description": "If multiple formats are available please specify. See application, audio, image, message, model, multipart, text, video, https://www.iana.org/assignments/media-types/media-types.xhtml Note: If your file format is not included in the current list of formats, please indicate other. If you are using the HOP you will be directed to a service desk page where you can request your additional format. If not please go to: https://metadata.atlassian.net/servicedesk/customer/portal/4 to request your format.", + "examples": [ + "text/tab-separated-values", + "application/sql", + "text/csv", + "image/diacom-rle" + ], + "guidance": "- If multiple formats are available, please specify. See application, audio, image, message, model, multipart, text, video, .\\n- Please **enter one format type at a time** and click **Add New Field** to add further keywords.\\n- Note: If your file format is not included in the current list of formats, please indicate other.\\n- **Example**: text/tab-separated-values, application/sql, text/csv, image/diacom-rle", + "items": { + "$ref": "#/$defs/Format" + }, + "title": "Format", + "type": "array" + } + }, + "required": [ + "vocabularyEncodingScheme", + "conformsTo", + "language", + "format" + ], + "title": "FormatAndStandards", + "type": "object" + }, + "HealthAndDisease": { + "properties": { + "name": { + "Literal": true, + "default": "Health and disease", + "title": "Name", + "type": "string" + }, + "subTypes": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/HealthAndDiseaseSubTypes" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Subtypes" + } + }, + "required": [ + "subTypes" + ], + "title": "HealthAndDisease", + "type": "object" + }, + "HealthAndDiseaseSubTypes": { + "enum": [ + "Mental health", + "Cardiovascular", + "Cancer", + "Rare diseases", + "Metabolic and endocrine", + "Neurological", + "Reproductive", + "Maternity and neonatology", + "Respiratory", + "Immunity", + "Musculoskeletal", + "Vision", + "Renal and urogenital", + "Oral and gastrointestinal", + "Cognitive function", + "Hearing", + "Others" + ], + "title": "HealthAndDiseaseSubTypes", + "type": "string" + }, + "ImagingAreaOfTheBody": { + "properties": { + "name": { + "Literal": true, + "default": "Imaging Area Of The Body", + "title": "Name", + "type": "string" + }, + "subTypes": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/ImagingAreaOfTheBodySubTypes" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Subtypes" + } + }, + "required": [ + "subTypes" + ], + "title": "ImagingAreaOfTheBody", + "type": "object" + }, + "ImagingAreaOfTheBodySubTypes": { + "enum": [ + "Head", + "Chest", + "Arm", + "Abdomen", + "Leg", + "Others" + ], + "title": "ImagingAreaOfTheBodySubTypes", + "type": "string" + }, + "ImagingTypes": { + "properties": { + "name": { + "Literal": true, + "default": "Imaging types", + "title": "Name", + "type": "string" + }, + "subTypes": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/ImagingTypesSubTypes" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Subtypes" + } + }, + "required": [ + "subTypes" + ], + "title": "ImagingTypes", + "type": "object" + }, + "ImagingTypesSubTypes": { + "enum": [ + "CT", + "MRI", + "PET", + "X-ray", + "Ultrasound", + "Pathology", + "Others" + ], + "title": "ImagingTypesSubTypes", + "type": "string" + }, + "InformationAndCommunication": { + "properties": { + "name": { + "Literal": true, + "default": "Information and communication", + "title": "Name", + "type": "string" + }, + "subTypes": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/NotApplicableSubTypes" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Subtypes" + } + }, + "required": [ + "subTypes" + ], + "title": "InformationAndCommunication", + "type": "object" + }, + "Isocountrycode": { + "pattern": "^[A-Z]{2}(-[A-Z]{2,3})?$", + "title": "Isocountrycode", + "type": "string" + }, + "LanguageEnum": { + "enum": [ + "aa", + "ab", + "ae", + "af", + "ak", + "am", + "an", + "ar", + "as", + "av", + "ay", + "az", + "ba", + "be", + "bg", + "bh", + "bi", + "bm", + "bn", + "bo", + "br", + "bs", + "ca", + "ce", + "ch", + "co", + "cr", + "cs", + "cu", + "cv", + "cy", + "da", + "de", + "dv", + "dz", + "ee", + "el", + "en", + "eo", + "es", + "et", + "eu", + "fa", + "ff", + "fi", + "fj", + "fo", + "fr", + "fy", + "ga", + "gd", + "gl", + "gn", + "gu", + "gv", + "ha", + "he", + "hi", + "ho", + "hr", + "ht", + "hu", + "hy", + "hz", + "ia", + "id", + "ie", + "ig", + "ii", + "ik", + "io", + "is", + "it", + "iu", + "ja", + "jv", + "ka", + "kg", + "ki", + "kj", + "kk", + "kl", + "km", + "kn", + "ko", + "kr", + "ks", + "ku", + "kv", + "kw", + "ky", + "la", + "lb", + "lg", + "li", + "ln", + "lo", + "lt", + "lu", + "lv", + "mg", + "mh", + "mi", + "mk", + "ml", + "mn", + "mr", + "ms", + "mt", + "my", + "na", + "nb", + "nd", + "ne", + "ng", + "nl", + "nn", + "no", + "nr", + "nv", + "ny", + "oc", + "oj", + "om", + "or", + "os", + "pa", + "pi", + "pl", + "ps", + "pt", + "qu", + "rm", + "rn", + "ro", + "ru", + "rw", + "sa", + "sc", + "sd", + "se", + "sg", + "si", + "sk", + "sl", + "sm", + "sn", + "so", + "sq", + "sr", + "ss", + "st", + "su", + "sv", + "sw", + "ta", + "te", + "tg", + "th", + "ti", + "tk", + "tl", + "tn", + "to", + "tr", + "ts", + "tt", + "tw", + "ty", + "ug", + "uk", + "ur", + "uz", + "ve", + "vi", + "vo", + "wa", + "wo", + "xh", + "yi", + "yo", + "za", + "zh", + "zu" + ], + "title": "LanguageEnum", + "type": "string" + }, + "Lifestyle": { + "properties": { + "name": { + "Literal": true, + "default": "Lifestyle", + "title": "Name", + "type": "string" + }, + "subTypes": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/LifestyleSubTypes" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Subtypes" + } + }, + "required": [ + "subTypes" + ], + "title": "Lifestyle", + "type": "object" + }, + "LifestyleSubTypes": { + "enum": [ + "Smoking", + "Physical activity", + "Dietary habits", + "Alcohol", + "Others" + ], + "title": "LifestyleSubTypes", + "type": "string" + }, + "LongDescription": { + "anyOf": [ + { + "maxLength": 50000, + "minLength": 2, + "type": "string" + }, + { + "type": "null" + } + ], + "title": "LongDescription" + }, + "MaterialTypeCategoriesV2": { + "enum": [ + "None/not available", + "Bone marrow", + "Cancer cell lines", + "CDNA/MRNA", + "Core biopsy", + "DNA", + "Entire body organ", + "Faeces", + "Immortalized cell lines", + "Isolated pathogen", + "MicroRNA", + "Peripheral blood cells", + "Plasma", + "PM Tissue", + "Primary cells", + "RNA", + "Saliva", + "Serum", + "Swabs", + "Tissue", + "Urine", + "Whole blood", + "Availability to be confirmed", + "Other" + ], + "title": "MaterialTypeCategoriesV2", + "type": "string" + }, + "MeasuredProperty": { + "title": "MeasuredProperty" + }, + "MeasurementsTests": { + "properties": { + "name": { + "Literal": true, + "default": "Measurements/Tests", + "title": "Name", + "type": "string" + }, + "subTypes": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/MeasurementsTestsSubTypes" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Subtypes" + } + }, + "required": [ + "subTypes" + ], + "title": "MeasurementsTests", + "type": "object" + }, + "MeasurementsTestsSubTypes": { + "enum": [ + "Laboratory", + "Other diagnostics" + ], + "title": "MeasurementsTestsSubTypes", + "type": "string" + }, + "MemberOfV2": { + "enum": [ + "Hub", + "Alliance", + "Other", + "NCS" + ], + "title": "MemberOfV2", + "type": "string" + }, + "Name": { + "title": "Name" + }, + "NotApplicableSubTypes": { + "const": "Not applicable", + "title": "NotApplicableSubTypes" + }, + "Observation": { + "additionalProperties": false, + "properties": { + "observedNode": { + "allOf": [ + { + "$ref": "#/$defs/StatisticalPopulationConstrainedV2" + } + ], + "description": "Please select one of the following broad notes for your measured observation. Indicating whether the measured property is a recording of unique persons, events, findings or scans per modality.", + "examples": [ + "Persons" + ], + "guidance": "- **Persons**: Unique persons recorded in the dataset\\n- **Events**: Unique events such as procedures and prescriptions within the dataset\\n-**Findings**: Unique findings included in the dataset such as diagnoses'\\n-**Number of scans per modality**: Unique scans for a specified imaging method modality (e.g. 12 x-rays)", + "title": "Dataset volume measure" + }, + "measuredValue": { + "description": "An integer value size of the measured property, such as \u20181000\u2019 for 1000 people in the study or \u201887\u2019 for 87 MRI scans in the dataset.", + "examples": [ + 1000 + ], + "guidance": "An integer value size of the measured property, such as \u20181000\u2019 for 1000 people in the study or \u201887\u2019 for 87 MRI scans in the dataset.", + "title": "Measured value", + "type": "integer" + }, + "disambiguatingDescription": { + "anyOf": [ + { + "$ref": "#/$defs/AbstractText" + }, + { + "type": "null" + } + ], + "default": null, + "description": "If required, please provide additional details that help distinguish between similar measured properties within your dataset, for example this is useful when SNOMED CT terms do not provide sufficient detail to distinguish between parts of the dataset population. Limited to 500 characters.", + "guidance": "If required please provide additional details that help distinguish between similar measured properties within your dataset, for example this is useful when SNOMED CT terms do not provide sufficient detail to distinguish between parts of the dataset population.", + "title": "Disambiguating description" + }, + "observationDate": { + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "format": "date-time", + "type": "string" + } + ], + "description": "Provide the date, or datetime that the observation was made. Multiple observations of the same property can be provided, for example an observation of cumulative COVID positive cases by specimen on the 1/1/2021 with a measuredValue of 2000000, and a second observation entry on 8/2/2021 recording a measuredValue of as 3100000.", + "examples": [ + "2024-10-24" + ], + "guidance": "Provide the date, or datetime that the observation was made. Multiple observations of the same property can be provided, for example an observation of cumulative COVID positive cases by specimen on the 1/1/2021 with a measuredValue of 2000000, and a second observation entry on 8/2/2021 recording a measuredValue of as 3100000.", + "title": "Observation date" + }, + "measuredProperty": { + "allOf": [ + { + "$ref": "#/$defs/MeasuredProperty" + } + ], + "description": "Descriptive term for the observation property measured. For example, people, procedures, x-rays, or diagnosis of type 1 diabetes. This could also be a specific SNOMED CT term.", + "examples": [ + "Count" + ], + "guidance": "Descriptive term for the observation property measured.", + "title": "Measured property" + } + }, + "required": [ + "observedNode", + "measuredValue", + "observationDate", + "measuredProperty" + ], + "title": "Observation", + "type": "object" + }, + "Omics": { + "additionalProperties": false, + "properties": { + "assay": { + "anyOf": [ + { + "$ref": "#/$defs/Assay" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The specific 'omics assay that generated the dataset.", + "guidance": "The specific 'omics assay that generated the dataset. If the assay used to generate your dataset is not listed, please contract the gateway team by submitting an enquiry.", + "title": "Omics assay" + }, + "platform": { + "anyOf": [ + { + "$ref": "#/$defs/Platform" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The specific technology or infrastructure used to perform the assay. If the omics platform used to create your dataset is not listed, please select other, a member of the gateway team will contact you to add an appropriate term(s) both to your record and to the metadata schema on your behalf.", + "guidance": "The specific technology or infrastructure used to perform the assay. If the omics platform used to create your dataset is not listed, please select other, a member of the gateway team will contact you to add an appropriate term(s) both to your record and to the metadata schema on your behalf.", + "title": "Omics Platform" + } + }, + "title": "Omics", + "type": "object" + }, + "OmicsDataType": { + "properties": { + "name": { + "Literal": true, + "default": "Omics", + "title": "Name", + "type": "string" + }, + "subTypes": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/OmicsDataTypeSubTypes" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Subtypes" + } + }, + "required": [ + "subTypes" + ], + "title": "OmicsDataType", + "type": "object" + }, + "OmicsDataTypeSubTypes": { + "enum": [ + "Proteomics", + "Transcriptomics", + "Epigenomics", + "Metabolomics", + "Metagenomics", + "Genomics", + "Lipidomics", + "Others" + ], + "title": "OmicsDataTypeSubTypes", + "type": "string" + }, + "OneHundredFiftyCharacters": { + "maxLength": 150, + "minLength": 2, + "title": "OneHundredFiftyCharacters", + "type": "string" + }, + "Organisation": { + "additionalProperties": false, + "properties": { + "identifier": { + "anyOf": [ + { + "maxLength": 50, + "minLength": 2, + "type": "string" + }, + { + "type": "integer" + } + ], + "description": "Please provide a Research Organization Registry (ROR) identifier (see https://ror.org/) for your organisation.", + "examples": [ + "30f16703-28bc-4f45-9ce5-625d2d3db27d" + ], + "guidance": "**Example**: https://ror.org/053fq8t95\\nIf your organisation does not have a ROR identifier please use the \u201csuggest and institute\u201d function here: https://docs.google.com/forms/d/e/1FAIpQLSdJYaMTCwS7muuTa-B_CnAtCSkKzt19lkirAKG4u7umH9Nosg/viewform", + "title": "identifier" + }, + "name": { + "allOf": [ + { + "$ref": "#/$defs/OneHundredFiftyCharacters" + } + ], + "description": "The organisation responsible for running or supporting the data access request process, as well as publishing and maintaining the metadata.", + "examples": [ + "Health Data Research UK" + ], + "guidance": "In most this will be the same as the Team you have on the Gateway. However, in some cases this will be different. For example, Tissue Directory are a Team on the Gateway but coordinate activities across a number of Data Providers such as Cambridge Blood and Stem Cell Biobank.", + "title": "Name of Data Custodian" + }, + "logo": { + "anyOf": [ + { + "$ref": "#/$defs/Url" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please provide a logo associated with the Gateway Organisation using a valid URL. The following formats will be accepted .jpg, .png or .svg. If a logo is not submitted this will default to the logo for the team submitting the metadata.", + "title": "Organisation Logo" + }, + "description": { + "anyOf": [ + { + "$ref": "#/$defs/Description" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please provide a URL that describes the organisation. If a description is not provided this will default to the description of the team submitting the metadata.", + "title": "Organisation Description" + }, + "contactPoint": { + "anyOf": [ + { + "$ref": "#/$defs/EmailAddress" + }, + { + "items": { + "$ref": "#/$defs/EmailAddress" + }, + "type": "array" + } + ], + "description": "Organisation contact point(s) which will be used for receiving queries from HDR, and enquiries and data access requests from Researchers. If a contact point is not provided this will default to the contact point for the team submitting the metadata.", + "examples": [ + "test@test.co.uk" + ], + "title": "contact point" + }, + "memberOf": { + "anyOf": [ + { + "$ref": "#/$defs/MemberOfV2" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please indicate if the organisation is an Alliance Member or a Hub. If this field is not submitted this will default to the membership for the team submitting the metadata.", + "title": "Organisation Membership" + } + }, + "required": [ + "identifier", + "name", + "contactPoint" + ], + "title": "Organisation", + "type": "object" + }, + "Origin": { + "additionalProperties": false, + "properties": { + "purpose": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/PurposeV2" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please indicate the purpose(s) that the dataset was collected.", + "guidance": "- **Research cohort**: Data collected for a defined group of people.\\n- **Study**: Data collected for a specific research study.\\n- **Disease registry**: Data collected as part of a disease registry.\\n- **Trial**: Data collected for as part of a clinical trial.\\n- **Care**: Data collected as part of routine clinical care.\\n- **Audit**: Data collected as part of an audit programme.\\n- **Administrative**: Data collected for administrative and management information purposes.\\n- **Financial**: Data collected either for payments or for billing.\\n- **Statutory**: Data collected in compliance with statutory requirements.\\n- **Other**: Data collected for other purpose.", + "title": "Purpose of dataset collection" + }, + "datasetType": { + "description": "The topic areas to which the dataset content relates.", + "examples": [ + "Health and disease" + ], + "guidance": "Types include those listed below. Datasets can have more than one type associated.\\n- **Health and disease**: Includes any data related to mental health, cardiovascular, cancer, rare diseases, metabolic and endocrine, neurological, reproductive, maternity and neonatology, respiratory, immunity, musculoskeletal, vision, renal and urogenital, oral and gastrointestinal, cognitive function or hearing.\\n- **Treatments/Interventions**: Includes any data related to treatment or interventions related to vaccines or which are preventative or therapeutic in nature.\\n- **Measurements/Tests**: Includes any data related to laboratory or other diagnostics.\\n- **Imaging types**: Includes any data related to CT, MRI, PET, x-ray, ultrasound or pathology imaging.\\n- **Imaging area of the body**: Indicates whether the dataset relates to head, chest, arm abdomen or leg imaging.\\n- **Omics**: Includes any data related to proteomics, transcriptomics, epigenomics, metabolomics, multiomics, metagenomics or genomics.\\n- **Socioeconomic**: Includes any data related to education, crime and justice, ethnicity, housing, labour, ageing, economics, marital status, social support, deprivation, religion, occupation, finances or family circumstances.\\n- **Lifestyle**: Includes any data related to smoking, physical activity, dietary habits or alcohol.\\n- **Registry**: Includes any data related to disease registries for research, national disease registries, audits, or birth and deaths records.\\n- **Environment and energy**: Includes any data related to the monitoring or study of environmental or energy factors or events.\\n- **Information and communication**: Includes any data related to the study or application of information and communication.\\n- **Politics**: Includes any data related to political views, activities, voting, etc.", + "items": { + "anyOf": [ + { + "$ref": "#/$defs/HealthAndDisease" + }, + { + "$ref": "#/$defs/TreatmentsInterventions" + }, + { + "$ref": "#/$defs/MeasurementsTests" + }, + { + "$ref": "#/$defs/ImagingTypes" + }, + { + "$ref": "#/$defs/ImagingAreaOfTheBody" + }, + { + "$ref": "#/$defs/OmicsDataType" + }, + { + "$ref": "#/$defs/Socioeconomic" + }, + { + "$ref": "#/$defs/Lifestyle" + }, + { + "$ref": "#/$defs/Registry" + }, + { + "$ref": "#/$defs/EnvironmentAndEnergy" + }, + { + "$ref": "#/$defs/InformationAndCommunication" + }, + { + "$ref": "#/$defs/Politics" + } + ] + }, + "title": "Dataset type", + "type": "array" + }, + "source": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/SourceV2" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please indicate the source of the data extraction.", + "guidance": " - **EPR**: Data Extracted from Electronic Patient Record.\\n- **Electronic survey**: Data has been extracted from electronic surveys.\\n- **LIMS**: Data has been extracted from a laboratory information management system.\\n- **Paper-based**: Data has been extracted from paper forms.\\n- **Free text NLP**: Data has been extracted from unstructured freetext using natural language processing.\\n- **Machine generated**: Data has been machine generated i.e. imaging.\\n- **Other**: Data has been extracted by other means.", + "title": "Source of data extraction" + }, + "collectionSource": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/SettingV2" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please indicate the setting(s) where data was collected. Multiple settings may be provided.", + "guidance": "- **Cohort, study, trial**: Cohort, study or trial data collection as part of protocol.\\n- **Clinic**: Specific clinic such as antenatal clinic.\\n- **Primary care - Referrals**: General medical practitioner referral to another service.\\n- **Primary care - Clinic**: General medical practitioner practice.\\n- **Primary care - Out of hours**: General medical practitioner care or advice outside of standard hours.\\n- **Secondary care - Accident and emergency**: Accident emergency department.\\n- **Secondary care - Outpatients**: Outpatient care.\\n- **Secondary care - In-patients**: In-patient care.\\n- **Secondary care - Ambulance**: Care provided in association with ambulance service.\\n- **Secondary care - ICU**: Intensive care units, also referred to as critical care units (CCUs) or intensive therapy units (ITUs).\\n- **Prescribing - Community pharmacy**: Pharmacy based in the community.\\n- **Prescribing - Community pharmacy**: Pharmacy based in a hospital setting.\\n- **Patient report outcome**: Reported by patient.\\n- **Wearables**: Data collection devices worn on the body.\\n- **Local authority**: Local authority or entity associated with a local authority.\\n- **National government**: National government or entity associated with the national government.\\n- **Community**: Community settings.\\n- **Services**: Services such as drug misuse or blood transfusion.\\n- **Home**: Home setting.\\n- **Private**: Private medical clinic.\\n- **Social care - Health care at home**: service provided in the home or residence of a person.\\n- **Social care - Other social data**: service provided in a setting outside of the person's home or residence.\\n- **Census**: collected as part of census.\\n- **Other**: Other setting.", + "title": "Collection source setting" + }, + "imageContrast": { + "anyOf": [ + { + "$ref": "#/$defs/Ternary" + }, + { + "type": "null" + } + ], + "default": "Not stated", + "description": "Indicate whether usage of imaging contrast is captured within the dataset.", + "guidance": "If any contrast media or contrast agents were used in creating the images within the dataset and the contrast is known, mark 'Yes'. If this information is not known or not captured, indicate 'Not stated'. If there was no contrast used in the images, mark 'No'.", + "title": "Image contrast" + } + }, + "required": [ + "datasetType" + ], + "title": "Origin", + "type": "object" + }, + "OtherDataType": { + "additionalProperties": false, + "properties": { + "title": { + "allOf": [ + { + "$ref": "#/$defs/OneHundredFiftyCharacters" + } + ], + "examples": [ + "Mammograms", + "Patient recordings" + ], + "guidance": "Short descriptive titles", + "title": "Title" + }, + "description": { + "allOf": [ + { + "$ref": "#/$defs/ShortDescription" + } + ], + "examples": [ + "2D images of both normal and malignant breasts", + "audio-tapes of oncology consultations" + ], + "guidance": "A description of the data type.", + "title": "Data description" + }, + "format": { + "allOf": [ + { + "$ref": "#/$defs/Format" + } + ], + "description": "Format drawn from https://www.iana.org/assignments/media-types/media-types.xhtml.", + "guidance": "https://www.iana.org/assignments/media-types/media-types.xhtml lists the commonly used formats for different media (such as video/image/audio) etc. If your format is not included in the list set out there, please indicate other and specify in the description." + } + }, + "required": [ + "title", + "description", + "format" + ], + "title": "OtherDataType", + "type": "object" + }, + "PeriodicityV2": { + "enum": [ + "Static", + "Irregular", + "Continuous", + "Biennial", + "Annual", + "Biannual", + "Quarterly", + "Bimonthly", + "Monthly", + "Biweekly", + "Weekly", + "Twice a week", + "Daily", + "Other", + null + ], + "title": "PeriodicityV2" + }, + "Pipeline": { + "enum": [ + "Available", + "Not available" + ], + "title": "Pipeline", + "type": "string" + }, + "Platform": { + "enum": [ + "Other", + "NMR Nightingale", + "Metabolon", + "Biocrates", + "Illumina", + "Oxford Nanopore", + "454", + "Hi-C", + "HiFi" + ], + "title": "Platform", + "type": "string" + }, + "Politics": { + "properties": { + "name": { + "Literal": true, + "default": "Politics", + "title": "Name", + "type": "string" + }, + "subTypes": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/NotApplicableSubTypes" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Subtypes" + } + }, + "required": [ + "subTypes" + ], + "title": "Politics", + "type": "object" + }, + "ProjectGrant": { + "properties": { + "pid": { + "anyOf": [ + { + "$ref": "#/$defs/OneHundredFiftyCharacters" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Persistent identifier of the study" + }, + "projectGrantName": { + "allOf": [ + { + "$ref": "#/$defs/OneHundredFiftyCharacters" + } + ], + "description": "The Project Grant Title should be unique to the CRUK datahub. (Add your institute or name if necessary to disambiguate).", + "title": "Project Grant Title" + }, + "leadResearcher": { + "allOf": [ + { + "$ref": "#/$defs/OneHundredFiftyCharacters" + } + ], + "examples": [ + "Dr Smith" + ], + "title": "Lead Researcher" + }, + "leadResearchInstitute": { + "allOf": [ + { + "$ref": "#/$defs/OneHundredFiftyCharacters" + } + ], + "examples": [ + "Sussex University" + ], + "title": "Lead Research Institute" + }, + "grantNumber": { + "description": "List of CRUK and any other grant numbers.", + "examples": [ + "ABC123" + ], + "guidance": "Normally specified on the grant acceptance letter", + "title": "Grant number(s)", + "type": "string" + }, + "projectGrantStartDate": { + "description": "Starting date of projectGrant grant.", + "guidance": "Date on which the dataset projectGrant starts. This is normally set out in the grant contract and will be different from the start of any data collection", + "title": "Project Start Date", + "type": "string" + }, + "projectGrantEndDate": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Current end date of project grant.", + "guidance": "Date on which the dataset project is currently projected to finish. This is normally set out in the grant contract and will be different from the end of any data collection", + "title": "Project End Date" + }, + "projectGrantScope": { + "anyOf": [ + { + "maxLength": 500, + "minLength": 5, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "data and biospecimens expected to result from the grant.", + "examples": [ + "Longitudinal genomic data including somatic mutations" + ], + "guidance": "Short paragraph setting out the types of data / biospecimens likely to result from the grant and the cancers covered", + "title": "Project Scope" + } + }, + "required": [ + "projectGrantName", + "leadResearcher", + "leadResearchInstitute", + "grantNumber", + "projectGrantStartDate", + "projectGrantEndDate" + ], + "title": "ProjectGrant", + "type": "object" + }, + "Provenance": { + "additionalProperties": false, + "properties": { + "origin": { + "anyOf": [ + { + "$ref": "#/$defs/Origin" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Coverage by origin (geographical and situations).", + "title": "Origin Coverage" + }, + "temporal": { + "allOf": [ + { + "$ref": "#/$defs/Temporal" + } + ], + "description": "Dates and other temporal coverage information.", + "title": "Temporal Coverage" + } + }, + "required": [ + "temporal" + ], + "title": "Provenance", + "type": "object" + }, + "PurposeV2": { + "enum": [ + "Research cohort", + "Study", + "Disease registry", + "Trial", + "Care", + "Audit", + "Administrative", + "Financial", + "Statutory", + "Other", + null + ], + "title": "PurposeV2" + }, + "Registry": { + "properties": { + "name": { + "Literal": true, + "default": "Registry", + "title": "Name", + "type": "string" + }, + "subTypes": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/RegistrySubTypes" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Subtypes" + } + }, + "required": [ + "subTypes" + ], + "title": "Registry", + "type": "object" + }, + "RegistrySubTypes": { + "enum": [ + "Disease registry (research)", + "National disease registries and audits", + "Births and deaths", + "Others" + ], + "title": "RegistrySubTypes", + "type": "string" + }, + "Revision": { + "additionalProperties": false, + "properties": { + "version": { + "allOf": [ + { + "$ref": "#/$defs/Semver" + } + ], + "description": "Version number used for previous version of this dataset", + "examples": [ + "6.0.0" + ], + "title": "revision version" + }, + "url": { + "anyOf": [ + { + "$ref": "#/$defs/Url" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Some url with a reference to the record of a previous version of this dataset", + "examples": [ + "https://api.service.nhs.uk/health-research-data-catalogue/datasetrevisions/841f7da2-b018-41f6-b4ae-2e0aadab6561" + ], + "title": "revision url" + } + }, + "required": [ + "version" + ], + "title": "Revision", + "type": "object" + }, + "Semver": { + "pattern": "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$", + "title": "Semver", + "type": "string" + }, + "SettingV2": { + "enum": [ + "Cohort, study, trial", + "Clinic", + "Primary care - Referrals", + "Primary care - Clinic", + "Primary care - Out of hours", + "Secondary care - Accident and Emergency", + "Secondary care - Outpatients", + "Secondary care - In-patients", + "Secondary care - Ambulance", + "Secondary care - ICU", + "Prescribing - Community pharmacy", + "Prescribing - Hospital", + "Patient report outcome", + "Wearables", + "Local authority", + "National government", + "Community", + "Services", + "Home", + "Private", + "Social care - Health care at home", + "Social care - Other social data", + "Census", + "Other", + null + ], + "title": "SettingV2" + }, + "ShortDescription": { + "anyOf": [ + { + "maxLength": 1000, + "minLength": 2, + "type": "string" + }, + { + "type": "null" + } + ], + "title": "ShortDescription" + }, + "Socioeconomic": { + "properties": { + "name": { + "Literal": true, + "default": "Socioeconomic", + "title": "Name", + "type": "string" + }, + "subTypes": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/SocioeconomicSubTypes" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Subtypes" + } + }, + "required": [ + "subTypes" + ], + "title": "Socioeconomic", + "type": "object" + }, + "SocioeconomicSubTypes": { + "enum": [ + "Education", + "Crime and justice", + "Ethnicity", + "Housing", + "Labour", + "Ageing", + "Economics", + "Marital status", + "Social support", + "Deprivation", + "Religion", + "Occupation", + "Finances", + "Family circumstance", + "Others" + ], + "title": "SocioeconomicSubTypes", + "type": "string" + }, + "SourceV2": { + "enum": [ + "EPR", + "Electronic survey", + "LIMS", + "Paper-based", + "Free text NLP", + "Machine generated", + "Other" + ], + "title": "SourceV2", + "type": "string" + }, + "StandardisedDataModelsEnum": { + "enum": [ + "HL7 FHIR", + "HL7 V2", + "HL7 CDA", + "HL7 CCOW", + "LOINC", + "DICOM", + "I2B2", + "IHE", + "OMOP", + "OPENEHR", + "SENTINEL", + "PCORNET", + "CDISC", + "NHS DATA DICTIONARY", + "NHS SCOTLAND DATA DICTIONARY", + "NHS WALES DATA DICTIONARY", + "LOCAL", + "OTHER" + ], + "title": "StandardisedDataModelsEnum", + "type": "string" + }, + "StatisticalPopulationConstrainedV2": { + "enum": [ + "Persons", + "Events", + "Findings", + "Number of scans per modality" + ], + "title": "StatisticalPopulationConstrainedV2", + "type": "string" + }, + "StructuralMetadata": { + "additionalProperties": false, + "properties": { + "tables": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/DataTable" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Tables in the dataset", + "title": "Tables" + }, + "syntheticDataWebLink": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/Url" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please provide the website address(es) with information on your synthetic dataset creation, or the location where a synthetic version of the dataset can be accessed.\\n- Please split your existing list of citations into separate fields.\\n- To add multiple entries, select from the drop-down list, or add to the drop-down. Click the 'x' symbol to remove any entries.\\n- **Example**: https://www.pioneerdatahub.co.uk/dataset/synthetic-dataset-patients-at-risk-of-sudden-death-hypertrophic-cardiomyopathy/", + "title": "Synthetic data web links" + } + }, + "title": "StructuralMetadata", + "type": "object" + }, + "Summary": { + "additionalProperties": false, + "properties": { + "title": { + "allOf": [ + { + "$ref": "#/$defs/OneHundredFiftyCharacters" + } + ], + "description": "Title of the dataset limited to 150 characters. It should provide a short description of the dataset and be unique across the gateway. If your title is not unique, please add a prefix with your organisation name or identifier to differentiate it from other datasets within the Gateway. Good titles should summarise the content of the dataset and if relevant, the region the dataset covers.", + "examples": [ + "North West London COVID-19 Patient Level Situation Report", + "Scottish Morbidity Record (SMR)" + ], + "guidance": "- The **title** should provide a short description of the dataset and be **unique** across the gateway.\\n- If your title is not unique, please **add a prefix with your organisation name or identifier** to differentiate it from other datasets within the Gateway.\\n- If an accronym is widely used the dataset name, please add it in brackets () at the end of the title.\\n- Good titles should summarise the content of the dataset and if relevant, **the region the dataset covers**.\\n- **Example**: North West London COVID-19 Patient Level Situation Report", + "title": "Title" + }, + "leadResearcher": { + "allOf": [ + { + "$ref": "#/$defs/OneHundredFiftyCharacters" + } + ], + "default": null, + "description": "Lead for the dataset. This need not be the same as the lead for the underlying grant", + "examples": [ + "Professor Karen Blogs", + "Dr A Dataset" + ], + "title": "Lead Researcher" + }, + "leadResearchInstitute": { + "allOf": [ + { + "$ref": "#/$defs/OneHundredFiftyCharacters" + } + ], + "default": null, + "examples": [ + "Sussex University" + ], + "title": "Lead Research Institute", + "description": "" + }, + "abstract": { + "allOf": [ + { + "$ref": "#/$defs/AbstractText" + } + ], + "description": "Provide a clear and brief descriptive signpost for researchers who are searching for data that may be relevant to their research. The abstract should allow the reader to determine the scope of the data collection and accurately summarise its content. The optimal length is one paragraph (limited to 255 characters) and effective abstracts should avoid long sentences and abbreviations where possible.", + "examples": [ + "CPRD Aurum contains primary care data contributed by General Practitioner (GP) practices using EMIS Web\u00ae including patient registration information and all care events that GPs have chosen to record as part of their usual medical practice." + ], + "guidance": "- The abstract should provide a **clear and brief descriptive** signpost for researchers who are searching for data that may be relevant to their research.\\n- The abstract should allow the reader to determine the **scope of the data collection and accurately summarise its content**.\\n- Effective abstracts should **avoid long sentences and abbreviations** where possible.\\n- **Note**: Researchers will view Titles and the first line of Abstracts (list view) when searching for datasets and choosing whether to explore their content further.\\n- **Abstracts should be different from the full description** for a dataset.\\n- **Example**: CPRD Aurum contains primary care data contributed by General Practitioner (GP) practices using EMIS Web\u00ae including patient registration information and all care events that GPs have chosen to record as part of their usual medical practice.", + "title": "Dataset abstract" + }, + "dataCustodian": { + "allOf": [ + { + "$ref": "#/$defs/Organisation" + } + ], + "description": "This is the organisation responsible for running or supporting the data access request process, as well as enquiries about a dataset. In most this will be the same as the HDR UK Organisation (Hub or Alliance Member). However, in some cases this will be different i.e. Tissue Directory are an HDR UK Gateway organisation but coordinate activities across a number of data publishers i.e. Cambridge Blood and Stem Cell Biobank.", + "title": "Dataset Custodian" + }, + "populationSize": { + "description": "Input the number of people captured within the dataset.", + "examples": [ + 1000 + ], + "guidance": "This number informs a filter for Researchers to differentiate dataset search results based on the number of people in the dataset, and does not pull from the **Observations** fields. The filter also allows for Researchers to search datasets which have no population size reported, but will **not** pull any population size captured in the **Observations** section.", + "title": "Dataset population size", + "type": "integer" + }, + "keywords": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/OneHundredFiftyCharacters" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please provide a list of relevant and specific keywords that can improve the search engine optimisation (SEO) of your dataset as a comma separated list. Notes: Onboarding portal will suggest keywords based on title, abstract and description. We are compiling a standardised list of keywords and synonyms across datasets to make filtering easier for users.", + "examples": [ + "Outpatient Care", + "Socioeconomic Deprivation", + "Infant Morbidity", + "Learning disability", + "Primary Care Prescription", + "Accident and Emergency Admissions" + ], + "guidance": "- Please provide **relevant** and **specific keywords** that can **improve the search engine optimization** of your dataset.\\n- Please **enter one keyword at a time** and click **Add New Field** to add further keywords.\\n- Text from the title is automatically included in the search, there is no need to include this in the keywords.\\n- Include words that researcher may include in their searches.", + "title": "Keywords" + }, + "doiName": { + "anyOf": [ + { + "$ref": "#/$defs/Doi" + }, + { + "type": "null" + } + ], + "default": null, + "description": "DOI associated to this dataset. Find out more about DOIs here: [https://www.doi.org/the-identifier/what-is-a-doi/](https://www.doi.org/the-identifier/what-is-a-doi/)", + "examples": [ + "10.1093/ije/dyx196" + ], + "guidance": "- Please note: This is **not** the DOI of the publication(s) associated with the dataset.\\n- All HDR UK registered **datasets** should either have a **(DOI)** or be working towards obtaining one.\\n- If a DOI is available, please provide the DOI.\\n- **What happens if I do not have a DOI?**: Contact your academic organisation to find out if there is an existing relationship with a DOI provider. If that is not available, sites such as figshare offer free services to mint a DOI for your dataset. Subsequent versions of the Metadata Exchange will provide a DOI minting service.", + "title": "Digital Object Identifier (DOI) for dataset" + }, + "contactPoint": { + "allOf": [ + { + "$ref": "#/$defs/EmailAddress" + } + ], + "description": "Please provide a valid email address that can be used to coordinate data access requests.", + "examples": [ + "gateway@hdruk.ac.uk" + ], + "guidance": "Organisations are expected to provide a dedicated email address associated with the data access request process. If no contact point is provided in this field, this field will be defaulted to the teams support email provided in the teams setting.\\n**Note:** An employee's email address can only be provided on a temporary basis and if one is provided, **you must obtain explicit consent for this purpose**.", + "title": "Contact point" + }, + "datasetAliases": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "items": { + "anyOf": [ + { + "$ref": "#/$defs/ShortDescription" + }, + { + "type": "null" + } + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Dataset & BioSample alias or alternate names.", + "guidance": "Alternate name, acronym or other identifier for the Dataset and/or BioSamples.", + "title": "Dataset & BioSample alias" + } + }, + "required": [ + "title", + "abstract", + "dataCustodian", + "populationSize", + "contactPoint" + ], + "title": "Summary", + "type": "object" + }, + "Temporal": { + "additionalProperties": false, + "properties": { + "publishingFrequency": { + "allOf": [ + { + "$ref": "#/$defs/PeriodicityV2" + } + ], + "description": "Please indicate the frequency of distribution release. If a dataset is distributed regularly please choose a distribution release periodicity from the constrained list and indicate the next release date. When the release date becomes historical, a new release date will be calculated based on the publishing periodicity. If a dataset has been published and will remain static please indicate that it is static and indicated when it was released. If a dataset is released on an irregular basis or \u201con-demand\u201d please indicate that it is Irregular and leave release date as null. If a dataset can be published in real-time or near-real-time please indicate that it is continuous and leave release date as null. Notes: see https://www.dublincore.org/specifications/dublin-core/collection-description/frequency/", + "examples": [ + "Continuous" + ], + "guidance": "Please indicate the frequency of publishing.\\n- If a dataset is published regularly please choose a publishing periodicity from the constrained list and indicate the next release date.\\n- When the release date becomes historical, a new release date will be calculated based on the publishing periodicity.\\n- If a dataset has been published and will remain static please indicate that it is static and indicate when it was released.\\n- If a dataset is released on an irregular basis or \u201con-demand\u201d please indicate that it is Irregular and leave release date as null.\\n- If a dataset can be published in real-time or near-real-time please indicate that it is continuous and leave release date as null.\\n- Notes: see https://www.dublincore.org/specifications/dublin-core/collection-description/frequency/.\\n\\n Options:\\n- **Static**: Dataset published once.\\n- **Irregular**: Dataset published at uneven intervals.\\n- **Continuous**: Dataset published without interruption.\\n- **Biennial**: Dataset published every two years.\\n- **Annual**: Dataset published occurs once a year.\\n- **Biannual**: Dataset published twice a year.\\n- **Quarterly**: Dataset published every three months.\\n- **Bimonthly**: Dataset published every two months.\\n- **Monthly**: Dataset published once a month.\\n- **Biweekly**: Dataset published every two weeks.\\n- **Weekly**: Dataset published once a week.\\n- **Twice weekly**: Dataset published twice a week.\\n- **Daily**: Dataset published once a day.\\n- **Other**: Dataset published using other interval.", + "title": "Publishing frequency" + }, + "distributionReleaseDate": { + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Date of the latest release of the dataset. If this is a regular release i.e. quarterly, or this is a static dataset please complete this alongside Periodicity. If this is Irregular or Continuously released please leave this blank. Notes: Periodicity and release date will be used to determine when the next release is expected. E.g. if the release date is documented as 01/01/2020 and it is now 20/04/2020 and there is a quarterly release schedule, the latest release will be calculated as 01/04/2020.", + "examples": [ + "2024-10-24T00:00:00.000Z" + ], + "guidance": "- Please indicate the frequency the dataset is published.\\n- If a dataset is published regularly please choose a publishing periodicity from the constrained list and indicate the next release date.\\n- When the release date becomes historical, a new release date will be calculated based on the publishing periodicity.\\n- If a dataset has been published and will remain static please indicate that it is static and indicate when it was released.\\n- If a dataset is released on an irregular basis or \u201con-demand\u201d please indicate that it is Irregular and leave release date as null.\\n- If a dataset can be published in real-time or near-real-time please indicate that it is continuous and leave release date as null.\\n- Notes: see [https://www.dublincore.org/specifications/dublin-core/collection-description/frequency/](https://www.dublincore.org/specifications/dublin-core/collection-description/frequency/)", + "title": "Distribution release date" + }, + "startDate": { + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "format": "date-time", + "type": "string" + } + ], + "description": "The start of the time period that the dataset provides coverage for. If there are multiple cohorts in the dataset with varying start dates, please provide the earliest date and use the description or the media attribute to provide more information.", + "examples": [ + "2024-10-24T00:00:00.000Z" + ], + "guidance": "- The start of the time period that the dataset provides coverage for.\\n- If there are multiple cohorts in the dataset with varying start dates, please provide the earliest date and use the description or the media attribute to provide more information.", + "title": "Start date" + }, + "endDate": { + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "format": "date-time", + "type": "string" + }, + { + "$ref": "#/$defs/EndDateEnum" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The end of the time period that the dataset provides coverage for. If the dataset is \u201cContinuous\u201d and has no known end date, please state continuous. If there are multiple cohorts in the dataset with varying end dates, please provide the latest date and use the description or the media attribute to provide more information.", + "examples": [ + "2024-10-24T00:00:00.000Z" + ], + "guidance": "- The end of the time period that the dataset provides coverage for.\\n- If the dataset is **\u201cContinuous\u201d** and has no known end date, **please leave blank**.\\n- If there are **multiple cohorts** in the dataset with varying end dates, please provide the **latest date**.", + "title": "End date" + }, + "timeLag": { + "allOf": [ + { + "$ref": "#/$defs/TimeLagV2" + } + ], + "description": "Please indicate the typical time-lag between an event and the data for that event appearing in the dataset.", + "examples": [ + "Not applicable" + ], + "guidance": "Please indicate the typical time-lag between an event and the data for that event appearing in the dataset.\\n- **Less than 1 week**: Typical time lag of less than a week.\\n- **1-2 weeks**: Typical time-lag of one to two weeks.\\n- **2-4 weeks**: Typical time-lag of two to four weeks.\\n- **1-2 months**: Typical time-lag of one to two months.\\n- **2-6 months**: Typical time-lag of two to six months.\\n- **6 months plus**: Typical time-lag of more than six months.\\n- **Variable**: Variable time-lag.\\n- **Not applicable**: Not Applicable i.e. static dataset.\\n- **Other**: Other time-lag.", + "title": "Time lag" + } + }, + "required": [ + "publishingFrequency", + "startDate", + "timeLag" + ], + "title": "Temporal", + "type": "object" + }, + "Ternary": { + "enum": [ + "Yes", + "No", + "Not stated" + ], + "title": "Ternary", + "type": "string" + }, + "TimeLagV2": { + "enum": [ + "Less than 1 week", + "1-2 weeks", + "2-4 weeks", + "1-2 months", + "2-6 months", + "More than 6 months", + "Variable", + "Not applicable", + "Other" + ], + "title": "TimeLagV2", + "type": "string" + }, + "TreatmentsInterventions": { + "properties": { + "name": { + "Literal": true, + "default": "Treatments/Interventions", + "title": "Name", + "type": "string" + }, + "subTypes": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/TreatmentsInterventionsSubTypes" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Subtypes" + } + }, + "required": [ + "subTypes" + ], + "title": "TreatmentsInterventions", + "type": "object" + }, + "TreatmentsInterventionsSubTypes": { + "enum": [ + "Vaccines", + "Preventive", + "Therapeutic", + "Others" + ], + "title": "TreatmentsInterventionsSubTypes", + "type": "string" + }, + "Url": { + "anyOf": [ + { + "format": "uri", + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Url" + }, + "Usage": { + "additionalProperties": false, + "properties": { + "dataUseLimitation": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/DataUseLimitationV2" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please provide an indication of consent permissions for datasets and/or materials, and relates to the purposes for which datasets and/or material might be removed, stored or used. NOTE: we have extended the Data Use Ontology to include a value for NO LINKAGE.", + "guidance": "Please provide an indication of consent permissions for datasets and/or materials, and relates to the purposes for which datasets and/or material might be removed, stored or used.\\n- **General research use**: This data use limitation indicates that use is allowed for general research use for any research purpose.\\n- **Genetic studies only**: This data use limitation indicates that use is limited to genetic studies only (i.e., no phenotype-only research).\\n- **No general methods research**: This data use limitation indicates that use includes methods development research(e.g., development of software or algorithms) only within the bounds of other use limitations.\\n- **No restriction**: This data use limitation indicates there is no restriction on use.\\n- **Research-specific restrictions**: This data use limitation indicates that use is limited to studies of a certain research type.\\n- **Research use only**: This data use limitation indicates that use is limited to research purposes (e.g., does not include its use in clinical care).\\n- **No linkage**: This data use limitation indicates there is a restriction on linking to any other datasets", + "title": "Data use limitation" + }, + "dataUseRequirements": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/DataUseRequirementsV2" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please indicate fit here are any additional conditions set for use if any, multiple requirements may be provided. Please ensure that these restrictions are documented in access rights information.", + "guidance": "- Please indicate if there are any additional conditions set for use if any, multiple requirements may be provided.\\n- Please ensure that these restrictions are documented in access rights information.\\n- **Collaboration required**: This requirement indicates that the requestor must either agree to join a research consortium or collaborate with the primary study investigator(s).\\n- **Ethics approval required**: This requirement indicates that the requestor must provide documentation of local institutional review board (IRB)/ ethics review board (ERB) approval.\\n- **Geographical restrictions**: This requirement indicates that use is limited to within a specific geographic region.\\n- **Institution-specific restrictions**: This requirement indicates that use is limited to use within an approved institution.\\n- **Not for profit use**: This requirement indicates that use of the data is limited to not-for-profit organizations and not-for-profit use, non-commercial use.\\n- **Project-specific restrictions**: This requirement indicates that use is limited to use within an approved project.\\n- **Publication moratorium**: This requirement indicates that requestor agrees not to publish results of studies until a specific date.\\n- **Publication required**: This requirement indicates that requestor agrees to make results of studies using the data available to the larger scientific community.\\n- **Return to database or resource**: This requirement indicates that the requestor must return derived/enriched data to the database/resource.\\n- **Time limit on use**: This requirement indicates that use is approved for a specific number of months.\\n- **User-specific restriction**: This requirement indicates that use is limited to use by approved users.", + "title": "Data use requirements" + }, + "resourceCreator": { + "anyOf": [ + { + "$ref": "#/$defs/ShortDescription" + }, + { + "items": { + "anyOf": [ + { + "$ref": "#/$defs/ShortDescription" + }, + { + "type": "null" + } + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please provide the text that you would like included as part of any citation that credits this dataset. This is typically just the name of the publisher. No employee details should be provided.", + "examples": [ + "National Services Scotland" + ], + "guidance": "- Please provide the text that you would like included as part of any citation that credits this dataset.\\n- This is typically just the name of the publisher. No employee details should be provided.\\n- To add multiple entries, please click on **'+' symbol** to enter each separate website.\\n- **Example**: National Services Scotland", + "title": "Citation requirements" + } + }, + "title": "Usage", + "type": "object" + }, + "Uuidv4": { + "maxLength": 36, + "minLength": 36, + "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$", + "title": "Uuidv4", + "type": "string" + } + }, + "additionalProperties": false, + "properties": { + "identifier": { + "anyOf": [ + { + "$ref": "#/$defs/Uuidv4" + }, + { + "$ref": "#/$defs/Url" + }, + { + "type": "null" + } + ], + "description": "System dataset identifier.", + "examples": [ + "226fb3f1-4471-400a-8c39-2b66d46a39b6", + "https://web.www.healthdatagateway.org/dataset/226fb3f1-4471-400a-8c39-2b66d46a39b6" + ], + "guidance": "N/A", + "title": "Dataset identifier" + }, + "version": { + "allOf": [ + { + "$ref": "#/$defs/Semver" + } + ], + "description": "Dataset metadata version.", + "examples": [ + "1.1.0" + ], + "guidance": "Dataset metadata version should follow standard SEMVER naming conventions (https://semver.org). For example: 1.1.0 major.minor.patch.\\nMajor: Significant/breaking changes.\\nMinor: New features and bug fixes.\\nPatch: Minor fixes without new features.", + "title": "Dataset Version" + }, + "revisions": { + "description": "A list of persistent identifiers and version numbers for previous versions of metadata for this dataset", + "items": { + "$ref": "#/$defs/Revision" + }, + "title": "Metadata Version Revisions", + "type": "array" + }, + "issued": { + "description": "Datetime stamp of when this metadata version was initially issued", + "examples": [ + "2024-10-24T00:00:00.000Z" + ], + "format": "date-time", + "title": "Metadata Issued Datetime", + "type": "string" + }, + "modified": { + "description": "Datetime stamp of when this metadata was last modified", + "examples": [ + "2024-10-24T00:00:00.000Z" + ], + "format": "date-time", + "title": "Last Modified Datetime", + "type": "string" + }, + "summary": { + "allOf": [ + { + "$ref": "#/$defs/Summary" + } + ], + "description": "Summary of metadata describing key pieces of information." + }, + "documentation": { + "anyOf": [ + { + "$ref": "#/$defs/Documentation" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Documentation can include a rich text description of the dataset or links to media such as documents, images, presentations, videos or links to data dictionaries, profiles or dashboards. Organisations are required to confirm that they have permission to distribute any additional media.", + "title": "Documentation" + }, + "coverage": { + "anyOf": [ + { + "$ref": "#/$defs/Coverage" + }, + { + "type": "null" + } + ], + "default": null, + "description": "This information includes attributes for geographical and temporal coverage, cohort details etc. to enable a deeper understanding of the dataset content so that researchers can make decisions about the relevance of the underlying data.", + "title": "Coverage" + }, + "provenance": { + "anyOf": [ + { + "$ref": "#/$defs/Provenance" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Provenance information allows researchers to understand data within the context of its origins and can be an indicator of quality, authenticity and timeliness.", + "title": "Provenance" + }, + "accessibility": { + "allOf": [ + { + "$ref": "#/$defs/Accessibility" + } + ], + "description": "Accessibility information allows researchers to understand access, usage, limitations, formats, standards and linkage or interoperability with toolsets." + }, + "enrichmentAndLinkage": { + "anyOf": [ + { + "$ref": "#/$defs/EnrichmentAndLinkage" + }, + { + "type": "null" + } + ], + "default": null, + "description": "This section includes information about related datasets that may have previously been linked, as well as indicating if there is the opportunity to link to other datasets in the future. If a dataset has been enriched and/or derivations, scores and existing tools are available this section allows providers to indicate this to researchers.", + "title": "Enrichment and Linkage" + }, + "observations": { + "description": "This section provides an overview of observations of your dataset linked to specific points in time. Multiple observations about the dataset are encouraged to be provided, including multiple observations of the same property at different timepoints. At least one observation is required.", + "items": { + "$ref": "#/$defs/Observation" + }, + "title": "Observations", + "type": "array" + }, + "structuralMetadata": { + "anyOf": [ + { + "$ref": "#/$defs/StructuralMetadata" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Descriptions of all tables and data elements that can be included in the dataset.", + "title": "Structural metadata" + }, + "demographicFrequency": { + "anyOf": [ + { + "$ref": "#/$defs/DemographicFrequency" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The statistical characteristics of a population or group within the dataset.", + "title": "Demographic frequency" + }, + "omics": { + "anyOf": [ + { + "$ref": "#/$defs/Omics" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Omics", + "title": "Omics" + }, + "datasetFilters": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/DatasetFilter" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Dataset Filters" + }, + "icons": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Calculated categorization icons added during export.", + "title": "Icons" + }, + "erd": { + "anyOf": [ + { + "$ref": "#/$defs/Url" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Visual representation of data table relationships.", + "guidance": "Please upload an image file (max 5MB) showing the relationship between the different tables", + "title": "Entity Relationship Diagram" + }, + "projectGrants": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/ProjectGrant" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Associated Project Grants" + }, + "otherDataTypes": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/OtherDataType" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Other data types" + } + }, + "required": [ + "identifier", + "version", + "revisions", + "issued", + "modified", + "summary", + "accessibility", + "observations" + ], + "title": "Cruk100", + "type": "object" +} \ No newline at end of file diff --git a/hdr_schemata/models/CRUK/__init__.py b/hdr_schemata/models/CRUK/__init__.py new file mode 100644 index 00000000..37ace5f8 --- /dev/null +++ b/hdr_schemata/models/CRUK/__init__.py @@ -0,0 +1,2 @@ +from .v1_0_0 import Cruk100 + diff --git a/hdr_schemata/models/CRUK/create_json_schema.py b/hdr_schemata/models/CRUK/create_json_schema.py new file mode 100644 index 00000000..0e8c866b --- /dev/null +++ b/hdr_schemata/models/CRUK/create_json_schema.py @@ -0,0 +1,4 @@ +import v1_0_0 + +v1_0_0.Cruk100.save_schema() + diff --git a/hdr_schemata/models/CRUK/v1_0_0/__init__.py b/hdr_schemata/models/CRUK/v1_0_0/__init__.py new file mode 100644 index 00000000..9be14877 --- /dev/null +++ b/hdr_schemata/models/CRUK/v1_0_0/__init__.py @@ -0,0 +1,226 @@ +import json +from typing import List, Literal, Optional + +from pydantic import BaseModel, Field, constr + +from hdr_schemata.definitions.HDRUK import ( + Format, + OneHundredFiftyCharacters, + ShortDescription, + Url, +) +from hdr_schemata.models.HDRUK.v4_0_0 import Hdruk400 +from hdr_schemata.models.HDRUK.v3_0_0.DataTable import DataTable as BaseDataTable +from hdr_schemata.models.HDRUK.v3_0_0.StructuralMetadata import ( + StructuralMetadata as BaseStructuralMetadata, +) +from hdr_schemata.models.HDRUK.v4_0_0.Summary import Summary as BaseSummary + + +class DatasetFilter(BaseModel): + class Config: + extra = "forbid" + + id: constr(pattern=r"(\d+_){0,5}\d+") = Field(..., title="Id") + label: constr(min_length=0, max_length=150) = Field(..., title="Label") + category: constr(min_length=0, max_length=150) = Field(..., title="Category") + primaryGroup: Literal["cancer-type", "data-type", "access-type"] = Field( + ..., title="Primary group" + ) + description: constr(min_length=0, max_length=150) = Field(..., title="Description") + + +class DataTable(BaseDataTable): + size: Optional[int] = Field( + None, + title="Table size", + description="Number of Complete Entries.", + json_schema_extra={ + "guidance": ( + "Provides a measure of the completeness of the data set. A row which includes n/a against " + "columns that are not relevant or not applicable should still be counted as complete." + ) + }, + ) + + +class StructuralMetadata(BaseStructuralMetadata): + class Config: + extra = "forbid" + + # Override `tables` so CRUK's schema uses CRUK `DataTable` (adds `size`). + tables: Optional[List[DataTable]] = Field( + None, + description="Tables in the dataset", + title="Tables", + ) + + +class Summary(BaseSummary): + class Config: + extra = "forbid" + + # Optional-by-absence (not nullable). If provided, must be a 150-char string. + leadResearcher: OneHundredFiftyCharacters = Field( + default=None, + title="Lead Researcher", + description="Lead for the dataset. This need not be the same as the lead for the underlying grant", + examples=["Professor Karen Blogs", "Dr A Dataset"], + ) + leadResearchInstitute: OneHundredFiftyCharacters = Field( + default=None, + title="Lead Research Institute", + description="", + examples=["Sussex University"], + ) + + +class OtherDataType(BaseModel): + class Config: + extra = "forbid" + + title: OneHundredFiftyCharacters = Field( + ..., + title="Title", + json_schema_extra={"guidance": "Short descriptive titles"}, + examples=["Mammograms", "Patient recordings"], + ) + description: ShortDescription = Field( + ..., + title="Data description", + json_schema_extra={"guidance": "A description of the data type."}, + examples=[ + "2D images of both normal and malignant breasts", + "audio-tapes of oncology consultations", + ], + ) + format: Format = Field( + ..., + title="Format", + description="Format drawn from https://www.iana.org/assignments/media-types/media-types.xhtml.", + json_schema_extra={ + "guidance": ( + "https://www.iana.org/assignments/media-types/media-types.xhtml lists the commonly used " + "formats for different media (such as video/image/audio) etc. If your format is not " + "included in the list set out there, please indicate other and specify in the description." + ) + }, + ) + + +class ProjectGrant(BaseModel): + pid: Optional[OneHundredFiftyCharacters] = Field( + None, + title="Persistent identifier of the study", + ) + projectGrantName: OneHundredFiftyCharacters = Field( + ..., + title="Project Grant Title", + description=( + "The Project Grant Title should be unique to the CRUK datahub. " + "(Add your institute or name if necessary to disambiguate)." + ), + ) + leadResearcher: OneHundredFiftyCharacters = Field( + ..., + title="Lead Researcher", + examples=["Dr Smith"], + ) + leadResearchInstitute: OneHundredFiftyCharacters = Field( + ..., + title="Lead Research Institute", + examples=["Sussex University"], + ) + grantNumber: str = Field( + ..., + title="Grant number(s)", + description="List of CRUK and any other grant numbers.", + examples=["ABC123"], + json_schema_extra={"guidance": "Normally specified on the grant acceptance letter"}, + ) + projectGrantStartDate: str = Field( + ..., + title="Project Start Date", + description="Starting date of projectGrant grant.", + json_schema_extra={ + "guidance": ( + "Date on which the dataset projectGrant starts. This is normally set out in the grant " + "contract and will be different from the start of any data collection" + ) + }, + ) + projectGrantEndDate: Optional[str] = Field( + ..., + title="Project End Date", + description="Current end date of project grant.", + json_schema_extra={ + "guidance": ( + "Date on which the dataset project is currently projected to finish. This is normally set " + "out in the grant contract and will be different from the end of any data collection" + ) + }, + ) + projectGrantScope: Optional[constr(min_length=5, max_length=500)] = Field( + None, + title="Project Scope", + description="data and biospecimens expected to result from the grant.", + examples=["Longitudinal genomic data including somatic mutations"], + json_schema_extra={ + "guidance": ( + "Short paragraph setting out the types of data / biospecimens likely to result from the " + "grant and the cancers covered" + ) + }, + ) + + +class Cruk100(Hdruk400): + class Config: + extra = "forbid" + + # Override HDRUK 4.0.0 summary for CRUK-specific lead fields. + summary: Summary = Field( + ..., + description="Summary of metadata describing key pieces of information.", + ) + + # Override structural metadata so DataTable includes `size`. + structuralMetadata: Optional[StructuralMetadata] = Field( + None, + description="Descriptions of all tables and data elements that can be included in the dataset.", + title="Structural metadata", + ) + + datasetFilters: Optional[List[DatasetFilter]] = Field( + None, + title="Dataset Filters", + ) + icons: Optional[List[str]] = Field( + None, + title="Icons", + description="Calculated categorization icons added during export.", + ) + erd: Optional[Url] = Field( + None, + title="Entity Relationship Diagram", + description="Visual representation of data table relationships.", + json_schema_extra={ + "guidance": ( + "Please upload an image file (max 5MB) showing the relationship between the different tables" + ) + }, + ) + projectGrants: Optional[List[ProjectGrant]] = Field( + None, + title="Associated Project Grants", + ) + otherDataTypes: Optional[List[OtherDataType]] = Field( + None, + title="Other data types", + ) + + @classmethod + def save_schema(cls, location: str = "./1.0.0/schema.json") -> None: + with open(location, "w") as f: + json.dump(cls.model_json_schema(), f, indent=6) + diff --git a/hdr_schemata/models/GWDM/2.1/schema.json b/hdr_schemata/models/GWDM/2.1/schema.json new file mode 100644 index 00000000..bf450664 --- /dev/null +++ b/hdr_schemata/models/GWDM/2.1/schema.json @@ -0,0 +1,2581 @@ +{ + "$defs": { + "AbstractText": { + "anyOf": [ + { + "maxLength": 500, + "minLength": 5, + "type": "string" + }, + { + "type": "null" + } + ], + "title": "AbstractText" + }, + "Access": { + "additionalProperties": false, + "properties": { + "accessRights": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please provide details for the data access rights", + "title": "Access Rights" + }, + "accessService": { + "anyOf": [ + { + "$ref": "#/$defs/LongDescription" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please provide a brief description of the data access services that are available including: environment that is currently available to researchers;additional consultancy and services;any indication of costs associated. If no environment is currently available, please indicate the current plans and timelines when and how data will be made available to researchers Note: This value will be used as default access environment for all datasets submitted by the organisation. However, there will be the opportunity to overwrite this value for each dataset.", + "examples": [ + "https://cnfl.extge.co.uk/display/GERE/Research+Environment+User+Guide" + ], + "title": "Access Service" + }, + "accessRequestCost": { + "anyOf": [ + { + "$ref": "#/$defs/LongDescription" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please provide link(s) to a webpage detailing the commercial model for processing data access requests for the organisation (if available) Definition: Indication of commercial model or cost (in GBP) for processing each data access request by the data custodian.", + "title": "Organisation Access Request Cost" + }, + "deliveryLeadTime": { + "anyOf": [ + { + "$ref": "#/$defs/DeliveryLeadTimeV2" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please provide an indication of the typical processing times based on the types of requests typically received.", + "title": "Access Request Duration" + }, + "jurisdiction": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please use country code from ISO 3166-1 country codes and the associated ISO 3166-2 for regions, cities, states etc. for the country/state under whose laws the data subjects' data is collected, processed and stored.", + "title": "Jurisdiction" + }, + "dataController": { + "anyOf": [ + { + "$ref": "#/$defs/LongDescription" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Data Controller means a person/entity who (either alone or jointly or in common with other persons/entities) determines the purposes for which and the way any Data Subject data, specifically personal data or are to be processed.", + "title": "Data Controller" + }, + "dataProcessor": { + "anyOf": [ + { + "$ref": "#/$defs/LongDescription" + }, + { + "type": "null" + } + ], + "default": null, + "description": "A Data Processor, in relation to any Data Subject data, specifically personal data, means any person/entity (other than an employee of the data controller) who processes the data on behalf of the data controller.", + "title": "Data Processor" + }, + "accessServiceCategory": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Where access to data come from: TRE/SED, direct access, open acccess, varies based on project.", + "examples": [ + "TRE/SDE" + ], + "title": "Access/governance requirements" + } + }, + "title": "Access", + "type": "object" + }, + "Accessibility": { + "additionalProperties": false, + "properties": { + "usage": { + "anyOf": [ + { + "$ref": "#/$defs/Usage" + }, + { + "type": "null" + } + ], + "default": null, + "description": "This section includes information about how the data can be used and how it is currently being used", + "title": "Usage" + }, + "access": { + "allOf": [ + { + "$ref": "#/$defs/Access" + } + ], + "description": "This section includes information about data access" + }, + "formatAndStandards": { + "anyOf": [ + { + "$ref": "#/$defs/FormatAndStandards" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Section includes technical attributes for language vocabularies, sizes etc. and gives researchers facts about and processing the underlying data in the dataset.", + "title": "Format and Standards" + } + }, + "required": [ + "access" + ], + "title": "Accessibility", + "type": "object" + }, + "Age": { + "properties": { + "bin": { + "allOf": [ + { + "$ref": "#/$defs/AgeEnum" + } + ], + "title": "Age bin" + }, + "count": { + "title": "Age count", + "type": "integer" + } + }, + "required": [ + "bin", + "count" + ], + "title": "Age", + "type": "object" + }, + "AgeEnum": { + "enum": [ + "0-6 days", + "7-27 days", + "1-11 months", + "1-4 years", + "5-9 years", + "10-14 years", + "15-19 years", + "20-24 years", + "25-29 years", + "30-34 years", + "35-39 years", + "40-44 years", + "45-49 years", + "50-54 years", + "55-59 years", + "60-64 years", + "65-69 years", + "70-74 years", + "75-79 years", + "80-84 years", + "85-89 years", + "90-94 years", + "95-99 years", + "100+ years" + ], + "title": "AgeEnum", + "type": "string" + }, + "AgeRange": { + "anyOf": [ + { + "pattern": "Not Known|(150|1[0-4][0-9]|[0-9]|[1-8][0-9]|9[0-9])-(150|1[0-4][0-9]|[0-9]|[1-8][0-9]|9[0-9])", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "AgeRange" + }, + "Assay": { + "enum": [ + "NMR spectroscopy", + "Mass-spectrometry", + "Whole genome sequencing", + "Exome sequencing", + "Genotyping by array", + "Transcriptome profiling by high-throughput sequencing", + "Transcriptome profiling by array", + "Amplicon sequencing", + "Methylation binding domain sequencing", + "Methylation profiling by high-throughput sequencing", + "Genomic variant calling", + "Chromatin accessibility profiling by high-throughput sequencing", + "Histone modification profiling by high-throughput sequencing", + "Chromatin immunoprecipitation sequencing", + "Whole genome shotgun sequencing", + "Whole transcriptome sequencing", + "Targeted mutation analysis" + ], + "title": "Assay", + "type": "string" + }, + "CommaSeparatedValues": { + "anyOf": [ + { + "pattern": "([^,]+)", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "CommaSeparatedValues" + }, + "Coverage": { + "properties": { + "spatial": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The geographical area covered by the dataset. It is recommended that links are to entries in a well-maintained gazetteer such as https://www.geonames.org/ or https://what3words.com/daring.lion.race.", + "examples": [ + "https://www.geonames.org/2635167/united-kingdom-of-great-britain-and-northern-ireland.html" + ], + "title": "Geographic Coverage" + }, + "pathway": { + "anyOf": [ + { + "$ref": "#/$defs/LongDescription" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please indicate if the dataset is representative of the patient pathway and any limitations the dataset may have with respect to pathway coverage. This could include if the dataset is from a single speciality or area, a single tier of care, linked across two tiers (e.g. primary and secondary care), or an integrated care record covering the whole patient pathway.", + "title": "Pathway" + }, + "followUp": { + "anyOf": [ + { + "$ref": "#/$defs/FollowupV2" + }, + { + "type": "null" + } + ], + "default": null, + "description": "If known, what is the typical time span that a patient appears in the dataset (follow up period)", + "title": "Followup" + }, + "typicalAgeRange": { + "anyOf": [ + { + "$ref": "#/$defs/AgeRange" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please indicate the age range in whole years of participants in the dataset. Please provide range in the following format '[min age] \u2013 [max age]' where both the minimum and maximum are whole numbers (integers).", + "title": "Age Range" + }, + "datasetCompleteness": { + "anyOf": [ + { + "$ref": "#/$defs/Url" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The URL where a Researcher can learn more about the completeness of the dataset.", + "title": "Dataset coverage/completeness/quality" + } + }, + "title": "Coverage", + "type": "object" + }, + "DataColumn": { + "properties": { + "name": { + "allOf": [ + { + "$ref": "#/$defs/Name" + } + ], + "description": "The name of a column in a table.", + "title": "Column Name" + }, + "dataType": { + "description": "The name of a column in a table.", + "title": "Column Name", + "type": "string" + }, + "description": { + "anyOf": [ + { + "maxLength": 20000, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "A description of a column in a table.", + "title": "Column Description" + }, + "sensitive": { + "description": "A True or False value, indicating if the field is sensitive or not", + "title": "Sensitive", + "type": "boolean" + }, + "values": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/DataValue" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "values in a dataset", + "title": "Values" + } + }, + "required": [ + "name", + "dataType", + "sensitive" + ], + "title": "DataColumn", + "type": "object" + }, + "DataTable": { + "additionalProperties": false, + "properties": { + "name": { + "anyOf": [ + { + "maxLength": 500, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The name of a table in a dataset.", + "title": "Table Name" + }, + "description": { + "anyOf": [ + { + "maxLength": 20000, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "A description of a table in a dataset.", + "title": "Table Description'" + }, + "columns": { + "description": "A list of columns contained within a table in a dataset.", + "items": { + "$ref": "#/$defs/DataColumn" + }, + "title": "Data Columns", + "type": "array" + } + }, + "required": [ + "columns" + ], + "title": "DataTable", + "type": "object" + }, + "DataValue": { + "properties": { + "name": { + "allOf": [ + { + "$ref": "#/$defs/Name" + } + ], + "description": "Unique value in a column .", + "title": "Value Name" + }, + "description": { + "anyOf": [ + { + "maxLength": 20000, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "A description of a unique value in a column.", + "title": "Value Description" + }, + "frequency": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The frequency of occurrance of a value in a column", + "title": "Value Frequency" + } + }, + "required": [ + "name" + ], + "title": "DataValue", + "type": "object" + }, + "DatasetDescriptor": { + "properties": { + "pid": { + "anyOf": [ + { + "$ref": "#/$defs/OneHundredFiftyCharacters" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Persistent identifier of a dataset" + }, + "title": { + "anyOf": [ + { + "$ref": "#/$defs/OneHundredFiftyCharacters" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Title of a dataset" + }, + "url": { + "anyOf": [ + { + "$ref": "#/$defs/Url" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Url of a dataset" + } + }, + "title": "DatasetDescriptor", + "type": "object" + }, + "DatasetFilter": { + "additionalProperties": false, + "properties": { + "id": { + "pattern": "(\\d+_){0,5}\\d+", + "title": "Id", + "type": "string" + }, + "label": { + "maxLength": 150, + "minLength": 0, + "title": "Label", + "type": "string" + }, + "category": { + "maxLength": 150, + "minLength": 0, + "title": "Category", + "type": "string" + }, + "primaryGroup": { + "enum": [ + "cancer-type", + "data-type", + "access-type" + ], + "title": "Primary group", + "type": "string" + }, + "description": { + "maxLength": 150, + "minLength": 0, + "title": "Description", + "type": "string" + } + }, + "required": [ + "id", + "label", + "category", + "primaryGroup", + "description" + ], + "title": "DatasetFilter", + "type": "object" + }, + "DatasetLinkage": { + "additionalProperties": false, + "properties": { + "isDerivedFrom": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/DatasetDescriptor" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Indicate if derived datasets or predefined extracts are available and the type of derivation available. Notes. Single or multiple dimensions can be provided as a derived extract alongside the dataset", + "examples": [ + "Data will be minimised as appropriate relative to the data access application" + ], + "title": "Derivations" + }, + "isPartOf": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/DatasetDescriptor" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "If the dataset is part of a group or family", + "examples": [ + "UKCRC Tissue Directory and Coordination Centre" + ], + "title": "Is PartOf" + }, + "linkedDatasets": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/DatasetDescriptor" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Links to other datasets.", + "examples": [ + "Yes. To any SAIL dataset & reference data.,ALL" + ], + "title": "Linked Datasets" + }, + "isMemberOf": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/DatasetDescriptor" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Dataset is a member of XXX(?)", + "title": "Is MemberOf" + } + }, + "title": "DatasetLinkage", + "type": "object" + }, + "DeliveryLeadTimeV2": { + "enum": [ + "Less than 1 week", + "1-2 weeks", + "2-4 weeks", + "1-2 months", + "2-6 months", + "More than 6 months", + "Variable", + "Not applicable", + "Other" + ], + "title": "DeliveryLeadTimeV2", + "type": "string" + }, + "DemographicFrequency": { + "additionalProperties": false, + "properties": { + "age": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/Age" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Array of age bins and their corresponding counts.", + "title": "Age" + }, + "ethnicity": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/Ethnicity" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Array of ethnicity bins and their corresponding counts.", + "title": "Ethnicity" + }, + "disease": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/Disease" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Array of diseases and their corresponding counts.", + "title": "Disease" + } + }, + "title": "DemographicFrequency", + "type": "object" + }, + "Description": { + "anyOf": [ + { + "maxLength": 10000, + "minLength": 2, + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "Disease": { + "properties": { + "diseaseCode": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ], + "title": "Disease code" + }, + "diseaseCodeVocabulary": { + "allOf": [ + { + "$ref": "#/$defs/DiseaseCodeEnum" + } + ], + "title": "Disease code vocabulary" + }, + "count": { + "title": "Disease count", + "type": "integer" + } + }, + "required": [ + "diseaseCode", + "diseaseCodeVocabulary", + "count" + ], + "title": "Disease", + "type": "object" + }, + "DiseaseCodeEnum": { + "enum": [ + "ICD10", + "SNOMED CT", + "MeSH" + ], + "title": "DiseaseCodeEnum", + "type": "string" + }, + "Doi": { + "anyOf": [ + { + "pattern": "^10.\\d{4,9}/[-._;()/:a-zA-Z0-9]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Doi" + }, + "Ethnicity": { + "properties": { + "bin": { + "allOf": [ + { + "$ref": "#/$defs/EthnicityEnum" + } + ], + "title": "Ethnicity bin" + }, + "count": { + "title": "Ethnicity count", + "type": "integer" + } + }, + "required": [ + "bin", + "count" + ], + "title": "Ethnicity", + "type": "object" + }, + "EthnicityEnum": { + "enum": [ + "White - British", + "White - Irish", + "White - Any other White background", + "Mixed - White and Black Caribbean", + "Mixed - White and Black African", + "Mixed - White and Asian", + "Mixed - Any other mixed background", + "Asian or Asian British - Indian", + "Asian or Asian British - Pakistani", + "Asian or Asian British - Bangladeshi", + "Asian or Asian British - Any other Asian background", + "Black or Black British - Caribbean", + "Black or Black British - African", + "Black or Black British - Any other Black background", + "Other Ethnic Groups - Chinese", + "Other Ethnic Groups - Any other ethnic group", + "Not stated", + "Not known" + ], + "title": "EthnicityEnum", + "type": "string" + }, + "FollowupV2": { + "enum": [ + "0 - 6 Months", + "6 - 12 Months", + "1 - 10 Years", + "> 10 Years", + "Unknown", + "Continuous", + "Other", + null + ], + "title": "FollowupV2" + }, + "FormatAndStandards": { + "additionalProperties": false, + "properties": { + "vocabularyEncodingSchemes": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Code value of the ontology vocabulary encoding", + "examples": [ + "OPCS4,NHS NATIONAL CODES,ICD10,OTHER" + ], + "title": "Controlled Vocabulary" + }, + "conformsTo": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "What the vocabulary conforms to.", + "examples": [ + "LOCAL,NHS DATA DICTIONARY" + ], + "title": "Conforms To" + }, + "languages": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Language code(s) of the language of the dataset metadata and underlying data is made available.", + "examples": [ + "en" + ], + "title": "Language Code(s)" + }, + "formats": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Format(s) the dataset can be made available in", + "examples": [ + "CSV,JSON,SQL database table" + ], + "title": "Dataset Format" + } + }, + "title": "FormatAndStandards", + "type": "object" + }, + "Image": { + "additionalProperties": false, + "properties": { + "image": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "contentMediaType": "image/*", + "default": null, + "description": "An image file.", + "guidance": "Upload an image file (PNG, JPG, SVG) Max file size: 5MB.", + "title": "Image" + }, + "description": { + "anyOf": [ + { + "$ref": "#/$defs/Description" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "title": "Image", + "type": "object" + }, + "Linkage": { + "additionalProperties": false, + "properties": { + "isGeneratedUsing": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "??", + "title": "Is Generated Using" + }, + "associatedMedia": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Any media associated with the Gateway Organisation using a valid URI for the content. This is an opportunity to provide additional context that could be useful for researchers wanting to understand more about the dataset and its relevance to their research question", + "examples": [ + "https://popdatasci.swan.ac.uk/centres-of-excellence/sail/,https://www.youtube.com/watch?v=ZK9-Jw3uVkw,https://saildatabank.com/,https://saildatabank.com/about-us/" + ], + "title": "Associated Media" + }, + "dataUses": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "??", + "title": "Data Uses" + }, + "isReferenceIn": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The keystone paper associated with the dataset. Also include a list of known citations, if available and should be links to existing resources where the dataset has been used or referenced.',", + "title": "Is Reference in" + }, + "tools": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "URL of any analysis tools or models that have been created for this dataset and are available for further use", + "examples": [ + "https://conceptlibrary.saildatabank.com/" + ], + "title": "Tools" + }, + "datasetLinkage": { + "anyOf": [ + { + "$ref": "#/$defs/DatasetLinkage" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Dataset Linkage copied over from", + "title": "Dataset Linkage" + }, + "investigations": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please provide the keystone paper associated with the dataset.", + "examples": [ + "https://digital.nhs.uk/services/data-access-request-service-dars/register-of-approved-data-releases" + ], + "title": "Investigations" + }, + "syntheticDataWebLink": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Links to locations of information and or raw downloads of synthetic data associated with this dataset", + "title": "Synthetic Data Web Links" + }, + "publicationAboutDataset": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/Doi" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "DOIs for publications which describe the dataset.", + "title": "Publication about the dataset" + }, + "publicationUsingDataset": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/Doi" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "DOIs for publications which use the dataset for analysis.", + "title": "Publication using the dataset" + } + }, + "title": "Linkage", + "type": "object" + }, + "LongAbstractText": { + "anyOf": [ + { + "maxLength": 5000, + "minLength": 5, + "type": "string" + }, + { + "type": "null" + } + ], + "title": "LongAbstractText" + }, + "LongDescription": { + "anyOf": [ + { + "maxLength": 50000, + "minLength": 2, + "type": "string" + }, + { + "type": "null" + } + ], + "title": "LongDescription" + }, + "MeasuredProperty": { + "title": "MeasuredProperty" + }, + "Name": { + "title": "Name" + }, + "Observation": { + "additionalProperties": false, + "properties": { + "observedNode": { + "allOf": [ + { + "$ref": "#/$defs/StatisticalPopulationConstrainedV2" + } + ], + "description": "Please select one of the following statistical populations for you observation", + "examples": [ + "PERSONS" + ], + "title": "Statistical Population" + }, + "measuredValue": { + "description": "Please provide the population size associated with the population type the dataset i.e. 1000 people in a study, or 87 images (MRI) of Knee Usage Note: Used with Statistical Population, which specifies the type of the population in the dataset.", + "title": "Measured Value", + "type": "integer" + }, + "disambiguatingDescription": { + "anyOf": [ + { + "$ref": "#/$defs/AbstractText" + }, + { + "type": "null" + } + ], + "default": null, + "description": "If SNOMED CT term does not provide sufficient detail, please provide a description that disambiguates the population type.", + "title": "Disambiguating Description" + }, + "observationDate": { + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "format": "date-time", + "type": "string" + } + ], + "description": "Please provide the date that the observation was made. Some datasets may be continuously updated and the number of records will change regularly, so the observation date provides users with the date that the analysis or query was run to generate the particular observation. Multiple observations can be made i.e. an observation of cumulative COVID positive cases by specimen on the 1/1/2021 could be 2M. On the 8/1/2021 a new observation could be 2.1M. Users can add multiple observations.", + "title": "Observation Date" + }, + "measuredProperty": { + "allOf": [ + { + "$ref": "#/$defs/MeasuredProperty" + } + ], + "description": "Initially this will be defaulted to \"COUNT\"", + "title": "Measured Property" + } + }, + "required": [ + "observedNode", + "measuredValue", + "observationDate", + "measuredProperty" + ], + "title": "Observation", + "type": "object" + }, + "Omics": { + "additionalProperties": false, + "properties": { + "assay": { + "anyOf": [ + { + "$ref": "#/$defs/Assay" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The specific 'omics assay that generated the dataset.", + "guidance": "The specific 'omics assay that generated the dataset. If the assay used to generate your dataset is not listed, please contract the gateway team by submitting an enquiry.", + "title": "Omics assay" + }, + "platform": { + "anyOf": [ + { + "$ref": "#/$defs/Platform" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The specific technology or infrastructure used to perform the assay. If the omics platform used to create your dataset is not listed, please select other, a member of the gateway team will contact you to add an appropriate term(s) both to your record and to the metadata schema on your behalf.", + "guidance": "The specific technology or infrastructure used to perform the assay. If the omics platform used to create your dataset is not listed, please select other, a member of the gateway team will contact you to add an appropriate term(s) both to your record and to the metadata schema on your behalf.", + "title": "Omics Platform" + } + }, + "title": "Omics", + "type": "object" + }, + "OneHundredFiftyCharacters": { + "maxLength": 150, + "minLength": 2, + "title": "OneHundredFiftyCharacters", + "type": "string" + }, + "Organisation": { + "properties": { + "name": { + "anyOf": [ + { + "$ref": "#/$defs/Name" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Name of the organisation", + "title": "Organisation Name" + }, + "gatewayId": { + "anyOf": [ + { + "maxLength": 50, + "minLength": 2, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Identifier on the gateway", + "title": "Organisation Gateway Identifier" + }, + "rorId": { + "anyOf": [ + { + "maxLength": 9, + "minLength": 9, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The Research Organization Registry (ROR) for the organisation, if applicable", + "title": "Research Organization Registry Identifier" + } + }, + "title": "Organisation", + "type": "object" + }, + "Origin": { + "additionalProperties": false, + "properties": { + "purpose": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please indicate the purpose(s) that the dataset was collected.", + "title": "Purpose" + }, + "source": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please indicate the source of the data extraction", + "title": "Source" + }, + "collectionSituation": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please indicate the setting(s) where data was collected. Multiple settings may be provided", + "title": "Collection Situation Setting" + }, + "imageContrast": { + "anyOf": [ + { + "$ref": "#/$defs/Ternary" + }, + { + "type": "null" + } + ], + "default": "Not stated", + "description": "Indicate whether usage of imaging contrast is captured within the dataset.", + "title": "Image contrast" + } + }, + "title": "Origin", + "type": "object" + }, + "PeriodicityV2": { + "enum": [ + "Static", + "Irregular", + "Continuous", + "Biennial", + "Annual", + "Biannual", + "Quarterly", + "Bimonthly", + "Monthly", + "Biweekly", + "Weekly", + "Twice a week", + "Daily", + "Other", + null + ], + "title": "PeriodicityV2" + }, + "Pipeline": { + "enum": [ + "Available", + "Not available" + ], + "title": "Pipeline", + "type": "string" + }, + "Platform": { + "enum": [ + "Other", + "NMR Nightingale", + "Metabolon", + "Biocrates", + "Illumina", + "Oxford Nanopore", + "454", + "Hi-C", + "HiFi" + ], + "title": "Platform", + "type": "string" + }, + "ProjectGrant": { + "properties": { + "pid": { + "anyOf": [ + { + "$ref": "#/$defs/OneHundredFiftyCharacters" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Persistent identifier of the study" + }, + "projectGrantName": { + "allOf": [ + { + "$ref": "#/$defs/OneHundredFiftyCharacters" + } + ], + "description": "The Project Grant Title should be unique to the CRUK datahub. (Add your institute or name if necessary to disambiguate).", + "title": "Project Grant Title" + }, + "leadResearcher": { + "allOf": [ + { + "$ref": "#/$defs/OneHundredFiftyCharacters" + } + ], + "examples": [ + "Dr Smith" + ], + "title": "Lead Researcher" + }, + "leadResearchInstitute": { + "allOf": [ + { + "$ref": "#/$defs/OneHundredFiftyCharacters" + } + ], + "examples": [ + "Sussex University" + ], + "title": "Lead Research Institute" + }, + "grantNumber": { + "description": "List of CRUK and any other grant numbers.", + "examples": [ + "ABC123" + ], + "guidance": "Normally specified on the grant acceptance letter", + "title": "Grant number(s)", + "type": "string" + }, + "projectGrantStartDate": { + "description": "Starting date of projectGrant grant.", + "guidance": "Date on which the dataset projectGrant starts. This is normally set out in the grant contract and will be different from the start of any data collection", + "title": "Project Start Date", + "type": "string" + }, + "projectGrantEndDate": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Current end date of project grant.", + "guidance": "Date on which the dataset project is currently projected to finish. This is normally set out in the grant contract and will be different from the end of any data collection", + "title": "Project End Date" + }, + "projectGrantScope": { + "anyOf": [ + { + "maxLength": 500, + "minLength": 5, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "data and biospecimens expected to result from the grant.", + "examples": [ + "Longitudinal genomic data including somatic mutations" + ], + "guidance": "Short paragraph setting out the types of data / biospecimens likely to result from the grant and the cancers covered", + "title": "Project Scope" + } + }, + "required": [ + "projectGrantName", + "leadResearcher", + "leadResearchInstitute", + "grantNumber", + "projectGrantStartDate", + "projectGrantEndDate" + ], + "title": "ProjectGrant", + "type": "object" + }, + "Provenance": { + "additionalProperties": false, + "properties": { + "origin": { + "anyOf": [ + { + "$ref": "#/$defs/Origin" + }, + { + "type": "null" + } + ], + "default": null + }, + "temporal": { + "$ref": "#/$defs/Temporal" + } + }, + "required": [ + "temporal" + ], + "title": "Provenance", + "type": "object" + }, + "Required": { + "properties": { + "gatewayId": { + "description": "Associated identifier (number) that is the BigInt key in our SQL database for the dataset version associated with this metadata", + "maxLength": 50, + "minLength": 1, + "title": "Gateway Identifier", + "type": "string" + }, + "gatewayPid": { + "description": "A unique persistent identifier for the metadata version. This is a 128-bit unique identifiers, as 32 hexadecimal digits separated by hyphens", + "maxLength": 50, + "minLength": 2, + "title": "Gateway Persistent Identifier", + "type": "string" + }, + "issued": { + "description": "Datetime stamp of when this metadata version was initially issued", + "format": "date-time", + "title": "Metadata Issued Datetime", + "type": "string" + }, + "modified": { + "description": "Datetime stamp of when this metadata was last modified", + "format": "date-time", + "title": "Last Modified Datetime", + "type": "string" + }, + "revisions": { + "description": "A list of persistent identifiers and version numbers for previous versions of metadata for this dataset", + "items": { + "$ref": "#/$defs/Revision" + }, + "title": "Metadata Version Revisions", + "type": "array" + }, + "version": { + "description": "Dataset metadata version", + "examples": [ + "1.1.0" + ], + "pattern": "^\\d+\\.\\d+\\.\\d+$", + "title": "Dataset Version", + "type": "string" + } + }, + "required": [ + "gatewayId", + "gatewayPid", + "issued", + "modified", + "revisions", + "version" + ], + "title": "Required", + "type": "object" + }, + "Revision": { + "properties": { + "version": { + "description": "Version number used for previous version of this dataset", + "examples": [ + "6.0.0" + ], + "maxLength": 100, + "minLength": 2, + "title": "revision version", + "type": "string" + }, + "url": { + "anyOf": [ + { + "$ref": "#/$defs/Url" + }, + { + "type": "null" + } + ], + "description": "Some url with a reference to the record of a previous version of this dataset", + "examples": [ + "https://api.service.nhs.uk/health-research-data-catalogue/datasetrevisions/841f7da2-b018-41f6-b4ae-2e0aadab6561" + ], + "title": "revision url" + } + }, + "required": [ + "version", + "url" + ], + "title": "Revision", + "type": "object" + }, + "SampleDonor": { + "properties": { + "id": { + "anyOf": [ + { + "maxLength": 50, + "minLength": 2, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "ID of the sample donor", + "title": "Donor ID" + }, + "sex": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sex of the sample donor", + "title": "Donor Sex" + }, + "birthDate": { + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Date of birth of the sample donor", + "title": "Donor birth date" + }, + "dataCategories": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Data categories related to the sample donor", + "title": "Donor Data Categories" + } + }, + "title": "SampleDonor", + "type": "object" + }, + "ShortTitle": { + "anyOf": [ + { + "maxLength": 100, + "minLength": 2, + "type": "string" + }, + { + "type": "null" + } + ], + "title": "ShortTitle" + }, + "StatisticalPopulationConstrainedV2": { + "enum": [ + "Persons", + "Events", + "Findings", + "Number of scans per modality" + ], + "title": "StatisticalPopulationConstrainedV2", + "type": "string" + }, + "Summary": { + "properties": { + "title": { + "allOf": [ + { + "$ref": "#/$defs/TwoHundredFiftyFiveCharacters" + } + ], + "description": "The main title of the dataset", + "examples": [ + "Publications that mention HDR-UK (or any variant thereof) in Acknowledgements or Author Affiliations" + ], + "title": "Title" + }, + "shortTitle": { + "anyOf": [ + { + "$ref": "#/$defs/ShortTitle" + }, + { + "type": "null" + } + ], + "default": null, + "description": "A shorter descriptive title of the dataset", + "examples": [ + "ONS 2011 Census Wales (CENW)" + ], + "title": "Short Title" + }, + "doiName": { + "anyOf": [ + { + "$ref": "#/$defs/Doi" + }, + { + "type": "null" + } + ], + "default": null, + "description": "DOI associated to this dataset", + "examples": [ + "10.1093/ije/dyx196" + ], + "title": "DOI Name" + }, + "abstract": { + "allOf": [ + { + "$ref": "#/$defs/LongAbstractText" + } + ], + "description": "Longer abstract detailing the dataset.", + "examples": [ + "COVID-19 Key Worker Testing Results data is required by NHS Digital to support COVID-19 requests for linkage, analysis and dissemination to other organisations who require the data in a timely manner." + ], + "title": "Abstract" + }, + "keywords": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Comma separated key words associated to this dataset.", + "examples": [ + "Preprints,Papers,HDR UK" + ], + "title": "Keywords" + }, + "controlledKeywords": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Keywords that have been filtered and limited", + "title": "Controlled Keywords" + }, + "contactPoint": { + "anyOf": [ + { + "format": "email", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "email of a person who can be the main contact point of this dataset", + "example": [ + "blah.blah@blah.com" + ], + "title": "Contact Point" + }, + "datasetType": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "What type of dataset is this?", + "title": "Dataset type" + }, + "description": { + "anyOf": [ + { + "$ref": "#/$defs/LongDescription" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Longer description of the dataset in detail", + "examples": [ + "Publications that mention HDR-UK (or any variant thereof) in Acknowledgements or Author Affiliations\\n\\nThis will include:\\n- Papers\\n- COVID-19 Papers\\n- COVID-19 Preprint" + ], + "title": "Description" + }, + "publisher": { + "anyOf": [ + { + "$ref": "#/$defs/Organisation" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Link to details about the publisher of this dataset", + "title": "Publisher" + }, + "populationSize": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Summary population size of the cohort", + "title": "Population size" + }, + "datasetSubType": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Placeholder for dataset sub-type", + "title": "Dataset Sub-type" + }, + "inPipeline": { + "anyOf": [ + { + "$ref": "#/$defs/Pipeline" + }, + { + "type": "null" + } + ], + "default": "Not available", + "description": "Indicate whether this dataset is currently available for Researchers to request access.", + "title": "Dataset pipeline status" + }, + "funders": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Comma-separated list of funders for this dataset.", + "examples": [ + "CRUK,University of Sussex" + ], + "guidance": "Separate each funder with a comma.", + "title": "Funded by" + } + }, + "required": [ + "title", + "abstract" + ], + "title": "Summary", + "type": "object" + }, + "Temporal": { + "additionalProperties": false, + "properties": { + "startDate": { + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The start of the time period that the dataset provides coverage for. If there are multiple cohorts in the dataset with varying start dates, please provide the earliest date and use the description or the media attribute to provide more information.", + "title": "Start Date" + }, + "endDate": { + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The end of the time period that the dataset provides coverage for. If the dataset is \u201cContinuous\u201d and has no known end date, please state continuous. If there are multiple cohorts in the dataset with varying end dates, please provide the latest date and use the description or the media attribute to provide more information.'", + "title": "End Date" + }, + "timeLag": { + "allOf": [ + { + "$ref": "#/$defs/TimeLagV2" + } + ], + "description": "Please indicate the typical time-lag between an event and the data for that event appearing in the dataset", + "title": "Time Lag" + }, + "accrualPeriodicity": { + "allOf": [ + { + "$ref": "#/$defs/PeriodicityV2" + } + ], + "description": "Please indicate the frequency of distribution release. If a dataset is distributed regularly please choose a distribution release periodicity from the constrained list and indicate the next release date. When the release date becomes historical, a new release date will be calculated based on the publishing periodicity. If a dataset has been published and will remain static please indicate that it is static and indicated when it was released. If a dataset is released on an irregular basis or \u201con-demand\u201d please indicate that it is Irregular and leave release date as null. If a dataset can be published in real-time or near-real-time please indicate that it is continuous and leave release date as null. Notes: see https://www.dublincore.org/specifications/dublin-core/collection-description/frequency/", + "title": "Periodicity" + }, + "distributionReleaseDate": { + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Date of the latest release of the dataset. If this is a regular release i.e. quarterly, or this is a static dataset please complete this alongside Periodicity. If this is Irregular or Continuously released please leave this blank. Notes: Periodicity and release date will be used to determine when the next release is expected. E.g. if the release date is documented as 01/01/2020 and it is now 20/04/2020 and there is a quarterly release schedule, the latest release will be calculated as 01/04/2020.", + "title": "Release Date" + } + }, + "required": [ + "timeLag", + "accrualPeriodicity" + ], + "title": "Temporal", + "type": "object" + }, + "Ternary": { + "enum": [ + "Yes", + "No", + "Not stated" + ], + "title": "Ternary", + "type": "string" + }, + "TimeLagV2": { + "enum": [ + "Less than 1 week", + "1-2 weeks", + "2-4 weeks", + "1-2 months", + "2-6 months", + "More than 6 months", + "Variable", + "Not applicable", + "Other" + ], + "title": "TimeLagV2", + "type": "string" + }, + "TissueSampleMetadata": { + "properties": { + "id": { + "anyOf": [ + { + "maxLength": 50, + "minLength": 2, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "ID of the tissue sample metadata", + "title": "Metadata ID" + }, + "sampleDonor": { + "anyOf": [ + { + "$ref": "#/$defs/SampleDonor" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Information about the sample donor", + "title": "Sample Donor" + }, + "sampleType": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Type of the tissue sample", + "title": "Sample Type" + }, + "storageTemperature": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Storage temperature of the tissue sample", + "title": "Storage Temperature" + }, + "creationDate": { + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Date when the tissue sample metadata was created", + "title": "Creation Date" + }, + "anatomicalSiteOntologyCode": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Ontology code for the anatomical site, this code must match an ICD-0-3 format", + "title": "Anatomical Site Ontology Code" + }, + "anatomicalSiteOntologyDescription": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Ontology description for the anatomical site", + "title": "Anatomical Site Ontology Description" + }, + "anatomicalSiteFreeText": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Free text describing the anatomical site", + "title": "Anatomical Site Free Text" + }, + "sampleContentDiagnosis": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Diagnosis related to the sample content", + "title": "Sample Content Diagnosis" + }, + "useRestrictions": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Restrictions on the use of the tissue sample", + "title": "Use Restrictions" + } + }, + "title": "TissueSampleMetadata", + "type": "object" + }, + "TissuesSampleCollection": { + "properties": { + "id": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "ID of the tissue sample collection", + "title": "ID" + }, + "dataCategories": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The type of data that is associated with the samples in the study. Can be several values MIABIS-2.0-13", + "title": "Data Categories" + }, + "materialType": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The biospecimen saved from a biological entity for propagation e.g. testing, diagnostics, treatment or research purposes. Can be several values MIABIS-2.0-14", + "title": "Material Type" + }, + "accessConditions": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Access conditions for the tissue sample collection", + "title": "Access Conditions" + }, + "collectionType": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The type of the sample collection. Can be several values [MIABIS-2.0-16](https://github.com/BBMRI-ERIC/miabis/blob/master/Structured-data-and-lists.md#collection-type)", + "title": "Collection Type" + }, + "disease": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Disease associated with the tissue sample collection", + "title": "Disease" + }, + "storageTemperature": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Storage temperature of the tissue sample collection", + "title": "Storage Temperature" + }, + "sampleAgeRange": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Age range of the tissue sample collection", + "title": "Sample Age Range" + }, + "tissueSampleMetadata": { + "anyOf": [ + { + "$ref": "#/$defs/TissueSampleMetadata" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Metadata related to the tissue sample", + "title": "Tissue Sample Metadata" + } + }, + "title": "TissuesSampleCollection", + "type": "object" + }, + "TwoHundredFiftyFiveCharacters": { + "maxLength": 255, + "minLength": 2, + "title": "TwoHundredFiftyFiveCharacters", + "type": "string" + }, + "Url": { + "anyOf": [ + { + "format": "uri", + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Url" + }, + "Usage": { + "additionalProperties": false, + "properties": { + "dataUseLimitation": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please provide an indication of consent permissions for datasets and/or materials, and relates to the purposes for which datasets and/or material might be removed, stored or used. NOTE: we have extended the DUO to include a value for NO LINKAGE", + "title": "Data Use Limitation" + }, + "dataUseRequirement": { + "anyOf": [ + { + "$ref": "#/$defs/CommaSeparatedValues" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please indicate fit here are any additional conditions set for use if any, multiple requirements may be provided. Please ensure that these restrictions are documented in access rights information.", + "title": "Data Use Requirements" + }, + "resourceCreator": { + "anyOf": [ + { + "$ref": "#/$defs/Organisation" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Please provide the text that you would like included as part of any citation that credits this dataset. This is typically just the name of the publisher. No employee details should be provided.'", + "title": "Citation Requirements'" + } + }, + "title": "Usage", + "type": "object" + } + }, + "additionalProperties": false, + "properties": { + "required": { + "allOf": [ + { + "$ref": "#/$defs/Required" + } + ], + "description": "Required metadata needed for the GWDM" + }, + "summary": { + "allOf": [ + { + "$ref": "#/$defs/Summary" + } + ], + "description": "Summary of metadata describing key pieces of information." + }, + "coverage": { + "anyOf": [ + { + "$ref": "#/$defs/Coverage" + }, + { + "type": "null" + } + ], + "default": null, + "description": "This information includes attributes for geographical and temporal coverage, cohort details etc. to enable a deeper understanding of the dataset content so that researchers can make decisions about the relevance of the underlying data.", + "title": "Coverage" + }, + "provenance": { + "anyOf": [ + { + "$ref": "#/$defs/Provenance" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Provenance information allows researchers to understand data within the context of its origins and can be an indicator of quality, authenticity and timeliness.", + "title": "Provenance" + }, + "accessibility": { + "allOf": [ + { + "$ref": "#/$defs/Accessibility" + } + ], + "description": "Accessibility information allows researchers to understand access, usage, limitations, formats, standards and linkage or interoperability with toolsets." + }, + "linkage": { + "anyOf": [ + { + "$ref": "#/$defs/Linkage" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Metadata for various linkages with datasets and other gateway entities", + "title": "Linkage" + }, + "observations": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/Observation" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Multiple observations about the dataset may be provided and users are expected to provide at least one observation \n(1..*). We will be supporting the schema.org observation model (https://schema.org/Observation) with default values. Users will be encouraged to provide their own statistical populations as the project progresses. \nExample: \n <b> Statistical Population 1 \n </b> type: StatisticalPopulation populationType: Persons numConstraints: 0 \n <b> Statistical Population 2 </b> type: StatisticalPopulation populationType: Events numConstraints: 0 <b> Statistical Population 3 </b> type: StatisticalPopulation populationType: Findings numConstraints: 0 typeOf: Observation observedNode: <b> Statistical Population 1 </b> measuredProperty: count measuredValue: 32937 observationDate: \u201c2017\u201d\"\n", + "title": "Observations" + }, + "structuralMetadata": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/DataTable" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Descriptions of all tables and data elements that can be included in the dataset", + "title": "Structural Metadata" + }, + "tissuesSampleCollection": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/TissuesSampleCollection" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "metedata for tissue samples", + "title": "Tissue Sample Collection" + }, + "demographicFrequency": { + "anyOf": [ + { + "$ref": "#/$defs/DemographicFrequency" + }, + { + "type": "null" + } + ], + "default": null, + "description": "An object containing demographic frequency data categorised by age, ethnicity, and disease attributes.", + "title": "Demographic frequency" + }, + "omics": { + "anyOf": [ + { + "$ref": "#/$defs/Omics" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Omics", + "title": "Omics" + }, + "icons": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Calculated categorization icons added during export.", + "title": "Icons" + }, + "projectGrants": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/ProjectGrant" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Associated Project Grants" + }, + "datasetFilters": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/DatasetFilter" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Categorization tags regarding cancer type, data type, and access.", + "title": "Datasetfilters" + }, + "erd": { + "anyOf": [ + { + "$ref": "#/$defs/Image" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Visual representation of data table relationships.", + "guidance": "Please upload an image file (max 5MB) showing the relationship between the different tables", + "title": "Entity Relationship Diagram" + } + }, + "required": [ + "required", + "summary", + "accessibility" + ], + "title": "Gwdm21", + "type": "object" +} \ No newline at end of file diff --git a/hdr_schemata/models/GWDM/v2_1/Summary.py b/hdr_schemata/models/GWDM/v2_1/Summary.py new file mode 100644 index 00000000..39f92398 --- /dev/null +++ b/hdr_schemata/models/GWDM/v2_1/Summary.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from typing import Optional + +from pydantic import Field + +from hdr_schemata.definitions.HDRUK import CommaSeparatedValues +from hdr_schemata.models.GWDM.v2_0.Summary import Summary as Gwdm20Summary + + +class Summary(Gwdm20Summary): + funders: Optional[CommaSeparatedValues] = Field( + None, + title="Funded by", + description="Comma-separated list of funders for this dataset.", + examples=["CRUK,University of Sussex"], + json_schema_extra={"guidance": "Separate each funder with a comma."}, + ) diff --git a/hdr_schemata/models/GWDM/v2_1/__init__.py b/hdr_schemata/models/GWDM/v2_1/__init__.py new file mode 100644 index 00000000..40a51f6c --- /dev/null +++ b/hdr_schemata/models/GWDM/v2_1/__init__.py @@ -0,0 +1,68 @@ +from __future__ import annotations + +import json +from typing import List, Optional + +from pydantic import BaseModel, Field + +from hdr_schemata.models.GWDM.v2_0 import Gwdm20 +from hdr_schemata.models.CRUK.v1_0_0 import ( + DatasetFilter as CrukDatasetFilter, + ProjectGrant as CrukProjectGrant, +) +from hdr_schemata.definitions.HDRUK import Description + +from .Summary import Summary + + +DatasetFilter = CrukDatasetFilter + + +class Image(BaseModel): + class Config: + extra = "forbid" + + image: Optional[str] = Field( + None, + title="Image", + description="An image file.", + json_schema_extra={ + "contentMediaType": "image/*", + "guidance": "Upload an image file (PNG, JPG, SVG) Max file size: 5MB.", + }, + ) + description: Optional[Description] = Field(None) + + +ProjectGrant = CrukProjectGrant + + +class Gwdm21(Gwdm20): + summary: Summary = Field(..., description="Summary of metadata describing key pieces of information.") + icons: Optional[List[str]] = Field( + None, + title="Icons", + description="Calculated categorization icons added during export.", + ) + projectGrants: Optional[List[ProjectGrant]] = Field( + None, title="Associated Project Grants" + ) + datasetFilters: Optional[List[DatasetFilter]] = Field( + None, + description="Categorization tags regarding cancer type, data type, and access.", + ) + erd: Optional[Image] = Field( + None, + title="Entity Relationship Diagram", + description="Visual representation of data table relationships.", + json_schema_extra={ + "guidance": ( + "Please upload an image file (max 5MB) showing the relationship between the different tables" + ) + }, + ) + + @classmethod + def save_schema(cls, location: str = "./2.1/schema.json") -> None: + with open(location, "w") as f: + json.dump(cls.model_json_schema(), f, indent=6) diff --git a/hdr_schemata/tests/test_cruk.py b/hdr_schemata/tests/test_cruk.py new file mode 100644 index 00000000..6ce2046c --- /dev/null +++ b/hdr_schemata/tests/test_cruk.py @@ -0,0 +1,40 @@ +import json +from pathlib import Path + +from hdr_schemata.models.CRUK import Cruk100 + + +def get_metadata(model, version): + base = Path(__file__).resolve().parent.parent + metadata = json.loads( + (base / "examples" / model / version / "example.json").read_text() + ) + return metadata + + +def get_schema(model, version): + base = Path(__file__).resolve().parent.parent + metadata = json.loads((base / "models" / model / version / "schema.json").read_text()) + return metadata + + +class TestCruk100: + metadata = get_metadata("CRUK", "1.0.0") + json_schema = get_schema("CRUK", "1.0.0") + + def test_validation(self): + assert Cruk100(**self.metadata) is not None + + def test_json_schema(self): + schema = Cruk100.model_json_schema() + expected_keys = [ + "$defs", + "additionalProperties", + "properties", + "required", + "title", + "type", + ] + assert list(schema.keys()) == expected_keys + assert schema == self.json_schema + diff --git a/hdr_schemata/tests/test_gwdm.py b/hdr_schemata/tests/test_gwdm.py index 3db00d64..c229f3a3 100644 --- a/hdr_schemata/tests/test_gwdm.py +++ b/hdr_schemata/tests/test_gwdm.py @@ -1,9 +1,28 @@ -from pydantic import ValidationError import json +import subprocess +import sys +from pathlib import Path from hdr_schemata.models.GWDM import Gwdm10 +def _gwdm10_model_json_schema_clean_process() -> dict: + """Build JSON Schema in a fresh interpreter to avoid $defs clashes with other models.""" + root = Path(__file__).resolve().parents[2] + code = ( + "import json, sys; " + f"sys.path.insert(0, {str(root)!r}); " + "from hdr_schemata.models.GWDM.v1_0 import Gwdm10; " + "print(json.dumps(Gwdm10.model_json_schema()))" + ) + out = subprocess.check_output( + [sys.executable, "-c", code], + cwd=str(root), + text=True, + ) + return json.loads(out) + + def get_metadata(model, version): metadata = json.load(open(f"../examples/{model}/{version}/example.json")) return metadata @@ -22,7 +41,7 @@ def test_validation(self): assert Gwdm10(**self.metadata) != None def test_json_schema(self): - schema = Gwdm10.model_json_schema() + schema = _gwdm10_model_json_schema_clean_process() expected_keys = [ "$defs", "additionalProperties",