Download Tesis(draft)

Document related concepts
no text concepts found
Transcript
TESIS DOCTORAL
Contribución al análisis XML para la mejora
en las prestaciones de memoria. Aplicación
a dispositivos móviles.
AUTOR
Antonio Jesús Sierra Collado
Ingeniero de Telecomunicación
DIRECTOR
Luis de la Cruz Llopis
Dr. Ingeniero de Telecomunicación
Marzo 2006
Departament d'Enginyeria Telemàtica
UNIVERSISTAT POLITÈCNICA DE CATALUNYA
TESIS DOCTORAL
Contribución al análisis XML para la mejora
en las prestaciones de memoria. Aplicación
a dispositivos móviles.
TRIBUNAL CALIFICADOR
Presidente:

Vocales:



Secretario:

Vocales Suplentes:

CALIFICACIÓN
Dedicado a las Marías (mi mujer y mi hija)
Capítulo 1. Introducción.
7
Prefacio y agradecimientos
Las telecomunicaciones constituyen un elemento clave de la Sociedad de la
Información, facilitando el acceso e intercambio de datos entre personas, máquinas,
sistemas e instituciones. No es posible entender el actual progreso socioeconómico, sin
tener presente el despliegue de redes de comunicaciones cada vez más sofisticadas
(fijas, de cable, satélite, móviles, etc.) que, además, dan lugar a un fenómeno de tanta
trascendencia social como es la comunicación ubicua que caracteriza la sociedad
moderna, con Internet como soporte.
Ahora entramos en el comienzo de una nueva era, la Computación Ubicua, en la
que una persona puede actuar sobre una multitud de dispositivos programables. Dada su
abundancia, es necesario que puedan ser manejados con el mínimo esfuerzo, siendo en
la mayor parte de los casos la interactividad entre el sujeto y la máquina absolutamente
transparente.
Para alcanzar este reto, la Web, como soporte omnipresente, necesita que los
formatos y protocolos tengan especificaciones compatibles unas con otras, y permitir
que cualquier hardware y software utilizado pueda acceder para trabajar de forma
cooperativa. El W3C (Word Wide Web Consortium) diseña y promueve la
interoperabilidad de formatos abiertos (no propietarios) y protocolos, para evitar la
fragmentación que el mercado sufrió en decadas precedentes. Desde 1994, el W3C ha
generado más de 90 estándares Web, llamados "recomendaciones W3C". Estos
estándares, representan un despliegue de especificaciones estables en beneficio de todo
el sector industrial.
La recomendación del W3C, Extensible Markup Language (XML), es un formato
de convergencia para el intecambio de datos, tanto en Internet, como en otras
aplicaciones, que permiten estructurar documentos o flujos de caracteres, identificando
estructuras y otras unidades en los datos, para manejar datos portables, con
independencia del propósito y naturaleza de la información. A partir de la simplicidad
del marcado se pueden especificar protocolos, formatos, lenguajes, ... El lenguaje de
marcas XML es un formato de texto simple y muy flexible derivado de Standard
Generalized Markup Language (SGML), que se diseñó para enfrentarse al desafío de la
publicación electrónica a gran escala. XML juega un papel vital en el intercambio de
una gran variedad de datos tanto en la Web como fuera de ella. XML es una sintaxis
universal para describir y estructurar datos con independencia de la aplicación lógica.
La optimización de las herramientas para el manejo de contenidos basados en los
lenguajes de marcas, son un reto constante a fín de poder llevar los contenidos Web a
cualquier sitio, en cualquier momento y sobre cualquier plataforma de ejecución, en las
mejores condiciones y con la mayor eficiencia. La capacidad de importar y exportar
datos en formato neutro para el intercambio de datos entre aplicaciones, neutro para la
comercialización, y estándar para la industria, hace que los Lenguajes de Marcas puedan
dar soporte de una forma flexibilidad y eficiente a las tecnologías electrónicas (etechnologies).
Quiero agradecer a Luis J. de la Cruz, por la revisión de este documento, así como
los anteriores directores Joan García y Francisco Rico.
Mi agradecimiento y reconocimiento a Sam Wilmott, este trabajo en gran medida
está estructurado así por él, y a los organizadores de "Extreme Markup Language" por
su apoyo.
Mi agradecimiento a Sergio Cruces, por sus consejos sobre exposiciones.
Mi agradecimiento a mi mujer María Carrión por su apoyo.
Índice
Índice de figuras
VII
Índice de tablas
XI
Resumen
XIII
Abstract
XV
CAPÍTULO 1. Introducción
1
1
Preliminares.
1
2
Motivación y entorno
3
3
Objetivos.
6
4
Contenido y organización de la memoria.
7
CAPÍTULO 2. Análisis de la información XML
9
1
Introducción.
2
Codificación de caracteres. Formatos de Transformación
3
4
9
11
2.1 Generalidades
11
2.2 ISO/IEC 10646
12
2.3 Unicode
13
2.4 UTF-32
13
2.5 UTF-8
13
2.6 UTF-16
14
Java 2 Platform, Micro Edition (Java ME)
15
3.1 Introducción
15
3.2 KVM
16
3.3 APIs
16
3.4 APIs Opcionales
17
3.5 JSR-185
18
Análisis de XML
19
4.1 Introducción
19
4.2 Modelos de análisis
20
Contribución al análisis XML para la mejora en las prestaciones de memoria
II
4.3 Modelo de Objeto de un Documento: DOM
4.3.1 Introducción
22
4.3.2 Diagrama UML
22
4.3.3 Ejemplo con DOM
24
4.3.4 Modelo Productor/Consumidor en DOM
26
4.4 Análisis con Push
5
6
22
27
4.4.1 Introducción
27
4.4.2 Diagrama UML para SAX
28
4.4.3 Ejemplo con Push
30
4.4.4 Modelo Productor/Consumidor en Push
32
4.5 Análisis con Pull
32
4.5.1 Introducción
32
4.5.2 Diagrama UML para Pull
33
4.5.3 Ejemplos con Pull
35
4.5.4 Modelo Productor y Consumidor en Pull
37
Selección del modelo de análisis
38
5.1 Introducción
38
5.2 Pros
38
5.2 Contras
39
5.3 Mejor uso
40
Codificación de texto. Implementaciones.
40
6.1 Introducción
40
6.2 DocBook
42
6.3 UBL (Universal Business Language)
42
6.4 Analizadores. Trabajos relacionados.
43
6.5 Validación de documentos XML.
51
6.6 Taxonomía de los analizadores en la Java ME.
52
6.6.1 Introducción
52
6.6.2 NanoXML
52
6.6.3 kXML2
53
6.6.4 MinML
54
6.6.5 XMLtp
54
Índice
7
III
6.6.6 TinyXML
55
6.6.7 Xparse-J
55
6.6.8 JSR-280
55
Qué hace diferentes a los analizadores.
56
7.1 Consideraciones generales
56
7.2 Forma en la que los datos son devueltos
56
7.3 La información que es devuelta al cliente
58
7.4 Relación entre el analizador y el cliente
59
8 Conclusiones
CAPÍTULO 3. Modelo Propuesto
59
63
1
Introducción
63
2
El nuevo modelo
65
2.1 Pull-everything
65
2.2 Análisis in-situ
68
2.3 Funcionamiento del nuevo modelo
71
2.4 Soporte de las nuevas operaciones
73
2.5 El modelo productor y consumidor
74
2.6 Ejemplo de utilización
75
3
Aplicación del Modelo propuesto a Java ME.
76
3.1 Introducción
76
3.2 Subconjunto mínimo para la implementación
78
3.3 Los datos XML
78
3.3.1 Detección del Esquema de codificación
79
3.3.2 Tamaño de la Estructura
79
3.3.3 ¿Qué estructura?
79
3.4 Documentos XML “bien formados” (well-formed)
80
3.5 Estructura para la implementación de “bien formado” en FCM
81
3.6 Otra posible representación para dar soporte en FCM
81
3.7 Cómo estrurar la información con el uso de referencias
82
3.8 La Interfaz XMLFCMConstants
83
3.9 Otras características de la implementación
84
IV Contribución al análisis XML para la mejora en las prestaciones de memoria
3.10 Dependencia del estado.
4
Conclusiones.
CAPÍTULO 4. Análisis Comparativo del Rendimiento del Modelo
86
90
93
1
Introducción
93
2
Entorno para realizar medidas
94
3
Funcionamiento de la implementación de FCM
94
4
3.1 Introducción
94
3.2 Inicialización de objetos
95
3.3
Lectura de los datos
95
3.4
Fase de análisis
95
Comparación del funcioncionamiento con otros analizadores
96
4.1
Xparse-J 1.0
96
4.2
TAMparser
96
4.3
kXML
97
4.4
Medidas con ficheros de tamaño 1728 bytes
97
4.5
Funcionamiento de los distintos modelos
98
4.5
Medidas con ficheros de tamaño 24458 bytes
99
4.6
Codificación soportada por los distintos analizadores
102
5
Características de Funcionamiento de los Modelos
103
6
FCM en la J2SE
103
7
Otras medidas sobre la J2SE
104
7.1
Programas para la generación de documentos XML
105
7.2
Resultados
107
8
7.2.1 Profundidad del archivo
108
7.2.2 Número de atributos
110
Conclusiones
112
CAPÍTULO 5. Conclusiones y Líneas Futuras
113
1
Conclusiones
113
2
Líneas de Avance
116
Índice
Apéndice A. Autodetección de la Codificación de Caracteres
V
119
1
Detección de la codificación
119
2
Prioridades para la información externa de la codificación
121
Apéndice B. UTF-I16S
123
1
Introducción
123
2
Formato de Transformación de UTF-I16S
123
3
Codificación de UCS-4 en UTF-I16S
124
4
Decodificación de UTF-I16S
124
5
Implementación de UTF-I16S en Java
124
Apéndice C. DTD
127
1
Introducción
127
2
Document Type Definitions: Fundamentos
127
3
Lenguajes de Modelado Alternativos
128
Apéndice D. XML Schema
131
1
Introducción
131
2
Fundamentos
131
3
Características de XML Schema
131
4
Definición
132
5
Procesadores de Schema
132
6
Tipos de Datos
132
7
Elemento raíz
133
8
XML Schema frente a DTD
133
Apéndice E. Espacio de Nombres en XML
135
1
Introducción
135
2
Sintaxis
136
VI Contribución al análisis XML para la mejora en las prestaciones de memoria
3
Declaración de espacios de nombres
137
4
Qué son y qué no son los espacios de nombres
138
Apéndice F. Servicios Web XML
141
1
Introducción
141
2
SOAP
141
3
WSDL
142
4
UDDI
142
Apéndice G. Otras Medidas
145
1
Introducción
145
2
Número de objetos
145
Referencias
147
1. Introducción
147
2. Libros
147
3. Revistas, Congresos
153
4. Referencias del autor
160
5. Recomendaciones W3C
163
6. Especificaciones Java
167
6.1 XML
167
6.2 J2ME
169
6.3 Otras Especificaciones Java
171
7. The Internet Engineering Task Force (RFC y draft)
171
8. Unicode
173
9. ISO: International Organization for Standardization
174
10. OASIS
177
11. Software
178
12. Referencias Web
180
13. Otras recomendaciones XML
188
14. Otras recomendaciones y especificaciones
189
Acrónimos
191
Índice de figuras
Plataformas Java.
3
Escenario.
6
Componentes de un dispositivo móvil.
16
Ejemplo de fichero xml.
21
Representación gráfica de un documento XML.
21
Jerarquía de Interfaces del Nivel 2 de DOM.
23
Interfaz Node.
24
Representación gráfica de un árbol DOM.
25
Funcionamiento de la API DOM.
25
Modelo Productor/consumidor en DOM.
27
SAX entrega un documento a una aplicación como una secuencia de eventos.
28
SAX entrega un documento a una aplicación como una secuencia de eventos.
28
Interfaces de SAX 2.0.
29
Interfaz ContentHandler.
30
Funcionamiento de la API SAX.
30
Configuración de la API SAX.
31
Modelo Productor/consumidor en Push.
32
Funcionamiento del modelo Pull.
33
Pull (API para StAX).
34
Interfaz XMLStreamReader.
35
Funcionamiento del modelo Pull al estilo iterador.
36
Funcionamiento del modelo Pull siguiendo el modelo cursor.
36
Modelo Productor/consumidor en Pull.
38
Transferencia del control a través de la invocación de métodos.
46
VII Contribución al análisis XML para la mejora en las prestaciones de memoria
I
Transferencia de control en corutinas.
47
Ejecución de un analizador SAX como una corutina.
48
Ejecución de un analizador SAX como una corutinas.
49
Taxonomía de las APIs XML.
50
Temporización de las APIs XML en Java según Slominski y Haustein.
51
Funcionamiento del modelo Pull-everything de FCM.
72
Funcionamiento del analizador FCM.
73
Funcionamiento del analizador FCM.
74
Productor/Consumidor en FCM.
75
Ejemplo de ejecución en FCM.
76
Estructura que puede dar soporte a un documento bien formado.
80
Estructura alternativa para dar soporte a un documento bien formado.
81
Estructura elegida para dar soporte a un documento bien formado en FCM.
82
Referencias de un elemento.
82
Uso de referencias para representar un elemento.
83
Elementos de la interfaz XMLFCMConstants.
84
Clases de la implementación.
85
Diagrama UML de FCM.
86
Métodos para todos los estados.
87
Métodos para todos los estados START_ELEMENT, END_ELEMENT,
START_DOCUMENT y END_DOCUMENT.
88
Métodos para todos los estados ATTRIBUTE, NAMESPACE,
PROCESSING_INSTRUCTION, ENTITY_REFERENCE y DTD.
89
Métodos para todos los estados SPACE, COMMENT, CDATA y CHARACTERS.
89
Otros métodos parcialmente especificados.
90
Índice de figuras
IX
Funcionamiento del analizador FCM en el WTK..
94
Medidas de los analizadores con un fichero de 1728 bytes.
98
Xparse-J 1.0 con ficheros de 1728 bytes.
98
TAMparser con ficheros de 1728 bytes.
99
kXML con ficheros de 1728 bytes.
99
FCM con ficheros de 1728 bytes.
99
Medidas de los analizadores con un fichero de 24458 bytes.
100
FCM con ficheros de 24458 bytes.
100
Funcionamiento de kXML con ficheros de 24458 bytes.
101
Funcionamiento de TAMparser con ficheros de 24458 bytes.
101
Funcionamiento de Xparse-J 1.0 con ficheros de 24458 bytes.
101
Captura del fichero descargado.
102
Medidas sobre la J2SE.
104
Programa para generar archivos de medidas para la profundidad.
106
Programa para generar archivos de medidas para los atributos.
107
Nombre y tamaño de los ficheros.
108
Medidas de prueba0.xml.
109
Medidas de prueba1.xml.
109
Medidas de prueba2.xml.
109
Medidas de prueba3.xml.
109
Nombre y tamaño de los ficheros.
110
Medidas de atributos0.xml.
111
Medidas de atributos1.xml.
111
Medidas de atributos2.xml.
111
Medidas de atributos3.xml.
111
X
Contribución al análisis XML para la mejora en las prestaciones de memoria
Interfaz UTFI16S.
125
Método intToUtfi16s.
125
Ejemplo de DTD.
128
XML asociado a la DTD.
128
Fragmento de DTD.
132
Ejemplo de XML Schema.
132
Elemento raíz en XSD.
133
Sintaxis de los nombres cualificados.
137
Número de objetos utilizados en ficheros de 1728 bytes.
145
Número de objetos utilizados en ficheros de 24458 bytes.
146
Índice de tablas
Estructura de un carácter UCS-4.
13
Formato de los octetos en una secuencia UTF-8.
14
Requisitos de procesador y memoria para la nueva generación de móviles.
16
Configuraciones en Java ME.
17
Perfiles en Java ME.
17
Paquetes opcionales de Java ME.
18
Pros de los modelos de análisis.
39
Contras de los modelos de anaálisis.
39
Mejor caso para usar el modelos.
40
Analizadores XML de pequeño tamaño.
52
Licencias de los analizadores XML.
52
Resultados numéricos para el fichero de 1728 bytes.
97
Resultados para el fichero de 24458 bytes.
99
Formatos de codificación soportados por los analizadores.
102
Comparación de las características de los modelos.
103
Medidas sobre la J2SE.
104
Medidas sobre la J2SE para prueba0.xml.
108
Medidas sobre la J2SE para prueba1.xml.
108
Medidas sobre la J2SE para prueba2.xml.
108
Medidas sobre la J2SE para prueba3.xml.
108
Medidas sobre la J2SE para atributos0.xml.
110
Medidas sobre la J2SE para atributos1.xml.
110
Medidas sobre la J2SE para atributos2.xml.
110
Medidas sobre la J2SE para atributos3.xml.
110
Byte Order Mark para los distintos formatos de codificación.
120
Secuencia de los primeros bytes para archivos XML sin el uso de BOM.
120
Mapeo de UCS-4 en unidades de 16 bits según UTF-I16S.
123
Códigos para el cambio de página en UTF-I16S.
124
Resumen
El World Wide Web Consortium, publicó la recomendación eXtensible Markup
Language (XML) que permite estructurar mediante marcas, los documentos o flujos de
caracteres, a fin de identificar estructuras u otras unidades en los datos. Mediante el uso
de las marcas de XML se permite tener portabilidad en los datos, con independencia del
propósito y naturaleza de la información.
La implementación de herramientas basadas en los lenguajes de marcas deben
adaptarse a los recursos disponibles para poder ejecutarlos de forma apropiada, y éstos
son limitados en plataformas tales como la plataforma Java para dispositivos móviles,
Java ME. La implementación de las herramientas software para la extracción de
contenidos XML pueden estar condicionadas por las interfaces de programación de la
aplicación (API). Estas interfaces pueden estar basados en eventos o en árboles y
condicionan el funcionamiento en memoria.
Los modelos de análisis XML basados en árboles se consideran demasiado pesados
e intensivos en el uso de memoria. Los modelos de análisis XML basados en eventos se
consideran eficientes en el uso de la memoria pero sólo analizan la información en una
única dirección, hacia delante.
Esta Tesis Doctoral aborda el problema de llevar la tecnología XML a plataformas
con recursos limitados. Con este objetivo, se propone una nueva forma de analizar la
información XML, que minimiza los recursos de memoria utilizados en el proceso de
análisis del documento, permitiendo además el acceso a toda su información.
El nuevo modelo de análisis de documentos XML no sólo permite el movimiento
hacia adelante, en el proceso de generación de los eventos producidos en el análisis de
los datos XML como los modelos Push y Pull, sino que permite gestionar información
previamente analizada. La extensión del modelo Pull a todo el documento XML,
denominada Pull-everything, proporcionando un manejo más eficiente de la información
a analizar.
Para llevar a cabo esta propuesta, se ha implementado una interfaz del nuevo
modelo en la plataforma Java ME. La implementación necesita:

Una representación de la información del documento XML que permita
un acceso eficiente.
 Las operaciones que proporcionen las nuevas opciones que ofrece el
nuevo modelo.
La primera tarea se aborda proponiendo una representación serializada de toda la
información XML con soporte para esquemas de codificación basados en 8, 16 y 32 bits
sobre la plataforma Java para dispositivos móviles (Java ME). Los datos se analizan en
el lugar donde se encuentra, es decir, se realiza un análisis “in-situ”.
XIV Contribución al análisis XML para la mejora en las prestaciones de memoria
La segunda operación se realiza extendiendo la interfaz basada en eventos Pull, que
usa métodos específicos para realizar las operaciones de movimiento del cursor hacia
atrás.
Free Cursor Mobility (FCM) es una implementación del nuevo modelo para la
plataforma Java sobre dispositivos móviles (Java ME), ocupándose de las nuevas
operaciones que permite extender la interfaz Pull a Pull-everything, tales como
setCursorToFather(), y setCursorToPreviousSibling().
FCM toma como referencia la implementación StAX (JSR-173), añadiendo las
operaciones que ofrecen una mayor flexibilidad en el análisis de la información del
documento XML.
Mantener una representación serializada de todo el documento para realizar análisis
“in-situ” permite un uso de la memoria menos disperso, facilitando la implementación
de las nuevas operaciones. Este es por ejemplo el caso de la operación que representa el
método skipWithourParseChild(), que permite saltar subsecciones del
documento en la dirección habitual de los modelos basados en eventos sin la creación de
objetos.
Las interfaces basadas en eventos presentan un buen comportamiento de la memoria
utilizada para el análisis de la información XML, aunque no permiten acceder a la
información previamente analizada. Pull-everything extiende los eventos a todo el
documento, mediante el movimiento hacia atrás del lugar de donde se extrae la
información (cursor) en la representación serializada, permitiendo así realizar un
análisis selectivo.
Abstract
Extensible Markup Language (XML), as defined by the World Wide Web Consortium
in 1998, is a method of marking up a document or character stream to identify structural
or other units within the data. XML, and provides a way to mark up contents to give
portability independently nature and purpose of information.
For implementing tools based on markup languages we must conform to resources
available to can be executed properly, and these are limited in platform such as mobiles
devices, Java ME. Software tools follow the criteria established by applications
programming interfaces (API), which conforms different XML parsing models, to give
XML contents. Two kinds of interfaces are available for parsing XML, tree-based
interfaces and event-based interfaces.
A tree-based XML interfaces can be to heavy and intensive in memory. Event-based
interfaces are considered efficient in memory but only manage information forward.
This PhD approaches the problem to handle XML technology to resourcesconstraint platforms. With this idea, we propose a new model for XML parsing, to
optimise memory used, allowing access to all XML information.
The new XML parsing model allows not only forward parsing to generate events,
such a Push o Pull, unless allows information previously read. Extending the pull
interface to entity side events and giving the client full control over external entity
resolution using a pull model puts fewer constraints on the client and widens the range
of application of an XML parser.
To carry out this proposal, we are implemented an interface of new model over the
Java Platform, Micro Edition (Java ME). A implementation of this new model require:
o A representation of all XML information to realize an efficient access to
XML document.
o The new operations that provide new options that can offer the new model.
First point is approached maintain a serialized representation of all entire XML
document to give support for encoding based on 8, 16 and 32 bits over the Java
Platform, Micro Edition (Java ME). In-situ XML parsers, as much as possible, indicate
where data was found in the parsed XML document.
Second point is approached extending the pull interface. We require new methods
to move back cursor.
Free Cursor Mobility (FCM) is a implementation of the new model for the Java
Platform, Micro Edition (Java ME), that extend Pull interface with
setCursorToFather(), and setCursorToPreviousSibling(), to conform Pull-everything.
The implementation has been realized appends to StAX implementation (JSR-173) the
new model's capabilities.
XVI
Contribución al análisis XML para la mejora en las prestaciones de memoria
"In-situ" XML parsing leaves the XML data in the original location or device from
where it was provided to the XML parser, rather than copying it into the XML parser.
An in-situ parser passes data to its client by referring to the original data rather than by
providing the client with the parser's copy.
An event-based interface has a good performance in memory, but not allows access
information previously read. Pull-everything extends events to all XML information to
allow access information previously read.
CAPÍTULO 1.
Introducción
Este capítulo realiza una introducción a las tecnologías utilizadas a fín de poder mostrar
de forma guiada y justificada la motivación y los objetivos de la Tesis Doctoral. En
primer lugar se realiza una introducción y una justificación a los lenguajes de marcas. A
continuación se introduce Java como lenguaje para implementar herramientas de
tratamiento y análisis de la información. Se presentan los modelos de análisis existentes
y el contexto en el que se realizará la implementación y las pruebas presentadas en este
trabajo. Finalmente se da una panorámica de este documento.
1 Preliminares.
Los lenguajes de marcas (Markup Languages) permiten estructurar los documentos o
flujos de caracteres, identificando estructuras y otras unidades en los datos, para manejar
datos portables, con independencia del propósito y naturaleza de la información.
Tradicionalmente, los lenguajes de marcas se han utilizado para dar soporte a la
publicación de texto. En 1986, el Internacional Standards Organisation (ISO) publica el
Standard Generalizad Markup Language (SGML), estandarizando un formato neutral e
independiente de la plataforma y fabricantes. SGML es un lenguaje de marcas que
recoge la sintaxis, una lista de palabras clave y parámetros para especificar el formato
del documento mediante la definición de un tipo de documento (Document Type
Definition) o DTD. Las DTDs determinan los elementos válidos en un documento. Las
distintas organizaciones e industrias especifican plantillas DTD para definir manuales
técnicos, referencias de libros, artículos para revistas, patentes, ... Sin embargo, SGML
es un estándar grande y complejo, con muchas características opcionales, algunas de
ellas raramente utilizadas.
Para la publicación e intercambio de información en Internet se necesitan
soluciones de publicación y edición más sencillas. En 1991 se añadió la posibilidad de
2
Contribución al análisis XML para la mejora en las prestaciones de memoria
enlazar documentos en Internet. Cada documento Web se codifica en HyperText
Markup Language (HTML). Este lenguaje de marcas soporta la funcionalidad de enlace
de hipertexto, además de otros formatos de cabecera, párrafos, listas y tablas.
Sin embargo HTML carece de la capacidad de tener marcas autodescritas y
personalizadas. La evolución fue una combinación de la simplicidad de HTML y la
potencia de SGML, apareciendo el eXtensible Markup Language (XML) el 10 de
Febrero de 1998. XML superficialmente es parecido a HTML, pero incorpora
características del núcleo de SGML. XML es un formato que permite el intercambio de
datos entre sistemas y bases de datos, y se ha adoptado como tecnología de publicación
en la Web.
En la actualidad, la aparición de nuevos servicios sobre Internet han hecho aparecer
nuevas tecnologías basadas en los lenguajes de marcas. Las e-technologies (como ecommerce, e-business, e-government, e-science, e-health, e-learning, …) habitualmente
utilizan como intercambio documentos basados en los lenguajes de marcas. Internet es
hoy en día el mejor soporte para el transporte de la información. Los puntos clave para
la concepción de estos modelos de intercambio son la ejecución de aplicaciones en
cualquier lugar y en cualquier momento sobre cualquier plataforma.
Por otra parte, las telecomunicaciones inalámbricas han tenido un fuerte
crecimiento durante los últimos años. Esto ha provocado que se hayan convertido en una
de las áreas de mayor desarrollo en todo el mundo, con un gran número de tecnologías y
sistemas asociados.
La heterogeneidad es un hecho en todos los ámbitos, en el mundo de los
dispositivos de consumo existen diferentes CPUs y arquitecturas de sistemas.
Inicialmente en el mundo de los ordenadores las diferentes arquitecturas hardware
(WinTel y Macintosh) seccionaron el mercado basándose en detalles de bajo nivel. Pero
hay muchas más barreras que dificultan la interoperabilidad, y sin embargo los sistemas
evolucionan hacia la ejecución en un entorno donde los recursos están distribuidos. La
ejecución en entornos distribuidos es principalmente necesaria en dispositivos con
capacidad de procesamiento y memoria limitada, como son las plataformas embebidas,
y los dispositivos móviles.
La aparición de gran variedad de aplicaciones para móviles de carácter tanto
competitivas como complementarias han llevado a la industria de móviles a centrarse en
Java como plataforma principal de soporte para ellas. En contraposición a las
arquitecturas basadas en el hardware, Java propone una Máquina Virtual software, JVM
(Java Virtual Machine) [JVM], sobre la que se pueden ejecutar sus instrucciones de
código binario (o bytecode). Es un gran paso hacia la portabilidad, utilizándose un
código intermedio y una plataforma software donde poder ejecutarlo, y estableciéndose
de este modo con firmeza la premisa WORA ("Write Once, Run Anywhere").
Capítulo 1. Introducción.
3
La KVM (K Virtual Machine) [KVM 05] es la Máquina Virtual de Java para los
dispositivos de consumo con recursos limitados, tales como teléfonos celulares. Esta
Máquina Virtual representa una de las plataformas Java conocida como Java 2, Micro
Edition, o Java ME (anteriormente J2ME) [J2ME], y fue implementada entre otros por
Antero Taivalsaari [Taivalsaari 04], en el rediseño de la J2EE/J2SE. La arquitectura de
la Java ME contiene perfiles y configuraciones, tales como CDC (Connected Device
Configuration) y CLDC (Connected, Limited Device Configuration). En la Figura 1.1 se
muestran las tres plataformas de Java: J2EE, J2SE y J2ME (renombrada como Java
ME). La plataforma Java 2, Enterprise Edition (J2EE) es fruto de la colaboración de Sun
con los líderes del sector del software empresarial (IBM, Apple, Bea Systems, Oracle,
Inprise, Hewlett-Packard, Novell, etc.) para definir una plataforma robusta y flexible
orientada a cubrir las necesidades empresariales en e-business. Java 2 Platform,
Standard Edition (J2SE), es un subconjunto de J2EE. La plataforma Java 2, Micro
Edition, es una colección de APIs en Java orientadas a productos de consumo como
PDAs, teléfonos móviles y otros electrodomésticos, que contiene las configuraciones
CLDC y CDC.
Figura 1.1: Plataformas Java.
La KVM es independiente de la tecnología de red. Es válida para dispositivos de la
segunda, de la 2.5, y de la tercera generación.
El presente trabajo contribuirá a la mejora en el funcionamiento y la ejecución de
aplicaciones basadas en XML, utilizando como entorno de referencia la plataforma
J2ME. Para ello, se propondrá un modelo de análisis de la información XML que será
implementado, validado y evaluado.
2 Motivación y entorno
El intercambio de información entre distintas plataformas, así como la posibilidad de
integración y composición hacen que la adopción de estándares, como XML, sean
claves para asegurar la interoperabilidad entre diferentes sistemas. El uso de
aplicaciones basadas en XML supone una ventaja, al determinar mediante marcas, la
información y propósito de la misma, pudiéndola mantener de forma eficiente en
documentos para su almacenamiento o intercambio. Con este propósito son
4
Contribución al análisis XML para la mejora en las prestaciones de memoria
indispensables herramientas software para la extracción de la información contenida en
ellos. Los analizadores procesan la información extraída de un documento XML y la
ofrecen a la aplicación para su procesamiento y gestión.
No todas las herramientas de análisis deben de estar escritas en el lenguaje de
programación Java. Sin embargo, el tratamiento y orientación de la información
proporcionada por los lenguajes de marcas, hacen que el uso de la portabilidad del
lenguaje de programación Java, sea una buena elección para la implementación de
analizadores que extraigan la información de los documentos XML.
A diferencia de lo que sucede en la J2SE, la plataforma Java para dispositivos
inalámbricos (Java ME) no es una única especificación o implementación software, sino
que consiste en una colección de tecnologías y especificaciones que están diseñadas por
partes. Esta plataforma toma como referencia a JWTI (JavaTM Technology for the
Wireless Industry) [JSR-185] con el fin de establecer unos criterios para mejorar la
compatibilidad e interoperabilidad, minimizando la fragmentación que se pueda
producir debido al alto volumen de dispositivos. En esta especificación se establecen
recomendaciones del tamaño de las aplicaciones, que son muy severas en cuanto a la
memoria que pueden utilizar. Estas restricciones han provocado que se utilicen
herramientas, como los ofuscadores [Proguard] [Retroguard], que se usan en esta
plataforma con el objetivo de disminuir el tamaño del fichero de la aplicación.
La implementación de aplicaciones basadas en XML sobre la plataforma J2ME
tiene características específicas para esta plataforma. Un denominador común que
siempre está presente es la cantidad de memoria necesaria, tanto por el tamaño de la
aplicación en sí, como por la memoria que utiliza durante la ejecución del programa. La
memoria es un criterio de diseño de cualquier aplicación sobre plataformas con recursos
limitados, y por tanto los analizadores XML que se utilizan en esta plataforma debe
tenerlos en cuenta. Aplicaciones utilizadas en otras plataformas no tienen un tamaño
apropiado para esta plataforma.
Las interfaces de programación de la aplicación (API) proporcionan métodos
estándar para que un analizador proporcione la información contenida en un documento
XML, y puede condicionar un funcionamiento diferente, no solo en el tamaño de la
aplicación sino en la memoria utilizada durante su ejecución, por lo que han debido ser
adaptadas a plataformas con recursos limitados. Estas interfaces pueden ser de dos tipos,
las basadas en árboles o las basadas en eventos. Los analizadores XML basados en
árboles leen un documento XML entero y construyen una representación interna en
memoria, donde cada nodo del árbol representa un trozo del documento original. De
esta forma se permite a una aplicación navegar y manipular los datos analizados de una
forma fácil y rápida.
Capítulo 1. Introducción.
5
El Modelo de Objeto del Documento (DOM) propuesto por el W3C, es una interfaz
basada en árboles para el análisis XML. Un analizador DOM puede ser intensivo en el
uso de recursos ya que mantiene el documento entero en memoria. Este es un grave
inconveniente en algunas plataformas, y especialmente en la plataforma Java ME en la
cual se centra este trabajo.
Por otra parte, los analizadores XML basados en eventos entregan los eventos
generados por el analizador en el proceso de lectura del documento XML directamente a
la aplicación. Los analizadores basados en eventos leen la información apuntada por el
cursor en la información XML para generar los distintos eventos, y dependiendo del tipo
de información leída generarán eventos. Un analizador basado en eventos es más rápido
en ejecución y consumen menos recursos que un analizador basado en árboles.
Los modelos de análisis basados en eventos son Push y Pull. Un analizador Push
llama a los métodos del cliente con los eventos XML. Un analizador Pull devuelve los
eventos XML al cliente secuencialmente bajo petición. Simple API for XML (SAX) es
la única interfaz XML para el modelo Push; Streaming API for XML (StAX) es la más
conocida interfaz del modelo Pull.
Los analizadores basados en eventos leen la información apuntada por el cursor en
los documentos XML (o en alguna representación del documento). En función de dicha
información generan los distintos eventos, pero el analizador no gestiona la información
previamente leída. Presentan un buen comportamiento en cuanto a la memoria utilizada
para el análisis de la información XML, pero al contrario que los analizadores basados
en árboles no permiten acceder a la información previamente analizada.
Sería deseable por tanto, utilizar un modelo de análisis para los documentos XML
que, basándose en el buen comportamiento en memoria que presenta los analizadores
basados en eventos, permitiese además el acceso a la información previamente
analizada, y el análisis de la información de forma selectiva bajo demanda de la
aplicación para optimizar los recursos del entorno en el que se ejecuta.
Resumiendo, para que se puedan utilizar en plataformas con recursos limitados
aplicaciones basadas en XML se necesitan analizadores ligeros en cuanto al uso de los
recursos en el proceso de análisis, pudiendo acceder a toda la información que
proporciona el documento. Los analizadores utilizados en plataformas como J2SE/J2EE
no son válidos para Java ME, su tamaño es inapropiado, y la readaptación del mismo
código no es eficiente, ya que no es un código que se haya pensado inicialmente para
esta plataforma y suele tener en cuenta otros aspectos diferentes a los que se necesitan
en el entorno en el que se está considerando.
En Java ME, los analizadores soportan normalmente un subconjunto estricto de
funcionalidades disponibles para otras plataformas. El tamaño de la aplicación debe ser
menor. Java ME para los sevicios Web XML, JSR-172, [JSR-172] no proporciona
6
Contribución al análisis XML para la mejora en las prestaciones de memoria
soporte para DOM. DOM se considera demasiado “pesado”, en términos de tamaño de
la implementación y de la memoria utilizada.
Los dispositivos inalámbricos con plataforma J2ME permiten el acceso a Internet.
De esta forma se pueden ejecutar aplicaciones basadas en XML para el intercambio de
información en entornos distribuidos y cooperativos. El entorno de trabajo al que se
dirige este trabajo está formado en su configuración más sencilla por un dispositivo
móvil que contiene una máquina virtual Java para dichos dispositivo (KVM), y en el
que se quiere dar capacidad de análisis de los documentos XML, con objeto de dar
soporte a aplicaciones basadas en XML, tales como servicios Web realizando peticiones
mediante el uso de SOAP (Simple Object Access Protocol). Este esquema puede
observarse en la Figura 1.2. La motivación principal para ello consiste en dar
flexibilidad en el análisis de documentos XML con un eficiente consumo de la memoria
utilizada, y manteniendo la posibilidad de acceso a todo el documento XML.
Figura 1.2: Escenario.
3 Objetivos.
El objetivo principal de esta propuesta es contribuir a la mejora en la implementación de
aplicaciones basadas en XML sobre la plataforma Java para móviles, Java ME. Para ello
se proponen un nuevo modelo de análisis de documentos XML, basado el movimiento
libre del cursor a lo largo de la representación serializada de los datos XML, en el marco
de los dispositivos limitados en memoria. Para ello se proponen las siguientes metas
parciales:
o Analizar los modelos existentes en el análisis de documentos XML.
o Especificar un modelo que permita realizar un consumo mínimo de la
memoria utilizada en el proceso de análisis de los documentos XML,
pudiendo acceder desde el analizador a toda la información del documento.
Para ello será necesario:
o Implementar una representación del documento XML de forma que
se pueda acceder a toda la información que contenga. Para ello será
necesario proponer una nueva representación serializada de todo el
documento XML con soporte para esquemas de codificación basados
Capítulo 1. Introducción.
7
en 8, 16 y 32 bits sobre una plataforma Java para dispositivos
móviles (Java ME).
o Implementar los métodos que proporcionen las nuevas operaciones
que ofrece el nuevo modelo, basándose en el modelo de análisis Pull
de documentos XML, mediante el uso de los métodos del iterador
que utiliza StAX (JSR-173). Se deberán añadir nuevas operaciones
que ofrezcan una mayor flexibilidad en el análisis de la información
del documento XML, con el movimiento del cursor hacia atrás en la
representación serializada del documento XML, por una parte, y con
el análisis selectivo de subsecciones por otra.
o Validación y evaluación del modelo. Para ello se ha realizado una
implementación para la plataforma Java para móviles.
4 Contenido y organización de la memoria.
El resto de la memoria está organizada como se describe a continuación. El capítulo 2
introduce los conceptos generales de XML, codificación y lenguaje de programación
sobre el que se enmarca la propuesta. Este capítulo presenta el proceso y los modelos de
análisis de un documento XML. Establece una clasificación para marcar las diferencias
que hay entre los distintos modelos de análisis y se realiza una valoración con pros,
contras y el mejor para los modelos existentes. Se detallan trabajos previos y una amplia
clasificación de los analizadores sobre las plataformas de Java.
El capítulo 3 presenta el nuevo modelo de análisis de los documentos XML.
Explica la extensión del modelo Pull, presenta el modelo productor y consumidor, y las
nuevas operaciones soportadas. Este capítulo muestra el uso de la implementación del
prototipo realizado, Free Cursor Mobility, en el lenguaje de programación Java.
Posteriormente se incluye una implementación del modelo realizado sobre la plataforma
Java para dispositivos móviles. Se detalla la estructura utilizada para la comprobación
de que el documento esté bien formado y se presenta la interfaz relacionada con los
eventos.
En el capítulo 4 se lleva a cabo un análisis comparativo del rendimiento del modelo
propuesto. Se realizan medidas y se presenta el comportamiento de la evolución
temporal de la memoria utilizada en los analizadores elegidos como representación de
los modelos de análisis. Se describe el funcionamiento del modelo implementado y se
muestra el funcionamiento para otras implementaciones que usan otros modelos de
análisis. Así mismo, se muestran los esquemas de codificación soportados por las
distintas implementaciones. Con el prototipo implementado se ha realizado una serie de
pruebas sobre la plataforma J2SE y se presentan y analizan los resultados obtenidos.
8
Contribución al análisis XML para la mejora en las prestaciones de memoria
Finalmente, en el capítulo de conclusiones se resumen las principales
contribuciones y resultados de la Tesis Doctoral, apuntando una serie de posibles líneas
de investigación futuras.
Para la comprensión más profunda del trabajo realizado se ha creido conveniente
añadir una serie de apéndices al final de la memoria.
En el Apéndice A, se detalla como se realiza la detección de la codificación externa
de los ficheros XML.
El Apéndice B muestra el formato de transformación UTF-I16S para la
transformación de los caracteres ISO 10646 en unidades de 16 bits.
En el Apéndice C se presenta un modelo de validación de los documentos XML, las
DTD, que permiten determinar los tipos datos que pueden aparecen en un documento
XML, mientras que el Apéndice D trata sobre la validación de documentos XML
utilizando sintaxis basada en XML (XML Schema).
En el Apéndice E se presenta el uso y detalles relacionados con los espacios de
nombre en XML.
En el Apéndice F se presentan los servicios Web XML y estándares relacionados.
Finalmente, en el Apéndice G se presenta otras medidas.
CAPÍTULO 2.
Análisis de la información XML
La industria ha utilizado métodos de intercambio de datos que son específicos de un
determinado sector. Con la llegada del comercio electrónico, los negocios
incrementaron el número de relaciones entre los distintos sectores industriales. XML
hace extensible sus herramientas para el intercambio de datos en los distintos sectores
industriales. Los datos intercambiados en los documentos XML se codifican siguiendo
formatos de codificación y transformación, y necesitan de herramientas de análisis de la
información XML. Los analizadores XML son programas que extraen la información de
un documento XML, y permiten a una aplicación acceder a los datos mediante una
interfaz de programación o API (Application Programming Interface) en algún lenguaje
de programación. Debido a su portabilidad, Java es en un punto de conexión no sólo
entre plataformas sino entre desarrolladores. En este capítulo se presentan una
caracterización del análisis de los documentos XML. Se introduce la plataforma Java
para dispositivos móviles. Se muestran las características y aspectos diferentes en el
comportamiento de un analizador XML. Se presentan formatos de transformación para
la codificación de caracteres. Posteriormente, se presentan modelos de análisis
relacionados y se presentan las distintas interfaces para los modelos de análisis.
Además, se detallan y clasifican las implementaciones realizadas.
1 Introducción.
El lenguaje de marcas extensible, XML, es un lenguaje de propósito general
recomendado por el W3C (Word Wide Web Consortium) para la creación de otros
lenguajes de marcas de propósito específico. Una de sus principales ventajas es la
capacidad de compartir datos entre sistemas distintos, normalmente a través de Internet.
Lenguajes basados en XML, cada uno de ellos con un propósito diferente, como por
ejemplo RDF (Resource Description Framework) [RDF], MathML (Mathematical
Markup Language) [MathML], XHTML (Extensible HyperText Markup Language)
[XHTML], SVG (Scalable Vector Graphics) [SVG] y cXML (Commerce XML)
[cXML], se pueden definir una forma sencilla, permitiendo a los programas modificar y
validar documentos en estos lenguajes sin un conocimiento de su forma.
La versión 1.0 de XML es una recomendación del W3C publicada en Febrero de
1998. Está basada en el anterior estándar (SGML, Standard Generalized Markup
10
Contribución al análisis XML para la mejora en las prestaciones de memoria.
Language), que data de 1986. Sus conceptos están ampliamente asentados y aceptados.
SGML es el descendente de Generalized Markup Language (GML) de IBM,
desarrollado en 1960 por Charles Goldfarb, Edward Mosher y Raymond Lorie. GML
precedió y fue una inspiración para el desarrollo de SGML en la creación de un conjunto
de reglas para cualquier lenguaje de descripción de un documento estructurado.
SGML [SGML] proporciona una variedad de sintaxis de marcas que pueden usarse
por distintas aplicaciones. Fue diseñado originalmente para compartir documentos
legibles por las máquinas en grandes proyectos del gobierno y la industria aeroespacial,
los cuales han permanecido legibles durante décadas. Este estándar, ISO 8879, ha sido
usado ampliamente en la edición y publicación de documentos, como DocBook
[DocBook] que originalmente se basó en SGML para, según su página de su diseñador
Norman Walsh[DocBook 06], crear un vocabulario XML (y SGML) que se use para
escribir documentación técnica (entre otras cosas).
Aunque HTML fue originalmente diseñado de forma independiente, posteriormente
fue reformulado (en la versión 2.0) para ser una aplicación de SGML. Las páginas Web
están formadas por marcas HTML y son un ejemplo de un documento que hace uso de
los conceptos de GML.
De SGML derivó XML como subconjunto simplificado, eliminando las partes más
engorrosas y menos utilizadas. Al igual que SGML, XML es un metalenguaje: un
lenguaje para definir lenguajes. Los elementos que lo componen pueden dar
información sobre lo que contienen, no necesariamente sobre su estructura física o
presentación, como ocurre en HTML. HTML también se definió utilizando XML. En
una primera aproximación, las diferencias entre ambos residen en que HTML es
simplemente un lenguaje, mientras que XML un metalenguaje, es decir, se trata de un
lenguaje para definir lenguajes.
XML se asoció desde el principio a la recomendación del W3C DOM (Document
Object Model), aprobado también en 1998. Éste no es más que un modelo de objetos
que, en forma de API (Application Programming Interface), permite acceder a las
diferentes partes que pueden componer un documento XML o HTML (HyperText
Markup Language). SGML proporciona un modo consistente y preciso de aplicar
etiquetas para describir las partes que componen un documento, permitiendo además el
intercambio de documentos entre diferentes plataformas. Sin embargo, el problema que
se le atribuye es su excesiva dificultad.
XML se utiliza para la especificación de protocolos tales como SOAP (Simple
Object Acces Protocol), pensados para el intercambio de información descentralizada,
sobre protocolos tales como HTTP (Hyper Text Transfer Protocol) [RFC 2616], FTP
(File Transfer Protocol) [RFC 959] o SNMP (Simple Network Management Protocol)
[RFC 1157] en entornos distribuidos para el uso de servicios Web XML. SOAP es un
Capítulo 2. Análisis de la información XML.
11
protocolo de datos basado en XML estandarizado por el W3C con el propósito de
habilitar el intercambio de datos sobre Internet. En un escenario típico con los servicios
Web, un mensaje SOAP que se entrega a través de HTTP necesita analizarse antes de
realizar cualquier operación.
Los documentos XML están formados por unidades de almacenamiento llamadas
entidades, las cuales contienen datos analizados o no analizados. Los datos analizados
están formados por caracteres; algunos de ellos forman caracteres de datos, y otras
marcas. Las marcas codifican una descripción del diseño de almacenamiento y de la
estructura lógica del documento. XML proporciona un mecanismo para imponer
restricciones sobre el diseño de almacenamiento y la estructura lógica.
Los objetivos de diseño para XML fueron:
 XML debe ser directamente utilizable en Internet.
 XML debe soportar una amplia variedad de aplicaciones.
 XML debe ser compatible con SGML.




Debe ser sencillo escribir programas que procesen XML.
El número de características opcionales en XML debe ser mantenido al
mínimo posible, idealmente cero.
Los documentos XML deben ser legibles por humanos y razonablemente
claros.
El diseño de XML debe estar preparado rápidamente.
 El diseño de XML debe ser claro y conciso.
 Los documentos XML deben ser de fácil creación
 La concisión en las marcas para dar mayor importancia a los datos.
Hay también un gran número de lenguajes relacionados de alguna forma con SGML
y XML, pero estos no pueden ser analizados, validados o procesados usando las
herramientas XML y SGML, y por tanto no pueden considerarse como aplicaciones de
SGML y XML. Un ejemplo es Z Format [Z Format], un lenguaje diseñado para edición
y documentación. Z Format es lenguaje codificado por David H. Kristensen y Dan Ponte
para la composición tipográfica. Z Format tiene una base cercana a XML y SGML y está
inspirado en el precedente de látex, TEX.
2 Codificación de caracteres. Formatos de Transformación
2.1 Generalidades
La codificación de texto como una secuencia de caracteres sin más información, permite
obtener una secuencia lineal normalmente conocida como texto plano. Un carácter sigue
a otro, sin ninguna estructura. El "marcado" permite definir una estructura jerárquica
para el texto o los datos.
12
Contribución al análisis XML para la mejora en las prestaciones de memoria.
De forma general, la codificación de caracteres es el código que empareja cada
carácter con un símbolo en otro sistema de representación, como por ejemplo un
número. El tamaño de esta representación puede ser mayor que el utilizado para su
procesamiento o almacenamiento. En este caso, se hace necesario algún tipo de
transformación, y de esta necesidad surgen los diferentes formatos de transformación de
la representación numérica de los caracteres.
Un estándar de codificación proporciona la base para el procesamiento
almacenamiento e intercambio de datos de texto en cualquier lengua sobre un software
moderno y/o en los protocolos de información. Aunque éste debiera ser único, no es así.
Unicode, por una parte y según su propia definición, es la codificación de caracteres
universal, mantenida por Unicode Consortium [Unicode HP]. ISO/IEC 10646, por otra,
es un estándar más reciente, International Organization for Standardization (ISO)
publicó el Universal Multiple-Octet Coded Character Set (UCS), para la representación,
transmisión, intercambio, procesamiento, almacenamiento, entrada y representación de
la forma escrita de todos los lenguajes y símbolos adicionales. Desde la versión 1.1 de
Unicode se ha intentado mantener de forma escrupulosa compatibilidad con ISO/IEC
10646 y sus extensiones.
Para poder dar a cada carácter un formato de representación única, los diseñadores
de UCS eligieron una codificación uniforme, usando una secuencia de bits formada por
16 o 31 bits (en dos formas de codificación, UCS-2 y UCS-4). Esta es la razón por lo
que aparece la frase "multiple-octet" en el nombre del estándar.
Según la recomendación XML, refiriéndose a sí misma: "Esta especificación, junto
con los estándares asociados (Unicode e ISO/IEC 10646 para caracteres, Internet RFC
1766 para las etiquetas de identificación de idiomas, ISO 639 para los códigos de
nombre para el lenguaje, e ISO 3166 para el código de nombre del país), proporciona
toda la información necesaria para entender XML versión 1.0 y construir programas
para procesarlo".
El procesamiento se realiza habitualmente sobre algún lenguaje de programación
que soporta una representación de los caracteres diferentes al rango de codificación del
estándar utilizado.
2.2 ISO/IEC 10646
ISO/IEC 10646 define las siguientes formas de codificación:

La codificación en 4 octetos (32 bits) que utiliza hasta 231 posiciones.

Una codificación en dos octetos (16 bits) con los caracteres del plano
cero, el Basic Multilingual Plane (BMP).
Capítulo 2. Análisis de la información XML.
13
La arquitectura de un carácter ISO/IEC 10646 en 4 octetos contiene divisiones
conceptuales divididas en 128 grupos de 256 planos, con cada plano conteniendo 256
filas de 256 células, tal y como se puede ver en la Tabla 2.1.
Grupo
0xxxxxxx
primer octeto
Plano
xxxxxxxx
segundo octeto
Fila
xxxxxxxx
tercer octeto
Célula
xxxxxxxx
cuarto octeto
Tabla 2.1: Estructura de un carácter UCS-4.
Para poder detectar la codificación sin necesidad de entidades externas, XML
proporciona en su recomendación instrucciones para la detección de los valores, tanto
para UCS-4 como para el resto de formatos.
2.3 Unicode
Unicode ha comenzado a reemplazar a otros esquemas de codificación como ASCII,
ISO 8859 y Extended Unix Code (EUC) a todos los niveles [Kuhn]. Éste habilita a los
usuarios a manejar no sólo prácticamente todos los alfabetos y lenguajes usados, sino
que además soporta un gran conjunto de símbolos matemáticos y técnicos para facilitar
el intercambio de la información.
El conjunto de caracteres Unicode 3.0 ocupa un espacio de 16 bits. Es la
codificación Unicode más simple, conocida como UCS-2; su codificación se realiza
mediante una secuencia de palabras de 16 bits. La mayor parte de las herramientas Unix
esperan ficheros ASCII y no pueden leer palabras de 16 bits sin algún tipo de
modificación. UCS-2, sobre Unix, no resulta apropiado para la codificación externa de
Unicode en nombres de ficheros, ficheros de texto, variables de entorno, etc.
Como se ha comentado anteriormente, ISO/IEC 10646 define un conjunto de
caracteres multiocteto conocido como UCS que comprende la mayor parte de sistemas
de escritura. Los caracteres multiocteto, sin embargo, no son compatibles con muchas
aplicaciones y protocolos, lo cual ha provocado el desarrollo de unos formatos de
transformación de UCS, cada uno con unas características diferentes. Los más
representativos son UTF-8, UTF-16 y UTF-32.
2.4 UTF-32
UTF-32 representa los valores como unidades enteras de 32 bits con el mismo valor que
el valor escalar Unicode. En UTF-32 los valores de la secuencia <004D, 0430, 4E8C,
10302> se representa como <0000004D 00000430 00004E8C 00010302>.
2.5 UTF-8
UTF-8 representa los valores en una longitud variable de unidades de 8 bits, tal y como
se muestra en la Tabla 2.2.
14
Contribución al análisis XML para la mejora en las prestaciones de memoria.
Octeto de uso Formato (binario) nº de bits libres Máximo valor de UCS-4(hexa)
1º de 1
0xxxxxxx
7
0000 007F
1º de 2
110xxxxx
5
0000 07FF
1º de 3
1110xxxx
4
0000 FFFF
1º de 4
11110xxx
3
001F FFFF
1º de 5
111110xx
2
03FF FFFF
1º de 6
1111110x
1
7FFF FFFF
2º .. 6º
10xxxxxx
6
Tabla 2.2: Formato de los octetos en una secuencia UTF-8.
UTF-8 preserva el rango de la codificación ASCII, proporcionando compatibilidad
con los sistemas de ficheros, analizadores y otro software que dependan de valores
ASCII. La codificación de UCS-4 a UTF-8 según la RFC 2279 [RFC 2279], es de la
siguiente forma:
1. Se determina el número de octetos requeridos para el valor del carácter,
según la última columna de la Tabla 2.2. Es importante ver que las filas son
mutuamente exclusivas para la obtención del primer octeto.
2. Se preparan los bits de mayor peso del octeto, según la segunda columna de
la Tabla 2.2.
3. Se rellenan los bits marcados con x con los bits del valor del carácter,
comenzando desde el bit de menor peso del valor del carácter, y
colocándolos primero en el último octeto de la secuencia, luego en el
siguiente hasta llegar al último, de forma que se rellenen todos los bits
marcados con x.
La decodificación de UTF-8 a UCS-4 es el proceso inverso al de codificación y se
obtiene un valor entero de 31 bits de una secuencia de bytes de longitud variable según
el formato de codificación anteriormente explicado.
2.6 UTF-16
Para transformar la representación numérica de un carácter según UTF-16 [RFC 2781]
se procede de la siguiente forma. Sea U el número de un carácter, no mayor que
0x10FFFF,
1. Si U < 0x10000, se codifica el valor U como un entero sin signo y se
termina.
2. Sea U’ = U – 0x10000. Ya que U es menor o igual que 0x10FFFF, U’
debería ser menor o igual que 0xFFFF. Es decir, U’ puede representarse en
20 bits.
3. Se toman dos enteros sin signo de 16 bits, W1 y W2, con un valor inicial de
0xD800 y 0xDC00, respectivamente. Estos enteros tienen cada uno de ellos
10 bits libres para poder codificar el valor del carácter, hasta un total de 20
bits.
Capítulo 2. Análisis de la información XML.
15
4. Se asignan los 10 bits de menor peso de los 20 bits de U’ a los 10 de menor
de W1 y los 10 bits de menor peso de U’ a los 10 bits de W2. Y se termina.
De forma gráfica los pasos del 2 al 4 son tal como se especifica a continuación:
U’ = yyyy yyyy yyxx xxxx xxxx
W1 = 1101 10yy yyyy yyyy
W2 = 1101 11xx xxxx xxxx
Los valores entre 0xD8000 y 0xDFFF están reservados por UTF-16, y no tienen
ningún carácter asignado a ellos.
3 Java 2 Platform, Micro Edition (Java ME)
3.1 Introducción
XML es una sintaxis universal para describir y estructurar datos con independencia de la
aplicación lógica. Muchas de estas aplicaciones han elegido la tecnología Java como
soporte para su implementación, y debido a su naturaleza portable hacen una
combinación perfecta. La tecnología Java se creó como una herramienta de
programación en el proyecto denominado "the Green Project" en Sun Microsystems en
el año 1991. El equipo "Green Team" fue compuesto por trece personas y dirigido por
James Gosling. Una de las tres plataformas de ejecución de Java es la Micro Edition, ó
Java ME (anteriormente J2ME). Ésta proporciona un entorno de aplicación que va
dirigido especialmente a las necesidades de un amplio y de rápido crecimiento espacio
de consumidores, que incluyen entre otros teléfonos móviles y PDAs (Personal Digital
Assistants).
Las especificaciones para Java SE [Java SE], Java EE [Java EE], y Java ME [Java
ME] se han desarrollado tomando como eje central a Java Community Process (JCP).
Una especificación Java comienza como una Java Specification Request (JSR). Un
grupo de expertos que representan distintas las compañias se forman para crear una
especificación. Las JSR pasan a través de varios estados en el JCP antes de su
finalización. Cada JSR tiene asignado un número.
La tecnología Java 2 Platform, Micro Edition (Java ME) consta de una Máquina
Virtual y de un conjunto de APIs para proporcionar entornos de ejecución hechos para
dispositivos de consumo y electrónica “embebida”.
Actualmente, una gran cantidad de dispositivos móviles, PDAs y otros sistemas
embebidos, presentan una plataforma de recursos limitados en la que se puede utilizar
Java. Sin embargo, sus recursos disponibles, entérminos de CPU, ROM, RAM y
capacidad de presentación en pantalla son limitados. La Tabla 2.3 muestra los requisitos
de procesador y memoria para la nueva generación de móviles según se especifican en la
16
Contribución al análisis XML para la mejora en las prestaciones de memoria.
implementación de la máquina virtual de la CLDC HotSpot [HotSpot 03]. En esta tabla
se presentan los requisitos mínimos y típicos para procesador y memoria.
Item
Tipo de CPU
Velocidad de la CPU
RAM
ROM/flash
Mínimo
Típico
ARM
ARM
12MHz
60MHz
300KB (incluyendo MIDP) 600KB (incluyendo MIDP)
1MB
1.5MB
Tabla 2.3: Requisitos de procesador y memoria para la nueva generación de móviles.
Debido a su bajo consumo, el procesador ARM está presente la mayoría de
dispositivos que hay en el mercado para este tipo de dispositivos. Por otra parte, al tener
la memoria limitada, es de extrema importancia que se minimice la cantidad de dicha
memoria que ocupan tanto la máquina virtual como las librerías CLDC.
3.2 KVM
La KVM (K Virtual Machine) es la nueva implementación de la Máquina Virtual de
Java, que acepta el mismo conjunto de instrucciones de código máquina (realmente unas
pocas menos) y el mismo formato para los ficheros que la máquina virtual clásica. En la
Figura 2.3 se muestran los componentes de la KVM en un dispositivo móvil.
Figura 2.3: Componentes de la KVM sobre un dispositivo móvil.
3.3 APIs
Java ME está dividida en configuraciones, perfiles y paquetes opcionales. Las
configuraciones son especificaciones Java (Java Specification Request ó JSR) que
detalla la máquina virtual y el conjunto de API que pueden usarse con ciertos
dispositivos. La tabla 2.4 muestra las configuraciones existentes para Java ME. Existen
dos posibles configuraciones para la Java ME, estas son: Connected, Limited Device
Configuration (CLDC) y Connected Device Configuration (CDC).
CLDC 1.1 [JSR-139] es una versión revisada de la especificación CLDC 1.0 [JSR30] que incluye nuevas características tales como el punto flotante, soporte para
referencias débiles y otras mejoras. CLDC 1.1 es debe ser compatible con las
Capítulo 2. Análisis de la información XML.
17
implementaciones en CLDC 1.0, y mantiene las características en cuanto al tamaño en
memoria en los dispositivos con recursos limitados que presenta CLDC 1.0.
CDC [JSR-36] proporciona la base de Java ME en dispositivos con un
microprocesador de mayor tamaño (al menos de 32 bits) y una mayor memoria que
CLDC.
JSR #
30
139
36
Abreviatura
CLDC 1.0
CLDC 1.1
CDC
Explicación
Connected, Limited Device Configuration
Connected, Limited Device Configuration 1.1
Connected Device Configuration
Tabla 2.4: Configuraciones en Java ME
Los perfiles complementan una configuración añadiéndole APIs específicas para
proporcionar un entorno de ejecución para las aplicaciones en alguna categoría de
dispositivos específicos. Un perfil es un conjunto de APIs de alto nivel que además
define el modelo del ciclo de vida de la aplicación, el interfaz de usuario, persistencia de
almacenamiento y el acceso a las propiedades específicas del dispositivo.
Tal y como se ha presentado, Java ME tiene dos configuraciones básicas sobre las
que se construyen los perfiles. Mobile Information Device Profile [JSR-37] (MIDP 1.0),
está construido sobre CLDC, y fue el primer perfil de ejecución sobre Java ME. MIDP
2.0 [JSR-118] define un perfil que extiende y mejora MIDP 1.0.
Personal Profile [JSR-62] (PP), Personal Basis Profile [JSR-129] (PBP), y
Foundation Profile [JSR-FP] (FP) son tres perfiles de CDC. Estos tres perfiles junto con
MIDP 1.0 y MIDP 2.0 se muestran en la Tabla 2.5.
JSR #
37
118
46
129
62
Abreviatura
MIDP 1.0
MIDP 2.0
FP
PBP
PP
Explicación
Mobile Information Device Profile
Mobile Information Device Profile 2.0
Foundation Profile
Personal Basis Profile
Personal Profile
Tabla 2.5: Perfiles en Java ME.
3.4 APIs Opcionales
Debido a las características de los dispositivos algunas APIs son opcionales en la
plataforma J2ME. Los paquetes opcionales extienden la plataforma Java ME para añadir
funcionalidades a las que proporciona tecnología con la configuración (bien CLDC o
bien CDC) y a un perfil asociado.
Estas APIs opcionales se han creado para aplicaciones específicas y con tecnologías
emergentes, tales como conectividad a base de datos, mensajería inalámbrica,
multimedia, gráficos 3D, y Servicios Web.
Debido a su modularidad, los fabricantes de dispositivos pueden evitar llevar una
funcionalidad innecesaria o pesada incluyendo solo los paquetes que necesite. Algunos
de estos paquetes se muestran en la Tabla 2.6.
18
Contribución al análisis XML para la mejora en las prestaciones de memoria.
JSR #
75
82
120
135
164
165
172
177
179
180
184
190
Abreviatura
PIM
BTAPI
WMA
MMAPI
SATSA
Explicación
PDA Optional Packages for the J2ME Platform
Java APIs for Bluetooth
Wireless Messaging API
Mobile Media API
JAIN SIMPLE Presence
JAIN SIMPLE Instant Messaging
J2ME Web Services
Security and Trust Services API for J2ME
Location API for J2ME
SIP API for J2ME
Mobile 3D Graphics API for J2ME
Event Tracking API for J2ME
Tabla 2.6: Paquetes opcionales de Java ME.
3.5 JSR-185
JSR-185, Java Technology for the Wireless Industry, describe como las distintas JSRs
podrían trabajar juntas proporcionando una solución consistente para los dispositivos
inalámbricos.
J2ME es una tecnología inalámbrica surgida, no con la intención de desbancar a las
ya existentes, sino que puede ser utilizada para favorecerlas y mejorarlas. Por ejemplo,
utilizando código Java se pueden mejorar las prestaciones de los navegadores web
diseñados con otras tecnologías. Así, teléfonos móviles provistos de las tecnologías
WAP o i-Mode pueden potenciar sus posibilidades gracias a J2ME.
Puesto que CLDC es consciente de la gran cantidad de dispositivos existentes en el
mercado y de las grandes diferencias existentes entre estos, sólo se imponen
restricciones respecto de la capacidad de memoria. De esta forma, considerando que las
KVM, las librerías de configuración y de perfil, y las aplicaciones corriendo sobre el
dispositivo sólo deben ocupar entre 160 y 512 KB, se exigen al menos 128 KB de
memoria no volátil para la KVM y las librerías, y al menos 32 KB de memoria volátil
para la KVM en funcionamiento.
En lo que concierne al software, ocurre algo parecido. Debido a la gran diversidad
de software nativo que puede correr en el dispositivo, el CLDC sólo exige la existencia
de un software muy sencillo que cuente con una entidad de control de programas de
forma que pueda correr la KVM. No es necesario que de soporte ni tampoco que de
garantías de un buen funcionamiento en tiempo real.
Los requisitos exigidos por el MIDP son algo más estrictos, ya que éste debe tratar
con aspectos como la presentación en pantalla. Se exigen 128 KB de memoria no volátil
para componentes MIDP, 8 KB adicionales para almacenamiento de datos de aplicación
de forma persistente, y 32 KB de memoria volátil para KVM en ejecución. Los
requisitos en el display del equipo son de un tamaño de 96 x 54 mm , una profundidad
de 1 bit, y una relación de aspecto de 1:1. La interfaz de entrada debe de tener uno o más
2
Capítulo 2. Análisis de la información XML.
19
de los siguientes mecanismos: pantalla táctil y un teclado a una o dos manos. Por
ultimo, en lo relativo a la red, se pide una conexión bidireccional inalámbrica con un
ancho de banda limitado.
En lo concerniente al software, se exigen varios puntos: la existencia de un kernel
mínimo que controle al hardware y proporcione la entidad de control de programas
anteriormente mencionada, un mecanismo de lectura/escritura de memoria no volátil
para dar soporte a las APIs de almacenamiento de datos persistente, un mecanismo de
lectura/escritura para dar soporte a las APIs de red, un mecanismo que de soporte de
temporización, una capacidad mínima para escribir en la pantalla del dispositivo, y un
mecanismo para capturar la entrada de datos por parte del usuario.
Todos estos aspectos están en continua revisión y consideración bajo nuevas
especificaciones JSR. La nueva generación de dispositivos móviles puede necesitar
soporte XML para el procesamineto de documentos y servicios web. La especificación
JSR-280 [JSR-280] actualmente en desarrollo se está encargando de seleccionar el
subconjunto de DOM y SAX2 para realizar estas operaciones. Esta especificación
considera el análisis Pull una aproximación relativamente nueva y prometedora en este
campo.
4 Análisis de XML
4.1 Introducción
Los analizadores XML (ó parsers) son programas que extraen la información contenida
en un documento XML. Estos programas utilizan la representación del documento para
manipular la información que éstos contienen.
Un analizador XML puede tomar como entrada una cadena de caracteres en
secuencia y realiza ciertas operaciones sobre él. Esta cadena de caracteres en secuencia
se conoce como representación serializada del documento XML, y se forma a partir de
la fuente de datos de la que se extrajo la información XML. Esta fuente de datos puede
ser un fichero XML, un documento descargado mediante algún flujo de
comunicaciones, o una representación abstracta de la información XML en algún
lenguaje de programación, entre otros. Para la gestión de la información por parte del
analizador, y su posterior tratamiento y gestión por parte de la aplicación, el analizador
maneja una representación creada a partir de la fuente de datos virtual. El analizador
XML toma la información de entrada de la representación serializada XML y la
manipula para devolverla a la aplicación.
XML constituye la capa más baja dentro del nivel de aplicación, sobre el que se
puede desarrollar cualquier estructura de tratamiento de documentos, hasta llegar a la
20
Contribución al análisis XML para la mejora en las prestaciones de memoria.
presentación. Uno de los conceptos más relevantes de XML es la distinción entre
documentos XML validados y “bien formado” (well-formed).
Los documentos XML bien formados, son todos aquellos que cumplen las
especificaciones del lenguaje, como por ejemplo, el correcto entrelazado, naturaleza
jerárquica de los elementos que componen el archivo XML, nombrado de las etiquetas,
etc., aunque sin estar sujeto a los elementos fijados en un DTD (definición de los
elementos que puede haber en el documento XML). Muchos analizadores también
implementan validación utilizando una DTD, XML Schema, u otro método para
verificar que la estructura y contenido son como se especifican. En este caso, además de
estar bien formados, siguen una estructura y una semántica del documento determinada
reglas expresadas en algún lenguaje de modelado. Sus elementos, atributos, hijos como
subelementos estructurales, deben estar definidos por lenguaje de modelado. La
información analizada es devuelta a la aplicación mediante los métodos que proporciona
la interfaz de programación, API.
4.2 Modelos de análisis
La gestión de la información en un formato abierto permite el procesamiento por
cualquier programa (o por un programa creado expresamente para ello). Esto extiende la
aplicación y validez del programa, no solo en el momento en el que la información fue
creada, sino que basados en el principio de independencia de los datos, pueden
almacenarse en ordenadores no propietarios, con representaciones estandarizadas. XML
marca contenidos añadiendo información relacionada con el propósito de ésta. Con la
información almacenada en formato XML, una aplicación puede, mediante un
analizador, extraer la información relevante y procesarla adecuadamente para las
distintas situaciones. Los modelos de análisis representan formas diferentes de realizar
las operaciones de análisis de estos documentos. De esta forma se determina el
funcionamiento, que condicionará la implementación realizada, y las posibilidades que
puede ofrecer un determinado programa dicho proceso. Estos modelos son:
 DOM,
 Push y
 Pull.
Cada uno tiene sus ventajas y desventajas. El siguiente documento XML,
libros.xml, describe un catálogo de libros y se usa como ejemplo para describir los
tres modelos. Este fichero se representa en la Figura 2.4. Los datos o información
aparecen en negrita. Los metadatos son los datos (o metadatos) que acompaña a los
datos, son las etiquetas que acompañan a la información.
<?xml version="1.0" ?>
<catalogo>
<!-- Ejemplo -->
<libro id="101">
Capítulo 2. Análisis de la información XML.
21
<titulo>The XML handbook</titulo>
<autor>C.F. Golfarb,P. Prescod</autor>
<precio>39.95</precio>
</libro>
<libro id="121">
<titulo>XSLT Programmer's Ref.</titulo>
<autor>M.Kay</autor>
<precio>19.95</precio>
</libro>
</catalogo>
Figura 2.4: Ejemplo de fichero xml.
Este documento puede representarse de forma gráfica, para mostrar su estructura y
contenido. En la Figura 2.5 se puede apreciar una estructura jerárquica, donde el "mayor
nivel" es catalogo, que se conoce como elemento raíz. catalogo tiene varios hijos,
dos elementos libro, y un comentario.
titulo: “The XML handbook”
libro
id:101
autor:“C.F. Golfarb,P. Prescod ”
precio: “39.95 ”
catalogo
titulo:“XSLT Programmers’s Ref.”
libro
autor: “M. Kay ”
id:121
precio: “19.95 ”
Comentario: Ejemplo
Figura 2.5: Representación gráfica de un documento XML.
En el mundo de la programación, una forma estándar de acceder a las operaciones
que ofrece un programa es mediante el uso de una interfaz (o punto de acceso), visible
por el programador (o programa usuario de la aplicación), de tal manera que esconda los
detalles de la implementación. De esta forma, las interfaces de programación de la
aplicación o APIs, mediante el uso de los métodos, operaciones o funciones,
proporcionan una forma estándar de ejecutar una aplicación. Y aunque deberían de ser
independientes de los detalles de la implementación suelen condicionar tanto la
implementación como la forma en la que los datos pueden ser devueltos.
Las interfaces de los tres modelos se presentan en las siguientes secciones. Primero
se presenta el Modelo de Objeto de un Documento (DOM), a continuación se presenta
el modelo de análisis Push, cuya única interfaz es Simple API for XML (SAX), y
posteriormente se presenta el modelo Pull.
22
Contribución al análisis XML para la mejora en las prestaciones de memoria.
4.3 Modelo de Objeto de un Documento: DOM
4.3.1 Introducción
DOM, utiliza una representación interna estándar de la estructura de un documento, y
proporciona una interfaz al programador para poder acceder de forma fácil, consistente y
homogénea a sus elementos, atributos y estilo. Es un modelo independiente de la
plataforma y del lenguaje de programación. El W3C establece varios niveles de
actuación, coincidiendo con el tiempo en que se presentan como recomendación:
 Nivel 1: define una interfaz de programación para HTML y XML. Contiene
funcionalidades para la navegación y manipulación de documentos. Tiene 2
partes: el núcleo o parte básica, para documentos XML, y la parte HTML.
 Nivel 2: incluye un modelo de objetos e interfaz de acceso a las
características de estilo del documento, definiendo funcionalidades para
manipular la información sobre el estilo del documento.
 Nivel 3: Especifica interfaces a posibles sistemas de ventanas, manipulación
de DTD y modelos de seguridad.
El objetivo es que cualquier script pueda ejecutarse de forma más o menos
homogénea en cualquier navegador que soporte DOM. Es decir, tener una plataforma
estándar en la que poder crear contenidos sin temor a no estar soportado por alguna
marca o versión de navegador, y que además sea potente y versátil. Además, y al igual
que el conjunto de piezas que el W3C está creando para su uso en el intercambio de
documentos e información, no estará sujeto al ámbito de los navegadores, sino que su
uso será extensible a cualquier tipo de aplicación que acceda a esos documentos.
4.3.2 Diagrama UML
El Lenguaje de Modelado Unificado [UML] (UML - Unified Modeling Language) es un
lenguaje gráfico para visualizar, especificar y documentar cada una de las partes que
comprende el desarrollo de software. Se ha convertido en el estándar de facto de la
industria, debido a que ha sido impulsado por los autores de los tres métodos más
usados de orientación a objetos: Grady Booch, Ivar Jacobson y Jim Rumbaugh. Estos
autores fueron contratados por la empresa Rational Software Co. para crear una notación
unificada en la que basar la construcción de sus herramientas CASE.
La Figura 2.13 es una referencia rápida al diagrama UML que representa las
interfaces DOM a Nivel 2. En el que se representan las clases/interfaces y los métodos
de cada uno de ellos. Este tipo de diagramas proporcionan una panorámica de la
implementación mostrando las clases/interfaces y los métodos relevantes.
Capítulo 2. Análisis de la información XML.
<<interface>>
Document
<<interface>>
Attr
+getDocType()
+getImplementation()
+getDocumentElement()
+createElement()
+createDocumentFragment()
+createTextNode()
+createComment()
+createCDATASection()
+createProcessingInstruction()
+createAttribute()
+createEntityReference()
+getElementsByTagName()
+importNode()
+createElementNS()
+createAttributeNS()
+getElementsByTagNameNS()
+getElementById()
<<interface>>
Entity
+getPublicId()
+getSystemId()
+getNotationName()
<<interface>>
Notation
+getPublicId()
+getSystemId()
<<interface>>
DOMImplementation
+hasFeature()
+createDocumentType()
+createDocument()
<<interface>>
NamedNodeMap
<<interface>>
Element
<<interface>>
Node
<<interface>>
EntityReference
<<interface>>
ProcessingInstruction
+getTarget()
+getData()
+setData()
+getName()
+getSpecified()
+getValue()
+getOwnerElement()
<<interface>>
DocumentType
+getName()
+getEntities()
+getNotations()
+getNotations()
+getPublicId()
+getSystemId()
+getInternalSubset()
<<interface>>
DocumentFragment
+getNodeName()
+getNodeValue()
+setNodeValue()
+setNodeType()
+getParentNode()
+getChildNodes()
+getFirstChild()
+getLastChild()
+getPreviousSibling()
+getNextSibling()
+getAttributes()
+getOwnerDocument()
+insertBefore()
+replaceChild()
+removeChild()
+appendChild()
+hasChildNodes()
+cloneNode()
+normalize()
+isSupported()
+getNamespaceURI()
+getPrefix()
+setPrefix()
+getLocalName()
+hasAttributes()
http://www.w3.org/TR/DOM-Level-2-Core
+getTagName()
+getAttribute()
+setAttribute()
+removeAttribute()
+getAttributeNode()
+setAttributeNode()
+removeAttributeNode()
+getElementsByTagName()
+getAttributeNS()
+setAttributeNS()
+removeAttributeNS()
+getAttributeNodeNS()
+setAttributeNodeNS()
+getElementsByTagNameNS()
+hasAttribute()
+hasAttributeNS()
+getNamedItem()
+setNamedItem()
+removeNamedItem()
+item()
+getLength()
+getNamedItemNS()
+setNamedItemNS()
+removeNamedItemNS()
<<interface>>
CharacterData
+getData()
+setData()
+getLength()
+substringData()
+appendData()
+insetData()
+deleteData()
+replaceData()
23
<<interface>>
NodeList
+item()
+getLength()
<<interface>>
DOMException
<<interface>>
CDATASection
<<interface>>
Comment
<<interface>>
Text
+splitText()
Figura 2.6: Jerarquía de Interfaces del Nivel 2 de DOM.
El nombre "Document Object Model" fue elegido ya que es un "modelo de objeto"
en el tradicional diseño orientado a objeto. Los documentos son modelados usando
objetos, y el modelo comprende no solo la estructura de un documento, pero también las
propiedades de un documento y los objetos de los que está compuesto. En otras
palabras, los nodos en el diagrama de arriba no representan una estructura de datos, sino
que representan objetos, en los que se tienen funciones e identidades. A modo de
ejemplo se presenta la interfaz Node: En la siguiente figura se observa tanto las
variables estáticas como los métodos con los parámetros y valores devueltos en código
Java. El resto de interfaces están detalladas tanto en Java, IDL [OMGIDL], como
ECMAScript [ECMAScript], en las páginas del W3C[DOM Level 2].
package org.w3c.dom;
public interface Node {
public static final short ELEMENT_NODE
= 1;
public static final short ATTRIBUTE_NODE
= 2;
public static final short TEXT_NODE
= 3;
public static final short CDATA_SECTION_NODE
= 4;
public static final short ENTITY_REFERENCE_NODE
= 5;
public static final short ENTITY_NODE
= 6;
public static final short PROCESSING_INSTRUCTION_NODE = 7;
public static final short COMMENT_NODE
= 8;
public static final short DOCUMENT_NODE
= 9;
public static final short DOCUMENT_TYPE_NODE
= 10;
public static final short DOCUMENT_FRAGMENT_NODE
= 11;
public static final short NOTATION_NODE
= 12;
public String getNodeName();
public String getNodeValue() throws DOMException;
public void setNodeValue(String nodeValue) throws DOMException;
public short getNodeType();
24
Contribución al análisis XML para la mejora en las prestaciones de memoria.
public
public
public
public
public
public
public
public
public
public
public
public
public
public
public
public
public
public
public
public
public
Node getParentNode();
NodeList getChildNodes();
Node getFirstChild();
Node getLastChild();
Node getPreviousSibling();
Node getNextSibling();
NamedNodeMap getAttributes();
Document getOwnerDocument();
Node insertBefore(Node newChild, Node refChild)
throws DOMException;
Node replaceChild(Node newChild, Node oldChild)
throws DOMException;
Node removeChild(Node oldChild) throws DOMException;
Node appendChild(Node newChild) throws DOMException;
boolean hasChildNodes();
Node cloneNode(boolean deep);
void normalize();
boolean isSupported(String feature, String version);
String getNamespaceURI();
String getPrefix();
void setPrefix(String prefix) throws DOMException;
String getLocalName();
boolean hasAttributes();
}
Figura 2.7: Interfaz Node.
DOM proporciona un API que permite acceso aleatorio y manipulación de un
documento XML en memoria. En primer lugar esto parece como una ventaja para el
desarrollador. Aunque esta perceptible simplicidad se convierte en un alto coste: el
funcionamiento. Para un documento grande podría necesitarse leer el documento en
memoria antes de tomar acciones apropiadas basadas en los datos. Mediante la
construcción de un árbol DOM el árbol puede llegar a multiplicar el consumo de
memoria del propio XML, e incurre en una cantidad nada trivial para el coste de
procesamiento, haciendo que DOM no sea deseable en algunas situaciones. Esta es una
tendencia “natural” en el modelo DOM, aunque podría ser tendente también en
cualquier otra implementación basada en eventos.
4.3.3 Ejemplo con DOM
DOM es una técnica de análisis basada en árboles que construye el árbol entero en
memoria. Esto permite tener un acceso a todo el documento de forma cómoda e
intuitiva. La Figura 2.8 muestra la estructura en forma de árbol del modelo de análisis
DOM. Document es la raíz que tiene al menos un nodo hijo, el elemento raíz, el cual
es el elemento catalogo en el código de ejemplo. Otro nodo es DocumentType, para
la declaración de la DTD, la cual no está definida en nuestro ejemplo. Elemento
catalogo tiene nodos hijos. Los nodos hijos pueden tener elementos, texto, comentarios,
instrucciones de procesamiento, tal y como se muestra en el ejemplo.
Capítulo 2. Análisis de la información XML.
25
Document
DocumentType
null
Element
catalogo
Element
libro
Element
libro
Attr
“121”
Text
“”
Element
titulo
Element
titulo
Element
autor
Element
precio
Text
Text
Text
“XSLT Programmers’s Ref.”
Attr
“101”
Comments
“Ejemplo”
“19.95 ”
“M. Kay ”
Element
autor
Text
Text
“The XML handbook”
“C.F. Golfarb,P. Prescod ”
Element
precio
Text
“39.95 ”
Figura 2.8: Representación gráfica de un árbol DOM.
En la Figura 2.9 ilustra como es el funcionamiento de la API DOM. Este ejemplo
imprime en la salida los títulos de los libros obtenidos del documento XML.
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("libros.xml");
NodeList nodes = document.getElementsByTagName("titulo");
for(int i = 0; i < nodes.getLength(); i ++) {
Element titleElem = (Element)nodes.item(i);
Node childNode = titleElem.getFirstChild();
if (childNode instanceof Text) {
System.out.println("El titulo del libro es: "
+ childNode.getNodeValue());
}
}
Figura 2.9: Funcionamiento de la API DOM.
La salida del documento es:
El titulo del libro es: The XML handbook
El titulo del libro es: XSLT Programmer's Referente
Este programa toma un fichero XML, crea un árbol DOM, y encuentra todos los
nodos de los elementos que contienen como etiqueta el valor especificado por el método
getElementsByTagName("titulo"). Finalmente imprime el texto de la
información asociada con los elementos antes obtenidos, iterando sobre la lista de los
títulos de los elementos y examinando el primer hijo que contiene el texto contenido
entre el comienzo y el final de la marca del elemento, mediante el método
getFirstChild().
26
Contribución al análisis XML para la mejora en las prestaciones de memoria.
Se puede acceder a todos los elementos del documento. Esta API permite la
manipulación del árbol, añadiendo y eliminando elementos.
Aunque la estructura en forma de árbol proporciona un buen soporte para manipular
el documento hay ciertos aspectos a considerar
 El documento XML tiene que ser analizado entero al menos una vez, el
análisis parcial no es posible.
 Cargar todo el documento y construir una estructura en forma de árbol
puede ocupar mucha memoria, especialmente cuando el documento es
grande. El árbol DOM tiene un orden de magnitud de la memoria utilizada
mayor que el tamaño del documento, por lo tanto consume bastante

memoria.
El tipo genérico del nodo DOM es una ventaja de cara a la interoperabilidad,
pero podría no ser la mejor opción cuando se quiere tener un tipo de objeto
más específico.
El análisis con DOM es apropiado cuando la aplicación necesita tener acceso
aleatorio a todo el documento. Un buen ejemplo es cuando se realiza operaciones de
transformación del documento, como con XSL, ya que el analizador necesita navegar a
través del documento, también es apropiado para aplicaciones, tales como editores
XML, que necesitan modificar los datos.
4.3.4 Modelo Productor/Consumidor en DOM
Según la relación entre el analizador y la aplicación se pueden comparar los distintos
modelos de análisis de la información XML. Un analizador es el encargado de extraer la
información de un documento XML, y entregarla a la aplicación. El tipo de relación
entre ambos (analizador y cliente) puede ser diferente para los distintos modelos.
Una aplicación actúa como cliente en relación con el analizador, recibiendo la
información que el analizador le proporciona a través las interfaces de los métodos de
las interfaces de programación. Pero esta interacción puede responder bajo petición del
cliente o bien puede hacer frente al funcionamiento del analizador.
Por tanto, en la configuración de todos los componentes, hay una serie de roles para
proporcionar la funcionalidad de una aplicación.
 El primer rol es el productor de eventos, que es normalmente un analizador
XML, obtenido como una instancia de alguna clase de una librería.
 El segundo rol es el consumidor que en el caso de ser una analizador XML
basado en eventos los captura y procesa si corresponde, y en el caso de un
analizador XML basado en árboles accede a la representación en memoria
de documento XML.
Capítulo 2. Análisis de la información XML.
27
Un analizador DOM devuelve una representación en forma de árbol de un
documento XML. Un analizador Push llama a los métodos del cliente con eventos
XML. Un analizador Pull devuelve los eventos XML al cliente bajo petición. Tal y
como se detalla en las figuras de los siguientes apartados. Los analizadores DOM
devuelven una representación en forma de árbol del documento XML, y la aplicación
puede acceder a la información XML. En la Figura 2.10 se muestra la aplicación en su
roll de consumidor de los datos XML que los obtiene de la representación en forma de
árbol que contruye el analizador XML de la fuente de datos. Se puede observar que
desde la aplicación se accede directamente a una representación que se ha hecho de los
datos para su tratamiento.
Árbol DOM
nodo Document
analizador
datos
XML
Node Raíz
Node hijo
Texto
lectura/escritura
aplicación
Node hijo
Texto
Figura 2.10: Modelo Productor/consumidor en DOM.
Pero DOM no puede usarse para leer el documento XML. Para eso se usa el modelo
Push (SAX), de esta forma pueden trabajar de forma conjunta. El modelo Push se
expone en el siguiente apartado.
4.4 Análisis con Push
4.4.1 Introducción
Simple API for XML (SAX) es la API del modelo Push para el procesamiento XML. No
es un estándar W3C, sino que es fruto de la discusión de una lista de distribución XMLDEV que desarrollo SAX 1.0 [SAX]. SAX no construye la representación en forma de
árbol del documento como lo hace DOM, sino que entrega una serie de eventos según
los datos obtenidos del documento. Estos eventos se entregan a unos manipuladores,
que proporcionan acceso al contenido del documento. Hay tres tipos básicos de
manipuladores de eventos:
 DTDHandler, para acceder al contenido de las DTDs. Toma los eventos

que se producen cuando la DTD es analizada.
ErrorHandler, para analizar errores de bajo nivel. Cuando el analizador
encuentra un error, este llama a este manejador, que en algunos casos la
aplicación puede ignorar el error y continuar. Otras veces el error hace lo
28
Contribución al análisis XML para la mejora en las prestaciones de memoria.

posible para que el analizador continúe, en este caso la aplicación debería
dar información sobre el error.
ContentHandler, para acceder al contenido del documento. Con este
manejador la aplicación desarrollada pone el código que procesa los datos.
La Figura 2.11 muestra como el analizador SAX obtiene los eventos. El analizador
lee la entrada del documento, coloca cada evento y lo entrega a MiManejador,
mientras procesa el documento. La lectura de los datos no se realiza bajo petición de la
aplicación que utiliza el analizador de tipo Push. Por el contrario, los eventos son
entregados por el analizador a la aplicación y la aplicación podrá obtener la información
del documento XML sobreescritura de los métodos, en función del evento generado en
el proceso de lectura.
MiManejador
Analizador
SAX
libros.xml
startElement “titulo”
characters
endElement “titulo”
Lee datos directamente
isTitle = true
Imprime el título
isTitle = false
Coloca los eventos
Figura 2.11: SAX entrega un documento a una aplicación como una secuencia de eventos.
La construcción de un árbol DOM requiere leer el documento XML entero y
posicionar los objetos en memoria. Pero DOM no puede usarse para leer el documento
XML. Para eso se puede usar el modelo Push (SAX), de esta forma pueden trabajar de
forma conjunta. La Figura 2.12 muestra como las librerías Java de Sun implementan el
Modelo de Objeto del documento.
Document
Handler
Error
Analizador
SAX
Handler
DOM
Object
DTD Event
Handler
Entity
Object
Object
Object
Object
Resolver
Figura 2.12: SAX entrega un documento a una aplicación como una secuencia de eventos.
Capítulo 2. Análisis de la información XML.
29
En esta figura aparece EntityResolver que es invocado cuando el analizado
podría acceder a texto que está fuera de la entidad del documento.
4.4.2 Diagrama UML para SAX
Push es un modelo de análisis de documentos XML cuya única instanciación es SAX
(Simple API for XML). La Figura 2.13 muestra un diagrama con las interfaces de SAX
2.0. ContentHandler contiene los métodos para extraer la información de los eventos
producidos en el análisis. Locator y Attributes contiene solamente métodos que
permiten obtener información del análisis (“getter”). XMLReader y InputSource
contienen métodos “setter” para la configuración en el análisis.
<<interface>>
ContentHandler
<<interface>>
DTDHandler
+notationDecl()
+unparsedEntityDecl()
+startDocument()
+endDocument()
+startPrefixMapping()
+endPrefixMapping()
+startElement()
+endElement()
+characters()
+ignorableWhitespace()
+processingInstruction()
+skippedEntity()
+setDocumentLocator()
+notationDecl()
+unparsedEntityDecl()
<<interface>>
XMLReader
<<interface>>
Locator
+getSystemId()
+getPublicId()
+getLineNumber()
+getColumnNumber()
<<interface>>
LexicalHandler
<<interface>>
Attributes
+getValue()
+getURI()
+getLocalName()
+getRawName()
+getType()
+getLength()
SAX 2.0
+getProperty()
+getFeature()
+getContentHandler()
+getEntityresover()
+getErrorHandler()
+getDTDHandler()
+setProperty()
+setFeature()
+setContentHandler()
+setEntityresover()
+setErrorHandler()
+setDTDHandler()
+parse()
<<interface>>
XMLFilter
+getParent()
+setParent()
<<interface>>
DeclHandler
+elementDecl()
+attributeDecl()
+internalEntityDecl()
+externalEntityDecl()
<<interface>>
ErrorHandler
+warning()
+error()
+fatalError()
<<interface>>
EntityResolver
+resolveEntity()
InputSource
+getSystemId()
+getPublicId()
+getInputStream()
+getCharacterStream()
+setSystemId()
+setPublicId()
+setInputStream()
+setCharacterStream()
Figura 2.13: Interfaces de SAX 2.0.
La API SAX 2.0 se puede descargar de forma gratuita [APISAX20]. La Figura 2.14
muestra la interfaz ContentHandler el programador sobrescribe estos métodos para
obtener la información generada por los eventos. Los datos se proporcionan a través de
los parámetros formales de los métodos de la interfaz.
package org.xml.sax;
public interface ContentHandler{
public void setDocumentLocator (Locator locator);
public void startDocument () throws SAXException;
public void endDocument() throws SAXException;
public void startPrefixMapping (String prefix, String uri)
throws SAXException;
public void endPrefixMapping (String prefix) throws SAXException;
public void startElement (String uri, String localName,
String qName, Attributes atts) throws SAXException;
Contribución al análisis XML para la mejora en las prestaciones de memoria.
30
public void endElement (String uri, String localName,
String qName)throws SAXException;
public void characters (char ch[], int start, int length)
throws SAXException;
public void ignorableWhitespace (char ch[], int start,
int length)throws SAXException;
public void processingInstruction (String target,
String data)throws SAXException;
public void skippedEntity (String name) throws SAXException;
}
Figura 2.14: Interfaz ContentHandler.
Los analizadores Push (SAX) se pueden utilizar para construir el árbol DOM.
Mediante la obtención de la información generada por eventos en el proceso de lectura
con un analizador de tipo Push, se puede utilizan para construir el árbol DOM, de forma
que se pueda manipular fácilmente el documento.
4.4.3 Ejemplo con Push
En este apartado se presenta un ejemplo del modelo Push. El siguiente ejemplo realiza
la misma operación que en el ejemplo previo con DOM: imprime la información del
título el libro.
Primero, se escribe una clase que implementa ContentHandler, que reemplaza
los métodos para los tipos de eventos en los cuales se está interesado. En este ejemplo se
deja de lado el resto de eventos. La particularización de la clase ContentHandler,
proporciona los métodos para la gestión de los estados permitiendo eventos de
comienzo del elemento, fin de elemento, caracteres del evento. La operación es válida
para todos los elementos, no sólo para el elemento titulo.
public class MiManejadorDeConenido extends DefaultHandler {
boolean isTitle;
public void startElement(String uri, String localName,
String qName, Attributes atts) {
if (qName.equals("titulo"))
isTitle = true;
}
public void endElement(String uri, String localName,
String qName) {
if(qName.equals("titulo"))
isTitle = false;
}
public void characters(char[ ] chars, int start, int length) {
if(isTitle){
System.out.println("El titulo del libro es: "
+ new String(chars, start, length));
}
}
}
Figura 2.15: Funcionamiento de la API SAX.
Segundo, se configura el ContentHandler para el analizador SAX, y luego el
analizador comienza a procesar el documento XML. El analizador genera eventos y los
Capítulo 2. Análisis de la información XML.
31
coloca en el ContentHandler, mientras se lee el documento desde el comienzo hasta
el final.
public static void main(String args[]){
SAXParser parser = null;
DefaultHandler handler = new MiManejadorDeConenido();
SAXParserFactory factory = SAXParserFactory.newInstance();
try{
parser = factory.newSAXParser();
parser.parse(new FileInputStream("libros.xml"),handler);
}catch(Throwable e){
System.out.println("Error: "+e);
}
}
Figura 2.16: Configuración de la API SAX.
Comparado con DOM, el analizador SAX ofrece un mejor comportamiento en
memoria. Proporcionando un acceso al contenido del documento XML de bajo nivel. El
modelo Push tiene presenta un mejor comportamiento en memoria, ya que no necesita
cargar el documento entero en memoria, esto hace que sea más apropiado para
documentos grandes. Además, no se necesita crear objetos para todos los nodos, como
lo hace el modelo DOM. El modelo Push puede usarse en un amplio contexto, donde
varios manipuladores (ContentHandler) pueden registrarse y recibir eventos en
paralelo.
La desventaja de SAX es que tiene que implementar los manipuladores de eventos
para manejar todos los eventos entrantes. Se deben mantener el estado de los eventos en
el código de la aplicación. Ya que el analizador SAX no comunica metainformación
como lo hace DOM que soporta relaciones padre/hijo, haciendo más complejo mantener
el documento en la parte de la aplicación. Por tanto, siempre que no se necesite
mantener el documento entero, un analizador SAX puede ser una buena solución.
Una de las grandes desventajas de SAX es que no se puede navegar en el
documento. Por lo que no da soporte al lenguaje de caminos, XPath, que determinar la
ruta para extraer elementos del documento. Esta limitación también se muestra en los
“espacios de nombres”. Por lo que es una pobre elección para la manipulación o
modificación de un documento.
Las aplicaciones que necesiten sólo leer el contenido de un documento pueden
verse beneficiadas con el análisis SAX. Tal es el caso de las aplicaciones Business-toBusiness (B2B) y en las plataformas de aplicaciones integradas (EAI) que usan XML
como formato que encapsula, en el cual el receptor final simplemente recupera los
datos. SAX 2.0 tiene un mecanismo para construir filtrado que hace más fácil la salida
de un subconjunto del documento o hace simplemente una transformación simple del
documento.
32
Contribución al análisis XML para la mejora en las prestaciones de memoria.
4.4.4 Modelo Productor/Consumidor en Push
En este apartado se presenta gráficamente los componentes del modelo Push. La Figura
2.17 muestra el modelo Productor y Consumidor del modelo Push. En el dibujo se
observa como los datos son entregados directamente desde la fuente a la aplicación
como consumidor de ellos, a través de unos métodos, que proporciona la API SAX. Los
métodos deben ser sobreescritos por la aplicación para su manipulación.
El primer papel es un productor de eventos, el cual es el analizador XML. El
productor transforma en eventos la información leída del documento XML, para
proporcionarlos al consumidor. El productor “carga” los eventos en objetos para
servirlos al segundo componente, el consumidor de los datos XML.
Productor
Consumidor
void startDocument ()
void endDocument ()
void characters(char buf [], int offset, int len)
void endElement (String uri, String lNam, String qName) aplicación
void startElement(String uri, String localNam,
String qName, Attributes attrs)
analizador
datos
XML
Figura 2.17: Modelo Productor/consumidor en Push.
En vez de construir la representación en forma de árbol de la información XML, el
modelo Push convierte en eventos la información leída del documento XML. En este
modelo Push el patrón de comunicación típica es exclusivamente desde el productor al
consumidor.
La mayoría de aplicaciones que utilizan la implementación del modelo Push, SAX,
sólo tienen un productor de eventos aunque pueden tener más de uno. SAX es un
sistema conducido por eventos donde el analizador notifica a la aplicación cada vez y
analiza una sección de un documento XML. Estos eventos de bajo nivel se usan por la
aplicación para construir su representación en memoria del documento XML. Estos
métodos no permiten a una aplicación preguntar por el siguiente evento, el
funcionamiento del modelo Pull permite tratar los eventos bajo petición tal y como se
muestra en el siguiente apartado.
4.5 Análisis con Pull
4.5.1 Introducción
Pull es una nueva técnica de análisis, que al igual Push, es un modelo guiado por
eventos. Aunque, en vez de usar el mecanismo de SAX con el uso de los manipuladores
de eventos y sobreescritura de métodos, el modelo Pull devuelve eventos a medida que
la aplicación los solicita. Sus APIs pueden ser bidireccionales, dando la posibilidad de
Capítulo 2. Análisis de la información XML.
33
leer un documento XML y de poder generarlo. Las primeras implementaciones del tippo
Pull surgieron como envolvente de los eventos de tipo Push para construir eventos al
estilo Pull. Push realiza un análisis sin estado, son eventos de bajo nivel y muy
eficientes en memoria, pero son eventos sin estado. Pull proporciona un análisis
dependiente del estado. En algunas implementaciones se suele construir el árbol DOM y
posteriormente se construyen bucles al estilo iterador para recoger la información.
Mientras SAX devuelve diferentes tipos de eventos al ContentHandler, Pull
devuelve el evento a la aplicación pudiéndolo proporcionarlo como objeto.
La Figura 2.18 muestra que cuando una aplicación pide un evento, un analizador
Pull lee bajo demanda del documento XML y devuelve el evento a la aplicación. La
generación de eventos se produce de forma secuencial desde el comienzo del documento
hasta el final, con movimiento del cursor siempre hacia delante.
Analizador
Aplicación
Pull
libros.xml
START_ELEMENT “titulo”
CHARACTERS
END_ELEMENT “titulo”
Lectura bajo petición
next()
next()Imprime titulo
next()
Pide el evento
Figura 2.18: Funcionamiento del modelo Pull.
4.5.2 Diagrama UML para Pull
Un tercer modelo empleado para analizar documentos XML es Pull. Inicialmente este
modelo no presentaba ninguna API para su implementación. En la actualidad existe una
que puede encontrarse en [XPP], y otras implementaciones como StAX anteriormente
presentadas. Esta API al igual que el modelo Push está basada en eventos. En la Figura
2.19 se representa el diagrama UML de clases para la implementación JSR-173 [JSR173].
34
Contribución al análisis XML para la mejora en las prestaciones de memoria.
XMLStreamReader
XMLStreamWriter
QName
+close()
+flush()
+getNamespaceContext()
+getPrefix()
+getProperty()
+setDefaultNamespace()
+setNamespaceContext()
+setPrefix()
+writeAttribute()
+writeCData()
+writeCharacters()
+writeComment()
+writeDefaultNamespace()
+writeDTD()
+writeEmptyElement()
+writeEmptyElement()
+writeEndDocument()
+writeEndElement()
+writeEntityRef()
+writeNamespace()
+writeProcessingInstruction()
+writeProcessingInstruction()
+writeStartDocument()
+writeStartElement()
+writeStartElement()
+writeStartElement()
+getNamespaceURI()
+getLocalPart()
+getPrefix()
<<interface>>
NamespaceContext
+getNamespaceURI()
+getPrefix ()
+getPrefixes()
<<interface>>
XMLConstants
<<interface>>
XMLStreamConstants
<<interface>>
XMLStreamException
<<interface>>
Location
+getCharacterOffset()
+getColumnNumber()
+getLineNumber()
+getLocationURI()
+close()
+getAttributeCount()
+getAttributeLocalName()
+getAttributeName()
+getAttributeNamespace()
+getAttributePrefix()
+getAttributeType()
+getAttributeValue()
+getAttributeValue()
+getCharacterEncodingScheme()
+getElementText()
+getEncoding()
+getEventType()
+getLocalName()
+getLocation()
+getName()
+getNamespaceContext()
+getNamespaceCount()
+getNamespacePrefix()
+getNamespaceURI()
+getNamespaceURI()
+getNamespaceURI()
+getPIData()
+getPITarget()
+getProperty()
+getText()
+getTextCharacters()
+getTextCharacters()
+getTextLength()
+getTextStart()
+getVersion()
+hasName()
+hasNext()
+hasText()
+isAttributeSpecified()
+isCharacters()
+isEndElement()
+isStandalone()
+isStartElement()
+isWhiteSpace()
+next()
+nextTag()
+require()
+standaloneSet()
Figura 2.19: Pull (API para StAX).
Una implementación del modelo Pull es Streaming API for XML (StAX) [JSR173]. StAX da el control del análisis al programador mediante una API basada en un
simple iterador y un flujo de eventos subyacente. La Figura 2.20 se presentan los
métodos de la interfaz XMLStreamReader, con los métodos next() y hasNext(),
que permite recorrer todo el documento solicitando los eventos. Se puede observar
como se importa la interfaz QName, que soporta los nombres cualificados según se
especifica la norma [Bray 99].
package javax.xml.stream;
import java.io.Reader;
import javax.xml.namespace.NamespaceContext;
import javax.xml.namespace.QName;
public interface XMLStreamReader extends XMLStreamConstants {
public Object getProperty(java.lang.String name)
throws java.lang.IllegalArgumentException;
public int next() throws XMLStreamException;
public void require(int type, String namespaceURI,
String localName) throws XMLStreamException;
public String getElementText() throws XMLStreamException;
public int nextTag() throws XMLStreamException;
public boolean hasNext() throws XMLStreamException;
public void close() throws XMLStreamException;
public String getNamespaceURI(String prefix);
public boolean isStartElement();
public boolean isEndElement();
public boolean isCharacters();
Capítulo 2. Análisis de la información XML.
35
public boolean isWhiteSpace();
public String getAttributeValue(String namespaceURI, String
localName);
public int getAttributeCount();
public QName getAttributeName(int index);
public String getAttributeNamespace(int index);
public String getAttributeLocalName(int index);
public String getAttributePrefix(int index);
public String getAttributeType(int index);
public String getAttributeValue(int index);
public boolean isAttributeSpecified(int index);
public int getNamespaceCount();
public String getNamespacePrefix(int index);
public String getNamespaceURI(int index);
public NamespaceContext getNamespaceContext();
public int getEventType();
public String getText();
public char[] getTextCharacters();
public int getTextCharacters(int sourceStart, char[] target,
int targetStart, int length) throws XMLStreamException;
public int getTextStart();
public int getTextLength();
public String getEncoding();
public boolean hasText();
public Location getLocation();
public QName getName();
public String getLocalName();
public boolean hasName();
public String getNamespaceURI();
public String getPrefix();
public String getVersion();
public boolean isStandalone();
public boolean standaloneSet();
public String getCharacterEncodingScheme();
public String getPITarget();
public String getPIData();
}
Figura 2.20: Interfaz XMLStreamReader.
4.5.3 Ejemplos con Pull
Los métodos next() y hasNext() permiten a la aplicación desarrollar y preguntar
por el siguiente evento (Pull) en lugar de hacer frente a los eventos producidos mediante
en la forma en la que lo hace el modelo Push. Esto proporciona a un desarrollador un
mayor control del proceso de análisis del documento XML. StAX permite al
programador parar el procesamiento del documento, ir paso a paso, pasar de largo
algunas secciones del documento, y obtener subsecciones del documento.
Pull incluye la posibilidad de realizar la operación de lectura y escritura, de esta
forma las aplicaciones pueden usar las interfaces Pull sin tener en cuenta los detalles de
una implementación en particular.
A diferencia de DOM y Push, Pull especifica dos modelos de análisis. El modelo
cursor, que al igual que el modelo Push, simplemente devuelve eventos. El modelo
Contribución al análisis XML para la mejora en las prestaciones de memoria.
36
iterador devuelve eventos como objetos, lo cual proporciona una interfaz del tipo
procedimiento.
La Figura 2.21 presenta el análisis con la API StAX para los dos modelos.
XMLInputFactory factory = XMLInputFactory.newInstance();
Reader reader =
new InputStreamReader(new FileInputStream("libros.xml"));
XMLEventReader r = factory.createXMLEventReader( reader );
boolean isTitle = false;
while(r.hasNext()) {
XMLEvent e = r.next();
if(e.isStartElement() &&
((((StartElement)e).getName())
.getLocalPart()).equals("titulo")){
isTitle = true;
}else if(e.isCharacters() && isTitle){
System.out.println(""+((Characters)e).getData());
}else if(e.isEndElement() &&
((((EndElement)e).getName())
.getLocalPart()).equals("titulo")){
isTitle = false;
}
}
Figura 2.21: Funcionamiento del modelo Pull al estilo iterador.
En este ejemplo, la aplicación pide el siguiente evento, el cual hace que el
analizador StAX avance hacia el siguiente evento en la posición y devuelva el
correspondiente objeto asociado al evento. La aplicación puede acceder al contenido del
elemento mediante el método getData(), que devuelve la información del título del
libro.
El siguiente ejemplo imprime la información del título del libro usando el modelo
cursor.
XMLInputFactory factory = XMLInputFactory.newInstance();
Reader reader = new InputStreamReader(
new FileInputStream("libros.xml"));
XMLStreamReader r =
factory.createXMLStreamReader( reader );
boolean isTitle = false;
while(r.hasNext()) {
int evento = r.next();
switch(evento){
case XMLStreamConstants.START_ELEMENT:
if((r.getLocalName()).equals("titulo"))
isTitle = true;
break;
case XMLStreamConstants.CHARACTERS:
if(isTitle)
System.out.println(r.getText());
break;
case XMLStreamConstants.END_ELEMENT:
if((r.getLocalName()).equals("titulo"))
isTitle = false;
break;
}
}
Figura 2.22: Funcionamiento del modelo Pull siguiendo el modelo cursor.
Capítulo 2. Análisis de la información XML.
37
En este ejemplo, la aplicación pregunta el siguiente evento, usando la llamada al
método r.next(). Esto hace que el analizador StAX mueva el cursor hacia la
posición del siguiente evento. Si este evento indica el comienzo del elemento “titulo”, el
código de la aplicación llamará a r.next() una vez más, para avanzar el cursor, y
obtendrá entonces el texto para el elemento, usando el método r.getText().
El modelo de funcionamiento al estilo cursor de StAX se puede comparar al análisis
SAX. Aunque con StAX, la aplicación tiene el control del análisis, lo cual hace el
código más fácil de escribir y mantener. StAX también proporciona el modelo iterador
para fácil uso, pero en este caso, creando objetos para los eventos que tiene un coste en
cuanto al funcionamiento. A diferencia de SAX, que necesita que la aplicación
mantenga el estado de donde está el documento, StAX en función de su funcionamiento
de generar eventos bajo petición, libera a la aplicación de esta tarea.
En comparación con DOM, StAX tiene la misma desventaja que SAX en términos
de soporte para la navegación por todo el documento. La navegación hacia atrás del
documento no es posible, es decir, se accede a la información del documento
secuencialmente desde el comienzo hasta el final con demanda de eventos bajo petición
por parte de la aplicación. Aunque pueda parecer que StAX proporciona las mismas
prestaciones que SAX para modificar el documento, StAX es una API bidireccional con
capacidad de escritura de un documento XML.
4.5.4 Modelo Productor y Consumidor en Pull
En este apartado se presenta gráficamente los componentes del modelo Pull. La Figura
2.22 se muestra el modelo Productor y Consumidor del modelo Pull. En el dibujo se
observa como los datos son entregados directamente desde la fuente a la aplicación
como consumidor de ellos, bajo petición.
El consumidor de datos XML debe pedirlos al productor para obtener la
información. Las peticiones desde el consumidor al productor se realizan con el método
"next()". Este devuelve información relacionada con el siguiente evento. El productor
transforma en eventos la información leída del documento XML, para proporcionarlos
al consumidor. En la implementación del modelo Pull, StAX, esta información puede
ser un objeto de la clase XMLEvent, tal y como se especifica en el modelo iterador, o
bien un valor entero, de la interfax XMLStreamConstants, del modelo cursor, tal y
como se presentó con los ejemplos de apartados anteriores.
38
Contribución al análisis XML para la mejora en las prestaciones de memoria.
Productor
Consumidor
boolean hasNext ()
true
int next()
START_DOCUMENT / START_ELEMENT, ...
analizador
aplicación
datos
XML
Figura 2.23: Modelo Productor/consumidor en Pull.
A diferencia del modelo Push, la aplicación para la manipulación de los datos XML
no tiene que sobreescribir los métodos. Y a diferencia del modelo DOM no construye
una representación en forma de jerárquica del documento.
El modelo Pull usa dos métodos de los objetos de un iterador next() y
hasNext(), para manipular los datos XML, como los iteradores de Java. Un iterador
es un objeto que puede moverse a lo largo de una secuencia de objetos y selecciona cada
uno de la secuencia.
El modelo Iterador debería tener un peor funcionamiento en memoria que el modelo
cursor, ya que de forma necesaria construye un objeto para cada evento que se genera
por parte del productor de eventos. El modelo Pull permite al programador parar el
procesamiento del documento, ir paso a paso por secciones del documento, y obtener
secciones del documento.
5 Selección del modelo de análisis
5.1 Introducción
En este apartado se hace una valoración de los tres modelos de análisis de los
documentos XML, separándolo en tres apartados, consideraciones a favor o pros,
consideraciones en contra o contras, y situación en la que es mejor utilizarlo. Estos
puntos se discuten a continuación.
5.2 Pros
Las tres técnicas de análisis de los documentos XML tienen puntos a favor de cara a su
uso. Este apartado presenta los aspectos positivos que presentan las distintas técnicas de
manipulación de los documentos XML. Estos se presentan de forma esquemática en la
Tabla 2.7.
El modelo DOM presenta una interfaz de fácil uso para un programador, con una
amplio y rico conjunto de posibilidades. La estructura jerárquica de los documentos
XML (con un único nodo raíz, e hijos apartir de este elemento) hacen que sea una forma
Capítulo 2. Análisis de la información XML.
39
natural manejar toda la información siguiendo la estructura que el documento tiene. La
manipulación del documento siguiendo una estructura cercana a la del documento XML
es sencilla, fácil e intuitiva.
Los modelos basados en eventos, tiene un buen comportamiento en memoria. Estos
entregan los eventos producidos en el proceso de análisis directamente a la aplicación.
Por ello se pueden filtrar operaciones, filtrar los eventos que proceden del analizador.
DOM
Push
Pull
Carga el árbol entero en Buen comportamiento en La aplicación controla el
memoria.
memoria (a priori).
análisis.
Gran conjunto de APIs
Permite el registro de Capacidades de filtrado
múltiples manipuladores
Fácil navegación y uso
Eficiente recuperación de
datos
Tabla 2.7: Pros de los modelos de análisis.
Por tanto, los modelos basados en eventos (Push y Pull) presentan una mayor
simplicidad y eficiencia de con su capacidad de filtrado pudiendose realiar operaciones
de filtrado los eventos producidos; donde los eventos del modelo Pull son bajo petición.
Mientras que DOM es un modelo que manipula la información en forma de objetos,
construyéndolos a partir de los datos XML para una manipulación rápida y un acceso
directo después de construir la estructura jerárquica.
5.2 Contras
DOM proporciona APIs a los programadores para la manipulación en forma de árbol. La
primera impresión parece una ventaja para el desarrollador ya que no requiere escribir
código para analizar. Pero esta simplicidad tiene un coste: el funcionamiento. Algunas
implementaciones necesitan el documento en memoria, de esta forma para documentos
grandes debería leer todo el documento antes de realizar ninguna acción.
Otra desventaja de DOM es que el programador debería usar el árbol como base par
el manejo del documento XML. Para muchas aplicaciones el modelo de árbol podría no
ser la forma de representación de los datos más apropiada.
DOM
El documento XML entero
debe analizarse una vez al
menos
Costosa la carga el árbol
entero en memoria
Nodos de DOM genérica no
ideal para asociarlo a tipos
de objeto
Push
Pull
No carga el documento en No carga el documento en
memoria.
memoria.
No soporta la modificación No soporta la modificación
XML “en el lugar”
XML “en el lugar”
No soporta alcance para
espacio de nombres
Tabla 2.8: Contras de los modelos de análisis.
40
Contribución al análisis XML para la mejora en las prestaciones de memoria.
5.3 Mejor uso
Se puede analizar un documento XML con DOM, Push (SAX) o Pull (Streaming API).
En esta sección se describe cuando es mejor utilizar cada uno de ellos.
La carga de todo el documento en memoria que realiza el modelo DOM es útil
debido a que se puede acceder fácilmente a toda la información XML, pero supone un
gran consumo de memoria.
Push es rápido y eficiente, pero su modelo de eventos es más utilizado como
filtrado independiente del estado. Por ejemplo, un analizador SAX llama un método en
tu aplicación cuando se encuentra una etiqueta de un elemento y llama un método
diferente cuando se encuentra texto. Si el procesamiento que se hace es independiente
del estado, significando esto que no depende de los elementos que han se han producido
antes, entonces SAX trabaja bien.
Por otra parte, para procesamiento, donde el programa necesita hacer una cosa con
un dato bajo un elemento A pero algo diferente con un elemento B, entonces el modelo
Pull es la mejor elección.
DOM
Aplicaciones que necesiten
alguna modificación de
documentos XML, o para
XSLT.
Push
Pull
Aplicaciones que solo lean Aplicaciones que necesiten
del
XML
(no
para un modelo de flujo y soporte
manipulación
del de espacio de nombres (no
documento)
para manipulación)
Tabla 2.9: Mejor caso para usar el modelos.
DOM es bueno para pequeños documentos, y para la edición de estructuras del
documento XML añadiendo y borrando elementos.
Cuando se necesite modificar una estructura XML, especialmente cuando se
necesite modificar la de forma interactiva, la estructura en memoria toma más sentido.
6 Codificación de texto. Implementaciones.
6.1 Introducción
La codificación de texto ha sido tradicionalmente prometedora para hacer explicita la
comprensión de (o teorías relacionadas) un documento [Coombs 87] [SperbergMcQueen 01a]. Lenguajes de Marcas basados en SGML/XML tales como DocBook
[Walsh 06] o TEI [ACH/ACL/ALLC 94] se han presentado como claros exponentes.
Aunque existen límites al grado de especificación en el que puede conseguirse con la
especificación de los lenguajes. El problema se podría considerar por el hecho de que
aunque los lenguajes de marcas basados en SGML/XML proporcionan reglas explícitas
para la sintaxis de validación y bien formado, pueden proporcionar otra semántica
también válida. Como resultado se proporcionan estructuras de datos generadas
razonablemente bien formadas, pero no son, al menos no sin un posterior desarrollo,
Capítulo 2. Análisis de la información XML.
41
efectivas para la interpretación de la expresividad [Renear 01]. Muchos desarrolladores
de sistemas de programación desean tener un mecanismo para especificar, de una forma
más concreta como obtener las DTDs, qué estructura de datos debe mantener la
aplicación o qué tablas y columnas en una base de datos SQL se pueden construir con
los datos XML cuando se reciben.
El área que nos concierne es la tarea de proporcionar una forma clara y explícita el
significado e interpretación de las marcas. Muchos de los productos y proyectos que
usan XML y SGML asumen de forma implícita que las marcas son el significado, y lo
utilizan para regir el procesamiento de los datos. Un gran número de autores han
descrito sistemas para explotar la información del significado o interpretación de las
marcas, entre estos los más relevantes se describen en [Simons 97], [Simons 99], [Welty
97], [Ramalho 99], [Sperberg-McQueen et al. 01a], [Sperberg-McQueen 01b], y
[Thompson 01]. Hay una gran variedad de razones para que sea un problema
interesante. La mejor forma de comprender el significado asignado a las marcas es que
proporciona una mejor forma de escribir, una forma buena de usar herramientas para
crear, gestionar las marcas.
Ramalho [Ramalho 99] da un marco en el que habilita sustancialmente mejora a la
validación y la calidad para asegurar, y habilitar de forma automática un sistema para
detectar un gran número de errores en el uso de las marcas o en los datos que no pueden
detectados mediante el simple análisis sintáctico o mediante métodos orientados a tipos
de datos.
Welty [Welty 97] argumenta que una aproximación más formal para la semántica
de marcas aumentará considerablemente la mejora en la recuperación y extracción de la
información. Siempre que una clase de inferencia lógica tenga un consumo en tiempo
excesivo para realizar una consulta, esto podría ayudar a reducir el uso de la práctica de
marcas, o en enmascarar la variación en marcas con colecciones heterogéneas [Schatz
96].
Para una documentación que no use XML, el significado de las marcas podría estar
en su mapeo a estructuras de datos, o más bien al significado que puedan tener en el
rango de la aplicación de estructuras de datos y que las marcas podrían validar el mapeo;
esta poción la ha presentado Henry Thompson [Thompson 01]. En un puro nivel
práctico, experiencia con sistemas de esta clase se describen aquí y se puede esperar que
proporcionen información útil de cómo hacer la documentación de la aplicación de las
marcas de una forma clara y útil. En otros trabajos [Sperberg-McQueen et al. 2001a], se
propone identificar el significado de las marcas en un documento como un conjunto de
inferencias.
42
Contribución al análisis XML para la mejora en las prestaciones de memoria.
6.2 DocBook
DocBook es un conjunto de marcas muy extendido para la descripción de libros
artículos, y otros documentos, normalmente de carácter técnico. DocBook esta definido
usando la sintaxis DTD nativa de SGML y XML. Al igual que HTML, DocBook es un
ejemplo de lenguaje de marcas definido sobre SGML/XML.
DocBook tiene unos 15 años de antigüedad. Comenzó en 1991 como un proyecto
conjunto de HaL Computer Systems y O’Reilly. Su popularidad crece, y se presenta para
su mantenimiento por un organismo, el Davenport Group. A mitad de 1998, se convirtió
en un Comité Técnico (TC) de Organization for the Advancement of Structured
Information Standards (OASIS).
La DTD de DocBook fue en un principio diseñada e implementada por HaL
Computer Systems y O’Reilly. & Associates. Se desarrolló inicialmente para facilitar el
intercambio de documentos UNIX inicialmente marcado con troff. Su diseño es el que
en parte sirvió como base para un proyecto posterior con intercambio SGML. Se formó
un comité técnico de DocBook en OASIS a mediados de 1998, con Eduardo Gutentar de
Sun Microsystems. DocBook V3.1, se publicó en febrero de 1999, fue la primera
entrega de OASIS. En febrero de 2001, OASIS hizo las especificaciones oficiales de
DocBook SGML V4.1 y DocBook XML V4.1.2. Posteriormente se han incorporado
además de la DTD, XML Schema [Thompson 01], RELAX y TREX [Clark 01c].
Walsh [Walsh 02] explica como llevar los metadatos a dispositivos con menor
capacidad de recursos, como PDA, y soportando transformación XSLT. Además [Walsh
04] desarrolla una gramática RELAX NG nativa para DocBook.
6.3 UBL (Universal Business Language)
Jon Bosak [UBL 06], considerado como el padre de XML, ha desarrollado (Universal
Business Language). UBL que se ha convertido en una especificación mantenida por
OASIS. UBL soluciona los problemas de intercambio de documentos para negocios en
un formato XML. Su propósito es definir una librería estándar para documentos para el
intercambio de documentos electrónicos XML.
El ímpetu para dar comienzo al comité técnico de UBL procede del deseo de un
número de participantes ebXML[ebXML] para definir un estándar XML para llevar el
formato a ebXML, es decir, una contrapartida XML a los estándares EDI tradicionales.
Tal y como se describen en ebXML, el conjunto ebXML de especificaciones, muchas de
ellas ahora estandarizadas como ISO 15000 [ISO 15000], proporcionan una completa
infraestructura basada en XML que da funciones para utilizar EDI sobre Internet.
UBL proporciona un formato de datos estándar para el intercambio de mensajes en
sobre las infraestructuras que la soportan. Aunque, UBL está diseñado para ser
“agnóstico” con respecto a la infraestructura, y los mensajes UBL pueden usarse en un
Capítulo 2. Análisis de la información XML.
43
amplio rango de contexto desde la más compleja SOA (Service-Oriented Architectures)
al más simple intercambio de documentos via correo electrónico.
6.4 Analizadores. Trabajos relacionados.
Las herramientas de mayor nivel necesitan de elementos que extraigan la
información de forma eficiente, esta operación la realiza los analizadores XML. Estos
programas condicionan el comportamiento de la aplicación y la forma de utilizarlo.
Tanto el funcionamiento como la implementación han dependido de las
implementaciones realizadas sobre SGML. Lécluse [Lécluse 96] presenta una
taxonomía de los analizadores SGML, donde compara las aproximaciones basadas en
árboles frente a eventos.
Los documentos XML deben estar bien formados y pueden estar validados
siguiendo alguna forma de especificar su estructura.
Muchos de los analizadores siguen los modelos e implementaciones que se
realizaron en SGML. Las herramientas XML inicialmente se han adaptado de las
previas existentes en SGML. Jade [Jade], es el procesador de James Clark que soporta
DSSSL (Document Style Semantics and Specification Language) [ISO 10179], que es
un precedente temporal de XSLT [Clark 99] usado por usuarios Linux, ya trasladado a
la plataforma windows. sgmls de Clark es el analizador SGML más utilizado.
OpenJade [OpenJade] es la evolución de Jade. Junto con DSSSLprint y
NEXTPublisher [Next] es una propuesta de Next Solution, OpenJade es una de las
pocas implementaciones de este estándar, y es la herramienta más usada por el proyecto
DocBook para el procesamiento DSSSL. Farreres [Farreres 02] continuó con el
desarrollo de OpenJade.
expat o XT [XT] (analizador y procesador XSLT, respectivamente) son utilizados
por muchos desarrolladores XML también implementados por James Clark. Dada su
importancia en Python [Python], Perl [Perl] y proyectos Apache, expat es uno de los
analizadores más utilizados.
Por otra parte, el proceso de desarrollo del propio SAX comenzó el 13 de
Diciembre de 1997, principalmente como resultado de la persistencia de Peter MurrayRust, que es el autor de un navegador basado en su analizador Java (JUMBO). Peter,
Tim Bray (autor del analizador Lark XML y uno de los editores de la especificación
XML) y David Meggison (autor del analizador XML Ælfred de Microstar) hicieron una
API estándar XML para analizadores basadas en eventos. La discusión se realiza de
forma pública en una lista de correo XML-DEV, con la contribución de mucha gente
aportando comentarios e ideas. Al final Jon Bosak, permitió a SAX usar el dominio
xml.org para el nombre del paquete org.xml.sax. La comunidad de desarrolladores
XML-DEV desarrolló SAX 1.0, que terminó hacia el final del 1998.
44
Contribución al análisis XML para la mejora en las prestaciones de memoria.
DOM surgido bajo el amparo del organismo W3C, y es una forma “natural” de
pensar en un documento de marcas. Es un estándar maduro que ha ido unido a la
recomendación XML desde un principio, tal y como se ha detallado anteriormente.
Casarini [Casarini 01] implementa Gnomo (GNU Network Object Model
Environment) DOM Engine (Gnome2) que es una implementación DOM que apunta a
proporcionar interfaces para documentos XML para programadores Gnome.
Jose Luis Sierra [JLSierra 02] propone un modelo de procesamiento de árboles que
permite la extensión modular de los intérpretes de marcas, basándose en permitir la
extensibilidad de las marcas según [Ousterhout 90], y permitiendo modularidad en los
intérpretes.
DOM4J [DOM4J] es una librería con código abierto para el trabajo con XPath y
XSLT sobre la plataforma Java usando Java Collections Framework y con amplio
soporte para DOM, SAX y JAXP.
JDOM [JDOM] proporciona una solución usando XML para el lenguaje Java que
sea tan simple como Java en sí misma. JDOM está centrada en el lenguaje de
programación Java y optimizada para este lenguaje. Utiliza sus clases y es una API de
fácil manejo para los desarrolladores actuales de Java, y proporciona un bajo coste de
puntos de entrada para usar XML. JDOM tiene un buen comportamiento en el
intercambio de los estándares existentes tales como Simple API for XML y DOM, esta
no es una capa de abstracción o mejora a estas APIs. JDOM proporciona una
implementación robusta, con un peso ligero de lectura y escritura de datos XML sin la
compleja y las opciones de consumo de memoria.
Xerces Java [Xerces], es otra implementación DOM de otro proyecto Apache.
Xerces fue originalmente basado en un analizador Java de IBM, conocido como
XML4J. El desarrollo de Xerces Java 2 provocó una versión beta. La actual versión se
conoce como Xerces Java 1. Al igual que Crimson, el analizador Xerces puede ser
accedido a través de una interfaz SAX2 así como DOM. Aunque, Xerces no
proporciona ninguna forma de usar un analizador diferente al analizador SAX2 con el
Xerces de DOM. Xerces Java incluye suporte de validación contra ambos DTDs y XML
Schema.
Xerces Java también soporta un modo de expansión para DOM, en el cual los
componentes del documento son inicialmente representados en un formato compacto
que es expandido a una amplia representación DOM. Este modo es para permitir un
análisis más rápido y reducir la memoria de uso, particularmente para aplicaciones que
podrían usar solo parte de la entrada del documento. Al igual que Crimson, Xerces es un
código abierto bajo licencia Apache. La versión Xerces 1.4.2 tiene un tamaño de
1.8MB.
Capítulo 2. Análisis de la información XML.
45
Harold propone a XOM [Harold 04] como implementación basada en árboles cuya
mejora es en el tamaño de la aplicación que es de 2 a 3 veces menor que JDOM
[JDOM]. Sin embargo, desborda la metodología estructurada de los objetos que dice
seguir (Java) proporcionando un uso anárquico y extenso de objetos y clases. Descarta el
uso de Interfaces en beneficio de clases. Su implementación no soporta serialización de
objetos. Las páginas web que mantiene a título individual son una extensa recopilación
de tópicos y trabajos relacionados con XML.
Electric XML [EXML] procede de un proyecto comercial soportando entornos
distribuidos. Difiere de los modelos presentados antes en que soporta solo un
subconjunto de documentos XML, no proporciona ningún soporte para validación, y
tiene una licencia más restrictiva. Aunque EXML ofrece la ventaja de tener un tamaño
pequeño y soporte directo para un subconjunto de XPath. No proporciona ninguna
funcionalidad para convertir en o de flujo de eventos DOM o SAX2 excepto de un
texto. EXML es código abierto bajo The Mind Electric una licencia restringida que
prohíbe incrustarlo en cierto tipo de aplicaciones o librerías. La versión Electric XML
2.2 tiene un tamaño de 0.05MB de jar.
Krupnikov [Krupnikov 03] propone Streaming Transformations and Glue
framework (STnG), es una herramienta de transformación a partir de los datos
estructurados en forma arbórea.
Java Web Services Developer Pack (Java WSDP) [JWSDP] es un kit de desarrollo
integrado y gratuito que se puede utilizar para construir, probar y desarrollar
aplicaciones XML, servicios Web, y aplicaciones Web con la última tecnología de
servicios Web e implementación de estándar. Java WSDP 1.6 proporciona elección de
desarrollo y flexibilidad para soportar el Sun Java System Application Server Platform
Edition 8, el Sun Java System Web Server 6.1, y Tomcat 5.0 para Java WSDP 1.5 Web
para el desarrollo de servicios Web.
Gorman [Gorman 04] presenta un analizador XML basado en eventos que se
implementa sobre el analizador SAX, proporcionando un uso sencillo sin reducir las
ventajas del analizador SAX. Ofrece además algunas ventajas del analizador DOM,
presentando un dato en una forma mucho más cercana al punto de vista del diseñador de
un documento XML, y añadiendo algunas herramientas de soporte para facilitar el
diseño, implementando la Generic XML Stream Parser API.
La diferencia en el soporte de un estilo de programación que soporte una API de un
analizador de flujo (stream o basado en eventos), sin embargo el estilo podría parecer
extraño para un desarrollador SAX o DOM. Este estilo de programación depende del
uso implícito y explícito de ambos en el uso de pilas para salvar y restaurar el estado
[Knuth 73]. El procesamiento XML visto desde el programador es como una actividad
en un flujo en serie de datos, con un procesamiento controlado indirectamente mediante
46
Contribución al análisis XML para la mejora en las prestaciones de memoria.
cambio de estados que afectan al proceso de salida en lugar de permitir que sea el
proceso de salida en sí para realizar un proceso de decisión basado en el proceso que
debe de realizar como resultado de salida. Los métodos del elemento ejercitan este
control colocando (pushing) el estado original y modificando el estado actual cuando se
introduce un elemento y, extrayendo (“poping”) el estado original cuando se sale de un
elemento. En este estilo de programación, un método del elemento es un buen “objeto”
para representar un elemento, ya que,
 El método responde directamente a la actividad de análisis del elemento.
 La invocación analizada del método corresponde a la jerarquía del elemento
en el documento.

El anidamiento del procesamiento de los estados creados por el anidamiento
de la invocación de los métodos corresponde al anidamiento de la semántica
de las interpretaciones implicadas mediante la jerarquía de los elementos y
sus atributos.
Si se puede aceptar la noción de un método como “objeto”, la implementación de
Gorman puede considerarse como una buena aproximación del procesamiento de un
documento XML orientado a objetos.
Sam Wilmott [Wilmott c03] describe las corrutinas, que no es una idea nueva,
Conway [Conway 63] muestra como las corutinas difieren de la forma actual de
transferir el control entre dos líneas de ejecución, y explica como las corutinas se
utilizan para coordinar un par de actividades síncronas.
Gorman [Gorman 04] muestra como transferir el control en un programa Java, esto
se muestra en la Figura 2.24, a través de invocación de un método el cual especifica el
punto en el que la ejecución comienza en el destino, y suspende su ejecución en el punto
actual. Posteriormente devuelve el punto en el que la ejecución fue suspendida.
Principal
Subordinado
V
|
suspende | --- invoca (1) ------------+-> | comienzo
/
|
/
|
/
|
reanuda | <-- devuelve(1) -------+---+-- | fin
|
/
/
|
/
/
|
/
/
suspende | --- invoca (2) --->+
/
/
/
/
reanuda | <-- devuelve (2) --+
|
V
Figura 2.24: Transferencia del control a través de la invocación de métodos.
Capítulo 2. Análisis de la información XML.
47
Se puede percibir como el control de transferencia es asimétrico. Las corutinas, por
otra parte, dan igualdad a ambas líneas de ejecución. Cada línea elige cuando ceder el
control a la otra, pero no especifica el punto de comienzo en la otra línea. En lugar de
esto, la otra línea de ejecución continua desde el punto de vista en el que previamente
cede el control, tal y como se presenta en la Figura 2.25.
Corutina 1
Corutina 2
V
|
suspende | -- reanuda 2 ----------------> |
|
|
|
continúa | <---------------- reanuda 1 -- |
|
|
|
suspende | -- reanuda 2 ----------------> |
|
|
|
continúa | <---------------- reanuda 1 -- |
|
|
V
continúa
suspende
continúa
suspende
Figura 2.25: Transferencia de control en corutinas.
Se pueden usar corutinas para implementar la API en un analizador SAX. Para
realizarlo se transforma cada par de etiquetas de comienzo y final del evento del
analizador SAX en un único método de invocación (tal y como se muestra en la Figura
2.25, esto significa que cada uno de los métodos invocados debería suspenderse
mientras el analizador SAX se ejecuta en el siguiente evento, el método no puede
compartir la pila con el analizador SAX. En Java, (y en otros lenguajes como C++), la
única forma de ejecutarlo con una pila separa es la ejecución con hilos separados (o
separando los procesos. Las corutinas transfieren el control mediante la suspensión de
un método, en lugar de invocar un método y devolverlo desde el método.
El analizador SAX se ejecuta en una corutina, que hereda de Thread añadiendo
métodos para soportar la transferencia del control ilustrada en la figura.
Aplicación
Analizador
V
|
suspende | -- comienza el analizador ---->| comienzo
|
|
continúa | <----- cede a la aplicación -- | suspende
|
|
suspende | -- cede al analizador
-----> | continúa
|
|
continue | <----- cede a la aplicación -- | suspende
|
|
suspende | -- cede al analizador
-----> | continúa
48
Contribución al análisis XML para la mejora en las prestaciones de memoria.
|
|
V
Figura 2.26: Ejecución de un analizador SAX como una corutina.
En la figura se puede observar que el control de transferencia es simétrico después
de que el analizador haya comenzado. La Figura 2.27 muestra como una
implementación podría coordinar una aplicación un analizador SAX cuando se analiza
un documento simple que contiene dos elementos anidados con algunos elementos
PCDATA en su interior.
Aplicación
Actividad
SAX Parser
Actividad
V
|
suspende | -- comienza el analizador ------->|
|
|
continúa | <------- cede a la application -- |
|
|
|
suspende | -- cede al analizador-----------> |
|
|
continue | <------------ startElement (a) -- |
| comienza elemento método (a)
|
|
suspende | -- cede al analizador ----------> |
suspend element method (a) |
|
continúa | <------------ startElement (b) -- |
| comienza elemento método (b)
|
|
suspende | -- cede al analizador ----------> |
suspende element method (b) |
|
continúa | <-----evento characters
-- |
| comienza método characters
|
|
suspende | -- devuelve --------------------> |
|
|
continúa | <-------------- endElement (b) -- |
| reanuda element method (b)
|
|
suspende | -- devuelve --------------------> |
|
|
continúa | <-------------- endElement (a) -- |
| reanuda elemento methodo (a)
|
|
suspende | -- devuelve -------------------> |
|
|
continúa | <---------------------- reanuda-- |
|
|
V
método API
Actividad y alcance
a
b
char
comienza
suspende
continúa
suspende
continúa
suspende
continúa
suspende
continúa
suspende
continúa
suspende
continúa
fin
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Capítulo 2. Análisis de la información XML.
49
Figura 2.27: Ejecución de un analizador SAX como una corutinas.
El alcance del elemento del método a encierra el alcance del elemento del método b,
ya que el elemento del método b es invocado y devuelto mientras el elemento del
método a se suspende. De igual forma, el alcance de los métodos para la obtención de
los caracteres está dentro del elemento de método b.
La implementación de Gorman está escrita en Java, aunque lenguajes como perl
[perl] y Python [Python] podría tener un mejor comportamiento aprovechando las
ventajas con respecto a las operaciones de texto. Los requisitos esenciales para cualquier
lenguaje es que permita un analizador basado en eventos y una aplicación para ejecutar
en una pila separada pero sincronizada con los demás, como podría ser con las
corrutinas [Wilmott 03]. Java no soporta las corutinas y por tanto es necesario usar hilos
sincronizados separados. La misma aproximación debería trabajar en Python, usando
Python rlock. Aunque Python soporta generadores. Un generador produce la salida de
una petición, pero no usa la misma pila como requisito de la aplicación. Por lo tanto, un
analizador que se ejecute en un generador debería ser más o menos equivalente a un
analizador ejecutándose en una corutina.
Sam Wilmott toma una aproximación diferente, creando con OmniMark
[OmniMark] un lenguaje con procesamiento de flujo.
Jeremy Carrol [Carrol 01] aboga por implementar otra capa sobre un analizador
basado en eventos como SAX pero las medidas muestran que las corutinas sobrecarga el
uso en tiempo de procesamiento, debido al intercambio de hilos de Java. Por esta razón,
Carrol recomienda usar un nivel más bajo para guiar la máquina de estados de alto nivel
(él llama esto “invertir” el alto nivel del analizador) de esta forma el bajo nivel puede
ejecutar el alto nivel como una subrutina de más bajo nivel. Este autor no ha seguido en
esta línea, pero comenta que sus propias medidas muestran que la ejecución de una API
de eventos tiene una mayor velocidad que una DOM.
XML Pull Parser (XPP)[XPP] [XPP2] es un desarrollo que muestra una
aproximación diferente para analizar XML. Al igual que EXML, XPP proporciona
soporte solo para un subconjunto de documentos XML y no proporciona soporte para
validación. Contiene la ventaja de tener un tamaño pequeño. Esta ventaja, junto con su
aproximación de análisis Pull, hace que sea una buena alternativa para el análisis XML.
XPP usa interfaces casi exclusivamente, pero este usa solo un pequeño número de
clases en total. La limitación que restringe XPP a un subconjunto de documentos XML
no soporta entidades, comentarios, o procesamiento de instrucciones en el documento.
XPP crea una estructura de documento consistente solo en elementos, atributos
(incluyendo espacio de nombres), y contenidos de texto. Esto es una seria limitación
para algún tipo de aplicaciones. XPP no proporciona ninguna forma de convertir de o a
50
Contribución al análisis XML para la mejora en las prestaciones de memoria.
DOM o SAX2. XPP es código abierto bajo licencia Apache. La versión PullParser 2.0.1
Beta 8 tienen un tamaño de 0.04MB de jar.
La implementación StAX [JSR-173] está desarrollada en los apartados anteriores.
NekoPull [NekoPull] extiende a Xerces Native Interface (XNI) y está diseñado para
proporcionar funcionalidad de análisis Pull.
Se puede representar de forma gráfica e ilustrar como se relacionan las APIs XML
unas con otras. En la Figura 2.27 se representa la clasificación de flujo y eventos sobre
las APIs para el análisis XML. Se puede ver que las APIs caen dentro de alguna de las
dos siguientes categorías: orientada a flujo y orientada a eventos. Hay APIs que pueden
contener ambos tipos de funcionamiento, orientadas a flujo y a eventos, tales como
XPP2 aunque no es lo normal. En la región de las APIs de flujo existen las
implementaciones Push (SAX) y las Pull.
La principal diferencia para el modelo Pull está en como los eventos XML se
propagan, de esta forma distinguimos tres grupos:



La aproximación del tipo Cursor, donde los eventos están disponibles
directamente procedentes del analizador como propiedad y no se crea objeto
para representar el evento XML (como por ejemplo, XmlPull, XPP3,
kXML2, StAX en modo Cursor).
La aproximación del tipo Iterador, cada evento XML se representa como un
objeto nuevo (kXML1, StAX en modo Iterador).
Una aproximación mezcla de las dos anteriores (reutilización de eventos):
los objetos de los eventos son utilizados pero su creación puede evitarse y
pueden reutilizarse los objetos utilizados por los eventos (NekoPull, XPP1,
XPP2).
Push
SAX
Eventos
Árboles
DOM
DOM4J
JDOM
Me
zc
Cu
rso
r
la
Pull
BEA
kXML1 Iterador
XPP2
StAX
Neko
XmlPull
Pull
(XNI2XmlPull,
kXML2,
XPP1
XPP3)
…
Figura 2.28: Taxonomía de las APIs XML.
Stefan Haustein y Aleksander Slominski presentan una línea temporal para las APIs
XML escritas en Java. En la Figura 2.29 se muestran las APIs basadas en eventos tanto
Push como Pull.
Capítulo 2. Análisis de la información XML.
Push
SAX1
Ælfred
51
SAX2
Pull
kXML1
XP
NekoPull
www.trantor.de/xml/
XPP1
BEA
Iterador
Cursor
1998
1999
StAX
XmlPull1:
kXML2
XPP3
2000
2001
2002
2003
2004
2005
Figura 2.29: Temporización de las APIs XML en Java según Slominski y Haustein.
Jimmy Zhang [Zhang 04a][Zhang 04b] implementa el Virtual Token Descriptor –
VTD- para el análisis XML [VTD-XML]. VTD-XML usa enteros de 64 bit para
representar el comienzo, longitud, tipo y otra información relevante relacionada con un
token para el análisis XML suponiendo una considerable mejora en las prestaciones de
memoria utilizada durante el análisis.
6.5 Validación de documentos XML.
La validación de los documentos lleva asociada la forma en la que se especifica la
información contenida en el documento XML, habitualmente se dice que hay un
“modelo de contenido” para un documento XML. Murata [Murata 00a], hace una
taxonomía de los lenguajes de modelado XML usando la teoría de lenguajes formales.
El modelo de contenido puede expresarse de alguna de las siguientes formas:
 DTD, que es el modelo heredado de SGML y recogido en la recomendación
XML.
 XML Schema [Thompson 01], una iniciativa del W3C que concluyó con
una amplia recomendación, con un extenso número de participantes en la
propuesta.
 Schematron [ISO/IEC 19757], que está propuesto para la estandarización
ISO.
 RELAX NG [Clark 01b], elaborado, diseñado e implementado por James
Clark y estándar internacional (ISO).
Las implementaciones de Sun hechas con Java siempre son un punto de referencia,
este es el caso de Sun Multi-Schema XML Validator (MSV), implementado por Kohsuke
Kawaguchi [Kawaguchi 03]. Su tamaño es de 2.3 MB y da soporte a varios lenguaje de
modelado.
James Clark propone Tree Regular Expressions for XML (TREX) [Clark 01e].
TREX es un lenguaje para la validación de documentos XML.
Thompson y Tobin [Thompson 03] usan un autómata de estados finitos (FSA) para
realizar la validación XML siguiendo XML Schema [Thompson 01].
52
Contribución al análisis XML para la mejora en las prestaciones de memoria.
Desde 1991, Murata [Makoto 98][Murata 97][Murata 98][Murata 00a][Murata
00b][Murata 01] [Murata 03] ha construido la teoría de los lenguajes regulares
(tree/hedge) para validar tanto RELAX NG como XML Schema haciendo propuestas de
validación sobre la plataforma Java para móviles.
6.6 Taxonomía de los analizadores en la Java ME.
6.6.1 Introducción
Jonathan Knudsen [Knudsen 02a], presenta un escenario para el uso de analizadores
XML y una taxonomía de las implementaciones, indicando el tipo, licencia y otros
detalles de los analizadores, tal y como se muestra en la Tabla 2.10.
Nombre
KXML
MinML
TAM
NanoXML
TinyXML
XMLtp
Xparse-J 1.0
URL
http:kxml.enhyndra.org
http://www.wilson.co.uk/xml/minml.htm
http://simonstl.com/projects/tam/
http://nanoxml.sourceforge.net/orig/kvm.html
http://www.grinninglizard.com/tinyxml/
http://mitglied.lycos.de/xmltp/
http://www.webreference.com/xml/tools/xparsej.html
Licencia
EPL
BSD
MPL
Zlib/libpng
GPL
BSD
GPL
MIDP
Si
No
Si
Si
No
No
Si
Tipo
Pull
Push
Push
DOM
DOM
DOM
DOM
Tabla 2.10: Analizadores XML de pequeño tamaño.
Nombre
BSD
CPL
EPL
GPL
LGPL
MPL
Zlib/libpng
URL
http://opensource.org/licenses/bsd-license.php
http://opensource.org/licenses/cpl.php
http://kxml.enhydra.org/software/license/
http://www.webreference.com/xml/tools/license.html
http://opensource.org/licenses/lgpl-license.php
http://www.mozilla.org/MPL/MPL-1.1html
http://opensource.org/licenses/zlib-license.php
Tabla 2.11: Licencias de los analizadores XML.
6.6.2 NanoXML
Eric Giguère llevó con NanoXML 1.6.4 [NanoXML] un analizador XML a la KVM. La
KVM sigue la especificación CLDC (Connected Limited Device Configuration de la Java 2
Micro Edition). Esta implementación es una pequeña versión para la Máquina Virtual de
Java que está pensada para pequeños dispositivos inalámbricos.
En Abril de 2000, NanoXML salió el proyecto AUIT, The Abstract User Interface
Toolkit.
El propósito en la implementación de NanoXML fue el de realizar un analizador
pequeño, que sea fácil de utilizar. SAX y DOM son demasiado complejos para lo que se
necesitaba y son demasiado grandes para su uso.
Capítulo 2. Análisis de la información XML.
53
NanoXML 1 es considerablemente pequeño, razonablemente rápido para pequeños
documentos XML es bastante fácil de usar y es gratuito (bajo licencia zlib/libpng).
Como no es un analizador que esté pensado para analizar un documento DocBook, no
soporta análisis de la DTD o mezcla de datos.
NanoXML es un proyecto SourceForge y, la versión 1.6.8 es de Mayo de 2001.
En Julio de 2001, apareció NanoXML 2. A diferencia de NanoXML1, la velocidad
y el cumplimiento se consideraron como criterios para la nueva versión. NanoXML 2 es
muy modular, se puede fácilmente reemplazar los diferentes componentes en el
analizador para personalizarlo como se necesite. La modularidad de nanoXML 2
también beneficia extensiones como el soporte SAX, el cual puede ahora directamente
acceder al analizador. En NanoXML 1, el adaptador SAX tiene que iterar la estructura
de datos construida.
El tamaño de esta nueva versión aumentó considerablemente a un fichero jar de
tamaño 32K. Este tamaño continúa siendo bastante pequeño comparado con los
analizadores de otras plataformas.
Hay tres ramas en NanoXML 2:
 NanoXML/Lite es el sucesor de NanoXML 1. Caracteriza un analizador
que es extremadamente pequeño.
 NanoXML/Java es el analizador estándar.
 NanoXML/SAX es el adaptador SAX para NanoXML/Java.
Otra versión de NanoXML es NanoXML2.2.1, que data de Abril de 2002.
6.6.3 kXML2
kXML [kXML2] es un pequeño analizador XML al estilo Pull, especialmente
diseñado para entornos limitados tales como Applets, Personal Java o dispositivos
MIDP, basado en la API XML.
kXML proporciona una libreria compacta para el uso en dispositivos J2ME. KXML
es un proyecto mantenido por la organización Enhydra que soporta las siguientes
características, soporte de espacio de nombres XML, modo "Relaxed" para el análisis
HTML u otros formatos SGML, pequeño tamaño, soporte para escritura, y
opcionalmente soporte DOM y WAP.
kXML2 es un analizador XML Pull, similar a kXML, pero no soporta espacio de
nombres. El tamaño es bastante pequeño. Si se necesita soporte para espacio de nombre,
o acceso a los comentarios XML o instrucciones reprocesamiento, se debería de utilizar
kXML2 que aumenta considerablemente su tamaño. La implementación está realizada
en el paquete: org.kobjects.xml.
kXML3 propone un modelo arquitectónico del que no proporciona ningún código.
El proyecto Enhydra kXML esta actualmente cerrado.
54
Contribución al análisis XML para la mejora en las prestaciones de memoria.
6.6.4 MinML
Un analizador que sigue el modelo Push es MinML [MinML]. Éste es un analizador
XML mínimo (minimal XML parser). Este analizador está pensado para poderse
ejecutar en sistemas embebidos (de 512Kb de RAM) sin usar todos los recursos del
sistema para analizar el documento.
Algunas de las características de este analizador son las siguientes, que lee las DTD
pero no las procesa, así como las secciones CDATA, atributos, referencias a entidad
(&amp; etc), y elementos vacíos.
Soporta SAX1 y se ha añadido una extensión simple (haciendo subclase de
org.xml.sax.DocumentHandler y org.xml.sax.Parser) que permite
caracteres de datos para ser procesados en la aplicación del usuario proporcionados en
subclases de java.io.Reader.
MinML es bastante pequeño. Tiene un fichero jar de 14Kb aproximadamente. Está
bajo licencia de estilo BSD. Se puede descargar una versión estable, la 1.7 desde el 18
de Noviembre de 2001.
6.6.5 XMLtp
XMLtp [XMLtp] es un pequeño analizador XML, escrito en Java. Su principal
propósito es servir a la parte de la aplicación que desea usar XML con un formato de
almacenamiento para los datos de la aplicación, que sigue el modelo Push.
XMLtp permite un subconjunto de XML para la comprobación de que un
documento XML está “bien formado”. Esta implementación no soporta validación con
DTDs. Por lo tanto no entiende la correspondiente declaración de la semántica de la
DTD de la especificación XML.
Según los diseñadores, hay unos usos para una DTD y es cuando XML de usan por
aplicaciones como su formato de almacenamiento de datos interno. La aplicación tiene
que comprender y verificar la corrección semántica de su aplicación de datos y, en el
sentido más estricto que pueden definirse en una DTD. Además XMLtp proporciona el
manejo sintáctico para leer XML, pero forma parte de las tareas del programador
proporcionar la semántica de comprobación de los datos.
En el caso de que se necesite verificación, hay una carga de procesamiento mayor
en la implementación de SAX. Estos procesadores son mayores que XMLtp. XMLtp fue
escrito para tener un analizador pequeño, no para cubrir todas las características.
Algunas de las características se resumen a continuación, soporte Unicode, los
comentarios son ignorados, así como las instrucciones de procesamiento que también
son ignoradas. Se puede considerar un analizador pequeño, “Casi” XML, rápido y de
fácil manejo.
Capítulo 2. Análisis de la información XML.
55
6.6.6 TinyXML
TinyXML es un analizador XML pequeño y simple escrito en C++ que puede ser
fácilmente integrado en otros programas. Esta es un propuesta mantenida por
Sourceforge. En las últimas versiones se ha incorporado soporte para las secciones
CDATA. Sin embargo, resulta inapropiado para plataformas Java sin soporte para
código nativo.
6.6.7 Xparse-J
Xparse-J es un analizador XML escrito en Java que "aspira a ser el analizador XML
escrito en Java más pequeño del planeta". Xparse-J es una traducción de Xparse, un
analizador XML JavaScript de 5K.
Xparse-J no lee las DTD, tampoco da soporte para la interfaz SAX o DOM. Aunque
su funcionamiento puede aproximarse más a un estilo DOM. Xparse-J lee el documento
XML de un string para dar una presentación del documento con una estructura en forma
de
árbol
contenido
en
com.exploringxml.xml.Node
y
com.exploringxml.xml.JSArray. Ambos Node y JSArray contienen las
funcionalidades básicas para la navegación a lo largo de árbol del documento para
acceder a todos los datos.
Xparse-J consta sólo de tres clases:
 La clase principal: Xparse
 La clase para delimitar un nodo en el documento XML: Node
 La clase array que contiene los elementos hijos, atributos, etc.: JSArray
Para realizar la lectura del documento se utiliza el método Xparse.parse().
Cada nodo conteine un de java.util.Hashtable atributos, que se puede consultar
mediante numeración al estilo Java.
Xparse-J está distribuido bajo liciencia pública GNU (GPL).
6.6.8 JSR-280
La implementación de Java JSR-280 [JSR-280] está pensada para proporcionar una API
XML de propósito general para la siguiente generación de dispositivos móviles. Java
tiene pensado fragmentar las interfaces XML en estos dispositivos; cada especificación
(JSR) que necesite soporte XML tiene un subconjunto de la propia especificación. La
API propone que dará soporte a:
 Análisis basado en manejadores de eventos SAX 2
 Procesamiento de documentos al estilo DOM
Esta API podría también incluir soporte para análisis Pull.
56
Contribución al análisis XML para la mejora en las prestaciones de memoria.
7 Qué hace diferentes a los analizadores.
7.1 Consideraciones generales
En esta sección se presentan una clasificación de aspectos que hacen diferentes a los
analizadores. Las interfaces de análisis ofrecen los métodos mediante los cuales se
pueden acceder. XML nos invita modelar la información como un árbol, pero éste no
necesita ser procesado de esta forma. XML puede ser comprendido, y procesado, en
diferentes niveles de abstracción [Sperberg-Mcqueen 05]:
1. Como un flujo de caracteres
2. Como una secuencia de caracteres de datos mezclado con marcas
3. Como un árbol en su forma obvia
4. Como un grafo con enlaces entre nodos (definidos por relaciones entre la
relación padre-hijo y los elementos XML, por enlaces ID/IDREF, o por
métodos de aplicación específicas entre elementos)
5. Como un árbol o grafo con información del tipo de datos y validez
6. Como una instancia de la estructura de datos de una aplicación
La multiplicidad de niveles presenta otras opciones sobre la unicidad en la
definición de un modelo, con acceso restringido a un solo nivel de abstracción
proporcionado a través de una interfaz de aplicación en programación bien controlada.
En esta dirección se presentan los aspectos que hacen diferentes las distintas clases
de analizadores XML, enfocándolos función de [Wilmott 05]:
 La forma en la que los datos son devueltos,
 qué información es devuelta al cliente,
 La relación entre el analizador y el cliente.
Estos tres puntos se desarrollan a continuación.
7.2 Forma en la que los datos son devueltos
Las diferencias establecidas entre los modelos de análisis determinan características en
cuanto a la forma en la que los datos son devueltos, marcando diferencias entre
analizadores que trabajan in-situ, y analizadores que copian los datos. Los analizadores
entregan información de documento que se analizan donde un marco de trabajo suele ser
algún lenguaje orientado a objetos que contienen información sobre el documento
analizado. Estos objetos contienen información del documento XML. Esta información
se puede copiar del origen de donde se obtiene o se puede devolver el lugar de donde se
ha obtenido la información.
1. Los analizadores “in-situ” en la medida de lo posible, indican donde se han
encontrado los datos en el documento, en vez de copiarlos. Análisis “in-situ” de los
Capítulo 2. Análisis de la información XML.
57
datos XML deja la información en la posición o dispositivo desde donde fue
proporcionada al analizador XML, en lugar de copiarla en el analizador. Un
analizador in-situ analiza los datos a su cliente referenciándolos en los datos
originales en lugar de proporcionarlos con una copia para el cliente. Los datos
originales pueden estar en un sistema de ficheros, en una base de datos, en un buffer
“leído”, en una “plataforma” de memoria (un mensaje de texto en tu teléfono), en un
buffer de un editor de texto (en memoria o paginado), en una estructura de datos del
cliente.
El análisis in-situ tiene dos ventajas principales.
 En primer lugar, es poco disperso en el uso de la memoria local, lo cual es

importante cuando la memoria local es pequeña (como por ejemplo en un
teléfono celular) o los documentos analizados son grandes (construyendo
una base de datos).
Por otra parte soporta XML usando un formato nativo de la aplicación,
como por ejemplo un editor de texto que use XML como representación
interna de un documento. Un analizador “in-situ” analiza los datos a su
cliente referenciándolos en los datos originales en lugar de proporcionarlos
con una copia para el cliente.
2. Los analizadores que copian la información del documento XML en objetos
devolviéndolo al cliente.
El análisis in-situ de la información XML tiene aspectos positivos. Por una parte
concentra el uso de la memoria de la memoria utilizada, lo cual es importante donde la
memoria es pequeña o los documentos analizados sean grandes. Soporta la información
usando un formato nativo de la aplicación.
In-situ es más potente que la copia de los datos (“data-copying”). Si el cliente no
tiene cuidado donde los datos están los datos, ambos lo harán; si el cliente tiene cuidado,
solo in-situ lo hará. En el proceso de análisis de los documentos XML, primero son los
analizadores data-copying primero y los analizadores in-situ vienen después.
Los analizadores XML que usan una copia de los datos de la fuente de la
información XML, construyen objetos para su procesamiento y análisis.
Los analizadores in-situ especifican donde los datos fueron encontrados, en la
medida de lo posible. Estos analizadores utilizan elementos que puedan representar la
posición donde la información está ubicada. Los punteros son un tipo de referencia.
Estos elementos son referencias como elemento que contiene una dirección.
La forma en la que los datos son devueltos bien sean in-situ o con copia de datos, es
independiente de la interfaz que se utilice, bien sea basada en eventos o árboles. Sin
embargo el modelo basado en árboles se considera que es más intensivo en memoria,
para proporcionar un funcionamiento con acceso aleatorio a la información del
58
Contribución al análisis XML para la mejora en las prestaciones de memoria.
documento, con posibilidad de modificar fácilmente la estructura en memoria. Los
analizadores XML que usan una copia de los datos de la fuente de la información XML,
construyen objetos para su procesamiento y análisis.
7.3 La información que es devuelta al cliente
La entrega de la información de un documento XML puede variar para una misma
interfaz de programación. Estas interfaces presentan diferencias de un modelo a otro ya
que su funcionamiento condiciona la forma en la que los datos son devueltos a la
aplicación o cliente. Los modelos de procesamiento de mensajes (tales como los SOAP)
más conocidos, provocan una elección entre los modelos basados en eventos y los
modelos basados en árboles. La combinación del buen funcionamiento, baja memoria,
acceso aleatorio, actualización incremental, obliga a tomar una decisión entre el modelo
utilizado.
La entrega de la información del documento XML puede presentar varias
diferencias dependiendo de como los datos son devueltos. Los analizadores pueden
copiar toda la información del documento XML construyendo objetos para devolverlos
al cliente. Los analizadores in-situ, en la medida de lo posible, indican donde los datos
fueron encontrados en el documento analizado.
Según qué información es devuelta al cliente,
 La estructura de los elementos y propiedades, y datos que contienen la


información. Se puede devolver la información en sí un evento que se asocie
a un determinado tipo de información. La información contenida en un
archivo XML son cadenas de caracteres y la forma de devolver la
información va asociada a estructuras de datos relacionados con cadenas de
caracteres e irá intrínsecamente asociada al lenguaje de programación que se
esté utilizando.
Posición de la entidad interna y el valor de la información. El
posicionamiento de la entidad interna podrá estar asociado a elementos de
direccionamiento de las estructuras.
Información de la entidad externa, y la posibilidad del cliente de participar
en la entidad de resolución.
La entrega de la información de un documento XML desde el analizador, se realiza
en un programa a través de una interfaz. Estas interfaces presentan diferencias de un
modelo a otro ya que su funcionamiento condiciona la forma en la que los datos son
devueltos a la aplicación o cliente.
Capítulo 2. Análisis de la información XML.
59
7.4 Relación entre el analizador y el cliente
Según la relación entre el analizador y el cliente, los modelos de análisis tienen un
comportamiento diferente,
 un analizador DOM devuelve al cliente una representación en forma de árbol del
documento XML para poder acceder y manipularlo.

Un analizador Push llama a los métodos del cliente según los datos del
documento XML, transformando en eventos para el cliente.

Un analizador Pull devuelve los eventos XML al cliente bajo petición del
cliente.
Los modelos basados en eventos, Push y Pull leen de representación serializada,
como un flujo de entrada, de donde se obtienen los datos, pero nunca se puede ir hacia
atrás hacia una posición anterior o saltar a otra posición hacia delante. Si se quiere
acceder a una posición previa se debe de usar el modelo DOM pero tiene un uso
intensivo en memoria. Sería deseable poder acceder a posiciones previas en la
representación serializada de la información XML, sin tener el uso intensivo en
memoria que realiza DOM. Es por tanto deseable, de cara tener un buen
comportamiento en memoria durante la ejecución de una aplicación basada en XML,
utilizar un analizador basado en eventos del tipo Pull que puedan acceder a todo el
documento tal y como lo hace DOM, sin que por ello suponga una penalización en
cuanto al uso intensivo de la memoria utilizada en la ejecución de este proceso. Por
tanto, una buena solución sería extender la interfaz Pull para manejar el documento
XML bajo demanda, realizando análisis in-situ para obtener un mejor comportamiento
en memoria.
8 Conclusiones
Este capítulo ha definido los elementos utilizados en el proceso de análisis de los
documentos XML:
 Los analizadores XML (ó “parsers”): Los analizadores son programas que

extraen la información contenida en él. Estos programas pueden utilizar una
representación del documento para poder realizar las operaciones de análisis
de la información contenida en el documento.
Representación serializada: La representación del documento son los datos
estructurados usados por el programa para trabajar con el documento en
memoria, se denomina representación serializada. Esta representación se
utiliza como entrada para el analizador XML.
60
Contribución al análisis XML para la mejora en las prestaciones de memoria.


Fuente de datos virtual: La fuente de datos virtual, es el lugar que contiene
los datos XML donde normalmente son almacenados, y se extraen los datos
para construir su formato serializado.
DOM, Push y Pull:
o DOM es la especificación de una API para el procesamiento XML
basado en árboles. Ya que DOM crea una estructura de datos en
memoria modelando los datos representados en XML y permitiendo
acceso aleatorio, y se considera como una forma muy fácil y natura
de trabajar con XML. Pero la construcción del árbol DOM puede
consumir varias veces el tamaño del fichero, y cuando el tamaño del
fichero es grande supone un coste de procesamiento bastante grande,
haciendo que DOM no sea deseable debido al alto consumo de
recursos.
o Push y Pull proporcionan un excelente funcionamiento cuando DOM
presenta problemas de memoria y procesamiento, ambos usan
interfaces de bajo nivel de tokenización y, por defecto, nunca
mantienen el documento entero en memoria. Como resultado el
procesamiento XML basado Push y Pull va asociado a un menor
consumo de memoria y potencialmente pueden manejar ficheros
XML mayores. A menos que el cliente construya su propio modelo


de forma personalizada en la aplicación que usa el analizador, Push y
Pull no ofrecen acceso aleatorio, y en un uso ineficiente puede
provocar el escanear el documento XML varias veces, haciendo que
el funcionamiento de DOM sea una mejor solución.
in-situ: Según como los datos son devueltos, los analizadores copian toda la
información del documento XML en objetos, devolviéndolos al cliente. Los
analizadores in-situ, en la medida de lo posible, indican donde los datos
fueron encontrados en el documento analizado.
Según que información es devuelta al cliente, la estructura de los elementos
y propiedades, y datos que contienen la información se puede proporcionar,
y los datos que contienen la información. La información de la entidad
externa y la posibilidad del cliente de participar en la resolución de la
entidad.
Los diferentes modelos de análisis de los documentos XML están basados en
árboles o basados en eventos. Los modelos basados en árboles construyen una
representación interna de todo el documento en memoria. Los modelos basados en
eventos entregan los eventos analizado a la aplicación, proporcionando un acceso serie
(en un formato serializado) para acceder al documento XML. Estos modelos hacen
Capítulo 2. Análisis de la información XML.
61
accesibles la información del documento a través de las distintas interfaces, estas son
DOM, para el modelo basado en árboles, que permite un acceso al documento entero
debido al mantenimiento en memoria, y Push/Pull. En este capítulo se ha presentado la
forma en la que los analizadores pueden
 manejar la información del documento XML, de esta forma pueden resaltarse
dos puntos, el acceso de la información como entrada al analizador y por otra
parte según la forma en la que la información es devuelta a la aplicación. Y
por tanto se ha presentado
 El análisis in-situ: Según como los datos son devueltos, los analizadores
copian toda la información del documento XML en objetos, devolviéndolos

al cliente. Los analizadores in-situ, en la medida de lo posible, indican donde
los datos fueron encontrados en el documento analizado.
El análisis sin extracción de los datos: Según que información es devuelta
al cliente, la estructura de los elementos y propiedades, y datos que contienen
la información se puede proporcionar, y los datos que contienen la
información. La información de la entidad externa y la posibilidad del cliente
de participar en la resolución de la entidad.
Por otra parte se ha presentado una amplia panorámica de las implementaciones
realizadas con los distintos modelos de análisis.
CAPÍTULO 3.
Modelo Propuesto
En el capítulo anterior se ha detallado el proceso de análisis y estructura de un
documento XML y se han enumerado las interfaces disponibles y sus características, así
como distintas propuestas e implementaciones. De esta forma podemos referirnos a
DOM, Push y Pull como los tres interfaces para analizar la información XML, con
distintas implementaciones y propuestas para los distintos modelos. Este capítulo
presenta el nuevo modelo de análisis. El nuevo modelo de análisis XML, extiende la
interfaz Pull a todo el documento, y es un modelo basado en eventos, que permite el
movimiento no sólo hacia delante como los modelos Push y Pull, sino también permite
el movimiento del cursor hacia atrás, accediendo a elementos previamente analizados.
La implementación realizada de este modelo requiere el mantenimiento de la
representación del documento XML. A lo largo de este capítulo se presentan los
elementos en los que se basa el nuevo modelo, interfaz Pull y análisis in situ. Se detalla
como extender la interfaz Pull a todo el documento con los métodos que soportan estas
operaciones. Se presenta el modelo productor/consumidor del nuevo modelo. Se
presentan ejemplos de uso de este modelo. Finalmente, se presenta una implementación
en el lenguaje Java que realiza estas operaciones.
1 Introducción
Muchos documentos, (tales como libros, revista,... ) podrían tener una forma
determinada en la que están estructurados los documentos. En una gran cantidad de
situaciones, después de que los datos sean procesados, los resultados necesitan ser
escritos en un formato XML, para asegurar su reutilización y longevidad de la
información. Aplicado de forma consistente, esta línea de pensamiento da como
resultado una arquitectura de procesamiento de la información en la cual virtualmente
cada proceso se convierte de una transformación XML en otra. Muchos documentos
pueden estar compuestos por componentes (tales como capítulos y artículos). Estos
pueden descomponerse en componentes (tales como títulos, párrafos, figuras, ...). En
XML, estos componenetes, como ya hemos vistos se llaman elementos. Cada elemento
representa un componente lógico de un documento. Los elementos pueden contener
64
Contribución al análisis XML para la mejora en las prestaciones de memoria.
otros elementos y pueden también contener palabras y sentencias en las que se debería
pensar normalmente como el texto de un documento. XML llama este texto los
caracteres de datos del documento. Esta vista jerárquica del documento XML se ha
presentado de forma gráfica en los ejemplos DOM del capítulo anterior. Su estructura
jerárquica se conoce habitualmente como estructura arbórea. El elemento que contiene a
todos los demás se conoce como raíz. Los elementos pueden también contener
información extra añadida en los atributos, describiendo las propiedades de los
elementos, tal y como se ha mostrado en el ejemplo del capítulo previo. Una aplicación
necesita diferentes niveles de abstracción, y se puede entender que los componentes de
descripción de marcado, se enfrenta a la independencia de la aplicación, pudiendo ser
una ventaja, en lugar de ser una desventaja, para permitir a XML ser visto de esta forma
con diferentes niveles. Las diferentes capas en la pila XML proporciona acceso a estos
niveles de abstracción. El estudio detallado de las características de análisis de los
documentos XML permite realizar una aproximación en búsqueda de elementos y
operaciones que optimicen el uso de la memoria, a fin de poder aplicarlo a plataformas
donde los recursos (expresados en términos de memoria) sean un factor crítico, para el
despliegue de aplicaciones que den soporte a la nueva generación de dispositivos. El
flujo de datos XML se puede proporcionar mediante un sistema de ficheros, o una
interfaz de red. La declaración interna de la codificación de caracteres es necesaria para
traducir del flujo de octetos procedentes al flujo de caracteres. Un analizador XML lee
del flujo de octetos, los traduce en caracteres, y los analiza traduciéndolos a contenidos
y marcas, proporcionando acceso para mediante alguna de las interfaces de análisis.
El mantenimiento de la representación serializada del documento XML en un
formato serializado extraído de la fuente de datos de la que procede el documento XML,
puede suponer una mejora en memoria, si no se realiza duplicación de esta
representación. Se puede realizar un análisis eficiente de la información con un enfoque
de la memoria utilizada de tal forma que los datos sean analizados en el lugar de donde
se han extraído. El nuevo modelo de análisis se plantea bajo características de análisis
que manejen estructuras de datos con la menor duplicación de la información,
manteniendo una única representación. Se realiza una implementación haciendo
hincapié en el análisis de los documentos en el lugar en el que se encontraron,
enfocándolo desde dos perspectivas diferentes: bajo el punto de vista de los datos que se
proporcionan a la aplicación y bajo el punto de vista de los datos suministrados a la
aplicación.
Capítulo 3. Modelo propuesto.
65
2 El nuevo modelo
El nuevo modelo de análisis de documentos XML usa el cursor como elemento que
contiene información sobre el evento generado permitiendo la posibilidad de extraerla
de la representación del documento XML generada.
Este modelo permite el movimiento del cursor para acceder a información
previamente analizada, y es un modelo basado en eventos, y por tanto no construye la
pesada (en términos de memoria) representación arbórea del modelo DOM y
proporciona la posibilidad de mover el cursor hacia adelante y hacia atrás, a información
previamente analizada en el proceso de iteración. El control del análisis de la
información XML en este modelo es del programador, mediante una API basada en un
patrón iterativo y los eventos del flujo asociados. Esta propuesta se presenta un marco
de los dispositivos móviles para llevar la tecnología XML en el marco de los Servicios
Web XML.
2.1 Pull-everything
Se puede pensar en la API Push y Pull como una interfaz que accede secuencialmente a
los datos contenidos en el XML. Un analizador XML debería asegurar que el
documento XML está “bien formado” (well-formed) para que las etiquetas estén
correctamente construidas, cada etiqueta de comienzo tenga su etiqueta de finalización
asociada, y que los elementos estén siempre anadidos de forma correcta unos con otros.
Estos modelos están guiados por eventos. El analizador lee el documento XML una vez,
desde el comienzo hasta el final, y cada evento de análisis, tal y como el reconocimiento
del comienzo o final de un elemento, y lo notifica a la aplicación. La API SAX es rápida
y usa menos memoria y es aconsejable usarla cuando se realizan solo operaciones de
lectura o see van a realizar cambios son pequeños. Tal y como se ha visto en el ejemplo
del capítulo anterior primero se genera una instancia del analizador con
SAXParserFactory. Y cuando se ejecuta el analizador, este invoca las operaciones
apropiadas (llamadas a los métodos), que se organizan en grupos (o interfaces). Y estos
métodos son los que determinan qué hacer en la aplicación del programador. Además de
los manejadores (“hander”) mostrados en el capítulo anterior se puede utilizar los
métodos de DocumentHandler. La información de los eventos que el analizador
reconoce se envían a la interfaz DocumentHandler para su procesamiento.
DOM no puede ser usada para leer el documento XML, por esto usa SAX, de esta
forma SAX y DOM pueden trabajar juntos. DOM es una colección de objetos en el
programa que se pueden manipular. De esta forma, cuando la aplicación desea realizar
algún cambio, este puede modificar su estructura, modificando datos, eliminándolos, o
insertando datos nuevos. Cuando la aplicación ha realizado todos los cambios, puede
66
Contribución al análisis XML para la mejora en las prestaciones de memoria.
entonces escribir la estructura en un documento XML. La API DOM oculta los detalles
de la API SAX, y proporciona una estructura de objetos en forma de árbol bastante
familiar. Por otra parte, la construcción de DOM requiere leer todo el documento y
montar el árbol en memoria por lo que es más intensivo en memoria. Por esta razón, la
API SAX podría ser más apropiada para aplicaciones en la parte del servidor y filtrado
independiente del estado de los datos que no necesiten una representación en memoria
de documento entero, ya que es rápido y eficiente.
XP [XP] es el primer analizador al estilo Pull implementado por Stefan Haustein al
estilo iterador, tal y como se ha presentado en la Figura 2.28 del capítulo anterior. La
implementación se realizó “encima” de SAX para proporcionar algunas funcionalidades,
que suelen ser apropiadas y utilizas una vez construido el árbol DOM para recorrer (de
forma iterativa) elementos del documento. Este nivel de apilamiento de API hace que
pueda plantearse como una solución eficiente el análisis in-situ con una interfaz Pull sin
la extracción de eventos desde la API SAX, este punto se considera en la siguiente
sección y va asociado al mantenimiento de una estructura en la se mantiene
almacenados los datos y a los que se puede a todos acceder. Consecuentemente, en este
contexto se puede extender las peticiones del estilo Pull a todo el documento con un
direccionamiento en la iteración tanto en el sentido habitual de Push y Pull, como en la
dirección hacia atrás hacia información que ha podido ser analizada previamente.
La implementación más simple de un analizador es la que sigue el modelo Push.
Dependiendo del contenido del documento y del estado interno el analizador produce
eventos como “startElement” or “characters” que son enviados (o empujados, “pushed”)
para ser tratados por la aplicación. Aunque el modelo Push, bajo el punto de vista de la
aplicación puede causar algunos problemas en el manejo del evento, ya que la aplicación
necesita conocer el estado de procesamiento interno antes de hacer algo con el evento.
Esta funcionalidad se proporciona de una forma bastante natural en el modelo Pull.
SAX, como se ha dicho realiza un análisis independiente del estado, a diferencia del
procesamiento dependiente del estado que realiza el modelo Pull, donde el programa
necesita hacer una cosa con los datos de un elemento A y algo diferente con los datos de
otro elemento A, es en estos casos donde el modelo Pull podría ser la mejor elección.
Con un analizador Pull, se puede obtener el siguiente (next) nodo, en cualquier punto
del código y preguntar por él, mediante el uso de los métodos “getter”. El eliminar las
interfaces subyacentes para la implementación de un modelo Pull con el acceso a toda la
estructura serializada del documento XML, permite acceder a información previamente
analizada haciendo posible realizar las preguntas (Pull) desde la aplicación al
analizador.
Capítulo 3. Modelo propuesto.
67
El análisis Pull usa dos métodos de un iterador next() y hasNext(). Un
iterador en el lenguaje de programación Java es un objeto que puede moverse a lo largo
de una secuencia de objetos y selecciona cada uno de la secuencia.
El modelo Pull da el control del análisis al programador mediante una API basada
en un iterador simple. Los métodos next() y hasNext() permiten a la aplicación
desarrollar y preguntar por el siguiente evento, pide el evento; en lugar de hacer frente a
los eventos producidos, tal y como sucede en el modelo Push.
Pull-everything, extiende la interfaz Pull a todo el documento. Permite generar
eventos en la forma Pull, tal y como se lee la información del formato serializada del
documento XML, y añade nuevas opciones para el movimiento en la representación
serializada del documento XML hacia atrás. Esta es una aportación de esta Tesis
Doctoral que se implementa mediante método que recorren el documento XML en la
forma de estructura jerárquica que contiene una representación natural de un documento
XML.
La extensión del modelo Pull a todo el documento implica, que se podrá acceder
mediante algún mecanismo a todo el documento. En esta línea, el direccionamiento de
una única estructura puede representar una solución óptima. La capacidad de acceso a
todo el el documento permite un mantenimiento de la información en su formato nativo,
y mediante su direccionamiento, se pemita el acceso a la información, a fín de eliminar
su duplicidad.
El mantener disponible un acceso al flujo de datos de entrada del analizador
disponible para todo el documento, permite en un análisis, en el lugar en el que los datos
se han encontrado, lo que se conoce como “in-situ”. La generación de objetos se puede
realizar manteniendo los datos sobre los que se realiza el análisis de la información, sin
realizar copia de toda la información. Los datos pueden ser devueltos generando objetos
desde la propia representación del documento.
La extensión de la interfaz Pull a todo el documento, que denominamos Pulleverything, y DOM permiten el acceso a la información de todo el documento XML. Se
presenta por tanto, un modelo basado en los eventos, donde extiende el modelo Pull con
movimiento del cursor hacia atrás, pudiendo acceder a información previamente
analizada. Se puede decir, por tanto, que los analizadores Pull implementan
parcialmente la interfaz Pull-everything.
La extensión de la interfaz Pull a eventos en la parte del cliente, dan a éste un
mayor control ampliando el rango de aplicación de un analizador XML. Existe una
mayor interacción entre el cliente y el analizador, y es el cliente el que determina la
operación a realizar. Pull-everything da la posibilidad de hacer partícipe al cliente (o
consumidor) en el proceso de análisis pudiendo recrearse en la representación del
documento XML, permitiendo el acceso al documento según el criterio del cliente, y
68
Contribución al análisis XML para la mejora en las prestaciones de memoria.
permitiendo una forma fácil de analizar la información in-situ, y sin la copia de los
elementos de información de los datos XML para la generación de los objetos devueltos
a la aplicación.
La representación serializada de todo el documento XML permite la movilidad del
elemento utilizado para extraer la información (el cursor), para proporcionarla a la
aplicación. Esto ha permitido a la implementación realizada, Free Cursor Mobility,
implementar las nuevas operaciones que se especifican en los siguientes apartados.
Free Cursor Mobility, extiende el modelo Pull a todo el documento, permite generar
eventos desde el punto en el que el cursor obtiene los datos en la representación
serializada. Este elemento (el cursor) se asocia a la información que, bajo petición,
puede proporcionar los modelos basados en eventos.
2.2 Análisis in-situ
En el análisis léxico para la generación de compiladores en C, Holub apunta [Holub 90]
que muchos compiladores utilizan una gran parte del tiempo en la fase de análisis
léxico. Consecuentemente, vale la pena optimizar el análisis léxico para tener mayor
velocidad. En el estándar C, el bufferado del sistema de entrada en la actualidad es una
elección pobre por varias razones. Primero, muchos sistemas “bufferan” copian de la
entrada de caracteres al menos tres veces antes que el programa los utilice: desde el
disco al buffer que mantiene el sistema operativo, desde este buffer a un segundo buffer
que es parte de la estructura FILE, y finalmente desde el buffer de FILE a la cadena de
caracteres que pertenece al lexema. Todas estas copias ocupan tiempo y espacio de
memoria. Además el tamaño no es óptimo. Se puede leer desde el disco una vez, para
que se ejecuten más rápido estas rutinas (sin embargo esto es dependiente del sistema
operativo, no existe ninguna ventaja bajo UNIX durante la lectura de más de un bloque
a la vez; MS-DOS, sin embargo, su funcionamiento es mucho mejor con lecturas de
gran tamaño).
La información que se puede mantener para la ejecución de una aplicación
habitualmente es bastante menor que la memoria de almacenamiento en la que se
soporta. Están pensadas para realizar operaciones diferentes y tienen carácterísticas
diferentes. Pero una aplicación en gran parte de los casos necesita tener la posibilidad de
acceder en cualquier momento a ella. Por ejemplo, en la pantalla de un dispositivo se
presenta una pequeña cantidad de información, mientras que se puede actualizar la
pantalla y poder acceder al resto de la información.
Este problema no es nuevo, durante la implementación de los Sistemas Operativos
se han presentado diferentes técnicas de paginado de la información (swap) a fin de
poder optimizar el acceso a los datos para poder manejar en un entorno donde la
Capítulo 3. Modelo propuesto.
69
cantidad de información que se maneja es mayor que el tamaño de la memoria para
poder mantenerla.
XML representa el nivel más bajo en el nivel de aplicación. DOM. presupone el
acceso a toda la información, a diferencia de los modelos basados en eventos que no
parte de esta hipótesis. Esto no rompe con la idea del paginado (o swap) sobre la que se
asientan los programas que se ejecutan en los Sistemas Operativos, pero a nivel de
aplicación estas consideraciones pueden resultar engorrosas o molestas, y por tanto, una
posible implementación sea la carga de todo el documento XML.
in-situ parsing parte de la idea de que no va a realizar una duplicacacón la
información sino que la va a direccionar, a fín de no duplicar información.
En el caso de un dispositivo móvil la información se debe descargar de forma
completa y rápida en alguna estructura, son requisitos del buen funcionamiento para
aplicaciones que utilicen flujos de red, manteniendo al menos una estructura. Esta
información vendrá condificada en algún esquema de codificación, aunque los lenguajes
de programación suelen trabajar con su propio esquema, para manejar las cadenas de
texto. El lenguaje de programación C mantiene caracteres de 8 bits. El lenguaje de
programción Java trabaja con caracteres de 16 bits.
El tamaño de la memoria utilizada durante la ejecución de un programa puede verse
agrabado dependiendo de la metodología utilizada en programación. Para lenguajes de
programación orientados a objetos, y más concretamente en el lenguaje de programación
Java, puede utilizar una tabla donde mantener la información leida de un flujo
(habitualmente un fichero) esta operación la realizan los flujos del tipo Buffered. Estos
flujos han desaparecido en la plataforma Java ME, representan un uso excesivo en
memoria.
El lenguaje de programación Java es un lenguaje de programación de alto nivel. Se
pueden desarrollar aplicaciones de forma rápida y eficiente con un coste en tiempo
considerablemente pequeño. Representa además un punto de convergencia entre
programadores en cuanto a la sintaxis de código. Este alto nivel hace que puedan tratar
los elementos que representan las cadenas de caracteres de una forma altamente
eficiente. El engorroso y problemático tratamiento que proporcionan lenguajes de
programación de más bajo nivel (como C) para el manejo y tratamiento de las cadenas
de texto, hace que se vea a Java como un cierto alivio en la comparación. La
concatenación, sustitución manejo es más rápido y eficiente para el programador, pero
representa un coste añadido para la aplicación. Cuando se realiza un concatenación de
dos objetos de tipo String se realiza la conversión a otros objetos de tipo
StringBuffer y su posterior conversión a objeto de tipo String, y todo esto
transparente al programador. Pero el precio a pagar es en cuanto a la memoria utilizada
que además no es controlable ya que no se contrala el garbage collector.
70
Contribución al análisis XML para la mejora en las prestaciones de memoria.
La información XML, procedente de un documento o de la red, se utiliza para
construir un formato que proporcione datos en un foramto en serie para entregarlos al
analizador, para manejar una estructura de datos de la que poder extraer la información,
esta es la representación serializada. El proceso habitual es el copiar de la red o del
documento en primer lugar, y luego reconstruir una representación. La representación
serializada de un documento puede coincidir con la fuente de datos virtual, aunque en la
mayor parte de los analizadores esta coincidencia no se produce.
Si coinciden la representación serializada y la fuente de datos virtual se minimiza la
memoria utilizada para el análisis de un documento XML. Esta optimización es
especialmente útil en los entornos en los que el uso de memoria puede ser crítico.
En el análisis de la información in-situ, la información se gestiona en el lugar en
que los datos están almacenados.
Si no se realiza un análisis en el lugar donde está la información, es necesiario
manejar la información mediante algún otro mecanismo, esto es, mediante copia de la
información, y mantener al menos la información relevante o con un significado
especial para la aplicación. Este análisis de la información se conoce como copia de
datos (“data-copying”), y es un proceso habitual tanto en las operaciones que realiza
cualquier lenguaje de programación y como en las aplicaciones realizadas.
Análisis “in-situ” de los datos XML deja la información en la posición o dispositivo
desde donde fue proporcionada al analizador XML, en lugar de copiarla en el
analizador. Un analizador in-situ analiza los datos a su cliente referenciándolos en los
datos originales en lugar de proporcionarlos con una copia para el cliente.
Los datos originales pueden estar en un sistema de ficheros, en una base de datos,
en un buffer “leído”, en una “plataforma” de memoria (un mensaje de texto en tu
teléfono), en un buffer de un editor de texto (en memoria o paginado), en una estructura
de datos del cliente.
Análisis in-situ tiene las siguientes ventajas,
 Es poco disperso en el uso de la memoria local, lo cual es importante donde
la memoria local es pequeña (como por ejemplo el teléfono celular) o los
documentos analizados sean grandes (construyendo una base de datos).

Soporta el formato nativo de codificación de la aplicación. Como por
ejemplo, un editor de texto que use XML para la representación interna de
un documento.
In-situ es más potente que la copia de los datos. En el proceso de análisis de los
documentos XML, resulta más cómodo para un programador realizar copia de datos,
aunque el uso de memoria es mayor. Los analizadores XML que usan una copia de los
datos de la fuente de la información XML, habitualmente construyen objetos para su
procesamiento y análisis.
Capítulo 3. Modelo propuesto.
71
Los analizadores in-situ, en la medida de lo posible, indican donde los datos fueron
encontrados. Estos analizadores utilizan elementos que puedan representar la posición
donde la información está ubicada. Estos elementos son referencias como elemento que
contiene una dirección. Los punteros son un tipo de referencias que permiten un acceso
rápido y eficiente a la información contenida en la estructura referenciada.
El análisis in-situ que se puede realizar en una implementación para la plataforma
Java ME sin un sistema de archivos donde mantener la información puede ser de un
archivo descargado a través de un flujo de comunicaciones, como por ejemplo HTTP,
manteniendo una única copia del documento. En un entorno con un sistema de archivos
debería de poder direccionar toda la información relevante, total o parcialmente, a fin de
poder devolverla a la aplicación. Para poder manejar de forma eficente un análisis insitu hace falta algún tipo de direccionamiento, o mantenimiento del lugar donde se
almacena la información.
2.3 Funcionamiento del nuevo modelo
Free Cursor Mobility (FCM) es una implementación del nuevo modelo para la
plataforma Java sobre dispositivos móviles (Java ME), que implementa las nuevas
operaciones que permite extender la interfaz Pull a Pull-everything. Es por tanto, un
analizador basado en eventos.
FCM mantiene el formato serializado de todo el documento XML, permitiendo
manipularlo a demanda de la aplicación, con el objetivo de optimizar la memoria
utilizada durante la ejecución del programa.
Se fundamenta en la idea del cursor del modelo de la implementación StAX pero
mantiene el formato serializado de todo el documento, pudiendo mover el cursor hacia
adelante como en Push y Pull, y hacia atrás. Estas operaciones requieren nuevos
métodos para su uso.
En la Figura 3.30 se muestra el funcionamiento del analizador FCM. Esta figura
muestra el proceso análisis del documento XML, libros.xml, del capítulo anterior
para la extracción de la información. Esta figura se puede contrastar con las Figuras 2.8,
2.11, y 2.18 del capítulo anterior. Dichas figuras representan de forma gráfica la
estructura de un árbol DOM, la forma en la que SAX entrega un documento a una
aplicación como una secuencia de eventos y el funcionamiento del modelo Pull,
respectivamente. La Figura 3.30 muestra el funcionamiento de FCM, donde el
analizador permite el movimiento no sólo hacia adelante (como en Push y Pull) sino
también hacia atrás.
72
Contribución al análisis XML para la mejora en las prestaciones de memoria.
Aplicación
Analizador
FCM
libros.xml
START_ELEMENT“titulo”
CHARACTERS
END_ELEMENT “titulo”
Lectura bajo petición
Movimiento del cursor
next()
next()Imprime titulo
next()
Pide el evento
Figura 3.30: Funcionamiento del modelo Pull-everything de FCM.
La potencia del analizador FCM, es permitir el movimiento del cursor “hacia atrás”,
extendiendo los eventos a todo el documento XML (Pull-everything). Estas operaciones
están soportadas mediante métodos de eficiente implementación para minimizar el uso
de la memoria utilizada durante el análisis.
El nuevo modelo está basado en el uso de referencias para almacenar la información
de los documentos XML sin transformación del esquema de codificación. Se puede usar
los métodos del iterador (next() y hasNext()) al igual que el modelo Pull, pero usa
referencias a la información leída, y estas se puede devolver.
InputStream
input;
//...
XMLFCMReader
r
= new XMLFCMReader();
r.parse(input ,input.available());
boolean isTitle = false;
while(r.hasNext()) {
int evento = r.next();
switch(evento){
case XMLFCMConstants.START_ELEMENT:
if((r.getLocalName()).equals("titulo"))
isTitle = true;
break;
case XMLFCMConstants.CHARACTERS:
if(isTitle)
System.out.println("El titulo del libro es:"
+r.getText());
break;
case XMLFCMConstants.END_ELEMENT:
if((r.getLocalName()).equals("titulo"))
isTitle = false;
break;
}
Capítulo 3. Modelo propuesto.
73
}
Figura 3.31: Funcionamiento del analizador FCM.
2.4 Soporte de las nuevas operaciones
El modelo FCM ofrece nuevas posibilidades sobre el análisis Pull, que son soportadas
por nuevos métodos. Estas operaciones están relacionadas con la configuración del
cursor a secciones de datos XML previamente analizadas.
Los nuevos métodos son los siguientes:
 public void setCursorToPreviousSibling(), que configura el valor del cursor
al hermano previo de un determnado elemento,

public void setCursorToParent(), que configura el cursor al padre de un
determinado elemento, lo tuviera.
 public void setCursorToRoot(), que configura el cursor al nodo raíz de toda
la estructura.
FCM proporciona los correspondientes métodos con resultado de tipo booleano:
 public boolean hasPreviousSibling(), que devuleve un valor cierto (true) si
el elemento en el cual está en un determinado momento tiene hermano
previo.
 public boolean hasParent (), que devuleve un valor cierto (true) si el
elemento no es el elemento raíz.
Un método para saltar hacia delante secciones del documento XML sin realizar
análisis de él,
 public void skipWithoutParseChilds() , que permite saltar subsecciones del
documento XML. Este método sitúa el cursor al final de un elemento,
saltando todos los hijos que pudiera tener. Este método presenta unas
características excelentes en cuanto a que no instancia objetos, por lo que no
consume memoria.
En una implementación de un sistema conducido por eventos para el análisis de
documentos XML se permite el acceso a modo de flujo a la representación serializada
de los datos XML, mediante un cursor, como un elemento que puede moverse a lo largo
de dicha representación. Los analizadores XML basados en eventos que implementan
FCM leen la información apuntada por el cursor en los datos XML para generar los
distintos eventos usando el modelo de eventos pull, usando el patrón de diseño de un
iterador. Para mover hacia atrás el cursor se pueden usar los métodos
setCursorToParent()
y
setCursorToPreviousSibling()
(bajo
petición), que mueven hacia atrás el cursor en los datos XML. Estas operaciones se
muestran en la Figura 3.32.
74
Contribución al análisis XML para la mejora en las prestaciones de memoria.
En esta figura se representa en ejemplo simple de un documento XML, en la que se
ha obtenido la representación serializada. Utilizando esta representación el cursor puede
extraer a información. Los valores del cursor apuntan a la representación serializada de
los datos XML para permitir el análisis de la información. Los métodos next() y
skiptWithoutParseChilds() permiten realizar un movimiento hacia delante en
el
proceso
de
análisis.
Los
métodos
setCursorToParent()
y
setCursorToPreviousSibling() permiten el moviento hacia atrás del cursor
en el proceso de análisis.
<el>Romeo</el><conj>and</conj><ella>Julieta<
setCursorToParent()
setCursorToPreviousSibling()
analizador
eventos
next()
skiptWithoutParsingChilds()
Métodos
del analizador
aplicación
Figura 3.32: Funcionamiento del analizador FCM.
<?xml version=“1.0” ?>
<root>
<lovers>
<el>Romero</el>
En el modelo productor y consumidor de FCM, la aplicación<conj>and</conj>
llama al analizador
<ella>Julieta</ ella >
para obtener el siguiente evento, o para realizar el movimiento </lovers>
hacia delante o hacia
<sentence>
atrás del cursor. Con hasNext() y next() la aplicación puede tener
conocimiento de si
Enamorados
existe algún evento y la posibilidad de tomarlo, respectivamente. </sentence>
</root>
2.5 El modelo productor y consumidor
La aplicación puede gestionar el evento bajo petición de la aplicación en el papel de
director, y capturar el evento en el role de consumidor del evento, tal y como se puede
ver en la Figura 3.33.
En el role de director, la aplicación puede mover hacia delante y hacia atrás el
cursor a lo largo de la representación serializada de los datos XML.
En el papel de director, la aplicación, puede mover hacia delante o hacia atrás el
cursor en la representación serializada de los datos XML. Con next() la aplicación
mueve el cursor hacia delante, con setCursorToParent()/setCursorToPreviousSibling()
la aplicación mueve el cursro hacia atrás.
Capítulo 3. Modelo propuesto.
Productor
Mueve
el cursor
adelante
o atrás
analizador
datos
XML
boolean hasNext ()
boolean hasPreviousBrother ()
true
Consumidor
int next()
void skipWithoutParsingChilds()
aplicación
75
START_DOCUMENT / START_ELEMENT, ...
Figura 3.33: Productor/Consumidor en FCM.
El funcionamiento de FCM da un control basado en procedimiento, permitiendo
pararlo, o recrear subsecciones de los datos XML.
La Figura 3.33 se puede comparar con las Figuras 2.23, 2.17 y 2.10 del capítulo
anterior.
2.6 Ejemplo de utilización
Este sistema conducido por eventos que toma los datos de la representación
serializada para generar los eventos para notificarlos a la aplicación puede mostrarse un
ejemplo de uso en la siguiente figura.
Algunos de los eventos que se pueden capturar son los siguientes
START_ELEMENT, START_DOCUMENT, ... que están especificados en la interfaz
XMLFCMConstants (más detalles de esta interfaz aparecen en el capítulo siguiente).
boolean flag1 = true;
boolean flag2 = true;
while (in.hasNext()){
evento = in.next();
if(evento == XMLFCMConstants.START_ELEMENT){
if((in.getLocalName()).equals("Header")&& flag1){
in.skipWithoutParseChilds();
flag1 = false;
}
if((in.getLocalName()).equals("Fault") && flag2){
in.setCursorToFather();
if(in.hasPreviousSibling()){
in.setCursorToPreviousSibling();
flag2 = false;
}
}
}
76
Contribución al análisis XML para la mejora en las prestaciones de memoria.
}
Figura 3.34: Ejemplo de ejecución en FCM.
En el ejemplo de la figura de arriba se ponen de manifiesto los siguientes puntos:
1 El patrón iterativo se realiza mediante un bucle del tipo while.
2 Los métodos hastNext()/next() del iterador, que comprueba si existe
3
algún evento y lo obtiene, respectivamente. El uso de estos métodos supone el
movimiento del cursor hacia delante.
La captua de los eventos obtenidos con el método next(), en este caso el
único evento capturado es XMLFCMConstants.START_ELEMENT, que
indica el comienzo de un elemento y que pertence a la interfaz
XMLFCMConstants (los detalles de la interfaz están especificados en el
4
capítulo siguiente, relacionado con la implementación).
El
uso
de
los
métodos
setCursorToParent()
y
setCursorToPreviousSibling(), que representan el movimiento del
cursor hacia atrás.
En este ejemplo la llamada al método in.skipWithoutParseChilds(),
realiza un movimiento del cursor hacia delante en la representación serializada.
Cuando se usa el movimiento del cursor hacia atrás es posible que se necesite
variables de control, ya que el cursor volverá a encontrarse la misma condición con la
que realizó el movimiento del cursor hacia atrás.
3 Aplicación del Modelo propuesto a Java ME.
Este apartado se presenta una aplicación del modelo propuesto a la plataforma Java
J2ME. Esta implemenación utiliza Pull extendiéndolo a todo el documento XML
realizando análisis in-situ. La implementación trabajo con el cursor como elemento que
permite el movimiento sobre la representación serializada, y se conocida como Free
Cursor Mobility (FCM).
3.1 Introducción
En los últimos años, Sun y las principales compañías de dispositivos de consumo han
colaborado en crear un entorno de desarrollo de aplicaciones Java para pequeños
dispositivos de memoria, altamente portable con recursos limitados tales como teléfonos
celulares, buscapersonas y asistentes personales.
Este trabajo comenzó con el desarrollo de una nueva, pequeña máquina virtual de
Java llamada KVM. Dos esfuerzos de estandarizaciónn en el Java Community Process
(JCP), Connected Limited Device Configuration (CLDC) y Mobile Information Device
Profile (MIDP), se han realizado para estandarizar las librerías de Java y asociarlas la
lenguaje Java y las características de la máquina virtual a lo largo de una gran variedad
Capítulo 3. Modelo propuesto.
77
de dispositivos de consumo. Los estándares CLDC y MIDP son una parte clave de la
Java™ 2 Platform, Micro Edition (J2ME™).
Una configuración de la plataforma J2ME especifica el subconjunto del lenguaje de
programación Java, el subconjunto de funcionalidades de la configuración de la
máquina virtual, las características de seguridad y las características de red, así como las
librerías en el núcleo de la plataforma, para soportar un amplio rango de productos de
consumo. CLDC es la base para uno o más perfiles. Un perfil de la plataforma J2ME
define un conjunto adicional de APIs y características para un concreto mercado
vertical, categoría de dispositivo o industria, tal y como se ha detallado en el capítulo
anterior.
En este contexto de Java ME y para una configuración CLDC válida desde la
versión 1.0 se presenta la implementación del modelo de análisis de documentos XML
basado en el movimiento libre del cursor (FCM).
El análisis con Streaming API for XML (StAX) [JSR-173] especifica una API para
XML es un análisis pull, implementada con un iterador, escrita en el lenguaje Java.
StAX se implementó para dar soporte a Data Binding (JAXB) [JSR-101] y la llamada a
procedimiento remoto (JAX-RPC) [JSR-173].
JAXB y JAX-RPC necesitan de una XML Streaming API. StAX hace que este tipo
de código sea mucho más natural de escribirlo que con SAX, y mucho más eficiente que
DOM. StAX desarrolla una APIs y las normas que soporten el procesamiento XML
como un flujo. La especificación se dirije principalmente a tres áreas:
1 Desarrollo de áreas y convenios que permitan a un usuario analizar eventos Pull de
un flujo de entrada XML.
2 Desarrollar un API que permita a un usuario escribir eventos a un flujo de salida
XML.
3 Desarrollo de un conjunto de objetos e interfaces que encapsulen la información
contenida en un flujo XML.
La especificación debería ser fácil de usar, eficiente, y que no requiera una
gramática. Debería de inclluir soporte para espacio de nombre y la construcción de
XML asociada.
En las desventajas de esta especificación incluye:
1 La especificación de una API de validación. La validación se realizará en la capa
encima del analizador. Esto no descarta el análisis de parámetros de validación para
un analizador subyacente.
2 Dependencia especifica de una gramática XML.
3 Soporte para aplicaciones que transforme o editen una DTD.
La implementación realizada de FCM está basada en la StAX, su especificación en
determina la sección 4.12, que cataloga como no normativa, el subconjunto que debería
78
Contribución al análisis XML para la mejora en las prestaciones de memoria.
ser suficiente para una implementación sobre la plataforma J2ME. La forma en la cual
se crea una instancia bajo la J2ME no está definida.
3.2 Subconjunto mínimo para la implementación
La especificación JSR.173 determina un subconjunto de clases suficiente para un
analizador XML para la plataforma J2ME.
Esta subconjunto es el siguiente:
1 Clases:
javax.xml.stream.XMLStreamReader
javax.xml.stream.XMLStreamWriter
javax.xml.stream.XMLStreamException
javax.xml.stream.Location
javax.xml.stream.XMLStreamConstants
2
Clases/interfaces:
javax.xml.namespace.QName
javax.xml.namespace.NamespaceContext
javax.xml.XMLConstants
Estas clases se han tomado como referencia para la implementación. Los métodos
de cada una de las clases están especificados en los javadoc que se proporciona en
[StAX javadoc].
3.3 Los datos XML
El nuevo modelo puede usar valores del cursor para acceder a la información
previamente analizada. StAX diferencia entre Virtual Data Source, que son los datos
XML almacenados, pero no necesariamente en su formato de representación serializada.
Un requisito de este modelo es la necesidad de mantener una representación
serializada de todos los datos XML para poder mover el cursor. En un entorno de la
plataforma J2ME con la configuración CLDC, sin un sistema de fichero para leer o
mantener los datos XML, la información debería ser descargada de la red. Por ejemplo,
a través de una conexión HTTP. Estos datos deberían almacenarse en una estructura
para su posterior procesamiento y análisis. La información procedente de la red debería
ser salvada en cualquier estructura rápidamente.
Para optimizar la memoria, sería deseable no redimensionar ninguna estructura. Por
lo tanto es necesario conocer el tamamño de la estructura en la que se van a ubicar todos
los datos. Todo el proceso dedetección del esquema de codificación y dimensionado de
las estructura se desarrolla en los siguientes puntos.
Capítulo 3. Modelo propuesto.
79
3.3.1 Detección del Esquema de codificación
De acuerdo con la recomendación XML, todos los analizadores deberían aceptar los
esquemas de codificación UTF-8 y UTF-16 de Unicode. También da en una sección no
normativa la autodetección de los esquemas de codificación, entre los cuales se incluyen
UCS-4 con sus 4 variantes, y los dos tipos de UTF-16. En todos estos casos puede tener
la presentacia o ausencia de Byte Order Mark (BOM).
Según la recomendación, cada entidad XML no va acompañada de una entidad
externa de información, y un documento XML no tiene que comenzar con la declaración
del esquema de codificación indicando que sea, o bien UTF-8, o UTF-16; sino que los
primeros caracteres deberían ser '<?xml'. Cualquier procesador puede detectar, después
de dos o cuatro octetos de entrada, cual es el esquema de codificación utilizado.
Leyendo esta secuencia, nos podría ayudar a conocer en UCS-4, '<' es "#x0000003C"
y '?' es "#x0000003F", y el Byte Order Mark requerido para un flujo de datos UTF16 es “#xFEFF”.
Teniendo en cuenta estas consideraciones en la lectura de los bytes previos para
determinar el esquema de codificación utilizado en el documento XML, la
implementación realizada da soporte a UTF-8, UTF-16BE, UTF-16LE, y UCS-4 en sus
cuatro versiones, tal y como se especifica en la recomendación XML.
3.3.2 Tamaño de la Estructura
HTTP contiene una cabecera indicando la longitud (Content-Length). Utilizando las
clases de la plataforma J2ME para el uso HTTP se puede obtener la longitud. Si la
longitud no se proporciona, esto sucede si el valor de getLength() devuelve-1, se
puede estimar una longitud.
Si conocemos es esquema de codificación y también el tamaño de los datos
(obtenido con el método getLength()), entonces se puede estimar el tamaño de una
estructura compacta para gestionar los datos XML, que hecho de esta forma es la
representación serializada.
3.3.3 ¿Qué estructura?
La clase StringBuffer tiene un constructor con un argumento entero para
configurar un array interno de caracteres a una capacidad inicial. La estructura interna de
un StringBuffer es un tabla de char, donde el tipo de datos char tiene 16 bits.
En esta estructura se insertan los datos obtenidos del flujo de entrada HTTP. Los
datos se “reconstruyen” del flujo para insertarlos en la estructura según el esquema de
codificación que utilizen.
80
Contribución al análisis XML para la mejora en las prestaciones de memoria.
En la codificación de caracteres basada en 8 bits, como por ejemplo la de ISO8859-x, UTF-8, ASCII o cualquier otro de 7 bit u 8 bit no utilizan el byte superior en
todos los caracteres de la tabla interna que mantiene la estructura StringBuffer.
En la codificación de caracteres basada en 32 bits, como UCS-4 necesita una
transformación para poder representarlo en las unidades de 16 bits. Esta transformación
no presentan como lineas de continuación en el capítulo final.
Mediante un objeto de tipo StringBuffer se puede crear un objeto String.
Cuando se crea un String con un objeto de tipo StringBuffer, el String apunta a
la misma tabla de caracteres. String tienen un “status” especial en Java y tienen método
nativos para oerar que proporcionan una rápida ejecución.
3.4 Documentos XML “bien formados” (well-formed)
La Recomendación del W3C de XML 1.1 dice que “la restricción de bien formado es
por definición una regla que se aplica a todo documento XML bien formado.
Violaciones de bién formado deben ser errores fatales”.
¿Cómo podemos implementar una estructura para comprobar que un documento
XML está bien formado? Una primera implementación puede hacerse con los datos
XML que se extraen de la representación serializada para crear objetos de tipo String
que se almacenan en un tabla de de objetos de tipo String. Esta situación se ilustra en
la Figura 3.35.
Analizador
String[]
Representación Serializada
...
conj
lovers
root
conj
cursor
<root><lovers><el>Romeo</el><conj>y</conj><ella>Julieta<
Figura 3.35: Estructura que puede dar soporte a un documento bien formado.
En esta figura se puede observar que un objeto de tipo String se inserta en la matriz
incrementando el número de elementos utilizados, quedando el resto libre. El número de
elementos de la estructura es finito el tamaño se puede sobrepasar, necesitando
comprobar en cada inserción el tamaño de la estructura, y si se produjera
desbordamiento de los límites de la matriz se debería usar el método
System.arraycopy debiendo crear una estructura mayor previamente, para pode
copiarla.
Capítulo 3. Modelo propuesto.
81
3.5 Estructura para la implementación de “bien formado” en FCM
Opuesto al modelo de datos que contienen la información, una referencia es un objeto
pequeño que contiene información que se refiere a datos que están en otro lugar. Las
referencias incrementan la flexibilidad en donde la informción se puede almacenar,
como las referencias se sitúan, y se pasan entre áreas de código.
Cuando se desee acceder a cualquier dato mediante una referencia se puede realizar.
Los punteros son los más poderosos y eficientes tipos de referencias, almacenando sólo
la dirección de un objeto en memoria. El mecanismo de referencias, puede variar según
la implmentación, esta es una carácterística fundamental del lenguage de programación
común a todos los lenguajes de programción modernos. En Java una referencia genérica
para toda clase de objetos se declara mediante Object. Los elementos se podrían insertar
en un array usado como pila (new Object[TAM]). Un elemento contendría
información relacionada con la posición del cursor al comienzo del elemento.
En la Figura 3.36 se observa que cualquier objeto es insertardo en la matriz
incrementando la profundidad, al igual que en el caso anterior se puede desbordar el
tamaño del array.
Analizador
Object[]
Representación
Serializada
cursor
<root><lovers><el>Romeo</el><conj>y</conj><ella>Julieta<
Figura 3.36: Estructura alternativa para dar soporte a un documento bien formado.
Y si esa situación se produjera se debería de redimensionar en la misma forma en la
que se ha especificado en el caso anterior. A diferencia del apartado anterior se utilizan
elementos que contengan un direccionamiento de la representación serializada del
documento XML, en lugar de extraerlo e insertarlo en la matriz.
3.6 Otra posible representación para dar soporte en FCM
En la siguiente Figura se presenta otra posible opción, para dar soporte a la
comprobación de que un documento XML esté bien formado. Al igual que el caso
anterior en FCM se basa en referencias a la representación serializada de la información
XML. La diferencia con el caso anterior es que utiliza una estructura más escalable, sin
la necesidad de utilizar el método System.arraycopy.
82
Contribución al análisis XML para la mejora en las prestaciones de memoria.
Analizador
cursor
<root><lovers><el>Romeo</el><conj>y</conj><ella>Julieta<
Figura 3.37: Estructura elegida para dar soporte a un documento bien formado en FCM.
Se puede observar en la gráfica como se puede mantener la información para cada
elemento del documento XML, y además es perfectamente escalable. La inserción de
cualquier elemento nuevo se puede realizar sin el redimensionamiento global de toda la
estructura.
Entre la información de cada elemento que se desarrolla en el siguiente apartado
aparece información del cursor para ese elemento.
3.7 Cómo estrurar la información con el uso de referencias
Un elemento puede representarse por un conjunto de referencias, con la que poder tener
una estructura jerárquica de todo el documento XML. Con esta estructura jerárquica se
puede utilizar para organizar toda la información desde el primer elemento (el elemento
raíz) hacia cualquier otro elemento.
En la Figura 3.38 se puede observar como un elemento se caracteriza por un array
de referencias.
Otra información (Opcional)
Referencia al hijo del elemento
Referencia al padre del elemento
Referencia al hermano
Cursor del elemento
Figura 3.38: Referencias de un elemento.
Las referencias de un elemento son las siguientes:
 Una referencia al padre (si corresponde), el elemento raíz es un caso
especial, no tiene padre.
 Una referencia al hermano. Un elemento puede tener un hermano. Si el
elemento tiene un hermano la referencia correspondiente al hermano debería
contener el valor. El elemento raíz no puede tener hermanos.
 Una referencia al hijo. Se puede acceder a un hijo de este elemento con una
referencia al hijo.
Capítulo 3. Modelo propuesto.
83

El cursor al comienzo de este elemento. Se necesita un valor que represente
el cursor al comienzo del elemento. Este valor permite que mediante el
“movimiento” en la estructura jerárquica permita el acceso a elementos
anteriores.
Mediante estas referencias se puede caracterizar un elemento y se puede actualizar
la posición actual del cursor con los datos previamente analizados, usando las
referencias de los elementos.
Fa Figura 3.39 muestra la estructura jerárquica que se puede crear para hacer
referencia a la estructura de un documento.
padre
elemento
hijo
…
hermano
Referencia al hijo del elemento
Referencia al padre del elemento
Referencia al hermano
Cursor for this element
…
Figura 3.39: Uso de referencias para representar un elemento.
3.8 La Interfaz XMLFCMConstants
FCM es una implementación del nuevo método análisis de documentos XML basado en
eventos para la J2ME. Los eventos se producen bajo demanda del consumidor siguiendo
un patrón iterativo. Este patrón en cada paso devuelve un valor entero relacionado con
el evento producido.
Los valores devueltos se asocian con los eventos especificados en la interfaz
XMLFCMConstants.
La implementación StAX reserva los valores enteros en el rango de 0 a 256 para
este propósito, pudiendo el usuario definir nuevos eventos fuera de este rango.
En la Figura 3.40 se presentan los eventos soportados por la implementación FCM
para el manejo por parte de la aplicación.
XMLFCMConstants.START_ELEMENT
XMLFCMConstants.START_DOCUMENT
XMLFCMConstants.END_ELEMENT
XMLFCMConstants.PROCESSING_INSTRUCTION
XMLFCMConstants.CHARACTERS
XMLFCMConstants.SPACE
84
Contribución al análisis XML para la mejora en las prestaciones de memoria.
XMLFCMConstants.END_DOCUMENT
XMLFCMConstants.ATTRIBUTE
XMLFCMConstants.DTD
XMLFCMConstants.CDATA
XMLFCMConstants.NAMESPACE
Figura 3.40: Elementos de la interfaz XMLFCMConstants.
3.9 Otras características de la implementación
Existen otras características de la implementación que las detallo en los siguientes
puntos:
o El tamaño de la implementación es de un archivo jar de 21.5 KB. Este tamaño
es sin ofuscación.
o El analizador implementado es una API bidireccional. La bidireccionalidad se
realiza debido a las clases
o XMLFCMReader para realizar el proceso de lectura del documento y
o XMLFCMWriter, que permite escribir un documento XML a través de un
flujo.
o No soporta validación ni contra un XML Schema ni contra una DTD. Pero las
DTD se devuelven como String.
o Soporte para nombres cualificados. Se implementa la clase QName, para este
propósito. Los nombres cualificados siguen la especificación XML Schema
Part2:
Datatypes
specification[Schema
04],
y
Namespaces
in
XML[Namespaces].
o Todas las clases del paquete com.sierra.io, están relacionadas con las
operaciones de lectura y escritura del flujo. Estas clases son nuevas en relación
a la implementación JSR-173. Son las siguientes:
o Perteneciente al paquete io:
 ArrayInputStream
 XMLReader
 XMLWriter
o Perteneciente al paquete com.sierra.io.i18n:
 ReaderUCS4
 ReaderUTF16
 ReaderUTF8
 WriterUCS4
 WriterUTF16
 WriterUTF8
Capítulo 3. Modelo propuesto.
85
La Figura 3.41 muestra las representación de las clases de la implementación en una
estructura arbórea para la representación de los ficheros contenidos en los directorios,
\---com
\---sierra
+---io
|
|
ArrayInputStream.java
|
|
XMLReader.java
|
|
XMLWriter.java
|
|
|
\---i18n
|
ReaderUCS4.java
|
ReaderUTF16.java
|
ReaderUTF8.java
|
WriterUCS4.java
|
WriterUTF16.java
|
WriterUTF8.java
|
\---xml
|
XMLConstants.java
|
+---fcm
|
Location.java
|
XMLFCMConstants.java
|
XMLFCMException.java
|
XMLFCMReader.java
|
XMLFCMWriter.java
|
\---namespace
NamespaceContext.java
QName.java
Figura 3.41: Clases de la implementación.
Los métodos públicos que están contenidas en las clases de la implementación
realizada se muestran en la Figura 3.42.
86
Contribución al análisis XML para la mejora en las prestaciones de memoria.
XMLFCMReader
XMLFCMWriter
QName
+close()
+flush()
+getNamespaceContext()
+getPrefix()
+getProperty()
+setDefaultNamespace()
+setNamespaceContext()
+setPrefix()
+writeAttribute()
+writeCData()
+writeCharacters()
+writeComment()
+writeDefaultNamespace()
+writeDTD()
+writeEmptyElement()
+writeEmptyElement()
+writeEndDocument()
+writeEndElement()
+writeEntityRef()
+writeNamespace()
+writeProcessingInstruction()
+writeProcessingInstruction()
+writeStartDocument()
+writeStartElement()
+writeStartElement()
+writeStartElement()
<<interface>>
XMLConstants
<<interface>>
XMLFCMConstants
<<interface>>
NamespaceContext
+getNamespaceURI()
+getPrefix ()
+getPrefixes()
XMLFCMException
<<interface>>
Location
+setCursorToPreviousSibling ()
+setCursorToParent()
+setCursorToRoot()
+hasPreviousSibling()
+hasParent()
+skipWithoutParseChild()
+close()
+getAttributeCount()
+getAttributeLocalName()
+getAttributeName()
+getAttributeNamespace()
+getAttributePrefix()
+getAttributeType()
+getAttributeValue()
+getCharacterEncodingScheme()
+getElementText()
+getEncoding()
+getEventType()
+getLocalName()
+getLocation()
+getName()
+getNamespaceContext()
+getNamespaceCount()
+getNamespacePrefix()
+getNamespaceURI()
+getPIData()
+getPITarget()
+getText()
+getTextCharacters()
+getTextLength()
+getTextStart()
+getVersion()
+hasName()
+hasNext()
+hasText()
+isAttributeSpecified()
+isCharacters()
+isEndElement()
+isStandalone()
+isStartElement()
+isWhiteSpace()
+next()
+nextTag()
Figura 3.42: Diagrama UML de FCM.
Esta figura presenta mediante un diagrama UML los métodos más destacados de la
implementación realizada y se puede comparar con la Figura 2.6, Figura 2.13 y Figura
2.19, del capítulo anterior donde se presenta la jerarquía de interfaces del nivel 2 de
DOM, las interfaces de SAX 2.0, y la API para StAX, respectivamente.
La implementación ha tenido en cuenta el implementar el menor número de clases,
menor número de métodos por clase, menor número de objetos utilizados, a fín de tener
un mejor comportamiento en memoria. Todo ello para hacer un uso menos intensivo de
la memoria en el proceso de análisis de un documento XML.
3.10 Dependencia del estado.
Como ya se ha detallado en el capítulo anterior, a priori, los modelos basados en eventos
requieren menos memoria que los modelos basados en árboles. Si bien se pueden
construir el árbol DOM y recorrerlo siguiendo un orden para generar eventos a partir de
él proporcionando de esta forma una interfaz basada en eventos a partir del árbol DOM.
Push necesita menos carga de procesamiento que el modelo DOM. Push está
orientado hacia un procesamiento independiente del estado, donde los elementos que se
Capítulo 3. Modelo propuesto.
87
manejan no son dependientes de los eventos que se han producido con anterioridad. El
modelo Pull, por otra parte, está orientado hacia un procesamiento dependiente del
estado. En el procesamiento dependiente del estado, el programa (o aplicación) puede
realizar operaciones dependiendo según el estado (o evento) en el que esté (se genere).
Expresado de otra forma, los métodos que se pueden invocar en los modelos Pull
dependerán del evento generado. Esta característica se mantiene para la implementación
realizada y se detalla en la Figura 3.43. En esta figura se presentan las operaciones que
se pueden realizar para todos los estados generados en el análisis del documento.
Operaciones sobre todos los estados
public final boolean hasNext()
public final void close() throws XMLFCMException
public final String getNamespaceURI(String prefix)
public final boolean isStartElement()
public final boolean isEndElement()
public final boolean isCharacters()
public final boolean isWhiteSpace()
public final NamespaceContext getNamespaceContext()
public final int getEventType()
public final Location getLocation()
public final boolean hasText()
public final boolean hasName()
public final void setCursorToRoot()
public final void setCursorToPreviousSibling()
public final void setCursorToParent () throws XMLFCMException
public final boolean hasParent ()
public boolean hasPreviousSibling ()
Figura 3.43: Métodos para todos los estados.
Como se ha indicado anteriormente, hay métodos especificos de un determinado
estado. La Figura 3.44 muestra los métodos que se pueden invocar para los estados:
START_ELEMENT, END_ELEMENT, START_DOCUMENT y END_DOCUMENT.
Estado
START_DOCUMENT
Operaciones sobre el estado
public final int next() throws XMLFCMException
public final String getEncoding()
public final String getVersion()
public boolean isStandalone()
public final boolean standaloneSet()
public final String getCharacterEncodingScheme()
public final int nextTag() throws XMLFCMException
88
Contribución al análisis XML para la mejora en las prestaciones de memoria.
START_ELEMENT
public final int next() throws XMLFCMException
public final QName getName()
public final String getLocalName()
public final boolean hasName()
public final String getPrefix()
getAttributeXXX()
public final boolean isAttributeSpecified(int index)
getNamespaceXXX(),
public final String getElementText()
throws XMLFCMException
public final int nextTag() throws XMLFCMException
END_ELEMENT
public final int next() throws XMLFCMException
public final QName getName()
public final String getLocalName()
public final boolean hasName()
public final String getPrefix()
getNamespaceXXX()
public final int nextTag() throws XMLFCMException
END_DOCUMENT
public final void close() throws XMLFCMException
Figura 3.44: Métodos para todos los estados START_ELEMENT, END_ELEMENT,
START_DOCUMENT y END_DOCUMENT.
La Figura 3.45 presenta los métodos para los estados ATTRIBUTE,
NAMESPACE, PROCESSING_INSTRUCTION, ENTITY_REFERENCE y DTD.
Estados
ATTRIBUTE
Operaciones sobre el estado
public final int next() throws XMLFCMException
public final int nextTag() throws XMLFCMException
getAttributeXXX()
public final boolean isAttributeSpecified(int index)
NAMESPACE
public final int next() throws XMLFCMException
public final int nextTag() throws XMLFCMException
getNamespaceXXX()
PROCESSING_
public final int next() throws XMLFCMException
INSTRUCTION
public final String getPITarget()
public final String getPIData()
public final int nextTag() throws XMLFCMException
ENTITY_
REFERENCE
public final int next() throws XMLFCMException
public final String getLocalName()
public final String getText()
public final int nextTag() throws XMLFCMException
Capítulo 3. Modelo propuesto.
DTD
89
public final int next() throws XMLFCMException
public final String getText()
public final int nextTag() throws XMLFCMException
Figura 3.45: Métodos para todos los estados ATTRIBUTE, NAMESPACE,
PROCESSING_INSTRUCTION, ENTITY_REFERENCE y DTD.
La Figura 3.46 presenta los métodos para los estados ATTRIBUTE,
NAMESPACE, PROCESSING_INSTRUCTION, ENTITY_REFERENCE y DTD.
Estados
SPACE
COMMENT
CDATA
CHARACTERS
Operaciones sobre el estado
public final int next() throws XMLFCMException
XXX getTextXXX(),
public final int nextTag() throws XMLFCMException
Figura 3.46: Métodos para todos los estados SPACE, COMMENT, CDATA y CHARACTERS.
Otros métodos parcialmente especificados anteriormente se detallan en la Figura
3.46.
Metodo
Operaciones sobre el estado
public final NamespaceContext getNamespaceContext()
getNamespaceXXX()
public final int getNamespaceCount()
public final String getNamespacePrefix(int index)
public final String getNamespaceURI(String prefix)
public final String getNamespaceURI(String prefix)
public final int getTextStart()
getTextXXX()
public final String getText()
public final char[] getTextCharacters()
public final int getTextCharacters(int sourceStart,
char[] target,
int targetStart,
int length)
public final int getTextLength()
public final int getAttributeCount()
getAttributeXXX()
public final String getAttributeLocalName(
int index)
public final QName getAttributeName(int index)
public final String getAttributeNamespace(
int index)
public final String getAttributePrefix(int index)
public final String getAttributeValue(int index)
public final String getAttributeValue(
String namespaceURI,
String localName)
90
Contribución al análisis XML para la mejora en las prestaciones de memoria.
Figura 3.47: Otros métodos parcialmente especificados.
4 Conclusiones.
En el presente capítulo se ha presentado el nuevo modelo de análisis de documentos
XML, que propone extender la interfaz Pull a todo el documento, permitiendo realizar
un análisis en el sitio donde se encuentra la información. De esta forma se propone
mantener la representación serializada de la información XML, que podría ser la fuente
de donde provienen los datos, de tal forma que no se necesite una representación arbórea
como con el modelo DOM, y a diferencia de los modelos previos basados en eventos
(Push y Pull) se pueda acceder a toda la información previamente analizada.
o Se introducen los requisitos de partida y la valoración de los modelos de
análisis existentes.
o Se proporcionan las especificaciones de diseño, entre las cuales destacan:
 Movimiento del cursor hacia atrás.

Realizar un análisis de la documentación en el lugar donde se
encuentran los datos.
o Describe el funcionamiento básico, así como el modelo de
comportamiento de cada una de los elementos que intervienen en el
modelo productor/consumidor.
o Describe las nuevas operaciones que ofrece el nuevo modelo, FCM.
Dicho modelo proporciona el movimiento del cursor no sólo hacia
delante mediante un proceso de iteración como el modelo Pull, sino que
permite el movimiento de cursor hacia atrás
o El mantener la representación serializada de la información XML hace el
proceso iteración hacia delante pueda realizarse sin el análisis de los
elementos hijos de un cierto elemento mediante el método
skipWithoutParseChilds(), teniendo un control del análisis del
documento XML.
o Se presenta un ejemplo de utilización de FCM, en código Java
La extensión de la interfaz Pull a eventos en la parte del cliente, dan al cliente un
mayor control ampliando el rango de aplicación de un analizador XML. El mantener una
representación serializada de todo el documento permite la posibilidad de generar
eventos al estilo Pull, añadiendo nuevas posibilidades sobre dicho modelo. Los actuales
analizadores del modelo Pull sólo implementan parcialmente una interfaz Pulleverything, y muchos son data-copying. Según como los datos son devueltos, los
analizadores copian toda la información del documento XML en objetos,
devolviéndolos al cliente. Los analizadores in-situ, en la medida de lo posible, indican
donde los datos fueron encontrados en el documento analizado. Según que información
Capítulo 3. Modelo propuesto.
91
es devuelta al cliente, la estructura de los elementos y propiedades, y datos que
contienen la información se puede proporcionar, y los datos que contienen la
información. La información de la entidad externa y la posibilidad del cliente de
participar en la resolución de la entidad.
En este capítulo se ha presentado una implementación Java para el modelo Pull
extendiendo la interfaz Pull a todo el documento. La plataforma de Java, J2ME, es una
plataforma donde se proporcionan unos paquetes obligatorios y unos opcionales debido
a que son dispositivos con recursos limitados, y las aplicaciones sobre esta plataforma
deben de tenerlo presente a la hora de realizar sus implementaciones.
Teniendo en cuenta estos puntos, se ha presentado una implementación de un
analizador XML para la plataforma J2ME.
o Se han detallado las clases mínimas para realizar la implementación.
o Se ha presentado como se realiza la detección del esquema de
codificación que soporta la implementación del nuevo modelo.
o Se analiza qué estructura se utiliza y el tamaño para realizar el
mantenimiento de la representación serializada de la información XML.
o Se presentan modelos válidos para poder implementar la característica de
“bien formados” de los documentos XML, mostrando la opción elegida.
o Se presenta la representación de un elemento dentro de la estructura de
representación de la información XML y de la relación entre los distintos
elementos.
o Se detalla la composición de la interfaz XMLFCMConstant.
o Se especifica la estructura de directorios y las clases contenidas en ellos.
o Se especifica los métodos que se implementan en las clases para el
análisis de los documentos.
En el siguiente capítulo se comprueba cúal es el funcionamiento del modelo, y las
carácterísticas específicas que tiene la implementación realizada.
CAPÍTULO 4.
Análisis Comparativo del Rendimiento del Modelo
En el capítulo previo se ha presentado el modelo propuesto para el análisis XML, con
detalles para la implementación sobre la plataforma Java para dispositivos móviles. Esta
plataforma presenta características específicas en los recursos memoria disponibles. En
este capítulo se presenta las medidas del funcionamiento de la implementación realizada
para el prototipo implementado. Se presenta el funcionamiento del modelo
implementado. Se compara con otros analizadores para la misma plataforma para la que
se ha realizado la implementación del capítulo previo. Se presenta la codificación
soportada por la implementación comparada con otras implementaciones.
1 Introducción
Algunos analizadores XML implementados en el lenguaje de programación Java
inicialmente se diseñaron para uso de aplicaciones para la J2EE/J2SE, entre los cuales
se incluyen los applets de Java, y con algunas modificaciones, se pueden utilizar en la
plataforma J2ME. MIDP es un entorno de recursos limitados. Éstos fueron
originalmente diseñados para la J2SE, y se han modificado para J2ME MIDP y pueden
ejecutarse como MIDlets.
En el entorno de la J2ME MIDP, los desarrolladores deberían constantemente tener
cuidado con la memoria utilizada en su aplicación. Los analizadores XML usados deben
ser de un tamaño de 10KB a 30KB, aunque en algunos casos su tamaño sea menor.
La mayor parte de las pruebas se han realizado sobre el emulador Wireless Toolkit,
la implementación se ha realizado para esta plataforma y las medidas comparativas se
orientan a mostrar los resultados comparativos en esta plataforma. El escenario es un
PC, con el emulador que pide un fichero XML al servidor, el fichero es descargado y
procesado y analizado con la herramienta de prueba. Para evaluar el funcionamiento de
los analizadores se observa la evolución temporal de la memoría utilizada.
Se evalúan los diferente analizadores eligiendolos como representación de los
modelos de análisis vistos en los capítulos previos. El tamaño de los fichero XML es un
parámetro que se cambia para ver el comportamiento de los modelos.
Para evitar la degradación de las medidas de memoria realizadas, la aplicación no
mantiene ninguna estructura de los datos. Los datos se obtienen y se muestran enla
94
Contribución al análisis XML para la mejora en las prestaciones de memoria
pantalla del dispositivo, de esta forma la medida que se obtiene es de la memoria de los
datos XML que utiliza el analizador.
2 Entorno para realizar medidas
El entorno para las medidas del funcionamiento de los analizadores XML en la
plataforma J2ME que se ha utilizado va enfocado a utilizar las capacidades que ofrece el
emulador Wireless Toolkit.
El entorno es, para realizar las medidas del funcionamiento de los analizadores
XML. La mayor parte de las pruebas se han realizado con el siguiente escenario: un PC,
con el emulador que pide un fichero XML al servidor, el fichero es descargado y
procesado. Para evaluar el funcionamiento de los analizadores se puede ver la evolución
temporal de la memoría. Se evalúan los diferente modelos de análisis. El tamaño de los
fichero XML es un parámetro que puede cambiar para ver el funcionamiento.
3 Funcionamiento de la implementación de FCM
El nuevo modelo de análisis presenta características especificas difeentes al resto de los
modelos. En este apartado se explica el funcionamiento de la implementación realizada.
3.1 Introducción
Para comprobar el funcionamiento de la implementación realizada, se ha usado un
fichero XML de tamaño 17024 Bytes. La Figura 4.48 muestra una pantalla del emulador
Wireless Toolkit. En ella se representa en el eje y la memoria utilizada, y en el eje x la
evolución temporal en el proceso de ejecución.
Figura 4.48: Funcionamiento del analizador FCM en el WTK.
En el procesamiento de un documento XML para el análisis con la implementación
FCM podemos distinguir varias fases:
1 Inicialización de los objetos.
2 Lectura de los datos.
3 Análisis de la información.
Capítulo 4. Análisis comparativo del rendimiento del modelo.
95
Estos puntos se detallan en los siguiente subapartados.
3.2 Inicialización de objetos
En la primera se realiza la inicialización de los objetos. Esta fase presenta un
crecimiento y un decrecimiento posterior. Es la parte izquierda de en la representación
gráfica. Esta fase no contiene ninguna información relevante de cara al funcionamiento
del analizador. En todos los casos y con todos los analizadores presenta el mismo
comportamiento.
3.3 Lectura de los datos
Una segunda fase en la que se dimensiona la estructura de datos en la que se va a
insertar los datos leídos del flujo de entrada, que en este caso es utilizando una conexión
HTTP. La estructura se dimensiona al principio y no existe redimensionado, a fín de
realizar un uso eficiente de la memoria utilizada. Sino se realizara este proceso se
debería de realizar un redimensionado de las estructuras.
El tiempo de lectura de los datos procedente del flujo de entrada es de 1652
milisegundos. Esta es una zona “plana” no existe un incremento en la memoria
utilizada, la memoria se dimensiona al principio el tamaño utilizado es la representación
del “escalón”, y posteriormente se produce la inserción de los datos en la estructura.
Los datos se leen de la red, de forma similar al funcionamiento de los métodos de la
clase DataInputStream, es decir, realizando una composición de los caracteres leídos y
recomponiéndolos, en un byte, o dos byte dependiendo del esquema de codificación
(basado en 8 bits como UTF-8, ASCII, …; o 16-bit, como UTF-16, UTF-16BE, UTF16LE; los esquemas basados en 32 bits UCS-4, se transforman en unidades de 16 bits,
ya que el tamaño de los caracteres soportadas en el lenguaje de programación Java es de
16 bits). Esta estructura representa la representación serializada del analizador.
3.4 Fase de análisis
En la tercera fase se analiza el documento XML. En la representación gráfica es la parte
derecha de la figura. El tiempo de duración del análisis en el análisis del documento
XML es de 570 milisegundos. Este tiempo puede verse reducido ya que este modelo
permite realizar un análisis selectivo de la información XML.
En la figura se representa como una “rampa”. La memoria utilizada se incrementa a
medida que se realiza el análisis de los distintos elementos de los que consta el archivo
XML. Es importante ver como este modelo separa claramente la memoria utilizada en la
representación serializada del documento XML del análisis de dicha información esto
puntos se analizan el siguiente apartado.
96
Contribución al análisis XML para la mejora en las prestaciones de memoria
4 Comparación del funcioncionamiento con otros
analizadores
En este apartado se presentan las pruebas de la implementación realizada con otros
analizadores XML, sobre el lenguaje Java, y para la misma plataforma. Se han elegido
analizadores que representen los diferentes modelos de análisis presentados en capítulos
previos, estos son, DOM, Push y Pull. Se muestran las pruebas realizadas con ficheros
de varios tamaños. Hay que reseñar que todos los analizadores que se presentan tienen
un tamaño del fichero ejecutable incluida la aplicación suficientemente pequeño para
que se pueda ejecutar en este tipo de dispositivos. Por otra parte, que algunos de ellos
son versiones reducidas de otros modelos de análisis adaptados para esta plataforma. Y
que todos ellos intentan optimizar la ejecución en memoria.
4.1 Xparse-J 1.0
Xparse-J 1.0 [Xparse-J] es una analizador que sigue el paradigma de modelo de objeto
(like-DOM), y se implementó con la idea de ser la implementación con menor tamaño
en el planeta, tal y como dice en su página web. Este analizador no lee, ni procesa las
DTD, (algo bastante común en esta plataforma) y el manejo de errores es mínimo,
pretendiendo que los documentos se hayan verificado previamente, es decir, en la parte
del servidor.
4.2 TAMparser
Tiny API for Markup (TAMparser) [St.Laurent ] proporciona una pequeña interfaz para
el análisis XML y documentos similares, en la plataforma J2ME. TAM está diseñado
para ofrecer lo que el analizador encuentra, dejando a la aplicación hacer algo (como por
ejemplo interpretar la DTD) si se necesitara.
TAM está basado en un subconjunto de SAX2, el cual ha sido ligeramente
expandido. TAM usa los métodos de llamada similar a SAX, y una aproximación
similar, pero ha sido reducido para encontrar las necesidades de los pequeños proyectos,
y expandido ligeramente para reflexjar que el ananlizador TM no requiera el
procesamiento de una DTD.
El analizador devuelve elementos y nombre de los atributos tanto prefijos como
nombres locales, J2ME no incluye la clase StringTokenizer. Este analizador no soporta
los nombres cualificados, QNames.
TAM es de forma deliberada pequeño y no está pensado para ser extensible. Esto
debería ser posible en aplicaciones para usar la información proporcionada aquí para
exteder su funcionalidd hacia el soporte completo de XML 1.0, pero este trabajo se deja
como un ejercicio de aplicación. En particular, TAM deja procesamiento de la
Capítulo 4. Análisis comparativo del rendimiento del modelo.
97
declaración DOCTYPE y las entidades detrás de estas el construirlas en XML 1.0 a la
parte de la aplicación.
Las secciones CDATA y de comentario se proporcionan por el manejador lexico
ext de SAX2.
4.3 kXML
kXML [kXML2] es un proyecto mantenido por la organización Enhydra (actualmente
cerrado), con el soporte de espacio de nombre, que sigue el modelo Pull, y
opcionalmente soporte para DOM y WAP. El tamaño del fichero ejecutable puede
considerarse de un tamaño bastante grande para esta aplicación, más de 40K. Contiene
dos formas de trabajar:
 Manipulando árbol DOM, donde el árbol XML entero se analiza en
estructuras de nodos que residen en memoria y se pueden atravesar el árbol
con un programa.
 Capturando eventos al estilo pull, don se atraviesan los datos XML y
mediante sus correspondientes llamadas.
4.4 Medidas con ficheros de tamaño 1728 bytes
En una primera medida el tamaño del fichero XML es de 1728 bytes. Las pruebas se han
realizado para los cuatro analizadores mostrados, kXML usado como Pull, TAMparser
como representación del modelo Pull, Xparse-J 1.0 como DOM (like-DOM) y el nuevo
modelo presentado FCM. La Tabla 4.12 presenta los resultados en el consumo de
memoria para el análisis de los archivos.
KXML
FCM
TAMparser
Xparse-J 1.0
44 300 bytes
47 032 bytes
116 384 bytes
280 464 bytes
Tabla 4.12: Resultados numéricos para el fichero de 1728 bytes.
El comportamiento de los analizadores en memoria es bastante diferente para los
modelos basados en árboles a los modelos basados en eventos, ya que los de eventos
consumen menos memoria. El analizador kXML presenta el menor consumo de
memoria, mientras que el modelo Xpare-J 1.0 presenta el peor comportamiento. Se
puede observar además, que Xparse-J 1.0 consume más de 6 veces la memoria
consumida por el analizador kXML. Mientras que la diferencia entre el analizador
kXML y FCM es muy pequeña. Estos resultados se pueden ver de forma gráfica en la
Figura 4.49.
98
Contribución al análisis XML para la mejora en las prestaciones de memoria
500000
450000
400000
Bytes
350000
300000
250000
200000
150000
100000
50000
0
kXML
FCM
TAMparser
Xparse-J
Figura 4.49: Medidas de los analizadores con un fichero de 1728 bytes.
4.5 Funcionamiento de los distintos modelos
Las cuatro figuras siguientes muestran el funcionamiento de los analizadores que
representan los cuatro modelos: Xparse-J 1.0, TAMparser, kXML y FCM. La fase de
inicialización es similar para los cuatro, sin embargo FCM se diferencia del resto en que
separa claramente la fase de lectura del documento de la fase de análisis.
Model
Xparse-J 1.0
Size 1728 Bytes
Figura 4.50: Xparse-J 1.0 con ficheros de 1728 bytes.
Push
TAMparser
Size 1728 Bytes
Capítulo 4. Análisis comparativo del rendimiento del modelo.
99
Figura 4.51: TAMparser con ficheros de 1728 bytes.
Pull
kxml2
Size 1728 Bytes
Figura 4.52: Funcionamiento de kXML con ficheros de 1728 bytes.
FCM
Size 1728 Bytes
Figura 4.53: FCM con ficheros de 1728 bytes.
4.5 Medidas con ficheros de tamaño 24458 bytes
El siguiente grupo de pruebas se han realizado con archivos de un tamaño
considerablemente mayor, 24458 bytes. Los resultados de la memoria utilizada medidos
en el emulador Wireless Toolkit se presentan en la Tabla 4.13.
kXML
239 140 bytes
FCM
352 204 bytes
TAMparser
XXXX
Xparse-J 1.0
XXXX
Tabla 4.13: Resultados para el fichero de 24458 bytes.
Los analizadores Xparse-J 1.0, y TAMparser consumen toda la memoria disponible
para realizar las pruebas sobre el emulador (500 000 bytes). Los otros dos analizadores
kXML y FCM no consumen toda la memoria disponible por el emulador. Presentan
mejor comportamiento en relación a la memoria utilizada.
Todas las medidas realizadas han sido hechas teniendo en cuenta las peores casos
para el analizador FCM. FCM permite un análisis parcial del documento, esto
disminuiría el tamaño de la memoria utilizada. Por otra pare kXML admite el cargar
todo el documento en memoria, esta característica no se ha utilizado, y en este caso su
funcionamiento sería considerablemente peor.
En la Figura 4.54 presenta gráficamente los resultado de memoria y medidos en el
emulador WTK.
100
Contribución al análisis XML para la mejora en las prestaciones de memoria
500000
450000
400000
Bytes
350000
300000
250000
200000
150000
100000
50000
0
kXML FCM TAM Xparser-J
Figura 4.54: Medidas de los analizadores con un fichero de 24458 bytes.
FCM
Size 24458 Bytes
Figura 4.55: FCM con ficheros de 24458 bytes.
El comportamiento de FCM se caracteriza por mantener una representación
serializada del documento XML. La fase de lectura de la información del flujo HTTP
está claramente separada del proceso de análisis. Además se comprueba que el coste de
mantener una representación serializada de todo el documento XML es menor
comparada con el tamaño de la memoria utilizada para realizar el proceso de análisis.
Capítulo 4. Análisis comparativo del rendimiento del modelo.
101
Pull
kxml2
Size 24458 Bytes
Figura 4.56: Funcionamiento del kXML con ficheros de 24458 bytes.
En las Figuras 4.57 y 4.58 se muestra gráficamente el consumode toda la memoria
disponible y la ejecución del "garbage collector".
Push
TAMparser
Size 24458 Bytes
Figura 4.57: Funcionamiento de TAMparser con ficheros de 24458 bytes.
Figura 4.58: Funcionamiento de Xparse-J 1.0 con ficheros de 24458 bytes.
102
Contribución al análisis XML para la mejora en las prestaciones de memoria
Figura 4.59: Captura del fichero descargado.
4.6 Codificación soportada por los distintos analizadores
El siguiente conjunto de pruebas muestran los esquemas de codificación soportada
por los distintos analizadores en la lectura de los documentos. La Tabla 4.14 muestra de
forma esquemática un resumen de estas pruebas.
En esta tabla se puede comprobar que todos lo analizadores soportan la codificación
ASCII.
ASCII
UTF-8
UTF-16BE
UTF-16 LE
UCS-4
kXML
Si
No
No
No
No
FCM
Si
Si
Si
Si
Si
TAMparser
Si
Si
No
No
No
Xparse-J
Si
Si
No
No
No
Tabla 4.14: Formatos de codificación soportados por los analizadores.
La prueba realizada para UTF-8, se realiza con el Byte Order Mark (BOM), es decir
la secuencia 0xEF 0xBB 0xBF, al comienzo de fichero que marca esta codificación. Los
caracteres del fichero XML sigue siendo el mismo. Todos los analizadores menos el
kXML soportan la codificación para UTF-8. kXML genera una excepción. En la
ventana del emulador aparece la siguiente información,
Error:org.xmlpull.v1.PullParserException: PI must
not start with xml (position:unknown @1:7 in
java.io.InputStreamReader@d590dbc)
Indicando que se ha producido un error en la Instrucción de Procesamiento. Este
mismo error se repite para el resto de codificación que se emplee en el archivo XML.
Los ficheros XML codificados según UCS-4 se han utilizado las clases para
escritura de archivos XML que proporciona la implementación de FCM. Para generar
los ficheros XML codificados según UTF-8, UTF-16BE y UTF-16LE, han sido
Capítulo 4. Análisis comparativo del rendimiento del modelo.
103
generados con los editor “Block de Notas de Windows XP” guardando con la opción
UTF-8, Unicode big endian, Unicode, respectivamente. La implementación FCM se ha
diseñado para soportar todos los esquemas de codificación especificados en la
recomendación XML.
5 Características de Funcionamiento de los Modelos
Se pueden establecer unas características para determinar las diferencias entre los
distintos modelos de análisis de los documentos XML, que recoja la facilidad de uso de
la interfaz, donde la mayor dificultad puede residir en la gestión de los métodos que
manejan la extracción de la información del documento XML.
La capacidad de utilizar XPath utilizando un analizador la determina la posibilidad
que presenta el modelo de mantener toda la información relacionada con el documento
XML, y esta posibilidad reside en los modelos DOM y FCM. Otro aspecto que se valora
es la eficiencia en memoria que será mayor en los modelos basados en eventos, es decir,
en Push, Pull y FCM. El análisis del documento sólo hacia delante se presenta en los
modelos Push y Pull. El mantener el documento en memoria por parte de los modelos
DOM y FCM permite el análisis hacia atrás.
Todos los modelos presentan la capacidad de lectura y todos ellos tienen la
capacidad de escritura y por tanto de bidireccionalidad salvo el modelo Push que no
tienen capacidad de escritura.
Todos estos puntos se presentan de forma esquemática en la siguiente Tabla 4.15.
Facilidad de uso
Capacidad de XPath
Eficiencia en Memoria
Análisis sólo hacia adelante
Lectura XML
Escritura XML
DOM
Alta
Si
Mala
No
Si
Si
Push
Medio
No
Buena
Si
Si
No
Pull
Alta
No
Buena
Si
Si
Si
FCM
Alta
Si
Buena
No
Si
Si
Tabla 4.15: Comparación de las características de los modelos.
6 FCM en la J2SE
Los objetivos marcados para al realizar esta Tesis Doctoral es el de realizar un prototipo
para la Java ME. Pero se ha llevado el prototipo implementado para la J2ME a la J2SE,
realizando una comparativa del rendimiento con otros analizadores de la J2SE.
Al igual que en los casos anteriores, el parámetro a medir es la memoria utilizada.
Las medidas son los modelos DOM y SAX que se proporcionan en la Java(TM) 2
Runtime Environment, Standard Edition (build 1.4.2_03-b02). El modelo Pull se ha
medido para sus dos implementaciones, en el estilo iterador y cursor. Estas medidas se
comparan con el comportamiento de la implementación de FCM. Las medidas
realizadas es con el archivo (libros.xml) con el que se han explicado los conceptos en el
104
Contribución al análisis XML para la mejora en las prestaciones de memoria
capítulo 2, su su tamaño es de 342 bytes. Las medidas se han realizado con la diferencia
de resultados del método freeMemory(), antes y despues de realizar el procesamiento.
FCM
79552
Push
83784
DOM
95400
StAX-iterator
102704
StAX-cursor
248136
Tabla 4.16: Medidas sobre la J2SE.
La Figura 4.60 muestra de forma gráfica las medidas realizadas sobre la J2SE.
Donde se comprueba que FCM presenta un buen comportamiento en el uso de la
memoria.
En la gráfica se puede ver como la memoria utilizada en el caso de DOM es mayor
que la de Push. El modelo implementado tiene un buen comportamiento en memoria,
mejor que el modelo Push.
Sin embargo resulta sorprendente como la implementación StAX tiene un mayor
uso de memoria que el análisis DOM. Ya los analizadores basados en eventos suelen
presentar un mejor comportamiento en memoria comparado con los analizadores del
estilo DOM. Esto podría deberse a que se genera el árbol para generar la secuencia de
eventos en la forma que la que JDOM y DOM4J generan eventos de tipo SAX a partir
de la estructura generada con DOM.
300000
250000
bytes
200000
150000
100000
50000
0
FCM
Push
DOM
Pull-Iterador
Pull-Cursor
Figura 4.60: Medidas sobre la J2SE.
7 Otras medidas sobre la J2SE
Este apartado presenta más medidas sobre la plataforma J2SE, si bien el prototipo ha
sido implementado pensando en su funcionamiento sobre la plataforma Java ME, y este
es el objetivo de la Tesis Doctoral, al final del capítulo de validación del prototipo
implementado se mostraron medidas para la plataforma J2SE.
Capítulo 4. Análisis comparativo del rendimiento del modelo.
105
Las siguientes medidas buscan desbordar las estructuras utilizadas en el proceso de
análisis. Difícilmente encontraremos documentos XML con una profundidad entorno al
centenar, sin embargo sí en cuanto al tamaño del archivo en relación con los recursos
disponibles, tal y como ya se ha presentado en capítulos previos. La misma idea es
aplicable al número de atributos utilizados por un elemento; el número de ellos puede
considerarse un mal uso en la composición de archivos XML. A pesar de esto, el
redimensionado de estructura puede suponer un problema cuando el tamaño de las
estructuras y el consumo en memoria sea grande. Las siguentes medidas tienen en
cuenta el dimensionado de las estructuras utilizadas y se mide al igual que antes su
comportamiento en memoria.
7.1 Programas para la generación de documentos XML
Para obtener las medidas se han realizado dos programas que generan archivos XML de
distintos tamaños, según el parámetro proporcionado en línea de comandos. Estos
programas se muestran en las Figuras 4.61 y 4.62. Las pruebas se han realizado sobre
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_03-b02). Los
analizadores sobre los que se han realizado las medidas son los que proporciona Java en
su edición estándar para SAX y DOM. También se han medido StAX en ambos estilos
Iterador y Cursor.
import
import
import
import
java.io.DataOutputStream;
java.io.OutputStream;
java.io.FileOutputStream;
java.io.IOException;
public class TesisMasPruebas{
public static void main(String args[]){
try{
FileOutputStream output =
new FileOutputStream ("prueba"+args[0]+".xml");
DataOutputStream out = new DataOutputStream(output);
int top = Integer.parseInt(args[0]);
top = 3;
out.writeBytes("<?xml version='1.0'?>");
out.writeBytes("<root>\n");
StringBuffer local = new StringBuffer("a");
// 'a' = 97
// 'z' = 122
int posiciones = local.length() -1;
while(posiciones < Integer.parseInt(args[0])){
out.writeBytes("<"+ local.toString() +">");
posiciones = local.length() -1;
char caracter = local.charAt(posiciones);
//Incrementa en uno
local.setCharAt(posiciones, ++caracter);
int recorre = posiciones;
while(recorre > -1 && local.charAt(recorre)==('z' + 1) ){
local.setCharAt(recorre, 'a');
Contribución al análisis XML para la mejora en las prestaciones de memoria
106
if(recorre == 0)
local.append("a");
else{
recorre--;
caracter = local.charAt(recorre);
//Incrementa en uno
local.setCharAt(recorre, ++caracter);
}
}
}
posiciones = local.length() -1;
while( posiciones >= 0){
char caracter = local.charAt(posiciones);
//Incrementa en uno
local.setCharAt(posiciones, --caracter);
int recorre = posiciones;
while ((local.length()> 0) && (recorre > -1)
&& (local.charAt(recorre) == ('a' - 1)) ){
local.setCharAt(recorre, 'z');
if(recorre == 0){
local.setLength((local.length() -1));
}else{
recorre--;
caracter = local.charAt(recorre);
//Incrementa en uno
local.setCharAt(recorre, --caracter);
}
}
posiciones = local.length() -1;
if(local.length()> 0){
out.writeBytes("</"+ local.toString() +">");
}
}
out.writeBytes("</root>");
out.close();
}catch(IOException e){
System.err.println("Error en ejecución ");
e.printStackTrace();
}
}
}
Figura 4.61: Programa para generar archivos de medidas para la profundidad.
import
import
import
import
java.io.DataOutputStream;
java.io.OutputStream;
java.io.FileOutputStream;
java.io.IOException;
public class MasPruebasAtributos{
public static void main(String args[]){
try{
FileOutputStream output =
new FileOutputStream ("atributos"+args[0]+".xml");
DataOutputStream out = new DataOutputStream(output);
int top = Integer.parseInt(args[0]);
Capítulo 4. Análisis comparativo del rendimiento del modelo.
107
top = 3;
out.writeBytes("<?xml version='1.0'?>");
out.writeBytes("<root>\n");
System.out.println("\n<root>");
StringBuffer local = new StringBuffer("a");
// 'a' = 97
// 'z' = 122
int posiciones = local.length() -1;
out.writeBytes("<abc ");
while(posiciones < Integer.parseInt(args[0])){
out.writeBytes(" "+ local.toString() +
"='"+local.toString()+"'");
posiciones = local.length() -1;
char caracter = local.charAt(posiciones);
local.setCharAt(posiciones, ++caracter);
int recorre = posiciones;
while (recorre > -1 &&
local.charAt(recorre) == ('z' + 1) ){
local.setCharAt(recorre, 'a');
if(recorre == 0)
local.append("a");
else{
recorre--;
caracter = local.charAt(recorre);
//Incrementa en uno
local.setCharAt(recorre, ++caracter);
}
}
}
out.writeBytes(" />");
out.writeBytes("</root>");
out.close();
}catch(IOException e){
System.err.println("Error en ejecución ");
e.printStackTrace();
}
}
}
Figura 4.62: Programa para generar archivos de medidas para los atributos.
7.2 Resultados
Las pruebas que se presetan muestran las medidas realizadas para la profundidad del
documento XML y el número de atributos en un elemento utilizando los programas del
apartado anterior. Esta es la clasificación que siguen los dos siguientes subapartados.
108
Contribución al análisis XML para la mejora en las prestaciones de memoria
7.2.1 Profundidad del archivo
La forma de invocar al intérprete de Java para la generación de los archivos con los que
realizar las medidas para obtener resultados de la profundidad de un documento XML,
es de la siguiente forma:
java TesisMasPruebas X
Con X, uno de los siguientes valores: 0, 1, 2, y 3.
Ficheros generados son los siguientes se muestran en la Figura 4.63.
Nombre del fichero
Tamaño en byte
prueba0.xml
35
prueba1.xml
226
prueba2.xml
6.312
prueba3.xml
199.650
Figura 4.63: Nombre y tamaño de los ficheros.
Las medidas del consumo de memoria para cada uno de los casos se muestran en las
siguientes tablas. El valor de los datos de todas las tablas son en bytes.
Para prueba0.xml:
FCM
69576
Push
80848
DOM
88464
StAX-iterator
86880
StAX-cursor
246552
Tabla 4.17: Medidas sobre la J2SE para prueba0.xml.
Para prueba1.xml:
FCM
69952
Push
83008
DOM
92760
StAX-iterator
93704
StAX-cursor
249704
Tabla 4.18: Medidas sobre la J2SE para prueba1.xml.
Para prueba2.xml:
FCM
82128
Push
137104
DOM
X
StAX-iterator
288912
StAX-cursor
352976
Tabla 4.19: Medidas sobre la J2SE para prueba2.xml.
Para prueba3.xml:
FCM
364968
Push
219584
DOM
X
StAX-iterator
1121272
StAX-cursor
1068456
Tabla 4.20: Medidas sobre la J2SE para prueba3.xml.
Los ejemplos con los ficheros prueba2.xml y prueba3.xml, fallan para el modelo
DOM.
En
concreto,
salta
una
excepción
"
Error:
java.lang.ArrayIndexOutOfBoundsException: 200", que induce a pensar que la
profundidad de los elementos de un documento XML la mantiene internamente en un
array de la dimensión indicada.
Estos resultados se pueden ver gráficamente las Figuras 4.64, 4.65, 4.66, y 4.67.
Capítulo 4. Análisis comparativo del rendimiento del modelo.
300000
bytes
250000
200000
150000
100000
50000
0
FCM
Push
DOM Pull-Iter Pull-Cursor
Figura 4.64: Medidas de prueba0.xml.
300000
bytes
250000
200000
150000
100000
50000
0
FCM
Push
DOM Pull-Iter Pull-Cursor
Figura 4.65: Medidas de prueba1.xml.
500000
bytes
400000
300000
200000
100000
0
FCM
Push
DOM Pull-Iter Pull-Cursor
Figura 4.66: Medidas de prueba2.xml.
1200000
bytes
1000000
800000
600000
400000
200000
0
FCM
Push
DOM Pull-Iter Pull-Cursor
Figura 4.67: Medidas de prueba3.xml.
109
110
Contribución al análisis XML para la mejora en las prestaciones de memoria
7.2.2 Número de atributos
La forma de invocar al intérprete de Java para la generación de los archivos con los que
realizar las medidas para obtener resultados relacionados con el número de atributos de
un documento XML, es de la siguiente forma:
java MasPruebasAtributos X
Con X, uno de los siguientes valores: 0, 1, 2, y 3.
Ficheros generados son los siguientes
Nombre del fichero
Tamaño en byte
atributos0.xml
43
atributos1.xml
207
atributos2.xml
5.617
atributos3.xml
181.379
Figura 4.68: Nombre y tamaño de los ficheros.
Las medidas del consumo de memoria para cada uno de los casos se muestran en las
siguientes tablas. El valor de los datos de todas las tablas son en bytes.
Para atributos0.xml:
FCM
69592
Push
80944
DOM
88624
StAX-iterator
87080
StAX-cursor
246624
Tabla 4.21: Medidas sobre la J2SE para atributos0.xml.
Para atributos1.xml:
FCM
69920
Push
87800
DOM
97160
StAX-iterator
104600
StAX-cursor
250144
Tabla 4.22: Medidas sobre la J2SE para atributos1.xml.
Para atributos2.xml:
FCM
80736
Push
276472
DOM
326392
StAX-iterator
281928
StAX-cursor
344320
Tabla 4.23: Medidas sobre la J2SE para atributos2.xml.
Para atributos3.xml:
FCM
328424
Push
X
DOM
1079544
StAX-iterator
1038288
StAX-cursor
X
Tabla 4.24: Medidas sobre la J2SE para atributos3.xml.
300000
bytes
250000
200000
150000
100000
50000
0
FCM
Push
DOM Pull-Iter Pull-Cursor
Capítulo 4. Análisis comparativo del rendimiento del modelo.
111
Figura 4.69: Medidas de atributos0.xml.
300000
bytes
250000
200000
150000
100000
50000
0
FCM
Push
DOM Pull-Iter Pull-Cursor
Figura 4.70: Medidas de atributos1.xml.
400000
bytes
300000
200000
100000
0
FCM
Push
DOM Pull-Iter Pull-Cursor
Figura 4.71: Medidas de atributos2.xml.
1200000
bytes
1000000
800000
600000
400000
200000
0
FCM
Push
DOM Pull-Iter Pull-Cursor
Figura 4.72: Medidas de atributos3.xml.
De todas estas gráficas podemos decir que los modelos basados en eventos tienen
un buen comportamiento en memoria. El modelo DOM presenta peor comportamiento
en memoria que el modelo Push y FCM.
Push mejora a FCM solo en la prueba Figura 4.73 del fichero prueba3.xml. El
modelo Push no mantiene ninguna estructura relacionada con la información analizada,
por esto cuando el tamaño del fichero es considerablemente grande su uso es bueno. Su
dimensionamiento se ve desbordado en la prueba de la Figura 4.72, para el fichero
atributos3.xml.
112
Contribución al análisis XML para la mejora en las prestaciones de memoria
Puede sorprender que el modelo Pull en sus dos formas, Iteración y Cursor tengan
un comportamiento peor que el modelo DOM. Esto podría deberse a que se genera el
árbol para generar la secuencia de eventos en la forma que la que JDOM y DOM4J
generan eventos de tipo SAX a partir de la estructura generada con DOM.
Puede deducirse de las medidas que simplemente se obtiene información del punto
a partir del cual las estructuras están dimensionadas en cada implementación, con
independencia del modelo utilizado. Por lo tanto se está considerando los detalles de la
implementación particular y no del modelo general que es el patrón buscado al realizar
las medidas. Sin embargo remarcar que tales dimensiones no son habituales en
documentos XML.
8 Conclusiones
En este capítulo se ha mostrado el análisis comparativo del rendimiento del modelo. Se
ha presentado la evolución temporal del funcionamiento de la implementación realizada
para el nuevo modelo FCM. Se ha comparado con el funcionamiento de otros
analizadores. Se pueden extraer varias conclusiones:
Se separa claramente en la implementación el soporte de la representación
serializada de la información XML de la memoria utilizada en el análisis de dicha
información.
El tamaño de la memoria utilizada para mantener la representación serializada de la
información XML es considerablemente menor que el tamaño en el procesamiento de
dicha información. Con esto se puede justificar el mantener una representación
serializada de la información XML, de tal forma que mediante el uso de eventos se
pueda manipular la información XML bajo el control de la aplicación. FCM puede
mover no solo hacia delante como lo realizan los modelos Push y Pull, sino que al
mantener la representación serializada de la información XML permite mover hacia
atrás el cursor, y volver a generar nuevos eventos.
Este capítulo presentan además que el tamaño de los archivos es crítico en esta
plataforma y que puede degradar considerablemente el funcionamiento de la aplicación.
Se ha presentando los métodos de codificación soportados por el prototipo
implementado y comparado con otras implementaciones.
FCM se ha implementado para tener un buen funcionamiento en la plataforma Java
ME, aunque se han realizado pruebas sobre la plataforma J2SE. El funcionamiento de la
implementación realizada sobre esta plataforma presenta unos resultados excelentes.
CAPÍTULO 5.
Conclusiones y Líneas Futuras
En el capítulo 3 se ha presentado el modelo de análisis, y el capítulo 4 presenta medias
comparativas con otras implementaciones. En este capítulo se resumen los puntos más
importantes de la Tesis Doctoral, destacando sus contribuciones y proponiendo líneas de
continuación del trabajo realizado.
1 Conclusiones
En el primer capítulo se expuso el entorno, motivación y objetivos de la presente Tesis
Doctoral. En concreto:
 Se introdujeron las razones principales que han llevado a plantear nuevos
modelos de análisis de los documentos XML, en plataformas con
recursos limitados.
 Se resaltó como ventaja competitiva de los modelos que utilizan sólo
analizadores basados en eventos.

El motivo de la realización de la presente Tesis Doctoral es proporcionar
un modelo de análisis de la información XML que considere como punto
esencial la memoria
o tanto en ejecución de la aplicación,
o como el de la propia aplicación.
 El ámbito del estudio se orienta a proporcionar servicios Web XML para
la plataforma Java para móviles, J2ME.
Una vez establecidos el ámbito y motivos de la Tesis, en el capítulo 2 se presentó el
Estado del Arte de los modelos de análisis de los documentos XML. Se presentan
características que hacen diferentes a los analizadores bajo el punto de vista del
funcionamiento. La selección de un determinado modelo de análisis de la información
XML es clave para un uso eficiente y robusto en los dispositivos limitados. En
particular:
o Se introdujeron los conceptos fundamentales sobre el análisis de los datos
XML.
o Se introdujeron los conceptos fundamentales sobre la representación y uso
de la memoria que se realiza en el proceso de análisis de la información
XML.
114
Contribución al análisis XML para la mejora en las prestaciones de memoria
o Se llevó a cabo un estudio del funcionamiento de los distintos modelos de
análisis de la información XML, particularizando en las interfaces de dichos
modelos. Estás son, las interfaces basadas en árboles y las interfaces basadas
en eventos.
o Se detallaron las interfaces para los modelos de análisis DOM, Push y Pull.
o Se detallaron que existen diferencias en cuanto a si el análisis de los datos se
realiza mediante la extracción de los elementos de información, o bien, se
realizan en el lugar en el que los datos se han encontrado (in-situ).
o Se detallaron diferencias en los analizadores XML en función de cómo la
información es devuelta a la aplicación.
o Se detallaron diferencias en cuanto a la relación que existen entre el cliente
y el analizador.
El modelo para el análisis de los documentos XML propone el mantener la
representación serializada de la información XML, que podría ser la fuente de donde
provienen los datos, de tal forma que no se necesite una representación arbórea como
con el modelo DOM, y a diferencia de los modelos previos basados en eventos (Push y
Pull) se pueda acceder a toda la información previamente analizada.
o Se introducen los requisitos de partida y la valoración de los modelos de
análisis existentes.
o Se proporcionan las especificaciones de diseño, entre las cuales destacan:
o Movimiento del cursor hacia atrás.
o Duplicar la menor cantidad de memoria.
o Describe el funcionamiento básico, así como el modelo de comportamiento
de cada una de los elementos que intervienen en el modelo
productor/consumidor.
o Describe las nuevas operaciones que ofrece el nuevo modelo, FCM. Dicho
modelo proporciona el movimiento del cursor no sólo hacia delante
mediante un proceso de iteración como el modelo Pull, sino que permite el
movimiento de cursor hacia atrás
o El mantener la representación serializada de la información XML hace el
proceso iteración hacia delante pueda realizarse sin el análisis de los
elementos hijos de un cierto elemento mediante el método
skipWithoutParseChilds(), teniendo un control del análisis del documento
XML.
o Se presenta un ejemplo de utilización de FCM, en código Java.
En el capítulo 3 se presentó la implementación del modelo. En concreto:
o Se presenta una implementación para la plataforma Java para móviles,
J2ME.
Capítulo 5. Conclusiones y líneas futuras.
115
o Se detalla las clases mínimas para realizar la implementación.
o Se presenta la detección del esquema de codificación que soporta la
implementación del nuevo modelo.
o Se analiza qué estructura se utiliza y el tamaño para realizar el
mantenimiento de la representación serializada de la información XML.
o Se presenta modelos válidos para poder implementar la característica de
“bien formados” de los documentos XML, mostrando la opción elegida.
o Se presenta la representación de un elemento dentro de la estructura de
representación de la información XML y de la relación entre los distintos
elementos.
o Se detalla la composición de la interfaz XMLFCMConstant.
o Se especifica la estructura de directorios y las clases contenidas en ellos.
o Se especifica los métodos que se implementan en las clases para el análisis
de los documentos.
El funcionamiento del analizador FCM necesita la representación del documento
XML entero, para tener la posibilidad de realizar el movimiento del cursor a lo largo de
esta representación, conocida como representación serializada.
La necesidad de mantener la estructura serializada, hace que se separe la memoria
utilizada para la representación serializada del documento XML, de la memoria
utilizada para el procesamiento de dicho documento.
o El tamaño de la memoria para la representación serializada es menor que el
tamaño de la memoria que se utiliza para el análisis de la información. Por
lo que una conclusión de este método es que se “justifica” el uso y
mantenimiento de toda la estructura serializada.
o El mantener esta estructura serializada hace que, mediante el
direccionamiento hacia dicha estructura, se pueda realizar un análisis de
dicha información bajo demanda del “consumidor”, sin la necesidad de
construir el árbol del modelo DOM, por lo que no existen las penalizaciones
de memorias de dicho modelo.
o El tamaño de la memoria relacionada con el análisis del documento XML
puede reducirse mediante el uso del método skipWithoutParseChilds(), que
no analiza los elementos hijos de dicho elemento.
La aplicación de este modelo supone un avance en el análisis de la información
XML, debido a:
o Supone un uso eficiente de la memoria utilizada en el análisis de los
documentos XML.
o Si se tiene conocimiento de la estructura de la información a analizar, lo
cual suele ser habitual en los servicios Web, se puede realizar un análisis
116
Contribución al análisis XML para la mejora en las prestaciones de memoria
selectivo de la información, ya que el método skipWithoutParseChilds()
realiza un movimiento del cursor hacia delante sin el utilizar.
o No mantiene una estructura arbórea de objetos que representen el
documento XML, pero puede acceder a información contenida en el
documento XML previamente analizada, o realizar un movimiento hacia
atrás del cursor para analizarla.
o Permite realizar un análisis de la información XML a petición bajo demanda
de la aplicación.
o Permite el uso de esquemas de codificación basados en 8 bits, 16 bits y 32
bits.
2 Líneas de Avance
A continuación se presentan una serie de líneas de avance sobre los trabajos
realizados. Algunos de ellos ya publicados, otros propuestos por los revisores de este
trabajo:
 Formatos de transformación universales para plataformas con 16 bits
(como por ejemplo Java) que optimicen la memoria utiliza
representación XML serializada:
o Para algunos casos, se optimiza el número de unidades si se
utilizan cambio de página (page-shift). El algoritmo propuesto es



UTF-I16S [Sierra b], donde la conmutación se realizaría
utilizando dos valores para el cambio de página. Las páginas van
asociadas al uso de una unidad de 16 bits o dos unidades de 16
bits.
o Un formato de transformación de UCS-4, llamada UTF-I16. Los
caracteres se codifican usando secuencias de 1 a 3 unidades de
código. Una unidad de código está formada por 16 bits.
El análisis “in-situ” es una buena propuesta para pequeños dispositivos y
tiene otras aplicaciones. Por ejemplo, permite usar XML con formato de
datos “nativo” interno en un editor de texto de XML apropiado [Wilmott
a].
Uso del analizador para la invocación de un servicio Web con SOAP.
StASOAP [Sierra c] es una propuesta para utilizar SOAP con un
analizador basado en el nuevo modelo FCM.
El nuevo modelo de análisis de la información XML ofrece, un gran
abanico de posibilidades para la implementación de tecnologías que usan
XML como punto de partida de alguna forma, tales como XPath, XQuery
y Transformación. Queda por verificar si estas implementaciones son lo
Capítulo 5. Conclusiones y líneas futuras.
117
suficientemente ligeras para plataformas con recursos limitados en los
que se presenta esta Tesis Doctoral.
Apéndice A.
Autodetección de la Codificación de Caracteres
XML codifica funciones para declarar la codificación empleada con una etiqueta interna
en una entidad, indicando la codificación de caracteres se está utilizando. Un analizador
XML puede leer las etiquetas internas que determinan la codificación utilizada, aunque,
aparentemente se sabe qué codificación de caracteres se está utilizando, y es lo que la
etiqueta interna debería indicar. En general, esto es lo deseable. Pero podría no ser del
todo deseable en XML, aunque, XML limita el caso general a dos formas:
 cada implementación se supone que soporta sólo un conjunto finito de
codificación de caracteres, y
 la declaración de la codificación XML no está restringida al
posicionamiento de la etiqueta, y con la caracterización de su contenido,
sino que se puede autodetectar la codificación de caracteres utilizada y
expresada en cada entidad.
En algunos casos otras fuentes de información están disponibles además del flujo de
datos XML. En otros casos las fuentes de información están disponibles además para el
propio flujo de datos. Dos casos podrían distinguirse, dependiendo de si la entidad XML
se presenta para el procesador sin o con cualquier acompañamiento (externo) de
información. Se considera el primer caso primero.
1 Detección de la codificación
Ya que cada entidad no va acompañada de una información externa de información y no
debería comenzar con una declaración de codificación XML con UTF-8 y UTF-16, en el
cual los primeros caracteres debería ser '<?xml', cualquier analizador lo puede detectar,
después de dos o cuatro octetos de entrada, se puede saber qué codificación se utiliza.
Leyendo esta secuencia, podría ayudar a conocer cual de ellos se está utilizando, estos
pueden ser por ejemplo, el carácter ‘<’ se codifica en UCS-4 de la siguiente forma
“#x0000003C”,y el carácter ‘?’ se codifica en UCS-4 de la siguiente forma
“#x0000003F”, y el Byte Order Mark necesitado de UTF-16 en el flujo de datos es
“#xFEFF”. La notación ## se usa para representar cualquier valor del byte excepto los
de dos consecutivos ##s no pueden ser ambos 00.
Los bytes de dirección (BOM) para cada codificación se representan en la Tabla
A.25.
120
Contribución al análisis XML para la mejora en las prestaciones de memoria
Secuencia
00 00 FE FF
FF FE 00 00
00 00 FF FE
FE FF 00 00
Codificación
UCS-4, big-endian (orden 1234)
UCS-4, little-endian (orden 4321)
UCS-4, octeto no usual (2143)
UCS-4, octeto no usual (3412)
FE FF ## ##
UTF-16, big-endian
FF FE ## ##
UTF-16, little –endian
EF BB BF
UTF-8
Tabla A.25: Byte Order Mark para los distintos formatos de codificación.
Sin Byte Order Mark:
Secuencia
00 00 00
3C 00 00
00 00 3C
00 3C 00
00 3C 00
3C
00
00
00
3F
3C 00 3F 00
3C 3F 78 6D
4C 6F A7 94
Otro
Codificación
UCS-4 o cualquier otra codificación en unidades de 32 bits y caracteres ASCII
codificados como valores ASCII, en big endian, (1234), little endian (4321) y dos
ordenaciones no habituales (2143 y 3412). La declaración de codificación debería
leerse para determinar qué codificación se aplica.
UTF-16BE o big-endian ISO-10646-UCS-2 u otra codificación con unidades de 16
bits con orden big-endian y caracteres codificados como valores ASCII (la
declaración de codificación debería ser leída para poder determinarla).
UTF-16LE, little-endian ISO-10646-UCS-2 u otra codificación con unidades de 16
bit con orden little y caracteres ASCII codificados como valores ASCII (la
declaración debería leerse para determinarla)
UTF-8, ISO 646, ASCII, algunos ISO 8859, Shift-JIS, EUC, o cualquier otro de 7
bit, 8bit, o codificación de anchura variable que asegure que los caracteres ASCII
tienen una posición y valor normal, se debería leer la declaración de codificación
para detectar cual de ellos se aplica, ya que todos estos usan el mismo patrón de bit
para los caracteres ASCII relevantes, la declaración de codificación debería ser
leida.
EBCDIC (la declaración de codificación debería leers para saber el código de
página en uso)
UTF-8 sin declaración de codificación, o sino el flujo de datos está mal etiquetado,
fragmentado, corrupto, o envuelto en cualquier otro.
Tabla A.26: Secuencia de los primeros bytes para archivos XML sin el uso de BOM.
En los casos en los que no se necesitara leer la declaración para determinar
codificación, la sección 4.3.3 de la recomendación XML dice que la declaración de
codificación, si está presente, debe ser leída y el nombre de la codificación debe
coincidir con la codificación de la entidad. También, es posible una nueva codificación
diferente a las consideradas arriba y en este caso necesariamente se necesita la
declaración de la codificación para poder determinarla, en casos donde esto no se
requiera se debe determinar de forma explícita.
Este nivel de autodetección debe ser suficiente para leer la declaración de la
codificación XML y analiza la identificación de la codificación empleada, lo cual es
todavía necesario para distinguir los miembros individuales en cada familia de
Apéndice A.
121
codificación (es decir, UTF-8 de 8859, y las partes 8859 de cada una de ellas, o para
distinguir el código de página actual en EBCDIC, entre otros).
Ya que el contenido de la declaración de codificación se ha restringido a caracteres
del repertorio ASCII, un analizador puede realizar la lectura de la declaración de la
codificación tan pronto como sea detectada qué familia de codificación se está usando.
Ya que en la práctica, el rango de caracteres que se pueden codificar está dentro de
alguna de las categorías de arriba, la declaración de codificación XML permite
razonablemente realizar un etiquetado de esquemas de codificación, siempre y cuando
las fuentes de información externas en el sistema operativo o nivel de protocolo de
transporte no lo puedan realizar. Los caracteres de codificación tales como UTF-7 que
hacen sobrecargar el uso de valores de byte ASCII podrían caer en la realización
detectada.
Después de detectar la codificación usada, se puede actuar apropiadamente,
mediante invocar una rutina de entrada separada para cada caso, o mediante llamada a la
propia función de conversión en cada carácter de entrada.
Como cualquier sistema de autoetiquetado, la declaración de codificación XML no
trabaja si hay cualquier cambio software en la configuración de la entidad de
codificación sin una actualización de la declaración de codificación. Los
implementadotes de las rutinas de la codificación de caracteres se debería tener cuidado
para asegurar la correcta información de la etiqueta externa de la entidad, y de la interna.
2 Prioridades para la información externa de la codificación
El segundo caso ocurre cuando la entidad XML está acompañada por la
información de codificación, como en algunos sistemas de ficheros y algunos protocolos
de red. Cuando muchas fuentes de información están disponibles, su prioridad relativa y
el método preferido de manejo de conflictos debería ser especificada como parte del
protocolo de alto nivel usado para entregar el XML. En particular, se refiere a RFC 3023
[RFC 3023] o su sucesor, el cual define los tipos MIME text/xml y
application/xml, y proporciona algunos consejos. Para garantizar la
interoperabilidad, sin embargo, se recomienda usar la siguiente regla:
Si una entidad XML está en un fichero, el Byte-Order Mark y la declaración de
codificación se deben usarse para determinar la codificación de caracteres.
Apéndice B.
UTF-I16S
ISO 10646 Universal Character Set (UCS) y Unicode cubren la mayoría de los símbolos
de los alfabetos existentes. Hay varios formatos de transformación para UCS. UTF-I16S
es un formato de transformación con cambio de página para la codificación de los 4
octetos usados en UCS-4, para plataformas y entornos de 16 bits.
1 Introducción
Los formatos de transformación con unidades de 8 bits, tales como UTF-8 si se utilizan
en plataformas de 16 bits desaprovechan el byte superior. Los formatos de
transformación de 16 bit, han seguido los criterios de transformación marcados por
UTF-16. UTF-16 presenta varios problemas como son rango, ordenación de la
transformación y el marcar una región con caracteres que no puede transformar.
2 Formato de Transformación de UTF-I16S
El formato consta de dos páginas:
 Dos bytes.
La página con dos bytes codifica valores en del BMP, es decir, valores
(0x0000)-(0xFFFF).

Cuatro Byte
La página con cuatro bytes codifica valores fuera del BMP, es decir,
valores (0x10000)-(0x7FFFFFFF).
La siguiente tabla muestra el mapeado de UCS-4 en unidades de 16 bits según
UTF-I16S. En la Tabla B.19 se establece una relación entre el rango de valor asociado al
carácter UCS-4 y el número de unidades en el que se realizará la transformación. El
valor de UCS-4 en el rango de 0 a FFFF (en hex.) se corresponde con una unidad de 16
bits. Y los valores en el rango 10000 y 7FFFFFFF (en hex.) se corresponden con dos
unidades de código de 16 bits.
UCS-4 rango (Hex)
0000 0000-0000 FFFF
0001 0000-7FFF FFFF
Función
XXXX
XXXX XXXX
Tabla B.27: Mapeo de UCS-4 en unidades de 16 bits según UTF-I16S.
Los valores numéricos del carácter para realizar el código de página se muestra en la
Tabla B.21.
124
Contribución al análisis XML para la mejora en las prestaciones de memoria
Código
0xE (ShiftInput)
0xF (ShiftOutput)
Función
Cambio a página 1
Cambio a página 0
Tabla B.28: Códigos para el cambio de página en UTF-I16S.
3 Codificación de UCS-4 en UTF-I16S
Para realizar la transformación de UCS-4 a UTF-I16S se procede de la siguiente forma:
o Primero: Se determina el número de la unidad de código necesitadas
para el valor del carácter y la primera columna de la Tabla D1. Es
importante tener en cuenta que las filas de la tabla son mutuamente
exclusivas, es decir, hay solo una forma válida de obtener un carácter
UCS-4.
o Segundo: Se determina la página actual (inicialmente el código de
página es ShiftInput).
o Tercero: Si el código de página no está asociado con el número de
código de pagina determinado en el primer paso, entonces hay cambio de
página, y se necesita el código de cambio de página.
o Cuatro: Se codifica el valor del carácter en una o dos unidades de
código, siguiendo el criterio establecido en el primer paso.
4 Decodificación de UTF-I16S
Para decodificar de UTF-I16S a UCS-4 se procede como sigue:
o Primero: Se inicializa el número de valor del carácter UCS-4.
o Segundo: Se determina cual es la página actual.
o Tercero: Se determina si el actual valor es para cambiar de página.
o Cuarto: Se distribuyen los bits de la secuencia en el carácter UCS-4.
5 Implementación de UTF-I16S en Java
Java utiliza una codificación de los caracteres en unidades de 16 bits. Es pues un
entorno en el que resulta apropiada realizar una implementación del método de
transformación UTF-I16S.
Cada página usa una anchura fija para la codificación de caracteres. Cuando se codifica
en la página 0, y cambia a la página 1 usa el código de control UTFI16S.ShiftInput.
Apéndice B.
125
Cuando el contexto está en 4-byte (página 1), cambia a la página 0 usa el código de
control UTFI16S.ShiftOutput. Estos valores se representan en la Figura B.74.
public interface UTFI16S {
final static int ShiftOutput=0xE; //Shift -Out
final static int ShiftInput = 0xF; //Shift -In
}
Figura B.74: Interfaz UTFI16S.
Las dos siguientes figuras muestran los métodos intToUtfi16s y utfi16sToInt,
para realizar la transformación de UTF-I16S a su valor entero y viceversa.
public int intToUtfi16s(int code[], int count, char seq[]){
int p = 0;
int i = 0; int max = 0;
if((code != null)&&(seq != null)){
max =((code.length < count)
? code.length
: count); seq[i] = UTFI16SConstants.ShiftInput;
}else
throw new IllegalArgumentException();
for(;i < max;){
if((mode == UTFI16SConstants.ShiftInput) &&(code[i] < 0x10000)){
seq[p++] = (char)code[i++];
}else if((mode == UTFI16SConstants.ShiftInput) &&(code[i] >
0xFFFF)){
mode = UTFI16SConstants.ShiftOutput;
seq[p++]=(char)UTFI16SConstants.ShiftOutput;
seq[p++]=(char)((code[i]&0x7FFF0000)>>16);
seq[p++]=(char)((code[i++]&0xFFFF));
}else if((mode==UTFI16SConstants.ShiftOutput) &&(code[i] <
0x10000)){
mode = UTFI16SConstants.ShiftInput;
seq[p++]=(char)UTFI16SConstants.ShiftInput;
seq[p++]=(char)code[i++];
}else if((mode == UTFI16SConstants.ShiftOutput) &&(code[i] >
0xFFFF)){
seq[p++]=(char)((code[i]&0x7FFF0000)>>16);
seq[p++]=(char)((code[i++]&0xFFFF));
}
}
return p;
}
Figura B.75: Método intToUtfi16s.
126
Contribución al análisis XML para la mejora en las prestaciones de memoria
public int utfi16sToInt(char code[], int count, int seq[]){
int p = 0; int i = 0; int max = 0;
mode = UTFI16SConstants.ShiftInput;
if((code != null)&&(seq != null)){
max =((code.length < count)?code.length:count);
seq[i] = UTFI16SConstants.ShiftInput;
}else throw new IllegalArgumentException();
for(;i < max;){ if(mode == UTFI16SConstants.ShiftInput){
switch(code[i]){
case UTFI16SConstants.ShiftInput:
i++; seq[p++] = (code[i++]&0xFFFF); break;
case UTFI16SConstants.ShiftOutput:
mode = UTFI16SConstants.ShiftOutput; i++; break;
default: seq[p++] = (code[i++]&0xFFFF); break;
}
}else if(mode == UTFI16SConstants.ShiftOutput){
int local = 0;
local = ((code[i++]&0x7FFF)<<16);
local += (code[i++]&0xFFFF);
switch(local){
case UTFI16SConstants.ShiftInput:
mode = UTFI16SConstants.ShiftInput; break;
case UTFI16SConstants.ShiftOutput:
int tmp = 0; tmp = ((code[i++]&0x7FFF)<<16);
tmp += (code[i++]&0xFFFF); eq[p++] = tmp; break;
default: seq[p++] = local; break;
} }else throw new IllegalStateException(); }
return p;
}
Figura B.76: Método utfi16sToInt.
Apéndice C.
DTD
Una de las principales ventajas de SGML y XML sobre otros métodos de representación
de documentos es la idea de que para un tipo de documento existen unas condiciones de
validez definidas por el usuario que pueden formularse explícitamente, y esta validación
puede ser automáticamente evaluados. Las estrategias para comprender, analizar e
implementar estas restricciones son básicas para los usuarios de las tecnologías de los
lenguajes de marcas.
1 Introducción
La recomendación XML incluye un lenguaje de modelado de documento, llamado DTD
(Document Type Definition). Este lenguaje tiene una larga historia, y ha sido
ampliamente usado.
El estándar SGML introdujo el concepto de DTDs, y necesita una DTD para todas
las instancias de documentos que cumplan las normas de este lenguaje.
Los modelos de documento pueden ser traducidos de uno a otro formato. Una DTD
puede ser convertida en un esquema de definición. Aunque, el inverso no siempre es
cierto debido a las limitaciones de las DTDs.
Sin embargo las DTDs en XML son opcionales y son más simples que las DTDs de
SGML. El lenguaje de modelado DTD,
 Es el más extendido, y está siempre plenamente soportado;
 Es un pequeño lenguaje que facilita una validación muy rápida;
 Ofrece buenas ventajas.
2 Document Type Definitions: Fundamentos
La posibilidad de validar instancias de un documento XML bien formado contra un
modelo de documento es uno de los aspectos que se plantea en el horizonte de los
lenguajes de marcas. Un modelo de documento puede tomar varias formas. Una DTD se
construye con un conjunto de instrucciones que proporcionan una sintaxis. La DTD
define los tipos de elementos, atributos y entidades permitidas, y puede expresar algunas
limitaciones para combinarlos.
128
Contribución al análisis XML para la mejora en las prestaciones de memoria
Los documentos que se ajustan a su DTD, se denominan “válidos”. Un documento
“bien formado” respecta la estructura y sintaxis definida por la especificación de XML.
Un documento “bien formado” puede además ser “válido” si cumple las reglas de una
DTD determinada. Una DTD puede residir en un fichero externo, tal vez compartido por
varios de documentos. O bien, puede estar contenido en el propio documento XML,
como parte de su declaración de tipo de documento. Un ejemplo se ilustra en la Figura
C.77 y C.78.
<! DOCTYPE etiqueta[
<!ELEMENT etiqueta (nombre, calle, ciudad, pais, codigo)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT calle (#PCDATA)>
<!ELEMENT ciudad (#PCDATA)>
<!ELEMENT pais (#PCDATA)>
<!ELEMENT codigo (#PCDATA)>
]>
Figura C.77: Ejemplo de DTD.
<etiqueta>
<nombre>Antonio J. Sierra</nombre>
<calle>c/ Camino de los Descubrimientos, s/n</calle>
<ciudad>Sevilla</ciudad>
<pais>España</pais>
<codigo>41092</codigo>
</etiqueta>
Figura C.78: XML asociado a la DTD.
La declaración del tipo de documento empieza en la primera línea y termina con
"]>". Las declaraciones DTD son las líneas que empiezan con "<!ELEMENT" y se
denominan declaraciones de tipo elemento. También se pueden declarar atributos,
entidades y anotaciones para una DTD. En el ejemplo anterior, todas las declaraciones
DTD se definen "etiquetas" residen dentro del documento. Parsed character data
(PCDATA) es un tipo de dato que ocurre en un contexto donde el texto es analizado y
marcado para su reconocimiento. A diferencia de character data (CDATA) que son tipos
de datos en SGML y XML para datos que no incluyen marcas o entidades de referencia.
3 Lenguajes de Modelado Alternativos
Las características de la DTD son heredadas del estándar SGML, aunque las DTDs del
lenguaje SGML son más sofisticadas que el lenguaje de modelado DTD de XML.
Durante el desarrollo del estándar XML, se eliminaron muchas características que
estaban redundantes o que no tenían mucho uso, y otras que fueron consideradas
Apéndice C.
129
demasiado complejas para el propósito de implementación de los analizadores. Algunas
contribuciones y partes interesadas argumentaron que las DTDs no eran del todo
necesarias. Otras sin embargo indicaron que solo eran necesarias sino que deberían ser
más potentes que las DTDs de SGML. Aunque ninguno de los grupos ganó en su
argumentación y el estándar XML se pensó para ser más simple que su predecesor.
Algunos principios básicos fueron compartidos mediante mucho de los esfuerzos
para reemplazar a las DTDs, y han sido ampliamente aceptadas que cualquier
sustitución debería
 Ser funcionalmente compatible con las características de la DTD (esto es
que podría ser aplicado a los documentos existentes y que las viejas DTD

pudieran ser automáticamente convertidas al nuevo lenguaje de modelado);
Usar la sintaxis de los documentos de tal forma que herramientas XML
pudieran ser usadas para crear, validar, procesar, y presentar modelos
documentos;

Recuperar las características usadas de las DTD de SGML que fueron
eliminadas en la versión de XML;
 Extender la funcionalidad para modelar documentos centrados en los datos.
Un gran número de propuestas se han plateado para dar solución. Algunas de ellas
caen dentro de los criterios establecidos y otras se han incorporado con otros propósitos.
El campo está ahora ampliamente reducido a estos:


XML Schemas, que se consideran en el siguiente apéndice.
RELAX NG [Clark 01b] (una propuesta que nace de las predecesoras
RELAX[Clark 01c] y TREX [Clark 01d])
 Schematron [Schematron] es un lenguaje de validación de la estructura
XML usando patrones en árboles. Schematron es un Language simple y
potente de tipo Schema para las estructuras, que está bajo consideración
para convertirse en un estándar ISO (ISO/IEC 19757 - DSDL Document
Schema Definition Language - Part 3: Rule-based validation Schematron)
Una DTD, en SGML o XML, es una definición forma de los elementos y la relación
entre los elementos de datos (la estructura) para un tipo específico de documento.
La palabra “schema” ha aparecido en el nombre de varias propuestas. Este término
está definido en el Diccionario de Inglés de Oxford como “una representación de un
plan o teoría en la forma de perfil o modelo”.
Apéndice D.
XML Schema
1 Introducción
Un esquema, al igual que una DTD, define la “apariencia” de un conjunto de uno o más
documentos XML; esto es, qué elementos y atributos pueden contener y en qué orden y
cuál puede ser su contenido. De hecho, podríamos calificar las DTD como un tipo de
esquema, en el amplio sentido de la palabra.
Un esquema puede ser considerado como una colección (o vocabulario) de
definiciones de tipos y declaraciones de elementos cuyos nombres pertenecen a un
determinado espacio de nombres llamado espacio de nombres de destino. Los espacios
de nombres de destino hacen posible la distinción entre definiciones y declaraciones de
diferentes vocabularios.
2 Fundamentos
La recomendación XML Schema es uno de los últimos intentos para mejorar las
características de las DTD. Se publicó en 2001 por el W3C y la soportan un gran rango
de analizadores y aplicaciones XML.
Este sofisticado estándar emplea 42 elementos y 37 atributos (ver la Sección 20.2 y
la Sección 20.3 para la lista de elementos y atributos), definidos en una gran
especificación desarrollada por un amplio comité (con 35 contribuciones adicionales).
Se puede argumentar que no es un estándar especialmente elegante, sino que es
indudablemente poderoso. Este estándar está definido en tres partes, de las cuales la
primera sirve como una introducción a las otras dos, y es relativamente fácil de leer pero
no es exhaustivo en las características del lenguaje.
3 Características de XML Schema
La recomendación XML Schema fue desarrollado para superar a su predecesora en el
proceso de validación, DTD. XML Schema debe ser compatible con las características
de la DTD, usar sintaxis XML, recuperar características de las DTDs de SGML, y añade
características para validar los documentos.
Las instrucciones de XML Schema parecen bastante diferentes de las reglas de las
DTD. El estándar XML Schema es una aplicación XML, y cada regla es además un
132
Contribución al análisis XML para la mejora en las prestaciones de memoria
fragmento de documento XML. El fragmento de DTD podría traducirse en su
equivalente Schema, tal y como se muestra en la siguiente Figura.
<!ELEMENT Capitulo (titulo,seccion+)>
Figura D.79: Fragmento de DTD.
<element name=”Capitulo”>
<complexType>
<sequence>
<element ref=”B:titulo” />
<element ref=”B:seccion” minOccurs=”1”
maxOccurs=”unbounded” />
</sequence>
</complexType>
</element>
Figura D.80: Ejemplo de XML Schema.
Cualquier modelo de documento que pueda ser codificado con una DTD puede ser
especificado con el estándar XML Schema. Y además es posible automatizar la
conversión de una DTD en un equivalente documento XML Schema.
4 Definición
Un XML schema definition (XSD), o schema definition en breve, es una modelo de
documento que cumple un XML Schema. XSD es un documento XML que perfila y
modela el modelo de documento definido en el estándar XML Schema. Este modelo
incluye estructuras XML que declaran elementos y atributos, define tipos de datos y
permite comentarios para poder insertarse.
La gente que crea un XSD no es normalmente la misma gente que crea una
instancia del documento que la cumple. El término schema definition author puede
usarse para describir el que lo ha formado, y document instance author para describir un
ejemplo.
5 Procesadores de Schema
Un analizador XML con validación que incluya un procesador de schema puede validar
una instancia de un documento utilizando una definición de un esquema. Normalmente,
el procesador de esquema está integrado en el software de análisis del documento.
6 Tipos de Datos
Una característica importante del lenguaje XML Schema es la posibilidad de crear y
utilizar tipos de datos. Un tipo de dato restringe un valor a un rango o conjunto de
posibilidades que se deseen. Este concepto no añade nada nuevo en la construcción del
Apéndice D.
133
lenguaje XML, de esta forma un valor que realiza a un tipo de dato continúa
expresándose como un valor de atributo o como contenido de un elemento.
Hay dos tipos de datos soportados por el estándar:
 Un tipo de dato simple que hace que una marca que no cumpla un valor y
tipo no se pueda asignar. El estándar incluye un número de tipos de datos
simples como “string” (“hola mundo”), “integer” (123), y “date” (“2002-0517”). Pero en la definición de un esquema se podrían crear tipos de datos
simples más específicos.
 Un tipo de dato complejo que permite estructurar la información de una
forma más compleja. No hay tipos de datos complejos construidos, y para
utilizarlos habría que crearlos.
Asumiendo que una aplicación puede acceder e interrogar a la definición de un
esquema, este puede identificar estructuras comunes siempre y cuando estén definidas
en declaraciones de elementos separadas. Por ejemplo, podría ser posible, usando el
estándar XML Query, para contar todas las direcciones de e-mail sin conocer todos los
elementos usados en estas direcciones.
7 Elemento raíz
Un esquema es un documento XML que solo contiene texto y aparece con la extensión
.xsd. Comienza con una declaración XML estándar, seguida de una declaración del
espacio de nombre de XML esquema.
<?xml versión=”1.0“ ?>
<xsd:schema
xmnls:xsd=http://www.w3.org/2000/10/XMLSchema>
<!-- reglas del esquema -->
</xsd:schema>
Figura D.81: Elemento raíz en XSD.
El comienzo de un XML Schema es igual que el de cualquier documento XML,
<?xml versión=”1.0 “?>. El elemento raíz es <xsd:schema. Con
xmnls:xsd=“http://www.w3.org/2000/10/XMLSchema” se declara el
espacio de nombre del “esquema de esquemas. A partir de ahora cualquier documento o
escritura que aparezca con el prefijo xsd: delante será reconocido como si procediera de
este espacio de nombre.
8 XML Schema frente a DTD
Un esquema escrito con XML Schema es similar a una DTD, en la medida que se usa
para establecer el esquema de una clase de documentos XML. Al igual que ocurre con
134
Contribución al análisis XML para la mejora en las prestaciones de memoria
las DTD, el papel de los Esquemas XML consiste en describir los elementos y sus
modelos de contenido, de forma que los documentos puedan ser validados. No obstante,
XML Schema irá mucho más allá que las DTD, permitiendo asociar tipos de datos con
elementos y, finalmente, también con atributos.
En una DTD, el contenido de los elementos se limita a cadenas y a otros tipos de
datos primitivos. XML Esquemas soporta una amplia gama de tipos de datos, como
enteros, números de coma flotante, fechas y horas. XML Schema también incluye
soporte para otras características, como el modelo de contenido abierto y la integración
para espacios de nombres. Aparte de ofrecer estas características, XML Schema
contrasta mucho con las DTD, ya que se apoya en XML para marcar los documentos de
esquemas; digamos que un XML Schema que define la “apariencia” de un documento
XML está escrito con el propio lenguaje XML. Se trata de una mejora importante en
comparación con las DTD, ya que no implica tener que aprender un lenguaje críptico.
Sólo habrá que a aprender a usar el vocabulario XML Esquemas.
A continuación se muestra una lista de las principales ventajas que ofrece XML
Esquemas en comparación con las DTD:
 XML Schema se basa en XML y no en una sintaxis especializada.
 XML Schema puede ser analizado sintácticamente y manipulado como
cualquier otro documento XML.
 XML Schema soporta la integración de los espacios de nombre, lo cual le
permite asociar nodos individuales de un documento con las declaraciones
de tipo de un esquema.
 XML Schema soporta grupos de atributos, lo que le permite lógicamente
combinar atributos.
A pesar de todas estas ventajas, actualmente está más difundido el uso de las DTD,
seguramente por costumbre y facilidad. Pero, no es de extrañar que en un futuro no muy
lejano el uso de Esquemas reemplace al uso de las DTD.
Apéndice E.
Espacio de Nombres en XML
XML es un lenguaje que permite la creación de marcas formado elementos totalmente
personalizados. Esto es, el programador es el que dará nombre a todas las marcas de su
archivo XML, y estas marcas pueden llevar cualquier nombre (siempre que sea válido).
Cuando se crean elementos personalizados en un entorno cerrado no hay ningún
problema, ya que podemos elegir nosotros los nombres y asignar marcas con distinto
nombre de las ya utilizadas. El problema aparece cuando se mezclan muchos
vocabularios XML. Es aquí donde aparecen los espacios de nombres (XML
Namespaces) que se consideran en este apéndice.
1 Introducción
Supongamos que, por alguna razón, tenemos que mezclar dos (o más) documentos XML
en uno de mayor tamaño. Alguno de los elementos ubicados en los distintos archivos
pueden tener un mismo nombre. Los programadores necesitan un medio para poder
disponer de todos los elementos en un único documento de mayor tamaño. Para
solucionar esto es para lo que se crearon los espacios de nombres (namespace).
XML Namespaces es una iniciativa del W3C que no formaba parte de la
especificación XML 1.0 original. En esa época, el W3C todavía estaba terminando los
detalles sobre los espacios de nombre y cómo había que estructurarlos y usarlos en
XML. XML Namespaces consiguió el estatus de recomendación del W3C en enero de
1999, por lo que es una tecnología posterior. Sin embargo, ha sido adoptada con
prontitud, principalmente porque es necesaria, ya que la mayoría de desarrolladores
desean evitar el conflicto de nombres en documentos XML.
Un espacio de nombre puede tener el siguiente sintaxis:
<prefijo:nombreElemento />
prefijo hace referencia al espacio de nombres. Un espacio de nombre es un medio
diferente de nombrar los elementos, de tal manera que los elementos que tengan
nombres duplicados puedan diferenciarse unos de otros.
136
Contribución al análisis XML para la mejora en las prestaciones de memoria
2 Sintaxis
Puesto que estamos intentando solucionar el problema de tener dos elementos iguales
habrá que garantizar de alguna manera que los nombres de los elementos y atributos
XML que asignamos son completamente únicos. Para esto se utilizarán los
Identificadores de Recursos Universales (URI) [RFC 3986].
Se declara el espacio de nombre:
<cualquierElemento xmlns:nombreLocal= “URI”>
Para utilizar un espacio de nombre se deben manejar dos elementos: un nombre
local y un nombre real. Por ejemplo:
<documento xmlns:prefijo=”http://trajano.us.es/~antonio/">
El nombre local es utilizado en el documento XML (eso es precisamente el prefijo
que vimos en el apartado anterior, un nombre local del espacio de nombre, en este caso
“prefijo”). El nombre real de un espacio de nombre es el URI. Las URI tienen la
misma sintaxis que los URL, aunque no son lo mismo. Un URL debe apuntar a algún
recurso en Internet, mientras que un URI es simplemente una cadena de texto con el
aspecto de un URL; puede estar realmente apuntando a algo, o no. El nombre real de un
espacio de nombres debe ser único, en esa dirección no puede haber otro espacio de
nombres que tenga el mismo nombre real.
Dos referencias URI que identifican espacios de nombres son idénticas si son
exactamente las mismas carácter a carácter. Las referencias URI pueden contener
caracteres no permitidos en nombres, de modo que no pueden utilizarse directamente
como prefijos de espacios de nombres. Por tanto, el prefijo de espacio de nombres actúa
como intermediario de una referencia URI.
El nombre real también puede ser un URN [RFC 2141] (Universal Resource
Name), y la sintaxis sería como sigue:
<documento
xmlns:prefijo=”urn:http://trajano.us.es/~antonio/:mas">
Un Nombre de Recurso Uniforme (Uniform Resource Name, URN) es un Uniform
Resource Identifier (URI) que usa el esquema urn, y no contiene relación asociada con
la de identificación del recurso. Ambos URNs (nombre) y URLs (localizadores) son
URIs, y algún URI podría ser un nombre y un recurso a la vez.
Un URN sirve como identificador persistente, independiente de un recurso y está
diseñado para hacer más fácil el mapeo con otros espacios de nombres en el espacio
URN. La sintaxis URN proporciona un significado para codificar caracteres de datos en
una forma que puedan enviarse en los protocolos existentes, y que puedan escribirse en
distintos teclados, etc.
Apéndice E.
137
3 Declaración de espacios de nombres
Un espacio de nombres se declara usando una familia de atributos reservados. El
nombre de tales atributos debe o bien ser xmlns, o bien tener xmlns: como prefijo. Estos
atributos, como cualquier otro atributo XML, se pueden proporcionar directamente o
pueden tener un valor por defecto. Los espacios de nombre se declaran en los
documentos XML de la siguiente forma:
xmlns:Prefix=”NameSpace”
La palabra clave xmlns alerta a un procesador XML de que se está declarando un
espacio de nombre. Prefix sirve como referencia del espacio de nombres a lo largo del
alcance del elemento en el que se declara el espacio de nombres. Sin embargo, este
Prefix es opcional, y dependerá de si queremos usar un elemento cualificado o no
cualificado.
Un ejemplo de declaración de espacio de nombres, que asocia el prefijo de espacio
de
nombres
Tesis
con
el
nombre
de
espacio
de
nombres
http://trajano.us.es/~antonio/:
<x xmlns:Tesis='http://trajano.us.es/~antonio/'>
<!-- el prefijo "Tesis" está ligado
a http://trajano.us.es/~antonio/
para el elemento "x" y sus contenidos -->
</x>
Los prefijos que comiencen con la secuencia de tres letras x, m, l, en cualquier
combinación de mayúsculas y minúsculas, están reservados para su uso por las
especificaciones de XML y las relacionadas con ellas.
Un nombre cualificado es aquel que incluye la porción prefix en la declaración del
espacio de nombres. Consta de dos partes: el prefijo y la porción local del nombre. Para
utilizar nombres cualificados hay que incluir el prefix en la declaración del espacio de
nombres.
Según la norma un nombre cualificado sigue la siguiente sintaxis:
[6]
[7]
[8]
QName
Prefix
Prefix
(Prefix':')?LocalPart
NCName
NCName
Figura E.82: Sintaxis de los nombres cualificados.
En la tabla anterior el Prefix (prefijo) proporciona la parte del prefijo del espacio de
nombres del nombre cualificado, y debe estar asociado mediante una referencia URI a
un espacio de nombres en una declaración de espacio de nombres. LocalPart
proporciona la parte local del nombre cualificado.
Un nombre no cualificado es aquel que no incluye un prefijo, y está asociado con un
espacio de nombre predeterminado o no está asociado con ninguno. No se necesita el
138
Contribución al análisis XML para la mejora en las prestaciones de memoria
prefix de la declaración del espacio de nombre al declarar un espacio de nombre
predeterminado.
La porción NameSpace es donde se identifica el propio espacio de nombres. Será
un URI, para garantizar la singularidad en los elementos y atributos que se utilizan en el
ámbito de la declaración de espacios de nombre. La decisión de utilizar nombres
cualificados o nombres no cualificados determinará la forma en que declararemos los
espacios de nombre. Existen dos soluciones distintas para declarar espacios de nombre:
El espacio de nombres se declara sin prefijo, y se hace referencia a todos los
nombres y atributos que haya en su ámbito con nombres no cualificados y se presupone
que éstos se encuentran en el espacio de nombres, esto es: el elemento que declara el
espacio de nombre y todos sus descendientes son considerados parte de este espacio de
nombre predeterminado, aunque no lleve prefijo y parezcan un XML normal. Es la
solución más sencilla, y es útil cuando se quiere aplicar un espacio de nombre a un
documento completo o a una sección de un documento. Si la referencia URI de la
declaración de un espacio de nombres por defecto está vacía, entonces se considera que
los elementos sin prefijo pertenecientes al ámbito de la declaración no están en ningún
espacio de nombres. Obsérvese que los espacios de nombres por defecto no se aplican
directamente a atributos.
El espacio de nombres se declara con un prefijo, y todos los nombres de elementos
y atributos que estén asociados con el espacio de nombres deberán usar el prefijo como
parte de sus nombres cualificados. Este tipo de declaración resulta útil a la hora de crear
un documento que se apoya en múltiples espacios de nombre. El prefijo de una
declaración explícita se emplea como notación en el espacio de nombres que hay en el
ámbito donde se declara el espacio de nombres. Es decir, el prefijo se empareja con el
nombre del elemento o atributo locales, para formar un nombre cualificado de la forma:
Prefix:Local.
4 Qué son y qué no son los espacios de nombres
Los espacios de nombre son:
 Contenedores para nombres de elementos y atributos: no contienen los
elementos mismos sino sus nombres.
 Un sistema de denominación en dos partes, pues todos tienen un nombre
local y un nombre de espacio de nombre (URI). No existen realmente
como entidades físicas o conceptuales; no hacen nada excepto renombrar
ciertos elementos.
Los espacios de nombre no son…
Apéndice E.




139
Una vía para combinar documentos XML, ni un instrumento para lo mismo.
Es posible utilizar los espacios de nombre con este fin, sin embargo los
espacios de nombre en si mismos no lo son.
“punteros” a un sitio web. El URI de un espacio de nombre no apunta a
nada, son sólo identificadores, no páginas web ni archivos. No intente
ejecutar el URI: lo mejor que puede pasar es que no pase nada.
Lo mismo que los espacios de nombre tradicionales. Éstos son un grupo de
cero o más nombres únicos. Cada nombre es único y sigue reglas (si existen)
que gobiernan su apariencia.
No tienen una estructura. Son solamente un conjunto de nombres. Aunque
se defina un espacio de nombre para un grupo de elementos XML, y este
grupo tenga una estructura, el espacio de nombre mismo ni siquiera ve la
estructura. Conocerá su alcance (scope, se verá a continuación), pero no
verá la estructura de los descendientes del elemento.

Los elementos no se colocan automáticamente en un espacio de nombre. Si
no se define un espacio de nombres, los elementos no formarán parte de él.
Ciertos programas-instrumentos consideren el atributo xmlns como una
“declaración de espacio de nombre”, mientras que otros sólo lo ven como un
atributo. Por ejemplo, las DTD no ven los espacios de nombre, por tanto,
xmlns es considerado como un atributo más. Sin embargo, los documentos
de XML Esquema reconocen xmlns como una declaración de espacio de
nombre.
Apéndice F.
Servicios Web XML
Este apéndice define y muestra los estándares relacionados con los Servicios Web XML.
La premisa de las tecnologías de los servicios Web forma el siguiente paso lógico en la
evolución de la programación distribuida. Una de las razones de peso para adentrarse en
el mundo del desarrollo de los servicios Web es su alto nivel de interoperabilidad. La
llamada a un servicio Web es una operación independiente de la plataforma y lenguaje,
por lo que un cliente utilizando un lenguaje de programación puede llamara a un
servicio Web que utilice otro lenguaje.
1 Introducción
Según el W3C, un Servicio Web es un sistema software identificado mediante una URI
[RFC 2396], cuyas interfaces públicas asociadas se definen y describen usando XML.
Esta definición puede ser descubierta por otros sistemas software. Estos sistemas
podrían interactuar con los servicios Web de una forma preestablecida mediante su
definición, usando mensajes basados en XML con protocolos de Internet.
Los Servicios Web XML son una aproximación basada en estándares para la
integración e interoperabilidad, y es una evolución de los sistemas distribuidos. Un
Servicio Web XML se caracteriza por tres estándares.
1 Web Services Description Language (WSDL [WSDL ]) para definir un
Servicio Web.
2 Simple Object Access Protocol (SOAP[Haas 03] [Gudgin 03a] [Gudgin 03b])
para transportar el Servicio Web.
3 Universal Discovery Description and Integration (UDDI [UDDI v3.0]) para
catalogar o descubrir Servicios Web para reutilizarlos.
2 SOAP
Con la aparición de XML hacia la segunda mitad de los 90, los desarrolladores se
encontraron con la posibilidad de expresar una rica estructura de información y
mensajes de manera uniforme y autodescriptiva, lo que dio pie al uso de XML para
aplicar un formato a los mensajes de formato correcto entre sistemas de manera
142
Contribución al análisis XML para la mejora en las prestaciones de memoria
autodocumentada, autodescriptiva y extensible, independientemente del sistema
operativo o del entorno de lenguaje de los sistemas operativos.
Una de las implementaciones de protocolos de comunicaciones basados en XML
más conocidas es XML-RPC (XML-Remote Procedure Call), que permite llamar a
procedimientos de equipos remotos sin necesidad de tener en cuenta los detalles de sus
sistemas operativos o entornos de lenguaje. Estos equipos pueden encontrarse en
cualquier punto de Internet o dentro de la red interna del usuario mientras estén
conectados por HTTP. XML-RPC es pionero en su campo, aunque la mayoría de los
proveedores optaron por su sucesor SOAP (Simple Object Access Protocol).
SOAP es un protocolo ligero entendido para realizar el intercambio de información
descentralizada en un entorno distribuido. El transporte de SOAP puede realizarse con
una variedad de protocolos, que incluye HTTP, SMTP y FTP.
3 WSDL
WSDL proporciona la posibilidad de describir los servicios Web, permitiendo así su
proliferación. A pesar de que SOAP proporcionan una manera estándar de transportar
mensajes para el uso de servicios Web, no proporciona ninguna manera para describir el
formato que esos mensajes deberían tener en un determinado servicio Web.
Al comienzo de la especificación SOAP, cuando los desarrolladores empezaron a
implementar servicios Web basados en SOAP, se dieron cuenta de que el único modo de
que alguien conociera la manera de invocar un servicio Web era publicando una muestra
de documento SOAP que ilustrar una llamada al servidor Web en cuestión. El problema
con esta téncia es que no describía la manera de llamar al servicio Web. Por ejemplo, si
se piensa en un servicio Web de estilo RPC como una biblioteca a la que se quiera
llamar, con obtener simplemente un ejemplo de un documento SOAP equivaldría a que
alguien entregara una librería C++ y un código de ejemplo, pero sin un archivo de
encabezado o un servidor Java sin un IDL correspondiente.
WSDL surgió de los esfuerzos de Microsoft e IBM para paliar este problema.
WSDL busca la definición y descripción de servicios Web. WSDL proporciona una
gramática para la descripción de servicios como un conjunto de puntos finales que
intercambian mensajes. Uno de los conceptos principales detrás de estas descripciones
es la idea de que existe una diferencia entre la definición abstracta de un mensaje y la
manera concreta en al cual esos mensajes se asignan a un transporte específico y a un
protocolo de codificación de datos.
4 UDDI
Un servicio Web es una aplicación o componente independiente que tiene las
características de que se describe en un lenguaje de descripción de servicios y esta
Apéndice G.
143
descripción se puede publicar. Los programas clientes pueden encontrar estas
descripciones, unirse al servicio descrito y finalmente invocar a los servicios. UDDI
proporciona la pieza de registro en esta pila. UDDI define los criterios para los registros
basados en la Web. Las compañías pueden registrar la información en estos registros
acerca de sí mismas, sobre los servicios que ofrecen y la información técnica cómo se
puede acceder a estos servicios. También pueden buscar el registro de otras compañías o
proveedores de servicios. Estos registros pueden ser de un ordenador privado o el
registro global de UDDI Business Registry.
Tres empresas, IBM, Microsoft y Ariba empezaron con la iniciativa UDDI. Su
objetivo era definir criterios para permitir que las empresas se descubriesen las unas a
las otras, que interactuasen y compartieran información en un registro global.
Se pretendía basar UDDI en estándares y que se utilice entre plataformas. Se
construye sobre estándares existentes de Internet de XML, HTTP y DNS (Domain Name
System). desde entonces, otras compañías se han unido
UDDI se diseñó para solucionar los problemas en las interacciones empresaempresa (B2B), proporciona un mecanismo para realizar una “búsqueda inteligente” de
servicios Web y permitir una agregación más sencilla de los servicios. UDDI utiliza
SOAP como su dimensión de transporte.
Apéndice G.
Otras Medidas
1 Introducción
Este apéndice presenta otras medidas obtenidas en la validación del modelo del
prototipo implementado. Se presenta, en primer lugar el número de objetos que se
generan en el análisis de los documentos de distinto tamaño para los analizadores
eligidos en las pruebas presentadas en el capítulo de validación del modelo.
2 Número de objetos
El número de objetos que se utilizan para realizar para el fichero de 1728 bytes.
10000
9000
8000
Objectos
7000
6000
5000
4000
3000
2000
1000
0
kXML
FCM
TAMparser
Xparse-J
Figura H.83: Número de objetos utilizados en ficheros de 1728 bytes.
Los analizadores son, al igual que antes kXML2, como representación del modelo Pull;
TAMparser como representación del modelo Push; y Xparse-J para el modelo DOM.
Estas medidas se comparan con la implementación realizada.
146
Contribución al análisis XML para la mejora en las prestaciones de memoria
10000
9000
8000
Objetos
7000
6000
5000
4000
3000
2000
1000
0
kXML
FCM
TAMparser
Xparse-J
Figura H.84: Número de objetos utilizados en ficheros de 24458 bytes.
Existe una gran correlación entre la cantidad de memoria utilizada y el número de
objetos utilizado. Aunque la cantidad de memoria utilizada si es un factor crítico el
número de objetos lo es en cuanto a la repercusión que tiene en cuanto a la memoria que
se utiliza. La implementación kXML2 presenta el menor número de objetos generados
en el proceso de análisis. La implementación Xparse-J presenta el mayor número de
objetos creados en comparación con los otros analizadores. La implementación
realizada presenta un número de objetos cercano al analizador kXML2.
Referencias
1. Introducción
Las referencias están clasificadas dependiendo de su soporte web o no y de los
organismos que lo mantienen. Primero se presentan las referencias de libros,
posteriormente congresos/revistas, las siguen las referencias del autor, referencias
mantenidas por los organismos (W3C, ISO, Unicode OASIS, RFC), luego las
referencias a software y por último las referencas web.
2. Libros
[Andersson 01]
Christoffer Anderson (2001). GPRS and 3G wireless applications. John
Wiley & Sons. ISBN: 0471414050.
[Behme 98]
Henning Behme, Stefan Mintert. XML in der Praxis: Professionelles
Web-Publishing mit der Extensible Markup Language. Bonn: Addison
Wesley Longman, 1998.. ISBN 3-8273-1330-9.
[Born 01]
Günter Born, Compendium HTML: con XHTML, DHTML, CSS, XML,
XSL y WML. Barcelona: Marcombo, 2001. ISBN: 8426713084.
[Bradley 03]
Neil Bradley, The XML schema companion. Addison-Wesley, 2003
ISBN: 0-321-13617-9.
[Bray 99]
Jennifer Bray and Charles F. Sturman, Bluetooth: Connect without
cables. Prentice Hall PTR, cop. 2002 ISBN: 0-13-066106-6.
[Bradley 98]
Neil Bradley, The XML Companion. Harlow, Essex: Addison Wesley
Longman, 1998. ISBN: 0-201-41999-8.
[Cohen 90]
Daniel I.A. Cohen, Introduction to Computer Theory, John Wiley &
Sons, Inc., 1990. ISBN: 0-471-51010-6.
[Connolly 97]
Dan Connolly. XML: Principles, Tools, and Techniques. World Wide
Web Journal [edited by Rohit Khare] Volume 2, Issue 4. Sebastopol, CA:
O'Reilly & Associates, Inc., Fall 1997. ISBN: 1-56592-349-9. ISSN:
148
Contribución al análisis XML para la mejora en las prestaciones de memoria
1085-2301.
[Chen 00]
Zhinqun Chen, Java Card Technology for Smart Cards: architecture and
programmer’s guide. Addison-Wesley, 2000.ISBN: 0-201-70329-7.
[DeRose 97]
Steven J. DeRose. The SGML FAQ Book: Understanding the Foundation
of HTML and XML. Electronic Publishing Series, Number 7.
Dordrecht/Boston/London: Kluwer Academic Publishers, 1997. ISBN: 07923-9943-9.
[DuCharme 99]
Bob DuCharme. XML: The Annotated Specification. The Charles F.
Goldfarb Series on Open Information Management. The Definitive XML
Series from Charles F. Goldfarb. Upper Saddle River, NJ: Prentice Hall
PTR, 1999. ISBN: 0-13-082676-6.
[Gibb 03]
Brian Gibb, Suresh Damodaran, ebXML: concepts and application,
Indianapolis, IN: Wiley, cop. 2003. ISBN: 0-764-54960-X.
[Feng 01]
Yu Feng and Jun Zhu, Wireless Java Programming with Java 2 Micro
Edition, Indianapolis, IN: Sams, cop.2001. ISBN: 0-672-32135-1.
[Flynn 98]
Peter Flynn, Understanding SGML and XML Tools. Practical Programs
for Handling Structured Text.. Foreword by Steve DeRose. Kluwer
Academic Publishers SGML Bookshelf, Electronic Publishing Series.
Dordrecht, Boston, & London: Kluwer Academic Publishers, 1998.
ISBN: 0-7923-8169-6.
[Friedl]
Jeffrey E. F. Friedl, Mastering Regular Expressions, O'Reilly. ISBN:
0596002890.
[Goldfarb 04]
Charles F. Goldfarb, Paul Prescod, XML Handbook, Prentice-Hall PTR,
2004, ISBN 0130497657.
[Graham 02]
Steve Graham, Dimeon Simeonov, Toufic Boubez, Doug Davis, Glen
Daniels, Yuichi Nakamura, Ryo Neyama, Building web services with
Java : making sense of XML, SOAP, WSDL, and UDDI, Indianapolis,
Referencias.
149
Ind. : Sams, 2002. ISBN: 0-672-32181-5.
[Graham 99]
Ian Graham ad Liam Quin, XML Specification Guide. John Wiley and
Sons (1999), ISBN: 0471327530.
[Graham 95]
Ian S. Graham, The HTML Sourcebook, John Wiley and Sons, (1995),
ISBN: 0-471-11849-4.
[Gray 69]
James Gray, Precedence Parsers for Programming Languages, Ph. D.
Thesis. Department of Computer Science University of California,
Berkeley, California, 1969.
[Holman 02]
G. Ken Holman, Definitive XSLT and Xpath. Upper Saddle River, NJ :
Prentice Hall PTR, cop.2002 ISBN: 0-13-065196-6.
[Holma 00]
Harri Holma, Antti Toskala, WCDMA for UMTS: radio access for third
generation mobile communications. John Wiley and Sons, 2000. ISBN:
0-471-72051-8.
[Holub 90]
Allen I. Holub, Compiler Design in C, Englewood Cliffs, N.J. PrenticeHall International, 1990. ISBN: 0-13-155151-5.
[Jelliffe 98]
Rick Jelliffe.The XML and SGML Cookbook. Recipes for Structured
Information. The Charles F. Goldfarb Series on Open Information
Management. Upper Saddle River, NJ: Prentice Hall PTR, May 1998.
ISBN: 0-13-614223-0.
[JVM]
The Java(TM) Virtual Machine Specification (2nd Edition) by Tim
Lindholm, Frank Yellin, http://java.sun.com/docs/books/vmspec/.
[Kaaranen 01]
Heikki Kaaranen, UMTS networks: Architecture, mobility and services
John Wiley and Sons, cop.2001. ISBN: 0-471-48654-X.
[Knuth 73]
Knuth, Donald, Stacks, Queues and Dqueues, in The Art of Computer
Programming, Volume 1, Addison-Wesley, 1973.
[Knudsen 03]
Jonathan Knudsen, Wireless Java: developing with J2ME. Berkeley, CA:
Apress, cop.2003. ISBN: 1-59059-077-5.
[Kotok 03]
Alan Kotok, David R. R. Webber, ebXML: The New Global Standard for
150
Contribución al análisis XML para la mejora en las prestaciones de memoria
Doing Business Over the Internet. Sams, 2001, ISBN-10: 0-7357-1117-8.
[Leventhal 98]
Michael Leventhal, David Lewis, and Matthew Fuchs; with contributions
from Stuart Culshaw and Gene Kan Designing XML Internet
Applications. Prentice Hall PTR, 1998. ISBN: 0-13-616822-1.
[Lobin 99]
Henning Lobin, Informationsmodellierung in XML und SGML.
Berlin/Heidelberg: Springer-Verlag, 1999. ISBN: 3-540-65356-2.
[Light 97]
Richard Light, Simon North, Charles Allen (et al.). Presenting XML.
Indianapolis, IN: SAMS.NET 1997. ISBN: 1-57521-334-6.
[McGrath 98]
Sean McGrath. XML by Example. Building E-Commerce Applications.
The Charles F. Goldfarb Series on Open Information Management. The
Definitive XML Series from Charles F. Goldfarb. Upper Saddle River,
NJ: Prentice Hall PTR, June 1998. ISBN: 0-13-960162-7
[Megginson 98] David Megginson. Structuring XML Documents. Charles F. Goldfarb
Series on Open Information Management. The Definitive XML Series
from Charles F. Goldfarb. Upper Saddle River, NJ: Prentice Hall PTR,
[March] 1998. ISBN: 0-13-642299-3.
[Makoto 98]
Murata Makoto, Atsuhito Momma, and Kyoichi Arai. Introduction to
XML. 1998. ISBN: 4-532-14610-0.
[Nagappan 03]
Ramesh Nagappan, Robert Skoczylas, Rima Patel Sriganesh;
“Developing java web services: Architecting and developing secure web
services using java”, Wiley, 2003. ISBN: 0-471-23640-3.
[Nicholas 03]
Nick Nicholas, John Cowan, What Is Lojban?: .i la lojban. mo . Logical
Language Group 2003. ISBN is 0-9660283-1-7.
[Piroumian 02]
Vartan Piroumian, Wireless J2ME platform programming, Palo Alto,
Calif.: Sun Microsystems, 2002. ISBN:0-130-44914-8.
[Révész 91]
György E. Révész. Introduction to formal languages. Dover Publications,
Referencias.
151
Inc., New York. 1991. ISBN: 0-486-66697-2
[Riggs 01]
Roger Riggs, Antero Taivalsaari, Mark VandenBrink, editor, foreword by
James Gosling. Programming wireless devices with the Java 2 platform,
micro edition: J2ME Connected Limited Device Configuration (CLDC),
Mobil Information Device Profile (MIDP). Boston MA [etc] : AddisonWesley, 2001. ISBN: 0-201-74627-1.
[Singhal, 01]
Singhal, S. WAP the Wireless Application Protocol: Writing
Applications for the Mobile Internet. Addison-Wesley. 2001. ISBN:
0201703114
[Skonnard 02]
Aaron Skonnard, Martin Gudgin. Essential XML quick reference: a
programmer's reference to XML, XPath, XSLT, XML Schema, SOAP,
and more. Boston, Addison-Wesley, 2002. ISBN: 0201740958.
[Stayton 05]
Bob Stayton, DocBook XSL: The Complete Guide (3rd Edition) Sagehill
Enterprises, 2005. http://www.sagehill.net/docbookxsl/.
[St. Laurent 01]
Simon St. Laurent, Joe Johnston, Edd Dumbill. Programming web
services with XML-RPC. O'Reilly, 2001. ISBN: 0596001193.
[St. Laurent 98]
Simon St. Laurent, XML A Primer. Foster City, CA: MIS Press/IDG
Books, 1998. ISBN: 1-5582-8592-X.
[St. Laurent 99a] Simon St. Laurent y Robert Biggar Inside XML DTDs: Scientific and
Technical. New York, NY: McGraw-Hill, 1999. ISBN: 0-07-134621-X.
[St. Laurent
Simon St. Laurent y Ethan Cerami, Building XML Applications. New
99b]
York, NY: McGraw-Hill, (May) 1999. ISBN: 0-07-134116-1.
[St. Laurent 05]
Simon St. Laurent, Michael Fitzgerald. XML Pocket Reference, Third
Edition. 2005. ISBN: 0-596-10050-7.
[Taivalsaari 01]
Antero Taivalsaari, Mark VandenBrink, Jim Holliday. Programming
wireless devices with the Java 2 platform, micro edition: J2ME
152
Contribución al análisis XML para la mejora en las prestaciones de memoria
Connected Limited Device Configuration (CLDC), Mobil Information
Device Profile (MIDP). Addison-Wesley, 2001. ISBN: 0-201-74627-1.
[Topley 02]
Kim Topley, J2ME in a nutshell: a desktop quick reference. O'Reilly,
2002. ISBN: 0-596-00253-X.
[Walsh 06]
Norman Walsh and Leonard Muellner. DocBook: The Definitive Guide
V2.0.13. Beijing ; Sabastopol, CA : O'Reilly & Associates, 2006, ISBN:
1-565-92580-7.
[White 02]
Chuck White. Mastering XSLT. Sybex, cop. 2002, ISBN: 0-782-14094-7.
[Wong 01]
Hinkmond Wong, Developing Jini applications using J2ME technology.
Boston: Addison-Wesley, 2002. ISBN: 0-201-70244-4.
[Tittel 98]
Ed Tittel, Norbert Mikula, and Ramesh Chandak, XML for Dummies.
Foster City, CA: IDG Books Worldwide, Inc., 1998. ISBN: 0-7645-0360X.
Referencias.
153
3. Revistas, Congresos
[Beck 00]
Brian Beck, Stuart Gill, Norbert Lindenberg and John O'Conner, Java
Internationalization Roadmap, Sixteenth International Unicode
Conference, Amsterdam, Holland, March 27-30, 2000.
[Bisdikian, 01]
Bisdikian, C. An Overview of the Bluetooth Wireless Techonology. IEEE
Communications Magazine, pages 86-94, 2001.
[Brzozowski]
Brzozowski, J., Derivatives of regular expressions. Journal of the ACM,
11(4):481–494, Oct. 1964.
[Carroll 01]
Carroll, Jeremy J., CoParsing of RDF & XML, HP Laboratories Bristol,
2001
[Chiu 02]
Kenneth Chiu, Madhusudhan Govindaraju, Randall Bramley,
Investigating the limits of SOAP Performance for Scientific Computing,
11th IEEE International Symposium on High Performance Distributed
Computing HPDC-11 2002, p. 256. IEEE Computing Society, July 2002.
[Conway 63]
Conway, Melvin E., Design of a Separable Transition-Diagram Compiler,
CACM Vol 6 No. 7, July 1963.
[Conway 93]
Alan Conway, Page grammars and page parsing. A syntactic approach o
document layou recognition, In Proc. of 2nd International Conference on
Document Analysis and Recognition (ICDAR '93), pages 761-4, Los
Alamitos, CA, 1993. IEEE Compu. Soc. Press.
[Coombs 87]
Coombs, J. H., Renear, A. H., and DeRose, S. J., Markup systems and the
future of scholarly text processing, Communications of the Association
for Computing Machinery 30, 11 (1987), 933–947.
[Davids 98]
E. Davids, Java object serialization in parsable ascii, 1998. AUUGVic/CAUUG: Summer Chapter Technical Conference 98.
154
Contribución al análisis XML para la mejora en las prestaciones de memoria
[Lécluse 96]
Christophe Lécluse, Event Driven or Tree Manipulation Approaches to
SGML Transformation, You should not have to Choose, SGML'96 GCA
conference, 18-24 Nov 96, Boston
[Davis 90]
Davis M., Collins L., Unicode. Conference Proceedings. IEEE
International Conference on Systems, Man and Cybernetics, 4-7 Nov. pp.
499, 1990.
[DeRose 99]
Steven J. DeRose, Andries van Dam, Document structure and markup in
the FRESS hypertext system, Markup Languages: Theory & Practice,
Publisher: MIT Press, 1999.
[Farreres 02]
Javier Farreres, Cristian Tornador, Further development of OpenJade,
Extreme Markup Language 2002.
[Fowler 02]
Fowler, Martin, Public versus Published Interfaces, IEEE Software,
March-April 2002, pp. 18-19.
[Gong, 01]
Gong, L., JXTA: A Network Programming Evnironment. IEEE Internet
Computing, pages 88-85, 2001.
[Gorman 04]
Ian E. Gorman.Generic XML Stream Parser API: An Easier Way to Use
SAX and Xerces. Extreme Markup Language 2004.
[Graham 02]
Steve Graham, Building web services with Java: making sense of XML,
SOAP, WSDL, and UDDI. Indianapolis, Ind.: Sams, 2002. ISBN 0-67232181-5.
[Guo 03]
By Ping Guo, Julie Basu, Mark Scardina, and K. Karun, Parsing XML
Efficiently. Choose the right XML parsing technique for your Java
applications. Oracle Magazine September/October 2003.
[Krupnikov 03]
K. Ari Krupnikov, STnG — a Streaming Transformations and Glue
framework, Extreme Markup Languages 2003.
[Harold 04]
Elliotte R. Harold, XOM Design Principles, Extreme Markup Languages
Referencias.
155
2004.
[Helal, 02a]
Sumi Helal. “Pervasive Java”. IEEE Pervasive Computing, pages 82-85,
2002.
[Helal, 02b]
Sumi Helal, Pervasive Java. Part II, IEEE Pervasive Computing, AprilJune 2002, pages 85-89.
[Helal, 02c]
Helal, S. Standards for Service Discovery and Delivery. IEEE Pervasive
Computing, pages 95-100, 2002.
[Herlihy 82]
M. Herlihy and B. Liskov. A Value Transmission Method for Abstract
Data Types. ACM Trans. on Programming Languages and Systems,
4(4):527--551, Oct. 1982. 27.
[Kawaguchi 02]
Kohsuke Kawaguchi Translating Relational Schemas to XML Schemas
Extreme Markup Languages 2002.
[Link 80]
Digital Research Incorporated: Link-80 Operator's Guide, 1980 (A
programmer's guide for the CP/M operating system)
[Lyons 03]
Robert C. Lyons, The difficulty of schema conformance problems,
Extreme Markup Languages 2003.
[Matzen 99]
R.W. Matzen, A new generation of tools for SGML, Markup Languages:
Theory & Practice, Publisher: MIT Press, 1999.
[Murata 97]
M. Murata, Transformation of documents and schemas by patterns and
contextual, In C. Nicholas and D. Wood, editors, Proceedings of the
Third International Workshop on Principles of Document Processing
(PODP 96), pp 153--169, Heidelberg, 1997. Springer-Verlag. Lecture
Notes in Computer Science 1293.
[Murata 98]
M. Murata, Data model for document tranformation and assembly, In
E.V. Munson, C. Nicholas, and D.Wood, editors, Proceedings of the
Fourth International Workshop on Principles of Digital Document.
156
Contribución al análisis XML para la mejora en las prestaciones de memoria
Processing (PODDP 98), pages 140--152, Heidelberg, Germany, 1998.
Springer-Verlag. Lecture Notes in Computer Science 1481.
[Murata 00a]
M. Murata, D. Lee, and M. Mani, Taxonomy of XML schema languages
using formal language theory, Extreme Markup Languages, 2000.
[Murata 00b]
M. Murata. Hedge automata: A formal model for XML schemata. Webpublished manuscript, 2000.
[Murata 01]
M. Murata, Extended path expressions for XML, In Proceedings of the
Twenteenth ACM SIGACT-SIGMOD-SIGART Symposium on
Principles of Database Systems, May 21-23, 2001, Santa Barbara,
California, USA. ACM, 2001.
[Murata 03]
M. Murata, A. Tozawa, M. Kudo, and S. Hada, XML access control
using static analysis, In Proceedings of the 10th ACM conference on
Computer and communication security, pages 73--84. ACM Press, 2003.
[Nakajima 01]
Nobuo Nakajima y Yasushi Yamao, Development for 4th generation
mobile communications, Wireless Communications and Mobile
Computing. Mob. Comp. 2001; 1:3-12
[Opyrchal 99]
Lukasz Opyrchal , Atul Prakash, Efficient Object Serialization in Java.
ICDCS Workshop on Electronic Commerce and Web-Based
Applications, 1999.
[Ortiz 02]
Ortiz, E.C. (2002). A Survey of J2ME Today. Technical report, Wireless
Java.
[Ousterhout 90]
Ousterhout, J. K., TCL: An Embeddable Command Language,
Proceedings of the USENIX Association Winter Conference. 1990.
[Ramalho 02]
Ramalho, José Carlos, Jorge Gustavo Rocha, José João Almeida, y Pedro
Henriques, SGML documents: Where does quality go?, Markup
Languages: Theory & Practice 1.1 (1999): 75-90.
Referencias.
[Renear 01]
157
Renear, A., Raising the bar: Text encoding from a logical point of view.
CLIP 2001: Computers, Literature, Philology, Gerhard-Mercator
University, Duisburg, Germany, 2001.
[Sasaki 05]
Felix Sasaki, Christian Lieske, Andreas Witt, Schema Languages &
Internationalization Issues: A survey, Extreme Markup Language 2005.
[Schatz 96]
Schatz, B., Mischo, W. H., Cole, T. W., Hardin, J. B., Bishop, A. P., and
Chen, H. 1996. Federating diverse collections of scientific literature.
Computer 29 (May 1996), 28–36.
[Simons 97]
Simons, Gary F., Conceptual Modeling versus Visual Modeling: A
Technological Key to Building Consensus, CHum 30.4: 303-319.
[Simons 99]
Simons, Gary F., Using Architectural Forms to Map TEI Data into an
Object-Oriented Database, CHum 33.1-2: 85-101. Originally delivered in
1997 at the TEI 10 conference in Providence, R.I.
[Sperberg-
Sperberg-McQueen, C. M., Text in the Electronic Age: Textual Study
McQueen 01a]
and Text Encoding, with Examples from Medieval Texts, Literary and
Linguistic Computing, 6:1, 34-46.
[Sperberg-
Sperberg-McQueen, C. M., Claus Huitfeldt, and Allen Renear, Meaning
McQueen 01b]
and interpretation of markup, Markup Languages: Theory & Practice 2.3
(2001): 215-234. http://www.w3.org/People/cmsmcq/2000/mim.html
[Sperberg-
Sperberg-McQueen, C. M., Claus Huitfeldt, and Allen Renear. 2001.
Mcqueen 01c]
Practical extraction of meaning from markup, Paper given at ACH/ALLC
2001, New York, June 2001.
[Sperberg-
C. M. Sperberg-McQueen, David Dubin, Claus Huitfeldt and Allen
Mcqueen 02a]
Renear, Drawing inferences on the basis of markup. Extreme Markup
Languages 2002
[Sperberg-
C. M. Sperberg-McQueen, What matters?. Presented at Extreme Markup
158
Contribución al análisis XML para la mejora en las prestaciones de memoria
Mcqueen 02b]
Languages 2002.
[Sperberg-
C. M. Sperberg-McQueen, Logic grammars and XML Schema. Extreme
Mcqueen 03]
Markup Languages 2003.
[Sperberg-
C. M. Sperberg-McQueen, Eric Miller. On mapping from colloquial
Mcqueen 04]
XML to RDF using XSLT. Extreme Markup Languages 2004.
[Sperberg-
Applications of Brzozowski derivatives to XML Schema processing.
Mcqueen 05b]
Extreme Markup Languages 2005.
[Sperberg-
C. M. Sperberg-Mcqueen, XML and Semi-Structured Data, ACM Queue
Mcqueen 05]
vol. 3, no. 8 - October 2005.
[Satyanarayanan
Satyanarayanan, M. (2001). Pervasive computing: Vision and challenges.
01]
IEEE Personal Communications, 8(4):10-17.
[Thompson 01]
Thompson, Henry S., Normal Form Conventions for XML
Representations of Structured Data, Talk at XML 2001, Orlando, 2001.
http://www.ltg.ed.ac.uk/~ht/normalForms.html
[Thompson 03]
Thompson, Henry S., and Richard Tobin, Using finite state automata to
implement W3C XML Schema content model validation and restriction
checking. XML Europe 2003, London. Available online at
http://www.idealliance.org/papers/dx_xmle03/papers/02-02-05/02-0205.html (imperfectly rendered) or at
http://www.ltg.ed.ac.uk/~ht/XML_Europe_2003.html.
[Thompson 05]
Thompson, Henry. MT Pipeline: A Public Service and a New Product.
Presentation at XTech 2005. Amsterdam, Netherlands, 2005.
[Walsh 02]
Norman Walsh, Generalized Metadata in your Palm, Extreme Markup
Language 2002
[Walsh 04]
Norman Walsh, Extreme DocBook, Extreme Markup Language 2004
[Weiser 91]
Weisses M, The computer for the 21st Century, Scientific American,
Referencias.
159
1991.
[Welty 01]
Vorthmann, Scott, and Jonathan Robie. 2001. Beyond schemas: Schema
adjuncts and the outside world, Markup Languages: Theory & Practice
2.3: 281-294.
[Welty 97]
Welty, Christopher, and Nancy Ide, Using the Right Tools: Enhancing
Retrieval from Marked-up Documents, CHumy 33: 59-84. Originally
delivered in 1997 at the TEI 10 conference in Providence, R.I.
[Wilmott c03]
Sam Wilmott, What programming language designers should do to help
markup processing, , Montreal, Canada, Extreme Markup Languages
2003, Agosto 2003
[Wilmott d02]
Sam Wilmott, The Dichotomy of Markup Languages, Montreal, Canada,
Extreme Markup Languages 2002, Agosto 2002,
http://www.mulberrytech.com/Extreme/Proceedings/html/2002/Wilmott0
1/EML2002Wilmott01.html.
[Wilmott e04]
Sam Wilmott, All About Pattern Matching, Montreal, Canada, Extreme
Markup Languages 2004, Agosto 2004,
http://www.mulberrytech.com/Extreme/Proceedings/html/2004/Wilmott0
1/EML2004Wilmott01.html
[Wood 99]
Lauren Wood, Programming marked-up documents, Markup Languages:
Theory & Practice, Publisher: MIT Press, 1999.
[Wu 02]
Wu, P.C. (2002) A Page-shift Transformation Format of ISO 10646.
Software-Practice and Experience.
160
Contribución al análisis XML para la mejora en las prestaciones de memoria
4. Referencias del autor
[Sierra a05]
Antonio J. Sierra, Fco Prieto, A comparative study of delay for
transmission images for a mobile devices over HTTP, IADAT Journal of
advanced technology IADAT.
[Sierra b05]
Antonio J. Sierra, Antonio Albéndiz, Comparative study of methods of
serialization at J2ME, The 14th IASTED International Conference on
APPLIED SIMULATION AND MODELLING ~ASM 2005~ June 1517, 2005 Benalmádena, Spain.
[Sierra c05]
Antonio J. Sierra, Fco Prieto, A comparative study of delay for
transmission images for a mobile devices over HTTP, in IADATmicv2005 International Conference on Multimedia, Image Processing
and Computer Vision, Madrid, pp.68-72, 2005. (ISBN: 84-933971-5-6)
[Sierra 05]
Antonio J. Sierra, Miguel Castanedo, Propuesta de un Modelo de
Generación de Firma digital XML en dispositivos móviles, I SIMPOSIO
ESPAÑOL SOBRE SEGURIDAD INFORMÁTICA (CEDI’2005),
Granada 2005.
[Sierra d05]
Antonio J. Sierra, Alberto Oliva, Propuesta de un Modelo SAML
aplicado a los Servicios Web Seguros para Dispositivos Móviles, I
CONGRESO ESPAÑOL DE INFORMÁTICA (CEDI’2005), Granada
2005.
[Sierra e05]
Antonio J. Sierra, A New Paradigm to Parse XML based on Free Cursor
Mobility, Montreal, Canada, Extreme Markup Languages 2005, Agosto
2005.
[Sierra f05]
Antonio J. Sierra,A Page-Shift Transformation format of ISO 10646 for
16-bits code units , IST2005, International Symposium on
Telecommunications, Shiraz, Iran, 2005.
Referencias.
[Sierra g05]
161
Antonio J. Sierra, StSOAP:Streaming API for SOAP, The Second
International Conference on Innovations in Information Technology
(IIT'05), Dubai, UAE, 2005.
[Sierra h05]
Tutor: Antonio J. Sierra, Autor: Miguel Villalobos, XML2J2ME:
Implementación de los tipos de datos XML Schema para la plataforma
J2ME, Proyecto Final de Carrera.
[Sierra i03]
Tutor: Antonio J. Sierra, Autor: Alberto Fernández Fernández
Implementación de una aplicación de correo electrónico sobre la
plataforma J2ME utilizando el protocolo SOAP", Proyecto Final de
Carrera.
[Sierra j04]
Tutor: Antonio J. Sierra, Autor: Manuel Valenzuela Romero
Implementación de tarjetas inteligentes con tecnología Java Card,
Proyecto Final de Carrera.
[Sierra k05]
Tutor: Antonio J. Sierra, Autor: José Pablo Soriano Canela,
Implementación de los protocolos JXTA sobre la plataforma J2ME
(JXME), Proyecto Final de Carrera.
[Sierra l04]
Tutor: Antonio J. Sierra, Autor: Isaac David Gutiérrez Pulgarín, Estudio
y prueba de una arquitectura Grid de servicios web sobre Jini, Proyecto
Final de Carrera.
[Sierra m03]
Tutor: Antonio J. Sierra, Autor: Javier Feijóo Casas, Emulación de un
puerto serie virtual sobre una conexión Bluetooth, Proyecto Final de
Carrera.
[Sierra n04]
Tutor: Antonio J. Sierra, Autor: Francisco Prieto Piñero, Cliente para la
recepción de imágenes de vídeo en dispositivos móviles usando CLDC
sobre J2ME, Proyecto Final de Carrera.
[Sierra ñ05]
Tutor: Antonio J. Sierra, Autor: David Álvarez Suárez, Cliente para la
recepción de imágenes de vídeo en dispositivos móviles usando CDC
162
Contribución al análisis XML para la mejora en las prestaciones de memoria
sobre J2ME, Proyecto Final de Carrera.
[Sierra o02]
Tutor: Antonio J. Sierra, Autor:Manuel González Martins, Aplicación de
la telefonía de Java utilizando JTAPI, Proyecto Final de Carrera.
[Sierra p04]
Tutor: Antonio J. Sierra, Autor: Antonio Albéndiz Varela, Aplicación de
la serialización sobre J2ME, Proyecto Final de Carrera.
[Sierra q05]
Tutor: Antonio J. Sierra, Autor: Francisco Javier Fernández González,
Aplicación de Jini a entornos domóticos, Proyecto Final de Carrera.
Referencias.
163
5. Recomendaciones W3C
[Adler 01]
Sharon Adler y colaboradores, Extensible Stylesheet Language (XSL)
Version 1.0, W3C Recommendation 15 October 2001,
http://www.w3.org/TR/xsl/.
[Binary]
XML Binary Characterization Working Group Public Page,
http://www.w3.org/XML/Binary/.
[Biron 01]
Paul V. Biron and Ashok Malhotra, XML Schema Part 2: Datatypes, w3c
Recommendation 02 May 2001, http://www.w3.org/TR/2001/RECxmlschema-2-2001/REC-xmlschema-2-20010502/.
[Bray 99]
Tim Bray, Dave Hollander and Andrew Layman, Namespaces in XML,
World Wide Web Consortium 14-January-1999,
http://www.w3.org/TR/REC-xml-names.
[Bray 04a]
Tim Bray, Jean Paoli, C.M. Sperberg-McQueen, Eve Maler, François
Yergeau (editors), W3C. Extensible Markup Language (XML) 1.0 (Third
Edition),W3C Recommendation 04 February 2004,
http://www.w3.org/TR/REC-xml.
[Bray 04b]
Tim Bray, Jean Paoli, C.M. Sperberg-McQueen, Eve Maler, François
Yergeau (editors), Extensible Markup Language (XML), W3C
Recommendation 04 February 2004, edited in place 15 April 2004,
http://www.w3.org/TR/xml11/.
[Clark 99]
James Clark, XSL Transformations (XSLT) Version 1.0, W3C
Recommendation 16 November 1999, http://www.w3.org/TR/xslt.
[CDF 04]
Compund document formats, http://www.w3.org/2004/CDF/.
Cowan, John, and Richard Tobin, ed. 2001. XML Information Set, W3C
[Cowan 01]
Recommendation 24 October 2001. [Cambridge, Sophia-Antipolis,
Tokyo]: World Wide Web Consortium. http://www.w3.org/TR/xml-
164
Contribución al análisis XML para la mejora en las prestaciones de memoria
infoset/
Arnaud Le Hors, Philippe Le Hégaret, Lauren Wood, Gavin Nicol,
[DOM Level 2]
Jonathan Robie, Mike Champion, Steve Byrne, Document Object Model
(DOM) Level 2 Core Specification. Version 1.0, W3C Recommendation
13 November, 2000. http://www.w3.org/TR/DOM-Level-2-Core/javabinding.html
[dom2events 00] Document Object Model (DOM) Level 2 Events Specification, W3C
Recommendation, T. Pixley, ed., 13 November 2000.Available at:
http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113. The
latest version is available at: http://www.w3.org/TR/DOM-Level-2Events.
[Eastlake 02]
Donald Eastlake, Joseph Reagle, David Solo, XML-Signature Syntax and
Processing , W3C Recommendation 12 February 2002.
http://www.w3.org/TR/xmldsig-core/
[Fikes 01]
Fikes, Richard, and Deborah L. McGuinness. 2001. An Axiomatic
Semantics for RDF, RDF-S, and DAML+OIL (March 2001). W3C Note
18 December 2001. World Wide Web Consortium.
http://www.w3.org/TR/daml+oil-axioms
[Gudgin 03a]
Martin Gudgin et al., SOAP Version 1.2 Part 1: Messaging Framework,
w3c Recommendation, 24 June 2003, http://www.w3.org/TR/2003/RECsoap12-part1-20030624/.
[Gudgin 03b]
Martin Gudgin et al., SOAP Version 1.2 Part 2: Adjuncts, w3c
Recommendation, 24 June 2003, http://www.w3.org/TR/soap12-part2/
http://www.w3.org/TR/2003/REC-soap12-part1-20030624/.
[Haas 03]
Hugo Haas, et al., “SOAP Version 1.2:Specification Assertions and Test
Collection, w3c Recommendation, 24 June 2003,
http://www.w3.org/TR/soap12-testcollection/.
[Hugo 04]
Hugo Hass and Allen Brown, Web Services Glossary, W3C Working
Referencias.
165
Group Note 11 de Febrero 2004 http://www.w3.org/TR/ws-gloss/.
[HTML]
HyperText Markup Language (HTML), http://www.w3.org/MarkUp/.
[Marsh 01]
Jonathan Marsh, Microsoft, XML Base. W3C Recommendation 27 June
2001. http://www.w3.org/TR/xmlbase/
[MathML]
Mathematical Markup Language (MathML) Version 2.0 (Second
Edition), http://www.w3.org/Math/.
[McCarron 03]
Shane McCarron (Applied Testing and Technology, Inc.), Steven
Pemberton (CWI/W3C®), T. V. Raman (IBM Corporation), XML
Events. An Events Syntax for XML. W3C Recommendation 14 October
2003. http://www.w3.org/TR/xml-events/.
[Mitra 03]
Nilo Mitra, SOAP Version 1.2 Part 0: Primer, w3c Recommendation, 24
June 2003, http://www.w3.org/TR/soap12-part0/.
[MWI a06]
Mobile Web Initiative Jo Rabin, mTLD Mobile Top Level Domain
(.mobi), Charles McCathieNevile, Opera Software [Early Drafts], Mobile
Web Best Practices 1.0. W3C Working Draft 13 January 2006.
http://www.w3.org/TR/mobile-bp/.
[MWI b05]
Mobile Web Initiative, http://www.w3.org/2005/MWI/.
[Perl]
Perl (Practical Extraction and Report Language), http://www.perl.org/
[Python]
Python Programming Language. http://www.python.org/
[RDF]
Resource Description Framework http://www.w3.org/RDF/
[Security ]
W3C Security Resources http://www.w3.org/Security/.
[Signature]
XML Signature WG, http://www.w3.org/Signature/.
[SVG]
Jon Ferraiolo y colaboradores, Scalable Vector Graphics (SVG) 1.1
Specification, http://www.w3.org/TR/SVG11/.
166
Contribución al análisis XML para la mejora en las prestaciones de memoria
[Thompson 01]
Thompson, Henry, S., David Beech, Murray Maloney and Noah
Mendelsohn. XML Schema Part 1: Structures. W3C Recommendation 2
May 2001. http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/
[XHTML]
Steven Pemberton y colaboradores, XHTML™ 1.0 The Extensible
HyperText Markup Language (Second Edition),
http://www.w3.org/TR/xhtml1/.
[XPath 99]
James Clark, Steve DeRose,XML Path Language (XPath) Version 1.0
W3C Recommendation 16 November 1999,
http://www.w3.org/TR/xpath.
[XPath20 05]
Anders Berglund, Scott Boag, Don Chamberlin, Mary F. Fernández,
Michael Kay, Jonathan Robie, Jérôme Siméon, XML Path Language
(XPath) 2.0, W3C Working Draft 04 April 2005.
http://www.w3.org/TR/xpath20/.
[W3C a]
Document Object Model, http://www.w3.org/DOM/.
[WICD 05]
WICD Mobile 1.0. W3C Working Draft 19 December 2005.
http://www.w3.org/TR/WICDMobile/.
[WSDL ]
Erik Christensen, Francisco Curbera, Greg Meredith, y Sanjiva
Weerawarana, Web Services Description Language (WSDL),
http://www.w3.org/TR/wsdl.
Referencias.
167
6. Especificaciones Java
6.1 XML
[JSR-5]
Rajiv Mordani, JSR 5: XML Parsing Specification
http://jcp.org/en/jsr/detail?id=5.
[JSR-31]
Joe Fialli, Sekhar Vajjhala, XML Data Binding Specification,
http://www.jcp.org/jsr/detail/31.jsp, http://java.sun.com/xml/jaxb/.
[JSR-63 ]
JAXP 1.1 Java APIs for XML Processing,
http://jcp.org/en/jsr/detail?id=63.
[JSR-67]
V B Kumar Jayanti, JavaTM APIs for XML Messaging 1.0,
http://jcp.org/en/jsr/detail?id=67.
[JSR-93]
Farrukh Najmi, JavaTM API for XML Registries 1.0 (JAXR),
http://jcp.org/en/jsr/detail?id=67.
[JSR-101]
Roberto Chinnici, Java APIs for XML based RPC,
http://www.jcp.org/jsr/detail/101.jsp.
[JSR-102]
Jason Hunter, JDOM 1.0, http://jcp.org/en/jsr/detail?id=102.
[JSR-104]
Anthony Nadalin, XML Trust Service APIs,
http://jcp.org/en/jsr/detail?id=104.
[JSR-105]
Java Specification Request 105: XML Digital Signature APIs.
http://jcp.org/en/jsr/detail?id=105.
[JSR-106]
Java Specification Request 10: XML Digital Encryption APIs.
http://jcp.org/en/jsr/detail?id=106.
[JSR-156]
Mark Little, Java API for XML Transactions,
http://jcp.org/en/jsr/detail?id=156.
[JSR-157]
Himagiri Mukkamala, ebXML CPP/A APIs for Java,
168
Contribución al análisis XML para la mejora en las prestaciones de memoria
http://jcp.org/en/jsr/detail?id=157.
[JSR-173]
Java Specification Request 173: JSR 173: Streaming API for XML,
http://jcp.org/en/jsr/detail?id=173.
[JSR-206]
Jeff Suttor, Norman Walsh, JavaTM API for XML Processing (JAXP)
1.3, http://jcp.org/en/jsr/detail?id=206.
[JSR-280]
Pia Niemela, Ellen Siegel, JSR 280: XML API for JavaTM ME,
http://jcp.org/en/jsr/detail?id=280.
Referencias.
169
6.2 J2ME
[JSR-30]
Antero Taivalsaari, J2ME Connected, Limited Device Configuration,
http://jcp.org/en/jsr/detail?id=30.
[JSR-36]
Hinkmond Wong, J2METM Connected Device Configuration (CDC),
http://jcp.org/en/jsr/detail?id=36.
[JSR-37]
Jim Van Peursem, Mobile Information Device Profile for the J2METM
Platform, http://jcp.org/en/jsr/detail?id=37.
[JSR-46]
Hinkmond Wong, J2METM Foundation Profile,
http://jcp.org/en/jsr/detail?id=46.
[JSR-62]
Jon Courtney, Personal Profile Specification,
http://jcp.org/en/jsr/detail?id=62.
[JSR-75]
Brad Jarvinen y Ken Walker, PDA Optional Packages for the J2METM
Platform, http://jcp.org/en/jsr/detail?id=75.
[JSR-82]
Ravi Viswanathan, JavaTM APIs for Bluetooth,
http://jcp.org/en/jsr/detail?id=82.
[JSR-118]
Mobile Information Device Profile (MIDP) 2.0.
http://jcp.org/jsr/detail/118.jsp.
[JSR-120]
Jan Eichholz, Wireless Messaging API,
http://jcp.org/en/jsr/detail?id=120.
[JSR-135]
Antti Rantalahti, Mobile Media API, http://jcp.org/en/jsr/detail?id=135.
[JSR-139]
Antero Taivalsaari, Sun Microsystems, Inc., JSR 139: Connected Limited
Device Configuration 1.1, http://jcp.org/en/jsr/detail?id=139.
[JSR-172]
Java Specification Request 172: J2ME Web Services Specification,
http://jcp.org/en/jsr/detail?id=172".
170
Contribución al análisis XML para la mejora en las prestaciones de memoria
[JSR-179]
Kimmo Loytana, Location API for J2METM ,
http://jcp.org/en/jsr/detail?id=179.
[JSR-180]
Chris Bouret y Jari Kinnunen, SIP API for J2ME,
http://jcp.org/en/jsr/detail?id=180.
[JSR-184]
Tomi Aarnio, Mobile 3D Graphics API for J2METM,
http://jcp.org/en/jsr/detail?id=184.
[JSR-185]
Harry Burks and John Pampuch, JavaTM Technology for the Wireless
Industry, http://jcp.org/en/jsr/detail?id=185.
[JSR-190]
Allen Lau y Colin Sampaleanu, Event Tracking API for J2ME,
http://jcp.org/en/jsr/detail?id=190.
[JSR-205]
Jochen Sauter (Siemens AG), JSR-205 Wireless Messaging API 2.0,
http://jcp.org/aboutJava/communityprocess/final/jsr205/
[JSR-209]
Hakim Mendjeli, (Vodafone Group Services Limited) JSR 209:
Advanced Graphics and User Interface Optional Package for the J2METM
Platform, http://jcp.org/en/jsr/detail?id=209.
[JSR-217]
Bartley Calder (Sun Microsystems, Inc.), Jon Courtney (Sun
Microsystems, Inc.), http://jcp.org/en/jsr/detail?id=217.
[JSR-226]
Suresh Chitturi, Nokia Corporation, Scalable 2D Vector Graphics API for
J2METM, http://jcp.org/en/jsr/detail?id=226.
[JSR-238]
Nokia Corporation (2004), JSR-238 Mobile Internationalization API.
http://www.jcp.org/en/jsr/detail?id=238.
[JSR-271]
JSRs: Java Specification Requests JSR 271: Mobile Information Device
Profile 3
[JSR-287]
Suresh Chitturi (Nokia Corporation), JSR 287: Scalable 2D Vector
Graphics API 2.0 for Java METM, http://jcp.org/en/jsr/detail?id=287.
Referencias.
[JSR-177]
171
Java Specification Request 177: JSR 177: Security and Trust Services
API for J2ME. http://jcp.org/en/jsr/detail?id=177.
6.3 Otras Especificaciones Java
[JSR-164]
John Buford y Mourad Debbabi, SIMPLE Presence,
http://jcp.org/en/jsr/detail?id=164.
[JSR-165]
John Buford y Mourad Debbabi, SIMPLE Instant Messaging,
http://jcp.org/en/jsr/detail?id=165.
7. The Internet Engineering Task Force (RFC y draft)
[RFC 959]
J. Postel, J. Reynolds, File Transfer Protocol (FTP), (October 1985)
http://www.faqs.org/rfcs/rfc959.html
[RFC 1050]
Sun Microsystems, Inc. RPC: Remote Procedure Call Protocol
specification, (April 1988). http://www.faqs.org/rfcs/rfc1050.html.
[RFC 1157]
J. Case, M. Fedor, M. Schoffstall, J. Davin, A Simple Network
Management Protocol (SNMP), (May 1990),
http://www.ietf.org/rfc/rfc1157.txt.
[RFC1641]
Goldsmith, D., and M. Davis, Using Unicode with MIME, RFC1641,
Taligent, Inc., (July 1994) http://www.faqs.org/rfcs/rfc1641.html.
[RFC 1642]
D. Goldsmith, M. Davis, UTF-7 A Mail-Safe Transformation Format of
Unicode, (Mayo 1997) http://www.ietf.org/rfc/rfc2152.txt.
[RFC 1766]
H. Alvestrand, Tags for the Identification of Languages, (March 1995)
http://www.ietf.org/rfc/rfc1766.txt.
[RFC1815]
Ohta, M., Character Sets ISO-10646 and ISO-10646-J-1, RFC 1815,
Tokyo Institute of Technology, (July 1995).
172
Contribución al análisis XML para la mejora en las prestaciones de memoria
http://www.ietf.org/rfc/rfc1815.txt.
[RFC 1851]
P. Karn, P. Metzger, W. Simpson, The ESP Triple DES Transform,
(Septiembre 1995) http://www.ietf.org/rfc/rfc1851.txt
[RFC 2044]
Yergeau F., UTF-8, a Transformation Format of ISO 10646. (1998).
http://www.ietf.org/rfc/rfc2044.txt.
[RFC 2119]
Scott Bradner, Key words for use in RFCs to Indicate Requirement
Levels, (1997), http://www.ietf.org/rfc/rfc2119.txt.
[RFC 2141]
Moats, R., URN Syntax, RFC 2141, (May 1997),
http://www.ietf.org/rfc/rfc2141.txt.
[RFC 2279]
F. Yergeau, RFC 2279 - UTF-8, a transformation format of ISO 10646,
http://www.faqs.org/rfcs/rfc2279.html.
[RFC 2396]
T. Berners-Lee, R. Fielding, U.C. Irvine, Uniform Resource Identifiers
(URI): Generic Syntax, (Agosto 1998)
http://www.ietf.org/rfc/rfc2396.txt.
[RFC 2608]
E. Guttman, C. Perkins, J. Veizades, M. Day, Service Location Protocol,
version 2, (1999), http://www.faqs.org/rfcs/rfc2608.html.
[RFC 2616]
R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter and T. BernersLee, Hypertext Transfer Protocol -- HTTP/1.1, (June 1999),
http://www.w3.org/Protocols/rfc2616/rfc2616.html.
[RFC 2732]
L. Masinter Carpenter, B R. Hinden, Format for Literal IPv6 Addresses in
URL's, (1999), http://www.ietf.org/rfc/rfc2732.txt.
[RFC 2781]
Hoffman, P., Yergau, F, UTF-16, an Encoding of ISO 10646, (2000),
http://www.ietf.org/rfc/rfc2781.txt.
[RFC 2818]
E. Rescorla, HTTP Over TLS, (May 2000)
http://www.faqs.org/rfcs/rfc2818.html.
Referencias.
[RFC 3023]
173
M. Murata, S. St.Laurent, D. Kohn, XML Media Types, (2001).
http://www.ietf.org/rfc/rfc3023.txt.
[RFC 3066]
H. Alvestrand, Tags for the Identification of Languages, (Enero 2001)
http://www.ietf.org/rfc/rfc3066.txt.
[RFC 3986]
T. Berners-Lee, R. Fielding, L. Masinter, Uniform Resource Identifier
(URI): Generic Syntax, (Enero 2005)
http://www.gbiv.com/protocols/uri/rfc/rfc3986.html.
[RFC 3987]
M. Duerst, M. Suignard, Internationalized Resource Identifiers (IRIs),
(Enero 2005) http://www.ietf.org/rfc/rfc3987.txt.
[RFC 4042]
M. Crispin, Request for Comments: 4042, UTF-9 and UTF-18 Efficient
Transformation Formats of Unicode, (1 Abril 2005),
http://panda.com/tops-20/utf9.txt.
[draft-ietf-idn-
Mark Welter, Mark Welter, UTF-6 - Yet Another ASCII-Compatible
utf6-00]
Encoding for IDN, draft-ietf-idn-utf6-00, (November 16, 2000),
http://www.ietf.org/proceedings/00dec/I-D/draft-ietf-idn-utf6-00.txt.
8. Unicode
[Davis 05a]
Mark Davis, Unicode Technical Standard #18. Unicode Regular
Expressions, 2005-05-01. http://www.unicode.org/reports/tr18/.
[Davis 05b]
Mark Davis, Markus Scherer, Unicode Technical Standard #22.
Character Mapping Markup Language (CharMapML),
http://www.unicode.org/reports/tr22/.
[Davis 05c]
Mark Davis, Unicode Technical Standard #35. Locale Data Markup
Language (LDML) 2005-06-02, http://www.unicode.org/reports/tr35/.
[Davis 05d]
Martin Dürst (W3C), Asmus Freytag(Unicode), Unicode in XML and
other Markup Languages. Unicode Technical Report #20. 13 June 2003.
174
Contribución al análisis XML para la mejora en las prestaciones de memoria
[Davis 05e]
Mark Davis, Ken Whistler, Unicode Technical Standard #10. Unicode
Collation Algorithm, 2005-05-05, http://www.unicode.org/reports/tr10/.
[SCSU ]
A Standard Compression Scheme for Unicode,Unicode Technical
Standard #6, http://www.unicode.org/reports/tr6/.
[Umamaheswara V.S. Umamaheswaran, Unicode Technical Report #16. UTF-EBCDIC,
n 02]
2002-04-16, http://www.unicode.org/reports/tr16/.
[Unicode HP]
Unicode Home Page, http://www.unicode.org/
[Unicode]
The Unicode Consortium. The Unicode Standard, Version 4.1. Reading,
Mass.: Addison-Wesley, as updated from time to time by the publication
of new versions. (ISBN 0-321-18578-1) (See
http://www.unicode.org/unicode/standard/versions/ for the latest version
and additional information on versions of the standard and of the Unicode
Character Database).
9. ISO: International Organization for Standardization
ISO 639-2:1998 - Codes for the representation of names of languages -[ISO 639-2]
Part 2: Alpha-3 code - edition 1, 1998-11- 01, 66 pages, prepared by a
Joint Working Group of ISO TC46/SC4 and ISO TC37/SC2.
[ISO 646]
ISO/IEC 646: Information Processing - 7-Bit Coded Character Set for
Information Interchange.
[ISO 1087]
ISO 1087-2:2000. Terminology work - Vocabulary - Part 2: Computer
applications.
[ISO 10744]
ISO 10744: Information Technology - Hypermedia/Time-based
Structuring Language (HyTime). International Organization for
Standardization, 1997.
[ISO 1639]
ISO 639:1988 (E/F) - Code for the representation of names of languages -
Referencias.
175
The International Organization for Standardization, 1st edition, 1988-0401 Prepared by ISO/TC 37 - Terminology (principles and coordination).
[SGML ]
ISO 8879 : Information processing - Tex and office systems – Standard
generalized markup languaje (SGML) = Traitement de l'information Systèmes bureautiques - Language standard généralisé de balisage
(SGML) / International Organization for Standarization, Génève: ISO,
1988.
ISO 3166:1988 (E/F) - Codes for the representation of names of countries
[ISO 3166]
- The International Organization for Standardization, 3rd edition, 198808-15.
[ISO 4873]
ISO/IEC 4873: Information Processing - 8-Bit Code for Information
Interchange - Structure and Rules for implementation.
[ISO 6429]
ISO/IEC 6429: Information Processing - 7-Bit and 8-Bit Coded Character
Sets - Control Functions for Coded Character Sets.
[ISO 8859]
ISO/IEC 8859-xx: Information Processing - 8-Bit Single-Byte Coded
Graphic Character Sets (several parts).
[ISO 10179]
ISO/IEC 10179:1996. Document Style Semantics and Specification
Language, (DSSSL)
[ISO 10646]
ISO (). ISO/IEC 10646-1:2000. Information technology — Universal
Multiple-Octet Coded Character Set (UCS) — Part 1: Architecture and
Basic Multilingual Plane and ISO/IEC 10646-2:2001. Information
technology — Universal Multiple-Octet Coded Character Set (UCS) —
Part 2: Supplementary Planes, as, from time to time, amended, replaced
by a new edition or expanded by the addition of new parts. [Geneva]:
International Organization for Standardization. (See http://www.iso.ch
for the latest version.)
[ISO 15000]
ISO 15000 Electronic business eXtensible Markup Language ebXML.
ISO 15000-1:2004 Part 1: Collaboration-protocol profile and agreement
176
Contribución al análisis XML para la mejora en las prestaciones de memoria
specification (ebCPP)
ISO 15000-2:2004 Part 2: Message service specification (ebMS)
ISO 15000-3:2004 Part 3: Registry information model specification
(ebRIM)
ISO 15000-4:2004 Part 4: Registry services specification (ebRS)
ISO 15000-5:2005 Part 5: ebXML Core Components Technical
Specification, Version 2.01(ebCCTS)
[ISO/IEC 19757] ISO/IEC 19757 - DSDL Document Schema Definition Language - Part 3:
Rule-based validation – Schematron.
[ISO/IEC DTR
ISO/IEC DTR 22250-1, Document Description and Processing
22250-1]
Languages -- Regular Language Description for XML (RELAX) -- Part 1:
RELAX Core, 2000 October.
Referencias.
177
10. OASIS
(Organization for the Advancement of Structured Information Standards)
[Clark 01b]
James Clark, Murata Makoto, RELAX NG Specification, Committee
Specification 3 December 2001, http://www.oasisopen.org/committees/relax-ng/spec-20011203.html.
Security Assertion Markup Language (SAML) 2.0 Technical Overview
[SAML
Working Draft 03, 20 February 2005.
overview]
Profiles for the OASIS Security Assertion Markup Language (SAML)
[SAML v2.0]
V2.0 OASIS Standard, 15 March 2005. http://docs.oasisopen.org/security/saml/v2.0/.
[SAML
Interoperability Demonstration Scenarios, Guidelines & Final Report
Scenario]
SAML 2.0 RSA Conference 2005 February 18, 2005 San Francisco, CA.
[UBL 06]
Jon Bosak y Tim McGrath, Universal Business Language 2.0 Public
Review Draft, 19 January 2006, http://docs.oasis-open.org/ubl/prd-UBL2.0/.
[XACML]
OASIS Standard,XACML(eXtensible Access Control Markup
Language), http://www.oasisopen.org/committees/download.php/2406/oasis-xacml-1.0.pdf, 18
Febrero 2003.
178
Contribución al análisis XML para la mejora en las prestaciones de memoria
11. Software
[ASXMLP ]
ASXMLP 020308, http://www.argosytelcrest.co.uk/xmlparser/.
[Bouncy Castle]
The
legion
of
the
http://www.bouncycastle.org/index.html.
[DOM4J]
http://dom4j.org/.
[EXML]
Electric XML,
Bouncy
http://www.webmethods.com/meta/default/folder/0000005452
[Javaguard]
Javaguard, http://sourceforge.net/projects/javaguard/
[JDOM]
http://jdom.org/
[Jobfuscate]
Jobfuscate, http://www.jobfuscator.com/
[JoGa]
JoGa, http://www.nq4.de/
[Jshrink]
Jshrink, http://www.e-t.com/jshrink.html.
[JWSDP]
Java Web Services Developer Pack (Java WSDP) Version 2.0,
http://java.sun.com/webservices/jwsdp/
[Kawaguchi 03]
Sun Multi-Schema XML Validator,
http://www.sun.com/software/xml/developers/multischema/
[kSOAP]
http://ksoap.objectweb.org/.
[kXML2]
kXML2, http://kxml.objectweb.org/.
[Marvin
MarvinObfuscator, http://www.drjava.de/obfuscator/
Obfuscator]
[MinML]
MinML, http://www.wilson.co.uk/xml/minml.htm.
[NanoXML]
NanoXML, http://nanoxml.sourceforge.net/orig/kvm.html.
Castle.
Referencias.
179
[Next]
Next Solution http://www.nextsolution.co.jp/
[OpenJade]
OpenJade: http://sourceforge.net/projects/openjade/
[Proguard]
Proguard, http://proguard.sourceforge.net/.
[Retroguard]
Retroguard, http://www.retrologic.com/retroguard-main.html.
[St.Laurent ]
Simon St.Laurent, TAM - The
http://simonstl.com/projects/tam/.
[Smokescreen ]
Smokescreen, http://www.leesw.com/
[OmniMark]
OmniMark programming language, http://www.stilo.com/
[Xerces]
Xerces2 Java Parser, http://xml.apache.org/xerces2-j/index.html.
[Xparse-J ]
Xparse-J 1.0, http://www.webreference.com/xml/tools/xparse-j.html.
[XPP ]
XmlPull V1 API,
Tiny
API
for
Markup,
http://www.xmlpull.org/v1/doc/api/org/xmlpull/v1/packagesummary.html.
[XPP2]
XML Pull Parser 2, Home page of XML Pull Parser (XPP),
http://www.extreme.indiana.edu/xgws/xsoap/xpp/.
[XML Stream]
XML Stream API, http://edocs.bea.com/wls/docs70/xml/xml_stream.html.
[XMLtp]
XMLtp, http://mitglied.lycos.de/xmltp/
[XP]
http://www.trantor.de/xml/
[XT]
The Expat XML Parser ,http://www.libexpat.org/
[yGuard]
yGuard, http://www.yworks.com/en/products_yguard_about.htm.
[Z Format]
Z Format, http://z.departure.dk/.
[Zelix KlassMaster] Zelix KlassMaster, http://www.zelix.com/klassmaster/
180
Contribución al análisis XML para la mejora en las prestaciones de memoria
[VTD-XML]
Project Homepage of VTD-XML, http://vtdxml.sourceforge.net/VTD.html.
12. Referencias Web
[ACH/ACL/AL
Association for Computers and the Humanities, Association for
LC 94]
Computational Linguistics, and Association for Literary and Linguistic
Computing. 1994. Guidelines for Electronic Text Encoding and
Interchange (TEI P3). Ed. C. M. Sperberg-McQueen and Lou Burnard.
Chicago, Oxford: Text Encoding Initiative, 1994.
http://www.hti.umich.edu/t/tei/.
[Apache]
The Apache Software Foundation, http://www.apache.org/
[Allen 01]
Eric E. Allen, Diagnosing Java Code: Improve the performance of your
Java code, 01 May 2001, http://www106.ibm.com/developerworks/java/library/j-diag8.html.
[Atkinson 02]
Bob Atkinson y colaboradores, Web Services Security (WS-Security),
Version 1.0 05 April 2002, http://www106.ibm.com/developerworks/webservices/library/ws-secure/.
[Álvarez 02]
G. Álvarez, Ofuscación del código,
http://www.cs.arizona.edu/~collberg/Teaching/620/2002/Handouts/Hand
out-13.pdf, 18 Febrero 2002.
[Batik]
Batik SVG Toolkit, Apache Software Foundation.
http://xml.apache.org/batik/
[BEAXmlStrea]
BEA WebLogic XML Streaming API, http://edocs.bea.com/wls/docs70/xml/xml_stream.html
[CafeBabe]
CafeBabe,
http://www.geocities.com/CapeCanaveral/Hall/2334/Programs/cafebabe.
html.
Referencias.
[Chakraborty ]
181
Dipanjan Chakraborty y Harry Chen, Descubrimiento de Servicios para
Comercio Móvil en el Futuro,
http://www.acm.org/crossroads/espanol/xrds7-2/service.html.
[Clark 01a]
Kendall Grant Clark, DOM and SAX are Dead, Long Live DOM and
SAX, http://www.xml.com/lpt/a/2001/11/14/dom-sax.html.
[Clark 01c]
James Clark, TREX - Tree Regular Expressions for XML,
http://www.thaiopensource.com/trex/.
[Collberg]
Christian Collberg, Clark Thomborson, Douglas Low, A Taxonomy of
ObfuscatingTransformations,
http://www.cs.arizona.edu/~collberg/Research/Publications/CollbergTho
mborsonLow97a/index.html
[Collberg 02]
C.S. Collberg, Security Through Obscurity,
http://www.cs.arizona.edu/~collberg/Teaching/620/2002/Handouts/Hand
out-13.pdf
[Collberg 02a]
C.S. Collberg, y C. Thomborson, Watermarking, Tamper-Proofing, and
Obfuscation-Tools for Software Protection, IEEE Transactions on
Software Engineering, Vol. 28, no. 6, June 2002,
http://www.cs.auckland.ac.nz/~cthombor/Pubs/112393-2a.pdf.
[Connolly]
Dan Connolly, Rohit Khare, Adam Rifkin, The Evolution of Web
Documents. The Ascent of XML,
http://www.xml.com/pub/a/w3j/s3.connolly.html.
[DocBook 06]
DocBook, http://nwalsh.com/docbook/index.html
[DOM PPP]
DOM Pull Parser for Python,
http://www.prescod.net/python/pulldom.html.
[DuCharme 05]
Bob DuCharme, Push, Pull, Next!,
http://www.xml.com/pub/a/2005/07/06/tr.html.
182
Contribución al análisis XML para la mejora en las prestaciones de memoria
[ebXML]
http://www.ebxml.org/
[Edd 04]
Dumbill, The State of XML,
http://www.xml.com/pub/a/2004/04/21/state.html.
[EDGE]
Enhanced Data Rates for GSM Evolution (EDGE), Nokia
Telecommunications Oy, Nokia white paper, March 1999,
http://www.nokia.com/BaseProject/Sites/NOKIA_MAIN_18022/CDA/C
ategories/Business/Technologies/EDGE/_Content/_Static_Files/nokia_ed
ge_evolution_wp.pdf.
[Giguere 02]
Eric Giguere, Understanding J2ME Application Models, October 2002,
http://developers.sun.com/techtopics/mobility/midp/articles/models/.
[Haustein ]
Stefan Haustein. XML pull wrapper for SAX parsers
http://www.trantor.de/xml/
[Heath ]
Jim Heath and Larry Welsch, Difficulties in Parsing SGML,
DOCPROCS '88 Proceedings of the ACM conference on Document
processing systems, http://portal.acm.org/citation.cfm?id=62520.
[HotSpot]
The
CLDC
HotSpot
Implementation
Virtual
Machine
http://java.sun.com/products/cldc/wp/CLDC_HI_WhitePaper.pdf.
[Java EE]
Java Platform, Enterprise Edition (Java EE) http://java.sun.com/javaee/
[Java ME]
Java 2 Micro Edition (1999). Java 2 Platform Micro Edition.
http://java.sun.com/j2me/index.jsp.
[Java SE ]
Java Platform, Standard Edition (Java SE) http://java.sun.com/javase/
[J2ME05]
J2ME Devices, Sun developers network, Products and Technologies,
Technical Topics,
http://developers.sun.com/techtopics/mobility/device/device.
[J2MEpolish]
Device Database, http://www.j2mepolish.org/devices-overview.html.
Referencias.
183
[Jade]
Jade – James’s DSSSL Engine. http://www.jclark.com/jade/
[JARV]
A vendor-neutral, implementation-independent and schema language
independent interface for XML validators. http://isorelax.sourceforge.net/JARV/
[Knudsen 02a]
Jonathan Knudsen, Parsing XML in J2ME
http://developers.sun.com/techtopics/mobility/midp/articles/parsingxml/,
2002.
[Knudsen 02b]
Jonathan Knudsen, Obfuscating MIDlet Suites with Proguard,
http://developers.sun.com/techtopics/mobility/midp/ttips/proguard, 23
Agosto 2002.
[Kuhn]
Markus Kuhn, UTF-8 and Unicode FAQ for unix/linux,
http://www.cl.cam.ac.uk/~mgk25/unicode.html.
[KVM 05]
White Paper, Sun Microsystems, The K Virtual Machine (KVM),
http://java.sun.com/products/cldc/wp/.
[kXML1]
Stefan Haustein, kXML Project,
http://kxml.enhydra.org/software/downloads/index.html
[kXML2]
Stefan Haustein, kXML 2, http://www.kxml.org/
[Lai ]
Hongying Lai, A comparative survey of Java obfuscator,
http://www.cs.auckland.ac.nz/~cthombor/Students/hlai/hongying.pdf.
[libxml]
The XML C parser and toolkit of Gnome, libxml, http://xmlsoft.org/.
[Low ]
Douglas Low, Protecting Java Code Via Code Obfuscation,
http://www.cs.arizona.edu/~collberg/Research/Students/DouglasLow/obf
uscation.html.
[Marples 01]
Marples and Kriens, (2001). The Open Services Gateway Initiative: An
Introduction Overview. IEEE Communications Magazine, pages 110-
184
Contribución al análisis XML para la mejora en las prestaciones de memoria
114.
[Marroquín]
W. A. Marroquín, Ofuscadores (De la protección relativa del código
intermedio),
http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/art14
6.asp. Publicado originalmente por Universal Thread Magazine
(www.UTMag.com/Spanish).
[Megginson ]
David Megginson et al., SAX 2.0: The Simple API for XML,
http://www.saxproject.org.
[Microsoft's
Microsoft's XML Reader,
XML Reader]
http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpref/html/frlrfsystemxmlxmlreaderclasstopic.asp.
[NekoPull]
Andy Clark, CyberNeko Pull Parser
http://www.apache.org/~andyc/neko/doc/pull/
[OracleStAX]
Oracle StAX Pull Parser Preview
http://otn.oracle.com/tech/xml/xdk/staxpreview.html
[PullPatterns]
Aleksander Slominski, XML pull parsing patterns
http://www.extreme.indiana.edu/~aslom/xmlpull/patterns.html
[Rijndael]
AES algorithm (Rijndael) apecification.
http://csrc.nist.gov/CryptoToolkit/aes/rijndael/
[SAX]
http://www.saxproject.org/sax1-history.html
[APISAX20]
http://sourceforge.net/project/showfiles.php?group_id=29449
[SAXF]
SAX Filters. http://www.saxproject.org/?selected=filters
[Saxon]
Kay, Michael. Saxon XSLT processor. http://saxon.sourceforge.net/
[SaxonP]
Saxon preview mode.
http://saxon.sourceforge.net/saxon7.4/extensions.html#saxon:preview
Referencias.
185
[STX]
Streaming Transformations for XML. http://stx.sourceforge.net/
[Schematron]
The Schematron, An XML Structure Validaton Language using Patterns
in Trees, http://xml.ascc.net/resource/schematron/schematron.html.
[serialTOC ]
Java Object Serialization Specificationversion 1.5.0,
http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/serialTOC.ht
ml.
[Shirwaikar ]
Rohan Shirwaikar, SGML/XML Parser for FLORA-2
http://flora.sourceforge.net/docs/floraXML.pdf.
[Slomiski 04]
Aleksander Slomiski, On Using XML Pull Parsing Java APIs, 2004,
http://www.xmlpull.org/history/index.html
[Sosnoski 01]
Dennis M. Sosnoski, XML and Java technologies: Document models,
Part 1: Performance, 1 September 2001, http://www106.ibm.com/developerworks/xml/library/x-injava/.
[StAX javadoc]
https://stax-utils.dev.java.net/nonav/javadoc/api/overview-summary.html.
[Talens-Oliag]
Seguridad en Java. Talens-Oliag, Sergio.
http://www.uv.es/~sto/cursos/seguridad.java/html/sjava-1.html
[TD-SCDMA]
TD-SCDMA Standards, http://www.cwts.org.
[UDDI v3.0]
Luc Clement, Andrew htely, Claus von Riegen y Tony Rogers, Universal
Description, Discovery and Integration (UDDI) version 3.0.2,
http://uddi.org/pubs/uddi_v3.htm.
[StAXCodehaus] StAX RI at codehaus http://stax.codehaus.org/
[Xerces2]
Apache Foundation. Xerces Java Parser 2, http://xml.apache.org/xerces2j/
[XMLIO]
Paul T. Miller. XMLIO – An XML input/output library for C++
applications http://www.fxtech.com/xmlio/.
186
Contribución al análisis XML para la mejora en las prestaciones de memoria
[XmlPerf]
Aleksander Slominski, On Performance of Java XML Parsers
http://www.cs.indiana.edu/˜aslom/exxp/.
[XniPull]
XMLPullParserConfiguration described in http://xml.apache.org/xerces2j/xni-config.html
[XPP1]
Aleksander Slominski, XML Pull Parser Version 1 (XPP1)
http://www.extreme.indiana.edu/xgws/xsoap/xpp/xpp1/
[XPP2]
Aleksander Slominski, XML Pull Parser Version 2 (XPP2),
http://www.extreme.indiana.edu/xgws/xsoap/xpp/xpp2/
[XPP3]
Aleksander Slominski, MXP1: Xml Pull Parser 3rd Edition (XPP3),
http://www.extreme.indiana.edu/xgws/xsoap/xpp/mxp1/
[XSLTC]
XSLT Compiler. http://xml.apache.org/xalan-j/xsltc/
[TR550]
Aleksander Slominski, TR550: Design of a Pull and Push Parser System
for Streaming XML, http://www.cs.indiana.edu/cgibin/techreports/TRNNN.cgi?trnum=TR550
[XPP]
XML Pull Parsing,http://www.xmlpull.org/.
[Veillard]
Daniel Veillard, The XML C library for Gnome (libxml)
http://xmlsoft.org/
[WAP]
Wireless Application Protocol Specification,
http://www.wapforum.org/what/technical.htm.
[Wilmott a05]
Sam Wilmott, What’s all this About Different Kinds of XML Parsers?,
Poster at Montreal, Canada, Extreme Markup Languages 2005, Agosto
2005.
http://www.wilmott.ca/conferences/extreme2005/xmlparserposter.pdf.
[Wilmott b]
Sam Wilmott, AFL -- Another Fun Language
http://www.wilmott.ca/afl/index.html.
Referencias.
[Zhang 04a]
187
Jimmy Zhang, Improve XML Processing with VTD-XML,
http://www.intel.com/cd/ids/developer/asmo-na/eng/dc/code/211657.htm
[Zhang 04b]
Jimmy Zhang, Non-Extractive Parsing for XML, 2004.
http://www.xml.com/pub/a/2004/05/19/parsing.html.
188
Contribución al análisis XML para la mejora en las prestaciones de memoria
13. Otras recomendaciones XML
[Clark 01d]
James Clark, RELAX (Regular Language description for XML)
http://www.xml.gr.jp/relax/.
[Clark 01e]
James Clark. TREX - Tree Regular Expressions for XML. Thai Open
Source Software Center, 2001.
[cXML]
Commerce XML, http://www.cxml.org/.
[ebXML]
Electronic Business using eXtensible Markup Language,
http://www.ebxml.org/.
[WS-I ]
WS-I Basic Profile (WS-I BP) http://www.ws-i.org.
Referencias.
189
14. Otras recomendaciones y especificaciones
[3GPP, 02]
3GPP, Tech. Spec. Group, Svcs. and Sys. Aspects, General Packet Radio
Service (GPRS); Service Description, Tech. Spec. 3G TS 23.060 v. 5.4.0
(2002–12), 2002.
[3GPP, 02a]
3GPP2 C.S0002-C, Physical Layer Standard for cdma2000 Spread
Spectrum Systems, Rel. C v1.0, May 2002.
[3G TS 21.101,
3G TS 21.101 (2000). Digital cellular telecommunications system (Phase
2000]
2+) (GSM); Universal Mobile Telecommunications System (UMTS);
3rd Generation mobile system Release 1999 Specifications.
[3G TS 21.101,
3G TS 21.102 (2001). Universal Mobile Telecommunications System
2000]
(UMTS); 3rd Generation mobile system Release 4 Specifications.
[3G TS 21.102,
3G TS 21.102 (2002). Universal Mobile Telecommunications System
2002]
(UMTS); 3rd Generation mobile system Release 5 Specifications.
[3G TS 21.051,
3G TS 43.051 (2002). Digital cellular telecommunications system (Phase
2002]
2+); GSM/EDGE Radio Access Network (GERAN) overall description;
Stage 2.
[GSM 02.60,
GSM 02.60 (1997). Digital cellular telecommunications system (Phase
1997]
2+); General Packet Radio Service (GPRS); service description; Stage 1.
[ASCII]
ASCII - ANSI Standard X3.4; also the International Reference Version of
ISO/IEC 646 – 1993.
[Bluetooth v1.1,
Bluetooth v1.1 (2001). Specificationo of the Bluetooth System v.1.1.
2001]
http://www.bluetooth.com/dev/specifications.asp.
[CDMA2000]
3GPP2 www.3gpp2.org.
ECMA (European Computer Manufacturers Association) ECMAScript
[ECMAScript]
Language Specification. Available at
190
Contribución al análisis XML para la mejora en las prestaciones de memoria
http://www.ecma.ch/ecma1/STAND/ECMA-262.HTM
[IANA-
Internet Assigned Numbers Authority, Official Names for Character Sets,
CHARSETS]
ed. Keld Simonsen et al. (See http://www.iana.org/assignments/charactersets.)
[OMGIDL]
OMG (Object Management Group) IDL (Interface Definition Language)
defined in The Common Object Request Broker: Architecture and
Specification, version 2.3.1, October 1999. Available from
http://www.omg.org/
[SDP, 2001]
SDP (2001). Bluetooth Specification v1.1, Part E: Service Discovery
Protocol (SDP). http://www.bluetooth.com/dev/specifications.asp.
[UML]
Unified Modeling Language, http://www.uml.org/
Acrónimos
2G
Segunda Generación
3G
Tercera Generación
3GPP
3rd Generation Partnership Project
3GPP2
Third Generation Partnership Project
ANSI
American National Standards Institute
API
Application Program Interface
ASCII
American Standard Code for Information Interchange
ASN.1
Abstract Syntax Notation One
AWT
Abstract Windowing Toolkit
B2B
Business-to-Business
BMP
Basic Multilingual Plane
BNF
Backus Normal Form o Backus Naur Form
BOM
Byte Order Mark
CCITT
Comité Consultatif International Télégraphique et Téléphonique
CDC
Connected Device Configuration
CJK
Chinese, Japanese y Korean
CJKV
Chinese, Japanese, Korean, y Vietnamese
192
Contribución al análisis XML para la mejora en las prestaciones de memoria
CLDR
Common Locale Data Repository
CLDC
Connected Limited Device Configuration
COM
Component Object Model
CORBA
Common Object Request Broker Architecture
CRC
Cyclic Redundancy Check
CSS
Cascading Style Sheets
cXML
Commerce XML
DES
Data Encryption Standard
DOM
Document Object Mode
DSA
Digital Signature Algorithm
DSSSL
Document Style Semantics and Specification Language
DTD
Document Type Definition
EAI
Enterprise Application Integration
EBCDIC
Extended Binary-Coded Decimal Interchange Code
EDGE
Enhanced Data Rates for GSM Evolution
EPS
Encapsulated PostScript
EUC
Extended Unix Code
FCM
Free Cursor Mobility
FDF
Forms Data Format
FSA
Finite State Automata
Acrónimos.
FSS-UTF
File System Safe UCS Transformation Format
FTP
File Transfer Protocol
GFC
Generic Connection Framework
GPL
Gnu Public Licence
GPRS
General Packet Radio Service
GSM
Global System Mobile
GUI
Graphical User Interface
BMP
Basic Multilingual Plane
BOM
Byte Order Mark
GML
Generalized Markup Language
HTML
HyperText Markup Language
HTTP
Hypertext Transfer Protocol
HTTPS
Hypertext Transer Protocol Secure
IDL
Interface Definition Language
IIOP
Internet Inter-Orb Protocol
ITU
International Telecommunication Union
ITU-T
ITU Telecommunication Standardization Sector
ISO
International Standards Organization
J2EE
Java 2 Platform, Enteprise Edition
J2ME
Java 2 Platform, Micro Edition
193
194
Contribución al análisis XML para la mejora en las prestaciones de memoria
J2SE
Java 2 Platform, Standard Edition
JAD
Java Application Descriptor
JAR
Java Archive
JAXB
Java Architecture for XML Binding
JAXP
Java API for XML Processing
JCP
Java Community Process
JDBC
Java Data Base Connectivity
JDOM
Herramienta de análisis y salida Java, definida sobre la API DOM.
JSR
Java Specification Request
JUnit
Entorno de escritura y ejecución automatizada de pruebas.
JVM
Java Virtual Machine
JWTI
Java Technology for the Wireless Industry
JXME
JXTA for J2ME
JXTA
Juxtapose. Diferente al modelo Cliente/Servidor (peer to peer).
Java WSDP
Java Web Services Developer Pack
i18n
Internationalisation. (i + [18 letras] + n = i18n)
ISO
International Standards Organization
KVM
K Virtual Machine
l10n
Localization (l + [10 letras] + n = l10n)
LDML
Locale Data Markup Language
Acrónimos.
195
MathML
Mathematical Markup Language
MIDP
Mobile Information Device Profile
MIME
Multipurpose Internet Mail Extensions
MMAPI
Mobile Media API
OASIS
Organization for the Advancement of Structured Infromation Standards
ODA
Open Document Architecture
ORB
Object Request Broker
OTA
Over The Air
PBP
Personal Basis Profile
PDA
Personal Digital Assistant
PDF
Portable Document Format
RDF
Resource Description Framework
RELAX
Regular Language Description for XML
RELAX NG Lenguage de Schemas basado en TREX y RELAX
RFC
Request For Comments
RMI
Remote Method Invocation
RMS
Record Management System
RPC
Remote Call Procedure
SAAJ
SOAP with Attachments API for Java
196
Contribución al análisis XML para la mejora en las prestaciones de memoria
SAML
Security Assertion Markup Language
SATSA
Security and Trust Services API for J2ME
SAX
Simple API for XML
SCSI
Small Computer System Interface
SCSU
Standard Compression Scheme for Unicode
SDK
Software Development Kit
SGML
Standard Generalized Markup Language
SQL
Structured Query Language
SSL
Secure Sockets Layer
SVG
Scalable Vector Graphics
StAX
Streaming API for XML
SOA
Service-Oriented Architecture
StASOAP
Streaming API for SOAP
SOAP
Simple Object Access Protocol
StAX
Streaming API for XML
TCP
Transmission Control Protocol
TREX
Tree Regular Expressions for XML
UBL
Universal Business Language
UCA
Unicode Collation Algorithm
UCS
Universal Multiple-Octet Coded Character Set
Acrónimos.
UDDI
Universal Description, Discovery, and Integration
UDP
User Datagram Protocol
UML
Unified Modeling Language
UMTS
Universal Mobile telecommunications System
URI
Uniform Resource Identifier
URL
Uniform Resource Locator
URN
Uniform Resource Name
UTF
UCS Transformation Format
VRML
Virtual Reality Modeling Language
XHTML
Extensible HyperText Markup Language
XACML
eXtensible Access Control Markup Language
Xlink
XML Linking Language
XML
eXtensible Markup Language
XPath
XML Path Language
XPointer
XML Pointer Language
XQuery
XML Query Language
XSD
XML Schema Definition
XSL
Extensible Stylesheet Language
XSLT
XSL Transformation
197
198
Contribución al análisis XML para la mejora en las prestaciones de memoria
W3C
World Wide Web Consortium
WAP
Wireless Application Protocol
WCDMA
Wideband Code Division Multiple Access
WMA
Wireless Messaging API
WML
Wireless Markup Language
WSDL
Web Sevices Description Language
WTK
Wireless Toolkit