La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

DBMS & Web. Il Web è una architettura software di tipo client-server, nella quale sono previste due tipologie di componenti software: il client e il server,

Presentazioni simili


Presentazione sul tema: "DBMS & Web. Il Web è una architettura software di tipo client-server, nella quale sono previste due tipologie di componenti software: il client e il server,"— Transcript della presentazione:

1 DBMS & Web

2 Il Web è una architettura software di tipo client-server, nella quale sono previste due tipologie di componenti software: il client e il server, ciascuno avente compiti ben definiti. Elaboratore Server Elaboratore Client Internet HW SW Software Client Software Server Larchitettura client-server del WWW

3 Il client è lo strumento a disposizione dell'utente che gli permette l'accesso e la navigazione nell'ipertesto del Web. Esso ha varie competenze tra le quali: 1) Trasmettere all'opportuno server le richieste di reperimento dati che derivano dalle azioni dell'utente 2) Ricevere dal server le informazioni richieste 3) Visualizzare il contenuto della pagina Web richiesta dall'utente, gestendo tutte le tipologie di informazioni in esse contenute I client vengono comunemente chiamati browser (sfogliatori) (es: Netscape Navigator; Internet Explorer). Larchitettura client-server del WWW

4 Il server è tipicamente un processo in esecuzione su un elaboratore. Esso è sempre in esecuzione ed ha delle incombenze molto semplici: 1) rimanere in ascolto di richieste da parte dei client 2) fare del suo meglio per soddisfare ogni richiesta che arriva: - se possibile, consegnare il documento richiesto - altrimenti, spedire un messaggio di notifica di errore (documento non esistente, documento protetto, ecc.) I server vengono comunemente chiamati demoni-HTTP o web server Larchitettura client-server del WWW

5 Web & basi di dati zObiettivi: : yottenere la generazione dinamica di pagine a partire da dati contenuti in una base di dati ysfruttare i pregi di Web e basi di dati, aggirandone i difetti

6 Pregi e difetti di basi di dati e Web lWeb zPro ysemplice yportabile ya basso costo yindipendente dalle interfacce yipermediale zContro ybasato su file ystatico l Basi di dati z Pro ymodelli dei dati ylinguaggi di interrogazione yfunzioni di amministrazione z Contro ycomplesse yproprietarie ynavigazione e presentazone assenti

7 Problema Browser/server? Tecnologia?

8 Architettura generale a livelli Livello applicativo (Business logic) User interface Livello di connessione al DB DBMSdatabase

9 Una gerarchia di soluzioni Tecnologie Web/ Database Elaborazioni server side Elaborazioni client side Programmi compilati Script programmi compilati Programmi per servizi CGI Java Servlet ASP PHP JSP Java Applet programmi Active X JavaScript VBScript

10 Apriamo una parentesi... zIl problema principale nelle architetture client-server è lesistenza di client eterogenei: yBackend: database server yFrontend: gui/forms/interfaccie web zNasce il problema di capire come le applicazioni client possano comunicare con il server: ycome descrivere le query ycome descrivere i risultati delle query zPrima soluzione: uso SQL ySvantaggi: cambiando server potrebbe essere necessario cambiare il client, in quanto lo specifico dialetto SQL potrebbe cambiare zNecessità di accedere i dati in modo interoperabile, cioè indipendente dallo specifico server considerato yse cambia il server non cambia lapplicazione yi tempi di sviluppo applicazioni client si riducono

11 Introduzione zLinteroperabilità rappresenta il problema principale nello sviluppo di applicazioni eterogenee per sistemi distribuiti zRichiede la disponibilità di funzioni di adattabilità e di conversione che rendano possibile lo scambio di informazione tra sistemi, reti ed applicazioni, anche se eterogenei zIn riferimento ai sistemi di gestione dei dati, linteroperabilità ha richiesto lo sviluppo di standard adeguati, nella forma di API (Application Program Interface) yODBC yJDBC

12 Introduzione zPer comprendere la necessità di comunicare attraverso API con un DBMS, consideriamo come sia possibile in generale realizzare questa comunicazione: yembedded SQL ymoduli SQL ycall-level interface (CLI)

13 Introduzione zEmbedded SQL: ySQL inserito in un linguaggio di programmazione ystatement processati da uno speciale precompilatore ypuò essere: xstatico (statement noti a compile-time) xdinamico (statement generati a run-time) ymeccanismo di interazione standard ma il codice dipende dal DBMS prescelto xcambiando DBMS lapplicazione deve essere nuovamente compilata yEsempio: per Java SQLJ

14 Introduzione zModuli yOgni modulo racchiude un insieme di statement SQL yun modulo può essere interpretato come un oggetto di libreria legato al codice applicativo yquesto collegamento dipende dallimplementazione: xle procedure possono essere compilate e linkate al codice applicativo xpossono essere compilate e memorizzate nel DBMS e chiamate dal codice applicativo xpossono essere interpretate ychiara separazione tra statement SQL e linguaggio di programmazione ymeccanismo di interazione standard ma il codice dipende dal DBMS prescelto xcambiando DBMS lapplicazione deve essere nuovamente compilata yEsempio: SQL Server Stored procedures

15 Introduzione zCall-level interface ylibreria di funzioni del DBMS che possono essere chiamate dai programmi applicativi ysimile alle tipiche librerie C ypassi tipici: xlapplicazione effettua una chiamata ad una funzione CLI per connettersi al DBMS xlapplicazione crea uno statement SQL e lo inserisce in un buffer, quindi chiama una o più funzioni CLI per inviare lo statement al DBMS per lesecuzione xse lo statement è di tipo SELECT, la funzione restituisce le tuple del risultato xse è di tipo INSERT, DELETE, UPDATE, la funzione restituisce il numero di tuple modificate xse è di tipo DDL, non viene restituito alcun valore significativo xlapplicazione effettua una chiamata ad una funzione CLI per disconnettersi dal DBMS

16 Introduzione zTra i tre livelli di interazione precedenti, le CLI sembrano il meccanismo più adeguato per garantire interoperabilità: yindipendenti dal codice client ylapplicazione cambia interazione con il server chiamando in modo opportuno le funzioni di libreria ychiara distinzione tra interfaccia ed implementazione yuna stessa applicazione binaria può funzionare considerando diversi DBMS zNecessità di standardizzazione yle applicazioni devono potere accedere DBMS diversi usando lo stesso codice sorgente yle applicazioni devono potere accedere DBMS diversi simultaneamente yODBC, JDBC si possono vedere come CLI ottenute come risultato del processo di standardizzazione xODBC: libreria C xJDBC: libreria Java

17 Architettura di riferimento API

18 Applicazione zUnapplicazione è un programma che chiama specifiche funzioni API per accedere ai dati gestiti da un DBMS zpuò anche essere unapplicazione Web zFlusso tipico: yselezione sorgente dati (DBMS e specifico database) e connessione ysottomissione statement SQL per lesecuzione yrecupero risultati e processamento errori ycommit o rollback della transazione che include lo statement SQL ydisconnessione

19 Driver Manager zÈ una libreria che gestisce la comunicazione tra applicazione e driver zrisolve problematiche comuni a tutte le applicazioni yquale driver caricare, basandosi sulle informazione fornite dallapplicazione ycaricamento driver ychiamate alle funzioni dei driver zlapplicazione interagisce solo con il driver manager

20 Driver zSono librerie dinamicamente connesse alle applicazioni che implementano le funzioni API zciascuna libreria è specifica per un particolare DBMS ydriver Oracle è diverso dal driver Informix ztraducono le varie funzioni API nel dialetto SQL utilizzato dal DBMS considerato (o nellAPI supportata dal DBMS) zil driver maschera le differenze di interazione dovute al DBMS usato, il sistema operativo e il protocollo di rete zSi occupano in particolare di: yiniziare transazioni ysottomettere statement SQL yinviano dati e recuperano dati ygestiscono errori

21 DBMS zIl DBMS sostanzialmente rimane inalterato nel suo funzionamento z riceve sempre e solo richieste nel linguaggio supportato zesegue lo statement SQL ricevuto dal driver e invia i risultati

22 ODBC (Open DataBase Connectivity) zStandard proposto da Microsoft nel 1991 zSupportata da praticamente tutti i sistemi di gestione dati relazionali zOffre allapplicazione uninterfaccia che consente laccesso ad una base di dati non preoccupandosi di: yil particolare dialetto di SQL yil protocollo di comunicazione da usare con il DBMS yla posizione del DBMS (locale o remoto) zè possibile connettersi ad un particolare DB tramite una DSN (Data Source Name), che contiene tutti i parametri necessari alla connessione con il DB: yprotocollo di comunicazione ytipo di sorgente dati (es: Oracle DBMS) yspecifico database

