VTD-XML - VTD-XML

VTD-XML
Разработчики)XimpleWare
Стабильный выпуск
2.12 / 19 ноября 2015 г.; 5 лет назад (2015-11-19)
Операционная системаПортативный
ПлатформаJava, C #, C и C ++
ТипXML парсер / индексатор / слайсер / редактор библиотека
ЛицензияGPL и проприетарная лицензия
Интернет сайтvtd-xml.sourceforge.io ximpleware.wordpress.com

Дескриптор виртуального токена для расширяемого языка разметки (VTD-XML) относится к набору кроссплатформенных XML технологии обработки, ориентированные на недобывающие[1][2] XML, "документ-ориентированный" метод анализа, называемый дескриптором виртуального токена (VTD). В зависимости от точки зрения VTD-XML можно рассматривать как одно из следующих:

  • А "Документоцентричный "[3][4] XML парсер[5][6][7]
  • Собственный XML индексатор или формат файла который использует двоичные данные для улучшения текста XML[8]
  • Добавочный модификатор содержимого XML
  • XML-слайсер / разделитель / ассемблер[9]
  • Редактор / ластик XML
  • Способ переноса обработки XML на чип[10][11][12]
  • Неблокирующий, без гражданства XPath оценщик[13]

VTD-XML разработан XimpleWare и имеет двойную лицензию под GPL и проприетарная лицензия. Изначально написано на Ява, но теперь доступно в C,[14] C ++ и C #.

Основная концепция

Неизвлекающий анализ, ориентированный на документы

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

Дескриптор виртуального токена

Дескриптор виртуального токена (VTD) применяет концепцию неэкстрактивного анализа, ориентированного на документы, к обработке XML. Запись VTD использует 64-битное целое число для кодирования смещения, длины, типа токена и глубины вложения токена в XML-документе. Поскольку все записи VTD имеют длину 64 бита, их можно эффективно хранить и управлять ими как массивом.[15]

Кеш местоположения

Кеши местоположения (LC) построены на записях VTD для обеспечения эффективного произвольного доступа. Организованные в виде таблиц с одной таблицей для каждого уровня глубины вложенности, LC содержат записи, моделирующие иерархию элементов XML-документа. Запись LC - это 64-битное целое число, кодирующее пару 32-битных значений. Старшие 32 бита определяют запись VTD для соответствующего элемента. Младшие 32 бита идентифицируют первого дочернего элемента этого элемента в LC на следующем более низком уровне вложенности.

Льготы

Обзор

Практически все основные преимущества VTD-XML присущи неэкстрактивному, ориентированному на документы синтаксическому анализу, который обеспечивает следующие характеристики:

  • Исходный текст XML сохраняется в памяти без декодирования.
  • Внутреннее представление VTD-XML по своей сути стойкий.
  • Устраняет объектно-ориентированный моделирование иерархического представления, поскольку оно полностью полагается на примитивные типы данных (например, 64-битные целые числа) для представления иерархии XML, что снижает стоимость создания объекта почти до нуля.[16]

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

Соответствие

VTD-XML строго соответствует XML 1.0 (кроме части DTD) и XML Namespace 1.0. Он по существу соответствует спецификации XPath 1.0 (с некоторыми тонкими различиями в терминах базовой модели данных) с расширением встроенных функций XPath 2.0.

Простота

Как парсер

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

  • VTD-XML обычно превосходит SAX (с обработчиком содержимого NULL), обеспечивая при этом полный произвольный доступ и встроенный XPath поддержка.[нужна цитата ]
  • VTD-XML обычно потребляет в 1,3-1,5 раза размер XML-документа в памяти, что составляет примерно 1/5 от объема памяти, используемого DOM.[нужна цитата ]
  • Приложения, написанные на VTD-XML, обычно намного короче и чище, чем их версии DOM или SAX.[нужна цитата ]

Как индексатор

Из-за присущей VTD-XML устойчивости разработчики могут записывать внутреннее представление проанализированного XML-документа на диск, а затем перезагружать его, чтобы избежать повторного синтаксического анализа. С этой целью XimpleWare представила VTD + XML как двоичный формат упаковки, объединяющий VTD, LC и текст XML. Обычно его можно просмотреть одним из следующих двух способов:

  • Собственный XML-индекс, который полностью исключает затраты на синтаксический анализ, а также сохраняет все преимущества XML. Это формат файла, который удобен для чтения и обратно совместим с XML.[нужна цитата ]
  • А двоичный XML формат, использующий двоичные данные для улучшения обработки текста XML.

Модификатор содержимого XML

Поскольку VTD-XML сохраняет текст XML в неизменном виде без декодирования, когда приложение намеревается изменить содержимое XML, ему нужно изменить только те части, которые наиболее важны для изменений. Это резко контрастирует с синтаксическим анализом DOM, SAX или StAx, который требует затрат на синтаксический анализ и повторную сериализацию независимо от того, насколько малы изменения.

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

XML-слайсер / разделитель / ассемблер

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

  • В качестве слайсера VTD-XML может "кусочек"от токена или фрагмента элемента из XML-документа, а затем вставить его обратно в другое место того же документа или в другой документ.
  • В качестве разделителя VTD-XML может Трещина вложенные элементы в XML-документ и выгружать каждый в отдельный XML-документ.
  • Как ассемблер VTD-XML может "резать"фрагменты из нескольких XML-документов и собрать их в новый XML-документ.

XML редактор / ластик

VTD-XML, используемый в качестве редактора / ластика, может напрямую редактировать / стирать базовое байтовое содержимое XML-текста при условии, что длина токена больше, чем предполагаемое новое содержимое. Непосредственным преимуществом этого подхода является то, что приложение может сразу повторно использовать исходный VTD и LC. Напротив, при использовании VTD-XML для инкрементного обновления XML-документа приложению необходимо повторно проанализировать обновленный документ, прежде чем приложение сможет его обработать.

Редактора можно сделать достаточно умным, чтобы отслеживать местоположение каждого токена, позволяя новым, более длинным токенам заменять существующие, более короткие токены, просто обращаясь к новому токену в отдельной памяти вне той, которая использовалась для хранения исходного документа. Аналогично, при изменении порядка документа текст элемента не нужно копировать; нужно обновлять только LC. Когда требуется полный непрерывный XML-документ, например, при его сохранении, разрозненные части могут быть повторно собраны в новый непрерывный документ.

Другие преимущества

VTD-XML также является пионером в использовании неблокирующего подхода к оценке XPath без сохранения состояния.[нужна цитата ]

Недостатки

VTD-XML также имеет несколько заметных недостатков:

  • Как анализатор XML он не поддерживает внешние объекты, объявленные в DTD.
  • В качестве формата файла он увеличивает размер документа примерно на 30–50%.
  • Как API он несовместим с ДОМ, SAX или StAX.
  • Сложно поддерживать определенные методы проверки, используемые DTD и XML-схемой (например, атрибуты и элементы по умолчанию), которые требуют модификации анализируемых экземпляров XML.

Области применения

Универсальная замена DOM или SAX

Благодаря преимуществам VTD-XML в производительности и памяти, он охватывает большую часть вариантов использования XML, чем DOM или SAX.[18]

  • По сравнению с DOM, VTD-XML обрабатывает XML-документы большего размера (в 3–5 раз) при том же объеме физической памяти, что примерно в 3–10 раз превышает производительность.
  • По сравнению с SAX, VTD-XML обеспечивает произвольный доступ и поддержку XPath и превосходит SAX как минимум в 2 раза.

XPath поверх огромных XML-документов

Расширенная версия VTD-XML в сочетании с 64-битной JVM делает возможной обработку XML на основе XPath огромных XML-документов (до 256 ГБ) размером.

Для безопасности SOA / WS / XML

Сочетание высокой производительности VTD-XML и возможности инкрементального обновления делает его незаменимым[19][20][21] для достижения желаемого уровня Качество обслуживания для приложений безопасности SOA / WS / XML.

Для посредника SOA / WS / XML

VTD-XML хорошо подходит для SOA промежуточные приложения, такие как XML-маршрутизаторы / коммутаторы / шлюзы, Автобусы корпоративного обслуживания, и точки агрегирования сервисов. Все эти приложения выполняют базовые операции «сохранения и пересылки», для которых сохранение исходного XML критично для минимизации задержки. Возможность инкрементного обновления VTD-XML также значительно повышает производительность пересылки.

Возможность произвольного доступа VTD-XML хорошо подходит для XPath маршрутизация / коммутация / фильтрация на основе XML, общая в AJAX и развертывание SOA.

Интеллектуальная балансировка нагрузки и разгрузка SOA / WS / XML

Когда XML-документ проходит через несколько компонентов SOA среднего уровня, первая остановка сообщения, после завершения проверки XML-документа, может выбрать отправку формата файла VTD + XML нижестоящим компонентам, чтобы избежать повторного синтаксического анализа, тем самым повышая пропускную способность.

Точно так же интеллектуальный балансировщик нагрузки SOA может выбрать генерацию VTD + XML для входящих / исходящих сообщений SOAP, чтобы разгрузить синтаксический анализ XML с серверов приложений, которые получают эти сообщения.

Хранилище данных сохраняемости XML

Если смотреть с точки зрения сохраняемости собственного XML, VTD-XML можно использовать как удобочитаемый, простой в использовании XML-индекс общего назначения. XML-документы, хранящиеся таким образом, могут быть загружены в память для запроса, обновления или редактирования без дополнительных затрат на синтаксический анализ / повторную сериализацию.

Связывание XML-данных без схемы

Комбинация VTD-XML из высокой производительности, низкого использования памяти и эффективной оценки XPath делает возможным новый Связывание данных XML подход, полностью основанный на XPath. Самым большим преимуществом этого подхода является то, что он больше не требует схемы XML, позволяет избежать ненужного создания объектов и использует присущее XML свободное кодирование.[22]

Стоит отметить, что привязка данных, обсуждаемая в упомянутой выше статье, должна быть реализована приложением: сам VTD-XML предлагает только средства доступа. В этом отношении VTD-XML сам по себе не является решением для привязки данных (в отличие от JiBX, JAXB, XMLBeans), хотя он предлагает функции извлечения для пакетов привязки данных, как и другие анализаторы XML (ДОМ, SAX, StAX ).

Основные классы

Начиная с версии 2.11, версии VTD-XML для Java и C # состоят из следующих классов:

  • VTDGen (VTD Generator) - это класс, который инкапсулирует основные функции синтаксического анализа, загрузки индекса и записи индекса.
  • VTDNav (VTD Navigator) - это класс, который (1) инкапсулирует XML, VTD и иерархическую информацию, (2) содержит различные методы навигации, (3) выполняет различные сравнения между записями VTD и строками и (4) преобразует записи VTD в примитивные данные типы.
  • Автопилот - это класс, содержащий функции, выполняющие итерацию на уровне узлов, и XPath.
  • XMLModifier - это класс, который предлагает возможность инкрементного обновления, такого как удаление, вставка и обновление.

Расширенный VTD-XML состоит из следующих классов:

  • VTDGenHuge (Расширенный генератор VTD) инкапсулирует основной синтаксический анализ.
  • XMLBuffer выполняет загрузку XML-документов в память.
  • XMLMemMappedBuffer выполняет загрузку XML-документов с отображением памяти.
  • VTDNavHuge (Расширенный навигатор VTD) 1) инкапсулирует XML, расширенную VTD и иерархическую информацию, (2) содержит различные методы навигации, (3) выполняет различные сравнения между записями VTD и строками и (4) преобразует записи VTD в примитивные типы данных.
  • Автопилот Огромный выполняет итерацию на уровне узла и XPath.

Пример кода

/ * В этой java-программе мы демонстрируем, как использовать XMLModifier для постепенного* обновить простой заказ на покупку в формате XML.* конкретное пространство имен. Мы тоже собираемся* использовать parseFile VTDGen для упрощения программирования.*/импорт com.ximpleware. *;общественный класс Обновить {      общественный статический пустота основной(Строка argv[]) бросает NavException, ModifyException, IOException{            // открываем файл и считываем содержимое в байтовый массив            VTDGen vg = новый VTDGen();            если (vg.parseFile("oldpo.xml", правда)){                VTDNav вн = vg.getNav();                Автопилот ap = новый Автопилот(вн);                XMLModifier хм = новый XMLModifier(вн);                ap.selectXPath("/ PurchaseOrder / items / item [@ partNum = '872-AA']");                int я = -1;                в то время как ((я = ap.evalXPath()) != -1){                    хм.удалять();                    хм.insertBeforeElement("<что-то />  n");                }                ap.selectXPath("/ PurchaseOrder / items / item / USPrice [. <40] / text ()");                в то время как ((я = ap.evalXPath()) != -1){                    хм.updateToken(я, "200");                }                хм.вывод("newpo.xml");            }      }}

использованная литература

  1. ^ Чжан, Джимми (19 мая 2004 г.). «Неэкстрактивный анализ XML». XML.com. Получено 2020-07-24.
  2. ^ Обработка XML для будущего
  3. ^ Чжан, Джимми (9 января 2008 г.). «Управляйте XML-контентом с помощью Ximple». DevX. Получено 2020-07-24.
  4. ^ Чжан, Джимми (24 июня 2008 г.). "VTD-XML: Обработка XML для будущего (Часть II)". Код проекта. Получено 2020-07-24.
  5. ^ Чжан, Джимми (27 марта 2006 г.). «Упростите обработку XML с помощью VTD-XML». JavaWorld. Получено 2020-07-24.
  6. ^ Чжан, Джимми (21 октября 2004 г.). «Лучшая и быстрая обработка XML с помощью VTD-XML». DevX. Получено 2020-07-24.
  7. ^ Чжан, Джимми (17 апреля 2008 г.). «VTD-XML: Обработка XML для будущего (Часть I)». Код проекта. Получено 2020-07-24.
  8. ^ Чжан, Джимми (2 ноября 2007 г.). «Индексирование XML-документов с помощью VTD-XML». Публикации SYS-CON. Архивировано из оригинал на 2007-11-05.
  9. ^ Чжан, Джимми (24 июля 2006 г.). «Вырезать, вставлять, разделять и собирать XML-документы с помощью VTD-XML». JavaWorld. Получено 2020-07-24.
  10. ^ XML на микросхеме?
  11. ^ Чжан, Джимми (9 марта 2005 г.). «XML на чипе». XML.com. Получено 2020-07-24.
  12. ^ Документ с изложением позиции семинара W3C по бинарному XML от XimpleWare
  13. ^ Чжан, Джимми (19 марта 2007 г.). «Повышение эффективности XPath с помощью VTD-XML». DevX. Получено 2020-07-24.
  14. ^ Фолькман, Виктор (3 декабря 2007 г.). «VTD-XML: новое видение XML». Developer.com. Получено 2020-07-24.
  15. ^ Введение в дескриптор виртуального токена на SourceForge
  16. ^ Чжан, Джимми (31 июля 2006 г.). "Бедствие производительности двоичного XML". Публикации SYS-CON. Архивировано из оригинал на 2008-08-08.
  17. ^ Отчет о производительности парсинга / навигации VTD-XML
  18. ^ Чжан, Джимми (8 февраля 2006 г.). «Шаг в правильном направлении: VTD-XML улучшает обработку XML». DevX. Получено 2020-07-24.
  19. ^ Чжан, Джимми (9 января 2007 г.). «Ускорение приложений WSS с помощью VTD-XML». JavaWorld. Получено 2020-07-24.
  20. ^ Презентация W3C по безопасности XML
  21. ^ Позиционный документ для семинара W3C о следующих шагах для подписи XML и шифрования XML
  22. ^ Чжан, Джимми (10 сентября 2007 г.). «Связывание данных Java-XML без схемы с VTD-XML». ONJava. Архивировано из оригинал на 2017-09-27.