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.