Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Трэвис Б. -> "XML и SOAP: программирование для серверов BizTalk. Новейшие технологии" -> 94

XML и SOAP: программирование для серверов BizTalk. Новейшие технологии - Трэвис Б.

Трэвис Б. XML и SOAP: программирование для серверов BizTalk. Новейшие технологии — Русская Редакция, 2001. — 496 c.
ISBN5-750Z-0129-5
Скачать (прямая ссылка): xmlprogrammdlyaserverov2001.pdf
Предыдущая << 1 .. 88 89 90 91 92 93 < 94 > 95 96 97 98 99 100 .. 157 >> Следующая


(ТитМагк-программа состоит из так называемых правил. Правила обработки применяются для выбора текущих устройств ввода и вывода и для запуска синтаксического анализа или сканирования. Для сканирования служат правила поиска; такое правило содержит шаблон, с которым сравниваются данные, и набор выполняемые в случае соответствия. Другие инструменты сканирования применяются для локального сканирования, манипулирования переменными и для работы с различными аспектами разметки. Правила разметки включают правила для обработки элементов, которые срабатывают кзждъ::": раз, когда анализатор находит элемент в данных XML или SGML, правила для обработки данных, содержащихся в элементе, и правила обработки ошибок разметки, которые служат для перехвата и обработки ошибок.

Приведенная ниже простая программа на OmniMark считает слова в тексте «Заходит гусь в

global integer чогз-аоиг: initial

process

submit "Заходит i^g= Б бар" ;.iui.p,L "d" % Sffd letter+

_ncrement worc-count

Программа содержит два правила и одно объявление глобальной переменной. Правило обработки срабатывает при запуске программы. Оператор submit пересылает в текущий поток ввода текст «Заходит гусь в бар» и инициирует сканирование.

Правило активизируется оператором submit. Оно использует шаблон для любой последовательности букв. Слово

k'Ut-ft этом шаблоне — є'іміїольііьііі класс, представляющий все бук- OmniMart дп

283

вы алфавита в верхнем и нижнем регистре. Знак «плюс- і -Л — индикатор повтора. Вместе они означают <-u.ina или более букв».

Каждый pu-s. когда срабатывает пра вил о find, глобальная переменная и вастел на срабатывает один раз для каждого слова (т. е. непрерывной последовательности букв) в те-кушем потоке ввода. По окончании сканирования выполняется следующий оператор правила обработки — <чй;яи он выводит значение счетчика слов. Если текут іш вывод не был явно определен, по умолчанию подразумевается стандартный поток вывода. В интегрированной среде разработки (Integrated Development Environment, IDE) Omni Mark вывод направляется ? окно журнала, а при работе с утилитами командной строки — на экран терминала.

Оператор output использует оператор форматирования ( %> для преобразования значения целой iinteeori переменной Wiird-CiiKiii в строку. Оператор конкатенации служит для добавления символа новой строки

Чтобы попробовать выполнить эту программу, введите ее в окне IDE OmniMark и щелкните кнопку «Run». Порядок следования правил в этой значения не имеет, так как каждое срабатывает только при возникновении определенного события. По.гто-му мы без проблем могли бы написать ее так:

дIabal irttsgor wordeouot jritial {0} find l-etter4,

increment wc-aeoLiiit process

Submit "Заходит гусь з бар" і; format

Эта программа работает точно так как и предыдущая. Сказанное вовсе не означает, что порядок следования правил в программе никогда не имеет значения. Если одно событие вызывает срабатывание более чем одного правила правило, встретившееся первым, а все — нет. Это позволяет разме-

щать более конкретные правила перед более общими и добиваться срабатывания общих только если не сработали конкретные.

Рассмотрим пример:

global

process

sjbrn t "Заходи гус і в баз" ojtpui "d" fofittet «,rdoo.ttrit I I "%'i" 284

Часть N Справочные материалы

Гіпс "г'усь""

output find lptter+

іпсгогтшпГ. wordcount : ;nd any

Эта программа выведет значение *3. В следующей программе порядок следования правил изменен и, соответственно, меняется результат:

!.Ikii',-.; integer wordcount initial <-.:' process

submit "Заходит гусь в output format wordcount find letter+

increment wordcount fin "гусь"

output find any

Программа выводит значение 4.

Зачем я добавил новое гграштдо/hni any? Затем, что оно исправляет ошибку, допущенную в первой версии программы. Правило find leiter+ міцет слова. Но как быть с пробелами, разделяющими слова? Если вы запускали первую версию программы, то заметили, что результат был напечатан с отступом в три пробела. Это и были те самые неучтенные три пробела. Любой ввод, для которого правилами find не найдено соответствия, перенаправляется прямо в поток вывода. Правило any в набора правил исполняет роль своего

рода губки, •.¦таштываюшет- весь нераспознанный ввод. Разумеется, конструкция find any. если вы ее используете, всегда должна быть последней в наборе правил find.

Обработка XML

OmniMark обрабатывает XML (и SGML) потоковым способом. Данные XML из источника поступают синтаксическому анализатору. Структурные детали, такие как элементы, вызывают срабатывание правил разметки. Если поток данных не перехватывается или не перенаправляется вашей программой, он направляется в текущее устройство вывода. Инструкции OmniMark do x^J-ps-se и do ^nu-parse перенаправляют ввод соответствующему процессору разметки. К примеру, следующий фрагмент гMiiiiMHpveT обработку файла МуПІелтІ процессором разметки синтаксического анализатора XML: П|ммм№4№ A OmtiiMaik дш нетерпеливых

Предыдущая << 1 .. 88 89 90 91 92 93 < 94 > 95 96 97 98 99 100 .. 157 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100