Свободный текстовый поиск в sparql, когда у вас есть мультислово и scaping символ - PullRequest
0 голосов
/ 11 июня 2018

Мне интересно, как я могу использовать в запросе sparql, когда у меня есть такое слово, как: Роберт Дж. О'Нил Я ищу ресурс, у которого есть единица с несколькими словами с символом квоты или юникода в свойстве Label.

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

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Я нашел следующий код быстрее, чем регулярное выражение:

SELECT ?s  WHERE { ?s  rdfs:label ?o FILTER ( bif:contains ( ?o, '"Robert" AND "J." AND "Neill"' ) ) }
0 голосов
/ 11 июня 2018

Вот запрос, который вернет все элементы, которые имеют «Robert J. O'Neill» в качестве метки.

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

Если вы уверены, что вам нужно конкретное соответствие строк.Это быстрее:

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

Но учтите, что, например, Virtuoso не поддерживает такой запрос из-за пробелов в строке.Таким образом, альтернатива состоит в том, чтобы избежать этого как:

...