ПРОТОКОЛ ПЕРЕДАЧИ ГИПЕРТЕКСТА -- HTTP / 1.1 |
||||
---|---|---|---|---|
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), так как иначе они интерпретируются как одна лексема. |