Usuari:Jordibaucells/Programació XML amb Java
Introducció
[modifica]- Sopa de sigles
- SAX: Estàndard “de facto” per parsers Java basats en processament per esdeveniments.
- DOM: Forma de representar els elements d'un document estructurat XML com objectes que tenen propietats i mètodes.
Analitzadors Sintàctics
[modifica]- S'ignifica parsejar i té la funció d'analitzar sintàcticament, es a dir, procés d'analitzar una seqüència d'entrada per tal de determinar la seva estructura gramatical respecte a una gramàtica formal específica (en el nostre cas XML).
- Un "Parser" és un programa informàtic encarregat d'aquesta tasca.
- L'XPath és l'encarregat d'identificar com es relacionen els elements.
- El parser té dos funcions:
1.- Identificar les unitat mínimes de significat (tokens(que són els elements, atributs, etc)).
2.- Construir l'arbre sintàctic que relaciona els tokens.
APIs Java
[modifica]- En Java hi ha diferents llibreries encarregades de l'anàlisi sintàctic. Podem distingir dos tipus principals:
- TreeBased. Es crea un arbre en memòria amb tota l'estructura del document XML. L' especificació més important és DOM del W3C.
- EventBased. El document es processa mitjançant esdeveniments amb accés seqüencial. L'especificació més important és SAX del grup XMLDEV.
DOM
[modifica]- Model d'Objectes de Document (DOM).
- Utilitzat també per altres estàndards (HTML) i per altres llenguatges de programació com Javascript, C++,PHP,etc.
- Referència W3C:
SAX
[modifica]- Simple API for XML (SAX)
- Estàndard “de facto” per parsers Java basats en processament per esdeveniments.
- Podem trobar altres implementacions en altres llenguatges (Python, Perl, etc.).
- Referència W3C:
SAX vs DOM
[modifica]SAX
Menys consum de recursos de memòria.
Més ràpid.
Orientat a dades (Push).
Documents grans.
Més línies de codi.
Només les dades són importants.
Manipulació seqüencial.
DOM
L'arbre es carrega complet en memòria.
Més lent.
Orientat a documents (Pull).
Documents petits/mitjans.
Menys línies de codi.
L'estructura és important.
Manipulació dels nodes .
Manipulació dels nodes segons el context.
Implementacions de DOM i SAX
[modifica]- Les implementacions o parsers més coneguts en Java de les APIs DOM i SAX són:
- Document de Microsoft Document
JAXP
[modifica]- JAXP és l'acrònim de Java Api for XML Processing. API Java (definit per Sun Microsystems) serveix per a la manipulació i el tractament d'arxius XML.
- JAXP és una especificació regida per la Java Community Process.
- Es l'API de Java.
- Pot treballar amb DOM i SAX.
- DTS, XML Schemas, Espais de noms.
Implementació de JAXP
[modifica]- Apache XalanJ
– Parser: XercesJ 2.x
– XSLT: XalanJ XSLT
- JAXP Reference Implementation
– Parser: Xerces2 or Crimson
– XSLT: XalanJ XSLT
- Java 2 Platform, Standard Edition 1.4
– Parser impl: Crimson
– XSLT: XalanJ XSLT
- Saxon
– Parser: Ælfred2 de GNU JAXP Project.
– XSLT: Saxon XSLT
JDOM
[modifica]- JDOM és un API Java basat en el model d'arbre (DOM) per processar documents XML.
- Dissenyada des de zero sense necessitat de compatibilitats cap enrere.
- A diferència de DOM està dissenyat específicament per a Java.
- Dissenyada pensant només en XML.
- Per al programador és més ordenat, fàcil, clar i intuïtiu que DOM.
- S'integra amb DOM i SAX. Control I/O senzill.
- No te el 100% de funcionalitats de DOM. La idea és: 80% de funcionalitats de DOM amb el 20% d'esforç de DOM.
- Donat el document XML:
<shop name="shop for geeks" location="Tokyo, Japan"> location <computer name="iBook" price="1200$" /> <comic_book name="Dragon Ball vol 1" price="9$" /> <geekyness_of_shop price="priceless" /> </shop>
- El següent codi amb JDOM crea el document:
Element root = new Element ("shop"); root.setAttribute ("name", "shop for geeks"); |
Exercici JDOM
[modifica]package edu.upc.ice.cursXML.sessio5.jdom; import java.io.FileOutputStream; import org.jdom.Element; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; public class ExempleJDOM { public static void main(String[] args) { /* * Volem crear un fitxer XML com el següent: * * <shop name="shop for geeks" location="Tokyo, Japan"> * <computer name="iBook" price="1200$" /> * * <comic_book name="Dragon Ball vol 1" price="9$" /> * <geekyness_of_shop price="priceless" /> * </shop> * */ Element root = new Element ("shop"); root.setAttribute ("name", "shop for geeks"); root.setAttribute ("location", "Tokyo, Japan"); Element item1 = new Element ("computer"); item1.setAttribute ("name", "iBook"); item1.setAttribute ("price", "1200$"); root.addContent (item1); Element item2 = new Element ("comic"); item2.setAttribute ("name", "Dragon Ball vol 1"); item2.setAttribute ("price", "9$"); root.addContent (item2); // Prova d'acabar el document....... XMLOutputter outputter = new XMLOutputter (Format.getPrettyFormat()); try { outputter.output(root,new FileOutputStream ("ShoopForGeeks.xml")); } catch (Exception e) { // TODO: handle exception } } }