2016-04-25 4 views
1

(Технические характеристики: https://www.w3.org/TR/sparql11-query/#rIRIREF)W3C: Невозможно прочитать спецификацию SPARQL IRIREF от EBNF?

Согласно спецификации, IRIREF может быть разобран, как это:

[139] IRIREF ::= '<' ([^<>"{}|^`\]-[#x00-#x20])* '>' 

Что беспокоит меня эта часть выражения:

\]-[ 

Если Я считаю, что \ является экранирующим символом в классе символов в квадратных скобках (что будет иметь место в регулярном выражении Perl), то это означает, что только \ нет t проблема в IRIREF, и это действительно: <http://hello\world>

Тогда есть эта большая проблема с диапазоном: ]-[. Символ ] имеет порядковое значение 93 и [ из 91. Это означает, что мы имеем недопустимый диапазон: от 93 до 92. Это недопустимо в большинстве тестируемых множителей.

Что это значит?

  1. Должен ли я рассматривать - как обычный символ в квадратных скобках класса символов, то это является недействительным IRIREF: <http://new-example.org>. Это не имеет никакого смысла.
  2. Если я считаю диапазон ]-[ утратившим это IRIREF справедливо: <http://hello[world]>
  3. То, что я думаю, более вероятно, что диапазон инвертируется и не является проблемой для w3c спецификации, что означает, что символы [, \ и ] являются недопустимыми символами. Это имеет смысл.

ответ

1

SPARQL spec говорит, что его грамматика написана с использованием обозначения defined by the XML 1.1 specification.

В этом обозначениях правая вы цитируете,

'<' ([^<>"{}|^`\]-[#x00-#x20])* '>' 

обозначает последовательность

  • а '<' характер
  • ноль или более символов, соответствующие выражению [^<> «{} | ^`] - [# x00- # x20]; это разность значений, обозначающая

    • любой символ, соответствующий [^ <> "{} |^\] = any character other than '<', '>', '"', '{', '}', '|', '^', ' ', или' \ '; нотабене«\» Не является экранирующий символ в этой записи (который не имеет управляющие символы на всех)
    • за исключением тех, соответствует по [# x00- # x20] = площадь С1 управляющих символов плюс пустой

    Это это немного странный способ написать этот шаблон; он может одинаково хорошо быть записана в виде [^ <> "{} | ^` # x00- # x20];. Я не знаю, почему редакторы писали так, как они сделали

  • а '>' символ

так, чтобы ответить на ваши вопросы один за другим:

Если я считаю - как обычный символ в квадратных скобках класса символов, то это является недействительным IRIREF: http://new-example.org это не имеет никакого смысла

..

Нет, когда и Б являются выражениями в этих обозначениях - В обозначает любую строку на языке , который не является также строка на языке B. Здесь A и B - это выражения каждого символьного класса, один отрицательный и один положительный.

Вы правы, что нет смысла запрещать дефисы из правила грамматики, предназначенного для принятия IRI, заключенных в скобки под угловыми скобками.

Если я считаю диапазон] - [утратившим это IRIREF справедливо: http://hello[world]

'] - [' не обозначает диапазон здесь, нулевой или иным образом; ] завершает первое выражение класса символов, а [ начинает второй.

Я думаю, что более вероятно, что диапазон инвертирован и не является проблемой для спецификаций w3c, что означает, что символы [, \ и] являются недопустимыми символами. Это имеет смысл.

Если мой разбор выражения верен, «['и']» являются законными (они не исключаются из первого выражения, и они не исключаются вторым); '\' исключается первым выражением.

+0

Я думаю, что нотация A-B может иметь смысл, но, как вы сказали, зачем это делать, если они могут включать '[0x00-0x20]' непосредственно в первый класс символов в квадратных скобках. Что также заставляет меня сомневаться в том, что обозначение «A-B» хорошо разнесено, но здесь это целый блок. Обычно они содержат все разные обозначения, например: '' '' (([^ # x27 # x5C# xA # xD]) | ECHAR) * "'" '. И последнее, но не менее важное: '' '' '' '' '' '' 'символы, которые мы обычно выходим в URL с'% 5B' и '% 5D'. – Cecile

+0

Я не думаю, что может быть какое-либо сомнение в значении выражения: спецификация SPARQL документирует его нотацию (указывая на XML 1.1), и выражение синтаксически законно и недвусмысленно в задокументированной нотации. Может быть непонятно, почему РГ выбрала именно тот способ выражения ограничения или почему они выбрали это конкретное ограничение, но совсем неясно, какое ограничение находится в спецификации. –

+0

Сегодня я обнаружил, что rdflib для Python не соответствует нотации «-». Вместо этого они помещают ']', \ и '[' непосредственно в класс символов в скобках: IRIREF = r '<([^<> "{} | ^' \] \\\ [\ x00- \ x20]) *>', и они говорят "[это] Из грамматики SPARQL" – Cecile

2

Это сокращение синтаксического сахар, EBNF быть точным, синтаксис, который выходит за рамки стандартных функций regexen:

Это означает prior character class without following character class, в данном конкретном случае not certain brackets and quotes, and neither control codes from 0x00 (NUL) to 0x20 (SPC), which would otherwise be included.

Справочная информация: EBNF notation used, в частности статья A - B. Об этом говорится в первом абзаце статьи SPARQL grammar.

+0

'\' не является символом escape в '[...]'. – AndyS

+0

@ AndyS Пожалуйста, уточните: '' 'принадлежит к набору символов, недопустимых в' IRIREF'. NB: обратную косую черту в первом классе символов не нужно избегать; синтаксис EBNF, он абстрагируется от использования в контексте любого языка программирования. – collapsar

+0

Мой комментарий попал под форматирование. \, обратная косая черта, не является особенным внутри []. Это просто персонаж, как любой другой. Таким образом, все символы между [^ и] исключены. – AndyS

 Смежные вопросы

  • Нет связанных вопросов^_^