Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные 3-4.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.72 Mб
Скачать

Отображение множества плоских таблиц на один выходной xml файл

Предпосылки схемы:

  • Структура схемы должна соответствовать спецификации SQL/XML.

  • XML Spy имеет возможность создать SQL/XML conformant (преобразованный) файл от SQL БД, используя Convert | Create Database Schema. Вы можете затем использовать эту схему как целевую в MapForce.

  • В этом случае каждое наименование таблицы отображается на дочерний элемент строки того же наименования в схеме, т.е. Address отображается на строку дочернего элемента Address.

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

Отображение и корневые элементы выходных документов

При создании отображения к корневому элементу выходной XML-схемы удостоверьтесь, что только один элемент или запись может быть назначен в выходном документе в качестве корневого.

Используйте фильтр для ограничения отображаемых данных до одного элемента или записи.

  • В примере, приведенном ниже, FK проверяется на равенство «1», и только при этом условии некий элемент Altovы будет передан некоему элементу целевого документа.

  • Если при этом не выявляется ни один элемент исходной БД, то корневой элемент вставляется в целевую схему автоматически.

Если вы не ограничиваете корневой элемент целевой схемы, то все элементы записи источника будут вставлены в первый корневой элемент.

Фильтрация бд по дате

Приведенный ниже пример показывает, как вы можете использовать фильтр для отбора записей БД по дате.

  • Поле Established определено в БД как поле типа Date/Time.

  • Дата для сравнения вводится как постоянный компонент типа string.

  • Если дата > 1995-03-03, то в этом случае данные передаются фильтром целевому файлу.

Рекомендации для использования компонента «filter»

Компонент filter является очень важным при выполнении запросов БД, поскольку это позволяет эффективно воздействовать на большое число данных. При работе с таблицами БД, содержащими тысячи и более строк, фильтры сокращают объем доступных данных и являются эффективным средством извлечения данных. Использование фильтров влияет на скорость генерации отображения.

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

Поэтому используйте компоненты filter при любой возможности:

  1. Избегайте связывания компонентов фильтра – Каждый фильтр ведет к образованию цикла, обращаясь к источнику n раз. Когда вы связываете два фильтра то получаем nn циклов.

Решение: используйте компоненты «logical-and» для комбинирования логических выражений двух фильтров. Результатом является один фильтр с n циклами.

  1. Связывайте параметры "on-true/on-false" с родительскими узлами, если это возможно, вместо непосредственного связывания с дочерними узлами – компоненты фильтра работают лучше, когда они связаны с родительскими узлами, содержащими дочерние узлы, а не с каждым дочерним узлом непосредственно. Поэтому булево выражение фильтра предпочтительнее родительского элемента, зацикленного через дочерние элементы. Использование фильтров для отображения из таблицы БД будет генерировать:

  • SELECT * FROM table WHERE <expression> если отображается родительский узел;

  • SELECT * FROM table, а затем выполняется обработка каждой строки, если отображаются дочерние узлы.

  1. Связывайте параметры "on- false" для отображения дополнительного набора узлов, порожденных параметром on-true – соединение этого параметра обеспечивает вам быстрый доступ к набору узлов, определенных текущим отображением.

  2. Не используйте фильтры для отображения к дочерним узлам, если отображены родительские узлы – использование фильтра для отображения от исходного к целевому родителю вызывают применение таких же фильтров для дочерних элементов. Фильтр не должен использоваться для отображения дочерних узлов, если он использован для отображения родительских узлов. Поэтому вы можете отображать дочерние данные непосредственно.

  3. Используйте «Priority context» для упорядочения по приоритетам несвязанных элементов – отображения всегда выполняются сверху вниз; если цикл/поиск выполняется на двух таблицах, то каждый цикл обрабатывается последовательно. Если при отображении несвязанных данных не установлен приоритетный контекст, то MapForce не знает, какой цикл должен выполняться сначала, поэтому автоматически выбирает первую таблицу.