Master in Web Technology Corso di Tecnologie XML 2008/09 Progetti di fine corso La valutazione di fine corso per ogni studente è soggetta alla realizzazione di un progetto che dimostri le conoscenze e le abilità acquisite nell’uso delle tecnologie XML, stimolando anche l’approfondimento di argomenti avanzati non trattati in aula. - I progetti possono essere realizzati singolarmente o in piccoli gruppi. Ovviamente il numero di persone coinvolte in un lavoro aumenterà le richieste di completezza e correttezza dello stesso. - E’ ammissibile anche che gruppi diversi sviluppino versioni diverse dello stesso progetto lavorando in parallelo. - Il contributo effettivo offerto da ciascun componente di un gruppo alla realizzazione finale dovrà essere descritto nella documentazione. In sede di esame, i responsabili potranno essere chiamati a riferire sugli aspetti loro delegati. - Gli studenti che avessero altre idee su progetti da realizzare possono sottopormele liberamente. XDBForms Nella generale ottica della migrazione dei servizi verso il web, la necessità di strumenti per la definizione e la compilazione online di moduli complessi è molto sentita. Il linguaggio XForms (http://www.w3.org/MarkUp/Forms, http://en.wikibooks.org/wiki/XForms) è una Candidate Recommendation del W3C fin dal 2007. Il suo scopo è quello di fornire gli strumenti per la definizione di moduli web (ma non solo) in una maniera estremamente più potente e versatile di quella offerta dai form dell’HTML. In particolare, XForms è progettato secondo il paradigma MVC, quindi separa nettamente la definizione dei dati e dei relativi vincoli (model) dalla loro rappresentazione visuale (view) e dal codice che gestisce l’evoluzione visuale, interazione e la sottomissione dei dati (controller). Moltissime aziende si sono mosse per creare applicazioni o plugin in grado di gestire i moduli definiti in questo linguaggio molto ricco e articolato. In particolare, esiste un plugin per Internet Explorer (http://www.formsplayer.com/) e un’estensione per Firefox 3 (http://www.mozilla.org/projects/xforms/) ad un buon livello di completezza (si veda ad esempio http://www.mozilla.org/projects/xforms/status-detail.html). Parallelamente, sono stati sviluppati vari editor assistiti per progettare forms. Lo scopo del progetto è approfondire e sperimentare questo importantissimo formalismo sviluppando una libreria di supporto, scritta in linguaggio Java e quindi incorporabile in ogni web application, che crei tutti gli artefatti necessari a permettere l’editing remoto di una tabella di database tramite XForms. Vediamo più in dettaglio le specifiche. La libreria dovrà interfacciarsi genericamente con i DBMS tramite JDBC (come server di prova è consigliabile usare mysql). Una volta forniti dall’utente il nome di un database e di una sua tabella (oltre alle eventuali credenziali di accesso), la libreria dovrà essere in grado di - leggere tutti i metadati disponibili (compresi i tipi di dato di ciascuna colonna, i vincoli NOT NULL o DEFAULT, le FOREIGN KEY, ecc.) per la tabella specificata; - generare uno schema XML corrispondente alla definizione della tabella stessa, cercando di migrare nello schema la maggior parte dei vincoli (tipi, opzionalità, default, ecc.); - generare il codice XForms che, utilizzando lo schema del punto precedente come modello dati, generi un form per l’input o la modifica dei dati di una riga della tabella in oggetto. In particolare, il controllo di input per ciascuna colonna dovrà essere scelto anche in base al tipo della colonna stessa (input testuale, scelta multipla in caso di tipi enumerativi, input specifici per data/ora, ecc.). Nel caso una colonna referenzi la FOREIGN KEY di un’altra, si potrà trovare la soluzione più adatta per consentire all’utente di scegliere un record della tabella referenziata; - Master in Web Technology Corso di Tecnologie XML 2008/09 - generare la logica necessaria a inizializzare la form con i valori di una determinata riga della tabella; generare la logica necessaria ad interpretare i dati inviati dalla form tramite submission e aggiornare di conseguenza la corrispondente riga della tabella (o aggiungerne una nuova, se necessario). Il codice realizzato dovrà essere utilizzabile “on the fly”, cioè tutti gli artefatti dovranno poter essere generati su richiesta (non offline) ed eventualmente posti in una cache per accelerare il loro successivo riuso. La specifica XForms permette di programmare form con dinamiche molto complesse. Il valore del progetto sarà tanto maggiore quanto sarà lo sforzo dei realizzatori di sfruttare al massimo XForms per rendere il modulo più completo, automatico e semplice possibile. Per testare effettivamente la libreria, si dovrà realizzare una versione giocattolo del noto phpMyAdmin (http://www.phpmyadmin.net/), che permetta di selezionare un database, vederne la lista delle tabelle e aggiungere/aggiornare record su ciascuna di esse. L’applicazione andrà sviluppata in Java, e dovrà essere accompagnata da un’opportuna documentazione (anche in forma elettronica) che illustri il funzionamento della libreria, le sue caratteristiche e i suoi limiti. Java2SVG Il linguaggio SVG (http://www.w3.org/Graphics/SVG, http://www.svg.org, http://www.adobe.com/svg) è una Recommendation del W3C fin dal 2003. Si tratta di uno standard per la realizzazione di grafica vettoriale 2D che ha riscosso un notevole successo per la sua portabilità e semplicità, e gode di un ampio supporto applicativo (si vedano ad esempio http://www.inkscape.org, http://xmlgraphics.apache.org/batik), anche in ambito professionale. SVG è candidato ad essere il formato standard della prossima generazione di immagini per il web, più leggere e adattabili a tutte le risoluzioni video, e per questo i due maggiori browser sono capaci di leggere e interpretare la maggior parte di questo formalismo (http://www.mozilla.org/projects/svg/). Lo scopo del progetto è approfondire e sperimentare questo importantissimo formalismo utilizzandolo per visualizzare, tramite diagrammi UML, i risultati di vari tipi di analisi svolti su classi Java. E’ noto, infatti, che il linguaggio Java permette la reflection (http://java.sun.com/docs/books/tutorial/reflect), tramite cui è ispezionare a runtime una classe, scoprirne i membri, le loro caratteristiche, i rispettivi tipi, ecc., e procedendo poi ricorsivamente con l’analisi delle classi collegate tramite oggetti aggregati o puntati (si vedano anche, ad esempio, http://java.sun.com/developer/technicalArticles/ALT/Reflection e http://www.javaworld.com/javaworld/javatips/jw-javatip113.html). L’applicazione da realizzare, dato il nome di una classe java (ovviamente completo di package e disponibile nel classpath), dovrà eseguire una o più delle seguenti operazioni, secondo quanto richiesto dall’utente: - - Analizzare la classe tramite reflection, procedendo ricorsivamente all’analisi delle classi ad essa collegate (classi base, classi usate come tipo per i suoi membri, ecc.), per un numero massimo di livelli specificabile (opzionalmente) dall’utente. Disegnare in SVG: o il class diagram semplificato che mostra solo le relazioni di derivazione/generalizzazione tra classi e interfacce (del tipo: http://en.wikipedia.org/wiki/File:Uml_diagram.svg); Master in Web Technology Corso di Tecnologie XML 2008/09 o il class diagram “esteso” (del tipo: http://en.wikipedia.org/wiki/File:KP-UML-Aggregation20060420.svg), in cui ogni classe mostra i propri membri e le proprie relazioni con le altre classi (ovviamente solo quelle deducibili dall’analisi della classe stesse); o il package diagram che rappresenta graficamente i package Java coinvolti, la loro gerarchia e le classi in essi contenute (del tipo: http://en.wikipedia.org/wiki/File:Deployment_Model_Structure.PNG). I diagrammi dovranno includere il maggior numero di dettagli possibile, anche tramite annotazioni, ed ovviamente aderire alle convenzioni UML. Visto che i diagrammi risultanti potrebbero essere ricchi di componenti, dovrà essere curato nei dettagli l’algoritmo di distribuzione spaziale delle componenti stesse, in modo da evitare il più possibile sovrapposizioni tra gli elementi grafici (esempi molto avanzati di graph layout algorithms si possono trovare, ad esempio su http://www.cs.ucla.edu/~stott/aglo e http://en.wikipedia.org/wiki/Force-based_algorithms, ma non è obbligatorio usare algoritmi così complessi). L’applicazione andrà sviluppata in Java, e dovrà essere accompagnata da una opportuna documentazione (anche in forma elettronica) che illustri il suo funzionamento, le sue caratteristiche e i suoi limiti.