Repository: biopragmatics/bioregistry

Issue:
Allow provider-specific example ID
Should we extend the provider data model with an **optional provider-specific example ID** for the purpose of having working links in the provider table? There are other examples of this issue, for instance, for https://bioregistry.io/registry/uniprot, we have 
![image](https://github.com/user-attachments/assets/11beb146-570c-4255-969d-82f57c0415bb)
as a provider but https://www.iedb.org/antigen/UNIPROT:P0DP23 isn't an entry in IEDB, however, some other UniProt ID that has an actual entry would work well as an example link.

_Originally posted by @bgyori in https://github.com/biopragmatics/bioregistry/issues/1282#issuecomment-2659478039_
            

Discussion:
codecov[bot]: ## [Codecov](https://app.codecov.io/gh/biopragmatics/bioregistry/pull/1429?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=biopragmatics) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Project coverage is 47.09%. Comparing base [(`8950e70`)](https://app.codecov.io/gh/biopragmatics/bioregistry/commit/8950e70add2bd914ac7c5e83c5c0192014593c95?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=biopragmatics) to head [(`03c4a15`)](https://app.codecov.io/gh/biopragmatics/bioregistry/commit/03c4a152fd7e02b2ee548e80e2bd74cba8462da4?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=biopragmatics).
> Report is 330 commits behind head on main.

<details><summary>Additional details and impacted files</summary>


```diff
@@            Coverage Diff             @@
##             main    #1429      +/-   ##
==========================================
+ Coverage   42.51%   47.09%   +4.57%     
==========================================
  Files         117      119       +2     
  Lines        8327     8460     +133     
  Branches     1963     1400     -563     
==========================================
+ Hits         3540     3984     +444     
+ Misses       4582     4259     -323     
- Partials      205      217      +12     
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/biopragmatics/bioregistry/pull/1429?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=biopragmatics).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=biopragmatics).

nagutm: > Specifically for this one, we want to make sure we apply the regular expression pattern to validate the ID is valid. You can use the code that checks the primary example / example extras as reference

@cthoyt Could you clarify exactly what piece of code you are referring to here that checks the primary example/example extras?
nagutm: > Speaking of example extras, there should be a nice way of aggregating any possible specific examples put in the providers into the example_extras field. The question is: should we require double curation there, or should we have the function that wraps it automatically grab and aggregate them? Check usages of `.example_extras` to see what might be more comfy

I added a method to the Resource class called `get_aggregated_example_extras()` which concatenates the manually curated example_extras along with any provider specific examples. I also updated any references to `.example_extras` with this method to ensure that provider-specific examples are included in any list of example_extras in the future.
bgyori: > > Specifically for this one, we want to make sure we apply the regular expression pattern to validate the ID is valid. You can use the code that checks the primary example / example extras as reference
> 
> @cthoyt Could you clarify exactly what piece of code you are referring to here that checks the primary example/example extras?

There are tests that check whether example identifier for a given entry conform to the identifier regular expression pattern definition. These tests should cover not only the default and extra examples but also the examples specific to providers so if an invalid example identifier is added, the test fails.
nagutm: I added a provider example for `furna` to run some of the tests implemented in this PR. The previous link: https://seq2fun.dcmb.med.umich.edu/furna/pdb.cgi?pdbid=2gc4 was not resolving the default `pdb` ID as expected.

Patch:
diff --git a/src/bioregistry/app/templates/resource.html b/src/bioregistry/app/templates/resource.html
index d4b7b28d0..0091cf70e 100644
--- a/src/bioregistry/app/templates/resource.html
+++ b/src/bioregistry/app/templates/resource.html
@@ -613,7 +613,8 @@
                 {% if providers %}
                 <p>
                     The local unique identifier <code>{{ example }}</code> is used to demonstrate the providers
-                    available for {{ name_pack.value }}. A guide for curating additional providers can be found
+                    available for {{ name_pack.value }}. Some providers may use a different example, which is displayed in the table below. 
+                    A guide for curating additional providers can be found
                     <a href="https://biopragmatics.github.io/bioregistry/curation/providers">here</a>.
                 </p>
                 {% else %}
@@ -651,7 +652,8 @@
                         <tr>
                             <td><code>{{ provider.code }}</code></td>
                             <td>{{ provider.name }}</td>
-                            {% set url = provider.resolve(example) %}
+                            {% set example_id = provider.example if provider.example else example %}
+                            {% set url = provider.resolve(example_id) %}
                             <td><a href="{{ url }}">{{ url }}</a></td>
                         </tr>
                     {% endfor %}
diff --git a/src/bioregistry/app/ui.py b/src/bioregistry/app/ui.py
index cdbd1d4b8..2913bcfac 100644
--- a/src/bioregistry/app/ui.py
+++ b/src/bioregistry/app/ui.py
@@ -118,7 +118,7 @@ def resource(prefix: str) -> str | flask.Response:
 
     example = _resource.get_example()
     example_curie = _resource.get_example_curie(use_preferred=True)
-    example_extras = _resource.example_extras or []
+    example_extras = _resource.get_example_extras()
     example_curie_extras = [
         _resource.get_curie(example_extra, use_preferred=True) for example_extra in example_extras
     ]
diff --git a/src/bioregistry/benchmarks/uri_parsing.py b/src/bioregistry/benchmarks/uri_parsing.py
index 4334270a3..2eec052fa 100644
--- a/src/bioregistry/benchmarks/uri_parsing.py
+++ b/src/bioregistry/benchmarks/uri_parsing.py
@@ -34,7 +34,7 @@ def iter_uris() -> Iterable[tuple[str, str, str, str]]:
         for metaprefix, url in manager.get_providers_list(prefix, example):
             if url.endswith(example):  # skip funny formats
                 yield prefix, example, metaprefix, url
-        for extra_example in resource.example_extras or []:
+        for extra_example in resource.get_example_extras():
             for metaprefix, url in manager.get_providers_list(prefix, extra_example):
                 if url.endswith(extra_example):
                     yield prefix, extra_example, metaprefix, url
diff --git a/src/bioregistry/curation/add_ontology_regexes.py b/src/bioregistry/curation/add_ontology_regexes.py
index b06000edb..2f98989f2 100644
--- a/src/bioregistry/curation/add_ontology_regexes.py
+++ b/src/bioregistry/curation/add_ontology_regexes.py
@@ -13,7 +13,7 @@ def _examples(resource):
     example = resource.get_example()
     if example:
         rv.append(example)
-    rv.extend(resource.example_extras or [])
+    rv.extend(resource.get_example_extras())
     return rv
 
 
diff --git a/src/bioregistry/data/bioregistry.json b/src/bioregistry/data/bioregistry.json
index e413ac391..06716563e 100644
--- a/src/bioregistry/data/bioregistry.json
+++ b/src/bioregistry/data/bioregistry.json
@@ -89050,6 +89050,7 @@
       {
         "code": "furna",
         "description": "FURNA (Functions of RNAs) is a database of ligand-RNA interactions and Gene Ontology annotations for RNAs in the Protein Data Bank (PDB).",
+        "example": "157d",
         "homepage": "https://seq2fun.dcmb.med.umich.edu/furna/",
         "name": "furna",
         "publications": [
diff --git a/src/bioregistry/external/togoid/__init__.py b/src/bioregistry/external/togoid/__init__.py
index d629b1c17..ce44f4baf 100644
--- a/src/bioregistry/external/togoid/__init__.py
+++ b/src/bioregistry/external/togoid/__init__.py
@@ -23,6 +23,7 @@ ONTOLOGY_URL = (
     "https://raw.githubusercontent.com/togoid/togoid-config/main/ontology/togoid-ontology.ttl"
 )
 DATASET_URL = "https://raw.githubusercontent.com/togoid/togoid-config/main/config/dataset.yaml"
+DATASET_DESCRIPTIONS_URL = "https://api.togoid.dbcls.jp/config/descriptions"
 
 
 def _get_ontology() -> dict[str, str]:
@@ -37,6 +38,21 @@ def _get_ontology() -> dict[str, str]:
     }
 
 
+def _get_descriptions() -> dict[str, str]:
+    res = requests.get(DATASET_DESCRIPTIONS_URL)
+
+    # Replace \r\n and \r or \n individually with a single space
+    def _sanitize_description(description: str) -> str:
+        return description.replace("\r\n", " ").replace("\r", " ").replace("\n", " ")
+
+
+    return {
+        key: _sanitize_description(entry["description_en"])
+        for key, entry in res.json().items()
+        if "description_en" in entry
+    }
+
+
 def _get_dataset():
     data = yaml.safe_load(requests.get(DATASET_URL).text)
     rv = {}
@@ -69,9 +85,12 @@ def get_togoid(*, force_download: bool = False, force_refresh: bool = False):
             return json.load(file)
 
     key_to_prefix = _get_ontology()
+    key_to_description = _get_descriptions()
     records = _get_dataset()
     rv = {
-        key_to_prefix[key]: record | {"prefix": key_to_prefix[key]}
+        key_to_prefix[key]: record
+        | {"prefix": key_to_prefix[key]}
+        | ({"description": key_to_description.get(key)} if key in key_to_description else {})
         for key, record in records.items()
     }
 
diff --git a/src/bioregistry/external/togoid/processed.json b/src/bioregistry/external/togoid/processed.json
index da1c40fad..e3b2ff779 100644
--- a/src/bioregistry/external/togoid/processed.json
+++ b/src/bioregistry/external/togoid/processed.json
@@ -85,6 +85,7 @@
   },
   "Bioproject": {
     "catalog": "nbdc00476",
+    "description": "BioProject is a database which collects the results of research projects under the umbrella of the project or initiative. The database consists of tables of projects, which users can search or browse to find all data outputs related to that project. Users can submit projects or download data via FTP.",
     "examples": [
       "PRJDB575",
       "PRJDB1880",
@@ -107,6 +108,7 @@
   },
   "BioprojectUmbrella": {
     "catalog": "nbdc00476",
+    "description": "BioProject is a database which collects the results of research projects under the umbrella of the project or initiative. The database consists of tables of projects, which users can search or browse to find all data outputs related to that project. Users can submit projects or download data via FTP.",
     "examples": [
       "PRJDB10770",
       "PRJDB14691",
@@ -151,6 +153,7 @@
   },
   "Ccds": {
     "catalog": "nbdc00023",
+    "description": "This database seeks to identify a core set of human and mouse protein coding regions of high quality that are consistently annotated.",
     "examples": [
       "CCDS1471",
       "CCDS10913",
@@ -195,6 +198,7 @@
   },
   "Chebi": {
     "catalog": "nbdc00027",
+    "description": "ChEBI is a collection of data on entities of biological interest. This database concentrates on assembling data on smaller chemical compounds, such as atoms, molecules, ions, radicals etc. These should be produced in nature or be synthetic molecules affecting biological processes in living organisms. ChEBI does not generally include molecules directly encoded by the genome. The database contains 31,651 entries with annotations. A keyword search option is available. In addition to this an advanced search option, which includes a structure drawing tool, is provided. The ChEBI database can be searched individually or in combination with other databases.",
     "examples": [
       "84824",
       "40167",
@@ -217,6 +221,7 @@
   },
   "ChemblCompound": {
     "catalog": "nbdc02555",
+    "description": "ChEMBL is a database for bioactive molecules. It collects information of small molecules, such as calculated properties (e.g. logP, Molecular Weight, Lipinski Parameters, etc.) and abstracted bioactivities (e.g. binding constants, pharmacology and ADMET data), and the target information. Metadata of assays for small molecule activities or assays for binding activities between small molecules and its targets are also provided.",
     "examples": [
       "CHEMBL121649",
       "CHEMBL190334",
@@ -239,6 +244,7 @@
   },
   "ChemblTarget": {
     "catalog": "nbdc02555",
+    "description": "ChEMBL is a database for bioactive molecules. It collects information of small molecules, such as calculated properties (e.g. logP, Molecular Weight, Lipinski Parameters, etc.) and abstracted bioactivities (e.g. binding constants, pharmacology and ADMET data), and the target information. Metadata of assays for small molecule activities or assays for binding activities between small molecules and its targets are also provided.",
     "examples": [
       "CHEMBL2788",
       "CHEMBL3091264",
@@ -261,6 +267,7 @@
   },
   "Clinvar": {
     "catalog": "nbdc01514",
+    "description": "ClinVar is a freely available archive describing relationships between medically important variants and phenotypes. Submissions report human variation, interpretations of the relationship of that variation to human health, and the evidence supporting each interpretation. ClinVar is tightly coupled with dbSNP and dbVar, which maintain information about locations of variations on human assemblies, and also based on the phenotypic descriptions maintained in MedGen (http://www.ncbi.nlm.nih.gov/medgen). Each record contains the submitter, the variation and the phenotype. Furthermore, to facilitate evaluation of the medical importance of each variant, ClinVar aggregates submissions with the same variation/phenotype combination, adds value from other NCBI databases, and reports if there are conflicting clinical interpretations. Data in ClinVar are available in multiple formats, including html, download as XML, VCF or tab-delimited subsets.",
     "examples": [
       "658761",
       "619209",
@@ -283,6 +290,7 @@
   },
   "Cog": {
     "catalog": "nbdc00397",
+    "description": "This database defines all orthologs of protein sequences coded by known genomes. The species name, protein name, and phylogenetic tree of orthologous clusters can be viewed through this site. Each cluster is comprised of individual proteins and its paralogs, matched to evolutionarily conserved molecular domains.",
     "examples": [
       "COG0130",
       "COG0663",
@@ -305,6 +313,7 @@
   },
   "Dbsnp": {
     "catalog": "nbdc00206",
+    "description": "dbSNP collects information on polymorphisms based on single and small-scale multi-base substitutions, including insertions and deletions, microsatelites, and non-polymorphic variants. Differences in the frequency of polymorphisms in a population can be visually compared for each SNP.",
     "examples": [
       "rs746303788",
       "rs1407020249",
@@ -327,6 +336,7 @@
   },
   "Doid": {
     "catalog": "nbdc00261",
+    "description": "This site provides a Disease Ontology, which is a standardized ontology organized by human disease terms and related medical concepts. The DO terms are associated with MeSH, ICD, NCI's thesaurus, SNOMED and OMIM to integrate disease and medical vocabularies.",
     "examples": [
       "DO:9036",
       "DO:3159",
@@ -349,6 +359,7 @@
   },
   "Drugbank": {
     "catalog": "nbdc01071",
+    "description": "DrugBank is a database of detailed informatics resources on approved and experimental drugs. The database contains informaiton on drug targets as well as the results of experiments resulting in extensive bioinformatics and chemoinformatics data. Users can browse or search by drug or target. Data is available for download.",
     "examples": [
       "DB15589",
       "DB13471",
@@ -393,6 +404,7 @@
   },
   "EnsemblGene": {
     "catalog": "nbdc00054",
+    "description": "ENSEMBL is a collection of automatically annotated genome databases for vertebrates and a number of eukaryotes, integrated with all other relevant biological data available. The repository covers data on gene annotation, microarray probeset mapping and comparative genomics among many other topics. Information may be downloaded by a variety of means:  For small amounts of data, an export option is suggested. For larger amounts of data, an FTP site is provided from where a complete database may be downloaded in one of various formats, from flat files to MySQL dumps.",
     "examples": [
       "ENSG00000186283",
       "ENSAMEG00000018238",
@@ -415,6 +427,7 @@
   },
   "EnsemblProtein": {
     "catalog": "nbdc00054",
+    "description": "ENSEMBL is a collection of automatically annotated genome databases for vertebrates and a number of eukaryotes, integrated with all other relevant biological data available. The repository covers data on gene annotation, microarray probeset mapping and comparative genomics among many other topics. Information may be downloaded by a variety of means:  For small amounts of data, an export option is suggested. For larger amounts of data, an FTP site is provided from where a complete database may be downloaded in one of various formats, from flat files to MySQL dumps.",
     "examples": [
       "ENSP00000365411",
       "ENSP00000420674",
@@ -437,6 +450,7 @@
   },
   "EnsemblTranscript": {
     "catalog": "nbdc00054",
+    "description": "ENSEMBL is a collection of automatically annotated genome databases for vertebrates and a number of eukaryotes, integrated with all other relevant biological data available. The repository covers data on gene annotation, microarray probeset mapping and comparative genomics among many other topics. Information may be downloaded by a variety of means:  For small amounts of data, an export option is suggested. For larger amounts of data, an FTP site is provided from where a complete database may be downloaded in one of various formats, from flat files to MySQL dumps.",
     "examples": [
       "ENST00000638000",
       "ENST00000307864",
@@ -459,6 +473,7 @@
   },
   "FlybaseGene": {
     "catalog": "nbdc00064",
+    "description": "This database contains genetic information on Drosophila. It allows users to search using BLAST, GenomeBrowser or QuickSearch tool with taxonomical information and image-based data on the life-cycle stages of Drosophila. The information of Drosophila material resources are also provided.",
     "examples": [
       "FBgn0040373",
       "FBgn0040372",
@@ -502,6 +517,7 @@
   },
   "GeoSample": {
     "catalog": "nbdc00080",
+    "description": "This is a public data repository of functional genomics data obtained through microarrays and sequencing. Records are carefully examined by experts and standardized to comply with Minimum Information About a Microarray Experiment (MIAME) standards. The data can be searched by sample name, analysis platform, organism, assay details, and keywords. Raw data can also be downloaded from the database.",
     "examples": [
       "GSM3683883",
       "GSM6900216",
@@ -524,6 +540,7 @@
   },
   "GeoSeries": {
     "catalog": "nbdc00080",
+    "description": "This is a public data repository of functional genomics data obtained through microarrays and sequencing. Records are carefully examined by experts and standardized to comply with Minimum Information About a Microarray Experiment (MIAME) standards. The data can be searched by sample name, analysis platform, organism, assay details, and keywords. Raw data can also be downloaded from the database.",
     "examples": [
       "GSE1",
       "GSE43529",
@@ -545,8 +562,30 @@
     "prefix": "GeoSeries",
     "uri_format": "http://identifiers.org/geo/$1"
   },
+  "Glycomotif": {
+    "examples": [
+      "G64227KZ",
+      "G14091MR",
+      "G00552RX",
+      "G18625KA",
+      "G54733XO",
+      "G72557NR",
+      "G90598GO",
+      "G93805MV",
+      "G99524KA",
+      "G00029MO"
+    ],
+    "keywords": [
+      "Glycan"
+    ],
+    "name": "GlycoMotif",
+    "pattern": "^(?:GM\\.)?(?G[0-9]{5}[A-Z]{2})$",
+    "prefix": "Glycomotif",
+    "uri_format": "http://glycomotif.glyomics.org/glycomotif/GM.$1"
+  },
   "Glytoucan": {
     "catalog": "nbdc01535",
+    "description": "GlyTouCan is an international repository of glycan structures. This database contains uncurated glycan structures ranging in resolution from monosaccharide composition to fully defined structures, as long as there are no inconsistencies in the structure. The database allows users to search by text, graphic input or motif, and browse using motif-list or glycan-list.",
     "examples": [
       "G88006IV",
       "G53085MI",
@@ -569,6 +608,7 @@
   },
   "Go": {
     "catalog": "nbdc00074",
+    "description": "GO is a database which provides a controlled vocabulary of terms for describing gene product characteristics and gene product annotation data. It contains data of terms, definitions and ontology structure. The most recent version of the ontology and the annotation files contributed by members of the GO Consortium are available for download. The GO provides the AmiGO browser and search engine which are web browser-based access to the GO database.",
     "examples": [
       "GO:0005643",
       "GO:0097110",
@@ -635,6 +675,7 @@
   },
   "Hmdb": {
     "catalog": "nbdc00909",
+    "description": "HUMDB is a database of human metabolites. The database contains information on thousands of metabolites produced by and found in the human body as a result of metabolic processes. genes and proteins related to the metabolites are also affiliated with records, where appropriate. Data on metabolites and the associated genes and proteins are available for download.",
     "examples": [
       "HMDB0029433",
       "HMDB0015609",
@@ -657,6 +698,7 @@
   },
   "Homologene": {
     "catalog": "nbdc00101",
+    "description": "In Homologenes, users can find automatically constructed homologous gene sets from the full-length genome sequences of a wide range of eukaryotic species, as well as mRNA and protein sequences.",
     "examples": [
       "117",
       "17",
@@ -679,6 +721,7 @@
   },
   "HpInheritance": {
     "catalog": "nbdc02559",
+    "description": "The Human Phenotype Ontology (HPO) provides a standardized vocabulary of phenotype specialized in human disease. The medical literatures, Orphanet, DECIPHER, and OMIM are used for developing the HPO.",
     "examples": [
       "HP:0032382",
       "HP:0001475",
@@ -701,6 +744,7 @@
   },
   "HpPhenotype": {
     "catalog": "nbdc02559",
+    "description": "The Human Phenotype Ontology (HPO) provides a standardized vocabulary of phenotype specialized in human disease. The medical literatures, Orphanet, DECIPHER, and OMIM are used for developing the HPO.",
     "examples": [
       "HP:0001947",
       "HP:0031592",
@@ -744,6 +788,7 @@
   },
   "Insdc": {
     "catalog": "nbdc02567",
+    "description": "It is a portal site for the INSDC(International Nucleotide Sequence Database Collaboration), which is an initiative operated between DDBJ, EMBL-EBI and NCBI.  Each organization operates DNA databases in close coordination and cooperation with each other to achieve common accession numbers, and standardize data format (INSD-XML). The databases are called the International Nucleotide Sequence Databases (INSD).",
     "examples": [
       "U10991",
       "AF116914",
@@ -766,6 +811,7 @@
   },
   "InsdcMaster": {
     "catalog": "nbdc02567",
+    "description": "It is a portal site for the INSDC(International Nucleotide Sequence Database Collaboration), which is an initiative operated between DDBJ, EMBL-EBI and NCBI.  Each organization operates DNA databases in close coordination and cooperation with each other to achieve common accession numbers, and standardize data format (INSD-XML). The databases are called the International Nucleotide Sequence Databases (INSD).",
     "examples": [
       "ABGA00000000",
       "AADE00000000",
@@ -788,6 +834,7 @@
   },
   "Intact": {
     "catalog": "nbdc00507",
+    "description": "IntAct is a database of molecular interactions. The database contains information on more than 400,000 interactions gathered from primary literature. Users can search by gene, protein, or publication, among others, and the database includes manually annotated data from several other interaction databases. Software and bulk data, updoated weekly, are also available for download.",
     "examples": [
       "EBI-7947422",
       "EBI-15714708",
@@ -810,6 +857,7 @@
   },
   "Interpro": {
     "catalog": "nbdc00108",
+    "description": "InterPro is a database that analyses proteins functionally and classifies them into families as well as predicts their domain and sites in the genome. This repository harvests its content from a large number of related databases and consolidates its findings into a single searchable resource avoiding the occurrence of redundant entries. InterPro aims to update their content every 8 weeks. A keyword search is available and an option is provided where a protein sequence can be entered for analysis.",
     "examples": [
       "IPR038152",
       "IPR040448",
@@ -918,6 +966,7 @@
   },
   "Lrg": {
     "catalog": "nbdc02566",
+    "description": "LRG is a database of stable genomic, transcript and protein reference sequences for reporting clinically relevant sequence variants. NCBI (RefSeq) and EMBL-EBI (Ensembl/GENCODE) are working together to rationalise differences in their gene sets. Records contain information about genomic, transcript and protein sequences, annotations, maps about the genome assembly, etc. This database allows users to search using LRG identifier, HGNC gene name, NCBI and Ensembl accession numbers (gene or transcript), gene synonym or LRG status (public or pending). Genome browsers on Ensembl, NCBI and UCSC are available.",
     "examples": [
       "LRG_41",
       "LRG_356",
@@ -940,6 +989,7 @@
   },
   "MbgdGene": {
     "catalog": "nbdc00130",
+    "description": "MBGD is a database with a workbench system for comparative analysis of completely sequenced microbial genomes, mainly for creating orthologous or homologous gene cluster tables. MBGD classifies genomes by the hierarchical clustering method known as UPGMA, using precomputed similarity relationships identified by all-against-all BLAST search. Users can change the set of organisms or cutoff parameters to create their own orthologous groupings. Thus comparative genomics is facilitated from various points of view such as ortholog identification, paralog clustering, motif analysis and gene order comparison.",
     "examples": [
       "ash:AL1_RS04670",
       "ash:AL1_RS08245",
@@ -962,6 +1012,7 @@
   },
   "MbgdOrganism": {
     "catalog": "nbdc00130",
+    "description": "MBGD is a database with a workbench system for comparative analysis of completely sequenced microbial genomes, mainly for creating orthologous or homologous gene cluster tables. MBGD classifies genomes by the hierarchical clustering method known as UPGMA, using precomputed similarity relationships identified by all-against-all BLAST search. Users can change the set of organisms or cutoff parameters to create their own orthologous groupings. Thus comparative genomics is facilitated from various points of view such as ortholog identification, paralog clustering, motif analysis and gene order comparison.",
     "examples": [
       "lac",
       "pfl",
@@ -984,6 +1035,7 @@
   },
   "Meddra": {
     "catalog": "nbdc02564",
+    "description": "MedDRA is a standardized medical terminology for regulatory information of medical products. It is available for use in the registration, documentation and safety monitoring of medical products. It is provided in many languages, which are Chinese, Czech, Dutch, French, German, Hungarian, Italian, Japanese, Korean, Portuguese, Portuguese - Brazilian, Russian, and Spanish in addition to English Master.",
     "examples": [
       "10008033",
       "10027710",
@@ -1006,6 +1058,7 @@
   },
   "Medgen": {
     "catalog": "nbdc02560",
+    "description": "MedGen is a portal database about conditions and phenotypes related to Medical Genetics. It aggregates terms from the NIH Genetic Testing Registry (GTR), UMLS, HPO, Orphanet, ClinVar and other sources into concepts, and assigns a unique identifier and a preferred name and symbol. Each entry includes names, identifiers used by other databases, mode of inheritance, clinical features, and map location of the loci affecting the disorder. This database provides links to such resources as: Genetic tests registered in the NIH Genetic Testing Registry (GTR), GeneReviews, ClinVar, OMIM, Related genes, Disorders with similar clinical features, Medical and research literature, Practice guidelines, Consumer resources, Ontologies such as HPO and ORDO.",
     "examples": [
       "C0264897",
       "C0028860",
@@ -1028,6 +1081,7 @@
   },
   "Mesh": {
     "catalog": "nbdc00132",
+    "description": "This is a database of keywords representing the content of articles and biological information. The keywords are structured in layers to allow users to find more detailed information or perform abstract searches.",
     "examples": [
       "D002065",
       "C562829",
@@ -1050,6 +1104,7 @@
   },
   "MgiAllele": {
     "catalog": "nbdc00135",
+    "description": "This is a comprehensive site for mouse research. The site contains detailed information on mouse genes, gene expression data, polymorphisms and mutations, pathways, data on model rats for hereditary cancers, and phenotypes of each mouse model system. They have developed and provided The Human - Mouse: Disease Connection (HMDC) and Mammalian Phenotype Ontology.",
     "examples": [
       "MGI:1857242",
       "MGI:1857411",
@@ -1072,6 +1127,7 @@
   },
   "MgiGene": {
     "catalog": "nbdc00135",
+    "description": "This is a comprehensive site for mouse research. The site contains detailed information on mouse genes, gene expression data, polymorphisms and mutations, pathways, data on model rats for hereditary cancers, and phenotypes of each mouse model system. They have developed and provided The Human - Mouse: Disease Connection (HMDC) and Mammalian Phenotype Ontology.",
     "examples": [
       "MGI:2387184",
       "MGI:1920977",
@@ -1094,6 +1150,7 @@
   },
   "MgiGenotype": {
     "catalog": "nbdc00135",
+    "description": "This is a comprehensive site for mouse research. The site contains detailed information on mouse genes, gene expression data, polymorphisms and mutations, pathways, data on model rats for hereditary cancers, and phenotypes of each mouse model system. They have developed and provided The Human - Mouse: Disease Connection (HMDC) and Mammalian Phenotype Ontology.",
     "examples": [
       "MGI:2166359",
       "MGI:2166381",
@@ -1116,6 +1173,7 @@
   },
   "Mirbase": {
     "catalog": "nbdc00136",
+    "description": "miRBase is a database for published microRNA sequences and annotations, which include mature miRNA sequences (indicated by miR), and hairpin structures predicted by sequences that are precursors for miRNA (indicated by mir). A variety of search methods can be used, including by keyword, genomic position, cluster, expression data, and user-provided sequences. Furthermore, these sequences and annotations can be downloaded.",
     "examples": [
       "MI0003587",
       "MI0000252",
@@ -1138,6 +1196,7 @@
   },
   "Mondo": {
     "catalog": "nbdc02563",
+    "description": "Mondo is an ontology for integrating disease definitions. It collects disease definitions and data models from numerous sources, which include HPO, OMIM, SNOMED CT, ICD, PhenoDB, MedDRA, MedGen, ORDO, DO, GARD, etc. It provides a hierarchical structure which can be used for classification or \"rolling up\" diseases to higher level groupings.",
     "examples": [
       "MONDO:0000115",
       "MONDO:0002345",
@@ -1181,6 +1240,7 @@
   },
   "Nando": {
     "catalog": "nbdc02557",
+    "description": "NanbyoData provides informative data related to intractable diseases using Nanbyo Disease Ontology (NANDO). Designated intractable diseases and chronic specific pediatric diseases in Japan are the subject diseases. NANDO, and genes and phenotypes related intractable diseases are downloadable.",
     "examples": [
       "NANDO:1200461",
       "NANDO:1200466",
@@ -1203,6 +1263,7 @@
   },
   "NbdcHumanDb": {
     "catalog": "nbdc01348",
+    "description": "This site is a platform for sharing data from studies in humans, providing rules and frameworks for promoting the utilization and sharing of the enormous amount of human data while considering protection of personal information. The site was established by the JST NBDC and cooperates with the DNA Data Bank of Japan (DDBJ) to publish data. This site can provide data related to humans as well as guidelines for the use of such information.",
     "examples": [
       "hum0004",
       "hum0006",
@@ -1225,6 +1286,7 @@
   },
   "Ncbigene": {
     "catalog": "nbdc00073",
+    "description": "The gene database provides information on gene sequence, structure, location, and function for annotated genes from the NCBI database. Users can search by accession ID or keyword, compare and identify sequences using BLAST, or submit references into function (RIFs) based on experimental results. Bulk download and an update mailing list are available.",
     "examples": [
       "63962027",
       "1046",
@@ -1333,6 +1395,7 @@
   },
   "OmimGene": {
     "catalog": "nbdc00154",
+    "description": "OMIM is a database of human disease and genetic information and the online representation of Mendelian Inheritance in Man, a project initiated in the 1960s. The database summarizes heritable traits and provides information on both the trait and experimentally determined genetic causes. The database is manually curated by experts and can be searched by OMIM ID, gene, disease, or phenotype.",
     "examples": [
       "604810",
       "115460",
@@ -1355,6 +1418,7 @@
   },
   "OmimPhenotype": {
     "catalog": "nbdc00154",
+    "description": "OMIM is a database of human disease and genetic information and the online representation of Mendelian Inheritance in Man, a project initiated in the 1960s. The database summarizes heritable traits and provides information on both the trait and experimentally determined genetic causes. The database is manually curated by experts and can be searched by OMIM ID, gene, disease, or phenotype.",
     "examples": [
       "207780",
       "236100",
@@ -1377,6 +1441,7 @@
   },
   "OrphanetGene": {
     "catalog": "nbdc01422",
+    "description": "Orphanet is a portal site for rare diseases and orphan drugs. It provides inventory of rare diseases and classification, inventory of orphan drugs, clinical trials, etc.",
     "examples": [
       "ORPHA:217124",
       "ORPHA:218033",
@@ -1399,6 +1464,7 @@
   },
   "OrphanetPhenotype": {
     "catalog": "nbdc01422",
+    "description": "Orphanet is a portal site for rare diseases and orphan drugs. It provides inventory of rare diseases and classification, inventory of orphan drugs, clinical trials, etc.",
     "examples": [
       "ORPHA:101078",
       "ORPHA:596",
@@ -1442,6 +1508,7 @@
   },
   "Pdb": {
     "catalog": "nbdc00156",
+    "description": "This is an international public repository for three-dimensional structures and structure coordinates (conformations) of proteins and nucleic acids, and the central database for biological structural data. Data obtained through X-ray crystallography and NMR experiments are stored in PDB. In addition to three-dimensional information of proteins, users can find amino acid sequences, protein-related information on GO, and other compounds bound to the protein.",
     "examples": [
       "3PFQ",
       "2OUY",
@@ -1486,6 +1553,7 @@
   },
   "Pfam": {
     "catalog": "nbdc00163",
+    "description": "Pfam Version 26.0 is a comprehensive database of protein families containing multiple sequence alignments and HMMs. This repository provides data on 13,672 protein families. The site can be searched with a known protein sequence for matching families.  Options to search for a Pfam family, clan, sequence or structure are available. A keyword search option is also provided.",
     "examples": [
       "PF03719",
       "PF03726",
@@ -1506,8 +1574,31 @@
     "prefix": "Pfam",
     "uri_format": "http://identifiers.org/pfam/$1"
   },
+  "Pmc": {
+    "catalog": "nbdc01836",
+    "examples": [
+      "PMC7857752",
+      "PMC10139720",
+      "PMC3815299",
+      "PMC4990340",
+      "PMC6885017",
+      "PMC5286597",
+      "PMC8035296",
+      "PMC46450",
+      "PMC11138896",
+      "PMC9528096"
+    ],
+    "keywords": [
+      "Literature"
+    ],
+    "name": "PMC",
+    "pattern": "^(?:PMC)?(?\\d+)$",
+    "prefix": "Pmc",
+    "uri_format": "http://identifiers.org/pmc/PMC$1"
+  },
   "Prosite": {
     "catalog": "nbdc00241",
+    "description": "ExPASy PROSITE is a database of protein domains, protein families and their functional sites. This repository also provides profiles and associated patterns, which can be used to identify the above. This version (20.91) was made available on 4 March 2013. It contains 1,661 documentation entries, 1,053 profiles and 1,308 patterns. The database can be searched by entering a document number, a ProRule description, a taxonomic series or by calling up a page, whereupon the proteins are listed according to the number of positive UniProtKB hits, from most to least. The option is also provided to have a sequence scanned against PROSITE patterns and profiles. In the Advanced search option that is available, additional criteria may be added when a scan request is entered to specify the results more accurately.",
     "examples": [
       "PS01177",
       "PS00516",
@@ -1530,6 +1621,7 @@
   },
   "PrositeProrule": {
     "catalog": "nbdc00241",
+    "description": "ExPASy PROSITE is a database of protein domains, protein families and their functional sites. This repository also provides profiles and associated patterns, which can be used to identify the above. This version (20.91) was made available on 4 March 2013. It contains 1,661 documentation entries, 1,053 profiles and 1,308 patterns. The database can be searched by entering a document number, a ProRule description, a taxonomic series or by calling up a page, whereupon the proteins are listed according to the number of positive UniProtKB hits, from most to least. The option is also provided to have a sequence scanned against PROSITE patterns and profiles. In the Advanced search option that is available, additional criteria may be added when a scan request is entered to specify the results more accurately.",
     "examples": [
       "PRU00498",
       "PRU00672",
@@ -1552,6 +1644,7 @@
   },
   "PubchemCompound": {
     "catalog": "nbdc00641",
+    "description": "PubChem Compound is a database of chemical structrues of validated small molecules. The dataase contains entries for PubChem entities which are grouped by structural identity and similarity. Users can submit compounds and download via FTP.",
     "examples": [
       "9548669",
       "160419",
@@ -1596,6 +1689,7 @@
   },
   "PubchemSubstance": {
     "catalog": "nbdc00642",
+    "description": "PubChem Substance is a database of samples of chemical entities which links to the biological activity of those samples in PubChem BioAssay. The database contains structural information on substances with links to further information in cases where the substance has been more fully characterized. It consists of records of chemical entities deposited by various contributors, so a chemical entity may be described different records with different data in this database.",
     "examples": [
       "15229855",
       "15277848",
@@ -1618,6 +1712,7 @@
   },
   "Pubmed": {
     "catalog": "nbdc00179",
+    "description": "This database contains bibliographic information from journal articles in the field of life science as well as MEDLINE (title, authors, journal name, abstracts). Links are provided for articles with free access to the full article.",
     "examples": [
       "19281226",
       "19879151",
@@ -1640,6 +1735,7 @@
   },
   "ReactomePathway": {
     "catalog": "nbdc00185",
+    "description": "REACTOME is a database of human pathways for basic research, genome analysis, pathway modeling, systems biology and education. It contains manually curated and peer-reviewed pathway data which are annotated by expert biologists, in collaboration with Reactome editorial staff and cross-referenced to many bioinformatics databases. This database provides an intuitive website to navigate pathway knowledge and a suite of data analysis tools to support the pathway-based analysis of complex experimental and computational data sets. The curated  human pathway data are available to infer orthologous events in 20 non-human species including mouse, rat, chicken, worm, fly, yeast, plant and bacteria. Using species comparison tool, users are able to compare predicted pathways with those of human to find reactions and pathways common to a selected species and human.",
     "examples": [
       "R-HSA-165159",
       "R-DRE-1630316",
@@ -1662,6 +1758,7 @@
   },
   "ReactomeReaction": {
     "catalog": "nbdc00185",
+    "description": "REACTOME is a database of human pathways for basic research, genome analysis, pathway modeling, systems biology and education. It contains manually curated and peer-reviewed pathway data which are annotated by expert biologists, in collaboration with Reactome editorial staff and cross-referenced to many bioinformatics databases. This database provides an intuitive website to navigate pathway knowledge and a suite of data analysis tools to support the pathway-based analysis of complex experimental and computational data sets. The curated  human pathway data are available to infer orthologous events in 20 non-human species including mouse, rat, chicken, worm, fly, yeast, plant and bacteria. Using species comparison tool, users are able to compare predicted pathways with those of human to find reactions and pathways common to a selected species and human.",
     "examples": [
       "R-DRE-1482961",
       "R-DRE-6814409",
@@ -1684,6 +1781,7 @@
   },
   "RefseqGenomic": {
     "catalog": "nbdc00187",
+    "description": "RefSeq is a database of standard reference genomic, transcript, and protein sequences. The database contains consensus sequence data for over 20,000 organisms and over 27 million proteins and is designed to provide a common basis for experimental studies that can be searched using accession ID, keyword, or BLAST. Bulk data is available for FTP download.",
     "examples": [
       "NG_004671",
       "NG_011844",
@@ -1707,6 +1805,7 @@
   },
   "RefseqProtein": {
     "catalog": "nbdc00187",
+    "description": "RefSeq is a database of standard reference genomic, transcript, and protein sequences. The database contains consensus sequence data for over 20,000 organisms and over 27 million proteins and is designed to provide a common basis for experimental studies that can be searched using accession ID, keyword, or BLAST. Bulk data is available for FTP download.",
     "examples": [
       "NP_001171968",
       "NP_001365494",
@@ -1729,6 +1828,7 @@
   },
   "RefseqRna": {
     "catalog": "nbdc00187",
+    "description": "RefSeq is a database of standard reference genomic, transcript, and protein sequences. The database contains consensus sequence data for over 20,000 organisms and over 27 million proteins and is designed to provide a common basis for experimental studies that can be searched using accession ID, keyword, or BLAST. Bulk data is available for FTP download.",
     "examples": [
       "XR_001747779",
       "XM_017013006",
@@ -1751,6 +1851,7 @@
   },
   "Rgd": {
     "catalog": "nbdc00188",
+    "description": "This is a comprehensive site for rat genome researches. In addition to information on rat genes, the site contains information on rat strains, data on rat models for disease, and publications.",
     "examples": [
       "1308312",
       "1311120",
@@ -1795,6 +1896,7 @@
   },
   "Sgd": {
     "catalog": "nbdc00202",
+    "description": "This is an integrated database for budding yeast Saccharomyces cerevisiae. It contains search and analysis tools based on genes, sequences, and functions, as well as information related to citations, and the community. The information is updated and maintained by curators. It enables users to find functional relationships to sequences and gene products of fungi and higher organisms can also be verified. The SGD also maintains all gene names for budding yeast through the gene Name Registry.",
     "examples": [
       "S000003096",
       "S000003789",
@@ -1817,6 +1919,7 @@
   },
   "Smart": {
     "catalog": "nbdc00682",
+    "description": "SMART is a database of protein domains found in several different protein classes. The database contains classification information for domains and the proteins they can be found in. Users can search by sequence or domain information. The database can also be requested for local installation.",
     "examples": [
       "SM00130",
       "SM00239",
@@ -1839,6 +1942,7 @@
   },
   "SraAccession": {
     "catalog": "nbdc00687",
+    "description": "SRA is a database of raw sequence reads from next-generation sequencing systems. The database contains millions of unannotated raw reads generated from a variety of projects. Data can be submitted to the archive or downloaded via FTP.",
     "examples": [
       "DRA000741",
       "DRA000768",
@@ -1861,6 +1965,7 @@
   },
   "SraAnalysis": {
     "catalog": "nbdc00687",
+    "description": "SRA is a database of raw sequence reads from next-generation sequencing systems. The database contains millions of unannotated raw reads generated from a variety of projects. Data can be submitted to the archive or downloaded via FTP.",
     "examples": [
       "DRZ000249",
       "DRZ000087",
@@ -1883,6 +1988,7 @@
   },
   "SraExperiment": {
     "catalog": "nbdc00687",
+    "description": "SRA is a database of raw sequence reads from next-generation sequencing systems. The database contains millions of unannotated raw reads generated from a variety of projects. Data can be submitted to the archive or downloaded via FTP.",
     "examples": [
       "DRX000585",
       "DRX000114",
@@ -1905,6 +2011,7 @@
   },
   "SraProject": {
     "catalog": "nbdc00687",
+    "description": "SRA is a database of raw sequence reads from next-generation sequencing systems. The database contains millions of unannotated raw reads generated from a variety of projects. Data can be submitted to the archive or downloaded via FTP.",
     "examples": [
       "DRP000994",
       "DRP000877",
@@ -1927,6 +2034,7 @@
   },
   "SraRun": {
     "catalog": "nbdc00687",
+    "description": "SRA is a database of raw sequence reads from next-generation sequencing systems. The database contains millions of unannotated raw reads generated from a variety of projects. Data can be submitted to the archive or downloaded via FTP.",
     "examples": [
       "DRR000834",
       "DRR000683",
@@ -1949,6 +2057,7 @@
   },
   "SraSample": {
     "catalog": "nbdc00687",
+    "description": "SRA is a database of raw sequence reads from next-generation sequencing systems. The database contains millions of unannotated raw reads generated from a variety of projects. Data can be submitted to the archive or downloaded via FTP.",
     "examples": [
       "DRS001431",
       "DRS001371",
@@ -1993,6 +2102,7 @@
   },
   "Tair": {
     "catalog": "nbdc00697",
+    "description": "TAIR is a database of Arabidopsis thaliana information. The database contains genetic and molecular information for the plant, including several browseable data formats including seed stocks, gene names, and mutant collections. Users can download data from several categories, from images to gene expression microarrays.",
     "examples": [
       "AT3G60400",
       "AT1G26300",
@@ -2015,6 +2125,7 @@
   },
   "Taxonomy": {
     "catalog": "nbdc00700",
+    "description": "Taxonomy is a database of systematic classifications of organisms repesented in public sequencing databases. The database contains phylogenetic relatonships and nomenclature for an estimated 10% of all living species. Tools include a browser, genetic codes, and a common evolutionary tree. Taxonomic classificatinos can be downloaded via FTP.",
     "examples": [
       "1171376",
       "484906",
@@ -2037,6 +2148,7 @@
   },
   "Togovar": {
     "catalog": "nbdc02359",
+    "description": "TogoVar (NBDC's integrated database of Japanese genomic variation) is a database that has collected and organized genome sequence differences between individuals (variants) in the Japanese population and disease information associated with them. TogoVar provides variant frequencies in the Japanese population that have been aggregated across research projects. Two available datasets, JGA-NGS and JGA-SNP, are obtained by aggregating individual genomic data that have been registered in the NBDC Human Database / Japanese Genotype-phenotype Archive (JGA). In addition, TogoVar integrates information related to genotypes or phenotypes that has been compiled independently in a variety of different databases and provides information for interpreting variants in a one-stop, easy-to-understand manner. Users can learn how to use it by a movie: https://togotv.dbcls.jp/en/20181012.html",
     "examples": [
       "tgv100005930",
       "tgv100000890",
@@ -2080,6 +2192,7 @@
   },
   "Uniprot": {
     "catalog": "nbdc00221",
+    "description": "This database contains information on amino acid sequences and their functions. It is composed of four core databases, UniProtKB, UniRef, UniParc, and Proteomes. UniProtKB contains two types of data, which are manually curated high quality SwissProt annotations based on literature information, and automatically annotated TrEMBL.  UniRef provides results of sequence similarity searches.  UniParc integrates information such as ID for other databases per sequence ID. Proteomes provides proteome data of each organism with completely sequenced genomes.",
     "examples": [
       "A0A174V9D2",
       "A0A1V4U2Y9",
@@ -2102,6 +2215,7 @@
   },
   "UniprotMnemonic": {
     "catalog": "nbdc00221",
+    "description": "This database contains information on amino acid sequences and their functions. It is composed of four core databases, UniProtKB, UniRef, UniParc, and Proteomes. UniProtKB contains two types of data, which are manually curated high quality SwissProt annotations based on literature information, and automatically annotated TrEMBL.  UniRef provides results of sequence similarity searches.  UniParc integrates information such as ID for other databases per sequence ID. Proteomes provides proteome data of each organism with completely sequenced genomes.",
     "examples": [
       "2ABA_ORYSJ",
       "33K_ADES1",
@@ -2122,12 +2236,12 @@
     "prefix": "UniprotMnemonic",
     "uri_format": "http://purl.uniprot.org/uniprot/$1"
   },
-  "UniprotReferenceProteome": {
+  "UniprotProteome": {
     "catalog": "nbdc00221",
+    "description": "This database contains information on amino acid sequences and their functions. It is composed of four core databases, UniProtKB, UniRef, UniParc, and Proteomes. UniProtKB contains two types of data, which are manually curated high quality SwissProt annotations based on literature information, and automatically annotated TrEMBL.  UniRef provides results of sequence similarity searches.  UniParc integrates information such as ID for other databases per sequence ID. Proteomes provides proteome data of each organism with completely sequenced genomes.",
     "examples": [
       "UP000005640",
       "UP000002311",
-      "UP000005640",
       "UP000000589",
       "UP000000803",
       "UP000000437",
@@ -2139,9 +2253,9 @@
     "keywords": [
       "Proteome"
     ],
-    "name": "UniProt reference proteome",
+    "name": "UniProt proteome",
     "pattern": "^(?UP\\d{0,9})$",
-    "prefix": "UniprotReferenceProteome",
+    "prefix": "UniprotProteome",
     "uri_format": "http://purl.uniprot.org/proteomes/$1"
   },
   "Vgnc": {
@@ -2190,6 +2304,7 @@
   },
   "WormbaseGene": {
     "catalog": "nbdc00740",
+    "description": "WormBase is a database of information on nematodes and other worms. The database contains extensive information on a number of species including genome sequences, genes, gene expression, proteins, and phenotypes. Users can search by keyword, BLAST, or BLAT, and create user accounts to save searches and other useful information.",
     "examples": [
       "WBGene00016754",
       "WBGene00015101",
@@ -2234,6 +2349,7 @@
   },
   "ZfinGene": {
     "catalog": "nbdc00746",
+    "description": "ZFIN is a central repository and web-based resource for zebrafish genetics and development. This database contains manually curated data for zebrafish genes, phenotypes, genotypes, gene expression, antibodies, anatomical structures and publications from three primary sources: curation of zebrafish publications, individual research laboratories and collaborations with bioinformatics organizations. The database also contains a wide-ranging collection of web-based search forms and tools facilitates access to integrated views of these data promoting analysis and scientific discovery. ZFIN works closely with ZIRC to connect their genetic data with available probes and fish lines.",
     "examples": [
       "ZDB-GENE-030131-9947",
       "ZDB-GENE-030131-2670",
diff --git a/src/bioregistry/resource_manager.py b/src/bioregistry/resource_manager.py
index 1767fa1b0..cc9937a1f 100644
--- a/src/bioregistry/resource_manager.py
+++ b/src/bioregistry/resource_manager.py
@@ -899,7 +899,7 @@ class Manager:
             download_rdf=resource.get_download_rdf(),
             # Registry properties
             example=resource.get_example(),
-            example_extras=resource.example_extras,
+            example_extras=resource.get_example_extras(),
             example_decoys=resource.example_decoys,
             uri_format=resource.get_uri_format(),
             rdf_uri_format=resource.get_rdf_uri_format(),
diff --git a/src/bioregistry/schema/schema.json b/src/bioregistry/schema/schema.json
index 29ccbf9bf..3c20edf5d 100644
--- a/src/bioregistry/schema/schema.json
+++ b/src/bioregistry/schema/schema.json
@@ -398,6 +398,19 @@
           "default": null,
           "description": "A list of publications about the provider. See the `indra` provider for `hgnc` for an example.",
           "title": "Publications"
+        },
+        "example": {
+          "anyOf": [
+            {
+              "type": "string"
+            },
+            {
+              "type": "null"
+            }
+          ],
+          "default": null,
+          "description": "An example local identifier, specific to the provider. Providing this value is only necessary if the example associated with the prefix for which this is a provider is not resolvable by the provider. The example identifier should exclude any redundant usage of the prefix. For example, a GO identifier should only look like ``1234567`` and not like ``GO:1234567``",
+          "title": "Example"
         }
       },
       "required": [
diff --git a/src/bioregistry/schema/struct.py b/src/bioregistry/schema/struct.py
index 986d18b29..3d1bbe8de 100644
--- a/src/bioregistry/schema/struct.py
+++ b/src/bioregistry/schema/struct.py
@@ -260,6 +260,14 @@ class Provider(BaseModel):
         default=None,
         description="A list of publications about the provider. See the `indra` provider for `hgnc` for an example.",
     )
+    example: str | None = Field(
+        default=None,
+        description="An example local identifier, specific to the provider. Providing this value is "
+        "only necessary if the example associated with the prefix for which this is a provider "
+        "is not resolvable by the provider. The example identifier should exclude any redundant "
+        "usage of the prefix. For example, a GO identifier should only "
+        "look like ``1234567`` and not like ``GO:1234567``",
+    )
 
     def resolve(self, identifier: str) -> str:
         """Resolve the identifier into a URI.
@@ -1355,9 +1363,18 @@ class Resource(BaseModel):
         example = self.get_example()
         if example:
             rv.append(example)
-        rv.extend(self.example_extras or [])
+        rv.extend(self.get_example_extras())
         return rv
 
+    def get_example_extras(self) -> list[str]:
+        """Aggregate manually curated examples with provider-specific examples."""
+        rv = set(self.example_extras or [])
+        if self.providers:
+            for provider in self.providers:
+                if provider.example:
+                    rv.add(provider.example)
+        return sorted(rv)
+
     def get_example_curie(self, use_preferred: bool = False) -> str | None:
         """Get an example CURIE, if an example identifier is available.
 


Test patch:
diff --git a/tests/test_data.py b/tests/test_data.py
index 33c014c72..9f7984663 100644
--- a/tests/test_data.py
+++ b/tests/test_data.py
@@ -421,7 +421,8 @@ class TestRegistry(unittest.TestCase):
     def test_extra_examples(self):
         """Test extra examples."""
         for prefix, entry in self.registry.items():
-            if not entry.example_extras:
+            example_extras = entry.get_example_extras()
+            if not example_extras:
                 continue
             primary_example = entry.get_example()
             with self.subTest(prefix=prefix):
@@ -429,7 +430,7 @@ class TestRegistry(unittest.TestCase):
                     primary_example, msg="entry has extra examples but not primary example"
                 )
 
-            for example in entry.example_extras:
+            for example in example_extras:
                 with self.subTest(prefix=prefix, identifier=example):
                     self.assertEqual(entry.standardize_identifier(example), example)
                     self.assertNotEqual(
@@ -438,8 +439,8 @@ class TestRegistry(unittest.TestCase):
                     self.assert_is_valid_identifier(prefix, example)
 
             self.assertEqual(
-                len(entry.example_extras),
-                len(set(entry.example_extras)),
+                len(example_extras),
+                len(set(example_extras)),
                 msg="duplicate extra examples",
             )