persistenta datelor

45
Persistenta datelor Multe aplicatii doresc sa asigure persistenta datelor • Metode/Tehnologii: – Fisiere – Serializare Baze de date • Probleme: Decuplarea componentelor care fac accesul la date de celelalte parti ale aplicatiei Abstractizarea accesului la date Transformarea datelor intre OO domain model si un model de persistenta non-OO (BD relationale, fisiere diferite structuri)

Upload: feng

Post on 14-Jan-2016

51 views

Category:

Documents


0 download

DESCRIPTION

Persistenta datelor. Multe aplicatii doresc sa asigure persistenta datelor Metode/Tehnologii: Fisiere Serializare Baze de date Probleme: Decuplarea componentelor care fac accesul la date de celelalte parti ale aplicatiei Abstractizarea accesului la date - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Persistenta datelor

Persistenta datelor

• Multe aplicatii doresc sa asigure persistenta datelor• Metode/Tehnologii:

– Fisiere– Serializare– Baze de date

• Probleme:– Decuplarea componentelor care fac accesul la date de

celelalte parti ale aplicatiei• Abstractizarea accesului la date• Transformarea datelor intre OO domain model si un model de

persistenta non-OO (BD relationale, fisiere diferite structuri)

Page 2: Persistenta datelor

Continutul cursului

• Tehnologii– XML– JDBC

• Data Acess Patterns– Data Transfer Object– Data Access Object

Page 3: Persistenta datelor

XML

• XML este un standard pentru descrierea structurii documentelor• eXtensible Markup Language

– Format text pentru descrierea datelor => simplu de utilizat

– Standardizat => exista API-uri care pot fi utilizate pentru a simplifica parsing-ul (sintaxa reprezentarii datelor)

– Applicatiile care utilizeaza XML trebuie sa stabileasca doar partea semantica a reprezentarii datelor

Page 4: Persistenta datelor

XML Tags

• Tags– Reprezinta Metainformatii incluse in text

• Similare ca forma cu cu HTML tags• Diferenta intre HTML tags si XML tags: HTML tags contin

informatii de reprezentare a datelor (ex: <B>), in timp ce XML tags contin informatii de structurare si semantica a datelor

– XML tags sunt case-sensitive– Pot contine text sau alte tag-uri– Fiecare trebuie sa aiba un tag de sfarsit: – <tag> </tag> – O pereche de tag-uri fara continut se poate scrie ca si <tag />

• Tag Attributes– Defineste perechi name-value in interiorul unui tag

• <dot x=“72” y=“13” />

Page 5: Persistenta datelor

Caractere speciale

• Unele caractere sunt utilizate in tag-uri si descrieri si pentru reprezentarea lor explicita se folosesc secvente:

• Exemple:

– < se codifica &lt;

– > se codifica &gt;

– & se codifica &amp;

– “ se codifica &quot;

– ‘ se codifica &apos;

Page 6: Persistenta datelor

Organizarea documentelor XML

• Un document XML incepe cu o declaratie:

<?xml version='1.0' encoding='utf-8'?>

• Forma arborescenta:

– Exista exact un element radacina

– Alte elemente sunt incuibate

– Prin element se intelege o secventa cuprinsa intre 2 tag-uri pereche<person>

<firstname>Ion</firstname> <lastname>Popescu</lastname>

<age>30</age><ssn>2711130345678</ssn>

</person>

Page 7: Persistenta datelor

Reprezentarea datelor

• Dorim sa reprezentam coordonatele unor puncte in plan

XML

Page 8: Persistenta datelor

Stiluri de reprezentare a datelor: Tag-uri sau atribute ?

• Dorim sa reprezentam coordonatele unor puncte in plan• Exista 2 metode de structurare si reprezentare:

– Utilizand atribute:

<dot x=“25" y=“33">

– Utilizand tag-uri incuibate:<dot>

<x>25</x>

<y>33</y>

</dot> • Ce metoda de reprezentare este de preferat?

– Atribute: daca datele sunt scurte:• <dot x='65' y=‘23' />

– Tag-uri: daca datele sunt lungi:• <description>Acest program este foarte util tuturor</description>

– Tag-uri: daca numarul de atribute ce caracterizeaza un element nu este fix: <polygon> <point> .. </point> <point>..</point> <point>..</point> </polygon>

Page 9: Persistenta datelor

Exemplu 1: document XML – datele reprezentate in atribute

• Dots – un set de puncte in plan, caracterizate de coordonatele (x,y)

• Root node: “dots”

• Child nodes: “dot”, cu atributele x si y

<?xml version="1.0" encoding="UTF-8" ?> <dots><dot x="32" y="100" /><dot x="17" y="14" /><dot x="18" y="58" > </dot>  </dots>

dots.xml

Page 10: Persistenta datelor

