БНФ - нотація
БНФ – нотація дозволяє формально описати розщеплювання/об'єднання потоків [38]. Потік може розщеплюватися на власні окремі гілки, на компоненти потоку-предка або на те і інше одночасно. При розщеплюванні/об'єднанні потоку суттєво, щоб кожен компонент потоку-предка був іменованим.
Якщо потік розщеплюється на підпотоки, необхідно, щоб всі підпотоки були компонентами потоку-предка. І навпаки, при об'єднанні потоків кожен компонент потоку-предка винен принаймні одного разу зустрічатися серед підпотоків. Відзначимо, що при об'єднанні підпотоків немає необхідності здійснювати включення загальних компонент, а при розщеплюванні підпотоки можуть мати такі загальні (однакові) компоненти.
Важливо розуміти, що точні визначення потоків містяться в словнику даних, а не на діаграмах. Наприклад, на діаграмі може бути груповий вузол з вхідним потоком X і вихідними підпотоками Y і Z. Проте це зовсім не означає, що відповідне визначення в словнику даних обов'язково повинне бути X=Y+Z. Це визначення може бути наступним:
Х=А+В+С; Y=A+B; Z=B+C
Такі визначення зберігаються в словнику даних в так званій БНФ-статті. БНФ-стаття використовується для опису компонент даних в потоках даних і в сховищах. Її синтаксис має вигляд:
@БНФ = <простиий оператор>! <БНФ-вираз>
де <простий оператор> є текстовий опис, поміщений в " ", а <БНФ-вираз> є вираз у формі Бекуса-Наура, що допускає наступні операції відношень:
=- означає "композиція з";
+- означає "І";
[!]- означає "АБО";
( )- означає, що компонент в дужках не обов'язковий;
{ }- означає ітерацію компоненту в дужках;
" "- означає літерал.
Ітераційні дужки можуть мати нижню і верхню межу, наприклад:
3{ болт} 7 - від 3 до 7 ітерацій
1 { болт} - 1 і більш за ітерації
{ шайба}3 - не більше 3 ітерацій
БНФ-вираз може містити довільні комбінації операцій:
@БНФ = [ гвинт ! болт + 2 { гайка}2 + (прокладка) ! клей ]
Нижче приведений приклад опису потоку даних за допомогою БНФ:
@ = ВІСІМКОВА ЦИФРА
@ТИП=дискретный потік
@БНФ=["0"!"1"!"2"!"3"!"4"!"5"!"6"!"7"]
Розглянемо елементи словника даних для прикладу, в якому описаний процес "Складання іспиту".
Розглянемо інформаційний потік "Запрошення тягнути квиток":
@ІМ’Я = ЗАПРОШЕННЯ ТЯГНУТИ КВИТОК
@ТИП = потік, що управляє
@БНФ = /вказує, что студент допущений до екзамену/
Розглянемо ще один потік "Сформована думка про знання студента"
@ІМ’Я = СФОРМОВАНА ДУМКА ПРО ЗНАННЯ СТУДЕНТА
@ТИП = внутрішній потік
@БНФ = /на підставі цього потоку формується оцінка студента/