Search code examples
sparqlcontain

Free text search in sparql when you have multiword and scaping character


I am wondering how I can use in sparql query when I have a word like : Robert J. O'Neill I am looking for the resource that have the multiword unit with quota or unicode character in the Label property.

                 SELECT DISTINCT ?resource ?abstract 
                 WHERE {?resource rdfs:label ?s.
                 ?s <bif:contains> "'Robert J. O'Neill'"
                 ?resource dbo:abstract ?abstract
                 }
                 '''

Solution

  • Here is the query that will return all the elements that have "Robert J. O'Neill" as label.

    SELECT DISTINCT ?s WHERE 
    {
        ?s rdfs:label ?label .
        FILTER(regex(?label, "Robert J. O'Neill", "i"))
    }
    

    If you are sure that you need a specific string matching. This is faster :

    SELECT DISTINCT ?s WHERE 
    {
        ?s rdfs:label ?label .
        ?label bif:contains "Robert J. O'Neill"
    }
    

    But be aware that, Virtuoso for example doesnt support such a query because of the spaces in the string. So an alternative is to avoid it as :

    SELECT DISTINCT * WHERE 
    {
        ?s rdfs:label ?label .
        ?label bif:contains "Robert" .
        FILTER (CONTAINS(?label, " J. O'Neill"))
    }