From 22a6e8c3719ddfe82e3ecdddb7aa2e624d3ed807 Mon Sep 17 00:00:00 2001
From: Charles Tapley Hoyt <cthoyt@gmail.com>
Date: Wed, 2 Jun 2021 16:02:36 -0400
Subject: [PATCH] Improve schema checks for registry (#72)

* Cutting out unnecessary metadata and fixing mismatched keys

* Update bioregistry.json

* Update uniprot metaprefix and add additional test

* Update test_data.py
---
 src/bioregistry/data/bioregistry.json | 420 +++++++++++++-------------
 tests/test_data.py                    |  78 +++--
 2 files changed, 265 insertions(+), 233 deletions(-)

diff --git a/src/bioregistry/data/bioregistry.json b/src/bioregistry/data/bioregistry.json
index e8f82c723..3a855ceaa 100644
--- a/src/bioregistry/data/bioregistry.json
+++ b/src/bioregistry/data/bioregistry.json
@@ -373,7 +373,7 @@
   "allergome": {
     "mappings": {
       "prefixcommons": "ALLERGOME",
-      "uniprot": "Allergome"
+      "uniprot.database": "Allergome"
     },
     "miriam": {
       "deprecated": false,
@@ -394,7 +394,7 @@
       "is_obo": false,
       "prefix": "ALLERGOME"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Protein family/group databases",
       "formatter": "http://www.allergome.org/script/dettaglio.php?id_molecule=%s",
       "identifier": "160",
@@ -767,7 +767,7 @@
   "arachnoserver": {
     "mappings": {
       "prefixcommons": "ARACHNOSERVER",
-      "uniprot": "ArachnoServer"
+      "uniprot.database": "ArachnoServer"
     },
     "miriam": {
       "deprecated": false,
@@ -788,7 +788,7 @@
       "is_obo": false,
       "prefix": "ARACHNOSERVER"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "formatter": "http://www.arachnoserver.org/toxincard.html?id=%s",
       "identifier": "145",
@@ -801,7 +801,7 @@
     "homepage": "https://www.araport.org/",
     "mappings": {
       "ncbi": "Araport",
-      "uniprot": "Araport"
+      "uniprot.database": "Araport"
     },
     "name": "Arabidopsis Information Portal",
     "ncbi": {
@@ -810,7 +810,7 @@
       "name": "Arabidopsis Information Portal",
       "prefix": "Araport"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "formatter": "https://bar.utoronto.ca/thalemine/portal.do?externalids=%s",
       "identifier": "221",
@@ -1878,7 +1878,7 @@
   "bindingdb": {
     "mappings": {
       "prefixcommons": "BINDINGDB",
-      "uniprot": "BindingDB"
+      "uniprot.database": "BindingDB"
     },
     "miriam": {
       "deprecated": false,
@@ -1899,7 +1899,7 @@
       "is_obo": false,
       "prefix": "BINDINGDB"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Chemistry databases",
       "formatter": "https://www.bindingdb.org/uniprot/%u",
       "identifier": "127",
@@ -1967,7 +1967,7 @@
     "mappings": {
       "go": "BioCyc",
       "prefixcommons": "BIOCYC",
-      "uniprot": "BioCyc"
+      "uniprot.database": "BioCyc"
     },
     "miriam": {
       "deprecated": false,
@@ -1988,7 +1988,7 @@
       "is_obo": false,
       "prefix": "BIOCYC"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Enzyme and pathway databases",
       "formatter": "https://biocyc.org/getid?id=%s",
       "identifier": "5",
@@ -2000,7 +2000,7 @@
   "biogrid": {
     "mappings": {
       "prefixcommons": "BIOGRID",
-      "uniprot": "BioGRID"
+      "uniprot.database": "BioGRID"
     },
     "miriam": {
       "deprecated": false,
@@ -2021,7 +2021,7 @@
       "is_obo": false,
       "prefix": "BIOGRID"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Protein-protein interaction databases",
       "formatter": "https://thebiogrid.org/%s",
       "identifier": "184",
@@ -2369,7 +2369,7 @@
     }
   },
   "biostudies": {
-    "mapping": {
+    "mappings": {
       "fairsharing": "biodbcore-000989"
     },
     "miriam": {
@@ -2435,11 +2435,11 @@
     }
   },
   "birnlex": {
+    "_comment": "Part of the NeuroLex namespace now",
     "bioportal": {
       "name": "Biomedical Informatics Research Network Project Lexicon",
       "prefix": "BIRNLEX"
     },
-    "comment": "Part of the NeuroLex namespace now",
     "mappings": {
       "bioportal": "BIRNLEX"
     },
@@ -2496,7 +2496,7 @@
   "bmrb": {
     "mappings": {
       "fairsharing": "FAIRsharing.p06nme",
-      "uniprot": "BMRB"
+      "uniprot.database": "BMRB"
     },
     "miriam": {
       "deprecated": false,
@@ -2508,7 +2508,7 @@
       "prefix": "bmrb",
       "sampleId": "15000"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "3D structure databases",
       "formatter": "http://www.bmrb.wisc.edu/data_library/summary/protein.php?uniprot=%u",
       "identifier": "256",
@@ -2571,7 +2571,7 @@
     "mappings": {
       "go": "BRENDA",
       "prefixcommons": "BRENDA",
-      "uniprot": "BRENDA"
+      "uniprot.database": "BRENDA"
     },
     "miriam": {
       "deprecated": false,
@@ -2592,7 +2592,7 @@
       "is_obo": false,
       "prefix": "BRENDA"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Enzyme and pathway databases",
       "formatter": "https://www.brenda-enzymes.org/enzyme.php?ecno=%s&UniProtAcc=%u&OrganismID=%d",
       "identifier": "131",
@@ -2626,7 +2626,7 @@
     }
   },
   "bs": {
-    "comment": "part of Sequence Ontology (SO). See https://github.com/The-Sequence-Ontology/SO-Ontologies/blob/master/Ontology_Files/subsets/biosapiens.obo",
+    "_comment": "part of Sequence Ontology (SO). See https://github.com/The-Sequence-Ontology/SO-Ontologies/blob/master/Ontology_Files/subsets/biosapiens.obo",
     "name": "Biosapiens"
   },
   "bspo": {
@@ -3095,7 +3095,7 @@
     "mappings": {
       "go": "CAZY",
       "prefixcommons": "CAZY",
-      "uniprot": "CAZy"
+      "uniprot.database": "CAZy"
     },
     "miriam": {
       "deprecated": false,
@@ -3116,7 +3116,7 @@
       "is_obo": false,
       "prefix": "CAZY"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Protein family/group databases",
       "formatter": "http://www.cazy.org/fam/%s.html",
       "identifier": "136",
@@ -3160,7 +3160,7 @@
   "ccds": {
     "mappings": {
       "prefixcommons": "CCDS",
-      "uniprot": "CCDS"
+      "uniprot.database": "CCDS"
     },
     "miriam": {
       "deprecated": false,
@@ -3181,7 +3181,7 @@
       "is_obo": false,
       "prefix": "CCDS"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Sequence databases",
       "formatter": "https://www.ncbi.nlm.nih.gov/CCDS/CcdsBrowse.cgi?REQUEST=CCDS&GO=MainBrowse&DATA=%s",
       "identifier": "187",
@@ -3212,7 +3212,6 @@
     "n2t": {
       "prefix": "cco"
     },
-    "namespace.capitalized": true,
     "ols": {
       "contact": "vladimir.n.mironov@gmail.com",
       "description": "The Cell Cycle Ontology extends existing ontologies for cell cycle knowledge building a resource that integrates and manages knowledge about the cell cycle components and regulatory aspects.",
@@ -3277,7 +3276,7 @@
       "go": "CDD",
       "ncbi": "CDD",
       "prefixcommons": "CDD",
-      "uniprot": "CDD"
+      "uniprot.database": "CDD"
     },
     "miriam": {
       "deprecated": false,
@@ -3304,7 +3303,7 @@
       "is_obo": false,
       "prefix": "CDD"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Family and domain databases",
       "formatter": "https://www.ncbi.nlm.nih.gov/Structure/cdd/cddsrv.cgi?uid=%s",
       "identifier": "214",
@@ -3472,7 +3471,7 @@
       "go": "CGD",
       "ncbi": "CGD",
       "prefixcommons": "CGD",
-      "uniprot": "CGD"
+      "uniprot.database": "CGD"
     },
     "miriam": {
       "deprecated": false,
@@ -3499,7 +3498,7 @@
       "is_obo": false,
       "prefix": "CGD"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "formatter": "http://www.candidagenome.org/cgi-bin/locus.pl?dbid=%s",
       "identifier": "126",
@@ -3704,7 +3703,7 @@
   "chembl.target": {
     "mappings": {
       "prefixcommons": "CHEMBL.TARGET",
-      "uniprot": "ChEMBL"
+      "uniprot.database": "ChEMBL"
     },
     "miriam": {
       "deprecated": false,
@@ -3726,7 +3725,7 @@
       "is_obo": false,
       "prefix": "CHEMBL.TARGET"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Chemistry databases",
       "formatter": "https://www.ebi.ac.uk/chembldb/target/inspect/%s",
       "identifier": "174",
@@ -4856,7 +4855,7 @@
     "ols_version_date_format": "%Y-%m-%d"
   },
   "cohd": {
-    "comment": "not really sure where the source is. this also links to a system called athena. I was not able to figure out what COHD stands for.",
+    "_comment": "not really sure where the source is. this also links to a system called athena. I was not able to figure out what COHD stands for.",
     "homepage": "https://github.com/MIT-LCP/mimic-omop",
     "name": "MIMIC III Database"
   },
@@ -4900,7 +4899,7 @@
     "mappings": {
       "go": "ComplexPortal",
       "prefixcommons": "COMPLEXPORTAL",
-      "uniprot": "ComplexPortal"
+      "uniprot.database": "ComplexPortal"
     },
     "miriam": {
       "deprecated": false,
@@ -4921,10 +4920,10 @@
       "is_obo": false,
       "prefix": "COMPLEXPORTAL"
     },
-    "synyonms": [
+    "synonyms": [
       "ComplexPortal"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "Protein-protein interaction databases",
       "formatter": "https://www.ebi.ac.uk/complexportal/complex/%s",
       "identifier": "228",
@@ -4988,7 +4987,7 @@
   "conoserver": {
     "mappings": {
       "prefixcommons": "CONOSERVER",
-      "uniprot": "ConoServer"
+      "uniprot.database": "ConoServer"
     },
     "miriam": {
       "deprecated": false,
@@ -5010,7 +5009,7 @@
       "is_obo": false,
       "prefix": "CONOSERVER"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "formatter": "http://www.conoserver.org/?page=card&table=protein&id=%s",
       "identifier": "156",
@@ -5067,7 +5066,7 @@
     "mappings": {
       "go": "CORUM",
       "prefixcommons": "CORUM",
-      "uniprot": "CORUM"
+      "uniprot.database": "CORUM"
     },
     "miriam": {
       "deprecated": false,
@@ -5088,7 +5087,7 @@
       "is_obo": false,
       "prefix": "CORUM"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Protein-protein interaction databases",
       "formatter": "http://mips.helmholtz-muenchen.de/corum/#?uniprotID=%u",
       "identifier": "224",
@@ -5154,10 +5153,10 @@
     "ols_version_date_format": "%Y-%m-%d"
   },
   "cp": {
+    "_comment": "Part of cell ontology but deprecated, see https://github.com/obophenotype/cell-ontology/issues/572",
     "appears_in": [
       "cl"
     ],
-    "comment": "Part of cell ontology but deprecated, see https://github.com/obophenotype/cell-ontology/issues/572",
     "name": "Cellular Phenotypes"
   },
   "cpc": {
@@ -5931,7 +5930,7 @@
       "go": "dbSNP",
       "ncbi": "dbSNP",
       "prefixcommons": "dbSNP",
-      "uniprot": "dbSNP"
+      "uniprot.database": "dbSNP"
     },
     "miriam": {
       "deprecated": false,
@@ -5958,7 +5957,7 @@
       "is_obo": false,
       "prefix": "dbSNP"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Genetic variation databases",
       "formatter": "https://www.ncbi.nlm.nih.gov/SNP/snp_ref.cgi?type=rs&rs=%s",
       "identifier": "13",
@@ -6171,7 +6170,7 @@
   "depod": {
     "mappings": {
       "prefixcommons": "DEPOD",
-      "uniprot": "DEPOD"
+      "uniprot.database": "DEPOD"
     },
     "miriam": {
       "deprecated": false,
@@ -6194,7 +6193,7 @@
       "prefix": "DEPOD"
     },
     "provides": "hgnc.symbol",
-    "uniprot": {
+    "uniprot.database": {
       "category": "PTM databases",
       "formatter": "http://depod.bioss.uni-freiburg.de/showp.php?name=%s",
       "identifier": "190",
@@ -6272,7 +6271,7 @@
       "go": "dictyBase",
       "ncbi": "dictyBase",
       "prefixcommons": "dictyBase",
-      "uniprot": "dictyBase"
+      "uniprot.database": "dictyBase"
     },
     "name": "dictyBase",
     "ncbi": {
@@ -6290,7 +6289,7 @@
     "synonyms": [
       "dictyBase"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "comment": "Replacement for DictyBase",
       "formatter": "http://dictybase.org/db/cgi-bin/gene_page.pl?primary_id=%s",
@@ -6408,7 +6407,7 @@
   "dip": {
     "mappings": {
       "prefixcommons": "DIP",
-      "uniprot": "DIP"
+      "uniprot.database": "DIP"
     },
     "miriam": {
       "deprecated": false,
@@ -6429,7 +6428,7 @@
       "is_obo": false,
       "prefix": "DIP"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Protein-protein interaction databases",
       "formatter": "https://dip.doe-mbi.ucla.edu/dip/Browse.cgi?ID=%s",
       "identifier": "16",
@@ -6449,7 +6448,7 @@
   "disprot": {
     "mappings": {
       "prefixcommons": "DISPROT",
-      "uniprot": "DisProt"
+      "uniprot.database": "DisProt"
     },
     "miriam": {
       "deprecated": false,
@@ -6470,7 +6469,7 @@
       "is_obo": false,
       "prefix": "DISPROT"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Family and domain databases",
       "formatter": "https://disprot.org/%s",
       "identifier": "17",
@@ -6937,7 +6936,7 @@
     "homepage": "http://www.drugbank.ca",
     "mappings": {
       "prefixcommons": "DrugBank",
-      "uniprot": "DrugBank"
+      "uniprot.database": "DrugBank"
     },
     "miriam": {
       "deprecated": false,
@@ -6962,7 +6961,7 @@
       "DrugBank",
       "DRUGBANK_ID"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "Chemistry databases",
       "formatter": "https://www.drugbank.ca/drugs/%s",
       "identifier": "19",
@@ -7030,13 +7029,13 @@
     "homepage": "http://drugcentral.org",
     "mappings": {
       "biolink": "DrugCentral",
-      "uniprot": "DrugCentral"
+      "uniprot.database": "DrugCentral"
     },
     "name": "Drug Central",
     "synonyms": [
       "Drug_Central"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "Chemistry databases",
       "formatter": "https://drugcentral.org/target/%u",
       "identifier": "239",
@@ -7201,7 +7200,7 @@
     "mappings": {
       "go": "EchoBASE",
       "prefixcommons": "ECHOBASE",
-      "uniprot": "EchoBASE"
+      "uniprot.database": "EchoBASE"
     },
     "miriam": {
       "deprecated": false,
@@ -7222,7 +7221,7 @@
       "is_obo": false,
       "prefix": "ECHOBASE"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "formatter": "http://www.york.ac.uk/res/thomas/Gene.cfm?recordID=%s",
       "identifier": "20",
@@ -7697,7 +7696,7 @@
   "eggnog": {
     "mappings": {
       "prefixcommons": "EGGNOG",
-      "uniprot": "eggNOG"
+      "uniprot.database": "eggNOG"
     },
     "miriam": {
       "deprecated": false,
@@ -7718,7 +7717,7 @@
       "is_obo": false,
       "prefix": "EGGNOG"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Phylogenomic databases",
       "formatter": "http://eggnogdb.embl.de/#/app/results?seqid=%u&target_nogs=%s",
       "identifier": "152",
@@ -7820,7 +7819,7 @@
   "elm": {
     "mappings": {
       "prefixcommons": "ELM",
-      "uniprot": "ELM"
+      "uniprot.database": "ELM"
     },
     "miriam": {
       "deprecated": false,
@@ -7842,7 +7841,7 @@
       "is_obo": false,
       "prefix": "ELM"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Protein-protein interaction databases",
       "formatter": "http://elm.eu.org/instances.html?q=%u",
       "identifier": "223",
@@ -7852,8 +7851,6 @@
     }
   },
   "emapa": {
-    "_download": "ftp://ftp.hgu.mrc.ac.uk/pub/MouseAtlas/Anatomy/EMAP_combined.obo",
-    "_download_comment": "New download link? probabl not right",
     "bioportal": {
       "name": "Mouse gross anatomy and development, timed",
       "prefix": "EMAPA"
@@ -7929,7 +7926,7 @@
     "description": "EMPIAR, the Electron Microscopy Public Image Archive, is a public resource for raw, 2D electron microscopy images. Here, you can browse, upload and download the raw images used to build a 3D structure",
     "example": "10595",
     "homepage": "https://www.ebi.ac.uk/pdbe/emdb",
-    "mapping": {
+    "mappings": {
       "fairsharing": "biodbcore-001140"
     },
     "name": "Electron Microscopy Public Image Archive",
@@ -8026,7 +8023,7 @@
       "go": "ENSEMBL",
       "ncbi": "ENSEMBL",
       "prefixcommons": "ENSEMBL",
-      "uniprot": "Ensembl"
+      "uniprot.database": "Ensembl"
     },
     "miriam": {
       "deprecated": false,
@@ -8056,7 +8053,7 @@
     "synonyms": [
       "Ensembl"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "Genome annotation databases",
       "formatter": "https://www.ensembl.org/id/%s",
       "identifier": "23",
@@ -8077,7 +8074,7 @@
   "ensembl.bacteria": {
     "mappings": {
       "prefixcommons": "ENSEMBL.BACTERIA",
-      "uniprot": "EnsemblBacteria"
+      "uniprot.database": "EnsemblBacteria"
     },
     "miriam": {
       "deprecated": false,
@@ -8098,7 +8095,7 @@
       "is_obo": false,
       "prefix": "ENSEMBL.BACTERIA"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Genome annotation databases",
       "formatter": "http://www.ensemblgenomes.org/id/%s",
       "identifier": "147",
@@ -8117,7 +8114,7 @@
     "mappings": {
       "go": "EnsemblFungi",
       "prefixcommons": "ENSEMBL.FUNGI",
-      "uniprot": "EnsemblFungi"
+      "uniprot.database": "EnsemblFungi"
     },
     "miriam": {
       "deprecated": false,
@@ -8138,7 +8135,7 @@
       "is_obo": false,
       "prefix": "ENSEMBL.FUNGI"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Genome annotation databases",
       "formatter": "http://www.ensemblgenomes.org/id/%s",
       "identifier": "148",
@@ -8157,7 +8154,7 @@
     "mappings": {
       "go": "EnsemblMetazoa",
       "prefixcommons": "ENSEMBL.METAZOA",
-      "uniprot": "EnsemblMetazoa"
+      "uniprot.database": "EnsemblMetazoa"
     },
     "miriam": {
       "deprecated": false,
@@ -8178,7 +8175,7 @@
       "is_obo": false,
       "prefix": "ENSEMBL.METAZOA"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Genome annotation databases",
       "formatter": "http://www.ensemblgenomes.org/id/%s",
       "identifier": "149",
@@ -8339,7 +8336,7 @@
     "mappings": {
       "ncbi": "EPD",
       "prefixcommons": "EPD",
-      "uniprot": "EPD"
+      "uniprot.database": "EPD"
     },
     "miriam": {
       "deprecated": false,
@@ -8366,7 +8363,7 @@
       "is_obo": false,
       "prefix": "EPD"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Proteomic databases",
       "formatter": "https://www.peptracker.com/epd/analytics/?protein_id=%u",
       "identifier": "205",
@@ -9148,7 +9145,7 @@
       "go": "FB",
       "ncbi": "FLYBASE",
       "prefixcommons": "FlyBase",
-      "uniprot": "FlyBase"
+      "uniprot.database": "FlyBase"
     },
     "miriam": {
       "deprecated": false,
@@ -9176,7 +9173,7 @@
       "FB",
       "FlyBase"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "comment": "Replacement for DMAP",
       "formatter": "http://flybase.org/reports/%s.html",
@@ -9787,8 +9784,8 @@
     }
   },
   "gc": {
+    "_comment": "see comment here: https://github.com/obophenotype/ncbitaxon/issues/47",
     "name": "Genetic Code",
-    "note": "see comment here: https://github.com/obophenotype/ncbitaxon/issues/47",
     "references": [
       "https://github.com/obophenotype/ncbitaxon/issues/47"
     ],
@@ -9883,7 +9880,7 @@
   "genatlas": {
     "mappings": {
       "prefixcommons": "GENATLAS",
-      "uniprot": "GenAtlas"
+      "uniprot.database": "GenAtlas"
     },
     "miriam": {
       "deprecated": false,
@@ -9904,7 +9901,7 @@
       "is_obo": false,
       "prefix": "GENATLAS"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "formatter": "http://genatlas.medecine.univ-paris5.fr/fiche.php?symbol=%s",
       "identifier": "27",
@@ -9927,7 +9924,7 @@
       "fairsharing": "FAIRsharing.9kahy4",
       "go": "GenBank",
       "prefixcommons": "GenBank",
-      "uniprot": "GenBank"
+      "uniprot.database": "GenBank"
     },
     "name": "GenBank",
     "prefixcommons": {
@@ -9936,7 +9933,7 @@
       "is_obo": false,
       "prefix": "GenBank"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Sequence databases",
       "formatter": "https://www.ncbi.nlm.nih.gov/nuccore/%s",
       "identifier": "28",
@@ -9948,7 +9945,7 @@
   "genecards": {
     "mappings": {
       "prefixcommons": "GENECARDS",
-      "uniprot": "GeneCards"
+      "uniprot.database": "GeneCards"
     },
     "miriam": {
       "deprecated": false,
@@ -9969,7 +9966,7 @@
       "is_obo": false,
       "prefix": "GENECARDS"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "formatter": "https://www.genecards.org/cgi-bin/carddisp.pl?gene=%s",
       "identifier": "30",
@@ -9989,7 +9986,7 @@
       "go": "GeneDB",
       "ncbi": "GeneDB",
       "prefixcommons": "GENEDB",
-      "uniprot": "GeneDB"
+      "uniprot.database": "GeneDB"
     },
     "miriam": {
       "deprecated": false,
@@ -10016,7 +10013,7 @@
       "is_obo": false,
       "prefix": "GENEDB"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Genome annotation databases",
       "formatter": "https://www.genedb.org/gene/%s",
       "identifier": "199",
@@ -10083,7 +10080,7 @@
   "genetree": {
     "mappings": {
       "prefixcommons": "GENETREE",
-      "uniprot": "GeneTree"
+      "uniprot.database": "GeneTree"
     },
     "miriam": {
       "deprecated": false,
@@ -10104,7 +10101,7 @@
       "is_obo": false,
       "prefix": "GENETREE"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Phylogenomic databases",
       "formatter": "http://www.ensemblgenomes.org/id-genetree/%s",
       "identifier": "162",
@@ -10116,7 +10113,7 @@
   "genewiki": {
     "mappings": {
       "prefixcommons": "GENEWIKI",
-      "uniprot": "GeneWiki"
+      "uniprot.database": "GeneWiki"
     },
     "miriam": {
       "deprecated": false,
@@ -10137,7 +10134,7 @@
       "is_obo": false,
       "prefix": "GENEWIKI"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Miscellaneous databases",
       "formatter": "https://en.wikipedia.org/wiki/%s",
       "identifier": "180",
@@ -10465,10 +10462,10 @@
     "example": "G24361QY",
     "homepage": "https://glygen.org/glycan/",
     "mappings": {
-      "uniprot": "GlyGen"
+      "uniprot.database": "GlyGen"
     },
     "name": "GlyGen: Computational and Informatics Resources for Glycoscience",
-    "uniprot": {
+    "uniprot.database": {
       "category": "PTM databases",
       "formatter": "https://glygen.org/protein/%u#glycosylation",
       "identifier": "254",
@@ -10704,7 +10701,7 @@
       "go": "GO",
       "ncbi": "GO",
       "prefixcommons": "GO",
-      "uniprot": "GO"
+      "uniprot.database": "GO"
     },
     "miriam": {
       "deprecated": false,
@@ -10759,7 +10756,7 @@
       "goccid",
       "gomfid"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "Ontologies",
       "formatter": "https://www.ebi.ac.uk/QuickGO/term/%s",
       "identifier": "37",
@@ -10809,7 +10806,6 @@
     "n2t": {
       "prefix": "go.ref"
     },
-    "namespace.capitalized": true,
     "prefixcommons": {
       "formatter": "http://www.geneontology.org/cgi-bin/references.cgi#GO_REF:$1",
       "is_identifiers": false,
@@ -10973,7 +10969,7 @@
   "gpcrdb": {
     "mappings": {
       "prefixcommons": "GPCRDB",
-      "uniprot": "GPCRDB"
+      "uniprot.database": "GPCRDB"
     },
     "miriam": {
       "deprecated": false,
@@ -10995,7 +10991,7 @@
       "is_obo": false,
       "prefix": "GPCRDB"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Protein family/group databases",
       "formatter": "https://gpcrdb.org/protein/%s/",
       "identifier": "38",
@@ -11395,10 +11391,10 @@
     }
   },
   "gtr": {
+    "_comment": "Identifiers appearing in MONDO don't match any of the resources apparent endpoints",
     "appears_in": [
       "mondo"
     ],
-    "comment": "Identifiers appearing in MONDO don't match any of the resources apparent endpoints",
     "example": "AN0097748",
     "homepage": "https://www.ncbi.nlm.nih.gov/gtr/",
     "name": "Genetic Testing Registry"
@@ -11562,7 +11558,7 @@
     "mappings": {
       "go": "HAMAP",
       "prefixcommons": "HAMAP",
-      "uniprot": "HAMAP"
+      "uniprot.database": "HAMAP"
     },
     "miriam": {
       "deprecated": false,
@@ -11583,7 +11579,7 @@
       "is_obo": false,
       "prefix": "HAMAP"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Family and domain databases",
       "formatter": "https://hamap.expasy.org/signature/%s",
       "identifier": "41",
@@ -11787,7 +11783,7 @@
       "go": "HUGO",
       "ncbi": "HGNC",
       "prefixcommons": "HGNC",
-      "uniprot": "HGNC"
+      "uniprot.database": "HGNC"
     },
     "miriam": {
       "deprecated": false,
@@ -11815,7 +11811,7 @@
       "is_obo": false,
       "prefix": "HGNC"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "comment": "Replacement for Genew",
       "formatter": "https://www.genenames.org/data/gene-symbol-report/#!/hgnc_id/%s",
@@ -12014,7 +12010,7 @@
   "hogenom": {
     "mappings": {
       "prefixcommons": "HOGENOM",
-      "uniprot": "HOGENOM"
+      "uniprot.database": "HOGENOM"
     },
     "miriam": {
       "deprecated": false,
@@ -12036,7 +12032,7 @@
       "is_obo": false,
       "prefix": "HOGENOM"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Phylogenomic databases",
       "formatter": "http://hogenom.univ-lyon1.fr/query_sequence?seq=%u",
       "identifier": "44",
@@ -12246,7 +12242,7 @@
     "mappings": {
       "go": "HPA",
       "prefixcommons": "HPA",
-      "uniprot": "HPA"
+      "uniprot.database": "HPA"
     },
     "miriam": {
       "deprecated": false,
@@ -12267,7 +12263,7 @@
       "is_obo": false,
       "prefix": "HPA"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "formatter": "https://www.proteinatlas.org/%s",
       "identifier": "46",
@@ -12520,7 +12516,7 @@
   "huge": {
     "mappings": {
       "prefixcommons": "HUGE",
-      "uniprot": "HUGE"
+      "uniprot.database": "HUGE"
     },
     "miriam": {
       "deprecated": false,
@@ -12542,7 +12538,7 @@
       "is_obo": false,
       "prefix": "HUGE"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "formatter": "http://www.kazusa.or.jp/huge/gfpage/%s",
       "identifier": "49",
@@ -12836,7 +12832,7 @@
     "homepage": "https://www.ideal-db.org",
     "mappings": {
       "prefixcommons": "IDEAL",
-      "uniprot": "IDEAL"
+      "uniprot.database": "IDEAL"
     },
     "miriam": {
       "deprecated": false,
@@ -12858,7 +12854,7 @@
       "is_obo": false,
       "prefix": "IDEAL"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Family and domain databases",
       "formatter": "http://idp1.force.cs.is.nagoya-u.ac.jp/IDEAL/ideal.php?id=%s",
       "identifier": "251",
@@ -13026,7 +13022,7 @@
     "url": "https://biomodels.net/vocab/idot.rdf#$1"
   },
   "idr": {
-    "mapping": {
+    "mappings": {
       "fairsharing": "FAIRsharing.6wf1zw"
     },
     "miriam": {
@@ -13261,9 +13257,9 @@
     }
   },
   "inn": {
+    "_comment": "can not find a place to resolve to",
     "example": "fluticasone",
     "name": "International Nonproprietary Names",
-    "note": "can not find a place to resolve to",
     "synonyms": [
       "INN_ID"
     ],
@@ -13412,7 +13408,7 @@
     "mappings": {
       "go": "IntAct",
       "prefixcommons": "INTACT",
-      "uniprot": "IntAct"
+      "uniprot.database": "IntAct"
     },
     "miriam": {
       "deprecated": false,
@@ -13433,7 +13429,7 @@
       "is_obo": false,
       "prefix": "INTACT"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Protein-protein interaction databases",
       "formatter": "https://www.ebi.ac.uk/intact/interactors/id:%s*",
       "identifier": "51",
@@ -13508,7 +13504,7 @@
       "go": "InterPro",
       "ncbi": "InterPro",
       "prefixcommons": "INTERPRO",
-      "uniprot": "InterPro"
+      "uniprot.database": "InterPro"
     },
     "miriam": {
       "deprecated": false,
@@ -13539,7 +13535,7 @@
       "InterPro",
       "IP"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "Family and domain databases",
       "formatter": "https://www.ebi.ac.uk/interpro/entry/%s",
       "identifier": "52",
@@ -13603,7 +13599,6 @@
     "deprecated": true,
     "example": "0000008",
     "name": "Insect Resistance Ontology",
-    "needs_curation": true,
     "url": "https://legacy.vectorbase.org/ontology-browser?cv=MIRO&t=IRO:$1"
   },
   "isbn": {
@@ -14060,7 +14055,7 @@
     }
   },
   "kegg": {
-    "comments": "KEGG prefix has been split into several others",
+    "_comment": "KEGG prefix has been split into several others",
     "deprecated": true,
     "go": {
       "homepage": "http://www.genome.ad.jp/kegg/",
@@ -14070,7 +14065,7 @@
     "mappings": {
       "go": "KEGG",
       "prefixcommons": "KEGG",
-      "uniprot": "KEGG"
+      "uniprot.database": "KEGG"
     },
     "miriam": {
       "deprecated": false,
@@ -14094,7 +14089,7 @@
     "synonyms": [
       "KEGG"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "Genome annotation databases",
       "formatter": "https://www.genome.jp/dbget-bin/www_bget?%s",
       "identifier": "53",
@@ -14782,7 +14777,6 @@
     }
   },
   "lincs.smallmolecule": {
-    "id": "00000546",
     "mappings": {
       "prefixcommons": "LINCS.SMALLMOLECULE"
     },
@@ -15103,7 +15097,7 @@
     "mappings": {
       "fairsharing": "FAIRsharing.LYsiMd",
       "prefixcommons": "MASSIVE",
-      "uniprot": "MassIVE"
+      "uniprot.database": "MassIVE"
     },
     "miriam": {
       "deprecated": false,
@@ -15124,7 +15118,7 @@
       "is_obo": false,
       "prefix": "MASSIVE"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Proteomic databases",
       "formatter": "https://massive.ucsd.edu/ProteoSAFe/protein_explorer.jsp?libraries=2&protein_name=%u",
       "identifier": "241",
@@ -15158,7 +15152,7 @@
     }
   },
   "matrixdb": {
-    "appearsIn": [
+    "appears_in": [
       "complexportal"
     ],
     "example": "MULT_4_VAR1_bovine",
@@ -15406,7 +15400,7 @@
     "mappings": {
       "go": "MEROPS",
       "prefixcommons": "MEROPS",
-      "uniprot": "MEROPS"
+      "uniprot.database": "MEROPS"
     },
     "miriam": {
       "deprecated": false,
@@ -15427,7 +15421,7 @@
       "is_obo": false,
       "prefix": "MEROPS"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Protein family/group databases",
       "formatter": "https://www.ebi.ac.uk/merops/cgi-bin/pepsum?mid=%s",
       "identifier": "59",
@@ -16004,7 +15998,7 @@
       "go": "MGI",
       "ncbi": "MGI",
       "prefixcommons": "MGI",
-      "uniprot": "MGI"
+      "uniprot.database": "MGI"
     },
     "miriam": {
       "deprecated": false,
@@ -16019,7 +16013,6 @@
     "n2t": {
       "prefix": "mgi"
     },
-    "namespace.capitalized": true,
     "ncbi": {
       "example": "MGI:1894891",
       "homepage": "http://www.informatics.jax.org/",
@@ -16036,9 +16029,9 @@
       "MGI",
       "MGD"
     ],
-    "uniprot": {
+    "uniprot.database": {
+      "_comment": "Replacement for MGD",
       "category": "Organism-specific databases",
-      "comment": "Replacement for MGD",
       "formatter": "http://www.informatics.jax.org/marker/%s",
       "identifier": "60",
       "link_is_explicit": "true",
@@ -16150,7 +16143,7 @@
     ]
   },
   "miaa": {
-    "comment": "same as MAT",
+    "_comment": "same as MAT",
     "name": "Minimal Information About Anatomy ontology",
     "references": [
       "https://bioconductor.statistik.tu-dortmund.de/packages/3.1/bioc/vignettes/rols/inst/doc/rols.pdf"
@@ -16271,11 +16264,11 @@
     }
   },
   "mim": {
+    "_comment": "OMIMPS and PS should probably be split to their own entry called OMIM Phenotypic Series",
     "bioportal": {
       "name": "Molecular Interaction Map",
       "prefix": "MIM"
     },
-    "comment": "OMIMPS and PS should probably be split to their own entry called OMIM Phenotypic Series",
     "go": {
       "formatter": "https://omim.org/entry/$1",
       "homepage": "https://omim.org/",
@@ -16290,7 +16283,7 @@
       "go": "OMIM",
       "ncbi": "MIM",
       "prefixcommons": "OMIM",
-      "uniprot": "MIM"
+      "uniprot.database": "MIM"
     },
     "miriam": {
       "deprecated": false,
@@ -16322,7 +16315,7 @@
       "OMIMPS",
       "PS"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "formatter": "https://www.omim.org/entry/%s",
       "identifier": "62",
@@ -16398,7 +16391,7 @@
   "mint": {
     "mappings": {
       "prefixcommons": "MINT",
-      "uniprot": "MINT"
+      "uniprot.database": "MINT"
     },
     "miriam": {
       "deprecated": false,
@@ -16420,7 +16413,7 @@
       "is_obo": false,
       "prefix": "MINT"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Protein-protein interaction databases",
       "formatter": "https://mint.bio.uniroma2.it/cgi-bin/protein.py?id=%u",
       "identifier": "158",
@@ -16470,7 +16463,6 @@
     "n2t": {
       "prefix": "mir"
     },
-    "namespace.capitalized": true,
     "prefixcommons": {
       "formatter": "http://identifiers.org/mir/$1",
       "is_identifiers": true,
@@ -16611,7 +16603,7 @@
     }
   },
   "miriam.resource": {
-    "comment": "yo dawg i heard you like registries...",
+    "_comment": "yo dawg i heard you like registries...",
     "mappings": {
       "prefixcommons": "MIRIAM.RESOURCE"
     },
@@ -17013,7 +17005,7 @@
     "homepage": "http://mobidb.bio.unipd.it",
     "mappings": {
       "prefixcommons": "MOBIDB",
-      "uniprot": "MobiDB"
+      "uniprot.database": "MobiDB"
     },
     "miriam": {
       "deprecated": false,
@@ -17034,7 +17026,7 @@
       "is_obo": false,
       "prefix": "MOBIDB"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Family and domain databases",
       "formatter": "https://mobidb.bio.unipd.it/entries/%u",
       "identifier": "183",
@@ -17804,7 +17796,7 @@
     }
   },
   "namerxn": {
-    "comment": "The nomenclature used for named reactions in text mining software from NextMove",
+    "_comment": "The nomenclature used for named reactions in text mining software from NextMove",
     "name": "NameRXN",
     "references": [
       "https://www.nextmovesoftware.com/products/HazELNutPoster.pdf"
@@ -18566,7 +18558,7 @@
   "nextprot": {
     "mappings": {
       "prefixcommons": "NEXTPROT",
-      "uniprot": "neXtProt"
+      "uniprot.database": "neXtProt"
     },
     "miriam": {
       "deprecated": false,
@@ -18590,7 +18582,7 @@
     "synonyms": [
       "NXP"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "formatter": "https://www.nextprot.org/entry/%s",
       "identifier": "161",
@@ -19109,7 +19101,6 @@
     "n2t": {
       "prefix": "obi"
     },
-    "namespace.capitalized": true,
     "obofoundry": {
       "contact": "bpeters@lji.org",
       "contact.label": "Bjoern Peters",
@@ -20355,7 +20346,7 @@
   "orphanet": {
     "mappings": {
       "prefixcommons": "Orphanet",
-      "uniprot": "Orphanet"
+      "uniprot.database": "Orphanet"
     },
     "miriam": {
       "deprecated": false,
@@ -20377,7 +20368,7 @@
       "is_obo": false,
       "prefix": "Orphanet"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "formatter": "https://www.orpha.net/consor/cgi-bin/OC_Exp.php?Lng=GB&Expert=%s",
       "identifier": "68",
@@ -20460,7 +20451,7 @@
   "orthodb": {
     "mappings": {
       "prefixcommons": "ORTHODB",
-      "uniprot": "OrthoDB"
+      "uniprot.database": "OrthoDB"
     },
     "miriam": {
       "deprecated": false,
@@ -20481,7 +20472,7 @@
       "is_obo": false,
       "prefix": "ORTHODB"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Phylogenomic databases",
       "formatter": "https://www.orthodb.org/?query=%u",
       "identifier": "143",
@@ -20751,7 +20742,7 @@
     "description": "Panorama is a freely-available, open-source repository server application for targeted mass spectrometry assays that integrates into a Skyline mass spec workflow. It makes links to the Proteomics Exchange when possible.",
     "example": "FxnI151FMs",
     "homepage": "https://panoramaweb.org",
-    "mapping": {
+    "mappings": {
       "fairsharing": "FAIRsharing.uBpQ1q"
     },
     "name": "Panorama Public",
@@ -20896,7 +20887,7 @@
   "pathwaycommons": {
     "mappings": {
       "prefixcommons": "PATHWAYCOMMONS",
-      "uniprot": "PathwayCommons"
+      "uniprot.database": "PathwayCommons"
     },
     "miriam": {
       "deprecated": false,
@@ -20917,7 +20908,7 @@
       "is_obo": false,
       "prefix": "PATHWAYCOMMONS"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Enzyme and pathway databases",
       "formatter": "http://apps.pathwaycommons.org/search?q=%u",
       "identifier": "253",
@@ -21106,7 +21097,7 @@
       "go": "PDB",
       "ncbi": "PDB",
       "prefixcommons": "PDB",
-      "uniprot": "PDB"
+      "uniprot.database": "PDB"
     },
     "miriam": {
       "deprecated": false,
@@ -21136,7 +21127,7 @@
     "synonyms": [
       "wwpdb"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "3D structure databases",
       "formatter": "https://www.ebi.ac.uk/pdbe-srv/view/entry/%s",
       "identifier": "70",
@@ -21381,7 +21372,7 @@
   "peptideatlas": {
     "mappings": {
       "prefixcommons": "PEPTIDEATLAS",
-      "uniprot": "PeptideAtlas"
+      "uniprot.database": "PeptideAtlas"
     },
     "miriam": {
       "deprecated": false,
@@ -21402,7 +21393,7 @@
       "is_obo": false,
       "prefix": "PEPTIDEATLAS"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Proteomic databases",
       "formatter": "https://db.systemsbiology.net/sbeams/cgi/PeptideAtlas/Search?action=GO&search_key=%s",
       "identifier": "71",
@@ -21429,7 +21420,7 @@
   "peroxibase": {
     "mappings": {
       "prefixcommons": "PEROXIBASE",
-      "uniprot": "PeroxiBase"
+      "uniprot.database": "PeroxiBase"
     },
     "miriam": {
       "deprecated": false,
@@ -21450,7 +21441,7 @@
       "is_obo": false,
       "prefix": "PEROXIBASE"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Protein family/group databases",
       "formatter": "http://peroxibase.toulouse.inra.fr/display_perox/view_perox/%s",
       "identifier": "72",
@@ -21476,7 +21467,7 @@
       "go": "Pfam",
       "ncbi": "PFAM",
       "prefixcommons": "PFAM",
-      "uniprot": "Pfam"
+      "uniprot.database": "Pfam"
     },
     "miriam": {
       "deprecated": false,
@@ -21506,7 +21497,7 @@
     "synonyms": [
       "PF"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "Family and domain databases",
       "formatter": "https://pfam.xfam.org/family/%s",
       "identifier": "73",
@@ -21853,7 +21844,7 @@
   "phylomedb": {
     "mappings": {
       "prefixcommons": "PHYLOMEDB",
-      "uniprot": "PhylomeDB"
+      "uniprot.database": "PhylomeDB"
     },
     "miriam": {
       "deprecated": false,
@@ -21874,7 +21865,7 @@
       "is_obo": false,
       "prefix": "PHYLOMEDB"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Phylogenomic databases",
       "formatter": "http://phylomedb.org/?q=search_tree&seqid=%s",
       "identifier": "144",
@@ -22038,7 +22029,7 @@
     "mappings": {
       "go": "PIRSF",
       "prefixcommons": "PIRSF",
-      "uniprot": "PIRSF"
+      "uniprot.database": "PIRSF"
     },
     "miriam": {
       "deprecated": false,
@@ -22059,7 +22050,7 @@
       "is_obo": false,
       "prefix": "PIRSF"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Family and domain databases",
       "formatter": "https://proteininformationresource.org/cgi-bin/ipcSF?id=%s",
       "identifier": "79",
@@ -22490,7 +22481,7 @@
       "go": "PomBase",
       "ncbi": "PomBase",
       "prefixcommons": "PomBase",
-      "uniprot": "PomBase"
+      "uniprot.database": "PomBase"
     },
     "miriam": {
       "deprecated": false,
@@ -22520,7 +22511,7 @@
     "synonyms": [
       "PomBase"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "comment": "Replacement for GeneDB_Spombe",
       "formatter": "https://www.pombase.org/spombe/result/%s",
@@ -22638,7 +22629,7 @@
       "bioportal": "PR",
       "go": "PR",
       "prefixcommons": "PR",
-      "uniprot": "PRO"
+      "uniprot.database": "PRO"
     },
     "miriam": {
       "deprecated": false,
@@ -22683,7 +22674,7 @@
       "PR",
       "PRO"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "Miscellaneous databases",
       "formatter": "https://proconsortium.org/app/entry/%s",
       "identifier": "181",
@@ -22700,7 +22691,7 @@
     "mappings": {
       "fairsharing": "FAIRsharing.e1byny",
       "prefixcommons": "PRIDE",
-      "uniprot": "PRIDE"
+      "uniprot.database": "PRIDE"
     },
     "miriam": {
       "deprecated": false,
@@ -22729,7 +22720,7 @@
       "is_obo": false,
       "prefix": "PRIDE"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Proteomic databases",
       "formatter": "https://www.ebi.ac.uk/pride/searchSummary.do?queryTypeSelected=identification%20accession%20number&identificationAccessionNumber=%s",
       "identifier": "130",
@@ -22772,7 +22763,7 @@
     "mappings": {
       "go": "PRINTS",
       "prefixcommons": "PRINTS",
-      "uniprot": "PRINTS"
+      "uniprot.database": "PRINTS"
     },
     "miriam": {
       "deprecated": false,
@@ -22793,7 +22784,7 @@
       "is_obo": false,
       "prefix": "PRINTS"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Family and domain databases",
       "comment": "Replacement for PRINT",
       "formatter": "http://umber.sbs.man.ac.uk/cgi-bin/dbbrowser/sprint/searchprintss.cgi?display_opts=Prints&category=None&queryform=false&prints_accn=%s",
@@ -22895,7 +22886,7 @@
     "mappings": {
       "go": "Prosite",
       "prefixcommons": "PROSITE",
-      "uniprot": "PROSITE"
+      "uniprot.database": "PROSITE"
     },
     "miriam": {
       "deprecated": false,
@@ -22916,7 +22907,7 @@
       "is_obo": false,
       "prefix": "PROSITE"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Family and domain databases",
       "formatter": "https://prosite.expasy.org/doc/%s",
       "identifier": "84",
@@ -23643,8 +23634,7 @@
     "url": "http://www.w3.org/2000/01/rdf-schema#$1"
   },
   "rdo": {
-    "_download": "http://ratmine.mcw.edu/ontology/disease/RDO.obo",
-    "_download_comment": "Problem with security certificate",
+    "download": "https://ratmine.mcw.edu/ontology/disease/RDO.obo",
     "name": "RGD Disease_Ontology"
   },
   "reactome": {
@@ -23662,7 +23652,7 @@
     "mappings": {
       "go": "Reactome",
       "prefixcommons": "REACT",
-      "uniprot": "Reactome"
+      "uniprot.database": "Reactome"
     },
     "miriam": {
       "deprecated": false,
@@ -23687,7 +23677,7 @@
       "RE",
       "REACT"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "Enzyme and pathway databases",
       "comment": "Replacement for GK",
       "formatter": "https://www.reactome.org/PathwayBrowser/#%s&FLG=%u",
@@ -23722,7 +23712,7 @@
     "mappings": {
       "go": "REBASE",
       "prefixcommons": "REBASE",
-      "uniprot": "REBASE"
+      "uniprot.database": "REBASE"
     },
     "miriam": {
       "deprecated": false,
@@ -23743,7 +23733,7 @@
       "is_obo": false,
       "prefix": "REBASE"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Protein family/group databases",
       "formatter": "http://rebase.neb.com/rebase/enz/%s.html",
       "identifier": "89",
@@ -23767,7 +23757,7 @@
     "mappings": {
       "go": "RefSeq",
       "prefixcommons": "RefSeq",
-      "uniprot": "RefSeq"
+      "uniprot.database": "RefSeq"
     },
     "miriam": {
       "deprecated": false,
@@ -23792,7 +23782,7 @@
     "synonyms": [
       "REFSEQ_PROT"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "Sequence databases",
       "formatter": "https://www.ncbi.nlm.nih.gov/protein/%s",
       "identifier": "117",
@@ -24013,7 +24003,7 @@
       "go": "RGD",
       "ncbi": "RGD",
       "prefixcommons": "RGD",
-      "uniprot": "RGD"
+      "uniprot.database": "RGD"
     },
     "miriam": {
       "deprecated": false,
@@ -24043,7 +24033,7 @@
     "synonyms": [
       "RGD"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "formatter": "http://rgd.mcw.edu/tools/genes/genes_view.cgi?id=%s",
       "identifier": "91",
@@ -24478,7 +24468,7 @@
   "rouge": {
     "mappings": {
       "prefixcommons": "ROUGE",
-      "uniprot": "Rouge"
+      "uniprot.database": "Rouge"
     },
     "miriam": {
       "deprecated": false,
@@ -24500,7 +24490,7 @@
       "is_obo": false,
       "prefix": "ROUGE"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "formatter": "http://www.kazusa.or.jp/rouge/gfpage/%s",
       "identifier": "92",
@@ -24526,7 +24516,6 @@
       "prefix": "rrid"
     },
     "name": "Research Resource Identification",
-    "namespace.capitalized": true,
     "prefixcommons": {
       "formatter": "http://identifiers.org/rrid/$1",
       "is_identifiers": true,
@@ -24766,10 +24755,10 @@
     ]
   },
   "salk": {
+    "_comment": "spider stuff!",
     "appears_in": [
       "efo"
     ],
-    "comment": "spider stuff!",
     "example": "037727",
     "name": "Salk Institute for Biological Studies Accession",
     "url": "https://abrc.osu.edu/stocks/number/SALK_$1"
@@ -24805,7 +24794,7 @@
   "sasbdb": {
     "mappings": {
       "prefixcommons": "SASBDB",
-      "uniprot": "SASBDB"
+      "uniprot.database": "SASBDB"
     },
     "miriam": {
       "deprecated": false,
@@ -24827,7 +24816,7 @@
       "is_obo": false,
       "prefix": "SASBDB"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "3D structure databases",
       "formatter": "https://www.sasbdb.org/uniprot/%u/",
       "identifier": "258",
@@ -25142,7 +25131,7 @@
       "go": "SGD",
       "ncbi": "SGD",
       "prefixcommons": "SGD",
-      "uniprot": "SGD"
+      "uniprot.database": "SGD"
     },
     "miriam": {
       "deprecated": false,
@@ -25170,7 +25159,7 @@
       "is_obo": false,
       "prefix": "SGD"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "formatter": "https://www.yeastgenome.org/locus/%s",
       "identifier": "95",
@@ -25385,7 +25374,7 @@
   "signor": {
     "example": "SIGNOR-C41",
     "mappings": {
-      "uniprot": "SIGNOR"
+      "uniprot.database": "SIGNOR"
     },
     "miriam": {
       "deprecated": false,
@@ -25401,7 +25390,7 @@
     "synonyms": [
       "SIGNOR"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "Enzyme and pathway databases",
       "formatter": "https://signor.uniroma2.it/relation_result.php?id=%u",
       "identifier": "206",
@@ -25504,8 +25493,7 @@
       "pattern": "^SLM:\\d+$",
       "prefix": "slm",
       "sampleId": "000048885"
-    },
-    "namespace.capitalized": true
+    }
   },
   "smart": {
     "go": {
@@ -25517,7 +25505,7 @@
     "mappings": {
       "go": "SMART",
       "prefixcommons": "SMART",
-      "uniprot": "SMART"
+      "uniprot.database": "SMART"
     },
     "miriam": {
       "deprecated": false,
@@ -25538,7 +25526,7 @@
       "is_obo": false,
       "prefix": "SMART"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Family and domain databases",
       "formatter": "http://smart.embl.de/smart/do_annotation.pl?DOMAIN=%s",
       "identifier": "97",
@@ -25777,7 +25765,7 @@
     }
   },
   "span": {
-    "comment": "see also snap",
+    "_comment": "see also snap",
     "name": "Span"
   },
   "spd": {
@@ -26040,7 +26028,7 @@
   "string": {
     "mappings": {
       "prefixcommons": "STRING",
-      "uniprot": "STRING"
+      "uniprot.database": "STRING"
     },
     "miriam": {
       "deprecated": false,
@@ -26062,7 +26050,7 @@
       "is_obo": false,
       "prefix": "STRING"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Protein-protein interaction databases",
       "formatter": "https://string-db.org/network/%s",
       "identifier": "141",
@@ -26153,7 +26141,7 @@
   "supfam": {
     "mappings": {
       "prefixcommons": "SUPFAM",
-      "uniprot": "SUPFAM"
+      "uniprot.database": "SUPFAM"
     },
     "miriam": {
       "deprecated": false,
@@ -26175,7 +26163,7 @@
       "is_obo": false,
       "prefix": "SUPFAM"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Family and domain databases",
       "formatter": "http://supfam.org/SUPERFAMILY/cgi-bin/scop.cgi?ipid=%s",
       "identifier": "155",
@@ -26622,7 +26610,7 @@
     "mappings": {
       "go": "TC",
       "prefixcommons": "TCDB",
-      "uniprot": "TCDB"
+      "uniprot.database": "TCDB"
     },
     "miriam": {
       "deprecated": false,
@@ -26646,7 +26634,7 @@
     "synonyms": [
       "TC"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "Protein family/group databases",
       "formatter": "http://www.tcdb.org/search/result.php?tc=%s",
       "identifier": "135",
@@ -27027,7 +27015,7 @@
   "treefam": {
     "mappings": {
       "prefixcommons": "TREEFAM",
-      "uniprot": "TreeFam"
+      "uniprot.database": "TreeFam"
     },
     "miriam": {
       "deprecated": false,
@@ -27048,7 +27036,7 @@
       "is_obo": false,
       "prefix": "TREEFAM"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Phylogenomic databases",
       "formatter": "http://www.treefam.org/family/%s",
       "identifier": "185",
@@ -27313,7 +27301,7 @@
     }
   },
   "ubprop": {
-    "comment": "All of these are typedefs in uberon now",
+    "_comment": "All of these are typedefs in uberon now",
     "deprecated": true,
     "name": "Uberon Property"
   },
@@ -27322,7 +27310,7 @@
     "homepage": "https://genome.ucsc.edu/",
     "mappings": {
       "prefixcommons": "UCSC",
-      "uniprot": "UCSC"
+      "uniprot.database": "UCSC"
     },
     "name": "UCSC Genome Browser",
     "prefixcommons": {
@@ -27331,7 +27319,7 @@
       "is_obo": false,
       "prefix": "UCSC"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Genome annotation databases",
       "formatter": "https://genome.ucsc.edu/cgi-bin/hgLinkIn?resource=uniprot&id=%u",
       "identifier": "139",
@@ -28026,7 +28014,7 @@
       "bioportal": "UPA",
       "go": "UniPathway",
       "prefixcommons": "UNIPATHWAY",
-      "uniprot": "UniPathway"
+      "uniprot.database": "UniPathway"
     },
     "obofoundry": {
       "contact": "Anne.Morgat@sib.swiss",
@@ -28060,7 +28048,7 @@
       "UPa",
       "unipathway"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "Enzyme and pathway databases",
       "formatter": "http://www.unipathway.org?upid=%s&entryac=%u",
       "identifier": "170",
@@ -28408,7 +28396,7 @@
   "vgnc": {
     "mappings": {
       "ncbi": "VGNC",
-      "uniprot": "VGNC"
+      "uniprot.database": "VGNC"
     },
     "miriam": {
       "deprecated": false,
@@ -28426,7 +28414,7 @@
       "name": "Vertebrate Gene Nomenclature Committee",
       "prefix": "VGNC"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "formatter": "https://vertebrate.genenames.org/data/gene-symbol-report/#!/vgnc_id/%s",
       "identifier": "226",
@@ -29265,7 +29253,7 @@
       "go": "WB_REF",
       "ncbi": "WormBase",
       "prefixcommons": "WormBase",
-      "uniprot": "WormBase"
+      "uniprot.database": "WormBase"
     },
     "name": "WormBase",
     "ncbi": {
@@ -29280,7 +29268,7 @@
       "is_obo": false,
       "prefix": "WormBase"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "formatter": "https://wormbase.org/db/seq/protein?name=%s;class=CDS",
       "identifier": "110",
@@ -29431,7 +29419,7 @@
       "go": "Xenbase",
       "ncbi": "Xenbase",
       "prefixcommons": "Xenbase",
-      "uniprot": "Xenbase"
+      "uniprot.database": "Xenbase"
     },
     "miriam": {
       "deprecated": false,
@@ -29458,7 +29446,7 @@
       "is_obo": false,
       "prefix": "Xenbase"
     },
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "formatter": "https://www.xenbase.org/gene/showgene.do?method=display&geneId=%s",
       "identifier": "129",
@@ -29810,7 +29798,7 @@
       "go": "ZFIN",
       "ncbi": "ZFIN",
       "prefixcommons": "ZFIN",
-      "uniprot": "ZFIN"
+      "uniprot.database": "ZFIN"
     },
     "miriam": {
       "deprecated": false,
@@ -29840,7 +29828,7 @@
     "synonyms": [
       "ZFIN"
     ],
-    "uniprot": {
+    "uniprot.database": {
       "category": "Organism-specific databases",
       "formatter": "https://zfin.org/%s",
       "identifier": "113",
diff --git a/tests/test_data.py b/tests/test_data.py
index 4f35f4d68..82a022100 100644
--- a/tests/test_data.py
+++ b/tests/test_data.py
@@ -8,19 +8,61 @@
 from collections import Counter
 
 import bioregistry
-from bioregistry.resolve import EMAIL_RE, _get_prefix_key, get_identifiers_org_prefix
+from bioregistry.resolve import EMAIL_RE, _get_prefix_key
 from bioregistry.utils import is_mismatch
 
 logger = logging.getLogger(__name__)
 
 
-class TestDuplicates(unittest.TestCase):
-    """Tests for duplicates."""
+class TestRegistry(unittest.TestCase):
+    """Tests for the registry."""
 
     def setUp(self) -> None:
         """Set up the test case."""
         self.registry = bioregistry.read_registry()
 
+    def test_keys(self):
+        """Check the required metadata is there."""
+        keys = {
+            # Required
+            'description',
+            'homepage',
+            'name',
+            # Recommended
+            'contact',
+            'download',
+            'example',
+            'pattern',
+            'type',
+            'url',
+            # Only there if true
+            'no_own_terms',
+            'not_available_as_obo',
+            'namespaceEmbeddedInLui',
+            # Only there if false
+            # Lists
+            'appears_in',
+            # Other
+            'deprecated',
+            'banana',
+            'mappings',
+            'ols_version_date_format',
+            'ols_version_prefix',
+            'ols_version_suffix_split',
+            'ols_version_type',
+            'part_of',
+            'provides',
+            'references',
+            'synonyms',
+        }
+        keys.update(bioregistry.read_metaregistry())
+        for prefix, entry in self.registry.items():
+            extra = {k for k in set(entry) - keys if not k.startswith('_')}
+            if not extra:
+                continue
+            with self.subTest(prefix=prefix):
+                self.fail(f'had extra keys: {extra}')
+
     def test_names(self):
         """Test that all entries have a name."""
         for prefix, entry in self.registry.items():
@@ -128,17 +170,13 @@ def test_examples(self):
 
     def test_examples_pass_patterns(self):
         """Test that all examples pass the patterns."""
-        for prefix, entry in self.registry.items():
+        for prefix in self.registry:
             pattern = bioregistry.get_pattern_re(prefix)
             example = bioregistry.get_example(prefix)
             if pattern is None or example is None:
                 continue
-
-            if bioregistry.namespace_in_lui(prefix):
-                miriam_prefix = get_identifiers_org_prefix(prefix)
-                if entry.get('namespace.capitalized') or 'obofoundry' in entry:
-                    miriam_prefix = miriam_prefix.upper()
-                example = f'{miriam_prefix}:{example}'
+            if prefix == 'ark':
+                continue  # FIXME
             if bioregistry.validate(prefix, example):
                 continue
             with self.subTest(prefix=prefix):
@@ -189,8 +227,19 @@ def test_ols_versions(self):
                     except ValueError:
                         logger.warning('Wrong format for %s (%s)', bioregistry_id, version)
 
-    def test_collections(self):
+    def test_is_mismatch(self):
+        """Check for mismatches."""
+        self.assertTrue(is_mismatch('geo', 'ols', 'geo'))
+        self.assertFalse(is_mismatch('geo', 'miriam', 'geo'))
+
+
+class TestCollections(unittest.TestCase):
+    """Tests for collections."""
+
+    def test_minimum_metadata(self):
         """Check collections have minimal metadata and correct prefixes."""
+        registry = bioregistry.read_registry()
+
         for key, collection in sorted(bioregistry.read_collections().items()):
             with self.subTest(key=key):
                 self.assertRegex(key, '^\\d{7}$')
@@ -205,7 +254,7 @@ def test_collections(self):
                 incorrect = {
                     prefix
                     for prefix in collection['resources']
-                    if prefix not in self.registry
+                    if prefix not in registry
                 }
                 self.assertEqual(set(), incorrect)
                 duplicates = {
@@ -215,11 +264,6 @@ def test_collections(self):
                 }
                 self.assertEqual(set(), duplicates, msg='Duplicates found')
 
-    def test_is_mismatch(self):
-        """Check for mismatches."""
-        self.assertTrue(is_mismatch('geo', 'ols', 'geo'))
-        self.assertFalse(is_mismatch('geo', 'miriam', 'geo'))
-
 
 class TestMetaregistry(unittest.TestCase):
     """Tests for the metaregistry."""