Exemplu 2: document XML – datele reprezentate in tag-uri incuibate

• Points – un set de puncte in plan, caracterizate de coordonatele (x,y)

• Root node: “points”

• Child nodes: “point”, fiecare avand child nodes “x” si “y”

<?xml version="1.0" encoding="UTF-8" ?> -<points> <point> <x>12</x> <y>24</y> </point> <point> <x>22</x> <y>11</y> </point></points>

points.xml Un document XML trebuie sa

fie:Well-formed si

Valid

Page 11: Persistenta datelor

Documente XML: Well-formed

"well-formed": un document corect din punctul de vedere al regulilor sintactice generale XML

• are exact un element radacina

• fiecare element are un tag de sfarsit

• elementele sunt incuibate corect

• valorile atributelor sunt intre ghilimele

Page 12: Persistenta datelor

Documente XML: ValideXML Schema

• “Valid”: un document care respecta anumite reguli impuse structurii

• Metode de specificare formala a structurii unui document (unei clase de documente) XML:

– XML DTD (Data Type Definition):

– XML Schema (XSD): un limbaj ce impune constrangeri asupra structurii documentelor XML

• Pentru o clasa de documente XML, se pot impune reguli privitoare la:

– Ce tag-uri sunt permise, in ce ordine pot sa apara, de cate ori, ce atribute pot sa aiba, de ce tipuri, etc.

• Parserele XML cu validare verifica respectarea constrangerilor impuse de o schema specificata

• XML Schema Tutorial: http://www.w3schools.com/schema/default.asp

Page 13: Persistenta datelor

Exemplu 1 XML Schema

• Pentru reprezentarea unui set de puncte in plan, se stabilesc urmatoarele reguli:

– Elementul radacina este dots<xs:element name="dots">

– Acesta poate contine un numar oarecare de elemente de tip dot

• Este un tip complex ptr ca contine alte elemente<xs:complexType>

• Contine o secventa de alte elemente<xs:sequence>

– Fiecare element dot are 2 atribute, x si y, cu valori intregi

<xs:attribute name="x" type="xs:integer" />

Page 14: Persistenta datelor

Exemplu 1 XML Schema

<?xml version="1.0"?><xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema><xs:element name="dots"> <xs:complexType> <xs:sequence> <xs:element name="dot" maxOccurs="unbounded"> <xs:complexType>

<xs:attribute name="x" type="xs:integer" use="required"/><xs:attribute name="y" type="xs:integer" use="required"/>

</xs:complexType> </xs:element> </xs:sequence> </xs:complexType></xs:element></xs:schema>

dots.xsd

Page 15: Persistenta datelor

Exemplu: document XML cu schema

<?xml version="1.0" encoding="UTF-8" ?> <dots xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="dots.xsd">><dot x="32" y="100" /><dot x="17" y="14" /><dot x="18" y="58" > </dot>  </dots>

dots.xml

Page 16: Persistenta datelor

Exemplu 2 XML Schema

• Pentru reprezentarea unui set de puncte in plan, se stabilesc urmatoarele reguli:

– Elementul radacina este points<xs:element name=“points">

– Acesta poate contine un numar oarecare de elemente de tip point• Este un tip complex ptr ca contine alte elemente

<xs:complexType>• Contine o secventa de alte elemente point

<xs:sequence>– Fiecare element point este de tip complex, fiind o secventa de 2

elemente x si y <xs:element name="x" type="xs:integer" />

– Elementele x si y sunt elemente simple (contine numai text, nu contine alte elemente sau atribute)

Page 17: Persistenta datelor

Exemplu 2 XML Schema

<?xml version="1.0" encoding="utf-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="points"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="point"> <xs:complexType> <xs:sequence> <xs:element name="x" type="xs:integer" /> <xs:element name="y" type="xs:integer" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element></xs:schema>

points.xsd

Page 18: Persistenta datelor

Suport pentru editarea XML

• Fisierele XML pot fi editate cu orice editor de texte (Notepad, etc)

• Este recomandabila utilizarea unui XML Editor care poate ajuta la validarea unui document XML in conformitate cu o schema data si poate impune respectarea structurii permise inca din timpul editarii

– XMLSpy

– Mediile Integrate de Dezvoltare (IDE) curente contin diverse facilitati pentru lucrul cu XML :

• NetBeans

• .NET Studio

• Eclipse

Page 19: Persistenta datelor

Suport pentru prelucrarea XML in Java

• JAXP (Java API for XML Processing) – http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JAXPIntro.html– Suporta procesarea datelor XML de catre aplicatii scrise in

Java– Suport pentru XML parsing: 2 standarde diferite:

– SAX (Simple API for XML Parsing): in timpul operatiei de parsing se genereaza evenimente care anunta elementele identificate, este sarcina aplicatiei sa trateze acele evenimente furnizand metodele de callback (pentru a-si construi o structura de date)

