Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y...

54
Eficiencia en el análisis Eficiencia en el análisis de documentos XML: de documentos XML: comportamiento en memoria. comportamiento en memoria. Departamento de Sistemas y Automática, Área de Departamento de Sistemas y Automática, Área de Telemática Telemática Universidad de Sevilla. Universidad de Sevilla. Antonio J. Sierra Antonio J. Sierra 1ª Conferencia Ibérica 1ª Conferencia Ibérica de Sistemas y Tecnologías de la Información, de Sistemas y Tecnologías de la Información, CISTI 2006 Esposende, Portugal CISTI 2006 Esposende, Portugal Junio 2006. Junio 2006.

Transcript of Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y...

Page 1: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

Eficiencia en el análisis de Eficiencia en el análisis de documentos XML: documentos XML:

comportamiento en memoria.comportamiento en memoria.

Departamento de Sistemas y Automática, Área de TelemáticaDepartamento de Sistemas y Automática, Área de TelemáticaUniversidad de Sevilla.Universidad de Sevilla.

Antonio J. SierraAntonio J. Sierra

1ª Conferencia Ibérica 1ª Conferencia Ibérica

de Sistemas y Tecnologías de la Información,de Sistemas y Tecnologías de la Información,

CISTI 2006 Esposende, Portugal CISTI 2006 Esposende, Portugal Junio 2006.Junio 2006.

Page 2: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

ÍndiceÍndicePanorámicaIntroducciónModelos de análisisImplementacionesValidaciónConclusiones

Page 3: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Como?Como? Donde?Donde? Porqué?Porqué?Qué?Qué?

PanorámicaPanorámica

Ficheros conFicheros conestructurasestructuras J2SEJ2SE ValidaciónValidación

del modelodel modeloMedidasMedidas

(Resultados)(Resultados)

Page 4: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

IntroductionIntroduction

• FrameworkFramework • FundamentalsFundamentals • BasicsBasics

Page 5: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

ContextoContexto

J2ME

Wireless accesto network

Internet

Web Service XML

SOAP/XML

Page 6: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

KVMKVM

Dispositivo inalámbricoSistema Operativo Nativo

CLDC 1.0 (o 1.1)

Conjunto de MIDletAplicaciones OEM

MIDP2.0 JS

R-1

20 W

MA

JSR

-135

MM

API

Paqu

etes

opci

onal

es

Cla

ses

OEM

Nav

egad

or N

ativ

o

AM

S/O

TA N

ativ

o

Apl

icac

ione

s Nat

ivas

Apl

icac

ione

s OEM

Nat

ivas

Page 7: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Fundamentals: Fundamentals: techniques XML parsingtechniques XML parsing

DescriptionTechnique

FCM

Tree-based XML parser memory and CPU intensiveEach node a piece of data keeps the whole data in memory. A DOM parser returns a “tree” representation of the XML document.

DOM

Push(SAX)

Pull (StAX)

Event-based XML parser.Reports parsing events directly to the application.Provides a serial-access mechanism for accessing XML docum.Faster and consume less CPUA Push parser calls client’s methods with XML events.A Pull parser returns XML events to a client on request.In-situ XML parsers, as much as possible, indicate where data was found in the parsed XML document.(Data-copying XML parsers copy all the information in the parsed XML document into objects, returned to the client)

Page 8: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

<?xml version="1.0" ?><catalogo> <!-- Ejemplo --> <libro id="101"> <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>

InformaciónInformacióndatosdatos

Page 9: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

metametainformacióninformaciónmetametadatosdatos

<?xml version="1.0" ?><catalogo> <!-- Ejemplo --> <libro id="101"> <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>

Page 10: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Sam WilmottSam Wilmott

• La forma en la que los datos son devueltos La forma en la que los datos son devueltos (API)(API)

• Qué información es devuelta al clienteQué información es devuelta al cliente• La relación entre el analizador y el cliente La relación entre el analizador y el cliente

(Productor/Consumidor)(Productor/Consumidor)

Page 11: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Sperberg-McqueenSperberg-Mcqueen

• Como un flujo de caracteres Como un flujo de caracteres • Como una secuencia de caracteres de datos mezclado con Como una secuencia de caracteres de datos mezclado con

marcasmarcas• Como un árbol en su forma obviaComo un árbol en su forma obvia• Como un grafo con enlaces entre nodos Como un grafo con enlaces entre nodos

