Download Estudio y Prueba de una Métrica para los Ofuscadores de Java.
Document related concepts
no text concepts found
Transcript
Eficiencia en el análisis de documentos XML: comportamiento en memoria. Departamento de Sistemas y Automática, Área de Telemática Universidad de Sevilla. Antonio J. Sierra 1ª Conferencia Ibérica de Sistemas y Tecnologías de la Información, CISTI 2006 Esposende, Portugal Junio 2006. Índice Panorámica Introducción Modelos de análisis Implementaciones Validación Conclusiones 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Panorámica Qué? Como? Medidas (Resultados) Ficheros con estructuras Donde? J2SE 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Porqué? Validación del modelo Antonio J. Sierra <FCM /> Introduction • Framework • Fundamentals • Basics 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Contexto Internet J2ME SOAP/XML Wireless acces to network Web Service XML 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Aplicaciones Nativas Aplicaciones OEM Nativas CLDC 1.0 (o 1.1) Sistema Operativo Nativo Dispositivo inalámbrico AMS/OTA Nativo Clases OEM Paquetes opcionales JSR-135 MMAPI MIDP 2.0 JSR-120 WMA Conjunto de MIDlet Aplicaciones OEM Navegador Nativo KVM 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Fundamentals: techniques XML parsing Technique Description DOM Tree-based XML parser memory and CPU intensive Each node a piece of data keeps the whole data in memory . A DOM parser returns a “tree” representation of the XML document. Push(SAX) Pull (StAX) FCM Event-based XML parser. Reports parsing events directly to the application. Provides a serial-access mechanism for accessing XML docum. Faster and consume less CPU A 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 CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Información datos <?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 CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> metainformación metadatos <?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 CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Sam Wilmott • La forma en la que los datos son devueltos (API) • Qué información es devuelta al cliente • La relación entre el analizador y el cliente (Productor/Consumidor) 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Sperberg-Mcqueen • Como un flujo de caracteres • Como una secuencia de caracteres de datos mezclado con marcas • Como un árbol en su forma obvia • Como un grafo con enlaces entre nodos • Definidos por relaciones entre padre-hijo y los elementos XML, por enlaces ID/IDREF, o por métodos de aplicación específicas entre elementos) • Como un árbol o grafo con información del tipo de datos y validez • Como una instancia de la estructura de datos de una aplicación 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Ejemplo (II) , titulo: “The XML handbook” libro autor:“C.F. Golfarb,P. Prescod ” id:101 precio: “39.95 ” catalogo libro <?xml version="1.0" ?> <catalogo> id:121 <!-- Ejemplo --> <libro id="101"> <titulo>The XML handbook</titulo> Comentario: Ejemplo <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> titulo:“XSLT Programmers’s Ref.” autor: “M. Kay ” precio: “19.95 ” Reglas: – jerarquía, – unicidad, – entrelazado, … 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> titulo: “The XML handbook” Ejemplo (y III) libro autor:“C.F. Golfarb,P. Prescod ” precio: “39.95 ” id:101 catalogo titulo:“XSLT Programmers’s Ref.” libro <?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> autor: “M. Kay ” id:121 precio: “19.95 ” Comentario: Ejemplo Document DocumentType null Element catalogo Element libro Element libro Attr “121” Text “” Element titulo Element titulo Element autor Text “M. Kay ” Element autor “19.95 ” Element precio Text Text Text “The XML handbook” “C.F. Golfarb,P. Prescod ” 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Element precio Text Text “XSLT Programmers’s Ref.” Attr “101” Comments “Ejemplo” “39.95 ” Antonio J. Sierra <FCM /> DOM (Document Object Model) • • • • • W3C (The World Wide Web Consortium) What is the Document Object Model? The Document Object Model is a platform- and language-neutral interface that will allow programs and scripts to dynamically access and update the content, 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. This is an overview of DOM-related materials here at W3C and around the web. Why the Document Object Model? "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 W3C has received several submissions from members 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 or style sheet technology. The W3C DOM Activity is working hard to make sure interoperable and scripting-language neutral solutions are agreed upon. 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Funcionamiento de la API DOM DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Documentdocument document = builder.parse("libros.xml"); Document = builder.parse("libros.xml"); NodeList nodes = document.getElementsByTagName("titulo"); for(int 0; 0; i <i nodes.getLength(); i ++) { for(inti i= = < nodes.getLength(); i ++) { Element titleElem = (Element)nodes.item(i); Element titleElem = (Element)nodes.item(i); Node childNode = titleElem.getFirstChild(); Node childNode = titleElem.getFirstChild(); if (childNode instanceof Text) { if (childNode instanceof Text) { System.out.println("El titulo del libro es: " System.out.println("El titulo del libro es: " + childNode.getNodeValue()); + childNode.getNodeValue()); } } } } 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> SAX & DOM Document Handler Error Analizador SAX Handler DOM DTD Event Object Handler Entity Object Object Resolver Object 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Object Antonio J. Sierra <FCM /> 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(); factory.newSAXParser(); parser parser.parse(newFileInputStream("libros.xml"),handler); FileInputStream("libros.xml"),handler); parser.parse(new }catch(Throwable e){ System.out.println("Error: "+e); } } 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Funcionamiento de SAX (I) public class MiManejadorDeConenido extends DefaultHandler { boolean isTitle; publicvoid voidstartElement(String startElement(Stringuri, uri,String StringlocalName, localName, public StringqName, qName,Attributes Attributesatts) atts){ { String (qName.equals("titulo")) ifif(qName.equals("titulo")) isTitle= =true; true; isTitle } } publicvoid voidendElement(String endElement(Stringuri, uri,String StringlocalName, localName,String StringqName) qName){ { public if(qName.equals("titulo")) if(qName.equals("titulo")) isTitle= =false; false; isTitle }} public publicvoid voidcharacters(char[ characters(char[] ]chars, chars,int intstart, start,int intlength) length){ { if(isTitle){ if(isTitle){ System.out.println("El System.out.println("Eltitulo titulodel dellibro libroes: es:" " + +new newString(chars, String(chars,start, start,length)); length)); } } } } } 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Pull • Inicialmente envolvente a SAX al estilo iterador • Pull iterador • Pull cursor 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Pull iterador XMLInputFactory 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() if(e.isStartElement() && && ((((StartElement)e).getName()) ((((StartElement)e).getName()) .getLocalPart()).equals("titulo")){ .getLocalPart()).equals("titulo")){ isTitle true; isTitle = =true; }elseif(e.isCharacters() if(e.isCharacters() && isTitle){ }else && isTitle){ System.out.println(""+((Characters)e).getData()); System.out.println(""+((Characters)e).getData()); }else if(e.isEndElement() && }else if(e.isEndElement() && ((((EndElement)e).getName()) ((((EndElement)e).getName()) .getLocalPart()).equals("titulo")){ .getLocalPart()).equals("titulo")){ isTitle = =false; isTitle false; } } 1ª} Conferência Ibérica de Sistemas e Tecnologias de Informação Antonio J. Sierra CISTI 2006 Esposende, Portugal <FCM /> Pull-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: XMLStreamConstants.START_ELEMENT: case if((r.getLocalName()).equals("titulo")) if((r.getLocalName()).equals("titulo")) isTitle == true; true; isTitle break; break; case case XMLStreamConstants.CHARACTERS: XMLStreamConstants.CHARACTERS: if(isTitle) if(isTitle) System.out.println(r.getText()); System.out.println(r.getText()); break; break; case case XMLStreamConstants.END_ELEMENT: XMLStreamConstants.END_ELEMENT: if((r.getLocalName()).equals("titulo")) if((r.getLocalName()).equals("titulo")) isTitle = isTitle false; = false; break; break; } Ibérica de} Sistemas e Tecnologias de Informação 1ª Conferência } Esposende, Portugal CISTI 2006 Antonio J. Sierra <FCM /> Taxonomía de las APIs XML Push Eventos Árboles SAX Pull BEA Iterador kXML1 DOM StAX JDOM DOM4J XmlPull (XNI2XmlPull, kXML2, XPP3) XPP2 … Neko Pull XPP1 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Temporización de las APIs Push SAX1 Ælfred SAX2 Pull XP www.trantor.de/xml/ XPP1 Iterador Cursor 1998 1999 NekoPull kXML1 BEA StAX XmlPull1: kXML2 XPP3 2000 2001 2002 2003 2004 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal 2005 Antonio J. Sierra <FCM /> Nuevo modelo FCM: Free Cursor Mobility • Event-based (vs tree-based) • Serial-access mechanism for accessing XML data • Mantain a serialized representation (vs tree) • Cursor: go back to early position/leap ahead • Pull-everything • In-situ XML parser (vs data copying) 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Nuevos métodos • public publicvoid voidsetCursorToPreviousSibling() setCursorToPreviousSibling(), • configura el cursor al hermano previo de un elemento void setCursorToParent() •public public void setCursorToParent(), • configura el cursor al padre de un elemento, si lo tuviera • public void setCursorToRoot(), public void setCursorToRoot() • configura el cursor al nodo raíz. 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Nuevos métodos public boolean hasPreviousSibling() • • devuelve un valor cierto (true) si el elemento en el cual está en un determinado momento tiene hermano previo. public boolean hasParent() • configura el cursor al padre de un elemento, si lo tuviera public void skipWithoutParseChilds() • saltar subsecciones del documento XML. Este método sitúa el cursor al final de un elemento, saltando todos los hijos que pudiera tener. Este método presenta unas características excelentes en cuanto a que no instancia objetos, por lo que no consume memoria. 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Funcionamiento de FCM InputStream input; //... XMLFCMReader r = new XMLFCMReader(); r.parse(input ,input.available()); boolean isTitle = false; while(r.hasNext()) { int evento = r.next(); switch(evento){ case caseXMLFCMConstants.START_ELEMENT: XMLFCMConstants.START_ELEMENT: if((r.getLocalName()).equals("titulo")) if((r.getLocalName()).equals("titulo")) isTitle = true; isTitle = true; break; break; case caseXMLFCMConstants.CHARACTERS: XMLFCMConstants.CHARACTERS: if(isTitle) if(isTitle) System.out.println( System.out.println( titulo libro "El "El titulo del del libro es:"es:" +r.getText()); +r.getText()); break; break; case caseXMLFCMConstants.END_ELEMENT: XMLFCMConstants.END_ELEMENT: if((r.getLocalName()).equals("titulo")) if((r.getLocalName()).equals("titulo")) isTitle = false; isTitle = false; break; break; } Ibérica de Sistemas e Tecnologias de Informação 1ª Conferência } } CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Funcionamiento 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(); in.hasPreviousSibling() if( in.hasPreviousSibling() ){ in.setCursorToPreviousSibling(); in.setCursorToPreviousSibling(); flag2 = false; } } } 1ª} Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> libros.xml Analizador SAX startElement “titulo” characters endElement “titulo” Lee datos directamente MiManejador isTitle = true Imprime el título isTitle = false Coloca los eventos Aplicación Analizador Pull libros.xml START_ELEMENT “titulo” CHARACTERS END_ELEMENT “titulo” Lectura bajo petición next() next()Imprime titulo next() Pide el evento Aplicación Analizador FCM libros.xml START_ELEMENT“titulo” CHARACTERS END_ELEMENT “titulo” Lectura bajo petición Movimiento del cursor next() next()Imprime titulo next() Pide el evento 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Productor/Consumidor Árbol DOM nodo Document analizador datos XML Node Raíz Node hijo Texto lectura/escritura Node hijo Texto aplicación Productor void startDocument () void endDocument () void characters(char buf [], int offset, int len) void endElement (String uri, String lNam, String qName) aplicación void startElement(String uri, String localNam, String qName, Attributes attrs) analizador datos XML Productor analizador Consumidor Consumidor boolean hasNext () true int next() START_DOCUMENT / START_ELEMENT, ... aplicación datos XML Mueve el cursor adelante o atrás Productor analizador datos XML Consumidor boolean hasNext () boolean hasPreviousSibling () true int next() void skipWithoutParsingChilds() aplicación START_DOCUMENT / START_ELEMENT, ... 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Implementation 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Movimiento del cursor <el>Romeo</el><conj>and</conj><ella>Julieta< analizador setCursorToParent() setCursorToPreviousSibling()eventos Métodos del analizador next() skiptWithoutParsingChilds() aplicación 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal <?xml version=“1.0” ?> <root> <lovers> <el>Romero</el> <conj>and</conj> <ella>Julieta</ ella > </lovers> <sentence> Enamorados </sentence> </root> Antonio J. Sierra <FCM /> Implementando “well-formed” Analizador String[] Representación Serializada ... conj lovers root conj curs <root><lovers><el>Romeo</el><conj>y</conj><ella>Julieta< or Analizador Object[] Representación Serializada cursor <root><lovers><el>Romeo</el><conj>y</conj><ella>Julieta< 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Implementando “well-formed” Analizador cursor <root><lovers><el>Romeo</el><conj>y</conj><ella>Julieta< 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Implementando “well-formed” element padre hijo … hermano … Otra información (Optional) Referencia al hijo de este elemento Referencia al padre de este elemento Referencia al hermano de este elemento Cursor de este elemento 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> \---com \---com \---sierra \---sierra +---io +---io ArrayInputStream.java || || ArrayInputStream.java XMLReader.java || || XMLReader.java XMLWriter.java || || XMLWriter.java || || \---i18n || \---i18n ReaderUCS4.java || ReaderUCS4.java ReaderUTF16.java || ReaderUTF16.java ReaderUTF8.java || ReaderUTF8.java WriterUCS4.java || WriterUCS4.java WriterUTF16.java || WriterUTF16.java WriterUTF8.java || WriterUTF8.java || \---xml \---xml XMLConstants.java || XMLConstants.java || +---fcm +---fcm Location.java || Location.java XMLFCMConstants.java || XMLFCMConstants.java XMLFCMException.java || XMLFCMException.java XMLFCMReader.java || XMLFCMReader.java XMLFCMWriter.java || XMLFCMWriter.java || \---namespace \---namespace NamespaceContext.java NamespaceContext.java QName.java QName.java Clases de la implementación 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Interfaz XMLFCMConstants 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 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> XMLFCMReader XMLFCMWriter QName +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>> XMLConstants <<interface>> XMLFCMConstants <<interface>> NamespaceContext +getNamespaceURI() +getPrefix () +getPrefixes() XMLFCMException <<interface>> Location +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() Antonio 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal J. Sierra <FCM /> Validation 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Funcionamiento de FCM 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Model Xparse-J 1.0 Size 1728 Bytes Push TAMparser Size 1728 Bytes Pull FCM Size 1728 Bytes kxml2 Size 1728 Bytes 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> kXML FCM TAMparser Xparse-J 44 300 bytes 47 032 bytes 116 384 bytes 280 464 bytes 500000 1728 bytes 450000 400000 Bytes 350000 300000 250000 200000 150000 100000 50000 0 kXML FCM TAMparser Xparse-J 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Push TAMparser Size 24458 Bytes FCM Pull kxml2 Size 24458 Bytes Size 24458 Bytes 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> kXML FCM TAMparser Xparse-J 239 140 bytes 352 204 bytes XXXX XXXX 500000 24458 bytes 450000 400000 Bytes 350000 300000 250000 200000 150000 100000 50000 0 kXML FCM TAM Xparser-J 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Codificación soportada ASCII UTF-8 UTF-16BE UTF-16LE UCS-4 kXML Si No No No No FCM Si Si Si Si Si TAMparser Si Si No No No Xparse-J Si Si No No No 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Sobre J2SE FCM Push DOM StAX-Iter. StAX-Curs. 79552 bytes 83784 bytes 95400 bytes 102704 bytes 248136 bytes 300000 250000 bytes 200000 150000 100000 50000 0 FCM Push DOM Pull-Iterador Pull-Cursor 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Profundidad del archivo Nombre del fichero prueba0.xml prueba1.xml prueba2.xml prueba3.xml Tamaño en byte 35 226 6.312 199.650 <a> <b> <c> ... </c> </b> </a> Para prueba0.xml: Push DOM StAX-Iter. StAX-Curs. 80848 bytes 88464 bytes 86880 bytes 246552 bytes FCM Push DOM StAX-Iter. StAX-Curs. 69952 bytes 83008 bytes 92760 bytes 93704 bytes 249704 bytes FCM Push DOM StAX-Iter. StAX-Curs. 82128 bytes 137104 bytes X 288912 bytes 352976 bytes FCM Push DOM StAX-Iter. StAX-Curs. 364968 bytes 219584 bytes X 1121272 bytes 1068456 bytes FCM 69576 bytes Para prueba1.xml: Para prueba2.xml: Para prueba3.xml: 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> prueba1.xml: 300000 300000 250000 250000 200000 200000 bytes bytes prueba0.xml: 150000 100000 100000 50000 50000 0 0 FCM Push prueba2.xml: FCM DOM Pull-Iter Pull-Cursor Push DOM Pull-Iter Pull-Cursor prueba3.xml: 500000 1200000 400000 1000000 300000 800000 bytes bytes 150000 200000 100000 600000 400000 200000 0 0 FCM Push DOM Pull-Iter Pull-Cursor FCM Push 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal DOM Pull-Iter Pull-Cursor Antonio J. Sierra <FCM /> Número de atributos Nombre del fichero atributos0.xml atributos1.xml atributos2.xml atributos3.xml Tamaño en byte 43 207 5.617 181.379 <elemento nombre1=“valor1” nombre2=“valor2” ... > Para atributos0 .xml: FCM bytes Para atributos1.xml: 69592 FCM 69920 bytes Push 80944 bytes Push 87800 bytes DOM 88624 bytes DOM 97160 bytes StAX-Iter. 87080 bytes StAX-Iter. 104600 bytes StAX-Curs. 246624 bytes StAX-Curs. 250144 bytes Para atributos2.xml: FCM 80736 bytes Push 276472 bytes DOM 326392 bytes StAX-Iter. 281928 bytes StAX-Curs. 344320 bytes Para atributos3.xml: FCM 328424 bytes Push X DOM 1079544 bytes StAX-Iter. 1038288 bytes 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal StAX-Curs. X Antonio J. Sierra <FCM /> Para atributos1.xml: 300000 300000 250000 250000 200000 200000 bytes bytes Para atributos0.xml: 150000 100000 100000 50000 50000 0 0 FCM Push Para atributos2.xml: DOM Pull-Iter Pull-Cursor FCM Push DOM Pull-Iter Pull-Cursor Para atributos3.xml: 400000 1200000 300000 1000000 bytes bytes 150000 200000 100000 800000 600000 400000 200000 0 0 FCM Push DOM Pull-Iter Pull-Cursor FCM Push 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal DOM Pull-Iter Pull-Cursor Antonio J. Sierra <FCM /> Comparación DOM Push Pull FCM Alta Medio Alta Alta Si No No Si Eficiencia en memoria Mala Buena Buena Buena Análisis solo adelante No Si Si No Lectura XML Si Si Si Si Escritura XML Si No Si Si Facilidad de uso Capacidad de XPath 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> Conclusiones • • • • • Nueva técnica de análisis basada en eventos Evolución del modelo Pull Acceso a todo el documento Mantiene la representación serializada Presenta un buen comportamiento en la memoria utilizada durante la ejecución 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM /> antonio 1ª Conferência Ibérica de Sistemas e Tecnologias de Informação CISTI 2006 Esposende, Portugal Antonio J. Sierra <FCM />