0

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
                 }
                 '''
far-zadeh
  • 135
  • 7

2 Answers2

1

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"))
}
Gilles-Antoine Nys
  • 1,481
  • 16
  • 21
1

I found following code faster that the regex:

SELECT ?s  WHERE { ?s  rdfs:label ?o FILTER ( bif:contains ( ?o, '"Robert" AND "J." AND "Neill"' ) ) }
far-zadeh
  • 135
  • 7