23 ODBC zIl linguaggio supportato da ODBC è un SQL ristretto, caratterizzato da un insieme minimale di istruzioni zQuesta è una scelta obbligata se si vuole permettere un cambio di DBMS lasciando inalterati i client zIl linguaggio permette di eseguire query statiche per applicazioni di tipo tradizionale o dinamiche, per applicazioni interattive zNel primo caso eventuali errori di SQL sono riportati al momento stesso della compilazione zArchitettura conforme a quando descritto in generale zFunzioni implementate in C, quindi non completamente portabili

24 Architettura

25 zDriver Manager: ysu Windows, fornito con il sistema operativo ycon Linux, deve essere installato zDriver: yforniti con il DBMS a cui si riferiscono yspesso installati e registrati a livello Driver Manager quando si installa il DBMS client

26 Funzionamento di una query ODBC

27 Come registrare una DSN? zI driver ODBC mettono in genere a disposizione tool di amministrazione che permettono di specificare tutti i dettagli relativi ad un DSN (Data Source Name) zDSN: Data Source Name, è la stringa che identifica: ytipo di driver ytipo di comunicazione ytipo di database ynome database zDopo la registrazione, queste informazioni sono a disposizione del Driver Manager

28 Vantaggi e svantaggi zVantaggi yastrazione (almeno teorica) rispetto al DBMS utilizzato ydiffusione: supportato almeno parzialmente da molti DBMS commerciali e non ynon modifica il server zSvantaggi yper ogni coppia (piattaforma client, server) serve un driver specifico (strategia commerciale Microsoft) ygran parte del lavoro è demandata al driver, che diventa quindi cruciale per il funzionamento

29 Universal Data Access zODBC rientra nella strategia Microsoft Universal Data Access, che ha come obiettivo laccesso ai dati (non solo alle basi di dati) indipendentemente dal linguaggio e dagli strumenti utilizzati zUniversal Data Access include I seguenti elementi: yODBC yOLE DB: insieme di interfaccie di programmazione di basso livello per laccesso a dati eterogenei yADO (ActiveX Data Objects): interfaccie ad alto livello per interagire con ADO (ADO, RDS, ADOX, ADO MD) xADO è forse la più conosciuta (utilizzata per interagire con DBMS da pagine ASP)

30 JDBC (Java Database Connectivity) zODBC è unAPI sviluppata in C che richiede API intermedie per essere utilizzata con altri linguaggi zInoltre è difficile da capire: alcuni concetti vengono portati a livello interfaccia ma sarebbe meglio mantenerli nascosti zJDBC (che non è solo un acronimo ma un trademark della SUN) è stato sviluppato nel 1996 dalla Sun per superare questi problemi zè compatibile ed estende X/open SQl CLI e ISO SQL/CLI

31 JDBC zRappresenta una API standard per interagire con basi di dati da Java zcerca di essere il più semplice possibile rimanendo al contempo flessibile zpermette di ottenere una soluzione pure Java per linterazione con DBMS yindipendenza dalla piattaforma

32 Architettura generale JDBC API Java Applications JDBC Driver Manager JDBC Driver DBMS API

33 Tipi di driver zEsistono quattro tipi di driver: JDBC-ODBC Bridge + ODBC Driver A native-API partly Java technology-enabled driver Pure Java Driver for Database Middleware Direct-to-Database Pure Java Driver.

34 Tipi di driver Direct-to-Database Pure Java Driver Pure Java Driver for Database Middleware JDBC-ODBC Bridge plus ODBC Driver A native-API partly Java technology-enabled driver 1234

35 Driver di tipo 1 zAccesso a JDBC tramite un driver ODBC zUso di JDBC-ODBC bridge zil codice ODBC binario e il codice del DBMS client, deve essere caricato su ogni macchina client che usa JDBC- ODBC bridge zsi consiglia di utilizzare questa strategia quando non esistono soluzioni alternative … zè necessario installare le librerie sul client perché non sono trasportabili su HTTP zcompromette write once, run anywhere

36 Driver di tipo 2 zLe chiamate a JDBC vengono tradotte in chiamate allAPI del DBMS prescelto (es. OCI Oracle) zIl driver contiene codice Java che chiama metodi scritti in C/C++ znon utilizzabile per applet/servlet zanche in questo caso, codice binario deve essere caricato sul client zcompromette write once, run anywhere

37 Driver di tipo 3 zBasato completamente su Java (utilizzabile con Applet/servlet) zconverte le chiamate JDBC nel protocollo di una applicazione middleware che traduce quindi la richiesta del client nel protocollo proprietario del DBMS zlapplicazione middleware può garantire laccesso a diversi DBMS zil protocollo middleware dipende dal DBSM sottostante

38 Driver di tipo 4 zBasato completamente su Java (utilizzabile con Applet/servlet) zconverte le chiamate JDBC nel protocollo di rete usato direttamente dal DBMS zpermette quindi un accesso diretto dalla macchina client alla macchina server zè la soluzione più pura in termini Java

39 Caratteristiche e benefici Benefici: Flessibilità semplice ed economico non è richiesta alcuna configurazione a livello client Caratteristiche: installazione semplice facile accesso ai metadati (non li vediamo) possibilità di accedere database tramite URL

40 Tipi di dato zIn maniera analoga ad ODBC, JDBC definisce un insieme di tipi SQL, che vengono poi mappati in tipi Java Gli identificatori sono definiti nella classe java.sql.Types

41 Interfaccia JDBC (semplificata - solo le classi che vedremo) Driver Connection Statement ResultSet Java.sql.* DriverManager classe interfaccie

42 Eccezioni La classe java.sql.SQLException estende la classe java.lang.Exception in modo da fornire informazioni ulteriori in caso di errore di accesso al database, tra cui: yla stringa SQLState che rappresenta la codifica dellerrore in base allo standard X/Open xgetSQLState() yil codice di errore specifico al DBMS xgetErrorCode() yuna descrizione dellerrore xgetMessage()

43 Passo 1: Caricamento driver zIl driver manager mantiene una lista di classi che implementano linterfaccia java.sql.Driver zlimplementazione del Driver deve essere registrata in qualche modo nel DriverManager zJDBC richiede che, quando una classe Driver viene caricata, crei uninstanza ed effettui anche la registrazione

44 Passo 1: caricamento driver zDue modi: yClass.forName("sun.jdbc.odbc.JdbcOdbcDriver"); newinstance() si può omettere se viene direttamente effettuata linizializzazione yDriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver()); zIl nome della classe da usare viene fornito con la documentazione relativa al driver

45 Esempio di caricamento driver import java.sql.*; class JdbcDriver { public static void main (String args []) { try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); }

46 Passo 2: Connessione zPer realizzare la connessione vengono utilizzate le seguenti classi ed interfaccie: classe java.sql.DriverManager : gestisce la registrazione dei driver interfaccia java.sql.Driver : non viene esplicitamente utilizzata a livello applicativo interfaccia java.sql.Connection : permette di inviare una serie di richieste SQL al DBMS zÈ possibile connettersi a qualunque database, locale e remoto, specificandone lURL zin JDBC, lURL è formato da tre parti: jdbc: : y identifica il driver o il meccanismo di connessione al database y dipende da subprotocol ed identifica lo specifico database

47 Connessione zse si usa JDBC-ODBC driver: jdbc:odbc:subname dove subname è il nome della DSN ODBC zEsempio: jdbc:odbc: giuntiDSN

48 Connessione La connessione avviene chiamando il metodo getConnection della classe DriverManager, che restituisce un oggetto di tipo Connection Connection con = DriverManager.getConnection(jdbc:odbc:giuntiDSN, "myLogin", "myPassword"); zSe uno dei driver caricati riconosce lURL fornito dal metodo, il driver stabilisce la connessione

49 Esempio di connessione import java.sql.*; class JdbcConn { static String ARS_URL = "jdbc:odbc:giuntiDB"; public static void main (String args []) { try{ Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); } } }

