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.
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
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)
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
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
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
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)
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
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>
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)
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
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, … …
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>
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.
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");
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
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);
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)); } }
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
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; }
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; }
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
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
Nuevo modeloNuevo modelo
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)
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()
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()
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;
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();
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
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
1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />
ImplementationImplementation
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()
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
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
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)
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
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
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
1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />
ValidationValidation
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
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
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
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
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
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
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
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>
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
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
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
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
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
1ª Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 CISTI 2006 Esposende, Portugal <FCM />
antonio