• Definidos por relaciones entre padre-hijo y los elementos XML, Definidos por relaciones entre padre-hijo y los elementos XML, por enlaces ID/IDREF, o por métodos de aplicación específicas por enlaces ID/IDREF, o por métodos de aplicación específicas entre elementos)entre elementos)

• Como un árbol o grafo con información del tipo de datos y Como un árbol o grafo con información del tipo de datos y validezvalidez

• Como una instancia de la estructura de datos de una Como una instancia de la estructura de datos de una aplicaciónaplicación

Page 12: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

<?xml version="1.0" ?><catalogo> <!-- Ejemplo --> <libro id="101"> <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>

Ejemplo (II) , Ejemplo (II) ,

catalogo

libro

Comentario: Ejemplo

id:101

id:121

autor: “M. Kay ”

precio: “19.95 ”

titulo:“XSLT Programmers’s Ref.”libro

autor:“C.F. Golfarb,P. Prescod ”

precio: “39.95 ”

titulo: “The XML handbook”

Reglas: – jerarquía, Reglas: – jerarquía, – – unicidad, unicidad,

– – entrelazado, entrelazado, … …

Page 13: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Ejemplo (y III)Ejemplo (y III)

Document

DocumentTypenull

Elementcatalogo

Elementlibro

Elementlibro

Text“”

Comments“Ejemplo”

Attr“101”

Elementautor

Elementprecio

Elementtitulo

Attr“121”

Elementautor

Elementprecio

Elementtitulo

Text“M. Kay ”

Text“19.95 ”

Text“XSLT Programmers’s Ref.”

Text“C.F. Golfarb,P. Prescod ”

Text“39.95 ”

Text“The XML handbook”

catalogo

libro

Comentario: Ejemplo

id:101

id:121

autor: “M. Kay ”

precio: “19.95 ”

titulo:“XSLT Programmers’s Ref.”libro

autor:“C.F. Golfarb,P. Prescod ”

precio: “39.95 ”

titulo: “The XML handbook”

<?xml version="1.0" ?><catalogo> <!-- Ejemplo --> <libro id="101"> <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>

Page 14: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

DOM DOM (Document Object Model)(Document Object Model)

• W3C (W3C (The World Wide Web ConsortiumThe World Wide Web Consortium))• What is the Document Object Model?What is the Document Object Model?• The Document Object Model is a platform- and language-neutral interface that The Document Object Model is a platform- and language-neutral interface that

will allow programs and scripts to dynamically access and update the content, will allow programs and scripts to dynamically access and update the content, structure and style of documents. The document can be further processed and structure and style of documents. The document can be further processed and the results of that processing can be incorporated back into the presented page. the results of that processing can be incorporated back into the presented page. This is an overview of DOM-related materials here at W3C and around the web. This is an overview of DOM-related materials here at W3C and around the web.

• Why the Document Object Model?Why the Document Object Model?• "Dynamic HTML" is a term used by some vendors to describe the combination "Dynamic HTML" is a term used by some vendors to describe the combination

of HTML, style sheets and scripts that allows documents to be animated. The of HTML, style sheets and scripts that allows documents to be animated. The W3C has received several submissions from members companies on the way in W3C has received several submissions from members companies on the way in which the object model of HTML documents should be exposed to scripts. which the object model of HTML documents should be exposed to scripts. These submissions do not propose any new HTML tags or style sheet These submissions do not propose any new HTML tags or style sheet technology. The W3C DOM Activity is working hard to make sure technology. The W3C DOM Activity is working hard to make sure interoperable and scripting-language neutral solutions are agreed upon. interoperable and scripting-language neutral solutions are agreed upon.

Page 15: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Funcionamiento de la API DOMFuncionamiento de la API DOM

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()); }}

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()); }}

Document document = builder.parse("libros.xml");

Page 16: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

SAX & DOMSAX & DOM

AnalizadorSAX

DOM

Object

Object

Object Object

Object

Document

Handler

Error

Handler

DTD Event

HandlerEntity

Resolver

Page 17: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Funcionamiento de SAX (y II)Funcionamiento de SAX (y II)

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); }}

parser = factory.newSAXParser(); parser.parse(new FileInputStream("libros.xml"),handler);

Page 18: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Funcionamiento de SAX (I)Funcionamiento de SAX (I)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)); } }

}

public void endElement(String uri, String localName, String qName) { if(qName.equals("titulo")) isTitle = false; }

public void startElement(String uri, String localName, String qName, Attributes atts) { if (qName.equals("titulo")) isTitle = true; }

public void characters(char[ ] chars, int start, int length) { if(isTitle){ System.out.println("El titulo del libro es: " + new String(chars, start, length)); } }

