Соответствие строк в SPARQL?

в ANSI SQL вы можете написать что-то вроде:

Select * From DBTable Where DBTable.Description LIKE "MEET"

или

Select * From DBTable Where DBTable.Description LIKE "%MEET%"

то, что я хотел бы помочь, - это написать эквивалент SPARQL выше, пожалуйста.

2 ответов


использовать фильтр регулярных выражений. Вы можете найти короткий учебник здесь

вот как это выглядит:

PREFIX ns: <http://example.com/namespace>

SELECT ?x
WHERE
{ ?x ns:SomePredicate ?y .
  FILTER regex(?y, "YOUR_REGEX", "i") }

YOUR_REGEX должно быть выражение язык регулярных выражений XQuery

i является необязательным флаг. Это означает, что матч нечувствителен к регистру.


если у вас есть фиксированная строка, вы можете использовать ее непосредственно в своем шаблоне графика, например

PREFIX ns: <http://example.com/namespace>

SELECT ?x
WHERE
{ ?x ns:SomePredicate "YourString" }

обратите внимание, что это не всегда работает, потому что сопоставление шаблонов основано на равенстве терминов RDF, что означает "YourString" не считается тем же термином, что и say "YourString"@en Так что если это может быть проблемой, используйте REGEX подход говорит о том

также некоторые движки SPARQL предоставляют расширение полнотекстового поиска, которое позволяет интегрировать запросы стиля Lucene в ваш SPARQL запросы, которые могут лучше соответствовать вашему варианту использования и почти наверняка быть более эффективными для общего поиска, который в противном случае потребовал бы REGEX