If you use contains, it will make an approximate filtering of results, its is therefore best to use FILTER with bif:lower.
For example with the following RDF triples loaded in Virtuoso:
<http://gnoss/000066A5-E5C4-4317-AC9F-4A226E65AE4D><http://rdfs.org/sioc/types#Tag>"An?lisis" . <http://gnoss/000066A5-E5C4-4317-AC9F-4A226E65AE4D><http://rdfs.org/sioc/types#Tag>"Aut?nomas" . <http://gnoss/000066A5-E5C4-4317-AC9F-4A226E65AE4D><http://rdfs.org/sioc/types#Tag>"Autonom?a de gobierno" . <http://gnoss/000066A5-E5C4-4317-AC9F-4A226E65AE4D><http://rdfs.org/sioc/types#Tag>"Autonom?a" . <http://gnoss/000066A5-E5C4-4317-AC9F-4A226E65AE4D><http://rdfs.org/sioc/types#Tag>"Auton?mica" . <http://gnoss/000066A5-E5C4-4317-AC9F-4A226E65AE4D><http://rdfs.org/sioc/types#Tag>"Com?n" . <http://gnoss/000066A5-E5C4-4317-AC9F-4A226E65AE4D><http://rdfs.org/sioc/types#Tag>"Comunidades" . <http://gnoss/000066A5-E5C4-4317-AC9F-4A226E65AE4D><http://rdfs.org/sioc/types#Tag>"Cr?tico" .
The following query is case sensitive, thus no data is returned as is expected:
SQL> SPARQL
PREFIX sioc_t:<http://rdfs.org/sioc/types#>
SELECT DISTINCT ?s
FROM <http://j.com>
WHERE
{
?s sioc_t:Tag ?Tag. FILTER ( ?Tag in ('analisi', 'autonomas',
'autonomia de gobierno',
'autonomia', 'autonomica',
'comun', 'comunidades', 'critico' ) )
}
-- Query result:
s
ANY
No. of rows in result: 0
Changing the query to use the Virtuoso bif:lower function a case insensitive filter is performed returning one distinct row:
SQL>SPARQL
PREFIX sioc_t:<http://rdfs.org/sioc/types#>
SELECT DISTINCT ?s
FROM <http://j.com>
WHERE
{
?s sioc_t:Tag ?Tag. FILTER ( bif:lower(str(?Tag)) in ('analisi', 'autonomas',
'autonomia de gobierno',
'autonomia', 'autonomica',
'comun', 'comunidades', 'critico' ) )
}
-- Query result:
s
ANY
http://gnoss/000066A5-E5C4-4317-AC9F-4A226E65AE4D
No. of rows in result: 1