Расширенная форма Бэкуса-Наура
Несмотря на то, что эта книга главным образом посвящена языку XSLT, в ней также описываются расширяемый язык разметки XML и язык обращения к частям ХМL-документов, называемый XPath. Подробное и точное описание этих языков невозможно без четких определений синтаксических конструкций.
Для описания синтаксиса рассматриваемых языков мы будем использовать расширенные формы Бэкуса-Наура (РФБН, или, по-английски, Extended Backus-Naur Form, EBNF). EBNF — это современная модификация методологии, которая впервые была использована для описания языка программирования Алгол-60. За прошедшие десятилетия формы Бэкуса-Наура были доработаны множеством авторов и сейчас в расширенном виде используются для описания ряда языков программирования различной степени сложности. EBNF-нотация также широко используется в технических рекомендациях Консорциума W3, которые фактически и являются стандартами рассматриваемых нами языков.
Нотация EBNF определяет язык как набор синтаксических правил, определяющих нетерминалы (конструкции языка) через терминалы (символы языка), а также другие нетерминалы. Правило состоит из двух частей, разделенных символами ">::=
":
>конструкция ::= определение конструкции
В левой части правила стоит терминал определяемой конструкции, в правой — выражение, определяющее эту конструкцию. Правила EBNF также иногда называют продукциями, и мы тоже часто будем использовать этот термин, чтобы не путать эти правила с шаблонными правилами преобразований, которые главным образом и составляют преобразования в языке XSLT.
Терминалы, которые могут быть как отдельными символами, так и их последовательностями, определяются в нотации EBNF следующим образом:
□ >#xN
, где >N
— шестнадцатеричный код, соответствует символу Unicode с кодом >N
. Например, >#х410
соответствует символу >А
кириллического алфавита (см. раздел "Использование Unicode" главы 1).
□ >[a-zA-z]
, >[#xN-#xN]
— соответствует символу указанного интервала. К примеру, >[a-f]
соответствует любому из символов >а
, >b
, >с
, >d
, >e
, >f
.
□ >[abc]
, >[#xN#xN#xN]
— соответствует любому из перечисленных символов. Например, >[#х410#х411#х412]
соответствует любому из символов >А
, >Б
, >В
. Символьные интервалы и перечисления могут использоваться совместно в одних квадратных скобках.
□ >[^a-z]
, >[^#хN-#xN]
— соответствует любому символу, кроме символов указанного интервала. К примеру, >[^#х410-#x42F]
соответствует любому символу, кроме заглавных букв русского алфавита.
□ >[^abc]
, >[^#xN#xN#xN]
— соответствует любому, кроме перечисленных символов. Например,