– DOM (Document Object Model): operatia de parsing construieste in memorie o reprezentare arborescenta a datelor din XML

– Suport pentru transformarea documentelor XML:– XSLT (Extensible Stylesheet Language Transformation).

Page 20: Persistenta datelor

SAX

http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JAXPIntro4.html

Page 21: Persistenta datelor

Citire XML cu SAX

Exemplu: XMLDotReader - citeste date din fisierul dots.xml

// standard imports for SAX

import java.io.*;

import java.util.*;

import javax.xml.parsers.*;

import org.xml.sax.*;

import org.xml.sax.helpers.*;

// Implementing a ContentHandler to handle the SAX events

public class XMLDotReader extends DefaultHandler {

}

Page 22: Persistenta datelor

Construirea parserului SAX

// create an instance of the ContentHandler

DefaultHandler handler= new XMLDotReader();

SAXParserFactory factory = SAXParserFactory.newInstance();

try {

// use the default non-validating parser

SAXParser saxParser = factory.newSAXParser();

saxParser.parse(new File(“dots.xml”), handler);

} catch (Exception ex) {

ex.printStackTrace();

}

Page 23: Persistenta datelor

Tipuri de evenimente

public void startDocument() throws SAXException ;

public void endDocument() throws SAXException ;

// Called at start of each element

public void startElement(String namespaceURI, String localName,

String qName, Attributes atts) throws SAXException ;

// Called at the end of each element

public void endElement(java.lang.String uri, java.lang.String localName, java.lang.String qName) throws SAXException;

// Called for characters between nodes.

public void characters(char buf[], int offset, int len) throws SAXException;

Page 24: Persistenta datelor

Tratarea evenimentelor

public class XMLDotReader extends DefaultHandler {

public void startElement(String namespaceURI, String localName,

String qName, Attributes atts) throws SAXException {

System.out.println("start element:" + qName);

if (qName.equals("dot")) {

x = Integer.parseInt(atts.getValue("x"));

y = Integer.parseInt(atts.getValue("y"));

System.out.println(x + ", " + y);

}

}

}

Page 25: Persistenta datelor

Cod Sursa Exemplu1

• Vezi pagina web: XMLDotsReader.java

Page 26: Persistenta datelor

Rezultatele rularii

startDocumentstart element:dotsstart element:dotdot: 32, 100end element:dotstart element:dotdot: 17, 14end element:dotstart element:dotdot: 18, 58end element:dotend element:dotsendDocument

<?xml version="1.0" encoding="UTF-8" ?> <dots><dot x="32" y="100" /><dot x="17" y="14" /><dot x="18" y="58" > </dot>  </dots>

dots.xml

Page 27: Persistenta datelor

Rezultatele rularii

• Daca se modifica dots.xml astfel incat sa nu mai fie well-formed (lipseste inchiderea la al 2-lea tag dot)

startDocumentstart element:dotsstart element:dotdot: 32, 100end element:dotstart element:dotdot: 17, 14start element:dotdot: 18, 58end element:dotorg.xml.sax.SAXParseException: The end-tag for element type "dot" must end witha '>' delimiter. at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)

Page 28: Persistenta datelor

Rezultatele rularii

• Daca se modifica fisierul dots.xml astfel incat sa contina si alte nume de tag-uri (se inlocuieste al doilea tag dot cu dotu), nemaifiind conform cu schema

startDocumentstart element:dotsstart element:dotdot: 32, 100end element:dotstart element:dotuend element:dotustart element:dotdot: 18, 58end element:dotend element:dotsendDocument

Page 29: Persistenta datelor

Parser cu validarepublic class ValidatingXMLDotReader extends DefaultHandler {

// changes to create a validating parser

Static final String JAXP_SCHEMA_LANGUAGE= "http://java.sun.com/xml/jaxp/properties/schemaLanguage";

static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";

SAXParserFactory factory = SAXParserFactory.newInstance();

try {

factory.setValidating(true);

factory.setNamespaceAware(true);

SAXParser saxParser = factory.newSAXParser();

saxParser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);

saxParser.parse(new File(“dots.xml”), handler);

} catch (Exception ex) {

ex.printStackTrace();

}

Page 30: Persistenta datelor

Parser cu validare – evenimentul error

public void error(SAXParseException e)

throws SAXParseException

{

throw e;

}

Page 31: Persistenta datelor

Exceptii SAX – tratare in detaliutry {

}catch (SAXParseException spe) {

// Error generated by the parser

System.out.println(“Parsing Error: line ”+spe.getLineNumber()+” , ”+spe.getMessage());

} catch (SAXException sxe) {

// Error generated by application or parser initialization

} catch (ParserConfigurationException pce) {

// parser with specified options cann’t be built

}catch (IOException ioe) {

}catch (Throwable t) {

}

