Я довольно новичок в SPARQL и пытаюсь вставить какой-то языковой фильтр для литералов, возвращаемых моим шаблоном запроса.
Проблема в том, что набор данных не обеспечивает хорошо структурированную систему тегов, поэтому я должен ограничить результаты каким-то условным способом И заставить эти условия работать со следующим шаблоном:
SELECT distinct ?s ?p ?o WHERE {
?this :is :something. // this pattern is passed as argument
// to the js func that manage the
// query
{
bind(?this as ?s)
?s ?p ?o.
// here i putted my filters
}
}
Фильтр, который я хочу добавить, должен обеспечивать способ возврата только «английской версии» для шаблонов с литералами. если английская версия не указана, верните непомеченную - всегда есть непомеченная.
Основываясь на решениях для подобных вопросов, я попытался с этим:
filter(!isLiteral(?o) || (langMatches(lang(?o), 'en')) || lang(?o)='')
но - конечно же - в итоге возвращаются и английские, и непомеченные литералы.
Другим способом, который решил проблему для кого-то, является использование двух OPTIONAL
паттернов, таких как здесь :
optional {
?country rdfs:label ?label
filter langMatches(lang(?label), "en")
}
optional {
?country rdfs:label ?label
}
но у меня есть шаблон ?s ?p ?o
в моем шаблоне, который уже возвращает все тройки, связанные с конкретным объектом, тогда дополнительные шаблоны здесь кажутся бесполезными.
Я читал другие вопросы, подобные этим, но, похоже, никто не подходит к моему шаблону запроса, поэтому, если кто-то может помочь мне понять это, я буду благодарен.