# this naive solution is too complicated... # ... by left-associativity of OPTIONAL you can do it much simpler, # cf. query_optionalstuff.sparql PREFIX rdfs: PREFIX foaf: SELECT ?s ?n ?e FROM WHERE { [] foaf:knows ?s. ?s foaf:name ?n . OPTIONAL { { ?s rdfs:seeAlso ?e } UNION { ?s foaf:homepage ?e. OPTIONAL { ?s rdfs:seeAlso ?e1 } FILTER( ! bound( ?e1 ) ) } } }