After thought I was sticking too much of trying to merge the two OPTIONAL pattern where the solution was much more direct :
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT *
FROM <http://spinrdf.org/sp>
FROM <http://spinrdf.org/spl>
FROM <http://spinrdf.org/spin>
FROM <http://topbraid.org/examples/kennedysSPIN>
FROM <http://topbraid.org/examples/kennedys>
FROM NAMED <http://topbraid.org/examples/kennedys>
WHERE {
GRAPH <http://topbraid.org/examples/kennedys> {
?s ?p ?o .
} .
OPTIONAL {
FILTER (sameTerm(rdf:type, ?p)) .
?o rdfs:subClassOf ?supC .
} .
BIND (IF(NOT EXISTS { ?s a ?supC . }, ?supC, ?__unbound__) as ?newSupC) .
}
Anyway thanks for you time and advice, guys. Max.