@prefix ex: <https://kg.earthmetabolome.org/metrin/api/.well-known/examples/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix schema: <https://schema.org/> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix spex:<https://purl.expasy.org/sparql-examples/ontology#> .

ex:019 a sh:SPARQLExecutable,
        sh:SPARQLSelectExecutable ;
    rdfs:comment "A list of interactions depicting connections between parasatoids harmful for insects living as parasites on plants."@en ;
    sh:prefixes _:sparql_examples_prefixes ;
    sh:select """PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX emi: <https://w3id.org/emi#>
PREFIX sosa: <http://www.w3.org/ns/sosa/>
PREFIX dcterms: <http://purl.org/dc/terms/>
SELECT DISTINCT ?parasitoidX_WD ?parasitoidName ?intxn2Label ?parasiteX_WD ?parasiteName ?intxn3Label ?hostPlant_WD ?hostPlantName ?study2_DOI ?study3_DOI WHERE {
	# part-1 interaction data parasite and parasitoid
	{
		SELECT DISTINCT ?parasitoidName ?parasiteName ?parasiteX_WD ?intxn2Label ?parasitoidX_WD ?study2_DOI WHERE {
			?intxn2 emi:hasSource ?parasitoidX ; # retrieve interaction pairs part-1
	    			emi:hasTarget ?parasiteX ;
	    			emi:isClassifiedWith ?intxnName2 .
			VALUES ?intxnName2 { <http://purl.obolibrary.org/obo/RO_0002208> } # keep interactions only if the interaction-id is RO_0002208 (parasitoidOf), e.g: 'parasitoidX' is 'parasitoidOf' 'parasiteX'
			?intxnName2 rdfs:label ?intxn2Label .
			?parasitoidX emi:inTaxon ?parasitoidX_WD ; # retreieve wikidata-ids for parasitoidX
			     	rdfs:label ?parasitoidName ;
			     	sosa:isSampleOf ?parasitoidSample . # retrieve scientific name of parasitoidX as listed in GloBI
			?parasiteX emi:inTaxon ?parasiteX_WD ; # retreieve wikidata-ids for parasiteX
				rdfs:label ?parasiteName ;
				sosa:isSampleOf ?parasiteSample . # retreieve scientific name for parasiteX as listed in GloBI
			OPTIONAL {
				?intxn2 dcterms:bibliographicCitation ?study2_DOI . # optionally retrieve the doi of the study for parasitoid-parasite pairs
			}
		}
	}

	# part-2 interaction data parasite and host plant
	?parasiteX1 emi:inTaxon ?parasiteX_WD .	# check pasarsiteX1 is in wikidata-id parasiteX_WD (the ones obtained from interaction-pairs part-1)
	?intxn3 emi:hasSource ?parasiteX1 ; # retrieve interaction pairs part-2
    		emi:hasTarget ?hostPlant ;
    		emi:isClassifiedWith ?intxnName3 .
	?intxnName3 rdfs:label ?intxn3Label .
	?hostPlant emi:inTaxon ?hostPlant_WD ;	# retreieve wikidata-ids for hostPlant
		rdfs:label ?hostPlantName ;
		sosa:isSampleOf ?hostPlantSample . # retreieve scientific name for hostPlant as listed in GloBI
	OPTIONAL {
		?intxn3 dcterms:bibliographicCitation ?study3_DOI .
	}
    	FILTER (!(STR(?intxn3Label) IN ('visits', 'visitsFlowersOf', 'pollinates')))	# keep interactions only if the interaction-names are not 'visits', 'visitsFlowersOf' or 'pollinates'. e.g.: 'parasiteX1' is 'pathogenOf/parasiteOf/..' 'hostPlant'
	SERVICE <https://qlever.dev/api/wikidata> {
	 	?hostPlant_WD wdt:P171* wd:Q879246 . # keep the interaction pairs part-2 only if hostPlant_WD has Kingdom Archaeplastida (wd:Q879246) in its lineage, this is to ensure the hostPlant is really a plant
	}
} LIMIT 1000""" ;
    schema:target <https://kg.earthmetabolome.org/metrin/api/> ;
    spex:federatesWith <https://qlever.dev/api/wikidata> .
