• No se han encontrado resultados

Procesamiento de archivos XML (Parte 1)

N/A
N/A
Protected

Academic year: 2021

Share "Procesamiento de archivos XML (Parte 1)"

Copied!
10
0
0

Texto completo

(1)

1

1

Rubby Casallas

Departamento de Ingeniería de Sistemas Universidad de los Andes

Rubby Casallas G.

Departamento de Ingeniería de Sistemas Universidad de los Andes

2

Arquitectura de Software

Referencias

Esta presentación es un breve resumen de XML y no

pretende ser exhaustiva. Para más información por favor consultar las siguientes referencias:

– http://www.xml.com/axml/testaxml.htm: especificación 1.0 de XML comentada.

– http://java.sun.com/webservices/docs/ea2/tutorial/doc/J AXPIntro.html: tutorial de JAXP

http://www.javaworld.com/javaworld/jw-05-2002/jw-0517-sax.html: generación de parsers sax

(2)

Rubby Casallas G.

Departamento de Ingeniería de Sistemas

Universidad de los Andes 3

Agenda

1. SAX 2. XSLT 3. DOM Arquitectura de Software

Procesamiento de documentos XML

Parser dirigidos por eventos: SAX

Parser dirigidos por la estuctura: DOMLenguajes de transformación DSSSL, XSL

(3)

3

Rubby Casallas G.

Departamento de Ingeniería de Sistemas

Universidad de los Andes 5

Simple API for XML: SAX

SAX no es un Parser es una interface estándar basada en

eventos para hacer parser de documentos XML

Es una interface común implementada por varios parsersUn parser SAX requiere poca memoria porque no construye

una representación interna del archivo XML

Rubby Casallas G.

Departamento de Ingeniería de Sistemas Universidad de los Andes

6

Arquitectura de Software

Simple API for XML: SAX

Es una interface programable de un parser de documentos

XML basado en eventos.

A medida que el parser encuentra un elemento, en el archivo XML, lo va reportando.

Quiere decir que el parser no guarda en memoria ninguna representación del documento (contrario a DOM)

Los eventos que se reportan a la aplicación son: – start Element

– start Document – end Element

(4)

Rubby Casallas G.

Departamento de Ingeniería de Sistemas

Universidad de los Andes 7

<?xml version="1.0"?> <nombreCompleto>

<apellido>Casallas</apellido> <nombre>Rubby</nombre>

</nombreCompleto>

Events

–start document

–start element: nombreCompleto –start element: apellidocharacters: Casallas

–end element: apellido

–start element: nombrecharacters: Rubby

–end element: nombre

–end element: nombreCompleto –end document

Arquitectura de Software

Simple API for XML: SAX

La aplicación debe implementar manejadores de los

eventos

La aplicación debe crear un(s) objeto de una clase que implemente la interface para manejar eventos.

Este objeto se registra con el parser y, de acuerdo con los eventos que el parser genere, se invocan los métodos de procesamiento que se definieron en la aplicación.

Por ejemplo: Evento

– start document se invoca el método startDocument(...) sobre el objeto que está registrado!

(5)

5

Rubby Casallas G.

Departamento de Ingeniería de Sistemas

Universidad de los Andes 9

JAXP

JAXP es la interface programable para procesar XML desde

java

Permite programar usando SAX, DOM y XSLTEl paquete principal es: javax.xml.parsers package. Provee dos clases para crear parsers (independientes del

proveedor):

– SAXParserFactory – DocumentBuilderFactory

Esto permite cambiar la implementación del parser de XML sin cambiar el código de la aplicación.

Rubby Casallas G.

Departamento de Ingeniería de Sistemas Universidad de los Andes

10

Arquitectura de Software

Interfaces de SAX

ContentHandler: declara los métodos:

– startDocument, endDocument, startElement,

endElement (estos son invocados cuando un tag xml es encontrado)

– characters es invocado cuando el parser encuentra un texto en un elemento xml

– processingInstruction cuando encuentra una instrucción de procesamiento

(6)

Rubby Casallas G.

Departamento de Ingeniería de Sistemas

Universidad de los Andes 11

Interfaces de SAX

ErrorHandler

– los métodos: error, fatalError y warning son invocados en respuesta a varios tipos de error en el parser

– Por defecto se dispara una excepción para errores fatales y se ignoran otros errores incluyecdo los de validación.

– Para manejar los errores, de acuerdo con alguna

política de la aplicaión, se debe suministrar al parser un manejador de errores propio.

Arquitectura de Software

Interfaces de SAX

