1 / 26

Professore: Studente: Enrico Denti Thomas Ricci

Linguaggio per la modellazione e presentazione web di eventi turistici a tappe. Attività progettuale per il corso di Linguaggi e Modelli Computazionali M. Professore: Studente: Enrico Denti Thomas Ricci. Scopo del Progetto.

gavan
Download Presentation

Professore: Studente: Enrico Denti Thomas Ricci

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Linguaggio per la modellazione e presentazione web di eventi turistici a tappe.Attività progettuale per il corso diLinguaggi e Modelli Computazionali M Professore: Studente: Enrico Denti Thomas Ricci

  2. Scopo del Progetto • Sviluppo di un linguaggio semplice e intuitivo ma allo stesso flessibile e completo per la modellazione di un itinerario turistico riguardante un “evento a tappe”, al fine di automatizzare la generazione di una presentazione dell’itinerario con tecnologie Web 2.0: • Migliorare l’esperienza di navigazione degli utenti web fornendo contenuti interattivi di qualità per la presentazione di un evento (piuttosto che semplici contenuti testuali).

  3. Caratteristiche del linguaggio • 3 tipologie di “evento a tappe”: • RACE: Manifestazioni sportive su strada senza punti di sosta (gare ciclistiche, rally automobilistici,…). • TOUR: Itinerari culturali/enogastronomici che prevedono punti di sosta con eventuale visita. • SAIL-RACE: Regate. • Il linguaggio consente di definire le informazioni generali sull’evento: • Periodo evento • Descrizione evento • Elenco delle tappe previste • … e quelle specifiche in base alla tipologia, come ad esempio: • Statistiche di gara nel caso di eventi sportive. • Informazioni culturali e contatti nel caso di itinerari per eventi culturali.

  4. La Grammatica • TOKEN: A_GR : '{' ; C_GR : '}' ; fragment DIGIT : ( '0'..'9'); INT : DIGIT+; FLOAT : DIGIT+ '.' DIGIT+; DATE : DIGIT DIGIT '/' DIGIT DIGIT '/' (DIGIT DIGIT | DIGITDIGITDIGITDIGIT); ORARIO : DIGIT DIGIT ':' DIGIT DIGIT; STRING: '"' ( ESC_SEQ | ~('\\'|'"') )* '"'; fragmentHEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ; fragmentESC_SEQ : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\') | UNICODE_ESC | OCTAL_ESC; fragmentOCTAL_ESC: '\\' ('0'..'3') ('0'..'7') ('0'..'7‘)| '\\' ('0'..'7') ('0'..'7')| '\\' ('0'..'7'); fragmentUNICODE_ESC : '\\' 'u' HEX_DIGITHEX_DIGITHEX_DIGITHEX_DIGIT; WS : ( ‘ ‘ | ‘\t’ | ‘\r‘ | ‘\n‘ ) {$channel=HIDDEN;};

  5. La Grammatica • TOKEN:

  6. La Grammatica G = <VT, VN, P, S> • PRODUZIONI: s ::= <EVENT> <STRING> <A_GR> descriptionperiod( race|tour | sail_race ) <C_GR> Lo scopo della grammatica è il simbolo non terminale s e la relativa produzione prevede che un evento inizi con la keyword “event” seguita da: • Nome evento • Descrizione dell’evento description ::= <INFO> <STRING> • Periodo evento period ::= <DATA> (<DATE> | “da” <DATE> “a” <DATE>) • Tipologia di evento… • Esempio: • event “Giro d’Italia 2011” • { • info “…descrizione dell’evento…” • data da 20/05/11 a 22/05/11 […tipo evento: tour|race|sail_race…] • }

  7. La Grammatica: Race race ::= <RACE> <A_GR> ( stage|poi )+ <C_GR> Una race rappresenta una manifestazione sportiva a tappe che non prevede punti di sosta lungo il percorso ma solo: • Tratti di gara stage ::= <STAGE> (“by” (<BIKE> | <CAR>))? <STRING> <A_GR> partenza (indirizzo)* arrivo (period)? (km_tot)? ( pend_prc )? ( pend_max )? ( disliv)? description <C_GR> • PointsofInterests (non necessariamente sul percorso) poi ::= (<RIST>|<MED>|<MEC>|<GAS>) <STRING><A_GR> <Indirizzo> (contatti )? <C_GR>

  8. stage ::= <STAGE> (“by” (<BIKE> | <CAR>))? <STRING> <A_GR> partenza (indirizzo)* arrivo (period)? (km_tot)? ( pend_prc )? ( pend_max )? ( disliv)? description <C_GR>km_tot ::= <KM_TOT> (<INT>|<FLOAT>) alt ::= <ALT> (<FLOAT>|<INT>) disliv ::= <DISLIV> (<FLOAT>|<INT>) pend_prc ::= <PEND_PRC> <FLOAT> pend_max ::= <PEND_MAX> <INT> La Grammatica: Race • Esempio: race { stage by bike "Cesenatico - Polenta“ { departure "Portocanale di Cesenatico“ { addr "via Cesenatico 10, Cesenatico" h 05:00 img“http://www.cesenaticoholidays.com/images/eventi/noveColli/partenza_noveColli.jpg“ } addr "Via San Pellegrino 5, Cesenatico“ addr "Via Collinello, Bertinoro" arrival "Polenta“ { addr "via Polenta 477, Polenta, Bertinoro“ km 37 alt 287 } data 20/05/10 km_tot 34 pend_% 3.06 pend_max 13 disliv 284 info "Dopo essersi lasciati alle spalle il mare di Cesenatico,...“ } firstAid "Ospedale Bufalini" { addr "viale Ghirotti 286, Cesena" tel 0547352111 website "www.ausl-cesena.emr.it"} } partenza ::= <DEP> <STRING> <A_GR> (indirizzo | coordinates) (km)? (alt)? (time)? ( img )? <C_GR> poi ::= (<RIST>|<MED>|<MEC>|<GAS>) <STRING> <A_GR> indirizzo ( contatti )? <C_GR>contatti ::= (tel| email|web)+ tel ::= <TEL> <INT> email ::= <EMAIL> <STRING> web ::= <WEB> <STRING> indirizzo ::= <ADDR> <STRING> arrivo ::= <ARR> <STRING> <A_GR> (indirizzo | coordinates) (km)? (alt)? (time)? ( img )? <C_GR>

  9. La Grammatica: Tour tour ::= <TOUR> <A_GR> ( destination | stage | poi )+ <C_GR> Un tour rappresenta un evento con eventuali mete da visitare lungo il percorso (esempi: tour culturali/enogastronomici, raduni d’auto d’epoca, …). Un tour prevede la possibilità di definire: • Punti di sosta di rilevanza turistica. destination ::= <DEST> <STRING> <A_GR> indirizzo (km)? (contatti)? (period)? description> (<img>)? <C_GR> • Percorsi per raggiungere le destinazioni / eventuali tratti di gara (es. raduni auto d’epoca). stage ::= <STAGE> (“by” (<BIKE> | <CAR>))? <STRING> <A_GR> partenza (indirizzo)* arrivo (period)? (km_tot)? ( pend_prc )? ( pend_max )? ( disliv)? description <C_GR> • PointsofInterests (non necessariamente sul percorso) poi ::= (<RIST>|<MED>|<MEC>|<GAS>) <STRING> <A_GR> <Indirizzo> (contatti )? <C_GR>

  10. La Grammatica: Tour destination ::= <DEST> <STRING> <A_GR> indirizzo (km)? (contatti)? (period)? description (<img>)? <C_GR> • Esempio: tour { dest “Museo della Marineria di Cesenatico” { addr "via Cesenatico 10, Cesenatico" km 10 tel 0547 80375 date 31/10/10 info “museo allestito sul portocanale di Cesenatico…“img “http://www.cesenatico.it/img/museo.jpg” } gas “Distributore ESSO“ { addr “Statale Adriatica, Tagliata di Cervia" tel 054433390 } … } description ::= <INFO> <STRING> img ::= <IMG> <STRING> contatti ::= (tel| email|web)+ tel ::= <TEL> <INT> email ::= <EMAIL><STRING> web ::= <WEB> <STRING> km ::= <KM> (<FLOAT>|<INT>) poi ::= (<RIST>|<MED>|<MEC>|<GAS>) <STRING> <A_GR> indirizzo ( contatti )? <C_GR>

  11. La Grammatica: Sail Race sail_race::= <SAIL><A_GR> ( lap| poi )+ <C_GR> Una sail race rappresenta una regata ed è costituita da una serie di: • Rotte della regata: lap ::= <LAP> <STRING> <A_GR> partenza ( coordinates | boa )+ arrivo ( description )? <C_GR> • PointsofInterests (non necessariamente sul percorso) poi ::= (<RIST>|<MED>|<MEC>|<GAS>) <STRING> <A_GR> <Indirizzo> (contatti )? <C_GR>

  12. La Grammatica: Sail Race boa ::= <BOA> <A_GR> coordinates ( miles )? <C_GR> coordinates ::= <COORD> <A_GR> latlng <C_GR> lat ::= <LAT> <FLOAT> lng ::= <LNG> <FLOAT>miles ::= <MI> (<FLOAT>|<INT>) coordinates ::= <COORD> <A_GR> latlng <C_GR> lat ::= <LAT> <FLOAT> lng ::= <LNG> <FLOAT> • Esempio: sail{ lap "Tappa Cesenatico-Cervia“ { departure "Congrega Velisti Cesenatico" { coordinates { lat 44.210821 lng 12.395849 } } coordinates { lat 44.226707 lng 12.424579 } boa { coordinates { lat 44.229414 lng 12.431617 } } coordinates { lat 44.266745 lng 12.378703 } coordinates { lat 44.269745 lng 12.368703 } arrival "Portocanale di Cervia“ { coordinates { lat 44.267533 lng 12.356687 } } info "La prima tappa della regata prevede il raggiungimento del portocanale di Cervia." } restaurant “Ristorante da Urbano" { addr "via Lungomare Ponente 1, Cesenatico" tel 0547352111 } } Per la costruzione del percorso della regata tramite coordinate (semplici punti intermedi) e boe. lap ::= <LAP> <STRING> <A_GR> partenza ( coordinates | boa )+ arrivo ( description )? <C_GR> partenza ::= <DEP> <STRING> <A_GR> (indirizzo | coordinates) (km)? (alt)? (time)? ( img )? <C_GR> arrivo ::= <ARR> <STRING> <A_GR> (indirizzo | coordinates) (km)? (alt)? (time)? ( img )? <C_GR>

  13. La Grammatica G = <VT, VN, P, S> • PRODUZIONI: s ::= <EVENT> <STRING> <A_GR> descriptionperiod( tour | race | sail_race ) <C_GR> tour ::= <TOUR> <A_GR> ( destination | stage | poi )+ <C_GR> race ::= <RACE> <A_GR> ( stage|poi )+ <C_GR> sail_race::= <SAIL><A_GR> ( lap| poi )+ <C_GR> destination ::= <DEST> <STRING> <A_GR> indirizzo (km)? (contatti)? (period)? description> (<Img>)? <C_GR> stage ::= <STAGE> (“by” (<BIKE> | <CAR>))? <STRING> <A_GR> partenza (indirizzo)* arrivo (period)? (km_tot)? ( pend_prc )? ( pend_max )? ( disliv)? description <C_GR> lap ::= <LAP> <STRING> <A_GR> partenza ( coordinates | boa )+ arrivo (description)? <C_GR> partenza ::= <DEP> <STRING> <A_GR> (indirizzo | coordinates) (km)? (alt)? (time)? (img )? <C_GR> arrivo ::= <ARR> <STRING> <A_GR> (indirizzo | coordinates) (km)? (alt)? (time)? (img )? <C_GR> poi ::= (<RIST>|<MED>|<MEC>|<GAS>) <STRING> <A_GR> <Indirizzo> (contatti)? <C_GR> boa ::= <BOA> <A_GR> coordinates ( miles )? <C_GR>

  14. La Grammatica description ::= <INFO> <STRING> indirizzo ::= <ADDR> <STRING> period ::= <DATA> (<DATE> | “da” <DATE> “a” <DATE>) time ::= <TIME> <ORARIO> coordinates ::= <COORD> <A_GR> latlng <C_GR> lat ::= <LAT> <FLOAT> lng ::= <LNG> <FLOAT> miles ::= <MI> (<FLOAT>|<INT>) km ::= <KM> (<FLOAT>|<INT>) km_tot ::= <KM_TOT> (<INT>|<FLOAT>) alt ::= <ALT> (<FLOAT>|<INT>) disliv ::= <DISLIV> (<FLOAT>|<INT>) pend_prc ::= <PEND_PRC> <FLOAT> pend_max ::= <PEND_MAX> <INT> img ::= <IMG> <STRING> contatti ::= (tel| email|web)+ tel ::= <TEL> <INT> email ::= <EMAIL> <STRING> web ::= <WEB> <STRING>

  15. Analisi della Grammatica • La grammatica è di tipo 2 (context free) secondo la classificazione di Chomsky in quanto le produzioni sono vincolate alla forma: • … tuttavia non sono presenti produzioni con self-embedding • … pertanto il linguaggio è regolare (tipo 3) A → αcon α є (VT U VN)* ed A є VN A → α1 A α2 con A є VN e α1, α2 є (VN U VT)+

  16. Analisi della Grammatica • La grammatica è LL(1)? • Una grammatica context-freeè LL(1) se per ogni metasimbolo che compare nella parte sinistra di più produzioni alternative, i DIRECTOR SYMBOLS relativi a tali produzioni sono disgiunti. Grammatica è LL(1) grammatica LL(1) è caratterizzata dalla possibilità di analizzare la frasi Leftto right applicando la Left-mostderivation utilizzando al più 1 simbolo della frase per scegliere con certezza la produzione opportuna per la riscrittura. SS(α) se α non genera mai ε-rules DS(A → α) SS(α) U FOLLOW(A) se α può generareε-rules

  17. Strumenti Utilizzati • Linguaggio di programmazione: • C# • IDE di sviluppo: • Visual Studio 2010 • Piattaforma web: • ASP .Net 4.0 • Strumento per generazione automatica di Lexer e Parser: • ANTLR 3.0 • Strumenti di supporto per la valutazione del linguaggio: • Web Services: • Google Geocoding API • Google Directions API

  18. Architettura: Package • Il progetto è stato implementato con una ClassLibrary,EventiATappeLib.dll, che verrà poi utilizzata all’interno di una applicazione web ASP.Net per generare contenuti.

  19. Architettura: Nodi AST • Antlr3.0 non implementa più Pattern Visitor per la valutazione dell’AST… • Estensione della classe CommonTree che rappresenta il generico nodo dell’AST • Package AST: alcuni nodi…

  20. Architettura del Sistema

  21. Editor Web del linguaggio

  22. Funzionamento del Sistema LEXER Tokens PARSER AST

  23. Valutazioni • KeyholeMarkup Language • XML basede condivide parte della grammatica di GML dell’Open GeospatialConsortium(standard ISO). • Linguaggio proprietario di Google per la definizione di mappe interattive utilizzate in Google Maps e Google Earth. KmlVisitor • JavaScriptObjectNotation • Linguaggio standard IETF per la definizione di oggetti JavaScript. • l'interprete JavaScript è in grado di eseguire il parsing di una stringa Json tramite una semplice chiamata alla funzione eval() che restituisce l’oggetto JavaScript rappresentato. • Molto utilizzato in ambito Web con teconologiaAjax per lo scambio di dati al posto di XML perché più leggero. JsonVisitor AST HtmlVisitor

  24. Verifica Semantica delle frasi • Errori lessicali e sintattici vengono rilevati direttamente da Lexer e Parser tramite le eccezioni predefinite di Antlr. • Errori semantici gestiti: • Verifica correttezza date e orari. • Verifica esistenza indirizzo richiesto a Google Geocoding • Verifica correttezza sintattica URL immagine • Verifica correttezza sintattica indirizzi email

  25. Collaudo • Per il collaudo sono stati realizzati alcuni esempi delle tre tipologie di evento… tra cui un evento ciclistico reale! • I contenuti web della Nove Colli 2011 ad un mese dalla pubblicazione, hanno avuto un notevole successo: • Apprezzamento degli utenti web che hanno manifestato un grande interesse per l’evento in termini di visite alla pagina e richieste di prenotazione nel periodo dell’evento.

  26. Sviluppi futuri • Limiti: • Contenuti attualmente presentati prevalentemente testuali… manca la possibilità di introdurre video e photogallery dell’evento. • Sviluppi Futuri: • Estensioni del linguaggio per integrare informazioni sull’evento: • Mash-upcon Wikipedia per integrare informazioni turistiche. • Aggiunta contenuti multimediali da Youtube e Flickr • Potenziamento sezione gestionale nel CMS al fine di affiancare all’attuale editor del linguaggio un wizard per l’inserzione nuovi eventi che generi in modo trasparente all’utente le frasi del linguaggio.

More Related