@prefix ex:<https://purl.expasy.org/sparql-examples/neXtProt/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix schema: <https://schema.org/> .
@prefix sh: <http://www.w3.org/ns/shacl#> .

ex:NXQ_00281 a sh:SPARQLExecutable,
        sh:SPARQLSelectExecutable ;
    rdfs:comment "Protein pairs with at least 50 common interactors (excluding keratins) "@en ;
    sh:prefixes _:sparql_examples_prefixes ;
    sh:select """PREFIX : <http://nextprot.org/rdf/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT DISTINCT ?entry ?gene ?entry2 ?gene2 ?commonitcnt ?sampleit WHERE {
 {
 SELECT DISTINCT ?entry (str(?gen) as ?gene) ?entry2 (str(?gen2) as ?gene2) (count (distinct ?commonpartner) as ?commonitcnt) (str(sample(?genit)) as ?sampleit) WHERE {
 ?entry :isoform / :interaction ?it1; :gene / :name / rdfs:label ?gen.
 ?it1 :quality :GOLD; :interactant ?commonpartner .
 ?entry2 :isoform / :interaction ?it2; :gene / :name / rdfs:label ?gen2.
 ?it2 :quality :GOLD;:interactant ?commonpartner .
 ?commonpartner :gene / :name / rdfs:label ?genit .
 filter(?entry != ?entry2)
 filter(!contains(?gen,"KRT") && !contains(?gen2,"KRT") && !contains(?genit,"KRT")) # remove sticky keratins
} group by ?entry ?gen ?entry2 ?gen2 having (count (distinct ?commonpartner) >= 50) 				}
filter(substr(str(?entry),34) < substr(str(?entry2),34)) # ensures only one row by it pair
}
order by desc(?commonitcnt)""" ;
    schema:keywords "PPI",
        "tutorial" ;
    schema:target <https://sparql.nextprot.org/sparql> .

