Laboratorio Di Basi Di Dati 12 P H P Gestione Di File X M L
Click here to load reader
-
Upload
guestbe916c -
Category
Technology
-
view
874 -
download
1
Transcript of 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>
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
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
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
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)>
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
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:
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)
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
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
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
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
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>
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
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){…}
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);
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