50 Passo 3: creazione ed esecuzione statement zPer creare ed eseguire uno statement vengono utilizzate le seguenti classi: java.sql.Connection : per creare lo statement java.sql.Statement : permette di eseguire gli statement java.sql.ResultSet : per analizzare i risultati delle query zun oggetto di tipo Statement viene creato a partire da un oggetto di tipo Connection e permette di inviare comandi SQL al DBMS : Connection con; … Statement stmt = con.createStatement();

51 Esecuzione statement zCome in ODBC, è nenessario distinguere tra statement che rappresentano query e statement di aggiornamento Per eseguire una query: stmt.executeQuery(SELECT * FROM IMPIEGATI"); Per eseguire una operazione di aggiornamento, inclusi gli statement DDL: stmt.executeUpdate(INSERT INTO IMPIEGATI VALUES AB34,Gianni, Rossi,GT67,1500"); stmt.executeUpdate("CREATE TABLE PROVA (CAMPO1 NUMBER)); zil terminatore dello statement (es. ;) viene inserito direttamente dal driver prima di sottomettere lo statement al DBMS per lesecuzione

52 Prepared Statement zCome in ODBC, è possibile preparare gli statement prima dellesecuzione zQuesto garantisce ystatement precompilato yriduce i tempi di esecuzione yusate per statement utilizzati molte volte PreparedStatement queryImp = con.prepareStatement( SELECT * FROM IMPIEGATI"); queryImp.executeQuery():

53 Uso di parametri zÈ possibile specificare che la stringa che rappresenta lo statement SQL deve essere completata con parametri (eventualmente letti da input) identificati da ? zQuesto è possibile anche in ODBC (non visto) zSi noti luso di e (devono essere alternati) zsetXXX, dove XXX è il tipo Java del valore del parametro PreparedStatement queryImp = con.prepareStatement( SELE CT * FROM IMPIEGATI WHERE Nome = ? AND Dip# = ? "); queryImp.setString(1, Rossi); queryImp.executeQuery();

54 Passo 4: Elaborazione risultato zJDBC restituisce i risultati di esecuzione di una query in un result set, come ODBC String query = " SELECT * FROM IMPIEGATI "; ResultSet rs = stmt.executeQuery(query); zCome in ODBC, il result set è costruito solo per query e non per INSERT, DELETE, UPDATE zIn questo caso viene restituito un intero, che rappresenta il numero di tuple modificate zPer muoversi su un result set si deve utilizzare il metodo next: while (rs.next()) { String s = rs.getString(Cognome"); float n = rs.getFloat(Stipendio"); System.out.println(s + " " + n); }

55 Metodi per accedere i valori associati agli attributi Il metodo getXXX, di un ResultSet, permette di recuperare il valore associato ad un certo attributo, puntato correntemente dal cursore. XXX è il tipo Java nel quale il valore deve essere convertito String s = rs.getString(Cognome"); zGli attributi possono anche essere acceduti tramite la notazione posizionali: String s = rs.getString(2); int n = rs.getInt(5); Usare getInt per valori numerici, getString per char, varchar

56 Metodi per accedere i valori associati agli attributi zIl metodo next() permette di spostarsi nel result set (cursore): while (rs.next()) {/* get current row */} zinizialmente il cursore è posizionato prima della prima tupla zil metodo diventa falso quando non ci sono più tuple

57 Esempio esecuzione diretta zVedi JdbcQueryDirect.java

58 Esempio prepared statement zVedi JdbcQueryPrep.java

59 Passo 5: Transazioni zPer default, JDBC esegue il commit di ogni statement SQL inviato al DBMS (auto-commit) è possibile disattivare lautocommit tramite il metodo setAutoCommit Connection con; … con.setAutoCommit(false); za questo punto ogni connessione diventa una transazione indipendente per la quale si può richiedere il commit o labort tramite: con.commit(); con.rollback();

60 Esempio transazioni zVedi JdbcTrans.java

61 Passo 6: Disconnessione (chiusura) Per risparmiare risorse, può essere utile chiudere gli oggetti di classe Connection, Statement, ResultSet quando non vengono più utilizzati metodo close() la chiusura di un oggetto di tipo Connection chiude tutti gli Statement associati mentre la chiusura di uno Statement chiude ResultSet associati

62 Soluzioni lato client

63 Soluzioni lato client: sistema classico a 2-strati Elaboratore Server Elaboratore Client Internet Browser Applet Java programmi Active X JavaScript User System Interface Strato 1 Strato 2 Data Management System Base di dati File System Business Logic

64 Livelli Web server Web Browser JDBC DBMSdatabase Estensione browser Socket TCP

65 Estensione al browser zLe tecnologie lato client si possono tutte vedere come approcci che estendono le funzionalità del browser: ytramite applicazioni Java xApplet ytramite script xJavaScript xVBScript zIn entrambi i casi, è possibile comunicare con il DBMS tramite protocolli di comunicazione (JDBC da Applet)

66 Vantaggi e svantaggi zVantaggi ypermette in modo semplice di manipolare i dati inseriti dallutente yfacile da usare yflessibile zSvantaggi ycarica di lavoro il client yproblematiche di sicurezza ytipicamente usata per gestire linterfaccia e non per gestire la logica applicativa ymeno usate e flessibili rispetto alla tecnologia lato server

67 Applet e DBMS zIn quanto applicazione Java, lapplet può comunicare con un DBMS tramite JDBC yUnico problema: il DBMS deve risiedere sullhost dal quale proviene lapplet zLapplet può anche invocare servlet o programmi CGI, che risiedono sullhost dal quale proviene lapplet, tramite socket yquesti programmi possono a loro volta connettersi ad un DBMS remoto yapplet: gestione interfaccia servlet: gestione logica applicativa ysoluzione che permette di distribuire il carico di lavoro tra client e server

68 Esercitazione proposta zEstendere lapplet sviluppata durante le lezioni di Java per: yleggere tutti (o alcuni) dati di un corso (sicuramente tutti quelli che non possono essere nulli) yinserire I dati del corso nella tabella corrispondente ynella finestra di dialogo visualizzare: xInserimento effettuato, se linserimento è andato a buon fine xErrore in inserimento, se si verifica qualche errore zEstendere lapplet sviluppata durante le lezioni di Java per: ychiedere allutente una certa materia yvisualizzare tutti I corsi relativi a quella materia

69 Suggerimento zIncludere java.sql.* zintrodurre nuovi textfield e label, una per ogni informazione da inserire zassociare al bottone submit la comunicazione con il DBMS: yconnessione ycostruzione statement SQL (conviene farlo preparato) yesecuzione statement yanalisi risultato yimpostazione finestra di dialogo (eventuale)

70 Osservazione zSe viene effettuata la connessione o la preparazione degli statement nel codice associato al tasto SUBMIT, tali operazioni vengono eseguite ogni volta che si preme il bottone zse lutente usa il tasto più volte, vengono generate inutilmente tante connessioni e tanti statement preparati zSoluzione: yassociare queste operazioni a metodi particolari

71 Ciclo di vita Un applet si definisce creando una sottoclasse Java della classe predefinita Applet zIn genere un applet ridefinisce i seguenti metodi: init() : inizializza lapplet ogni volta che viene caricata start() : codice eseguito al momento del caricamento dellapplet e ogni volta che si visita la pagina ad essa collegata stop() : termina lesecuzione dellapplet, quando si lascia la pagina collegata allapplet destroy() : pulizia prima di scaricare lapplet

72 Quindi... zLapplet potrebbe essere organizzata nel modo seguente: yinit() xconnessione + prepared statement ydestroy() xdisconnessione zoppure ystart() xconnessione + prepared statement ystop() xdisconnessione

73 Soluzioni lato server

74 Elaboratore ServerElaboratore Client Internet Browser Script CGI Servlet linguaggi di scripting server side Soluzioni lato server: sistema classico a 3-strati Business Logic User System Interface Strato 2Strato 1Strato 3 DBMS Base di dati File System Internet Server DBMS

75 Approcci zProgrammi compilati yCGI yJava Servlet zLinguaggi di scripting yASP yPHP yJSP

76 CGI zProtocollo che consente al Web Server di eseguire applicazioni esterne in grado di creare pagine dinamicamente zDefinisce un insieme di variabili di ambiente utili alla applicazione (ad esempio, parametri inviati dal client tramite form) zLapplicazione può essere scritta in un qualsiasi linguaggio (C, Java, linguaggi per script) o usare i comandi di una shell zGli eseguibili devono essere inseriti in una directory gestita dal Web Administrator (/cgi-bin) zIl Web Server deve permettere la gestione delle variabili di ambiente

77 Elaboratore Server Elaboratore ClientInternet Base di dati 1) Invio dati Form 2) Passaggio dati Form allo script (CGI) 6) Risultati (Html) Browser Web Server Script CGI 5) Risultati (Html) Script CGI 3) Query al DBMS Base di dati (DBMS) 4) Risultati Query CGI : interazione con base di dati Server DBMS Internet

