Domains and topology
This page shows you how UniProt records protein domains, sequence regions (zinc fingers, coiled-coils, transmembrane segments), and membrane topology.
All of these are represented as up:annotation resources on the protein, each with its own annotation class (up:Domain_Extent_Annotation, up:Transmembrane_Annotation, up:Zinc_Finger_Annotation, up:Coiled_Coil_Annotation, …). Where a feature has a position on the sequence, it’s attached via up:range, using the FALDO ontology’s faldo:begin/faldo:end — each pointing to a position resource with a faldo:position (an integer, 1-based).
The queries on this page are adapted from the sparql-examples collection of curated UniProt SPARQL queries.
Domain extents
Find the start and end position of annotated protein domains, using UniProt’s own domain model (rather than an InterPro/Pfam cross-reference).
Example data (Turtle) — edit it, then re-run any query below
base <http://purl.uniprot.org/uniprot/>
prefix up: <http://purl.uniprot.org/core/>
prefix taxon: <http://purl.uniprot.org/taxonomy/>
prefix faldo: <http://biohackathon.org/resource/faldo#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
<P04637>
a up:Protein ;
up:organism taxon:9606 ;
up:reviewed true ;
up:annotation <P04637#Domain_1> .
<P04637#Domain_1>
a up:Domain_Extent_Annotation ;
rdfs:comment "DNA-binding" ;
up:range <P04637#Domain_1_range> .
<P04637#Domain_1_range>
faldo:begin <P04637#Domain_1_begin> ;
faldo:end <P04637#Domain_1_end> .
<P04637#Domain_1_begin> faldo:position 102 .
<P04637#Domain_1_end> faldo:position 292 .PREFIX up: <http://purl.uniprot.org/core/>
PREFIX taxon: <http://purl.uniprot.org/taxonomy/>
PREFIX faldo: <http://biohackathon.org/resource/faldo#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT
?protein
?domainName
?begin
?end
WHERE {
?protein a up:Protein ;
up:organism taxon:9606 ;
up:reviewed true ;
up:annotation ?annotation .
?annotation a up:Domain_Extent_Annotation ;
rdfs:comment ?domainName ;
up:range ?range .
?range faldo:begin/faldo:position ?begin ;
faldo:end/faldo:position ?end .
}Zinc finger regions
Zinc finger regions are commonly found in DNA-binding proteins. The zinc finger type is optional — not every annotation names one.
Example data (Turtle) — edit it, then re-run any query below
base <http://purl.uniprot.org/uniprot/>
prefix up: <http://purl.uniprot.org/core/>
prefix taxon: <http://purl.uniprot.org/taxonomy/>
prefix faldo: <http://biohackathon.org/resource/faldo#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
<Q09472>
a up:Protein ;
up:organism taxon:9606 ;
up:reviewed true ;
up:annotation <Q09472#ZnF_1> .
<Q09472#ZnF_1>
a up:Zinc_Finger_Annotation ;
rdfs:comment "C2HC-type" ;
up:range <Q09472#ZnF_1_range> .
<Q09472#ZnF_1_range>
faldo:begin <Q09472#ZnF_1_begin> ;
faldo:end <Q09472#ZnF_1_end> .
<Q09472#ZnF_1_begin> faldo:position 1764 .
<Q09472#ZnF_1_end> faldo:position 1782 .PREFIX up: <http://purl.uniprot.org/core/>
PREFIX taxon: <http://purl.uniprot.org/taxonomy/>
PREFIX faldo: <http://biohackathon.org/resource/faldo#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT
?protein
?zincFingerType
?begin
?end
WHERE {
?protein a up:Protein ;
up:organism taxon:9606 ;
up:reviewed true ;
up:annotation ?annotation .
?annotation a up:Zinc_Finger_Annotation ;
up:range ?range .
OPTIONAL { ?annotation rdfs:comment ?zincFingerType }
?range faldo:begin/faldo:position ?begin ;
faldo:end/faldo:position ?end .
}Coiled-coil regions
Coiled-coil regions use exactly the same shape — only the annotation class changes.
Example data (Turtle) — edit it, then re-run any query below
base <http://purl.uniprot.org/uniprot/>
prefix up: <http://purl.uniprot.org/core/>
prefix taxon: <http://purl.uniprot.org/taxonomy/>
prefix faldo: <http://biohackathon.org/resource/faldo#>
<P04637>
a up:Protein ;
up:organism taxon:9606 ;
up:reviewed true ;
up:annotation <P04637#CC_1> .
<P04637#CC_1>
a up:Coiled_Coil_Annotation ;
up:range <P04637#CC_1_range> .
<P04637#CC_1_range>
faldo:begin <P04637#CC_1_begin> ;
faldo:end <P04637#CC_1_end> .
<P04637#CC_1_begin> faldo:position 323 .
<P04637#CC_1_end> faldo:position 356 .PREFIX up: <http://purl.uniprot.org/core/>
PREFIX taxon: <http://purl.uniprot.org/taxonomy/>
PREFIX faldo: <http://biohackathon.org/resource/faldo#>
SELECT
?protein
?begin
?end
WHERE {
?protein a up:Protein ;
up:organism taxon:9606 ;
up:reviewed true ;
up:annotation ?annotation .
?annotation a up:Coiled_Coil_Annotation ;
up:range ?range .
?range faldo:begin/faldo:position ?begin ;
faldo:end/faldo:position ?end .
}Transmembrane regions, and what comes just before them
A more elaborate example: find proteins with a transmembrane region, then look at the 15 amino acids immediately before it (using the raw sequence, rdf:value on the FALDO position’s reference) and keep only the ones containing an alanine (A).
Example data (Turtle) — edit it, then re-run any query below
base <http://purl.uniprot.org/uniprot/>
prefix up: <http://purl.uniprot.org/core/>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix faldo: <http://biohackathon.org/resource/faldo#>
prefix isoform: <http://purl.uniprot.org/isoforms/>
<P07204>
a up:Protein ;
up:annotation <P07204#TM_1> ;
up:sequence isoform:P07204-1 .
<P07204#TM_1>
a up:Transmembrane_Annotation ;
up:range <P07204#TM_1_range> .
<P07204#TM_1_range>
faldo:begin <P07204#TM_1_begin> .
<P07204#TM_1_begin>
faldo:position 22 ;
faldo:reference isoform:P07204-1 .
isoform:P07204-1
rdf:value "MLGIVLTLAALPAQATFPAKAVSDAQSQVIAVSALGAIVLVLLL" .PREFIX faldo: <http://biohackathon.org/resource/faldo#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX up: <http://purl.uniprot.org/core/>
SELECT ?protein ?from ?interestingRegion
WHERE
{
?protein up:annotation ?annotation .
?annotation a up:Transmembrane_Annotation .
# Get the coordinates of the Transmembrane
?annotation up:range ?range .
?range faldo:begin ?beginI .
?beginI faldo:position ?begin .
?beginI faldo:reference ?sequence .
# The aas will have the specific IUPAC aminoacids
?sequence rdf:value ?aas .
# We calculate the start by substracting 10
BIND(?begin - 10 AS ?tenBeforeBegin)
# Can't start before the sequence starts or we might miss some results
BIND(IF(?tenBeforeBegin < 1, 0, ?tenBeforeBegin) AS ?from)
# Substring the IUPAC aminoacids
BIND(SUBSTR(?aas, ?from, 15) AS ?interestingRegion)
# The interestingRegion needds to contain an Alanine
FILTER(CONTAINS(?interestingRegion, 'A'))
}Enzymes with at least two transmembrane domains
A pattern combining a property path, GROUP BY and HAVING: find hydrolases (EC 3.-.-.-) annotated with two or more transmembrane regions. up:enzyme|up:annotation/up:catalyticActivity/up:enzymeClass reads as “either directly via up:enzyme, or via a catalytic-activity annotation” — both are ways UniProt links a protein to its EC number.
Example data (Turtle) — edit it, then re-run any query below
base <http://purl.uniprot.org/uniprot/>
prefix up: <http://purl.uniprot.org/core/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix enzyme: <http://purl.uniprot.org/enzyme/>
<Q9Y6M0>
a up:Protein ;
up:enzyme enzyme:3.6.1.3 ;
up:annotation <Q9Y6M0#TM_1>, <Q9Y6M0#TM_2> .
enzyme:3.6.1.3 rdfs:subClassOf enzyme:3.-.-.- .
<Q9Y6M0#TM_1> a up:Transmembrane_Annotation .
<Q9Y6M0#TM_2> a up:Transmembrane_Annotation .PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX up: <http://purl.uniprot.org/core/>
SELECT
?protein
WHERE {
?protein up:enzyme|up:annotation/up:catalyticActivity/up:enzymeClass ?enzymeClass ;
up:annotation ?transMembraneAnnotation .
?enzymeClass rdfs:subClassOf <http://purl.uniprot.org/enzyme/3.-.-.-> .
?transMembraneAnnotation a up:Transmembrane_Annotation .
} GROUP BY ?protein HAVING (COUNT(DISTINCT ?transMembraneAnnotation) >= 2)Membrane topology of a subcellular location
Beyond where a protein is located, UniProt can record how it sits there — e.g. as a peripheral membrane protein, a lipid anchor, or a multi-pass membrane protein.
Example data (Turtle) — edit it, then re-run any query below
base <http://purl.uniprot.org/uniprot/>
prefix up: <http://purl.uniprot.org/core/>
prefix taxon: <http://purl.uniprot.org/taxonomy/>
prefix skos: <http://www.w3.org/2004/02/skos/core#>
prefix location: <http://purl.uniprot.org/locations/>
prefix topology: <http://purl.uniprot.org/topologies/>
<Q9Y6M0>
a up:Protein ;
up:organism taxon:9606 ;
up:reviewed true ;
up:annotation <Q9Y6M0#SL_1> .
<Q9Y6M0#SL_1>
a up:Subcellular_Location_Annotation ;
up:locatedIn <Q9Y6M0#SL_1_in> .
<Q9Y6M0#SL_1_in>
up:cellularComponent location:Cell_membrane ;
up:topology topology:Multi-pass_membrane_protein .
location:Cell_membrane skos:prefLabel "Cell membrane" .
topology:Multi-pass_membrane_protein skos:prefLabel "Multi-pass membrane protein" .PREFIX up: <http://purl.uniprot.org/core/>
PREFIX taxon: <http://purl.uniprot.org/taxonomy/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT
?protein
?subcellularLocation
?topology
WHERE {
?protein a up:Protein ;
up:organism taxon:9606 ;
up:reviewed true ;
up:annotation ?annotation .
?annotation a up:Subcellular_Location_Annotation ;
up:locatedIn ?location .
?location up:cellularComponent ?component ;
up:topology ?topologyResource .
?component skos:prefLabel ?subcellularLocation .
?topologyResource skos:prefLabel ?topology .
}