Фильтрация литералов без языкового тега - PullRequest
1 голос
/ 03 апреля 2019

Я пытаюсь отфильтровать некоторые строки по определенному языку, но они являются литералами без языковых тегов, поэтому я не могу отфильтровать их с помощью "lang" или "langMatches".Как будто все результаты соответствуют всем языкам, как я могу их отфильтровать?

Я использую библиотеки Java Jena и уже пытался использовать функциональность "regex", но это дает мне всерезультаты, поскольку они отвечают на все языки.

Вот запрос, чтобы показать все результаты и языки

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 Ответ

0 голосов
/ 04 апреля 2019

Проблема в том, что для ресурсов определены заголовок и язык.Итак, один ресурс, скажем, :r1, имеет несколько заголовков t1, t2, ..., tn и некоторые языки l1, l2, ..., ln.Но вам нужно некоторое отношение между названием и языком, которого у вас нет.

Набор данных не имеет смысла в его текущей форме.Либо для каждой пары (название, язык) необходим пустой узел, например r1 :hasTitle [:value :t1; :language :l1], либо в заголовках должны использоваться языковые теги.В противном случае вы потерялись.Проблема не в вашем запросе, а в наборе данных.

...