В другом ответе уже указывалось, что ваш ?s
является URI, и его следует сопоставлять напрямую, а не с помощью регулярного выражения.Кроме того, стоит помнить, что сопоставление определенных URI становится намного проще, если у вас определены правильные префиксы.Если мы определим префикс для URI файла, то фактический шаблон запроса станет намного проще:
PREFIX fred: <http://www.ontologydesignpatterns.org/ont/fred/domain.owl#>
SELECT ?t
WHERE {
fred:var1 rdf:type ?t
}
Запрос может стать еще проще: rdf:type
имеет встроенную аббревиатуру «a
»,и ключевое слово WHERE
является необязательным:
PREFIX fred: <http://www.ontologydesignpatterns.org/ont/fred/domain.owl#>
SELECT ?t {
fred:var1 a ?t
}
Наконец, если вы действительно хотите использовать регулярное выражение для сопоставления с URI, вы можете сделать это, преобразовав URI встрока, использующая str
:
SELECT ?t {
?s a ?t
FILTER regex(str(?s), "var1")
}
Но по сравнению с другими параметрами это будет очень медленно для больших наборов данных.
Наконец, наконец, для поддержки комментария AKSW, вот преобразованный файлиз RDF / XML в Turtle:
PREFIX fred: <http://www.ontologydesignpatterns.org/ont/fred/domain.owl#>
fred:var0 a fred:var2_0.
fred:var1 a fred:var2_1.