Vés al contingut

Usuari:Jordibaucells/Programació XML amb Java

De la Viquipèdia, l'enciclopèdia lliure
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:

- Tree­Based. Es crea un arbre en memòria amb tota l'estructura del document XML. L' especificació més important és DOM del W3C.
- Event­Based. El document es processa mitjançant esdeveniments amb accés seqüencial. L'especificació més important és SAX del grup XML­DEV.

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:

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 Xalan­J

– Parser: Xerces­J 2.x
– XSLT: Xalan­J XSLT

  • JAXP Reference Implementation

– Parser: Xerces2 or Crimson
– XSLT: Xalan­J XSLT

  • Java 2 Platform, Standard Edition 1.4

– Parser impl: Crimson
– XSLT: Xalan­J XSLT

  • Saxon

– Parser: Ælfred2 de GNU JAXP Project.
– XSLT: Saxon XSLT

JDOM[modifica]

DOM4J
  • 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");
root.setAttribute ("location", "Tokyo, Japan");
Element item1 = new Element ("computer");
item1.setAttribute ("name", "iBook");
item1.setAttribute ("price", "1200$");
root.addContent (item1);
......
XMLOutputter outputter = new XMLOutputter ();
outputter.output (new FileOutputStream ("foo2.xml"));

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