enforcing a single person by reusing a single variable:
Still 5 minutes. Additional thoughts:
- I had already required that ?p1 and ?p2 be instances of class obo:NCBITaxon_9606 (and used them in the subject position), so literals shouldn't have allowed there, right?
- Did you see that my third rule
<http://example.org/docdHypertensionPheno>
uses the new individual creation trick?
PREFIX obo: <http://purl.obolibrary.org/obo/>
PREFIX ontologies: <http://transformunify.org/ontologies/>
select *
where
{
?h1 a ontologies:TURBO_0010335 ;
obo:OBI_0000299 ?o18o1201 .
?o18o1201 a ontologies:TURBO_0010334 ;
obo:IAO_0000136 ?SBP1 .
?SBP1 a obo:VSO_0000038 ;
obo:RO_0000052 ?p .
?p a obo:NCBITaxon_9606 .
?h2 a ontologies:TURBO_0010335 ;
obo:OBI_0000299 ?o18o1202 .
?o18o1202 a ontologies:TURBO_0010334 ;
obo:IAO_0000136 ?SBP2 .
?SBP2 a obo:VSO_0000038 ;
obo:RO_0000052 ?p .
filter(?h1 != ?h2)
bind(uuid() as ?pheno)
}
Using a pragma
Still 5 minutes
PREFIX obo: <http://purl.obolibrary.org/obo/>
PREFIX ontologies: <http://transformunify.org/ontologies/>
select *
where
{
#pragma equality.identity ?p1,?p2
?h1 a ontologies:TURBO_0010335 ;
obo:OBI_0000299 ?o18o1201 .
?o18o1201 a ontologies:TURBO_0010334 ;
obo:IAO_0000136 ?SBP1 .
?SBP1 a obo:VSO_0000038 ;
obo:RO_0000052 ?p1 .
?p1 a obo:NCBITaxon_9606 .
?h2 a ontologies:TURBO_0010335 ;
obo:OBI_0000299 ?o18o1202 .
?o18o1202 a ontologies:TURBO_0010334 ;
obo:IAO_0000136 ?SBP2 .
?SBP2 a obo:VSO_0000038 ;
obo:RO_0000052 ?p2 .
?p2 a obo:NCBITaxon_9606 .
filter(?h1 != ?h2)
filter(?p1 = ?p2)
bind(uuid() as ?pheno)
}
Plan (applied to query with pragma immediately above)
prefix obo: <http://purl.obolibrary.org/obo/>
prefix ontologies: <http://transformunify.org/ontologies/>
Distinct [#1]
`─ Projection(?h1, ?o18o1201, ?SBP1, ?p1, ?h2, ?o18o1202, ?SBP2, ?p2, ?pheno) [#1]
`─ Bind(?p1 AS ?p2) [#1]
`─ Bind(UUID() AS ?pheno) [#1]
`─ Filter(((("P18Y"^^xsd:duration < (?gcazsxxf - ?hujctdru) && "120"^^xsd:integer < ?nsjsyqly) && "120"^^xsd:integer < ?wqmpjvbm) && "P18Y"^^xsd:duration < (?wovedbqf - ?hpokrtgp))) [#1]
`─ NestedLoopJoin(_) [#1]
+─ NestedLoopJoin(_) [#1]
│ +─ HashJoin(?asmnkdjh) [#1]
│ │ +─ Filter(?h1 != ?h2) [#1]
│ │ │ `─ HashJoin(?o18o1202) [#1]
│ │ │ +─ HashJoin(?SBP2) [#1]
│ │ │ │ +─ HashJoin(?SBP1) [#1]
│ │ │ │ │ +─ HashJoin(?o18o1201) [#1]
│ │ │ │ │ │ +─ HashJoin(?vymmvtim) [#1]
│ │ │ │ │ │ │ +─ HashJoin(?ihbirrol) [#1]
│ │ │ │ │ │ │ │ +─ MergeJoin(?h1) [#1]
│ │ │ │ │ │ │ │ │ +─ Sort(?h1) [#1]
│ │ │ │ │ │ │ │ │ │ `─ MergeJoin(?ihbirrol) [#1]
│ │ │ │ │ │ │ │ │ │ +─ Scan[POSC](?ihbirrol, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:BFO_0000035) [#1]
│ │ │ │ │ │ │ │ │ │ `─ Scan[PSOC](?ihbirrol, obo:RO_0002223, ?h1) [#1]
│ │ │ │ │ │ │ │ │ `─ NaryJoin(?h1) [#1]
│ │ │ │ │ │ │ │ │ +─ Scan[PSOC](?h1, obo:BFO_0000055, ?vymmvtim) [#1]
│ │ │ │ │ │ │ │ │ +─ Scan[PSOC](?h1, obo:OBI_0000299, ?o18o1201) [#1]
│ │ │ │ │ │ │ │ │ `─ Scan[POSC](?h1, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:OGMS_0000097) [#1]
│ │ │ │ │ │ │ │ `─ NaryJoin(?ptbejnhg) [#1]
│ │ │ │ │ │ │ │ +─ Scan[PSOC](?ptbejnhg, obo:IAO_0000004, ?gcazsxxf) [#1]
│ │ │ │ │ │ │ │ +─ Scan[POSC](?ptbejnhg, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:IAO_0000416) [#1]
│ │ │ │ │ │ │ │ `─ Scan[PSOC](?ptbejnhg, obo:IAO_0000136, ?ihbirrol) [#1]
│ │ │ │ │ │ │ `─ MergeJoin(?najnqhor) [#1]
│ │ │ │ │ │ │ +─ Scan[POSC](?najnqhor, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:NCBITaxon_9606) [#1]
│ │ │ │ │ │ │ `─ Sort(?najnqhor) [#1]
│ │ │ │ │ │ │ `─ MergeJoin(?vymmvtim) [#1]
│ │ │ │ │ │ │ +─ Scan[POSC](?vymmvtim, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:OMRSE_00000011) [#1]
│ │ │ │ │ │ │ `─ Scan[PSOC](?vymmvtim, obo:RO_0000052, ?najnqhor) [#1]
│ │ │ │ │ │ `─ MergeJoin(?rftuuvyg) [#1]
│ │ │ │ │ │ +─ Sort(?rftuuvyg) [#1]
│ │ │ │ │ │ │ `─ MergeJoin(?omfgapfa) [#1]
│ │ │ │ │ │ │ +─ Sort(?omfgapfa) [#1]
│ │ │ │ │ │ │ │ `─ MergeJoin(?o18o1201) [#1]
│ │ │ │ │ │ │ │ +─ Sort(?o18o1201) [#1]
│ │ │ │ │ │ │ │ │ `─ MergeJoin(?zonwhvrc) [#1]
│ │ │ │ │ │ │ │ │ +─ Scan[POSC](?zonwhvrc, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:OGMS_0000097) [#1]
│ │ │ │ │ │ │ │ │ `─ Scan[PSOC](?zonwhvrc, obo:OBI_0000299, ?o18o1201) [#1]
│ │ │ │ │ │ │ │ `─ NaryJoin(?o18o1201) [#1]
│ │ │ │ │ │ │ │ +─ Scan[PSOC](?o18o1201, obo:IAO_0000136, ?SBP1) [#1]
│ │ │ │ │ │ │ │ +─ Scan[PSOC](?o18o1201, obo:IAO_0000136, ?omfgapfa) [#1]
│ │ │ │ │ │ │ │ +─ Scan[POSC](?o18o1201, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:HTN_00000001) [#1]
│ │ │ │ │ │ │ │ `─ Scan[PSOC](?o18o1201, obo:OBI_0001938, ?rftuuvyg) [#1]
│ │ │ │ │ │ │ `─ Scan[POSC](?omfgapfa, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:VSO_0000038) [#1]
│ │ │ │ │ │ `─ NaryJoin(?rftuuvyg) [#1]
│ │ │ │ │ │ +─ Scan[PSOC](?rftuuvyg, obo:OBI_0002135, ?wqmpjvbm) [#1]
│ │ │ │ │ │ +─ Scan[POSC](?rftuuvyg, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:OBI_0001933) [#1]
│ │ │ │ │ │ `─ Scan[POSC](?rftuuvyg, obo:IAO_0000039, obo:UO_0000272) [#1]
│ │ │ │ │ `─ MergeJoin(?p1) [#1]
│ │ │ │ │ +─ Sort(?p1) [#1]
│ │ │ │ │ │ `─ MergeJoin(?SBP1) [#1]
│ │ │ │ │ │ +─ Scan[POSC](?SBP1, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:VSO_0000038) [#1]
│ │ │ │ │ │ `─ Scan[PSOC](?SBP1, obo:RO_0000052, ?p1) [#1]
│ │ │ │ │ `─ MergeJoin(?p1) [#1]
│ │ │ │ │ +─ Scan[POSC](?p1, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:NCBITaxon_9606) [#1]
│ │ │ │ │ `─ Sort(?p1) [#1]
│ │ │ │ │ `─ MergeJoin(?SBP2) [#1]
│ │ │ │ │ +─ Scan[POSC](?SBP2, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:VSO_0000038) [#1]
│ │ │ │ │ `─ Scan[PSOC](?SBP2, obo:RO_0000052, ?p1) [#1]
│ │ │ │ `─ MergeJoin(?eeifbqdc) [#1]
│ │ │ │ +─ Sort(?eeifbqdc) [#1]
│ │ │ │ │ `─ MergeJoin(?ybohlkeh) [#1]
│ │ │ │ │ +─ Sort(?ybohlkeh) [#1]
│ │ │ │ │ │ `─ MergeJoin(?o18o1202) [#1]
│ │ │ │ │ │ +─ Sort(?o18o1202) [#1]
│ │ │ │ │ │ │ `─ MergeJoin(?thdgxgoy) [#1]
│ │ │ │ │ │ │ +─ Scan[POSC](?thdgxgoy, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:OGMS_0000097) [#1]
│ │ │ │ │ │ │ `─ Scan[PSOC](?thdgxgoy, obo:OBI_0000299, ?o18o1202) [#1]
│ │ │ │ │ │ `─ NaryJoin(?o18o1202) [#1]
│ │ │ │ │ │ +─ Scan[PSOC](?o18o1202, obo:IAO_0000136, ?SBP2) [#1]
│ │ │ │ │ │ +─ Scan[POSC](?o18o1202, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:HTN_00000001) [#1]
│ │ │ │ │ │ +─ Scan[PSOC](?o18o1202, obo:IAO_0000136, ?ybohlkeh) [#1]
│ │ │ │ │ │ `─ Scan[PSOC](?o18o1202, obo:OBI_0001938, ?eeifbqdc) [#1]
│ │ │ │ │ `─ Scan[POSC](?ybohlkeh, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:VSO_0000038) [#1]
│ │ │ │ `─ NaryJoin(?eeifbqdc) [#1]
│ │ │ │ +─ Scan[POSC](?eeifbqdc, obo:IAO_0000039, obo:UO_0000272) [#1]
│ │ │ │ +─ Scan[PSOC](?eeifbqdc, obo:OBI_0002135, ?nsjsyqly) [#1]
│ │ │ │ `─ Scan[POSC](?eeifbqdc, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:OBI_0001933) [#1]
│ │ │ `─ HashJoin(?gvvxnorv) [#1]
│ │ │ +─ MergeJoin(?h2) [#1]
│ │ │ │ +─ Sort(?h2) [#1]
│ │ │ │ │ `─ MergeJoin(?gvvxnorv) [#1]
│ │ │ │ │ +─ Scan[POSC](?gvvxnorv, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:BFO_0000035) [#1]
│ │ │ │ │ `─ Scan[PSOC](?gvvxnorv, obo:RO_0002223, ?h2) [#1]
│ │ │ │ `─ NaryJoin(?h2) [#1]
│ │ │ │ +─ Scan[PSOC](?h2, obo:BFO_0000055, ?asmnkdjh) [#1]
│ │ │ │ +─ Scan[PSOC](?h2, obo:OBI_0000299, ?o18o1202) [#1]
│ │ │ │ `─ Scan[POSC](?h2, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:OGMS_0000097) [#1]
│ │ │ `─ NaryJoin(?keovchtj) [#1]
│ │ │ +─ Scan[PSOC](?keovchtj, obo:IAO_0000004, ?wovedbqf) [#1]
│ │ │ +─ Scan[POSC](?keovchtj, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:IAO_0000416) [#1]
│ │ │ `─ Scan[PSOC](?keovchtj, obo:IAO_0000136, ?gvvxnorv) [#1]
│ │ `─ MergeJoin(?brsgpgcf) [#1]
│ │ +─ Scan[POSC](?brsgpgcf, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:NCBITaxon_9606) [#1]
│ │ `─ Sort(?brsgpgcf) [#1]
│ │ `─ MergeJoin(?asmnkdjh) [#1]
│ │ +─ Scan[POSC](?asmnkdjh, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:OMRSE_00000011) [#1]
│ │ `─ Scan[PSOC](?asmnkdjh, obo:RO_0000052, ?brsgpgcf) [#1]
│ `─ MergeJoin(?ouewczzm) [#1]
│ +─ Sort(?ouewczzm) [#1]
│ │ `─ NaryJoin(?xszmkrfi) [#1]
│ │ +─ Scan[PSOC](?xszmkrfi, obo:IAO_0000136, ?ouewczzm) [#1]
│ │ +─ Scan[PSOC](?xszmkrfi, obo:IAO_0000004, ?hpokrtgp) [#1]
│ │ `─ Scan[POSC](?xszmkrfi, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, <http://www.ebi.ac.uk/efo/EFO_0004950>) [#1]
│ `─ MergeJoin(?ouewczzm) [#1]
│ +─ Scan[POSC](?ouewczzm, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:UBERON_0035946) [#1]
│ `─ Scan[POSC](?ouewczzm, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, ontologies:TURBO_0010201) [#1]
`─ MergeJoin(?hhhssner) [#1]
+─ Sort(?hhhssner) [#1]
│ `─ NaryJoin(?cueiywfu) [#1]
│ +─ Scan[PSOC](?cueiywfu, obo:IAO_0000136, ?hhhssner) [#1]
│ +─ Scan[POSC](?cueiywfu, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, <http://www.ebi.ac.uk/efo/EFO_0004950>) [#1]
│ `─ Scan[PSOC](?cueiywfu, obo:IAO_0000004, ?hujctdru) [#1]
`─ MergeJoin(?hhhssner) [#1]
+─ Scan[POSC](?hhhssner, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, ontologies:TURBO_0010201) [#1]
`─ Scan[POSC](?hhhssner, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, obo:UBERON_0035946) [#1]