DTDHandler

– Se usa cuando se procesa un DTD para reconocer y manipular declaraciones de una entidad unparsed. Por ejemplo:

<!ENTITY mom-picture SYSTEM "http://www.home.com/mom.jpg" NDATA JPEG>

(7)

7

Rubby Casallas G.

Departamento de Ingeniería de Sistemas

Universidad de los Andes 13

Interfaces de SAX

EntityResolver

– Tiene un método para localizar entidades dado un URI

Rubby Casallas G.

Departamento de Ingeniería de Sistemas Universidad de los Andes

14

Arquitectura de Software

Creación de un objeto parser

Se tiene que tener un objeto fábrica que cree el objeto

parser.

Para tener el objeto fábrica apropiado (dependiendo del parser que se desee usar: xalan, xt, o el que viene por defecto con la implementación java) se invoca:

// Use the default (non-validating) parser SAXParserFactory factory =

SAXParserFactory.newInstance();Para resolver cuál tipo de parser crear, se usa, en

primer lugar, la configuración que esté definida en: javax.xml.parsers.SAXParserFactory system property

(8)

Rubby Casallas G.

Departamento de Ingeniería de Sistemas

Universidad de los Andes 15

Creación de un objeto parser (2)

Sobre el objeto factoria, se invoca la creación de un parser de

tipo SAX:

parser SAXParserFactory factory =

SAXParserFactory.newInstance(); try {

SAXParser saxParser = factory.newSAXParser(); ...

} catch (Throwable t) { t.printStackTrace(); }

Arquitectura de Software

Asociación de un manejador de eventos al

parser.

Al parser creado se le asocia una referencia a un objeto que

manejará los eventos:

parser SAXParserFactory factory =

SAXParserFactory.newInstance(); try {

SAXParser saxParser = factory.newSAXParser(); saxParser.parse( new File(argv[0]), handler);

} catch (Throwable t) { t.printStackTrace(); }

(9)

9

Rubby Casallas G.

Departamento de Ingeniería de Sistemas

Universidad de los Andes 17

Asociación de un manejador de eventos al

parser (cont.)

La referencia al manejador de eventos puede asociarse al

parser y cambiarse en cualquier momento. parser SAXParserFactory factory =

SAXParserFactory.newInstance(); try {

SAXParser saxParser = factory.newSAXParser();

saxParser.getXMLReader().setContentHandler (handler);

saxParser.parse( new File(argv[0])); } catch (Throwable t) {

t.printStackTrace();

} Se le está indicando al parser cuál es la referencia que va a manejar

los eventos

Rubby Casallas G.

Departamento de Ingeniería de Sistemas Universidad de los Andes

18

Arquitectura de Software

El (los) manejador(es) de eventos

public class DefaultHandler

extends java.lang.Object

implements EntityResolver, DTDHandler, ContentHandler,

ErrorHandler

Contiene implementaciones por defecto para todos los métodos de las interfaces SAX.

Se debe extender esta clase para sobre cargar los métodos que se necesiten:

(10)

Rubby Casallas G.

Departamento de Ingeniería de Sistemas

Universidad de los Andes 19

public class Echo extends DefaultHandler {

public void startElement(...) throws SAXException {

... }

public void endElement(...) throws SAXException {

... }

... // otros métodos que se necesite sobrecargar }

Arquitectura de Software

public void startElement(java.lang.String uri, java.lang.String localName, java.lang.String qName, Attributes attributes) throws SAXException { if (qName.equals (“courseInfo")) { String id = attributes.getValue(“id"); String header = “Curso: "+id;

System.out.println (header); System.out.println (); }

Referencias

Documento similar

The 'On-boarding of users to Substance, Product, Organisation and Referentials (SPOR) data services' document must be considered the reference guidance, as this document includes the

In medicinal products containing more than one manufactured item (e.g., contraceptive having different strengths and fixed dose combination as part of the same medicinal

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in

This section provides guidance with examples on encoding medicinal product packaging information, together with the relationship between Pack Size, Package Item (container)

Package Item (Container) Type : Vial (100000073563) Quantity Operator: equal to (100000000049) Package Item (Container) Quantity : 1 Material : Glass type I (200000003204)

b) El Tribunal Constitucional se encuadra dentro de una organiza- ción jurídico constitucional que asume la supremacía de los dere- chos fundamentales y que reconoce la separación

&#34;No porque las dos, que vinieron de Valencia, no merecieran ese favor, pues eran entrambas de tan grande espíritu […] La razón porque no vió Coronas para ellas, sería