Page 19: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

PullPull

• Inicialmente envolvente a SAX al estilo Inicialmente envolvente a SAX al estilo iteradoriterador

• Pull iteradorPull iterador• Pull cursorPull cursor

Page 20: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Pull iteradorPull iteradorXMLInputFactory 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; }}

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; }

Page 21: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Pull-cursorPull-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; } }

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; }

Page 22: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Taxonomía de las APIs XMLTaxonomía de las APIs XML

DOM

JDOM DOM4J

Árboles

Eventos

SAX

Push

Pull

XPP2

NekoPull

XPP1

XmlPull(XNI2XmlPull,

kXML2,XPP3)

StAX

BEA

kXML1Iterador

Curso

r

Mez

cla

Page 23: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Temporización de las APIsTemporización de las APIs

1998 1999 2000 2001 2002 2004

Push

Pull

IteradorCursor

SAX1Ælfred SAX2

XPP1

kXML1XPwww.trantor.de/xml/

2003

NekoPull

BEA StAX

XmlPull1:kXML2XPP3

2005

Page 24: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

Nuevo modeloNuevo modelo

Page 25: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

FCM: Free Cursor MobilityFCM: Free Cursor Mobility

• Event-based (vs tree-based)Event-based (vs tree-based)• Serial-access mechanism for accessing Serial-access mechanism for accessing

XML dataXML data• Mantain a serialized representation (vs tree)Mantain a serialized representation (vs tree)• Cursor: go back to early position/leap ahead Cursor: go back to early position/leap ahead • Pull-everythingPull-everything• In-situ XML parser (vs data copying)In-situ XML parser (vs data copying)

Page 26: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Nuevos métodosNuevos métodos

• public void setCursorToPreviousSibling()public void setCursorToPreviousSibling(), , • configura el cursor al hermano previo de un configura el cursor al hermano previo de un

elementoelemento• public void setCursorToParent()public void setCursorToParent(), ,

• configura el cursor al padre de un elemento, si configura el cursor al padre de un elemento, si lo tuvieralo tuviera

• public void setCursorToRoot()public void setCursorToRoot(), , • configura el cursor al nodo raíz.configura el cursor al nodo raíz.

public void setCursorToPreviousSibling()public void setCursorToPreviousSibling()

public void setCursorToParent()public void setCursorToParent()

public void setCursorToRoot()public void setCursorToRoot()

Page 27: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Nuevos métodosNuevos métodos

• • devuelve un valor cierto (devuelve un valor cierto (truetrue) si el elemento en el cual está en un ) si el elemento en el cual está en un

determinado momento tiene hermano previo.determinado momento tiene hermano previo.

• configura el cursor al padre de un elemento, si lo tuvieraconfigura el cursor al padre de un elemento, si lo tuviera

• saltar subsecciones del documento XML. Este método sitúa el cursor saltar subsecciones del documento XML. Este método sitúa el cursor al final de un elemento, saltando todos los hijos que pudiera tener. al final de un elemento, saltando todos los hijos que pudiera tener. Este método presenta unas características excelentes en cuanto a que Este método presenta unas características excelentes en cuanto a que no instancia objetos, por lo que no consume memoria. no instancia objetos, por lo que no consume memoria.

public boolean hasPreviousSibling()public boolean hasPreviousSibling()

public boolean hasParent()public boolean hasParent()

public void skipWithoutParseChilds()public void skipWithoutParseChilds()

Page 28: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Funcionamiento de FCMFuncionamiento de FCMInputStream 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; }}

case XMLFCMConstants.START_ELEMENT: if((r.getLocalName()).equals("titulo")) isTitle = true; break;

case XMLFCMConstants.END_ELEMENT: if((r.getLocalName()).equals("titulo")) isTitle = false; break; }

case XMLFCMConstants.CHARACTERS: if(isTitle) System.out.println( "El titulo del libro es:" +r.getText()); break;

Page 29: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Funcionamiento de FCMFuncionamiento de FCMboolean 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; } } }}

in.hasPreviousSibling()

in.skipWithoutParseChilds();

in.setCursorToPreviousSibling();

Page 30: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

libros.xml

MiManejador

isTitle = true Imprime el títuloisTitle = false

Analizador SAXstartElement “titulo”charactersendElement “titulo”

Lee datos directamente Coloca los eventos

libros.xml

Aplicación

next()next()Imprime titulonext()

Analizador Pull

START_ELEMENT “titulo”CHARACTERSEND_ELEMENT “titulo”

