Laboratorio Di Basi Di Dati 12 P H P Gestione Di File X M L

17

Click here to load reader

Transcript of Laboratorio Di Basi Di Dati 12 P H P Gestione Di File X M L

Page 1: Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L

1

A.A. 2005/2006 Basi di Dati e Laboratorio 1

Corso di Basi di Dati e Laboratorio

PHP e XMLAlfio Ferrara - Stefano Montanelli

A.A. 2005/2006 Basi di Dati e Laboratorio 2

Introduzione

SGMLXML

HTMLXHTML

L’eXtensible Markup Language è un meta linguaggio di marcatura che costituisce un sottoinsieme proprio di SGML

A.A. 2005/2006 Basi di Dati e Laboratorio 3

Esempio<?xml version=“1.0” encoding=“UTF-8”><!–- XML document about books --><bookstore>

<book genre="autobiography"> <title>

The Autobiography of Benjamin Franklin</title> <author>

<first-name>Benjamin</first-name><last-name>Franklin</last-name>

</author> <price coin=“USDollar”>8.99</price>

</book><book genre="novel”>

<title>The Confidence Man</title> …

</book> </bookstore>

Page 2: Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L

2

A.A. 2005/2006 Basi di Dati e Laboratorio 4

Vantaggi

• Definizione formale della struttura del documento• Convalida della struttura• Flessibilità nel layout• Indipendenza dalla piattaforma• Definizione parziale della semantica del documento• Definizione di una base di dati semi-strutturata

Riferimento:World Wide Web Consortium (W3C)http://www.w3.org

A.A. 2005/2006 Basi di Dati e Laboratorio 5

Sintassi XML

• E’ composto da tag chiusi• I tag non sono sovrapposti• E’ presente la dichiarazione XML• Il documento ha una struttura ad albero

composta da nodi dotati di una sola radice

Dal punto di vista sintattico un documentoXML ben formato:

Non è obbligatorio un DTD esplicito

A.A. 2005/2006 Basi di Dati e Laboratorio 6

Sintassi XML – tag e attributi

<book genre="autobiography">

<title>

The Autobiography of

Benjamin Franklin

</title>

</book>

<bookstore>

</bookstore>

<?xml version=“1.0” encoding=“UTF-8”>

<!–- XML document about books -->

chiusura

apertura

contenuto

dichiarazione

radice

attributo commento

elemento

Page 3: Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L

3

A.A. 2005/2006 Basi di Dati e Laboratorio 7

Sintassi XML– struttura del documento

La struttura di un documento XML è definita dal suo DTD ed è costituita dalle relazioni fra gli elementiEssi devono dare origine ad una struttura ad albero ben formata:

radice

nodonodo

foglia fogliafoglia

A.A. 2005/2006 Basi di Dati e Laboratorio 8

Sintassi XML– esempio di struttura

La struttura di un documento XML è definita dal suo DTD ed è costituita dalle relazioni fra gli elementiEssi devono dare origine ad una struttura ad albero ben formata:

bookstore

bookbook

title authortitle

A.A. 2005/2006 Basi di Dati e Laboratorio 9

Sintassi XML – tipologie di errore

Errori di struttura

radice

nodonodo

foglia

nodo

foglia

<E1>testo<E2>testo</E1></E2>

<E1>testo<E2>testo</E2>

Errori di sintassi

Page 4: Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L

4

A.A. 2005/2006 Basi di Dati e Laboratorio 10

DTD – struttura logica

• Elementicontenutooccorrenze

• Attributitipovalori possibiliopzionalità

La gerarchia fra elementi vienedefinita ricorsivamente,

ponendo gli elementi figlicome contenuto degli

elementi genitore

I DTD (Document Type Definition) consistono in una grammatica formale attraverso la quale èpossibile definire:

A.A. 2005/2006 Basi di Dati e Laboratorio 11

DTD – sintassi

Le definizioni ammesse sono:• Elementi <!ELEMENT …>• Attributi <!ATTLIST …>• Notazioni <!NOTATION …>• Entità <!ENTITY …>

Una notazione è un qualunque dato che non può essere interpretato (o non si vuole venga interpretato) dal processore XML. Può trattarsi sia di dati binari che di testo

A.A. 2005/2006 Basi di Dati e Laboratorio 12

