Eficiencia en el análisis de documentos XML: comportamiento en memoria.
description
Transcript of Eficiencia en el análisis de documentos XML: comportamiento en memoria.
![Page 1: Eficiencia en el análisis de documentos XML: comportamiento en memoria.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/1.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/2.jpg)
1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />
ÍndiceÍndice
PanorámicaIntroducciónModelos de análisisImplementacionesValidaciónConclusiones
![Page 3: Eficiencia en el análisis de documentos XML: comportamiento en memoria.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/3.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/4.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/5.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/6.jpg)
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
Conjunto de MIDletAplicaciones OEM
MIDP2.0 JS
R-1
20 W
MA
JSR
-135
MM
AP
I
Paq
uete
sop
cion
ales
Cla
ses
OE
M
Nav
egad
or N
ativ
o
AM
S/O
TA
Nat
ivo
Apl
icac
ione
s N
ativ
as
Apl
icac
ione
s O
EM
Nat
ivas
![Page 7: Eficiencia en el análisis de documentos XML: comportamiento en memoria.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/7.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/8.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/9.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/10.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/11.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/12.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/13.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/14.jpg)
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 This is an overview of DOM-related materials here at W3C and around the web. web.
• Why the Document Object Model?Why the Document Object Model?• "Dynamic HTML" is a term used by some vendors to describe the "Dynamic HTML" is a term used by some vendors to describe the
combination of HTML, style sheets and scripts that allows documents to be combination of HTML, style sheets and scripts that allows documents to be animated. The W3C has received several submissions from members animated. The W3C has received several submissions from members companies on the way in which the object model of HTML documents should companies on the way in which the object model of HTML documents should be exposed to scripts. These submissions do not propose any new HTML tags be exposed to scripts. These submissions do not propose any new HTML tags or style sheet technology. The W3C DOM Activity is working hard to make or style sheet technology. The W3C DOM Activity is working hard to make sure interoperable and scripting-language neutral solutions are agreed upon. sure interoperable and scripting-language neutral solutions are agreed upon.
![Page 15: Eficiencia en el análisis de documentos XML: comportamiento en memoria.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/15.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/16.jpg)
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
DOMDOM
Object
Object
Object Object
Object
Document
Handler
Error
Handler
DTD Event
Handler
Entity
Resolver
![Page 17: Eficiencia en el análisis de documentos XML: comportamiento en memoria.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/17.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/18.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/19.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/20.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/21.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/22.jpg)
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
Cur
sor
Mez
cla
![Page 23: Eficiencia en el análisis de documentos XML: comportamiento en memoria.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/23.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/24.jpg)
Nuevo modeloNuevo modelo
![Page 25: Eficiencia en el análisis de documentos XML: comportamiento en memoria.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/25.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/26.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/27.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/28.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/29.jpg)
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
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; } } }}
in.hasPreviousSibling()
in.skipWithoutParseChilds();
in.setCursorToPreviousSibling();
![Page 30: Eficiencia en el análisis de documentos XML: comportamiento en memoria.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/30.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/31.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/32.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/33.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/34.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/35.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/36.jpg)
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 elemento
Referencia 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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/37.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/38.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/39.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/40.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/41.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/42.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/43.jpg)
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
Byt
es1728 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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/44.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/45.jpg)
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
Byt
es
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/46.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/47.jpg)
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
byt
esFCM 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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/48.jpg)
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 byte
prueba0.xml 35
prueba1.xml 226
prueba2.xml 6.312
prueba3.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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/49.jpg)
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
FCM Push DOM Pull-Iter Pull-Cursor
byt
esprueba0.xml: prueba1.xml:
prueba2.xml: prueba3.xml:
0
50000
100000
150000
200000
250000
300000
FCM Push DOM Pull-Iter Pull-Cursor
byt
es0
100000
200000
300000
400000
500000
FCM Push DOM Pull-Iter Pull-Cursor
byt
es
0
200000
400000
600000
800000
1000000
1200000
FCM Push DOM Pull-Iter Pull-Cursor
byt
es
![Page 50: Eficiencia en el análisis de documentos XML: comportamiento en memoria.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/50.jpg)
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 43
atributos1.xml 207
atributos2.xml 5.617
atributos3.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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/51.jpg)
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:
0
50000
100000
150000
200000
250000
300000
FCM Push DOM Pull-Iter Pull-Cursor
byt
es
0
50000
100000
150000
200000
250000
300000
FCM Push DOM Pull-Iter Pull-Cursor
byt
es
0
100000
200000
300000
400000
FCM Push DOM Pull-Iter Pull-Cursor
byt
es
0
200000
400000
600000
800000
1000000
1200000
FCM Push DOM Pull-Iter Pull-Cursor
byt
es
![Page 52: Eficiencia en el análisis de documentos XML: comportamiento en memoria.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/52.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/53.jpg)
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.](https://reader035.fdocuments.ec/reader035/viewer/2022062518/56814710550346895db447e8/html5/thumbnails/54.jpg)
1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />
antonio