sparql-examples

A set of SPARQL examples that are used in different SIB resources

View the Project on GitHub sib-swiss/sparql-examples

36

Returns the list of isomeric subspecies containing a specific combination of fatty acids at defined positions, but only those isomeric subspecies that are associated with a publication. If the user supplies a single fatty acid and position (e.g. hexadecanoate at sn1), find all lipids with that fatty acid at that position, irrespective of whether or not there are other fatty acids at positions (here sn2, sn3). could generalize this query to allow logical combinations of fatty acids (e.g. hexadecanoate at sn1 AND (9Z)-octadecenoate at sn2, hexadecanoate at sn1 AND NOT (9Z)-octadecenoate at sn2, etc) Output should include the corresponding SwissLipids ID(s) and name(s) and PMIDs.

Use at

PREFIX SWISSLIPID: <https://swisslipids.org/rdf/SLM_>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>


SELECT ?startId ?startName ?tail1 ?tailName1 ?tail2 ?tailName2 ?id ?name ?pubmed
WHERE {
  VALUES ?startId { SWISSLIPID:000121946 }
  ?startId rdfs:label ?startName .
  # tail components
  ?startId SWISSLIPID:haspart ?tail1 .
  ?startId SWISSLIPID:haspart ?tail2 .
  FILTER(!sameTerm(?tail1, ?tail2))
  ?tail1 rdfs:label ?tailName1 .
  ?tail2 rdfs:label ?tailName2 .

  # Retrieve lipids with similar tails
  ?id SWISSLIPID:haspart ?tail1 , ?tail2 .
  
  # Restrict to isomeric subspecies with PubMed citation(s)
  ?id SWISSLIPID:rank SWISSLIPID:Isomeric_Subspecies .
  ?id SWISSLIPID:citation ?pubmed .

  # Retrieve name
  ?id rdfs:label ?name .
}
ORDER BY ?id ?tail1 ?tail2
graph TD
classDef projected fill:lightgreen;
classDef literal fill:orange;
classDef iri fill:yellow;
  v1("?id"):::projected 
  v9("?name"):::projected 
  v8("?pubmed"):::projected 
  v4("?startId"):::projected 
  v5("?startName"):::projected 
  v2("?tail1"):::projected 
  v3("?tail2"):::projected 
  v6("?tailName1"):::projected 
  v7("?tailName2"):::projected 
  c4(["SWISSLIPID:Isomeric_Subspecies"]):::iri 
  f0[["not sameterm(?tail1,?tail2)"]]
  f0 --> v2
  f0 --> v3
  bind1[/VALUES ?startId/]
  bind1-->v4
  bind10(["SWISSLIPID:000121946"])
  bind10 --> bind1
  v4 --"rdfs:label"-->  v5
  v4 --"SWISSLIPID:haspart"-->  v2
  v4 --"SWISSLIPID:haspart"-->  v3
  v2 --"rdfs:label"-->  v6
  v3 --"rdfs:label"-->  v7
  v1 --"SWISSLIPID:haspart"-->  v2
  v1 --"SWISSLIPID:haspart"-->  v3
  v1 --"SWISSLIPID:rank"-->  c4
  v1 --"SWISSLIPID:citation"-->  v8
  v1 --"rdfs:label"-->  v9