El descriptor de token virtual para el lenguaje de marcado extensible (VTD-XML) se refiere a una colección de tecnologías de procesamiento XML multiplataforma centradas en una técnica de análisis "centrada en el documento" no extractiva [1] [2] XML llamada Descriptor de token virtual (VTD ). Dependiendo de la perspectiva, VTD-XML puede verse como uno de los siguientes:
- Un analizador XML " centrado en documentos " [3] [4] [5] [6] [7]
- Un indexador XML nativo o un formato de archivo que utiliza datos binarios para mejorar el texto XML [8]
- Un modificador de contenido XML incremental
- Un cortador / divisor / ensamblador XML [9]
- Un editor / borrador XML
- Una forma de transferir el procesamiento XML en el chip [10] [11] [12]
- Un evaluador XPath sin estado y sin bloqueo [13]
Desarrollador (es) | XimpleWare |
---|---|
Lanzamiento estable | 2.12 / 19 de noviembre de 2015 |
Sistema operativo | Portátil |
Plataforma | Java, C #, C y C ++ |
Tipo | Biblioteca de analizador / indexador / rebanador / editor XML |
Licencia | Licencia GPL y propietaria |
Sitio web | vtd-xml |
VTD-XML es desarrollado por XimpleWare y tiene doble licencia bajo GPL y licencia propietaria. Está escrito originalmente en Java , pero ahora está disponible en C , [14] C ++ y C # .
Concepto basico
Análisis no extractivo, centrado en documentos
Tradicionalmente, un analizador léxico representa tokens (las pequeñas unidades de valores de caracteres indivisibles) como objetos de cadena discretos. Este enfoque se denomina análisis sintáctico extractivo . Por el contrario, la tokenización no extractiva exige que uno mantenga intacto el texto de origen y utilice compensaciones y longitudes para describir esos tokens.
Descriptor de token virtual
El descriptor de token virtual ( VTD ) aplica el concepto de análisis sintáctico no extractivo y centrado en documentos al procesamiento de XML. Un registro VTD utiliza un entero de 64 bits para codificar el desplazamiento, la longitud, el tipo de token y la profundidad de anidamiento de un token en un documento XML. Debido a que todos los registros VTD tienen una longitud de 64 bits, pueden almacenarse de manera eficiente y administrarse como una matriz. [15]
Caché de ubicación
Los cachés de ubicación ( LC ) se basan en registros VTD para proporcionar un acceso aleatorio eficiente. Organizados como tablas, con una tabla por nivel de profundidad de anidamiento, los LC contienen entradas que modelan la jerarquía de elementos de un documento XML. Una entrada LC es un entero de 64 bits que codifica un par de valores de 32 bits. Los 32 bits superiores identifican el registro VTD del elemento correspondiente. Los 32 bits inferiores identifican al primer hijo de ese elemento en el LC en el siguiente nivel de anidación más bajo.
Beneficios
Descripción general
Prácticamente todos los beneficios principales de VTD-XML son inherentes al análisis sintáctico no extractivo y centrado en documentos, que proporciona estas características:
- El texto XML de origen se mantiene intacto en la memoria sin decodificar.
- La representación interna de VTD-XML es inherentemente persistente .
- Evita el modelado orientado a objetos de la representación jerárquica ya que se basa completamente en tipos de datos primitivos (por ejemplo, enteros de 64 bits) para representar la jerarquía XML, reduciendo así el costo de creación de objetos a casi cero. [dieciséis]
La combinación de esas características permite pensar en XML puramente como sintaxis (bits, bytes, compensaciones, longitudes, fragmentos, fragmentos compensados por espacio de nombres y composición de documentos) en lugar de la serialización / deserialización de objetos. Esta es una forma poderosa de pensar en las aplicaciones XML / SOA .
Conformidad
VTD-XML se ajusta estrictamente a XML 1.0 (excepto la parte DTD) y XML Namespace 1.0. Básicamente se ajusta a la especificación XPath 1.0 (con algunas diferencias sutiles en términos del modelo de datos subyacente) con extensión a las funciones integradas de XPath 2.0.
Sencillez
Como analizador
Cuando se usa en modo de análisis, VTD-XML es un analizador XML de propósito general, de rendimiento extremadamente alto [17] que se compara favorablemente con otros:
- VTD-XML generalmente supera a SAX (con el controlador de contenido NULL) y, al mismo tiempo, proporciona acceso aleatorio completo y compatibilidad con XPath incorporada. [ cita requerida ]
- VTD-XML normalmente consume 1.3-1.5 veces el tamaño del documento XML en memoria, que es aproximadamente 1/5 del uso de memoria de DOM [ cita requerida ]
- Las aplicaciones escritas en VTD-XML suelen ser mucho más cortas y limpias que sus versiones DOM o SAX. [ cita requerida ]
Como indexador
Debido a la persistencia inherente de VTD-XML, los desarrolladores pueden escribir la representación interna de un documento XML analizado en el disco y luego volver a cargarlo para evitar el análisis repetitivo. Con este fin, XimpleWare ha introducido VTD + XML como un formato de empaquetado binario que combina VTD, LC y el texto XML. Por lo general, se puede ver de una de las dos formas siguientes:
- Un índice XML nativo que elimina por completo el costo de análisis y también conserva todos los beneficios de XML. Es un formato de archivo legible por humanos y compatible con XML. [ cita requerida ]
- Un formato XML binario que utiliza datos binarios para mejorar el procesamiento del texto XML.
Modificador de contenido XML
Debido a que VTD-XML mantiene el texto XML intacto sin decodificar, cuando una aplicación intenta modificar el contenido de XML, solo necesita modificar las partes más relevantes para los cambios. Esto está en marcado contraste con el análisis de DOM, SAX o StAx, que incurren en el costo de analizar y volver a serializar sin importar cuán pequeños sean los cambios.
Dado que los VTD se refieren a los elementos del documento por sus compensaciones, los cambios en la longitud de los elementos que ocurren antes en un documento requieren ajustes en los VTD que se refieren a todos los elementos posteriores. Sin embargo, esos ajustes son adiciones de números enteros, aunque para muchos números enteros en varias tablas, por lo que son rápidos.
Rebanador / divisor / ensamblador XML
Una aplicación basada en VTD-XML también puede usar compensaciones y longitudes para direccionar tokens o fragmentos de elementos. Esto permite que los documentos XML se manipulen como matrices de bytes.
- Como rebanador, VTD-XML puede " cortar " un token o un fragmento de elemento de un documento XML y luego insertarlo nuevamente en otra ubicación en el mismo documento o en un documento diferente.
- Como divisor, VTD-XML puede dividir subelementos en un documento XML y volcar cada uno en un documento XML separado.
- Como ensamblador, VTD-XML puede " cortar " fragmentos de varios documentos XML y ensamblarlos en un nuevo documento XML.
Editor / borrador XML
Utilizado como editor / borrador, VTD-XML puede editar / borrar directamente el contenido de bytes subyacente del texto XML, siempre que la longitud del token sea más amplia que el nuevo contenido previsto. Un beneficio inmediato de este enfoque es que la aplicación puede reutilizar inmediatamente el VTD y LC originales. Por el contrario, cuando se utiliza VTD-XML para actualizar de forma incremental un documento XML, una aplicación necesita volver a analizar el documento actualizado antes de que la aplicación pueda procesarlo.
Se puede hacer que un editor sea lo suficientemente inteligente como para rastrear la ubicación de cada token, permitiendo que los tokens nuevos y más largos reemplacen los tokens más cortos existentes simplemente direccionando el nuevo token en una memoria separada fuera de la utilizada para almacenar el documento original. Asimismo, al reordenar el documento, no es necesario copiar el texto del elemento; solo es necesario actualizar las LC. Cuando se necesita un documento XML completo y contiguo, como cuando se guarda, las partes dispares se pueden volver a ensamblar en un nuevo documento contiguo.
Otros beneficios
VTD-XML también es pionero en el enfoque de evaluación XPath sin estado y sin bloqueo. [ cita requerida ]
Debilidades
VTD-XML también presenta algunas deficiencias notables:
- Como analizador XML, no admite entidades externas declaradas en la DTD.
- Como formato de archivo, aumenta el tamaño del documento entre un 30% y un 50%.
- Como API, no es compatible con DOM , SAX o StAX .
- Es difícil soportar ciertas técnicas de validación, empleadas por DTD y XML Schema (por ejemplo, atributos y elementos predeterminados), que requieren modificaciones en las instancias XML que se analizan.
Áreas de aplicación
Reemplazo de propósito general para DOM o SAX
Debido a las ventajas de memoria y rendimiento de VTD-XML, cubre una mayor parte de los casos de uso de XML que DOM o SAX. [18]
- En comparación con DOM, VTD-XML procesa documentos XML más grandes (3x ~ 5x) para la misma cantidad de memoria física con aproximadamente 3 a 10 veces el rendimiento.
- En comparación con SAX, VTD-XML proporciona acceso aleatorio y soporte XPath y supera a SAX en al menos 2 veces.
XPath sobre documentos XML enormes
La edición extendida de VTD-XML que se combina con JVM de 64 bits hace posible el procesamiento XML basado en XPath en documentos XML de gran tamaño (hasta 256 GB).
Para seguridad SOA / WS / XML
La combinación del alto rendimiento de VTD-XML y la capacidad de actualización incremental hace que sea esencial [19] [20] [21] lograr el nivel deseado de calidad de servicio para aplicaciones de seguridad SOA / WS / XML.
Para intermediario SOA / WS / XML
VTD-XML es muy adecuado para aplicaciones intermediarias SOA como enrutadores / conmutadores / puertas de enlace XML, buses de servicios empresariales y puntos de agregación de servicios. Todas esas aplicaciones realizan las operaciones básicas de "almacenamiento y reenvío" para las que la conservación del XML original es fundamental para minimizar la latencia. La capacidad de actualización incremental de VTD-XML también contribuye significativamente al rendimiento del reenvío.
La capacidad de acceso aleatorio de VTD-XML se adapta bien al enrutamiento / conmutación / filtrado XML basado en XPath común en la implementación de AJAX y SOA.
Balanceo de carga y descarga inteligente SOA / WS / XML
Cuando un documento XML viaja a través de varios componentes SOA de nivel medio, la primera parada de mensaje, después de finalizar la inspección del documento XML, puede optar por enviar el formato de archivo XML VTD + a los componentes posteriores para evitar el análisis repetitivo, mejorando así el rendimiento.
Del mismo modo, un equilibrador de carga SOA inteligente puede optar por generar VTD + XML para mensajes SOAP entrantes / salientes para descargar el análisis XML de los servidores de aplicaciones que reciben esos mensajes.
Almacén de datos de persistencia XML
Cuando se ve desde la perspectiva de la persistencia XML nativa, VTD-XML se puede utilizar como un índice XML legible por humanos, fácil de usar y de propósito general. Los documentos XML almacenados de esta manera se pueden cargar en la memoria para consultarlos, actualizarlos o editarlos sin la sobrecarga de analizar / volver a serializar.
Enlace de datos XML sin esquema
La combinación de VTD-XML de alto rendimiento, bajo uso de memoria y evaluación eficiente de XPath hace posible un nuevo enfoque de enlace de datos XML basado completamente en XPath. El mayor beneficio de este enfoque es que ya no requiere un esquema XML, evita la creación innecesaria de objetos y aprovecha la codificación flexible inherente de XML. [22]
Vale la pena señalar que la vinculación de datos discutida en el artículo mencionado anteriormente debe ser implementada por la aplicación: VTD-XML en sí solo ofrece accesos. En este sentido, VTD-XML no es una solución de enlace de datos en sí mismo (a diferencia de JiBX, JAXB, XMLBeans), aunque ofrece funcionalidad de extracción para paquetes de enlace de datos, al igual que otros analizadores XML ( DOM , SAX , StAX ).
Clases esenciales
A partir de la Versión 2.11, las versiones Java y C # de VTD-XML constan de las siguientes clases:
- VTDGen (VTD Generator) es la clase que encapsula las funciones principales de análisis, carga de índices y escritura de índices.
- VTDNav (VTD Navigator) es la clase que (1) encapsula XML, VTD e información jerárquica, (2) contiene varios métodos de navegación, (3) realiza varias comparaciones entre registros y cadenas de VTD, y (4) convierte registros VTD en primitivos tipos de datos.
- AutoPilot es una clase que contiene funciones que realizan iteraciones a nivel de nodo y XPath.
- XMLModifier es una clase que ofrece capacidad de actualización incremental, como eliminar, insertar y actualizar.
El VTD-XML extendido consta de las siguientes clases:
- VTDGenHuge (Extended VTD Generator) encapsula el análisis principal.
- XMLBuffer realiza la carga en memoria de documentos XML.
- XMLMemMappedBuffer realiza la carga mapeada en memoria de documentos XML.
- VTDNavHuge (Navegador VTD extendido) 1) encapsula XML, VTD extendido e información jerárquica, (2) contiene varios métodos de navegación, (3) realiza varias comparaciones entre registros y cadenas de VTD y (4) convierte registros VTD en tipos de datos primitivos.
- AutoPilotHuge realiza iteraciones a nivel de nodo y XPath.
Muestra de código
/ * En este programa java, demostramos cómo usar XMLModifier para actualizar incrementalmente * una orden de compra XML simple. * un espacio de nombre particular. También vamos a * utilizar el archivo parseFile de VTDGen para simplificar la programación. * /importar com.ximpleware. * ;public class Update { public static void main ( String argv [] ) lanza NavException , ModifyException , IOException { // abre un archivo y lee el contenido en una matriz de bytes VTDGen vg = new VTDGen (); if ( vg . parseFile ( "oldpo.xml" , verdadero )) { VTDNav vn = vg . getNav (); AutoPilot ap = nuevo AutoPilot ( vn ); XMLModifier xm = nuevo XMLModifier ( vn ); ap . selectXPath ( "/ purchaseOrder / items / item [@ partNum = '872-AA']" ); int i = - 1 ; mientras que (( i = ap . evalXPath ()) ! = - 1 ) { xm . eliminar (); xm . insertBeforeElement ( " \ n" ); } ap . selectXPath ( "/ purchaseOrder / items / item / USPrice [. <40] / text ()" ); mientras que (( i = ap . evalXPath ()) ! = - 1 ) { xm . updateToken ( i , "200" ); } xm . salida ( "newpo.xml" ); } } }
Referencias
- ^ Zhang, Jimmy (19 de mayo de 2004). "Análisis no extractivo para XML" . XML.com . Consultado el 24 de julio de 2020 .
- ^ Procesamiento XML para el futuro
- ^ Zhang, Jimmy (9 de enero de 2008). "Manipular contenido XML de la manera Ximple" . DevX . Consultado el 24 de julio de 2020 .
- ^ Zhang, Jimmy (24 de junio de 2008). "VTD-XML: procesamiento XML para el futuro (parte II)" . Proyecto de código . Consultado el 24 de julio de 2020 .
- ^ Zhang, Jimmy (27 de marzo de 2006). "Simplifique el procesamiento de XML con VTD-XML" . JavaWorld . Consultado el 24 de julio de 2020 .
- ^ Zhang, Jimmy (21 de octubre de 2004). "Procesamiento XML mejor y más rápido con VTD-XML" . DevX . Consultado el 24 de julio de 2020 .
- ^ Zhang, Jimmy (17 de abril de 2008). "VTD-XML: procesamiento XML para el futuro (Parte I)" . Proyecto de código . Consultado el 24 de julio de 2020 .
- ^ Zhang, Jimmy (2 de noviembre de 2007). "Indexar documentos XML con VTD-XML" . Publicaciones SYS-CON. Archivado desde el original el 5 de noviembre de 2007.
- ^ Zhang, Jimmy (24 de julio de 2006). "Cortar, pegar, dividir y ensamblar documentos XML con VTD-XML" . JavaWorld . Consultado el 24 de julio de 2020 .
- ^ XML en un chip?
- ^ Zhang, Jimmy (9 de marzo de 2005). "XML en un chip" . XML.com . Consultado el 24 de julio de 2020 .
- ^ Documento de posición del taller XML binario del W3C de XimpleWare
- ^ Zhang, Jimmy (19 de marzo de 2007). "Mejore la eficiencia de XPath con VTD-XML" . DevX . Consultado el 24 de julio de 2020 .
- ^ Volkman, Victor (3 de diciembre de 2007). "VTD-XML: una nueva visión de XML" . Developer.com . Consultado el 24 de julio de 2020 .
- ^ Introducción al descriptor de token virtual en SourceForge
- ^ Zhang, Jimmy (31 de julio de 2006). "La desgracia de rendimiento de XML binario" . Publicaciones SYS-CON. Archivado desde el original el 8 de agosto de 2006.
- ^ Informe de rendimiento de navegación / análisis VTD-XML
- ^ Zhang, Jimmy (8 de febrero de 2006). "Un paso en la dirección correcta: VTD-XML mejora el procesamiento de XML" . DevX . Consultado el 24 de julio de 2020 .
- ^ Zhang, Jimmy (9 de enero de 2007). "Acelere las aplicaciones WSS con VTD-XML" . JavaWorld . Consultado el 24 de julio de 2020 .
- ^ Presentación del taller del W3C sobre seguridad XML
- ^ Documento de posición para el taller del W3C sobre los próximos pasos para la firma XML y el cifrado XML
- ^ Zhang, Jimmy (10 de septiembre de 2007). "Enlace de datos Java-XML sin esquema con VTD-XML" . ONJava . Archivado desde el original el 27 de septiembre de 2017.