Page 32: Persistenta datelor

Cod Sursa Exemplu2

• Vezi pagina web: ValidatingXMLDotsReader.java

Page 33: Persistenta datelor

Rezultatele rularii• Se ruleaza ValidatingXMLDotReader pe varianta modifica

fisierul dots.xml care contine si alte nume de tag-uri (se inlocuieste al doilea tag dot cu dotu), nemaifiind conform cu schema

startDocumentstart element:dotsstart element:dot32, 100end element:dot

** Parsing error, line 5, uri file:/C:/Documents%20and%20Settings/user/Desktop/xml-marti/dots.xml cvc-complex-type.2.4.a: Invalid content was found starting with element 'dotu'. One of '{dot}' is expected.org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element 'dotu'. One of '{dot}' is expected. at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown Source)

Page 34: Persistenta datelor

DOM

http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JAXPIntro5.html

Page 35: Persistenta datelor

Element Node

• Un element/nod corespunde unei sectiuni cuprinsa intre <tag>… </tag>

• Un nod poate contine alte noduri child• Un nod poate avea atribute cu valori• Exista un nod radacina a documentului

Page 36: Persistenta datelor

Citirea unui XML Document in DOM

// Standard imports for XML

import javax.xml.parsers.*;

import org.xml.sax.*;

import org.xml.sax.helpers.*;

import org.w3c.dom.*;

....

Page 37: Persistenta datelor

Construirea parserului XML DOM

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

try { DocumentBuilder db = dbf.newDocumentBuilder(); // Gets default non-validating parser // Parse the XML to build the whole doc tree Document doc = db.parse(new File(“dots.xml”));

} catch (SAXParseException spe) { // Error handling code the same as with SAX

} catch (SAXException sxe) {

} catch (ParserConfigurationException pce) {

} catch (IOException ioe) {

} catch (Throwable t) {

}

Page 38: Persistenta datelor

Traversarea DOM

// Get root node of documentElement root = doc.getDocumentElement();

// Get list of children of given tag nameNodeList list = root.getElementsByTagName(“dot");

// Number of children in listint len = list.getLength();

// Get nth childElement elem = (Element) list.item(n);

// Get an attribute out of a element// (returns "" if there is no such attribute)String s = elem.getAttribute(“x");

Page 39: Persistenta datelor

Modificarea DOM in memorie

// Create a new node (still needs to be added)

Element elem = document.createElement(“dot");

// Append a child node to an existing node

node.appendChild(elem);

// Set an attribute/value binding in a node.

elem.setAttribute(“x”, “12”);

Page 40: Persistenta datelor

XSLT

http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JAXPIntro6.html

Page 41: Persistenta datelor

Scrierea DOM din memorie in XML

import javax.xml.transform.*;

import javax.xml.transform.dom.*;

import javax.xml.transform.stream.*;

// Document doc exists already in memory

try {

TransformerFactory tranFact = TransformerFactory.newInstance( );

Transformer tran = tranFact.newTransformer( );

DOMSource DSource = new DOMSource(doc);

StreamResult SResult = new StreamResult(new FileOutputStream(“copie.xml”));

tran.transform(DSource, SResult);

} catch (TransformerConfigurationException tce) {

} catch (TransformerException te) {

}

Page 42: Persistenta datelor

Cod Sursa Exemplu3

• Vezi pagina web: XMLDotsDOM.java

Page 43: Persistenta datelor

Concluzii: XML: Avantaje si dezavantaje

• Format standard– Similar fisierelor text – editabil manual, citibil direct

• Big and Slow:• Reprezentarea datelor in format text ocupa foarte mult spatiu !

• Adecvat pentru reprezentarea datelor din fisiere de configurare, sau ca format de transport al datelor

• NU este adecvat pentru reprezentarea continutului unei ”baze de date” de mari dimensiuni

Page 44: Persistenta datelor

Concluzii: XML: SAX sau DOM sau ...

• SAX: • mai rapid, consuma mai putina memorie

• Aplicatia trebuie sa isi construiasca singura modelul de date

• DOM: • construieste intai intregul model in memorie

• Modelul este mai usor de transformat si salvat din nou ca XML

• … Sau utilizand tool-uri care automatizeaza XML data binding:• XML data binding: procesul de reprezentare a informatiilor dintr-un

document XML ca obiect in memorie

• Tool-uri/API-uri care automatizeaza procesul de XML data binding: creaza automat mapari intre elementele dintr-o schema XML si campurile unei clase

• Exemplu: JAXB

Page 45: Persistenta datelor

JAXBThe Java Architecture for XML Binding (JAXB)

“provides a fast and convenient way to bind between XML schemas and Java representations”

http://java.sun.com/javaee/5/docs/tutorial/doc/bnazf.html