78 CGI: livelli Programma CGI Web browserDBMSdatabase Server HTTP ODBCJDBCDBMS API

79 Java servlet Java Servlet si riferisce ad un particolare package: java.servlet zcon Java Servlet intendiamo unapplicazione Java in esecuzione su una JVM residente sul server z fornisce una serie di servizi in base al paradigma richiesta- risposta: yclient invoca la servlet nel contesto di una FORM HTML (come CGI) yla servlet esegue le operazioni richieste (come CGI) yla servlet ridirige loutput al client in forma di pagina HTML (come CGI) zDifferenza rispetto a CGI: la servlet corrisponde ad un processo che viene caricato solo una volta anche se viene utilizzato per eseguire più operazioni distinte

80 Java Servlet zAltri vantaggi: yindipendenza dalla piattaforma, grazie a Java ysicurezza gestita mediante security manager della JVM ygestione degli errori con il meccanismo delle eccezioni Java ydisponibilità: distribuzione gratuita di Java Servlet Development Kit, contenente la libreria Java Servlet zWeb Server deve essere esteso con un servlet engine

81 Servlet: funzionamento Elaboratore Server Elaboratore ClientInternet Java Servlet 1) Invio Dati Form 2) eventuale attivazione 5) Risultati (Html) Browser Web Server Servlet 3) Esecuzione Servlet 4) Risultati (Html)

82 Elaboratore Server Elaboratore ClientInternet 1) Invio dati Form 2) Eventuale attivazione + Esecuzione Servlet 6) Risultati (Html) Browser Web Server Servlet 5) Risultati (Html) Servlet 3) Query al DBMS Base di dati (DBMS) 4) Risultati Query Servlet: interazione con base di dati Base di dati Server DBMS Internet

83 Ciclo di vita Caricamento e inizializzazione Gestione richieste Rimozione servlet

84 Interazione con il DBMS zInit: yconnessione zDoGET, DoPost: yinterazione zDestroy: ysconnessione

85 Servlet: livelli Servlet Web browserDBMSdatabase Server HTTP JDBC

86 I linguaggi di scripting server- side zCGI, Java Servlet sono architetture general-purpose per eseguire applicazioni via HTTP e sono complesse da programmare zla presentazione è prodotta dal codice stesso: yi programmatori devono scrivere del codice per produrre HTML xnon sono tenuti a conoscerlo ygli esperti di HTML devono conoscere il linguaggio utilizzato (es. Java) xnon sono tenuti a conoscerlo zAttualmente in alternativa a questi approcci sono disponibili i cosiddetti linguaggi di scripting lato server (Server-Side) che permettono di generare pagine dinamiche zUna pagina dinamica è costituita da HTML e da codice compreso tra tag speciali ( ) ychiara separazione tra contenuto e presentazione zEsistono molti linguaggi di scripting come : JSP,ASP, PHP Il Web Server deve essere esteso in modo da riconoscere le pagine dinamiche e possa inviarle al motore di scripting (Script Engine) che le interpreta e le esegue restituendo il risultato dellelaborazione

87 Differenze tra scripting client/server side Il codice script è interpretato dal browser CLIENT Il codice script è interpretato dal server il browser riceve HTML puro SERVER

88 Il funzionamento di base Elaboratore Server Elaboratore ClientInternet Script 1) Richiesta script 2) Avvio dello Script Engine * 5) Risultati (Html) Browser Web Server 3) Esecuzione Script 4) Risultati (Html) * Allo Script Engine viene passato come parametro il nome del file da interpretare Script

89 Il funzionamento con le form Elaboratore Server Elaboratore ClientInternet Script 1) Invio Dati Form 2) Passaggio Dati Form allo script (CGI) * 5) Risultati (Html) Browser Web Server Script 3) Esecuzione Script 4) Risultati (Html) * 1) Allo Script Engine viene passato come parametro il nome del file da interpretare 2) Lo standard CGI fornisce i dati inviati tramite la form allo script tipicamente mediante variabili dambiente

90 Elaboratore Server Elaboratore ClientInternet Base di dati 1) Invio dati Form 2) Passaggio dati Form allo script (CGI) 6) Risultati (Html) Browser Web Server Script 5) Risultati (Html) Script 3) Query al DBMS Base di dati (DBMS) 4) Risultati Query Interazione con il DBMS Server DBMS Internet

91 Livelli Script Engine Web browserDBMSdatabase Server HTTP JDBCODBCDBMS API

92 ASP zASP (Active Server Pages ) è un linguaggio di scripting Server-Side zSoluzione di Microsoft per creare pagine Web dinamiche zSito ufficiale: zCaratteristiche: ynon è portabile yindipendenza dal tipo di browser utilizzato xil browser vede solo pagine HTML xlutente non ha bisogno di programmi proprietari o estensioni del browser ysintassi semplice (insieme limitato di statement Visual Basic) ynasconde la presenza di script agli utenti ysupporto ODBC per i maggiori DBMS yinterpretato

93 Le pagine in ASP zLe Active Server Pages (ASP) sono inserite nei file con estensione.asp. zUn file.asp è un file testuale che contiene i seguenti elementi: yTag HTML yCodice di script racchiuso tra Tag speciali yil linguaggio di scripting non è fissato xnoi useremo Jscript, versione Microsoft di JavaScript zapproccio object-oriented

94 ASP in SQL Server ADO OLE DB ODBC

95 ASP e DBMS zLa comunicazione con un DBMS avviene tramite ADO, uninterfaccia object-oriented, molto simile come strutturazione a JDBC zOggetti principali supportati da ADO: yConnection: rappresenta una singola connessione al DBMS yCommand: comando da inviare al DBMS xpuò anche contenere parametri yRecordset: insieme ottenuto come risultato di uninterrogazione yRecord: elemento di un recordset yError: dettaglio errori DBMS, specifici ad una connessione

96 Flusso tipico zConnessione alla base di dati zspecifica comando zesecuzione comando (eventualmente settando parametri) zanalisi risultato zgenerazione output da inviare al client

97 Connessione zDue possibilità yconnessione a OLE DBnon la vediamo yconnessione a ODBC <% var cnn; //Create a connection object. cnn = Server.CreateObject("ADODB.Connection"); //Open a connection using the ODBC connection string. cnn.Open (DSN=giuntiDSN;UID=giunti;PWD=corsoDBMS); %> <% var cnn; //Create a connection object. cnn = Server.CreateObject("ADODB.Connection"); //Open a connection using the ODBC connection string. cnn.Open(Driver={SQL Server};Server=PAPERINO;UID= giunti;PWD=corsoDBMS;database=giuntiDB); %>

98 Esecuzione statement zIl modo più semplice di eseguire uno statement utilizza la connessione <% var cnn,strSQL; //Create a connection object. cnn = Server.CreateObject("ADODB.Connection"); //Open a connection using the ODBC connection string. cnn.Open ("Driver={SQL Server};Server=PAPERINO;UID= giunti;PWD=corsoDBMS;database=giuntiDB); //Define SQL statement. strSQL = "INSERT INTO Impiegati(Nome,Dip#,Mansione,Data_a,Stipendio)"+ " VALUES ('catania',1,impiegato,12/3/89,1000)" ; //Use the Execute method to issue a SQL query to database. cnn.Execute(strSQL); %>

99 Esecuzione query zSe viene eseguita una query, il risultato può essere analizzato utilizzando un oggetto di tipo RecordSet zla specifica dello statement può avvenire anche a livello recordset zun RecordSet rappresenta un cursore sul risultato di una query zè possibile definire vari tipi di cursori zcome in JDBC, proprietà a metodi per: ystabilire se abbiamo analizzato tutti I record: xproprietà EOF ymuoversi sulla tupla successiva xmetodo MoveNext

100 Esempio <%... //Instantiate a Recordset object. rstImpiegati = Server.CreateObject("ADODB.Recordset"); //Open a recordset using the Open method //and use the connection established by the Connection object. strSQL = "SELECT Nome from Impiegati ; rstImpiegati.Open (strSQL, cnn); //Cycle through record set and display the results //and increment record position with MoveNext method. while (! rstImpiegati.EOF) { Response.Write(rstImpiegati("Nome") + " ); rstImpiegati.MoveNext; } %>

