Spec-Zone.ru › MySQL Workbench

9.7 Настройка шаблонов отчётов модели DBDoc

  • 9.7.1 Поддерживаемые маркеры шаблонов
  • 9.7.2 Создание пользовательского шаблона

В этом разделе представлен обзор создания и изменения шаблонов отчётов модели DBDoc, используемых в MySQL Workbench.

Система отчётов модели DBDoc в MySQL Workbench основана на системе шаблонов Google. Данное обсуждение не пытается подробно объяснить систему шаблонов Google. Для полезного обзора работы системы шаблонов Google см. документ Google по ссылке Как использовать систему шаблонов Google.

Шаблоны, используемые системой отчётов модели DBDoc, представляют собой текстовые файлы, содержащие маркеры. Эти текстовые файлы обрабатываются системой шаблонов в MySQL Workbench, а маркеры заменяются фактическими данными. Затем генерируются выходные файлы. Пользователи затем просматривают эти выходные файлы, обычно в формате HTML или текста.

Маркеры могут быть следующих типов:

  • Включение шаблона

  • Комментарий

  • Установка разделителя

  • Предикат

  • Переменная

  • Начало и конец раздела

Последние два типа наиболее часто используются в шаблонах MySQL Workbench, и эти важные маркеры кратко описаны в следующих разделах.

  • Переменные

    Переменные, обозначаемые маркерами в файле шаблона, заменяются соответствующими данными до генерации выходного файла. Сопоставление между переменными и соответствующими данными хранится в MySQL Workbench в словаре данных. В словаре данных имя переменной — ключ, а соответствующие данные переменной — значение. MySQL Workbench строит словари данных и заполняет их данными, содержащимися в обработанной модели.

    В качестве примера, следующий фрагмент кода демонстрирует часть файла шаблона:

    Total number of Schemas: {{SCHEMA_COUNT}}
    

    В сгенерированном выходном файле переменная {{SCHEMA_COUNT}} заменяется количеством схем в модели:

    Total number of Schemas: 2
    

    Переменная может встречаться несколько раз в файле шаблона.

  • Разделы

    Разделы используются для итераций в шаблонах. При замене MySQL Workbench переменных в разделе данными, это делается итеративно, используя все данные в словаре данных, в котором определена переменная. MySQL Workbench строит словари данных в соответствии с обрабатываемой моделью.

    Рассмотрим следующий фрагмент кода:

    {{#SCHEMATA}}
    Schema: {{SCHEMA_NAME}}
    {{/SCHEMATA}}
    

    В данном фрагменте начало и конец раздела обозначены маркерами {{#SCHEMATA}} и {{/SCHEMATA}}. При обработке шаблона MySQL Workbench отмечает раздел и выполняет итерацию, пока данные переменной {{SCHEMA_NAME}} в соответствующем словаре данных не будут исчерпаны. Например, если обрабатываемая модель содержит две схемы, вывод для раздела может иметь следующий вид:

    Schema: Airlines
    Schema: Airports
    

Словари данных

Важно понять взаимосвязь между разделами и словарями данных более подробно. В словаре данных ключом для переменной является имя переменной, маркер. Значение переменной — это данные переменной. Запись для раздела в словаре данных отличается. Для записи раздела в словаре данных ключ — это имя раздела, маркер. Однако значение, связанное с ключом, — это список словарей данных. В MySQL Workbench каждый раздел обычно связан со словарем данных. Можно рассматривать раздел как активацию связанного словаря (или словарей).

При обработке шаблона словари данных загружаются в иерархической структуре, образуя дерево словарей данных. Это показано в следующей таблице.

Таблица 9.2 Дерево словарей данных

Таблица 9.2 Дерево словарей данных
Словарь данных Загружает словарь данных
MAIN SCHEMATA
SCHEMATA TABLES, COLUMNS (Подробно true), FOREIGN_KEYS (Подробно true), INDICES (Подробно true)
TABLES REL_LISTING, INDICES_LISTING, COLUMNS_LISTING, TABLE_COMMENT_LISTING, DDL_LISTING
COLUMNS_LISTING COLUMNS (Подробно false)
REL_LISTING REL (Подробно false)
INDICES_LISTING INDICES (Подробно false)

Корнем дерева является словарь main. Дополнительные словари загружаются от корня, образуя дерево словарей.

Примечание

Если шаблон не содержит разделов, любые используемые в шаблоне переменные ищутся в основном словаре. Если переменная не найдена в основном словаре (который можно рассматривать как связанный с по умолчанию или основным разделом), для этого маркера в выходном файле не генерируются данные.

Оценивание переменных

Структура дерева словарей данных важна с точки зрения оценки переменных. Поскольку переменные определены в словарях данных, их связанные значения имеют смысл только при активности данного словаря данных, а это значит, что активен связанный с ним раздел. При поиске переменной система проверяет словарь данных, связанный с текущим разделом. Если значение переменной найдено там, выполняется замена. Однако если значение переменной не найдено в текущем словаре данных, система проверяет родительский словарь данных и так далее по дереву до основного словаря данных или корня.

Предположим, что мы хотим отобразить имена всех столбцов в модели. Рассмотрим следующий шаблон в качестве попытки этого:

Report
------
Column Name: {{COLUMN_NAME}}

Этот шаблон не генерирует вывод, даже для модели, содержащей один или несколько столбцов. В этом примере активен только основной словарь данных. Однако COLUMN_NAME хранится в словаре данных COLUMNS, который связан с разделом COLUMNS.

С этим знанием шаблон может быть улучшен следующим образом:

Report
------
{{#COLUMNS}}
Column Name: {{COLUMN_NAME}}
{{/COLUMNS}}

Это по-прежнему не генерирует вывод. Чтобы понять почему, см. таблицу 9.2 «Дерево словарей данных». Словарь данных COLUMNS имеет родительский словарь COLUMNS_LISTING. COLUMNS_LISTING имеет родителя TABLES, который имеет родителя SCHEMATA, родитель которого — основной словарь данных.

Чтобы получить желаемый вывод, шаблон должен быть похожим на следующий:

Report
------

{{#SCHEMATA}}
{{#TABLES}}
{{#COLUMNS_LISTING}}
{{#COLUMNS}}
Column Name: {{COLUMN_NAME}}
{{/COLUMNS}}
{{/COLUMNS_LISTING}}
{{/TABLES}}
{{/SCHEMATA}}

Следующий шаблон идентичен, но с добавлением поясняющих комментариев:

Report
------

{{! Main dictionary active}}
{{#SCHEMATA}}  {{! SCHEMATA dictionary active}}
{{#TABLES}}  {{! TABLES dictionary active}}
{{#COLUMNS_LISTING}} {{! COLUMNS_LISTING dictionary active}}
{{#COLUMNS}}  {{! COLUMNS dictionary active}}
Column Name: {{COLUMN_NAME}} {{! COLUMN_NAME variable is looked-up,
and found, in COLUMNS data dictionary}}
{{/COLUMNS}}
{{/COLUMNS_LISTING}}
{{/TABLES}}
{{/SCHEMATA}}

Представьте теперь, что для каждого отображаемого имени столбца вы также хотели отобразить имя соответствующей схемы, шаблон будет выглядеть так:

Report
------

{{#SCHEMATA}}
{{#TABLES}}
{{#COLUMNS_LISTING}}
{{#COLUMNS}}
Schema Name: {{SCHEMA_NAME}} Column Name: {{COLUMN_NAME}}
{{/COLUMNS}}
{{/COLUMNS_LISTING}}
{{/TABLES}}
{{/SCHEMATA}}

При выполнении поиска переменной SCHEMA_NAME проверяется словарь COLUMNS. Поскольку переменная не найдена там, система проверяет родительский словарь COLUMNS_LISTING и так далее, пока переменная не будет найдена, где она хранится, в словаре SCHEMATA.

Если в модели есть несколько схем, внешний раздел итерируется соответствующее количество раз, и SCHEMA_NAME соответственно имеет правильное значение на каждой итерации.

Важно всегда учитывать, какой словарь должен быть активным (и какие родительские), чтобы переменная оценивалась правильно. В следующем разделе есть таблица, которая поможет вам определить требования к разделу.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/workbench-en/dbdoc-templates.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API