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]