DBpedia и SPARQL: не работает запрос со знаками ударения - PullRequest
5 голосов
/ 05 марта 2011

Итак, я пробовал много разных вещей и искал решение, но мне не повезло ...

Мой запрос SPARQL -

    PREFIX dbp: <http://dbpedia.org/resource/>
    PREFIX dbpedia2: <http://dbpedia.org/property/>


   SELECT ?currentclub
   WHERE {
      dbp:".$term." dbpedia2:currentclub ?currentclub . 
      FILTER langMatches(lang(?currentclub), 'en')
   }

Когда $ term равняется чему-то с акцентом в названии, все облажается, и результаты не выдаются.Я пробовал кучу разных вещей, но просто не могу заставить их работать.Надеемся на некоторую помощь.

Спасибо

Редактировать

Я использую PHP и curl.Это то, что я скачал и изменил для своих нужд ... вот часть, где он связывается с dbpedia.

$searchUrl = 'http://dbpedia.org/sparql?'
      .'query='.urlencode($query)
      .'&format='.$format;

Запрос $ опубликован выше, и используется формат json.

Редактировать 2

Вот исходный код того, что я использую.https://gist.github.com/380379 возможно, просмотр полного кода даст вам лучшее представление о том, что не так.

Я изменил поле моей базы данных, содержащее фамилию с ударением, на utf8_unicode_ci, ноЯ все еще застрял и не могу найти никаких рабочих решений.

Ответы [ 2 ]

2 голосов
/ 16 марта 2011

Попробуйте записать закодированный запрос, для Иль-де-Франс (регион) различные акценты должны быть закодированы следующим образом:

select distinct ?p ?o  where {
  <http://dbpedia.org/resource/%C3%8Ele-de-France_(region)> ?p ?o
}

Поэтому символ 'Î' закодирован в UTF-8, как% C3% 8E, таблицу преобразования можно получить по адресу: http://www.utf8 -chartable.de /

Я не разработчик PHP, но должен быть UTF-8библиотека кодирования, которая должна вам помочь.

2 голосов
/ 05 марта 2011

2 Проблемы с вашим запросом:

  1. Вы не можете иметь QName вида prefix:"something", который просто недействителен. Если вам нужно объединить что-то там, вы не должны использовать кавычки
  2. Вы уверены, что ваш запрос и, в частности, акценты в UTF-8?
    Если это так, то это должно работать. Если нет, то вы можете обойти это, используя экранированные символы \u0000, где 0000 - шестнадцатеричное представление кода UTF-8 для экранированного символа. Это должно быть допустимо внутри QName

Редактировать

Удален пункт 1, поскольку он видел полный исходный код. Очевидно, что это был только синтаксис PHP-синтаксиса, а не синтаксис SPARQL

Увидев полный исходный код, не очевидно, почему код должен давать сбой. Единственное другое предложение, которое я могу сделать, - это попытаться изменить код для отправки ссылки URI для термина, а не QName:

 $query =
   "PREFIX dbp: <http://dbpedia.org/resource/>
PREFIX dbp2: <http://dbpedia.org/ontology/>
SELECT ?abstract
WHERE {
<http://dbpedia.org/resource/".$term."> dbp2:abstract ?abstract .
FILTER langMatches(lang(?abstract), 'en')
}";

Реально, я бы не ожидал, что это что-то изменит, но всегда стоит попробовать.

Если ошибка не устранена, вы можете опубликовать несколько примеров терминов, для которых запрос не работает

...