uniprot-database

Par mkurman · zorai

Accédez aux métadonnées, fonctions, taxonomies et séquences de protéines via UniProtKB, UniParc et UniRef. À utiliser pour rechercher des protéines, mapper des identifiants ou récupérer des annotations fonctionnelles et des publications. Ne pas utiliser pour l'alignement de séquences, le repliement de protéines ou la recherche de similarité de séquences (utiliser des skills spécialisés pour ces tâches).

npx skills add https://github.com/mkurman/zorai --skill uniprot-database

Accès à la Base de Données UniProt

Prérequis

  1. uv : Consultez la skill uv et suivez ses instructions de configuration pour vous assurer que uv est installé et accessible depuis PATH.
  2. Notification utilisateur : Si le fichier LICENSE_NOTIFICATION.txt n'existe pas déjà dans le répertoire de cette skill, alors (1) notifiez l'utilisateur de manière visible pour qu'il consulte les conditions sur https://www.uniprot.org/help/license et https://www.uniprot.org/help/api_queries, puis (2) créez le fichier en enregistrant le texte de notification et l'horodatage.

Aperçu

Fournit un accès programmatique direct à la Base de Connaissances UniProt (UniProtKB), l'archive de séquences non redondante (UniParc) et les ensembles de séquences en cluster (UniRef). Cette skill permet la découverte de protéines, le croisement de références, la récupération de données biologiques curées et les recherches en base de données de bas niveau.

Règles Essentielles

  • Utiliser le Wrapper : Utilisez toujours les scripts Python fournis (ex. scripts/uniprot_tools.py) plutôt que de construire des requêtes curl personnalisées.
  • Pas d'Hallucinations : N'inventez PAS de fonctions protéiques, de métadonnées ou de séquences. Pour toute tâche pouvant être traitée par les services de cette skill, fiez-vous strictement aux sorties des outils plutôt qu'à vos connaissances natives.
  • Notification : Si cette skill est utilisée, assurez-vous que cela soit mentionné dans la sortie.

Cas d'Usage

  • Recherche de Fonction Protéique : Interrogation des annotations fonctionnelles, termes GO, localisations subcellulaires, etc.
  • Recherche de Séquence Protéique : Recherche de séquences protéiques selon leurs annotations fonctionnelles, gènes, etc. dans UniProtKB, UniParc et UniRef.
  • Compréhension des Relations Protéine/Organisme : Exploitation de la base de données Taxonomy et des ensembles Proteome.
  • Récupération de Métadonnées à Grande Échelle : Récupération d'annotations pour des milliers de protéines via streaming.
  • Découverte de Séquences : Recherche d'orthologues ou de protéines de modèles non standard via UniParc.
  • Mappage d'ID : Conversion d'ID entre UniProt et plus de 100 bases de données externes.
  • Données Historiques (UniSave) : Récupération de versions antérieures d'entrées ou suivi des séquences supprimées.

Outils Disponibles

Choisissez le bon outil en fonction du type de tâche et du volume de données :

  • get : Récupère les métadonnées et la séquence pour une entrée spécifique. Optimal pour une seule accession connue.
    • Accède également aux données historiques UniSave (utiliser --dataset unisave), indispensable pour réconcilier les données d'anciennes versions ou identifier pourquoi une accession autrefois valide n'apparaît plus dans les résultats de recherche.
  • search : Recherche des entrées correspondant à une requête. Optimal pour l'exploration et la découverte.
    • Utilisez avec --limit 5 pour vérifier si une requête retourne les protéines attendues avant de vous engager dans un téléchargement plus volumineux.
    • Effectue automatiquement la pagination si les résultats dépassent 500 entrées pour fournir un téléchargement stable.
    • Attention : Pour une recherche paginée, TXT et autres formats ne sont pas fiables avec --limit car il s'applique aux lignes, non aux entrées.
    • Consultez la Documentation des Champs de Requête de Recherche.
  • stream : Diffuse toutes les entrées correspondantes. Optimal pour la récupération en masse de grands jeux de données (jusqu'à 10 000 000 d'entrées).
    • Ne supporte PAS --limit ; retourne toujours l'ensemble complet des résultats.
    • Utilisez search avec --limit si vous avez besoin d'un sous-ensemble.
  • count : Compte les entrées correspondant à une requête. Optimal pour répondre à des questions de dénombrement direct ou pour une estimation initiale avant d'exécuter une search ou un stream complet.
  • sparql : Exécute des requêtes de graphe pour la découverte complexe. Optimal pour le dénombrement, les correspondances de séquences exactes et les requêtes multi-bases de données.
  • map : Convertit les ID entre UniProt et plus de 100 bases de données. Optimal pour les tâches de mappage d'ID.
    • Consultez la Documentation de Mappage d'ID.
    • search vs. map : Essayez d'abord search avant de recourir à map si ce n'est pas explicitement demandé par l'utilisateur. Par exemple, un ID externe peut être recherchable dans UniParc mais échouer à mapper vers UniProtKB.

