Anda di halaman 1dari 3

# 0373.

05
...
### 6.1.3. Aplicando hojas de estilo XSLT
Existen muchas estrategias para realizar una transformacion dependiendo de
nuestras necesidades. Si queremos transformar documentos para uso propio,
podemos ejecutar un programa como XT para transformarlo en nuestro sistema
local. Con documentos web, la transformacion se realizar o bien en el servidor
o en el cliente. Algunos servidores web pueden detectar una hoja de estilo y
transformar el documento tan pronto como es servido. Otra posibilidad es
enviar el documento original al cliente y realizar la transformacion.
Internet Explorer 5.0 fue el primer navegador web en implementar XSLT,
abriendo la puerta a este procedimiento. El metodo a elegir depende de varios
factores como la frecuencia con la que la informacion cambia, que tipo de
carga puede aguantar el servidor, o si existe algun beneficio de darle al
usuario el documento original.
Si la transformacion se realiza via servidor o cliente, tenemos que incluir la
referencia a la hoja de estilo en el documento como una instruccion de
procesado, similar a la que usamos para asociar documentos con las hojas de
estilo CSS.
<?xml-stylesheet type="text/xml" href="mytrans.xsl"?>
El atributo *type* es un tipo MIME. El valor *text/xml* cumple, aunque se
podria cambiar a alguno distinto en el futuro, como *text/xslt*. El atributo
*href* referencia el destino donde se encuentra la hoja de estilo.
## 5.6. Herramientas de procesamiento
### 5.6.1. SAX (Simple Application Programming Interface for XML)
Desde el lanzamiento de XML, muchos productos XML han aparecido, desde
validadores a editores... Todos estos productos comparten ciertos rasgos:
trabajan con archivos, analizan XML, y se encargan del marcado XML. Por ello,
existia la necesidad de crear una API para XML.
Una API es la base para escribir programas al encargarse de procesos a nivel
bajo, de tal forma que podemos concentrarnos en lo importante de nuestra
aplicacion. Una API para XML se encarga de cosas como lectura de archivos,
analisis y dirigir datos a los manejadores de eventos, mientras nosotros
escribimos rutinas de manejo de eventos.
SAX (Simple API for XML) es un intento de definir una API estandar para XML
basada en eventos.

SAX esta basado alrededor del modelo dirigido a eventos, usando call-backs
para manejar el procesado. No existe representacion de arbol, asi el procesado
se da de una sola pasado a traves del documento. Podemos pensar como si se
tratara de una *acceso en serie* para XML: el programa no puede saltar a
sitios aleatorios en el documento. Por un lado, perdemos la flexibilidad de
trabajar con una representacion persistente en memoria, lo que limita las
tareas que podemos manejar. Y por otro lado, conseguimos una velocidad
tremenda y el uso de muy poca memoria.
La gran velocidad de SAX lo hace ideal para el procesado de XML en el lado del
servidor, para por ejemplo traducir documentos XML a HTML para poder ser
vistos en navegadores web tradicionales. Un programa dirigido a eventos puede
tambien:
- Buscar un documento para encontrar un elemento que contiene una palabra
clave en su contenido.
- Imprimir contenido formateado en el orden en el que aparece.
- Modificar un documento XML haciendo pequenos cambios, tal como solucionando
errores gramaticales o renombrando elementos.
- Leer en los datos para construir una representacion interna o una estructura
de datos compleja. En otras palabras, la API puede ser usada como una base
para API mas complejas como DOM.
Sin embargo, el bajo consumo de memoria es un lastre, ya que SAX se olvida de
los eventos tan pronto como los genera.
Algunas cosas que un programa dirigido a eventos no puede hacer facilmente:
- Reordenar los elementos en un documento.
- Resolver referencias cruzadas entre elementos.
- Verificar los enlaces ID-IDREF.
- Validar un documento XML.
A pesar de sus limitaciones, la API basada en eventos es una herramienta
poderosa para procesar documentos XML. Para aclarar lo que es un evento,
miremos el siguiente ejemplo:
**Ejemplo**.
Consideremos el siguiento documento:
<?xml version="1.0"?>
<record id="44456">
<name>Bart Albee</name>
<title>Scrivenger</title>
</record>
Una interface dirigida a eventos analiza el archivo una vez y reporta estos
eventos en una secuencia lineal:
1. encontrado elemento de apertura: record
2. encontrado atributo: id = "44456"
3. encontrado elemento de apertura: name
4. encontrado texto
5. encontrado elemento de cierre: name
6. encontrado elemento de apertura: title
7. encontrado texto
8. encontrado elemento de cierre: title
9. encontrado elemento de cierre: record.
Mientras cada evento se produce, el programa llama al manejador de evento
apropiado. Los manejadores de eventos trabajan como las funciones de una
interfaz grafica. En el caso de SAX, cada manejar de evento procesa un evento
como el comienzo de un elemento o la aparicion de una instruccion de
procesado.
En Java, el objeto *ParserFactory* crea un marco alrededor del analizador de
eleccion (SAX nos permite usar el analizador Java para XML favorito como XP,
Xerces o JAXP). Analiza el documento y llama a las interfaces: Document
Handler (se encarga del documento), Entity Resolver (resuelve las entidades),
DTD Handler (se encarga del documento DTD) y Error Handler (se encarga de los
errores). En Java, una interfaz es una coleccion de rutinas o metodos en una
clase. La interfaz de Document Handler es donde ponemos el codigo de nuestro
programa. Dentro del Document Handler, debemos implementar metodos que manejen
elementos, atributos, y todos los demas eventos que llegan del analisis del
documento XML.
Una interfaz evento puede ser usada para construir una API basado en arbol,
como DOM.
#### Procesado basado en arbol
Cuando una pasada o dos a traves del documento no son suficientes para nuestro
programa, tal vez necesitemos construir una representacion de arbol del
documento para mantenerla en memoria hasta que el procesado haya terminado. Si
el procesado basado en eventos representa una acceso en serie a XML, entonces
el procesado basado en arbol representa un acceso aleatorio. Nuestro programa
puede saltar de un punto a otro en el documento, ya que se libera de la manera
de acceso lineal y en una sola pasada.

Anda mungkin juga menyukai