Преобразование идентичности

редактировать

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

Преобразование идентичности считается важным процессом при создании многоразового. Создавая библиотеку вариантов преобразования базовой идентичности, можно легко поддерживать разнообразие. Эти фильтры могут быть объединены в цепочку в формате, аналогичном формату оболочки UNIX.

Содержание
  • 1 Примеры рекурсивных преобразований
    • 1.1 Использование XSLT
      • 1.1.1 XSLT 3.0
    • 1.2 Использование XQuery
  • 2 Нерекурсивные преобразования
    • 2.1 Использование XSLT
    • 2.2 Использование XProc
  • 3 Более сложные примеры
    • 3.1 Удаление преобразования именованных элементов
      • 3.1.1 Использование XSLT
      • 3.1.2 Использование XQuery
      • 3.1.3 Использование XProc
  • 4 См. Также
  • 5 Дополнительная литература
  • 6 Ссылки
Примеры рекурсивных преобразований

«Копирование с рекурсией» позволяет, изменяя небольшие части кода, производить полностью новый и другой вывод, фильтруя или обновляя ввод. Понимая «идентичность по рекурсии», мы можем понять фильтры.

Использование XSLT

Наиболее часто цитируемым примером преобразования идентичности (для XSLT версии 1.0) является преобразование «copy.xsl», выраженное в XSLT. Это преобразование использует команду xsl: copy для выполнения преобразования идентификатора:

Этот шаблон работает путем сопоставления всех атрибутов (@ * ) и других узлов (node () ), копирования каждый узел соответствует, а затем применяет преобразование идентичности ко всем атрибутам и дочерним узлам контекстного узла. Это рекурсивно спускается по дереву элементов и выводит все структуры в той же структуре, что и в исходном файле, в пределах ограничений, касающихся того, какая информация считается важной в модели данных XPath. Поскольку node () соответствует тексту, инструкциям обработки, корню и комментариям, а также элементам, копируются все узлы XML.

Более явная версия преобразования идентичности:

Эта версия эквивалентна первой, но явно перечисляет типы узлов XML, которые она будет копировать. Обе версии копируют данные, которые не нужны для большинства случаев использования XML (например, комментарии).

XSLT 3.0

XSLT 3.0 определяет атрибут «при отсутствии совпадения» инструкции xsl: mode, который позволяет объявить преобразование идентичности, а не реализовать его как явное правило шаблона. В частности:

по существу эквивалентен более ранним правилам шаблона. См. Описание мелкого копирования в стандарте XSLT 3.0.

Наконец, обратите внимание, что детали разметки, такие как использование разделов CDATA или порядок атрибутов, не обязательно сохраняются в выходных данных, поскольку эта информация не является частью модели данных XPath. Чтобы отобразить разметку CDATA в выводе, XSLT st ylesheet, который содержит шаблон преобразования идентичности (а не сам шаблон преобразования идентичности), должен использовать вызываемый атрибут.

определяет список имен элементов, чьи дочерние текстовые узлы должны выводиться с использованием разделов CDATA. Например:

Использование XQuery

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

В Викиучебнике есть книга по теме: XQuery / Filtering_Nodes
объявить функцию local: copy ($ element as element ()) {element {node-name ($ element)} {$ element / @ *, для $ child в $ element / node () return if ($ child instance of element ()) then local: copy ($ child) else $ child}};
В Викиучебнике есть книга по теме: XQuery / Typeswitch_Transformations

Та же функция может быть реализована с помощью преобразования в стиле машинного переключателя.

xquery версии "1.0"; (: копировать ввод в вывод без изменений :) объявить функцию local: copy ($ input as item () *) as item () * {для $ node в $ input return typeswitch ($ node) case element () return element {name ($ node)} {(: вывести каждый атрибут в этом элементе :) для $ att в $ node / @ * return attribute {name ($ att)} {$ att}, (: вывести все подэлементы этот элемент рекурсивно :) для $ child в $ node return local: copy ($ child / node ())} (: в противном случае передать его. Используется для текста (), комментариев и PI :) default return $ node};

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

Нерекурсивные преобразования

Два простых и иллюстративных преобразования «копировать все».

Использование XSLT

Использование XProc

Здесь одно важное замечание об идентичности XProc заключается в том, что он может принимать либо один документ, как этот пример, либо последовательность документов в качестве входных данных.

Более сложные примеры

Обычно преобразование идентичности используется в качестве основы, на которой можно вносить локальные изменения.

Удалить преобразование именованного элемента

Использование XSLT

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

Использование XQuery

объявить функцию local: copy-filter-elements ($ element as element (), $ element-name как xs : string *) as element () {element {node-name ($ element)} {$ element / @ *, для $ child в $ element / node () [not (name (.) = $ element-name)] return if ($ child instance of element ()) then local: copy-filter-elements ($ child, $ element-name) else $ child}};

Чтобы вызвать это, нужно добавить:

$ filter-output: = local: copy-filter-elements ($ input, 'PersonSSNID')

Использование XProc

См. Также
Дополнительная литература
  • Поваренная книга XSLT, O'Reilly Media, Inc., 1 декабря 2002 г., Сэл Мангано, ISBN 0-596-00372-2
  • Присцилла Уолмсли, XQuery, O'Reilly Media, Inc., Глава 8 Функции - Рекурсивные функции - стр. 109
Ссылки
  1. ^ W3.org - XSL-преобразования версии 1.0 - Копирование
  2. ^W3.org - XSL-преобразования версии 3.0
  3. ^W3. org - XSL Transformations Version 3.0 - Встроенные шаблоны: мелкое копирование
Последняя правка сделана 2021-05-23 10:31:20
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте