VTD-XML
Эта статья содержит контент, написанный как реклама . ( Октябрь 2010 г. ) |
Разработчик(и) | XimpleWare |
---|---|
Стабильная версия | 2.13_4
/ 14 июля 2017 г |
Операционная система | Портативный |
Платформа | Java, C#, C и C++ |
Тип | XML- парсера/индексатора/слайсера/редактора Библиотека |
Лицензия | GPL и проприетарная лицензия |
Веб-сайт | vtd-xml |
Дескриптор виртуального токена для расширяемого языка разметки ( 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 и собственную лицензию. Первоначально он был написан на Java но теперь доступен на C. , [14] С++ и С# .
Основная концепция
[ редактировать ]Неизвлекающий анализ, ориентированный на документы
[ редактировать ]Традиционно лексический анализатор представляет токены (небольшие единицы неделимых символьных значений) в виде дискретных строковых объектов. Этот подход называется экстрактивным анализом. Напротив, неизвлекающая токенизация требует сохранения исходного текста нетронутым и использования смещений и длин для описания этих токенов.
Дескриптор виртуального токена
[ редактировать ]Дескриптор виртуального токена ( 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 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 он несовместим с DOM , 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
[ редактировать ]Сочетание высокой производительности, низкого использования памяти и эффективной оценки XPath в VTD-XML делает возможным новый подход к связыванию данных XML, полностью основанный на XPath. Самым большим преимуществом этого подхода является то, что он больше не требует схемы XML, позволяет избежать ненужного создания объектов и использует присущую XML свободную кодировку. [22]
Стоит отметить, что привязка данных, обсуждаемая в упомянутой выше статье, должна быть реализована приложением: сам VTD-XML предлагает только средства доступа. В этом отношении VTD-XML сам по себе не является решением для привязки данных (в отличие от JiBX, JAXB, XMLBeans), хотя он предлагает функции извлечения для пакетов привязки данных, во многом как и другие анализаторы XML ( DOM , SAX , StAX ).
Основные классы
[ редактировать ]Начиная с версии 2.11, версии VTD-XML для Java и C# состоят из следующих классов:
- VTDGen (VTD Generator) — это класс, который инкапсулирует основные функции синтаксического анализа, загрузки индекса и записи индекса.
- VTDNav (VTD Navigator) — это класс, который (1) инкапсулирует XML, VTD и иерархическую информацию, (2) содержит различные методы навигации, (3) выполняет различные сравнения между записями VTD и строками и (4) преобразует записи VTD в примитивные типы данных.
- AutoPilot — это класс, содержащий функции, выполняющие итерацию на уровне узла и XPath.
- XMLModifier — это класс, который предлагает возможности добавочного обновления, такие как удаление, вставка и обновление.
Расширенный VTD-XML состоит из следующих классов:
- VTDGenHuge (расширенный генератор VTD) инкапсулирует основной анализ.
- XMLBuffer выполняет загрузку XML-документов в память.
- XMLMemMappedBuffer выполняет загрузку XML-документов с отображением в памяти.
- VTDNavHuge (Расширенный навигатор VTD) (1) инкапсулирует XML, расширенный VTD и иерархическую информацию, (2) содержит различные методы навигации, (3) выполняет различные сравнения между записями VTD и строками и (4) преобразует записи VTD в примитивные типы данных. .
- AutoPilotHuge выполняет итерацию на уровне узла и XPath.
Пример кода
[ редактировать ]/* In this java program, we demonstrate how to use XMLModifier to incrementally
* update a simple XML purchase order.
* a particular name space. We also are going
* to use VTDGen's parseFile to simplify programming.
*/
import com.ximpleware.*;
public class Update {
public static void main(String argv[]) throws NavException, ModifyException, IOException{
// open a file and read the content into a byte array
VTDGen vg = new VTDGen();
if (vg.parseFile("oldpo.xml", true)){
VTDNav vn = vg.getNav();
AutoPilot ap = new AutoPilot(vn);
XMLModifier xm = new XMLModifier(vn);
ap.selectXPath("/purchaseOrder/items/item[@partNum='872-AA']");
int i = -1;
while ((i = ap.evalXPath()) != -1){
xm.remove();
xm.insertBeforeElement("<something/>\n");
}
ap.selectXPath("/purchaseOrder/items/item/USPrice[.<40]/text()");
while ((i = ap.evalXPath()) != -1){
xm.updateToken(i, "200");
}
xm.output("newpo.xml");
}
}
}
Ссылки
[ редактировать ]- ^ Чжан, Джимми (19 мая 2004 г.). «Неизвлекающий анализ XML» . XML.com . Проверено 24 июля 2020 г.
- ^ Обработка XML в будущем
- ^ Чжан, Джимми (9 января 2008 г.). «Управление XML-контентом простым способом» . ДевХ . Архивировано из оригинала 30 июля 2017 г. Проверено 24 июля 2020 г.
- ^ Чжан, Джимми (24 июня 2008 г.). «VTD-XML: обработка XML в будущем (часть II)» . Код проекта . Проверено 24 июля 2020 г.
- ^ Чжан, Джимми (27 марта 2006 г.). «Упростите обработку XML с помощью VTD-XML» . JavaWorld . Проверено 24 июля 2020 г.
- ^ Чжан, Джимми (21 октября 2004 г.). «Лучшая и быстрая обработка XML с помощью VTD-XML» . ДевХ . Проверено 24 июля 2020 г.
- ^ Чжан, Джимми (17 апреля 2008 г.). «VTD-XML: обработка XML в будущем (часть I)» . Код проекта . Проверено 24 июля 2020 г.
- ^ Чжан, Джимми (2 ноября 2007 г.). «Индексирование XML-документов с помощью VTD-XML» . Публикации SYS-CON. Архивировано из оригинала 5 ноября 2007 г.
- ^ Чжан, Джимми (24 июля 2006 г.). «Вырезание, вставка, разделение и сборка XML-документов с помощью VTD-XML» . JavaWorld . Проверено 24 июля 2020 г.
- ^ XML на чипе?
- ^ Чжан, Джимми (9 марта 2005 г.). «XML на чипе» . XML.com . Проверено 24 июля 2020 г.
- ^ Документ с изложением позиции семинара W3C по двоичному XML от XimpleWare
- ^ Чжан, Джимми (19 марта 2007 г.). «Повысьте эффективность XPath с помощью VTD-XML» . ДевХ . Проверено 24 июля 2020 г.
- ^ Волкман, Виктор (3 декабря 2007 г.). «VTD-XML: новое видение XML» . Разработчик.com . Проверено 24 июля 2020 г.
- ^ Введение в дескриптор виртуального токена на SourceForge
- ^ Чжан, Джимми (31 июля 2006 г.). «Горе производительности двоичного XML» . Публикации SYS-CON. Архивировано из оригинала 8 августа 2006 г.
- ^ Отчет о производительности синтаксического анализа/навигации VTD-XML
- ^ Чжан, Джимми (8 февраля 2006 г.). «Шаг в правильном направлении: VTD-XML улучшает обработку XML» . ДевХ . Проверено 24 июля 2020 г.
- ^ Чжан, Джимми (9 января 2007 г.). «Ускорение приложений WSS с помощью VTD-XML» . JavaWorld . Проверено 24 июля 2020 г.
- ^ Презентация семинара W3C по безопасности XML
- ^ Документ с изложением позиции для семинара W3C по следующим шагам в области подписи XML и шифрования XML
- ^ Чжан, Джимми (10 сентября 2007 г.). «Бессхемная привязка данных Java-XML с помощью VTD-XML» . ONJava . Архивировано из оригинала 27 сентября 2017 г.