Ответ 1
Я предполагаю, что экранирование вокруг кавычек - это всего лишь остаток от копирования и вставки. Первый аргумент regex должен быть литералом, но литералы не могут быть субъектами троек в RDF, поэтому неправда, что у вас есть данные которые должны соответствовать этому шаблону. Тем не менее, у вас есть темы, URI которых содержит строку "alice", и вы можете получить строковое представление URI, используя str. Например,
SELECT ?s ?p ?o WHERE { ?s ?p ?o .FILTER regex(str(?s), "alice") .}
Чтобы проиллюстрировать, используйте два значения <http://example.org>
и "string containing example"
и отфильтруйте, как в исходном запросе:
select ?x where {
values ?x { <http://example.org> "string containing example" }
filter( regex(?x, "exam" ))
}
-------------------------------
| x |
===============================
| "string containing example" |
-------------------------------
Мы получили только "string containing example"
, потому что другое значение не было строкой и поэтому не было подходящим аргументом для regex
. Однако, если мы добавим вызов к str
, тогда это строковое представление URI, которое будет рассматривать регулярное выражение:
select ?x where {
values ?x { <http://example.org> "string containing example" }
filter( regex(str(?x), "exam" ))
}
-------------------------------
| x |
===============================
| <http://example.org> |
| "string containing example" |
-------------------------------