<!ELEMENT author(first-name+, last-name)>

DTD – elementi compositi

Esempio:<!ELEMENT book(title, author+, price?)>

Elenco dei sotto-elementiElementi compositi

<book > <title>Obsession</title> <author>

<first-name>Henry</first-name><first-name>James</first-name><last-name>York</last-name>

</author> </book>

Documento conforme Occorrenze

Fattori di ripetizione? Zero o più occorrenze+ Una o più occorrenze* Zero o più occorrenze(a|b) a o b, ma non entrambi(a,b) a e b in sequenza

Page 5: Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L

5

A.A. 2005/2006 Basi di Dati e Laboratorio 13

DTD – elementi semplici

Esempi:

<!ELEMENT title(#PCDATA)>

<!ELEMENT image EMPTY>

<!ELEMENT comment ANY>

<!ELEMENT chapter(#PCDATA|section)+>

Un elemento può contenere sia dati semplici che sotto-elementi

Testo

Vuoto

Qualsiasi dato

A.A. 2005/2006 Basi di Dati e Laboratorio 14

DTD – attributi

Esempi:<!ATTLIST image file NMTOKEN #IMPLIED

size CDATA “1MB”>

<!ATTLIST book genre (autobiography|novel)

ISBN ID #REQUIRED

references IDREFS>

<!ATTLIST chapter name CDATA #REQUIRED>

Elemento Attributo Tipo Vincolo

A.A. 2005/2006 Basi di Dati e Laboratorio 15

DTD – notazioni

Esempi:

<!NOTATION jpeg SYSTEM “C:\APPS\SHOWJPEG.EXE”>

<!NOTATION tiff SYSTEM “C:\APPS\SHOWTIFF.EXE”>

...

<!ELEMENT image EMPTY)>

<!ATTLIST image format NOTATION (jpeg | tiff)>

Page 6: Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L

6

A.A. 2005/2006 Basi di Dati e Laboratorio 16

DTD – entitàNel DTD:

<!ENTITY xml “eXtensible Markup Language”)>...

Nel documento XML:

<chapter> <section>

<name> related technologies </name><paragraph> &xml; technology comprises ...</paragraph>

... </section>

</chapter>

A.A. 2005/2006 Basi di Dati e Laboratorio 17

DTD – entitàNel DTD:

<!ENTITY structure “(paragraph|list|table)”>...<!ELEMENT section (name, (%structure;)*>

Nel documento XML:

<chapter> <section>

<name> related technologies </name><paragraph> &xml; technology comprises ...</paragraph>

... </section>

</chapter>

A.A. 2005/2006 Basi di Dati e Laboratorio 18

Dal DTD al documento XML<!DOCTYPE bookstore SYSTEM “books.dtd”><bookstore><book genre=“technical” ISBN=“01”>

<title> XML Companion </title><author><first-name> Neil</first-name><last-name> Bradley</last-name>

</author><chapter name=“Introduction”>

XML raises as a standard ... <section> <name> XML Technology </name> ...

</section> </chapter>...

</book>...</bookstore>

<!ENTITY structure “(paragraph|list|table)”> <!ELEMENT bookstore(book+)><!ELEMENT book(title, author+, chapter+)><!ATTLIST book genre (technical | fiction)

ISBN ID #REQUIREDreferences IDREFS>

<!ELEMENT title(#PCDATA)><!ELEMENT author(first-name+, last-name)><!ELEMENT first-name(#PCDATA)><!ELEMENT last-name(#PCDATA)><!ELEMENT chapter(#PCDATA|section)+><!ATTLIST chapter name CDATA #REQUIRED><!ELEMENT section (name, (%structure;)*>

Books.dtd

Page 7: Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L

7

A.A. 2005/2006 Basi di Dati e Laboratorio 19

DTD – principi di progettazione

• Rappresentare documenti XML esistenti• Definire uno standard per la

documentazione in un dato contesto• Rappresentare schemi di basi di dati

esistenti

La definizione di un DTD per un insieme di documenti XML può avere lo scopo di:

A.A. 2005/2006 Basi di Dati e Laboratorio 20

DTD regole di definizione

• per ogni elemento di un documento occorre chiedersi se può essere ripetuto o generalizzato, quale rapporto abbia con altri elementi, etc

• Definire lo scopo della marcatura, di carattere sintattico, strutturale o semantico

• Definire elementi e attributi possibili in un documento

La definizione di un DTD richiede una fase di analisi del materiale documentale e dei dati esistenti:

A.A. 2005/2006 Basi di Dati e Laboratorio 21

DTD regole di definizione

• Nomi semanticamente ricchi e brevi per i tag

• La struttura del documento (albero)• Caratteristiche e vincoli per entità e

attributi• Gli elementi nell’ordine: notazioni,

entità, elementi, attributi

Si passa dunque a progettare il DTD decidendo:

Page 8: Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L

8

A.A. 2005/2006 Basi di Dati e Laboratorio 22

XML Schema – caratteristiche

• Standard per la progettazione logica• Descrive la struttura di documenti XML• Utilizza la sintassi XML (è processabile da

un parser XML)• Presenta alcune nuove caratteristiche

rispetto ai DTD (tipi dei dati etc.)

A.A. 2005/2006 Basi di Dati e Laboratorio 23

XML Schema – esempio <schema>

<complexType name="tBook"><element name=”title" type="string”

minOccurs=’1' maxOccurs='1'/><element name=”pages” type="Integer"

minOccurs='0' maxOccurs='1'/><element name=”author” type=“tAuthor"

minOccurs=‘1' maxOccurs=‘unbounded'/></complexType><element name=”book" type="tbook"/><complexType name=“tTechnicalBook” base=“tBook”

derivedBy=“extension”><element name=”area" type="string"

minOccurs=’1' maxOccurs=’unbounded'/></complexType>...

</schema>

A.A. 2005/2006 Basi di Dati e Laboratorio 24

Il modello DOM

La struttura di un documento XML richiede che gli elementi e gli attributi che la compongono siano visibili ed accessibili per applicazioni esterne (ad esempio per le operazioni di parsing)

Nasce il problema di una interfaccia (API) fra XML e le applicazioni esterne (a prescindere dal linguaggio in cui sono scritte)

Per poter implementare nei diversi linguaggi delle interfacce verso XML occorre poter fare riferimento ad un protocollo univoco

Nasce lo standard W3C DOM (Document Object Model)

Page 9: Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L

9

A.A. 2005/2006 Basi di Dati e Laboratorio 25

DOM – caratteristiche

Modello ad oggetti di documenti XML

L’idea è quella che i diversi linguaggi (Java, C++, Python, php etc.) mettano a disposizione dello sviluppatore classi di oggetti utili a manipolare e creare elementi e attributi XML

A.A. 2005/2006 Basi di Dati e Laboratorio 26

DOM – modello di rappresentazione

<book type=“technical” ISBN=“01”><title> XML Companion </title><author><first-name>Neil</first-name><last-name>Bradley</last-name>

</author>...</book>

Sono previsti metodi per creare, manipolare, avere informazioni da e aggiornare i diversi oggetti

<book>

<title> <author>

<first-name>XML Companion

Neil

Type = “technical”

ISBN = “01”

<last-name>

Bradley

Il DOM definisce una struttura ad albero per ogni oggetto, allo scopo di rappresentarne le caratteristiche:

A.A. 2005/2006 Basi di Dati e Laboratorio 27

XPATH – caratteristiche

Il linguaggio XPATH è nato per rappresentare la posizione delle entità entro la struttura di un documento XML. Tale posizione è rappresentata da un percorso che permette di individuare l’elementoXPATH è utilizzato da altri linguaggi della famiglia XML (XSLT ed altri) per fare riferimento agli elementi del documento XML

Page 10: Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L

10

A.A. 2005/2006 Basi di Dati e Laboratorio 28

XPATH – espressioni

Un elemento può essere indicato da:

percorsi assoluti/

/book/title

percorsi relativititleauthor/first-name../title

I percorsi relativi fanno riferimentoal path che è necessario percorrere a partire dal contesto nel quali si ècollocati

Una espressione XPATH indica un elemento se esiste un elemento del documento che la soddisfa

root

book article

title

A.A. 2005/2006 Basi di Dati e Laboratorio 29

XPATH – caratteri speciali

Sono disponibili caratteri speciali che indicano in astratto parti dei percorsi

book/*/section (* indica un elemento qualsiasi)book/chapter/section

book//section (indica il percorso fra book e section)book/chapter/part/section

.//section (. indica la attuale posizione)

A.A. 2005/2006 Basi di Dati e Laboratorio 30

XPATH – espressioni di ricerca

elementi alternativibook/*/first-name | book/*/last-name

ricerca degli attributibook@genre

Page 11: Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L

11

A.A. 2005/2006 Basi di Dati e Laboratorio 31

XPATH – predicati

book[title = "XML Companion"]

book[@genre = "technical"]

book/chapter[name=“help” | name=“Support”]

book/chapter[position() = 1]

book[count(chapter) < 10]

book[title contains(text(), "XML")]

A.A. 2005/2006 Basi di Dati e Laboratorio 32

XSL – XML Style Sheet Language

Secondo lo stesso principio dei CSS i fogli di stile XSL appongono una formattazione ad un documento XML

Un processore XSL si occupa di mostrare il documento XML secondo un layout coerente a quello definito attraverso l’XSL

Le istruzioni XSL possono risiedere sia nel documento XML che in un file esterno

A.A. 2005/2006 Basi di Dati e Laboratorio 33

XSLT – XSL transformation

L’XSLT è lo standard proposto per la trasformazione di documenti XML in altri formati (o in XML formattato) attraverso l’uso di fogli di stile

Si prevede di usare un processore (xsltproc, 4XSLT, etc.) che filtra il documento XML attraverso il foglio di stile XSL e,sequenzialmente, produce in output il documento originale ad eccezione delle parti su cui l’XSL definisce delle regole di trasformazione

Queste ultime risultano trasformate nell’output

Page 12: Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L

12

A.A. 2005/2006 Basi di Dati e Laboratorio 34

XSLT – processore XSLT

XSL(T) Processor

XML Doc

XSLTDoc

textdoc

input output

oppure- XML- HTML- XML + XSL- TeX- ...

A.A. 2005/2006 Basi di Dati e Laboratorio 35

XSLT – regole di trasformazione<stylesheet xmlns = "http://www.w3.org/XSL/Transform/1.0">

<template match = "book/author">...</template>

...

<template match = "book/title">...</template>

</stylesheet>

Elemento root Namespace di default

Indica l’elemento su cui vaApplicata la trasformazione

(l’elemento viene individuatoattraverso una

espressione XPATH)

Regola di trasformazione

A.A. 2005/2006 Basi di Dati e Laboratorio 36

Processamento ricorsivo<template match = "bookstore"> <html><head><title> Technical Books </title></head><apply-templates/>

</html></template>

Trasformazione basata su predicati<template match = "book"><apply-template

select="book[@genre="technical"]"/>...

</template>

XSLT – regole di trasformazione

Processamento anche dei nodi figli

Predicato XPathChe seleziona i nodi figli

Page 13: Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L

13

A.A. 2005/2006 Basi di Dati e Laboratorio 37

XSLT – regole di trasformazione

Variables

<variable name = "alignment"> justify</variable>...<template match = “section"> <block text-align = "{$alignment}">

<value-of select = "."></block>

</template>

L’XSLT prevede anche l’uso di elementi procedurali, controlli di flusso etc.

dichiarazione

Valore della variabile

Inserisce il contenuto dell’elemento

A.A. 2005/2006 Basi di Dati e Laboratorio 38

XSLT – esempio di trasformazione

<testo><autore>N. Bradley</autore><titolo>Tutorial</titolo><sottotitolo>XML</sottotitolo><s1>…</s1>

</testo><xsl:stylesheet version="1.0“ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<xsl:output method=“html" indent="yes" encoding="ISO-8859-1"/><xsl:template match="/"><html><head><title><xsl:value-of select="titolo”></head><body><div><h1><xsl:value-of select="//testo/titolo“/></h1><h2><xsl:value-of select="//testo/sottotitolo“/></h2><span>di <i><xsl:value-of select="//testo/autore“/></i></span></div> …<xsl:for-each select="//s1"><div><xsl:apply-templates/></div></xsl:for-each></body></html></xsl:template>

<xsl:template match=“s1">… </xsl:template> …</xsl:stylesheet>

Frammento XML

Frammento XSL

A.A. 2005/2006 Basi di Dati e Laboratorio 39

XSLT – esempio di trasformazione

Frammento di output<html> <head>

<title>Tutorial</title> </head> <body>

<div> <h1>Tutorial</h1><h2>XML</h2><span>di <i>N. Bradley</i></span>

</div> <div>…</div>

…</body></html>

Page 14: Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L

14

A.A. 2005/2006 Basi di Dati e Laboratorio 40

Corso di Basi di Dati e Laboratorio

XML con PHPLettura e creazione di documenti XML

A.A. 2005/2006 Basi di Dati e Laboratorio 41

Parsing di XML

• SAX (Simple API for XML)– Il parser scorre il documento XML attivando

degli eventi in corrispondenza dell’apertura e chiusura dei tag. Il programma si occupa di gestire gli eventi sollevati dal parser

• DOM (Document Object Model)– Il parser analizza l’intero documento e ne

genera una rappresentazione ad albero in memoria. A quel punto il programma si occupa di navigare l’albero che rappresenta il documento

A.A. 2005/2006 Basi di Dati e Laboratorio 42

SAX e DOM

<?xml version=“1.0” encoding=“ISO-8859-1” ?><esempio>

<a><b>testo1</b>

</a><a>

<b>testo2</b><c>testo3</c>

</a></esempio>

esempioa

b

ab

c

esempio

a a

b

testo2

testo1

testo3

testo1

b c

testo2 testo3

SAX

DOM

Page 15: Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L

15

A.A. 2005/2006 Basi di Dati e Laboratorio 43

Soluzioni PHP

• Librerie native– SAX– DOM

• SimpleXML• PEAR

A.A. 2005/2006 Basi di Dati e Laboratorio 44

SAX

• Creazione di un handle al parser XML– $xml = xml_parser_create(‘UTF-8’);

• Inizializzazione degli handler per gli eventi SAX– xml_set_element_handler($xml, ’opentag’,’closetag’);– xml_set_character_data_handler($xml, ’content’);

• Prima di eseguire il parsing occorre implementare gli handler specificati in precedenza

• Il parser ha delle opzioni, come ad esempio il folding– xml_parser_set_option($xml,

XML_OPTION_CASE_FOLDING, false)

A.A. 2005/2006 Basi di Dati e Laboratorio 45

Handler

• Esempio di implementazione degli handler– function opentag($xml,$tag,$attr){…}– function closetag($xml,$tag){…}– function content($xml,$data){…}

Page 16: Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L

16

A.A. 2005/2006 Basi di Dati e Laboratorio 46

DOM

• Inizializzazione di un nuovo oggetto DOM– $dom = new DomDocument();– $dom->load(‘file’);

• Individuazione del nodo radice– $root = $dom->documentElement;

• Individuazione dei nodi figli– $root->childNodes;

• Individuazione del tipo di nodo– $node->nodeType;

A.A. 2005/2006 Basi di Dati e Laboratorio 47

Tipi di nodo

• I possibili tipi di nodo sono– XML_TEXT_NODE– XML_ELEMENT_NODE

• Altri metodi utili del nodo– nodeName– getAttributeNode

• Altri metodi della classe– getElementsByTagName

A.A. 2005/2006 Basi di Dati e Laboratorio 48

Uso di XPath

• Un nodo può essere ricercato anche per mezzo di espressioni XPath– $x = new DomXPath($dom);– $nodes = $x->query(“interrogazione xpath”,

$dom->documentElement);

Page 17: Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L

17

A.A. 2005/2006 Basi di Dati e Laboratorio 49

Creazione di documenti

• Creazione dell’elemento radice– $root->createElement(‘nome’);– $dom->appendChild($root);

• Creazione degli attributi– $node->setAttribute(“nome”, “valore”);

• Inserimento dei nodi– $node->appendChild($nuovo_nodo);

• Inserimento di nodi di testo– $nuovo_nodo->appendChild($dom->

createTextNode(“contenuto”));• Salvataggio

– $dom->saveXML();

A.A. 2005/2006 Basi di Dati e Laboratorio 50

Altre librerie di supporto

• Oltre alle principali PHP offre anche altre librerie di supporto

• Si ricordano in particolare:– SimpleXML– PEAR::XML_Tree e PEAR::XML_RSS– PEAR::XML_Transformer (alternativo a XSLT)– PEAR::SOAP