101 Esecuzione statement zUn modo più flessibile di eseguire uno statement prevede la creazione di un un oggetto Command zVantaggio: ysi possono settare le proprietà dello statement, ad esempio il tipo xmaggiore efficienza in esecuzione ysi possono costruire statement preparati con o senza parametri zper settare le proprietà è utile utilizzare delle costanti di sistema yil file che le contiene deve essere incluso y

102 Esempio <%... //create a command object com = Server.CreateObject("ADODB.Command"); //Define SQL statement. strSQL = "INSERT INTO Impiegati(Nome,Dip#,Mansione,Data_a,Stipendio)"+ " VALUES ('catania',1,impiegato,12/3/89,1000)" ; //set command properties com.ActiveConnection = cnn; com.CommandType = adCmdText; //costante che indica che il comando è uno statement SQL com.CommandText = strSQL; //Use the Execute method to issue a SQL query to database. com.Execute() ; %>

103 Possibili opzioni CostanteTipo di Query …. adCmdStoreProcStored procedure adCmdTextSQL statement adCmdUnknownType of the command is not known (default) adCmdUnspecifiedUnspecified command type argument ….

104 Statement con parametri (preparate) zPer preparare uno statement, è necessario porre a True la proprietà Prepared associata alloggetto comando zper specificare I parametri: yun oggetto di tipo comando è associato ad una collezione Parameters che rappresenta I parametri yè necessario aggiungere un elemento alla collezione per ogni parametro yè necessario specificare il nome, il tipo, la direzione (IN/OUT) e la dimensione del parametro yse non si specifica la direzione, il parametro è considerato un parametro di input xquindi negli esempi non specifichiamo la direzione

105 Esempio <%... //Instantiate Command object; use ActiveConnection property to attach //connection to Command object. cmn= Server.CreateObject("ADODB.Command") ; cmn.ActiveConnection = cnn ; //Define SQL query. cmn.CommandText = DELETE FROM Impiegati WHERE Nome = ? ; //Save a prepared (or pre-compiled) version of the query specified in CommandText 'property before a Command object's first execution. cmn.Prepared = True;

106 Esempio (continua) //Define query parameter configuration information. cmn.Parameters.Append ( cmn.CreateParameter(nomeP",adVarChar,,30 )); //Define and execute statement cmn(nomeP") = Rossi; cmn.Execute(); //Define and execute statement again cmn(nomeP") = Verdi; cmn.Execute();... %>

107 Osservazione zSono possibili tre metodi di esecuzione ysulloggetto connection xspecifichiamo almeno la stringa corrispondente allo statement da eseguire ysulloggetto RecordSet xspecifichiamo la stringa corrispondente allo statement da eseguire e la connessione xpossiamo analizzare I risultati di una query e muoverci con il cursore ysulloggetto Command xspecifichiamo la stringa corrispondente allo statement da eseguire,la connessione, ed eventualmente il tipo di statement xpossiamo specificare se lo statement è preparato o meno, ed eventualmente associare parametri

108 Form HTML, ASP e ADO zÉ possibile utilizzare I valori passati attraverso una form per settare I parametri di uno statement SQL zTutto come prima, cambia solo lassegnazione dei valori ai parametri //Define query parameter configuration information. cmn.Parameters.Append ( cmn.CreateParameter(nomeP",adVarChar,,30 )); //Define statement if the type of the request is POST cmn(nomeP") = Request.Form(Nome") (); //Define statement if the type of the request is GET cmn(nomeP") = Request.QueryString(Nome")() ; cmn.Execute();

109 Errori zUn oggetto Error contiene I dettagli relativi ad un errore che si è verificato nel fornitore dati zpossono essere di varia natura: ylo statement SQL inviato non è corretto yalcune funzionalità non sono supportate zgli errori vengono associati tramite una collezione ad una connessione

110 Esempio //Use the Execute method to issue a SQL statement to database. cnn.Execute(strSQL); //check if some errors have been generated if (cnn.Errors.Count >0) { Response.Clear(); for(intcount = 0;intcount

111 Gestione connessioni zUna connessione può essere chiusa con il metodo close delloggetto Connection con.close zse la connessione deve essere usata diverse volte nel contesto della stessa applicazione, potrebbe essere utile definire la connessione a livello applicazione zse la connessione deve essere usata diverse volte dallo stesso utente, potrebbe essere utile definire la connessione a livello sessione zProblema: in questo modo le connessioni potrebbero rimanere inattive per lungo tempo

112 Gestione connessioni zSoluzione: ya livello applicazione o sessione si definiscono solo le stringhe di connessione ysi lasciano gestire le connessioni dal Web Server mediante connection pooling zConnection pooling: y le connessioni, una volta aperte, vengono inserite in un pool yquando è necessaria una connessione, il Web Server seleziona una connessione nel pool, evitando di riattivare il processo di connessione

113 Transazioni zLe transazioni possono essere gestite direttamente dal DBMS, inviando gli statement adeguati per creare la transazione zé possibile anche utilizzare metodi delloggetto Connection: yBeginTrans: inizia una transazione nel DBMS a cui si è connessi yCommitTrans: termina con successo la transazione corrente yRollbackTrans: effettua il rollback della transazione corrente

114 Un esempio interessante zSupponiamo che la tabella dipartimenti contenga un campo homepage che contiene la URL dellhome page dei dipartimenti zsi vuole generare una pagina HTML che tramite una form, attivi una pagina asp che permetta di recuperare le URL di tutti I dipartimenti, attivandole come collegamento ipertestuale nella pagina restituita al client

115 Esempio di codice <%... rstURL = Server.CreateObject("ADODB.Recordset"); strSQL = "SELECT HomePage from Dipartimenti ; rstURL.Open (strSQL, cnn); while (! rstURL.EOF) {%> > <%rstImpiegati.MoveNext; } … %>

116 Esercitazione proposta zEstendere la pagina HTML e la pagina ASP generate durante il corso di ASP in modo da: yprendere in input tramite form I dati di un corso yeffettuarne linserimento nella base di dati yrestituire un adeguato messaggio al client zEstendere la pagina HTML e la pagina ASP generate durante il corso di ASP in modo da: yprendere in input qualche valore yeseguire una query utilizzando I valori inseriti da form e determinare I corsi corrispondenti yinserire gli indirizzi Web relativi ai corsi trovati in una tabella yHTML, da restituire al client

117 Esercitazione proposta zEstendere la pagina HTML e la pagina ASP generate durante il corso di ASP in modo da: yprendere in input tramite form un valore ycancellare I corsi utilizzando nella condizione di selezione il valore preso in input zgenerare una pagina HTML, contenente un link per ogni pagina precedentemente costruita (inserimento, query cancellazione)

118 Osservazione conclusiva zAbbiamo visto che esistono diverse tecnologie per interagire con una base di dati via Web zciascuna tecnologia presenta vantaggi e svantaggi zApplet: ysemplici da usare ygestiscono linterfaccia grafica ylimitazioni sullaccesso al DBMS ymix di interfaccia e logica applicativa zServet: yflessibili ygestione interfaccia tramite HTML ynessuna limitazione sullaccesso al DBMS ymix di HTML e logica applicativa xil programmatore deve conoscere HTML zlinguaggi di scripting yflessibili ygestione logica applicativa tramite linguaggio di scripting ymix di HTML e script xlo sviluppatore HTML deve conoscere il linguaggio di script e la logica applicativa

119 Osservazione conclusiva zQuindi, per creare unapplicazione Web che interagisce con le basi di dati è necessario sviluppare tre componenti: yinterfaccia ylogica applicativa (come interagisco con la base di dati) yflusso applicativo (come gestisco lintera applicazione) zin un contesto aziendale, difficilmente esistono persone esperte su tutti questi aspetti ylesperto di basi di dati non necessariamente conosce bene HTML zcome risolvere il problema?

120 Osservazione conclusiva zLa scelta di Java può essere di aiuto zcome abbiamo visto, Java supporta tre tecnologie: yApplet yServlet yJSP zPossibile soluzione: yuso Applet per gestire linterfaccia client xpagine statiche, non dipendenti dal contenuto del DB xno logica, no flusso applicazione yuso Servlet per gestire la logica e il flusso xno interfaccia yuso JSPper gestire linterfaccia di risposta xpagine dinamiche, dipendenti dal contenuto del DB xno logica, no flusso znecessità di fare comunicare Servlet e JSP (possibile)

