@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_09469 a sh:SPARQLExecutable, sh:SPARQLSelectExecutable ;
  sh:prefixes _:sparql_examples_prefixes ;
  rdfs:comment '''Check there are no entries with a localization keyword that do not have the corresponding subcellular location annotation and/or GO cellular component annotatio'''@en ;
  schema:keywords "QC", "keyword", "cellular component", "subcellular location" ;
  schema:target <https://sparql.nextprot.org/sparql> ;
  sh:select '''PREFIX : <http://nextprot.org/rdf/>
PREFIX cv: <http://nextprot.org/rdf/terminology/>

select distinct ?entry ?kw ?subcell ?gocc where {
  ?entry :isoform /:keyword /:term ?kw.
  ?subcell a :UniprotSubcellularLocationCv.
  ?kw :related ?subcell.
  ?gocc a :GoCellularComponentCv.
  ?kw :related ?gocc.
  ?entry :isoform /:goCellularComponent ?comp.
  filter not exists {?comp :negativeEvidence ?negev} # No negative evidence
  filter not exists {?comp :term ?gocc.}
  ?entry :isoform /:subcellularLocation ?comp.
  filter not exists {?comp :negativeEvidence ?negev} # No negative evidence
  filter not exists {?comp :term ?gocc.}
}''' .