Lectura bajo petición Pide el evento

libros.xml

Aplicación

next()next()Imprime titulonext()

Analizador FCM

START_ELEMENT“titulo”CHARACTERSEND_ELEMENT “titulo”

Lectura bajo peticiónMovimiento del cursor Pide el evento

Page 31: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Productor/ConsumidorProductor/Consumidor

datosXML

analizador

Árbol DOMnodo Document

Node Raíz Node hijo Texto

Node hijo Texto

lectura/escrituraaplicación

Productor

datosXML

analizador

void endDocument ()

Consumidor

void endElement (String uri, String lNam, String qName) void startElement(String uri, String localNam, String qName, Attributes attrs)

void startDocument ()

void characters(char buf [], int offset, int len)aplicación

Productor

datosXML

analizador

true

Consumidor

START_DOCUMENT / START_ELEMENT, ...

boolean hasNext ()

int next()aplicación

Mueve el cursor adelante o atrás

Productor

datosXML

analizador

true

Consumidor

START_DOCUMENT / START_ELEMENT, ...

boolean hasNext ()boolean hasPreviousSibling ()

int next()void skipWithoutParsingChilds()

aplicación

Page 32: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

ImplementationImplementation

Page 33: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Movimiento del cursorMovimiento del cursor

analizador

aplicación

eventosMétodosdel analizador

<?xml version=“1.0” ?><root> <lovers> <el>Romero</el> <conj>and</conj> <ella>Julieta</ ella > </lovers> <sentence> Enamorados </sentence></root>

<el>Romeo</el><conj>and</conj><ella>Julieta<

next()skiptWithoutParsingChilds()

setCursorToParent()setCursorToPreviousSibling()

Page 34: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Implementando “well-formed”Implementando “well-formed”

<root><lovers><el>Romeo</el><conj>y</conj><ella>Julieta<

Analizador

String[]...

RepresentaciónSerializada

conj

cursor

conjloversroot

<root><lovers><el>Romeo</el><conj>y</conj><ella>Julieta<

Analizador

Object[]Representación Serializada cursor

Page 35: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Implementando “well-formed”Implementando “well-formed”

<root><lovers><el>Romeo</el><conj>y</conj><ella>Julieta<

Analizador

cursor

Page 36: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Implementando “well-formed”Implementando “well-formed”

padre…

hijo

hermano

element

Referencia al hijo de este elementoReferencia al padre de este elementoReferencia al hermano de este elementoCursor de este elemento

Otra información (Optional)

Page 37: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

\---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

\---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

Clases de la Clases de la implementaciónimplementación

Page 38: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

XMLFCMConstants.START_ELEMENT XMLFCMConstants.START_DOCUMENT XMLFCMConstants.END_ELEMENT XMLFCMConstants.PROCESSING_INSTRUCTION XMLFCMConstants.CHARACTERS XMLFCMConstants.SPACE XMLFCMConstants.END_DOCUMENT XMLFCMConstants.ATTRIBUTE XMLFCMConstants.DTD XMLFCMConstants.CDATA XMLFCMConstants.NAMESPACE

Interfaz Interfaz XMLFCMConstants

Page 39: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

<<interface>>Location

+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>>XMLFCMConstants

QName

<<interface>>NamespaceContext

+getNamespaceURI()+getPrefix () +getPrefixes()

<<interface>>XMLConstants

XMLFCMException

XMLFCMReader

+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()

XMLFCMWriter

Page 40: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

ValidationValidation

Page 41: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Funcionamiento de FCMFuncionamiento de FCM

Page 42: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Xparse-J 1.0Size 1728 Bytes

Model

TAMparserSize 1728 Bytes

Push

kxml2Size 1728 Bytes

Pull

Size 1728 Bytes

FCM

Page 43: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

0

50000

100000

150000

200000

250000

300000

350000

400000

450000

500000

kXML FCM TAMparser Xparse-J

Byte

s1728 bytes

kXML FCM TAMparser Xparse-J 44 300 bytes 47 032 bytes 116 384 bytes 280 464 bytes

Page 44: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Size 24458 Bytes

FCM

kxml2Size 24458 Bytes

Pull

TAMparserSize 24458 Bytes

Push

Page 45: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

0

50000

100000

150000

200000

250000

300000

350000

400000

450000

500000

kXML FCM TAM Xparser-J

Byte

s

24458 bytes

kXML FCM TAMparser Xparse-J 239 140 bytes 352 204 bytes XXXX XXXX