121 Architettura zLinterazione basi di dati e Web richiede: yA livello fisico: x lintroduzione di un ulteriore livello nella tipica architettura client/server del Web xnecessità di gateway per comunicare con il DBMS JDBC, ODBC, DBMS API yA livello logico: xchiara distinzione tra flusso, logica e presentazione

122 XML & DBMS

123 XML e Database: il problema zProblema: yè possibile/necessario memorizzare documenti XML in un DBMS? yQuale tecnologia è necessaria a questo scopo? zRisposta: yè certamente possibile memorizzare e gestire documenti XML in un DBMS yla tecnologia necessaria a questo scopo dipende dal perché vogliamo gestire documenti XML in un DBMS

124 Tipologie di documenti XML zDue possibili usi per documenti XML: yData Centric: i documenti possono rappresentare lo strumento con il quale dati tradizionali (es. relazionali) vengono trasferiti su Web xXML come veicolo per trasporto di dati xEsempio: ordini di vendita, scheduling di voli, menù yDocument Centric: linformazione è rappresentata dal documento in sé xXML come modello per la rappresentazione dei dati xEsempio: libri, documenti in genere

125 Documenti Data Centric zStruttura regolare zlivello di dettaglio piuttosto fine zcontenuto omogeneo zlordine con cui gli elementi allo stesso livello appaiono è ininfluente zUtilizzati per machine consumption zEsempi: ordini di vendita, scheduling di voli, menù,…

126 Esempio: ordini di vendita ABC Industries Turkey wrench: Stainless steel, one piece

127 Documenti Document Centric zStruttura irregolare zLivello di dettaglio meno fine zcontenuto eterogeneo zlordine degli elementi allo stesso livello è significativo zin genere progettati per human consumption zEsempi: libri, , …

128 Product Description Turkey Wrench Full Fabrication Labs, Inc. Like a monkey wrench, but not as big. The Turkey wrench, which comes in both right- and left-handed versions.... You can: Order your turkey wrench Read about wrenches Download the catalog....

129 XML e DBMS zCiascuna tipologia di documenti richiede una particolare tecnologia per la sua gestione data document Relational/object-oriented DB DB basato su XML (XML è il modello dei dati)

130 XML e DBMS zDue categorie di DBMS: yXML-Native DBMS: xcomprendono un insieme di nuovi sistemi la cui architettura è stata progettata per supportare totalmente le funzionalità necessarie alla gestione di documenti XML xtecnologia non ancora matura xutili per Document Centric xEsempio:eXcelon yXML-Enabled DBMS: xcomprendono tutti i DBMS che mantengono integra la propria architettura estendendola con funzionalità necessarie alla gestione di documenti XML xsono tipicamente Object-Relational (DB2, Oracle8i,…) xutili per Data Centric e parzialmente per Document Centric

131 XML e DBMS zNel seguito. yProblematiche relative alla gestione di documenti Data Centric e Document Centric in XML-Enabled DBMS

132 XML-Enabled DBMS e documenti Data Centric

133 Problematiche per Data Centric zTre problematiche di base: ycome rappresentare i dati contenuti nei documenti XML nel DBMS ycome generare documenti XML partendo dai dati contenuti nel DBMS ycome interrogare i dati estratti da documenti XML DB XML doc DB XML doc DB

134 Rappresentazione dati zÈ necessario definire un mapping tra la struttura dei documenti XML e lo schema del DB èPer memorizzare i dati contenuti in un documenti XML in un DB, deve esistere una o più tabelle con lo schema richiesto dal mapping zrappresentazione strutturata zVantaggi: yapproccio piuttosto semplice yi dati sono facilmente interrogabili zSvantaggi: yScarsa flessibilità: la tabella deve essere conforme al documento yil documento di partenza non è più recuperabile

135 DBMS relazionale zUn documento XMl viene rappresentato come una singola tabella o un insieme di tabelle zla struttura del documento XML è simile alla seguente: zapproccio tipico per DBMS relazionali, object-relational

136 Esempio 7369 PAUL SMITH 7000 STEVE ADAM Documento XMLTabella Clienti

137 Esempio Documento XML Tabella Lista_Clienti 7369 PAUL SMITH STEVE ADAM Tabella Clienti

138 Interrogazione dati zPoiché i dati vengono rappresentati secondo il modello supportato dal DBMS (es. relazionale), è possibile utilizzare i linguaggi supportati dal DBMS per linterrogazione dei dati memorizzati zapproccio template-based: yla query viene rappresentata nel documento XML ynecessità di middleware

139 Flight Information The following flights have available seats: SELECT Airline, FltNumber, Depart, Arrive FROM Flights We hope one of these meets your needs The following flights have available seats: ACME 123 Dec 12, :43... We hope one of these meets your needs

140 Interrogazione dati Doc Query Doc Result DB Extract Select Command Construct Document answer Submit SELECT Command Middleware Result

141 Generazione documenti XML zProblema: fornire una rappresentazione XML ai dati recuperati tramite query dal DBMS zsi utilizza il mapping inverso rispetto a quello utilizzato per la memorizzazione zoperazione importante per attribuire un formato standard ai dati ritrovati, prima di inviarli sulla rete

142 Esempio PAUL SMITH Documento XML Tabella Clienti SELECT nome, cognome FROM Clienti WHERE Numero = 7369

143 XML-Enabled DBMS e documenti Document Centric

144 Problematiche per Document Centric zDue problematiche di base: ycome rappresentare i documenti XML nel DBMS ycome interrogare i documenti XML DB XML doc DB XML doc

145 Rappresentazione zPermette di mantenere integro il documento XML zDue approcci: yrappresentazione non strutturata xdocumento come unico oggetto yrappresentazione ibrida xdocumento parzialmente rappresentato secondo la rappresentazione strutturata e parzialmente secondo la rappresentazione non strutturata

146 Rappresentazione non strutturata zIl documento viene tipicamente mappato in un singolo campo di una tabella di tipo: yCLOB (Character Large Object): il documento è fisicamente contenuto nel campo della tabella xalcuni DBMS (IBM DB2) supportato tipi ad hoc: XMLVARCHAR yriferimento: il campo contiene il riferimento al documento, memorizzato altrove, sul file system zVantaggi: yflessibile zSvantaggi: yi dati sono non strutturati yinterrogazione più complessa yla tabella può contenere documenti eterogenei (diversi DTD)

147 Rappresentazione non strutturata Documento XML riferimento CLOB XML DBMS

148 Esempio 7369 PAUL SMITH 7000 STEVE ADAM Documento XML Tabella Clienti Id Documento_XML 7369 PAUL SMITH 7000 STEVE ADAM 10

149 Rappresentazione ibrida zRappresentazione che combina rappresentazione strutturata e non strutturata Documento XML CLOB XML DBMS XML Rappr. strutturata

150 Esempio Oracle Guide M. Abbey Introduzione … … Guida introduttiva al mondo dei DBMS Oracle … … Documento XMLTabella LIBRO SCHEMA CLOB Titolo autore contenuto dettagli capitolo Guida introduttiva al mondo dei DBMS Oracle... capitolo titolo

151 Interrogazione documenti zDal punto di vista del DBMS, un documento memorizzato in modo non strutturato non è che un documento di testo zin genere i DBMS supportano strumenti per ritrovare i documenti in base al contenuto znel caso di documenti XML, mettono a disposizione operatori avanzati da utilizzare in statement SQL per recuperare documenti XML in base al contenuto

152 XML e Oracle 8i zXML-enabled zsupporta rappresentazione strutturata, non strutturata in campi CLOB e BFILE, e ibrida zinterrogazione rappresentazione non strutturata tramite Intermedia Context zgenerazione documenti XML a partire dal contenuto DB

153 XML e IBM DB2 zXML enabled zsupporta rappresentazione strutturata, non strutturata in campi ad hoc, e ibrida zNuovi tipi di dato: yXMLVARCHAR: documenti XML memorizzati come VARCHAR yXMLCLOB: documenti XML memorizzati come CLOB yXMLFILE: riferimento ad un documento XML, memorizzato su file system zinterrogazione rappresentazione non strutturata tramite: yoperatori specifici, che permettono di navigare la struttura del documento yText Extender, che supporta funzionalità aggiuntive di analisi del contenuto (ne parleremo nel contesto Multimedia) zgenerazione documenti XML a partire dal contenuto DB

