В SPARQL 1.0 это немного сложно:
SELECT ?a WHERE {
?a a <type/1>.
OPTIONAL {
?a a ?othertype .
FILTER (?othertype = <type/2>)
}
FILTER (!BOUND(?othertype))
}
Предложение OPTIONAL
связывает ?othertype
для любого ?a
, имеющего <type/2>
, и оставляет его несвязанным для любого ?a
, которыйего нет.
Последний FILTER
затем выбирает только те строки, где ?a
был оставлен несвязанным.
В SPARQL 1.1 это намного проще:
SELECT ?a WHERE {
?a a <type/1>.
FILTER NOT EXISTS { ?a a <type/2> . }
}