ПРОТОКОЛ ПЕРЕДАЧИ ГИПЕРТЕКСТА -- HTTP / 1.1

Автор статьи: Алексей Симонов
Сайт Автора: Нет
E-mail Автора: Leshik@omsk.com
Дата публикации: 26.03.2005



2 Письменные соглашения и обобщенная грамматика.


2.1 Увеличенная нормальная запись Бекуса-Наура (BNF).

Все механизмы, определенные этим документом, описаны как в обычной,
так и в увеличенной нормальной записи Бекуса-Наура (BNF), подобной
используемой в RFC 822 [9]. Разработчик должен быть знаком с такой
формой записи, чтобы понять данную спецификацию. Увеличенная
нормальная запись Бекуса-Наура включает следующие конструкции:

имя = определение
name = definition
Имя правила - это просто его название (не включающее символов
"<" и ">"), и отделяемое от определения символом равенства "=".
Пробел важен только при выравнивании продолжающихся строк,
используемых для указания определений правил, которые
занимают более одной строки. Некоторые основные правила, такие
как SP, LWS, HT, CRLF, DIGIT, ALPHA и т.д, представлены в
верхнем регистре. Угловые скобки используются в определении
всякий раз, когда их присутствие облегчает использование имен
правил.

"литерал"
"literal"
Кавычки окружают литеральный текст. Если не установлено иного,
этот текст регистро-независим.

правило1 | правило2
rule1 | rule2
Элементы, отделяемые полосой ("|") являются вариантами. Например,
"да | нет" принимает значение либо да, либо нет.

(правило1 правило2)
(rule1 rule2)
Элементы, включенные в круглые скобки обрабатываются как
один элемент. Таким образом, "(elem (foo | bar) elem)"
допускает последовательности лексем "elem foo elem" и
"elem bar elem".

*правило
*rule
Символ "*", предшествующий элементу, указывает повторение.
Полная форма - "<n>*<m>element" означает минимум <n>, максимум
<m> вхождений элемента. Значения по умолчанию - 0 и
бесконечность. Таким образом запись "*(element)" допускает
любое число повторений (в том числе ноль); запись "1*element"
требует по крайней мере одно повторение; а "1*2element"
допускает либо один, либо два повторения.

[правило]
[rule]
В квадратные скобки заключают опциональные элементы; "[foo bar]"
эквивалентно "*1(foo bar)".

N правило
N rule
Точное количество повторений: "<n>(element)" эквивалентно
"<n>*<n>(element)"; то есть присутствует точно <n> повторов
элемента. Таким образом 2DIGIT - номер из 2 цифр, а 3ALPHA
- строка из трех алфавитных символов.

#правило
#rule
Конструкция "#" предназначена, подобно "*", для определения
списка элементов. Полная форма - "<n>#<m>element" означает
минимум <n>, максимум <m> вхождений элемента, отделенных одной
или несколькими запятыми (","), и, возможно, линейным пробелом
(LWS). Это обычно делает форму списков очень простой; правило
типа "( *LWS element *( *LWS "," *LWS element)) " можно
представить как "1#элемент". Везде, где используется эта
конструкция, пустые элементы допускаются, но не учитываются при
подсчете представленных элементов. То есть конструкция
"(element), , (element)" допускается, но считаются в ней только
два элемента. Следовательно там, где требуется по крайней мере
один элемент, должен присутствовать по крайней мере один не
пустой элемент. Значения по умолчанию - 0 и бесконечность.
Таким образом запись "#(element)" допускает любое число
повторений (в том числе ноль); запись "1#element" требует по
крайней мере одного повтора ненулевого элемента; а "1*2element"
допускает один или два повтора.

; комментарий
; comment
Точка с запятой, поставленная справа от текста правила, начинает
комментарий, который продолжается до конца строки. Это - простой
способ включения полезных пометок параллельно спецификациям.

подразумевая *LWS
implied *LWS
Грамматика, описанная этой спецификацией основана на словах.
За исключением случаев, в которых отмечено иное, линейный
пробел (LWS) может быть включен между любыми двумя смежными
словами (лексемой или строкой цитирования), и между смежными
лексемами и разделителями (tspecials), не изменяя интерпретацию
поля. Между любыми двумя лексемами должен существовать по
крайней мере один разделитель (tspecials), так как иначе они
интерпретируются как одна лексема.



Список похожих статей