Page 46: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Codificación soportada Codificación soportada

ASCII

Si

UTF-8

No

UTF-16BE

No

UTF-16LE

No

UCS-4

No kXML

Si Si Si Si Si FCM

Si Si No No No TAMparser

Si Si No No No Xparse-J

Page 47: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Sobre J2SESobre J2SE

0

50000

100000

150000

200000

250000

300000

FCM Push DOM Pull-Iterador Pull-Cursor

byte

sFCM Push DOM StAX-Iter.

79552 bytes 83784 bytes 95400 bytes 102704 bytes

StAX-Curs.

248136 bytes

Page 48: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Profundidad del archivoProfundidad del archivoNombre del fichero Tamaño en byteprueba0.xml 35prueba1.xml 226prueba2.xml 6.312prueba3.xml 199.650

Para prueba0.xml:Para prueba0.xml:

Para prueba1.xml:

Para prueba2.xml:

Para prueba3.xml:

FCM Push DOM StAX-Iter.

69576 bytes 80848 bytes 88464 bytes 86880 bytes

StAX-Curs.

246552 bytes

FCM Push DOM StAX-Iter.

364968 bytes 219584 bytes X 1121272 bytes

StAX-Curs.

1068456 bytes

FCM Push DOM StAX-Iter.

69952 bytes 83008 bytes 92760 bytes 93704 bytes

StAX-Curs.

249704 bytes

FCM Push DOM StAX-Iter.

82128 bytes 137104 bytes X 288912 bytes

StAX-Curs.

352976 bytes

<a> <b> <c> ... </c> </b></a>

Page 49: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

050000

100000150000

200000250000300000

FCM Push DOM Pull-Iter Pull-Cursor

byte

sprueba0.xml: prueba1.xml:

prueba2.xml: prueba3.xml:

050000

100000150000

200000250000300000

FCM Push DOM Pull-Iter Pull-Cursor

byte

s0

100000

200000

300000

400000

500000

FCM Push DOM Pull-Iter Pull-Cursor

byte

s

0200000400000600000

80000010000001200000

FCM Push DOM Pull-Iter Pull-Cursor

byte

s

Page 50: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Número de atributosNúmero de atributos Nombre del fichero Tamaño en byte

atributos0.xml 43atributos1.xml 207atributos2.xml 5.617atributos3.xml 181.379

Para atributos0 .xml:

Para atributos1.xml:

Para atributos2.xml:

Para atributos3.xml:

<elemento nombre1=“valor1”nombre2=“valor2”... >

FCM Push DOM StAX-Iter.

69592 bytes 80944 bytes 88624 bytes 87080 bytes

StAX-Curs.

246624 bytes

FCM Push DOM StAX-Iter.

328424 bytes X 1079544 bytes 1038288 bytes

StAX-Curs.

X

FCM Push DOM StAX-Iter.

69920 bytes 87800 bytes 97160 bytes 104600 bytes

StAX-Curs.

250144 bytes

FCM Push DOM StAX-Iter.

80736 bytes 276472 bytes 326392 bytes 281928 bytes

StAX-Curs.

344320 bytes

Page 51: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

Para atributos1.xml:

Para atributos3.xml:

Para atributos0.xml:

Para atributos2.xml:

050000

100000150000

200000250000300000

FCM Push DOM Pull-Iter Pull-Cursor

byte

s

050000

100000150000

200000250000300000

FCM Push DOM Pull-Iter Pull-Cursor

byte

s

0

100000

200000

300000

400000

FCM Push DOM Pull-Iter Pull-Cursor

byte

s

0200000400000600000

80000010000001200000

FCM Push DOM Pull-Iter Pull-Cursor

byte

s

Page 52: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

ComparaciónComparación

Facilidad de uso Medio Alta Alta Alta

Capacidad de XPath No Si Si No

Push DOM FCM Pull

Eficiencia en memoria Buena Mala Buena Buena

Análisis solo adelante Si No No Si

Lectura XML Si Si Si Si

Escritura XML No Si Si Si

Page 53: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

ConclusionesConclusiones

• Nueva técnica de análisis basada en eventosNueva técnica de análisis basada en eventos• Evolución del modelo PullEvolución del modelo Pull• Acceso a todo el documentoAcceso a todo el documento• Mantiene la representación serializadaMantiene la representación serializada• Presenta un buen comportamiento en la Presenta un buen comportamiento en la

memoria utilizada durante la ejecuciónmemoria utilizada durante la ejecución

Page 54: Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla.

1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />

antonio