Технология XSLT (Валиков) - страница 9

>[30] Number ::= Digits ('.' Digits?)?

>                | '.' Digits

Чтобы лучше понять EBNF, попробуем немного упростить эту продукцию. Выражение >Digits? внутри круглых скобок означает, что >Digits может как присутствовать, так и быть опущенным, то есть >('.' Digits?) ? равносильно >'.' ? | ('.' Digits)?. Повторяя еще раз подобное упрощение с каждым из полученных выражений, в итоге преобразуем правило >Number к виду:

>Number ::= Digits

>           | Digits '.' Digits

>           | Digits '.'

>           | '.' Digits

Следовательно, число имеет четыре варианта синтаксиса:

□ последовательность цифр, например >12345;

□ последовательность цифр, разделенная точкой на целую и дробную части, например >3.14;

□ последовательность цифр, заканчивающаяся точкой, например >6. — что эквивалентно >6.0;

□ последовательность цифр, начинающаяся точкой, например >.5, что эквивалентно >0.5.

Разберем еще одну продукцию языка XPath — определение литерала. Литерал в XPath — это последовательность символов, заключаемая в одинарные или двойные кавычки, которая используется в качестве строкового параметра в функциях и т.д. Единственным и вполне логичным ограничением на синтаксис литерала является то, что он не может содержать символ собственных кавычек — в этом случае непонятно, где же на самом деле литерал кончается, а где начинается (например, >'ab'cd').

Конструкция >Literal задается следующим образом:

>[29] Literal ::= '"' [^"]* '"'

>                 | "'" [^']* "'"

В первом случае синтаксис литерала начинается двойными кавычками (>'"'), затем идет последовательность, состоящая из любых символов, кроме двойных кавычек (>[^"]*), затем закрывающие двойные кавычки (>'"'). Во втором случае синтаксис имеет точно такой же вид с точностью до замены одинарных кавычек двойными и наоборот.

Другим очень часто используемым правилом является правило, определяющее пробельное пространство (англ. space или whitespace). Пробельными символами в XML-языках считаются такие символы, как табуляция, перевод строки, возврат каретки и сам пробел. Продукция >S пробельного пространства задается, как последовательность из одного или более пробельного символа:

>[3] S ::= (#х20 | #х9 | #xD | #хА)+

Как правило, EBNF-продукции языков XML-группы составлены довольно просто, но в некоторых случаях они разбиты на несколько правил, которые определены в разных частях спецификации. В таких случаях мы будем по возможности упрощать продукции, записывая их в раскрытом виде.

Обозначения

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