Professional Documents
Culture Documents
LENGUAJES PARA
INTERNET
2006
María Rodríguez Fernández
Relaciones entre aplicaciones y
documentos
Cadena de caracteres
Documentos
XML Serializador APLICACIÓN
APIS
XML
estandarizados
Analizador
¿Qué es un parser XML?
Documento
XML
Aplicación
Parser XML
XML
XML DTD
XML Schema
Tipos
http://petra.euitio.uniovi.es/~mariarf
SAX (Simple API for XML)
XML
Manejadores estándar
ContentHandler
permite manejar eventos relacionados con los datos de un
documento XML
ErrorHandler
recibe información sobre errores en los datos del
documento XML
DTDHandler
permite manejar eventos relacionados con el análisis de un
DTD. No atiende a eventos relacionados con la validación.
Poco usado
EntityResolver
analiza entidades externas que se especifican en el
documento XML que se está analizando.
Funcionamiento
Durante el reconocimiento del documento...
...cada vez que se identifica una estructura (elemento)
se mira si hay un procedimiento que manipula ese
elemento
se llama al procedimiento
cuando termina, continua con el reconocimiento
Los procedimientos permiten procesar el
documento guiado por eventos
Los eventos son las ocurrencias de los elementos a
los que hacen referencia
SAX-Documento XML
XML Document SAX Objects
<?xml version=“1.0”?> Parser startDocument
org.xml.sax.XMLReader
Permite parsear el documento XML
Antes es preciso establecer gestores de eventos
Gestor de errores
Clase que implementa org.xml.sax.ErrorHandler
Gestor de eventos de contenido (apertura de tag, cierre
de tag,etc.)
Clase que implementa org.xml.sax.ContentHandler
Excepciones
org.xml.sax.SAXParseException: subclase de
org.xml.sax.SAXException. Contiene:
Un mensaje descriptivo
Tipos de errores:
Warnings y errores: algo no es conforme al DTD
desde el modelo
Acceder a cualquier parte de un documento
original
El DOM del W3C
El W3C creó una recomendación de DOM para XML.
http://www.w3.org/DOM
para HTML y XML.
El DOM W3C permite acceder a todas las partes de
un documento.
Existen tres niveles de DOM:
Nivel 0: es una formalización del DOM HTML definido
implícitamente por JavaScript.
Nivel 1: permite acceder a todas las partes de un
documento XML pero no a la DTD ni a las hojas de estilo.
Nivel 2: permite acceso a la DTD, hojas de estilo y
espacios de nombres.
El DOM pretende constituir un API que pueda
ser utilizado por distintas aplicaciones
Conceptos básicos
Analizador DOM: Crea una estructura de tipo árbol
Manipulación del árbol. Objetos W3C DOM:
Element – un elemento XML
Attribute – un attributo
Text – texto contenido en un elemento o atributo
CDATAsection – sección CDATA
ProcessingInstruction – Una instrucción de procesamiento
Comment – Contenido de un comentario de XML
Document – El objeto documento
DocumentType – Referencia al elemento DOCTYPE
DocumentFragment – Referencia a fragmento de documento
Objetos relacionados con Nodos
DOCUMENT documentElement
TABLE childNodes.item(0)
BODY getElementByTagName(“titulo_tabla”)
TR TR
TD TD TD TD
Shady Over
Grove Aeolian theRiver, Dorian
Charlie
doc.documentElement.childNodes.item(0).getElementsByTagName(“titulo_tabla”)
import org.w3c.dom.*;
import org.apache.xerces.parsers.DOMParser;
Se crea un
public class XML_Parser{ parser DOM
public static void main(String[] args){
try{
Se parsea el
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
documentBuilder db = dbf.newDocumentBuilder();
documento
Document doc = db.parse(new File(filename));
display(doc); Se obtiene un
catch (Exception e){…}
} tipo de objeto
public static void display(Node node){ Document
if (node==null) return null;
int type = node.getNodeType();
switch (type) { Si el
case Node.DOCUMENT_NODE: { documento no
display(((Document)node).getDocumentElement()); es válido o
break;}
case Node.ELEMENT_NODE: bien formado
NodeList childNodes = node.getChildNodes();
if (childNodes != null) {
length=childNodes.getLength(); Para cada
for(i=0;i<length;i++)
display(childNodes.item(i));
hijo se llama
} a la función
break;} display
case Node.CDATA_SECTION_NODE: { (recursivo)
// Print values
break;}
}}
SAX vs DOM
SAX
Consumo mínimo de memoria => eficiencia
Es secuencial
No es fácil acceder a elementos anteriores, hermanos, etc.
No es apropiado para generar XML
DOM
Máximo consumo de memoria
Permite acceder fácilmente a todos los detalles del documento
Más sencillo que SAX
Permite construir y/o modificar árboles, y generar XML
Actualmente cada parser ofrece una forma específica de generar
XML, pero esta deficiencia se corregirá en breve (DOM Level 3)
Soporte para HTML
SAX vs. DOM
En general, para situaciones similares a las del
ejemplo
Número de asignaturas demasiado grande => SAX
Número de asignatura no demasiado grande, pero muchos
threads realizando la operación de parseo => SAX
Número de películas no demasiado grande y pocos
threads parseando => SAX o DOM
En resumen, es una cuestión de consumo de memoria
Si es mucha => SAX
W3schools. http://www.w3schools.com
La especificación de SAX 2.0/Java está en:
http://
www.megginson.com/SAX/Java/index.html
Especificación DOM. www.w3.org/DOM/
JAXP. java.sun.com/webservices/jaxp/
¿Alguna pregunta?