#sparql #rdf #jena
#sparql #rdf #jena
Вопрос:
Я пытаюсь отфильтровать некоторые строки по определенному языку, но это литералы без языковых тегов, поэтому я не могу отфильтровать их с помощью «lang» или «langMatches». Похоже, что все результаты соответствуют всем языкам, как я могу их отфильтровать?
Я использую библиотеки Java Jena, и я уже пытался использовать функциональность «регулярных выражений», но это дает мне все результаты, поскольку они отвечают на все языки.
Вот запрос для отображения всех результатов и языков
String TitleQuery =
"PREFIX dc: <http://purl.org/dc/elements/1.1/>"
"SELECT ?title ?language "
"WHERE { ?s dc:title ?title ."
"?s dc:language ?language ."
"}";
--------------------------------------------------------
| title | language |
========================================================
| "Espainiako Erkidego Autonomoak" | "Euskera" |
| "Espainiako Erkidego Autonomoak" | "Portuguese" |
| "Espainiako Erkidego Autonomoak" | "English" |
| "Espainiako Erkidego Autonomoak" | "Català" |
| "Espainiako Erkidego Autonomoak" | "Italiano" |
| "Espainiako Erkidego Autonomoak" | "Français" |
| "Espainiako Erkidego Autonomoak" | "Deutsch" |
| "Espainiako Erkidego Autonomoak" | "Galego" |
| "Espainiako Erkidego Autonomoak" | "Español" |
| "Comunità autonome della Spagna" | "Euskera" |
| "Comunità autonome della Spagna" | "Portuguese" |
| "Comunità autonome della Spagna" | "English" |
| "Comunità autonome della Spagna" | "Català" |
| "Comunità autonome della Spagna" | "Italiano" |
| "Comunità autonome della Spagna" | "Français" |
| "Comunità autonome della Spagna" | "Deutsch" |
| "Comunità autonome della Spagna" | "Galego" |
| "Comunità autonome della Spagna" | "Español" |
| "Comunitats Autònomes d'Espanya" | "Euskera" |
[...]
Это фильтр регулярных выражений, который я пробовал: FILTER regex(str(?language),"Español")
И это результаты, каждый результат соответствует каждому языку:
-----------------------------------------------------
| title | language |
=====================================================
| "Espainiako Erkidego Autonomoak" | "Español" |
| "Comunità autonome della Spagna" | "Español" |
| "Comunitats Autònomes d'Espanya" | "Español" |
| "Comunidades autónomas de España" | "Español" |
| "Comunidades Autónomas da Espanha" | "Español" |
| "Communautés Autonomes d'Espagne" | "Español" |
| "Autonome Gemeinschaften von Spanien" | "Español" |
| "Autonomous Communities of Spain" | "Español" |
-----------------------------------------------------
Комментарии:
1. Это самая базовая часть SPARQL, не так ли? Просто напишите URI или литерал вместо переменной:
?s dc:language "English" .
или используйтеFILTER(?language = "English")
или используйтеVALUES ?language {"English" "Deutsch"}
2. И, пожалуйста, покажите регулярное выражение, которое вы пробовали. Я не могу поверить, что он возвращает все результаты.
3. Да, это должно быть так просто, и я прошу прощения, если я задаю основные вопросы, но я новичок в этом, и я так долго пытался это сделать. Я отредактировал сообщение с помощью фильтра регулярных выражений и результатов, которые совпадают с вашими параметрами. Спасибо за вашу помощь! @AKSW
4. Ну, теперь я вижу проблему. Ваш запрос не может работать. И заголовок, и язык определены только для ресурсов. Итак, допустим, что у одного ресурса
:r1
есть некоторые названияt1, t2, ..., tn
и некоторые языкиl1, l2, ..., ln
. Но вам нужна какая-то связь между заголовком и языком, которой у вас нет. Кто создал dataset, в его текущем виде это не имеет смысла. Для каждой пары (заголовок, язык) требуется либо пустой узел, напримерr1 :hasTitle [:value :t1; :language :l1]
, либо заголовки должны использовать языковые теги. В противном случае вы потеряны. Проблема не в вашем запросе, а в наборе данных
Ответ №1:
Проблема в том, что и заголовок, и язык определены только для ресурсов. Итак, у одного ресурса, скажем :r1
, есть некоторые названия t1, t2, ..., tn
и некоторые языки l1, l2, ..., ln
. Но вам нужна какая-то связь между заголовком и языком, которой у вас нет.
Набор данных не имеет смысла в его текущей форме. Для каждой пары (заголовок, язык) требуется либо пустой узел, например r1 :hasTitle [:value :t1; :language :l1]
, либо заголовки должны использовать языковые теги. В противном случае вы заблудились. Проблема не в вашем запросе, а в наборе данных.