@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_00280 a sh:SPARQLExecutable,
        sh:SPARQLSelectExecutable ;
    rdfs:comment "Proteins interacting with at least 10 members of a protein family "@en ;
    sh:prefixes _:sparql_examples_prefixes ;
    sh:select """PREFIX : <http://nextprot.org/rdf/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

SELECT DISTINCT ?entry (str(?gen) as ?gene) (str(?xlab) as ?itfamily) ?itcnt ?membercnt ((xsd:float(?itcnt) / xsd:float(?membercnt)) as ?ratio) WHERE {
 {
 select ?xterm ?xlab (count(distinct ?member) as ?membercnt) WHERE {
 ?member :isoform? / :familyName /:term /:childOf ?xterm.
 ?xterm rdfs:label ?xlab .
 } group by ?xterm ?xlab
 }
 {
 select ?xterm ?entry ?gen (count (distinct ?interactant) as ?itcnt) WHERE {
 ?entry :isoform ?iso; :gene / :name / rdfs:label ?gen .
 ?iso :interaction ?it.
 ?it :quality :GOLD; :interactant ?interactant.
 ?interactant :familyName /:term /:childOf ?xterm .
 } group by ?xterm ?entry ?gen having (count (distinct ?interactant) >= 10)
 }
}
order by desc(?ratio)
limit 60""" ;
    schema:keywords "PPI",
        "family",
        "tutorial" ;
    schema:target <https://sparql.nextprot.org/sparql> .