Flux de Travail

Flux de Travail Typique de Recherche Protéique

Copiez cette liste de contrôle et suivez la progression :

  • [ ] Étape 1 : Identifier la/les protéine(s) cible(s) et l'organisme/les organismes.
  • [ ] Étape 2 : Rechercher dans UniProtKB les entrées révisées (reviewed:true).
  • [ ] Étape 3 : Si aucune entrée révisée, rechercher les non révisées ou utiliser UniParc pour la découverte de séquences.
  • [ ] Étape 4 : Mapper les ID externes (ex. Ensembl, PDB) vers les Accessions UniProt si nécessaire.
  • [ ] Étape 5 : Récupérer les métadonnées fonctionnelles ou la séquence au format souhaité (JSON, FASTA).

Gestion des Recherches Infructueuses (ex. Recherche de Gène chez Organismes Non Modèles)

Si une requête directe échoue (ex. gene:SYMBOL) :

  1. Passer au Nom de la Protéine : Rechercher le nom commun de la protéine (ex. protein_name:Alpha-crystallin A).
  2. Utiliser UniParc : Rechercher dans l'ensemble de données UniParc, qui intègre les séquences de l'ensemble du vivant, même si elles ne sont pas entièrement annotées dans UniProtKB.
  3. Vérifier les Orthologues/Canoniques : Résoudre d'abord l'ortholog Humain/Souris pour trouver la dénomination/mnémonique correcte.

Priorités de Récupération en Masse

[!IMPORTANT] Préférez toujours stream ou sparql pour les données en masse. search convient pour l'exploration ; si les résultats dépassent 500 entrées, il effectue automatiquement la pagination pour fournir un téléchargement stable.

  • Priorité 0 : count : Vérifiez TOUJOURS le nombre de résultats avant d'exécuter une search ou un stream.
  • Priorité 1 : stream : Méthode principale pour la récupération de données en masse (jusqu'à 10 M d'entrées). Ne supporte PAS --limit ; retourne toujours tous les résultats.
  • Priorité 2 : sparql : Optimal pour les filtres complexes et les correspondances exactes lors de la récupération.

Recherche Basée sur la Séquence (Correspondance Exacte)

[!IMPORTANT] Utilisez SPARQL pour rechercher une protéine par sa séquence d'acides aminés complète. Le endpoint /search de l'API REST ne supporte pas les recherches directes de chaînes de séquences. Pour toute correspondance non-exacte, utilisez des skills spécialisées de recherche de similarité de séquence. Utilisez UniParc si vous ne trouvez pas la requête dans UniProt.

Modèle de Requête SPARQL (UniProt) :

PREFIX up: <http://purl.uniprot.org/core/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?protein ?name WHERE {
  ?protein a up:Protein ;
           up:sequence/rdf:value "SEQUENCE_HERE" .
  OPTIONAL {
    ?protein up:recommendedName/up:fullName ?name .
  }
}

Modèle de Requête SPARQL (UniParc) :

PREFIX up: <http://purl.uniprot.org/core/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT ?uniparc ?val WHERE {
  GRAPH <http://sparql.uniprot.org/uniparc> {
    ?uniparc a up:Sequence ;
             rdf:value ?val .
    FILTER (?val = "SEQUENCE_HERE")
  }
}

Dénombrement Efficace des Entrées