154 Supporto Tecnologie Internet in SQL Server

155 Funzionalità zSQL Server 2000 è un XML-enabled DBMS zsupporta le seguenti funzionalità: ygestione documenti document centric: xtramite campi di tipo text (nessun supporto particolare) ygestione documenti data centric: xgenerazione documenti XML a partire dal contenuto della base di dati xinserimento di documenti data-centric ysupporto per XDR (XML-Data Reduced) schema xviste in formato XML sullo schema di una base di dati xinterrogazione di tali viste con XPath yaccesso a SQL Server da HTTP

156 Gestione documenti document- centric zT-SQL supporta comandi per: ygenerare un insieme di tuple da un documento XML ygenerare un documento XML come risultato di una query

157 Generazione tuple da XML T-SQL System stored procedure

158 Fasi zGenerazione DOM tree tramite la stored procedure sp_xml_preparedocument yParametri (nellordine): xOUT: hdoc OUTPUT (handler alla nuova rappresentazione) xIN: variabile di tipo testuale, contenente il documento XML zestrazione tuple da document: yfunzione OPENXML zrimozione handle con stored procedure sp_xml_removedocument

159 Esempio: generazione handle int varchar(1000) =' ' --Create an internal representation of the XML document. EXEC -- Remove the internal representation. exec

160 Generazione tuple zOPENXML richiede quattro parametri: yun XML handle, generato da sp_xml_preparedocument (idoc) yunespressione Xpath che identifica I nodi del documento dai quali creare le tuple (xpathexpr) yuna descrizione dello schema delle tuple da generare (SchemaDeclaration|TableName) ymapping tra lo schema delle tuple e I nodi restituiti dallespressione Xpath (flag + indicazioni in clausola WITH) OPENXML(idoc int [in],xpathexpr nvarchar[in],[flags byte[in]]) [WITH (SchemaDeclaration | TableName)]

161 Due parole su XPath zXpath permette di navigare la struttura ad albero di un documento XML, utilizzando una sintassi simile a quella utilizzata per navigare nel file system, estesa con lutilizzo di condizioni di selezione (predicati) zRestituisce I nodi finali del cammino specificato zper ogni nodo lungo il percorso, è possibile specificare dei predicati zper specificare il passaggio da un livello allaltro: / y/Customers/ContactName zper identificare un attributo zper specificare una condizione: [] zper specificare il nodo padre:.. zPer specificare il nodo corrente:.

162 Esempi zSeleziona dalla radice (elemento più esterno), I clienti con attributo ClientID = ="ALFKI" zsupponendo che Customer abbia come sottoelemento Order, seleziona tutti gli ordini in cui OrderID = 1 zSupponendo che Customer ammetta come sottoelemento ContactName, selezionare tutti I Customer che: yhanno almeno un ContactName x/Customer[ContacName] ynon hanno ContactName x/Customer[not(ContacName)]

163 Esempi zSelezionare gli ordini che si riferiscono al cliente identificato da "ALFKI" zselezionare lordine identificato da "Ord-10643, relativo al cliente identificato da "ALFKI" 10643"] z selezionare I clienti che hanno effettuato almeno un ordine di un prodotto inquantità superiore a 5

164 Esempi zSelezionare I vari prodotti ordinati, che complessivamente costano più di 2000 = 2000] zseleziona il cliente "ALFKI" e il cliente ANATR

165 Esempio 1 int varchar(1000) =' '

166 Esempio 1a -- Create an internal representation of the XML document. EXEC -- Execute a SELECT statement using OPENXML rowset provider. SELECT * FROM OPENXML '/ROOT/Customer',1) WITH (CustomerID varchar(10), ContactName varchar(20)) -- Remove the internal representation of the XML document EXEC Attribute-centric mapping: gli attributi del rowset vengono mappati sugli attributi con nome uguale specificati nella clausola WITH RISULTATO CustomerID ContactName VINET Paul Henriot LILAS Carlos Gonzlez

167 Esempio 1b -- Create an internal representation of the XML document. EXEC -- Execute a SELECT statement using OPENXML rowset provider. SELECT * FROM OPENXML '/ROOT/Customer',2) WITH (CustomerID varchar(10), ContactName varchar(20)) -- Remove the internal representation of the XML document EXEC Element-centric mapping: si considera il contenuto dei sottolementi semplici (in questo caso non ci sono) RISULTATO CustomerID ContactName NULL

168 Esempio 2 int varchar(1000) =' VINET Paul Henriot LILAS Carlos Gonzlez '

169 Esempio 2a -- Create an internal representation of the XML document. EXEC -- Execute a SELECT statement using OPENXML rowset provider. SELECT * FROM OPENXML '/ROOT/Customer',2) WITH (CustomerID varchar(10), ContactName varchar(20)) -- Remove the internal representation of the XML document EXEC Element-centric mapping: si considera il contenuto dei sottolementi semplici (in questo caso non ci sono) RISULTATO CustomerID ContactName VINET Paul Henriot LILAS Carlos Gonzlez

170 Esempio 3 int varchar(1000) =' '

171 Esempio 3a -- Create an internal representation of the XML document. EXEC -- Execute a SELECT stmt using OPENXML rowset provider. SELECT * FROM OPENXML '/ROOT/Customer/Order/OrderDetail') WITH (OrderID int CustomerID varchar(10) OrderDate datetime ProdID int Qty int RISULTATO OrderID CustomerID OrderDate ProdID Qty VINET :00: VINET :00: LILAS :00:

172 Esempio 4 int varchar(1000) =' Paul Henriot Carlos Gonzlez '

173 Esempio 4a -- Create an internal representation of the XML document. EXEC -- Execute a SELECT statement using OPENXML rowset provider. SELECT * FROM OPENXML '/ROOT/Customer',3) WITH (CustomerID varchar(10), ContactName varchar(20)) -- Remove the internal representation of the XML document EXEC Attribute +Element-centric mapping: si considerano prima gli attributi e poi gli elementi RISULTATO CustomerID ContactName VINET Paul Henriot LILAS Carlos Gonzlez

174 Esempio 4b zSupponiamo di avere una tabella T(CustomerId, ContactName) zapplicabile quando: yesiste una tabella con la struttura voluta ynon si devono specificare pattern XPath -- Create an internal representation of the XML document. EXEC -- Execute a SELECT statement using OPENXML rowset provider. SELECT * FROM OPENXML '/ROOT/Customer',3) WITH T -- Remove the internal representation of the XML document EXEC

175 Esempio 5 int varchar(1000) =' '

