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