I'm not quite sure why you say that SPARQL does not provide "basic logical operators" because your own examples clearly show what it does: it provides logical-OR ( || ) and logical-AND ( && ) as part of the conditions FILTER and disjunctive graphical patterns using UNION (of course, conjunctive graph patterns do not need special syntax).
Other OR design options are possible. For form queries โthis particular value must be one of these featuresโ you can use the element set operator, IN :
SELECT * WHERE { ?s ?p ?o. FILTER (?p IN (:propA, :propB, :propC ) ) }
You can also use the VALUES clause for this type of template:
SELECT * WHERE { VALUES ?p { :propA :propB :propC } ?s ?p ?o. }
Update I forgot one, perhaps the easiest. For queries like yours, where you are looking for several alternatives for a property name, you can also use a property path expression, for example:
SELECT * WHERE { ?s :propA|:propB|:propC ?o. }
source share