176 Esempio 5a -- Create an internal representation of the XML document. EXEC -- Execute a SELECT statement using OPENXML rowset provider. SELECT * FROM OPENXML WITH ( ProdID int '.', Qty int OID int -- Remove the internal representation of the XML document EXEC RISULTATO ProdID Qty OID

177 Generazione XML da tuple zÈ possibile generare un documento XML a partire dalle tuple ottenute come risultato di una query zdato uno statement SELECT yla clausola FOR XML formatta il risultato come documento XML yè possibile dare indicazioni su come il documento debba essere formattato xRAW xAUTO xEXPLICIT

178 Limitazioni zNon si può usare in: y sottoquery yaggregazioni ydefinizione di viste yanalisi con cursore y...

179 Modalità RAW zTrasforma ogni tupla del risultato in un elemento XML con identificatore row zogni colonna non null viene mappata in un attributo dellelemento

180 Esempio 1 SELECT TOP 2 Customers.CustomerID, Orders.OrderID, Orders.OrderDate FROM Customers, Orders WHERE Customers.CustomerID = Orders.CustomerID ORDER BY Customers.CustomerID FOR XML RAW RISULTATO

181 Modalità AUTO zRestituisce elementi XML annidati zogni tabella che compare nella clausola FROM per la quale almeno un attributo compare nella SELECT viene rappresentata con un elemento XML con lo stesso nome zle colonne della SELECT diventano attributi dellelemento corrispondente alla tabella a cui appartengono, con lo stesso nome zé possibile dire che le colonne della SELECT devono diventare sottoelementi yclausola ELEMENTS zil nesting degli elementi dipende dallordine con cui gli attributi appaiano nella clausola SELECT yleftmost = più esterno

182 Esempio 1 SELECT TOP 2 Customers.CustomerID, Orders.OrderID, Orders.OrderDate FROM Customers, Orders WHERE Customers.CustomerID = Orders.CustomerID ORDER BY Customers.CustomerID FOR XML AUTO RISULTATO

183 Esempio 2 SELECT TOP 2 Orders.OrderID, Customers.CustomerID, Orders.OrderDate FROM Customers, Orders WHERE Customers.CustomerID = Orders.CustomerID ORDER BY Customers.CustomerID FOR XML AUTO RISULTATO

184 Esempio 3 SELECT TOP 2 Customers.CustomerID, Orders.OrderID, Orders.OrderDate FROM Customers, Orders WHERE Customers.CustomerID = Orders.CustomerID ORDER BY Customers.CustomerID FOR XML AUTO, ELEMENTS RISULTATO ALFKI T00:00: T00:00:00

185 Esempio 4 SELECT TOP 2 C.CustomerID, O.OrderID, O.OrderDate FROM Customers C, Orders O WHERE C.CustomerID = O.CustomerID ORDER BY C.CustomerID FOR XML AUTO RISULTATO

186 Modalità EXPLICIT zPermette di controllare il formato del documento XML zaffinché possa essere attivata, la query SQL deve avere una certa forma znon la vediamo

187 Tipi di accesso da HTTP zEsecuzione query SQL zEsecuzione query template ydocumenti XML che al loro interno contengono la specifica di una o più query SQL yil template può essere contenuto in un file o specificato nellindirizzo zEsecuzione query Xpath su schemi XDR yuno schema XDR (XML-Data Reduced) è una vista XML sul contenuto del database zAccesso ad oggetti contenuti nel database

188 Come attivare le funzionalità Internet zÉ necessario creare una directory virtuale in IIS zquesto permette di stabilire una connessione con unistanza di SQL Server zla directory virtuale è associata ad informazioni di connessione che permettono di accedere un particolare database zil nome del server IIS e della directory virtuale compaiono nellURL da utilizzare per comunicare con SQL Server zSe la directory virtuale si chiama myDB e il server Web si chiama PAPERINO, e possibile collegarsi al database usando il seguente indirizzo: yhttp://paperino/myDBhttp://paperino/myDB zTutto cio che vogliamo visualizzare deve essere un document XML

189 Esecuzione query SQL da HTTP zLa stringa SQL viene passata come valore associata al parametro sql, fornito direttamente con lindirizzo zSe la query restituisce tuple con piu di un campo, e necessario che il risultato venga prodotto in formato XML zSe viene restituito piu di un elemento XML (quindi piu di un record) e necessario inserire un tag fittizio ySi passa il valore ROOT associato alla variabile root zEsempio: yhttp://paperino/myDB?sql=select * from impiegati FOR XML AUTO&root=ROOT yhttp://paperino/myDB?sql=select nome from impiegati

190 Esecuzione Stored Proc da HTTP zIn modo simile si possono eseguire stored procedure yhttp://paperino/myDB?sql+EXECUTE myProc+val1+val2&root=ROOThttp://paperino/myDB?sql+EXECUTE zIn questo caso, il documento XML deve essere generato dalla stored procedure

191 Esecuzione template zScrivere lunghi statement SQL nellURL può essere problematico zSoluzione: yInserire le query SQL in template zUn template e un documento XML ben formato contenente una o piu query SQL o Xpath zI templati devono essere salvati in directory di tipo template, allinterno della directory reale corrispondente alla directory virtuale yse la directory si chiama myTemplate e il template Template1.xml: xhttp://paperino/myDB/myTemplate/Template1.xml zAnche in questo caso, la query deve restituire un risultato in formato XML ylelemento radice è inserito direttamente dal template

192 Forma generale di un template per eseguire query SQL.. sql statement(s)

193 Esempio 1: SELECT SELECT top 2 CustomerID, CompanyName FROM Customers FOR XML AUTO - - -

194 Esempio 2: stored proc exec CategoryInfo

195 Esempio 3: stored proc con parametri CREATE PROCEDURE varchar(35) AS SELECT CategoryName, Description FROM Categories WHERE Categories.CategoryName FOR XML AUTO

196 Esempio 3 (continua) Condiments exec

197 Template e HTML zI template possono anche essere attivati da form HTML zidea: ysi associa il template ad un campo yal submit, questa informazione viene inviata al server yil server esegue il template specificato zconviene usare il metodo POST, per non avere problemi con la lunghezza del template inviatoAction: indirizzo directory virtuale

198 Esempio Sample Form For a given employee ID, employee first and last name is retrieved. Employee ID Number

199 Esecuzione query XPath zXpath può essere utilizzato in SQL Server per interrogare documenti XML ztali documenti devono essere creati definendo opportune viste XML sulla base di dati ytali viste possono essere specificate utilizzando gli schemi XML- Data Reduced (XDR) zQuindi, in SQL Server per utilizzare Xpath, è necessario: yCreare viste XML del database tramite schemi XML-Data Reduced (XDR) yInterrogare tali viste con Xpath

200 Idea di base DBMS XDR Schema (vista XML) Doc XML Query XPath ?

201 Viste XML zE possibile creare viste XML del contenuto del database utilizzando XML-Data Reduced Schema (XDR) zUno schema XDR descrive la struttura del documento XML che si vuole generare, quindi descrive la vista XML che si vuole eseguire sulla base di dati zA differenza del DTD, mi permette di descrivere la struttura di un documento XML utilizzando la sintassi XML zLa struttura del documento deve quindi essere mappata sulla struttura del database

202 Viste XML zSe si vogliono recuperare dati da una sola tabella e se I nomi delle tabelle e dei campi dai quali vengono estratti I dati coincide con il nome degli attributi e degli elementi con I quali si vuole costruire il documento XML ysintassi immediata zse la condizione precedente nonè soddisfatta, si utilizzano le annotazioni yinformazioni che specificano come effettuare Il mapping tra elementi e attributi XML e dati nel database

203 Mapping di default Employees(EmployeeID,FirstName,LastName) Tabella Risultato

204 Mapping di default: sottoelementi Employees(EmployeeID,FirstName,LastName) Tabella Nancy Davolio Risultato

205 Mapping espliciti zÉ possibile specificare come gli elementi e gli attributi del file XML vengono associati alle tabelle e ai campi delle tabelle zsi utilizzano le annotazioni zper indicare a quale relazione si riferisce un certo elemento: ysql:relation zper indicare a quale campo è associato un elemento o un attributo: ysql:field zesiste un ampio numero di annotazioni, che permette di creare schemi XDR molto flessibili

206 Esempio 1 Customers(CustomerID,ContactName,Phone) Tabella Risultato

207 Esempio 2 Customers(CustomerID,Contact,Phone) Tabella Risultato

208 Generazione automatica di schemi XDR zÉ possibile generare schemi XDR in modo automatico, eseguendo query SQL zIdea: eseguo una query SQL specificando che yil risultato deve essere formattato in XML ylo schema del risultato deve essere formattato con XDR schema zClausola FOR XML, XMLDATA

209 Esempio SELECT TOP 2 Customers.CustomerID, Orders.OrderID FROM Customers, Orders WHERE Customers.CustomerID = Orders.CustomerID ORDER BY Customers.CustomerID FOR XML RAW, XMLDATA RISULTATO

210 Come interrogare le viste XDR? zÉ possibile utilizzare Xpath per interrogare le viste XDR zla query Xpath deve essere rappresentata: ynellURL y allinterno di un template zper potere essere interrogati, gli schemi XDR devono essere memorizzati in una directory di tipo schema, allinterno della directory reale corrispondente alla directory virtuale zil template deve indicare su quale schema deve essere eseguito

211 Utilizzo di Xpath query zDirettamente nellURL yhttp://paperino/myDB/schema/ zallinterno di un template /

212 Esempio zXDR Schema: zXpath:

213 Esempio (continua) zTemplate: zPossibile risultato

214 Esercitazione proposta zGenerare una directory virtuale associata al proprio database zprovare ad eseguire query SQL da HTTP zdefinire un template per eseguire uno statement SQL e provare ad eseguirlo zdefinire semplici documenti XML ed utilizzare OPENXML per formattarne il contenuto in forma relazionale ed inserirlo in una tabella esistente zdefinire query sul database costruito e generare il risultato in formato XML zcostruire un semplice schema XDR per recuperare alcuni dati da una vostra tabella; interrogare quindi lo schema utilizzando un template Xpath e unespressione di comando direttamente da URL


Scaricare ppt "DBMS & Web. Il Web è una architettura software di tipo client-server, nella quale sono previste due tipologie di componenti software: il client e il server,"

Presentazioni simili


Annunci Google