[!IMPORTANT] Utilisez count ou SPARQL pour dénombrer les entrées (ex. « Combien de protéines chez l'Humain ? »).

Modèle de Dénombrement (Protéines par Organisme) :

PREFIX up: <http://purl.uniprot.org/core/>
PREFIX taxon: <http://purl.uniprot.org/taxonomy/>
SELECT (COUNT(?protein) AS ?count) WHERE {
  ?protein a up:Protein ;
           up:reviewed true ;
           up:organism taxon:9606 .
}

Syntaxe de Recherche REST

  • Pas de Virgules dans les Listes : Les virgules sont traitées comme des littéraux. Utilisez OR en majuscules pour séparer les éléments.
    • Groupé : accession:(P12345 OR P67890)
    • Répété : accession:P12345 OR accession:P67890
  • Espace = ET : Ex. gene:p53 human recherche les deux.

Commandes Exemples

Ci-dessous se trouvent des commandes exemples pour chaque mode de uniprot_tools.py.

Dénombrer le nombre total d'entrées pour une requête donnée.

uv run scripts/uniprot_tools.py count "taxonomy_id:9606"

Rechercher des entrées.

uv run scripts/uniprot_tools.py search "gene:p53 AND reviewed:true" --limit 5

Récupérer une seule entrée par accession.

uv run scripts/uniprot_tools.py get P04637

Récupérer une Entrée Historique/Supprimée (UniSave).

uv run scripts/uniprot_tools.py get P04637 --dataset unisave

Diffuser les grands jeux de résultats pour la récupération en masse (retourne TOUTES les entrées correspondantes, pas de support --limit).

uv run scripts/uniprot_tools.py stream "taxonomy_id:9606 AND reviewed:true" --format tsv --fields accession,gene_names > human_reviewed.tsv

Mapper les ID d'une base de données à une autre.

uv run scripts/uniprot_tools.py map "P04637" --from_db UniProtKB_AC-ID --to_db Gene_Name

Exécuter des requêtes de graphe avec SPARQL.

uv run scripts/uniprot_tools.py sparql 'PREFIX up: <http://purl.uniprot.org/core/> SELECT ?protein WHERE { ?protein a up:Protein ; up:reviewed true . } LIMIT 5'

Erreurs Courantes

  • Utiliser name: au lieu de protein_name: : name: n'est pas un terme de requête supporté, utilisez protein_name: à la place.
  • Ignorer UniParc : Les organismes non modèles peuvent n'exister que dans UniParc.
  • Confondre Accession avec UPI : Les Accessions UniProtKB (ex. P04637) sont liées aux métadonnées fonctionnelles ; les ID UniParc (UPI...) sont réservés aux séquences uniquement. Vous pouvez trouver les références croisées entre les ID UniParc et les Accessions UniProtKB en utilisant l'outil de Mappage d'ID.
  • Utiliser UniProtKB-AC comme Cible dans le Mappage d'ID : Utilisez UniProtKB à la place.
  • Abandonner les Requêtes Complexes : Si une requête de recherche complexe échoue, essayez d'utiliser SPARQL au lieu d'abandonner.
  • Utiliser les ID Sans Vérifier la Signification : NE SUPPOSEZ JAMAIS que vous connaissez la signification d'un ID (ex. mot-clé, terme GO, ID Pfam, etc.). CONSULTEZ TOUJOURS la description/signification en langage naturel d'un ID dans UniProt avant de l'utiliser pour une recherche afin de vous assurer qu'il correspond à votre terme de recherche prévu.
  • Ignorer le Bruit de Citation dans les Recherches Larges : Les recherches de texte larges (search "term") retournent fréquemment des faux positifs (ex. protéines de maintenance courantes) car UniProt recherche les métadonnées complètes, y compris les titres de publications. PRÉFÉREZ TOUJOURS les filtres spécifiques aux champs comme cc_function: ou protein_name: pour la découverte fonctionnelle.
  • Oublier de Citer les Termes de Recherche Courts : Les termes courts non cités (ex. lanM) peuvent correspondre à des sous-chaînes dans les noms d'organismes (ex. Lancefieldella) ou d'autres champs. Utilisez des guillemets et des préfixes de champ (ex. gene:lanM) pour isoler les vrais résultats.
  • Manipuler les Séquences Protéiques Directement : Utilisez toujours du code et des outils pour les opérations basées sur les séquences. N'essayez pas d'éditer, tronquer ou modifier manuellement les séquences protéiques.
  • Surutiliser Search pour les Données en Masse : N'UTILISEZ PAS search pour récupérer des millions d'entrées si stream ou sparql peuvent faire le travail. Le streaming est plus efficace pour les très grands jeux de données. Notez que stream a une limite stricte de 10 000 000 sorties et ne supporte PAS --limit.
  • Oublier de Vérifier le Volume de Données : EFFECTUEZ TOUJOURS un count avant d'exécuter une search sans --limit ou avant d'utiliser stream. Les requêtes illimitées peuvent prendre longtemps et consommer des ressources importantes si des millions d'entrées sont retournées.
  • Utiliser --limit avec stream : La commande stream ne supporte PAS --limit. Si vous avez besoin d'un nombre limité de résultats, utilisez search avec --limit à la place.
  • Oublier la Notice de Licence : N'oubliez pas de déclarer que la Base de Données UniProt a été utilisée et de conseiller à l'utilisateur de consulter les conditions de licence lors de la présentation des résultats pour la première fois. Même si la tâche est concise, cette attribution est obligatoire dans la première réponse contenant des données UniProt.

Documents de Référence

Skills similaires