Обработка запятых при использовании PREFIX пространства имен в предложении Sparql WHERE

Я пытаюсь запросить свойство skos:broader для категории DBPedia «Заболевания_ротовой_полости, слюнные_ железы_и_ челюсти». Эта категория доступна по следующему URI: http://dbpedia.org/resource/Category:Diseases_of_oral_cavity,_salivary_glands_and_jaws

Следующий запрос обеспечивает желаемый результат:

PREFIX skos: <http://www.w3.org/2004/02/skos/core#> 

SELECT ?broaderCategory
WHERE {
    <http://dbpedia.org/resource/Category:Diseases_of_oral_cavity,_salivary_glands_and_jaws> skos:broader ?broaderCategory
}

Требуется запросить свойство skos:broader для нескольких категорий с помощью кода Python и оболочки Sparql. Я пытаюсь сделать код более читабельным, определяя PREFIX для всех URI категорий DBPedia и используя его в предложении WHERE следующим образом:

PREFIX dbpcat: <http://dbpedia.org/resource/Category:> 
PREFIX skos: <http://www.w3.org/2004/02/skos/core#> 

SELECT ?broaderCategory
WHERE {
    dbpcat:Diseases_of_oral_cavity,_salivary_glands_and_jaws skos:broader ?broaderCategory
}

Второй запрос возвращает синтаксическую ошибку в "," в названии категории. Замена запятой на escape-последовательности (hex-unicode и html) не помогла. И использование строкового литерала (dbc:"[category]" и dbc:'''[category]''') тоже неверный синтаксис.

Как в этом случае обращаться с запятой?


person AxxE    schedule 05.09.2016    source источник
comment
Как отметил @AKSW, это действительно ошибка. Я сообщил об этом внутри компании. Вы можете получать обновления и повышать приоритет, сообщая через проблемы проекта на github и / или список рассылки пользователей Virtuoso; при использовании коммерческой версии может оказаться уместным (также) запрос в службу поддержки OpenLink. (Заявление об отказе от ответственности: я работаю на OpenLink Software, производителя Виртуоз.)   -  person TallTed    schedule 06.09.2016


Ответы (1)


Этот ответ основан на рекомендации W3C для Turtle:

Некоторые специальные символы не допускаются в локальной части префиксов IRI. Согласно разделу об IRI

Имена с префиксом - это надмножество XML QNames. Они отличаются тем, что в локальную часть префиксных имен могут входить:

  1. ведущие цифры, например leg:3032571 или isbn13:9780136019701
  2. не ведущие двоеточия, например og:video:height
  3. зарезервированные escape-последовательности символов, например wgs:lat\-long

Кроме того, раздел о escape-последовательностях дает нам больше информации:

% -кодированные последовательности находятся в диапазоне символов для IRI и явно разрешены в локальных именах. Они отображаются как «%», за которым следуют два шестнадцатеричных символа, и представляют ту же последовательность из трех символов. Эти последовательности не декодируются во время обработки. Термин, записанный на языке Turtle как http://a.example/%66oo-bar, обозначает IRI http://a.example/%66oo-bar, а не IRI http://a.example/foo-bar. Термин, записанный как ex:%66oo-bar с префиксом @prefix ex: <http://a.example/>, также обозначает IRI http: //a.example/%66oo-bar < / а>.

Обновление (согласно комментарию ниже)

Как отметил @AndyS,

зарезервированные escape-последовательности символов состоят из символа '\', за которым следует один из ~ .-! $ & '() * +,; = /? # @% _, и представляют собой символ справа от' \ '.

Таким образом, экранирование с помощью \ работает для запятых, т.е. вы можете написать \,. К сожалению, это все еще не работает в пользовательском интерфейсе Virtuoso Web с

Virtuoso 37000 Error SP030: SPARQL compiler, line 0: Bad character '\' (0x5c) in SPARQL expression at '\'

Так что это должно быть ошибкой.

person UninformedUser    schedule 06.09.2016
comment
@AndyS Спасибо за подсказку, вы правы, я обновил свой ответ. - person UninformedUser; 06.09.2016