• Non ci sono risultati.

Progetto di un'applicazione web per servizi di mobilità urbana tramite l'uso di OpenData

N/A
N/A
Protected

Academic year: 2021

Condividi "Progetto di un'applicazione web per servizi di mobilità urbana tramite l'uso di OpenData"

Copied!
128
0
0

Testo completo

(1)

CAMPUS DI CESENA

SCUOLA DI INGEGNERIA E ARCHITETTURA

Corso di Laurea Magistrale in Ingegneria Informatica

PROGETTO DI UN’APPLICAZIONE WEB

PER SERVIZI DI MOBILIT `

A URBANA

TRAMITE L’USO DI OPENDATA

Tesi in

Laboratorio di Reti di Telecomunicazioni LM

Relatore

Prof. Walter Cerroni

Correlatore

Prof. Franco Callegati

Presentata da

Andrea Giulia Cialotti

(2)
(3)
(4)
(5)

1

Introduzione agli OpenData

1

1.1

Cosa sono gli OpenData . . . .

2

1.2

Come far diventare i dati OpenData . . . .

10

1.3

Linked Open Data e Web Semantico

. . . .

16

1.3.1

Resource Description Framework

. . . .

19

2

Analisi ed elaborazione degli OpenData di Tper

23

2.1

Requisiti dell’applicazione . . . .

23

2.2

Database di Tper . . . .

24

3

Progetto dell’Applicazione

45

3.1

Geocoding . . . .

45

3.2

Selezione fermate . . . .

48

3.3

Interazione con il Web Service HelloBus

. . . .

63

4

Casi d’uso dell’Applicazione

69

5

Conclusioni e Sviluppi Futuri

81

(6)
(7)

Apertura, partecipazione, collaborazione e possibilit`

a di creare una

compe-tenza collettiva sono i motivi che portano alla nascita e alla diffusione degli

OpenData, i quali favoriscono l’interoperabilit`

a e la trasparenza dei governi

nei confronti dei cittadini, inoltre migliorano l’efficienza delle

amministrazio-ni pubbliche, e mettono in grado le persone di affrontare meglio le decisioamministrazio-ni

che riguardano la loro vita potendo utilizzare informazioni che prima non

erano disponibili.

Il lavoro svolto nell’elaborato si colloca nel settore della mobilit`

a urbana e

nasce dalla decisione dell’azienda Tper di mettere a disposizione i propri dati

in formato OpenData sul sito web http://www.tper.it/tper-open-data.

L’o-biettivo principale `

e la realizzazione di un’applicazione in grado di fornire

informazioni in tempo reale sulle linee di autobus, e relative fermate, in una

determinata area di interesse.

Il primo capitolo definisce gli OpenData, cio`

e dati accessibili a chiunque

sen-za vincoli di natura giuridica e tecnologica, sottolineandone l’importansen-za e la

notevole diffusione che hanno avuto negli ultimi anni, infine presenta alcuni

progetti attualmente attivi come OpenStreetMap e wheredoesmymoneygo.

Il secondo capitolo introduce i requisiti dell’applicazione in particolare

il-lustrando le modalit`

a con le quali l’utente pu`

o interagire con essa, ovvero

inserendo nella richiesta la propria posizione nei formati di indirizzo postale

o di coordinate geografiche, ed il tempo di percorrenza massimo che `

e

dispo-sto ad impiegare per raggiungere le fermate. Inoltre presenta gli OpenData

di Tper e l’elaborazione necessaria per poterli utilizzare nell’applicazione.

Il terzo capitolo espone il processo di produzione dell’applicazione

descriven-do nel dettaglio come vengono effettuate la traduzione da indirizzo postale

a coordinate geografiche, la selezione delle fermate che rispettano i requisiti

specificati dall’utente, e l’interazione con il Web Service HelloBus.

(8)
(9)

al-Introduzione agli OpenData

L’idea che la conoscenza deve essere un bene comune era gi`

a nota ancor

pri-ma della nascita del World Wide Web. Nel 1942 il sociologo Robert King

Merton discusse l’importanza di mettere i risultati della ricerca a

disposizio-ne di chiunque.

E’ fondamentale che ogni ricercatore contribuisca alla conoscenza comune,

rinunciando ai propri diritti di propriet`

a intellettuale sulla sua ricerca per

permettere alla conoscenza di andare avanti. Il World Wide Web viene

in-ventato proprio per questi motivi, e per favorire la comunicazione e la

coo-perazione tra i ricercatori del CERN da Tim Berners-Lee nel 1989.

Il primo ambito in cui `

e stata sperimentata questa cultura `

e l’Open Source

che si fonda sui concetti di apertura, partecipazione e collaborazione. Si pu`

o

imparare dal lavoro di altri ma in cambio si deve poi pubblicare il proprio:

in questo modo si crea una competenza collettiva. Nel 2009 come si evince

dall’Open Government Directive [1] emanata dal presidente Obama, la quale

indica delle linee guida per favorire la trasparenza del governo, e

dall’inter-vento di Tim Berners-Lee al TED (Technology, Entertainment, Design) [2],

tali principi trovano utile applicazione anche nella raccolta e gestione dei

da-ti.

I dati prodotti dalla pubblica amministrazione, in quanto finanziati da

de-naro pubblico, devono ritornare ai contribuenti, e alla comunit`

a in generale,

sotto forma di dati aperti e universalmente disponibili.

Questi sono i motivi che hanno portato alla nascita degli OpenData, i quali

favoriscono l’interoperabilit`

a, cio`

e la possibilit`

a di elaborare dati provenienti

da fonti diverse e utilizzarli per migliorare prodotti e servizi esistenti o per

(10)

svilupparne di nuovi. Inoltre favoriscono la trasparenza dei governi nei

con-fronti dei cittadini, migliorano l’efficienza delle amministrazioni pubbliche,

promuovono la collaborazione, mettono in grado le persone di affrontare

me-glio le decisioni che riguardano la loro vita, potendo utilizzare informazioni

che prima non erano disponibili.

La diffusione degli OpenData non porta solo un aumento dei dati, ma un

aumento della qualit`

a dei dati in termini di valore economico, sociale e

cul-turale che scaturisce dagli infiniti usi che possono esserne fatti.

Gli OpenData non focalizzano la loro utilit`

a esclusivamente nel settore

del-le Pubbliche Amministrazioni, bens`ı trovano utidel-le applicazione anche altri

settori tra i quali: scientifico, finanziario, statistico, ambientale, culturale,

geografico, meteorologico e trasportuale.

Esempi di applicazioni che utilizzano OpenData sono

00

wheredoesmymoneygo

00

un progetto inglese che permette di vedere come viene speso il denaro

incas-sato dal governo mediante le tasse,

00

openstreetmap

00

il quale permette di

visualizzare e modificare cartine geografiche dell’interno pianeta con un

livel-lo di dettaglio molto elevato,

00

OpenP arlamento

00

che consente di monitorare

le attivit`

a svolte nel parlamento e il processo di attuazione delle leggi.

1.1

Cosa sono gli OpenData

Secondo la OpenDefinition [3] gli OpenData sono:

00

dati che possono essere utilizzati gratuitamente, riutilizzati e ridistribuiti da

tutti. L’unico vincolo che possono avere nell’utilizzo, `

e al pi`

u quello di

indi-care la fonte e condividerli utilizzando la stessa licenza da questa adottata

00

Tale definizione implica che gli OpenData sono dati accessibili a chiunque,

senza vincoli di natura giuridica, ad esempio licenze che ne vincolino la

ven-dita o la distribuzione a terzi, e di natura tecnologica, ad esempio dati in

formati proprietari, o non provvisti di documentazione adeguata che ne

con-senta la comprensione. La licenza pu`

o tuttavia imporre l’attribuizione, cio`

e

l’obbligo di citare la fonte dalla quale proviene il contenuto, e l’integrit`

a, cio`

e

nel caso in cui un database venga distribuito in forma modificata deve avere

un nome o un numero di versione che lo distingua dall’opera originaria.

(11)

Gli standard internazionali per la trasparenza [4], hanno stabilito che gli

OpenData sono:

1. Completi

Tutti gli elementi appartenenti ad un database pubblico devono

es-sere pubblicati, inclusi i contenuti archiviati in formato non digitale

(eventualmente digitalizzandoli), ed i dati e le spiegazioni dei metodi

utilizzati per generare i dati aggregati e derivati.

2. Elementari

I dati devono essere raccolti alla fonte, e devono essere pubblicati con il

livello di dettaglio con cui sono stati raccolti. I dati non sempre sono in

un formato utilizzabile quando vengono raccolti, quindi in questi casi

si pu`

o eseguire un’elaborazione post-raccolta, a condizione che i dati

risultanti siano in formato che rifletta la capacit`

a e la granularit`

a del

meccanismo di raccolta originale. I dati non devono MAI essere persi.

3. Tempestivi

I dati devono essere resi disponibili il pi`

u rapidamente possibile al fine

di massimizzare il valore per il pubblico. Gli aggiornamenti devono

essere facilmente individuabili anche all’interno di database di grandi

dimensioni, attraverso meccanismi come feed RSS, funzioni di ricerca

in grado di filtrare in base alla data, e archivi che contengono snapshot

del database prese a intervalli regolari.

4. Accessibili

I dati devono essere a disposizione di chiunque, per la pi`

u vasta gamma

di scopi possibili. Quindi devono essere condivisibili in modo

sempli-ce, ogni pagina o documento pubblicato deve essere identificato con un

URI, che pu`

o essere diffuso via email, siti web, o social network.

L’u-tente deve poter accedere al database completo senza dover effettuare

nessuna registrazione o pagamento. Inoltre dovrebbe essere possibile il

download dell’intero database attraverso protocolli come l’FTP, o

l’r-sync (per sistemi Unix), e i dati dovrebbero essere forniti di API ben

documentate, al fine di consentire anche elaborazioni automatizzate,

ad esempio attraverso agenti software. L’accessibilit`

a dovrebbe essere

garantita anche per persone con disabilit`

a, ad esempio per i non vedenti

attraverso software screen reader che interpreta il dato e lo invia ad un

monitor Braille, o ne effettua una riproduzione audio. Infine dovrebbe

(12)

essere presente un software che consenta di tradurre il documento nella

lingua desiderata, per permettere di usufruire del dato anche a persone

che non conoscono la lingua.

5. Utilizzabili da una macchina

I dati devono essere disponibili sia un formato leggibile dagli utenti,

sia in uno strutturato in modo da permettere l’elaborazione

automa-tizzata. Per esempio la pubblicazione di intervento ad una conferenza

in formato video o audio, dovrebbe essere accompagnata dalla sua

tra-scrizione. In particolare i database devono essere forniti in un formato

semplice da processare, come ad esempio CSV, JSON o XML e devono

sempre essere accompagnati da una documentazione chiara che spieghi

dettagliatamente il significato di ogni campo.

6. Non proprietari

I dati devono essere disponibili in un formato aperto cio`

e un formato:

sul quale nessun ente ha il controllo esclusivo; non soggetto a controlli

di propriet`

a intellettuale in nessun paese; per il quale i documenti che

ne definiscono la struttura sono liberamente accessibili. HTML e XML

sono esempi di formati aperti.

7. Utilizzabili liberamente

I possibili utilizzatori o usi(ad esempio l’uso commerciale) dei dati non

devono essere limitati da protezioni della propriet`

a intellettuale, come

ad esempio copyright, marchi, brevetti. Questo deve essere specificato

esplicitamente nella licenza (ulteriori dettagli nella sezione 1.2).

8. Sindacabili

Ogni ente pubblico o privato, quando pubblica dei dati deve fornire i

contatti di una persona, che `

e stata incaricata di rispondere a domande

e reclami sui contenuti pubblicati.

9. Individuabili

I dati devono essere trovati facilmente da chi li sta cercando. A tal fine

devono essere inclusi in liste appropriate, le quali devono essere

acces-sibile ai motori di ricerca, e mantenute aggiornate. Inoltre `

e opportuno

fornire i siti web contenenti i dati di sitemap complete e includerle nei

maggiori motori di ricerca.

(13)

10. Permanenti

Con il passare del tempo i dati devono essere archiviati in un modo che

soddisfi i criteri precedenti.

Gli OpenData favoriscono l’interoperabilit`

a, cio`

e la possibilit`

a di elaborare

dati provenienti da fonti diverse e utilizzarli per migliorare prodotti e servizi

esistenti o per svilupparne di nuovi. Inoltre favoriscono la trasparenza dei

governi nei confronti dei cittadini, migliorano l’efficienza delle

amministrazio-ni pubbliche, promuovono la collaborazione, mettono in grado le persone di

affrontare meglio le decisioni che riguardano la loro vita, potendo utilizzare

informazioni che prima non erano disponibili. La diffusione degli OpenData

non porta solo un aumento dei dati, ma un aumento della qualit`

a dei dati in

termini di valore economico, sociale e culturale che scaturisce dagli infiniti

usi che possono esserne fatti.

Esempi di progetti che utilizzano gli Open Data sono:

- husetsweb.dk [5] che permette alle famiglie di vedere come massimizzare

l’efficienza dell’energia nella loro casa, includendo una pianificazione

finanziaria e trovando costruttori che svolgano i lavori necessari. Esso

utilizza le informazioni catastali e quelle relative ai sussidi governativi;

- wheredoesmymoneygo [6] un progetto inglese che permette di vedere

(14)

- BikeDistrict il quale calcola gli itinerari pi`

u adatti alle esigenze di chi

utilizza la bici a Milano, permettendo di scegliere il percorso in base al

tipo di terreno (asfaltato, sterrato), alla presenza di piste ciclabili, di

semafori, e di rotaie.

- OpenStreetMap [7] equivalente di GoogleMaps con dati e codice in un

formato aperto. E’ molto pi`

u accurato di GoogleMaps in quanto `

e stato

realizzato collettivamente da volontari, e chiunque pu`

o modificare le

mappe e aggiungere dettagli.

(a) Piazza Maggiore, Bologna con GoogleMaps

(b) Piazza Maggiore, Bologna con OpenStreetMap

- Google Translate il servizio di traduzione di Google, il quale utilizzando

i numerosi documenti dell’unione europea disponibili in tutte le lingue

per addestrare gli algoritmi di traduzione `

e migliorato notevolmente.

(15)

- energy.publicdata.eu/ee/vis.html [8] che permette di visualizzare delle

statistiche sull’energia in europa in diversi anni, ad esempio percentuale

di energia rinnovabile, dipendenza energetica dei paesi, emissione di

anidride carbonica.

- OpenParlamento dove si possono monitorare le attivit`

a svolte nel

par-lamento e il processo di attuazione delle leggi, permettendo ai cittadini

di sapere esattamente cosa sta succedendo e quali parlamentari sono

responsabili delle decisioni prese.

In Italia si inizi`

o a parlare di OpenData nel 2007 con il progetto

Open-StreetMap, quando alcune amministrazioni locali grazie all’iniziativa di

al-cuni volontari hanno pubblicato con licenza aperta i dati riguardanti i propri

(16)

stradari. Dalla fine del 2011 `

e online dati.gov.it.

Poi in seguito sono stati pubblicati dati.emilia-romagna.it,

dati.comune.bologna.it, it.ckan.net (sito per la catalogazione di dataset,

ba-sato sul software CKAN), e datiopen.it che offre gratuitamente tutti i servizi

di caricamento, visualizzazione e segnalazione, e numerosi altri.

(17)

A marzo 2013, come riporta dati.gov.it in Italia si contano 5634 dataset

resi disponibili.

Come si pu`

o vedere anche dalla cartina seguente, che mostra la distribuzione

delle amministrazioni che rilasciano OpenData in Italia, la maggior parte dei

dataset resi disponibili `

e localizzata nelle regioni settentrionali. Si noti che

l’area della bolla `

e direttamente proporzionale al numero dei dataset

rilascia-ti dalla specifica amministrazione.

Nonostante il movimento Open Data in Italia sia relativamente giovane,

rap-presenta una realt`

a vitale e attiva anche nei confronti delle altre realt`

a

(18)

eu-ropee, trascinato soprattutto dall’obbiettivo della trasparenza

amministra-tiva. Infatti l’Agenzia per l’Italia Digitale ha stabilito dal 19 marzo 2013

l’OpenData by default cio`

e tutti i dati e documenti che le pubbliche

ammini-strazioni pubblicano con qualsiasi modalit`

a, senza l’espressa adozione di una

licenza d’uso, si intendono rilasciati come dati aperti.

Figura 1.1: Classifica elaborata dalla EPSI (European Public Sector

Infor-mation [9]) ottenuta dalla media di diversi fattori: l’implementazione della

direttiva PSI, la pratica di riuso, i formati, il prezzo, accordi esclusivi, PSI

locale, eventi e attivit`

a. L’Italia si trova al 5

posto, e per gli eventi e attivit`

a

al 1

posto con la Gran Bretagna.

1.2

Come far diventare i dati OpenData

Quando un titolare di un database decide di farlo diventare aperto deve

pri-vilegiare la tempestivit`

a, ovvero preferire di pubblicare parti pi`

u piccole del

database ma pi`

u velocemente. Non `

e vi `

e nessuna richiesta o obbligo di

rendere tutti i dati aperti, anche perch`

e non `

e sempre detto che tutti i dati

che vengono pubblicati suscitino reale interesse alle persone. Infatti `

e

fon-damentale essere sempre in contatto con i potenziali utilizzatori (cittadini,

(19)

imprenditori, sviluppatori) del dataset che `

e stato pubblicato, al fine di

capi-re come aumentacapi-re il valocapi-re e la qualit`

a dei dati pubblicati. Inoltre si devono

tenere in considerazione tutte le conseguenze che comporta la pubblicazione

dei dati, come ad esempio la possibilit`

a di ricavare dati derivati mediante

elaborazioni, oppure la possibilit`

a di cambiare il modo di presentarli, oppure

ancora che vengano utilizzati all’interno di sistemi pi`

u complessi insieme a

dati provenienti da sorgenti diverse.

L’Open Knowledge Foundation ha identificato quattro grandi fasi per

rende-re i dati aperti, molti delle quali possono esserende-re fatte contemporaneamente:

scegliere il dataset, stabilire il tipo di licenza, rendere i dati disponibili,

ren-dere i dati rintracciabili.

Fase 1 : Scegliere il dataset

Durante questa fase si deve capire quale dataset pu`

o essere reso pubblico,

su-scita interesse alla community, pu`

o essere pubblicato interamente cos`ı com’`

e,

oppure `

e pubblicabile solo una sua parte, oppure `

e pubblicabile ma solo dopo

alcune modifiche. In base a queste considerazioni si deve stilare una lista dei

database candidati a diventare aperti e successivamente chiedere dei

riscon-tri via web, tramite i social network, mailing list, forum, blog, evitando di

richiedere registrazioni le quali ridurrebbero il numero delle risposte.

Inoltre una buona pratica `

e far riferimento ad eventuali OpenData gi`

a

presen-ti, specialmente quelli nel settore a cui appartiene il dataset che si vuole

pub-blicare e divulgare la notizia della pubblicazione del dataset il pi`

u possibile,

soprattutto alle autorit`

a competenti e agli esperti del settore del dataset.

Fase 2 : Stabilire il tipo di licenza

Nella maggior parte delle giurisdizioni ci sono delle leggi sulla propriet`

a

in-tellettuale dei dati che impediscono a terzi di utilizzare e distribuire i dati

senza un permesso esplicito del titolare. Quando si decide si rendere i propri

dati aperti `

e fondamentale assegnargli una licenza. Il progetto Open Data

Commons [10] della Open Knowledge Foundation [11], ha specificato alcune

linee guida da seguire per definire le Licenze riguardanti gli OpenData. In

particolare ha definito alcune tipi di licenza, specificando che questi

docu-menti non hanno alcun valore giuridico, ed `

e opportuno che siano analizzati

(20)

da un legale e confrontati con la legislatura del paese di interesse, prima di

essere utilizzati:

ODC Public Domain Dedication and License

Consente di :

• copiare, distribuire, utilizzare il database per qualsiasi fine;

• elaborare il database per produrre una nuova opera;

• modificare, trasformare il database.

Non impone nessun vincolo.

Per attribuire ad un database tale licenza si deve copiare il testo

in-tegrale in un file LICENSE.txt, che dovr`

a essere messo all’interno del

database, oppure riportare la seguente dichiarazione in tutti i siti o le

locazioni in cui si trova il database:

T h i s { D A T A ( B A S E ) - N A M E } is m a d e a v a i l a b l e u n d e r the P u b l i c D o m a i n D e d i c a t i o n and L i c e n s e

v e r s i o n v1 .0 w h o s e f u l l t e x t can be f o u n d at h t t p :// o p e n d a t a c o m m o n s . org / l i c e n s e s / p d d l /

ODC Open Database License

Si riferisce sia ai dati contenuti nel database, sia alla loro struttura, e

alle modalit`

a con le quali si pu`

o accedere ad essi.

Consente di :

• copiare, distribuire, utilizzare il database per qualsiasi fine;

• elaborare il database per produrre una nuova opera;

• modificare, trasformare il database.

Impone i seguenti vincoli:

• Attribuzione: si deve citare la fonte originale in ogni utilizzo

pub-blico del database, o opera prodotta con il database nel modo

descritto nella licenza. Inoltre deve essere precisato che ogni

in-formazione relativa al database originale deve rimanere intatta,

ci`

o significa che se viene creata un’estensione del database con dei

dati derivati, questa dovr`

a avere un nome e una versione che la

distinguano dal database originale.

(21)

• Condivisione allo stesso modo (Share-alike): se si vuole pubblicare

una versione modificata del database, o un’opera prodotta da una

versione modificata del database, lo si deve fare con lo stesso tipo

di licenza del database originale.

• Mantenerlo aperto: se si distribuisce il database, o una sua

versio-ne modificata si possono usare delle misure tecnologiche per

limi-tarne la diffusione (tipo Digital Rights Management ad esempio

il codice seriale), a condizione di distribuirne anche una versione

senza nessuna misura limitativa.

Per attribuire ad un database tale licenza si deve copiare il testo

in-tegrale in un file LICENSE.txt, che dovr`

a essere messo all’interno del

database, oppure riportare la seguente dichiarazione in tutti i siti o le

locazioni in cui si trova il database:

T h i s { D A T A ( B A S E ) - N A M E } is m a d e a v a i l a b l e u n d e r O p e n D a t a b a s e L i c e n s e w h o s e f u l l t e x t can be f o u n d at h t t p :// o p e n d a t a c o m m o n s . org / l i c e n s e s / o d b l /. Any r i g h t s in i n d i v i d u a l c o n t e n t s of the d a t a b a s e are l i c e n s e d u n d e r the D a t a b a s e C o n t e n t s L i c e n s e w h o s e t e x t can be f o u n d at h t t p :// o p e n d a t a c o m m o n s . org / l i c e n s e s / d b c l /

Open Data Commons Attribution License

Consente di:

• copiare, distribuire, utilizzare il database per qualsiasi fine;

• elaborare il database per produrre una nuova opera;

• modificare, trasformare il database.

Impone i seguenti vincoli:

• Attribuzione: si deve citare la fonte originale in ogni utilizzo

pub-blico del database, o opera prodotta con il database nel modo

descritto nella licenza. Inoltre deve essere precisato che ogni

in-formazione relativa al database originale deve rimanere intatta,

ci`

o significa che se viene creata un’estensione del database con dei

dati derivati, questa dovr`

a avere un nome e una versione che la

distinguano dal database originale.

(22)

Per attribuire ad un database tale licenza si deve copiare il testo

in-tegrale in un file LICENSE.txt, che dovr`

a essere messo all’interno del

database, oppure riportare la seguente dichiarazione in tutti i siti o le

locazioni in cui si trova il database:

C o n t a i n s i n f o r m a t i o n f r o m D A T A B A S E N A M E w h i c h is m a d e a v a i l a b l e u n d e r the A t t r i b u t i o n L i c e n s e

w h o s e t e x t can be f o u n d at

h t t p :// o p e n d a t a c o m m o n s . org / l i c e n s e s / by / 1 . 0 /

Creative Commons Zero License (CC0)

(a) Marchio licenze CC (b) Licenza

CC0

Fa parte delle licenze Creative Commons [12], le quali forniscono la

licenza con un design a tre livelli:

1. documento legale: con strutturazione e termini linguistici legali;

2. documento interpretabile da persone normali : non ha valenza

le-gale, serve per far comprendere a persone non competenti quali

diritti da la licenza;

3. documento machine-readable: agevola la diffusione e la

rintraccia-bilit`

a della licenza, utilizzando il linguaggio Creative Commons

Rights Expression Language (CC REL) il quale specifica come la

licenza pu`

o essere descritta in RDF (ulteriori dettagli in 1.3.1).

La licenza CC0 [13] indica che l’autore ha reso la sua opera di dominio

pubblico, rinunciando a tutti i suoi diritti e diritti connessi o simili che

detiene su di essa, quali i suoi diritti morali (per quanto rinunciabili),

i suoi diritti all’immagine o alla riservatezza, diritti che lo proteggono

contro la concorrenza sleale, e diritti sulle banche di dati che limitino

l’estrazione, la disseminazione ed il riuso dei dati. Inoltre egli non

fornisce nessuna garanzia sull’opera, e declina ogni responsabilit`

a per

tutti gli usi che possono essere fatti dell’opera nella misura consentita

dalla legge.

(23)

Per quanto riguarda l’Italia, `

e stata sviluppata l’Italian Open Data

License (IODL):

Esistono due versioni di questa licenza, ovvero IODL v1.0 [14] pubblicata nel

2010 e IODL v2.0 [15] pubblicata nel 2012, le quali consentono di:

• copiare, distribuire, utilizzare il database per qualsiasi fine;

• elaborare il database per produrre una nuova opera;

• modificare, trasformare il database.

L’Italian Open Data License v1.0 si distingue dalla v2.0 perch`

e la prima

impone i vincoli di attribuizione e di condivisione allo stesso modo

(compa-tibile con la licenza Open Database), mentre la seconda solo il vincolo di

attribuizione (compatibile con la Open Data Commons Attribution).

Fase 3 : Rendere i dati disponibili

I database devono essere disposizione di chiunque, preferibilmente attraverso

un download gratuito su un sito web, in un formato comprensibile dalle

per-sone, ed anche in un formato che ne permetta l’utilizzo attraverso un processo

automatico. Inoltre deve essere possibile accedervi da qualsiasi piattaforma.

Il modo pi`

u semplice `

e permettere il download del database sul proprio sito

web, ma in questo modo si limita l’utilizzo del database alle sole persone che

sono a conoscenza del sito. Per questa ragione sono presenti diversi siti web

che si occupano di raccogliere database relativi ad un particolare settore, ad

esempio cosm.com `

e pensato per connettere dispositivi e apps, scambiarsi

dati e idee tra sviluppatori. Altri modi per condividere il database sono

at-traverso un server FTP, o con BitTorrent.

I dati possono essere pubblicati anche con API (Application Programming

Interface) le quali permettono di eseguire diverse elaborazioni sui di essi, ad

esempio selezionare un sottoinsieme di dati dal database, con il vantaggio

che poich`

e si connettono al database in tempo reale restituiranno sempre

i dati pi`

u aggiornati. Un esempio di approccio via API `

e l’accesso ai dati

mediante Web Services, con query la cui sintassi `

e descritta in formato XML

all’interno della Web Service Description. I dati pubblicati con le API sono

(24)

strettamente dipendenti dal fornitore del database, perci`

o se questo effettua

delle modifiche strutturali del database potrebbero non essere disponibili per

un certo intervallo di tempo.

Diversamente quelli diffusi all’interno di file potrebbero non essere

aggiorna-ti, per`

o rimangono sempre disponibili anche quando il fornitore effettua delle

modifiche.

Fase 4 : Rendere i dati rintracciabili

Gli OpenData non hanno alcun valore se non vengono utilizzati da nessuno.

E’ fondamentale utilizzare tutti i mezzi possibili per divulgare il fatto che il

database `

e diventato aperto ad esempio social network, mailing list, forum,

conferenze, barcamps (conferenze online), e hackadays (hackathlon). Inoltre

un approccio tipico `

e usare i tool esistenti che si occupano di raccogliere e

indicizzare i database, come ad esempio datahub.io che contiene database

provenienti da tutto il mondo. Oltre a questi sono disponibili online anche

dei tool per realizzare queste raccolte di OpenData da zero, uno di questi `

e

ckan.org.

1.3

Linked Open Data e Web Semantico

I Linked Open Data sono degli Open Data connessi tra loro tramite delle

relazioni di semantica, le quali sono esprimibili nei dati stessi in un formato

comprensibile dalle persone e dalle macchine che si chiama RDF (Resource

Description Framework). In particolare viene utilizzato il modello RDF per

descrivere il significato dei dati, e i link RDF per collegare i dati sulla base

del loro significato. Infatti i Linked Open Data stanno alla base della teoria

sul Web Semantico, un web nel quale si potr`

a navigare non solo sulla base

della sintassi dei dati, ma anche sulla base del loro significato sfruttando i

collegamenti RDF.

Ad esempio, quando un utente sta cercando dei dati relativi ad una persona

da una sorgente, potrebbe essere interessato alle informazioni relative alla

citt`

a dove abita quella persona. Queste informazioni possono essere ottenute

seguendo un collegamento RDF dal dataset contenente i dati della persona,

ad un altro dataset che le contiene. Quindi la ricerca di un documento non

viene pi`

u fatta mediante collegamenti ipertestuali ma tramite collegamenti

RDF. I collegamenti RDF possono essere interpretati da motori di ricerca

(25)

semantici, che permetteranno ricerche sofisticate con query che non

restitui-ranno pi`

u dei semplici link a pagine HTML, ma dati strutturati che potranno

essere utilizzati immediatamente all’interno di altre applicazioni.

Il Linking Open Data `

e un progetto del W3C che si occupa di pubblicare

da-taset in formato RDF e creare collegamenti RDF tra gli elementi provenienti

da dataset diversi.

La figura 1.2 mostra i dataset resi aperti e collegati nel 2011, i quali sono

circa 295, composti da oltre 31 miliardi di triple RDF, collegate da circa 504

milioni di link RDF.

Figura 1.2: Linking Open Data cloud (2011): dataset pubblicati e le loro

relazioni.

Tim Berners-Lee, l’inventore del World Wide Web, nel 2006 ha indicato un

insieme di regole da seguire per pubblicare i dati sul web, in modo che essi

diventino parte di uno spazio di dati globale:

1. indentificare le risorse con Uniform Resource Identifier (URI);

2. usare HTTP URI in modo che si possano fare riferimenti facilmente e

possano essere cercati sia da persone che da user agent;

(26)

3. quando qualcuno cerca una risorsa, fornirgli informazioni utili e

colle-gate all’URI della risorsa, utilizzando i formati standard (RDF,

SPAR-QL);

4. includere collegamenti ad altre URI collegate al contenuto mostrato,

per migliorare la ricerca di altre informazioni utili nel Web.

Inoltre ha anche classificato il grado di apertura dei dati, in cinque livelli

progressivi, associati al numero di stelle:

1 stella: il dato `

e disponibile sul web (in qualsiasi formato) ma con

una licenza aperta;

2 stelle: il dato `

e disponibile in un formato strutturato che pu`

o essere

interpretato da un software (per esempio un foglio di calcolo Microsoft

Excel);

3 stelle: il dato `

e in un formato strutturato non proprietario (CSV);

4 stelle: oltre a rispettare tutti i criteri precedenti, il dato

utiliz-za standard web interpretabili dalle applicazioni che ne descrivono il

significato (RDF);

5 stelle: il dato rispetta tutti gli altri criteri e inoltre contiene

colle-gamenti ad altri dati (linked data) al fine di fornire un contesto alle

proprie informazioni.

(27)

1.3.1

Resource Description Framework

RDF `

e un framework per descrivere le risorse web e le loro relazioni

seman-tiche attraverso grafici, in un modo interpretabile sia dalle persone che dalle

macchine (con la sintassi XML). Il modello RDF codifica i dati nella forma

di triple < soggetto, predicato, oggetto >.

Il soggetto di una tripla `

e l’URI che identifica la risorsa descritta. L’oggetto

pu`

o essere sia un semplice valore letterale, tipo una stringa, un numero, o una

data; o l’URI di un’altra risorsa che ha una certa relazione con il soggetto.

Il predicato indica che tipo di relazione intercorre tra il soggetto e l’oggetto,

ad esempio

00

data di nascita

00

,

00

datore di lavoro

00

. Il predicato `

e anch’esso un

URI. Gli URI dei predicati si trovano nei vocabolari, i quali sono raccolte di

URI che possono essere usate per rappresentare informazioni riguardanti un

certo dominio. Tra i vocabolari well-known sviluppati dalla Semantic Web

community si possono trovare:

- Friend-of-a-Friend (FOAF), per descrivere i legami tra le persone;

- Dublin Core (DC), per descrivere qualsiasi materiale digitale;

- Semantically-Interlinked Online Communities (SIOC), rappresenta

le principali community online;

- Description of a Project (DOAP), per descrivere progetti;

- Simple Knowledge Organization System (SKOS) per rappresentare

glossari, classificazioni, tassonomie e qualsiasi tipo di vocabolario

strut-turato;

- Geonames `

e un vocabolario geografico open con oltre 10 milioni di nomi

di luoghi;

- Music Ontology, contiene termini per descrivere artisti, album e pezzi;

- Review Vocabulary, per descrivere le recensioni;

- Creative Commons (CC), contiene i vocaboli delle licenze.

Si possono anche definire dei vocaboli nuovi, che non sono presenti nelle

ontologie gi`

a definiti attraverso RDF Vocabulary Description Language 1.0:

RDF Schema. I link RDF sono fondamentali per il Web dei dati (o web

(28)

semantico) perch`

e permettono di collegare isole di dati in uno spazio globale

di dati interconnessi, e di scoprire sorgenti di dati aggiuntive.

I collegamenti RDF si dividono in collegamenti interni e collegamenti

ester-ni : i primi sono triple RDF nelle quali il soggetto e l’oggetto sono riferimenti

URI che puntano alla stessa sorgente di dati, mentre i secondi sono triple

RDF nelle quali il soggetto `

e un riferimento URI nello spazio dei nomi di un

dataset, mentre il predicato e/o l’oggetto sono riferimenti URI che puntano

a spazi di nomi di altri dataset. Dereferenziando queste URI si ottiene la

descrizione delle risorse collegate fornita dal server remoto. Si noti che per

dereferenziare si intende l’atto di recuperare una rappresentazione di una

ri-sorsa o la descrizione semantica di una riri-sorsa creata dal possessore dell’URI.

Se la rappresentazione della risorsa recuperata `

e un RDF contenente ulteriori

URI, questa operazione pu`

o essere fatta ricorsivamente. Questo `

e il

mecca-nismo con il quale si naviga nel web semantico.

Ci sono 3 tipi di collegamenti RDF:

- relazionali: puntano alle cose connesse in altre sorgenti di dati, per

esempio, altre persone, luoghi o generi. Ad esempio i collegamenti di

relazioni permettono alle persone di ottenere informazioni riguardanti

il luogo dove vivono, o dati bibliografici riguardanti le pubblicazioni

che hanno fatto.

- di identit`

a: puntano agli alias URI usati da altre sorgenti di dati per

identificare lo stesso oggetto reale o concetto astratto. I collegamenti di

identit`

a permettono ai client di recuperare ulteriori descrizioni

riguar-danti un’entit`

a da altre sorgenti di dati. Inoltre hanno un’importante

funzione sociale perch`

e permettono di esprimere diversi punti di vista

riguardo alle entit`

a e ai concetti.

- di vocabolario: puntano dai dati alle definizioni nei vocabolari dei

termini che sono usati per rappresentare i dati, cos`ı come da queste

definizioni alle definizioni dei relativi termini negli altri vocabolari. I

collegamenti di vocabolario rendono i dati autodescrittivi e permettono

alle applicazioni di comprendere e integrare i dati attraverso l’uso dei

vocabolari.

Non si devono confondere gli identificatori di documenti Web, con gli

identi-ficatori di altre risorse. Un determinato URI pu`

o identificare un documento

Web oppure una risorsa (anche esterna al Web).

(29)

La domanda sorge spontanea:

Come si recuperano le rappresentazioni delle

risorse mediante i loro URI?

00

.

La figura seguente riporta la relazione tra una risorsa e i documenti che la

rappresentano.

Il protocollo HTTP quando l’accesso ad una pagina Web va a buon fine

resti-tuisce il codice di stato 200, per`

o quando si pubblicano URI che identificano

entit`

a che non sono necessariamente documenti Web `

e necessario un

approc-cio specifico. Il W3C ha proposto due soluzioni: utilizzare hash URI, oppure

il codice di stato 303.

Hash URI

Questa soluzione consiste nell’utilizzare URI che contengono una parte

speciale che `

e separata dal resto dell’URI da un simbolo hash (

00

#

00

).

Quando un client vuole recuperate un URI hash, la parte dell’URI

che si trova dopo il simbolo hash viene tagliata prima di effettuare la

richiesta HTTP al server. Questo significa che un hash URI non pu`

o

essere recuperata direttamente, di conseguenza si intuisce che pu`

o non

identificare necessariamente un documento Web. Infatti le URI hash

possono essere usate per identificare documenti Web e risorse senza

creare ambiguit`

a. Se l’URI richiesta corrisponde ad un documento web,

e ad un documento RDF il server decider`

a quale restituire. Tipicamente

questa decisione viene presa tenendo conto delle preferenze del client,

e della configurazione del server. Successivamente utilizzer`

a l’header

Content-Location per indicare l’esito della scelta.

Codice di stato 303

Questa soluzione consiste nell’utilizzare il codice di stato speciale 303

See Other, per indicare che la risorsa richiesta non `

e un normale

do-cumento Web, quindi il server restituir`

a la locazione di un documento

(30)

contenente informazioni sulla risorsa richiesta. In questo modo si evita

ambiguit`

a tra oggetti del mondo reale e risorse che li rappresentano.

In altre parole, se il server risponde con un normale codice di stato nel

range 2XX, tipo 200 OK, allora il client sa che l’URI identifica un

do-cumento Web, altrimenti se risponde con un codice 303 allora significa

che l’URI identifica una risorsa reale e il client verr`

a reindirizzato ad

un documento che rappresenta la risorsa. Nel caso in cui il documento

RDF e la sua rappresentazione HTML coincidono, allora il client viene

reindirizzato su un documento generico dove potr`

a recuperare il

docu-mento RDF, o la sua rappresentazione HTML.

Avere dei documenti generici che contengono URI di rappresentazioni

della risorsa pi`

u specifiche, permettono un maggior numero di utilizzi ed

elaborazioni della risorsa. Ad esempio un documento generico

riguar-dante un libro, pu`

o contenere URI di documenti contenti il libro nelle

varie traduzioni. Se invece l’URI del documento RDF della risorsa

dif-ferisce da quello della sua rappresentazione HTML, il server restituisce

immediatamente il documento RDF o la sua rappresentazione HTML.

(31)

Analisi ed elaborazione degli

OpenData di Tper

2.1

Requisiti dell’applicazione

L’applicazione ha lo scopo principale di fornire informazioni in tempo reale

sui servizi di mobilit`

a urbana, riguardanti linee di autobus e relative fermate

in una determinata zona di interesse all’interno dell’area di Bologna.

L’utente interagisce con l’applicazione inserendo inizialmente la posizione in

cui si trova utilizzando, come possibili formati, l’indirizzo postale o le

coor-dinate geografiche, ed inserendo poi il massimo tempo di percorrenza a piedi

che `

e disposto a impiegare per raggiungere la fermata. Il server seleziona tra i

dati forniti da Tper tutte le fermate che soddisfano i requisiti della richiesta,

e le linee che transitano su di esse. Le fermate scelte, con le rispettive linee,

verranno restituite all’utente, che dovr`

a specificare il suo interesse verso

tut-te le possibilit`

a o parte di esse. Infine l’applicazione restituir`

a gli orari reali

dei prossimi due autobus in arrivo per ciascuna linea indicata, i quali sono

ottenuti dal Web Service Hello Bus di Tper.

Il servizio dovr`

a presentare le informazioni con un livello di dettaglio tale

da consentire la comprensione a chiunque, sia pendolari che usufruiscono

abitualmente dei servizi di mobilit`

a urbana di Bologna, sia utenti con poca

confidenza con la rete di trasporti di Tper o con la citt`

a in generale.

Inoltre dovr`

a gestire un numero elevato di utenti che effettuano richieste

eterogenee, tra le quali per`

o potranno emergere categorie di utenti con una

richiesta uguale o con caratteristiche simili, come ad esempio l’insieme

(32)

de-gli studenti di una scuola, ognuno dei quali richiede informazioni inerenti le

fermate nei pressi della scuola. In quest’ottica si `

e poi ipotizzata la

possibi-lit`

a di inserire un tablet all’interno dell’atrio scolastico in modo da fornire le

informazioni agli studenti in maniera automatica.

Figura 2.1: Form dell’Hello Bus Web Server di Tper

2.2

Database di Tper

L’azienda Tper fornisce due tipologie di OpenData: una riguarda le

infor-mazioni statiche (ad esempio dove sono collocate le fermate, quali tragitti

effettuano le linee), le quali sono ottenibili scaricando i file in formato xml

o csv dal loro sito; e l’altra riguarda le informazioni in tempo reale (ritardi

degli autobus), le quali vengono restituite mediante query al Web Service

Hello Bus.

Poich`

e il sito di Tper non presenta nessuna documentazione in merito agli

OpenData pubblicati, `

e stato necessario uno studio per comprendere il

signi-ficato dei dati mediante la tecnica del reverse engineering.

Dallo studio `

e emerso che all’interno del database vi sono quattro entit`

a

fondamentali: Fermata, Linea, Percorso e Arco.

Fermata

Pensilina caratterizzata da un codice che la identifica univocamente

e informazioni relative alla sua collocazione geografica. Due pensiline

(33)

Figura 2.2: Pagina web degli OpenData di Tper. Vengono posti in evidenza

quelli utilizzati nell’applicazione.

poste sui lati opposti di una strada sono rappresentate da due Fermate

diverse con codici di identificazione diversi.

Linea

Tratta principale ed eventuali sottotratte secondarie. Ad esempio con

linea 14 si intende la linea 14 che effettua la tratta principale e le linee

14A, 14B, 14C che seguono parte della tratta principale e poi si

scosta-no da questa fiscosta-no a terminare in capolinea diversi. Oppure al contrario

partono da capolinea diversi e poi si immettono nella tratta principale.

Essa nei giorni feriali effettua la tratta da Piazza Giovanni XXIII e

arrivato alla fermata Tangenziale di San Vitale si suddivide nella linea

14A che prosegue per la fermata Antolini fino al capolinea Deposito

Due Madonne, e nelle linee 14B e 14C che proseguono insieme nelle

fermate Larga e Larga Stazione.

Successivamente il 14B passa per la fermata Carrozzaio con

destina-zione Rot. Negroni, mentre il 14C transita per la fermata Innocenti

(34)

Figura 2.3: Linea 14 Barca - Ospedale S. Orsola - Due Madonne/Pilastro

Figura 2.4:

Linee 14A, 14B, 14C Barca - Ospedale S. Orsola - Due

Madonne/Pilastro

(35)

Percorso

Tratta o sottotratta, intesa come insieme di fermate, effettuata da una

determinata linea in un giorno feriale o festivo. Un percorso viene

identificato univocamente dalla linea, un numero (unico all’interno della

linea), ed un verso. Ogni linea ha almeno quattro percorsi:

- la sequenza delle fermate sulla tratta principale in una direzione

effettuata nei giorni feriali;

- la sequenza delle fermate sulla tratta principale nella stessa

dire-zione effettuata nei giorni festivi;

- la sequenza delle fermate sulla tratta principale nella direzione

opposta effettuata nei giorni feriali;

- la sequenza delle fermate sulla tratta principale nella stessa

dire-zione effettuata nei giorni festivi.

Ad esempio la linea 14 ha in totale 12 percorsi.

Arco

Sequenza ordinata di punti in una certa direzione situati in

corrispon-denza di una fermata oppure fra due fermate consecutive. Ogni

percor-so `

e espresso come sequenza di archi che sono a loro volta una sequenza

di fermate e punti tra di esse. Inoltre lo stesso arco pu`

o appartenere

a pi`

u percorsi, nel caso in cui abbiano parte di una tratta in comune.

Ad esempio, come si vede in fig. 2.5, presa una linea L e una specifica

fermata F

4

di un percorso essa presenta quattro archi incidenti: un

arco entrante che ha come ultima fermata F

4

, e un arco uscente, che

ha come prima fermata F

4

per ambedue le direzioni.

Le informazioni sono contenute all’interno delle seguenti tabelle:

- Elenco delle fermate bus, contiene informazioni sulle fermate e

sul-la loro collocazione geografica nei formati di indirizzo postale e

coordi-nate geografiche (latitudine e longitudine).

(36)

Figura 2.5: Esempio di fermata con 4 archi incidenti su di essa.

- Elenco delle linee bus, contiene una lista delle linee bus.

- Linee bus come sequenza di fermate, contiene informazioni su

tut-te le fermatut-te effettuatut-te da ciascuna linea, senza per`

o indicarne l’ordine.

- Linee bus come sequenza di archi, contiene tutti i percorsi

effet-tuati da ciascuna linea, descritti come sequenza ordinata di archi in

una direzione. L’ordine degli archi viene indicato mediante il campo

posizione.

(37)

- Elenco degli archi delle linee bus, contiene una lista di archi

descritti come sequenza ordinata di punti collocati o meno in

corrispon-denza di una fermata. L’ordine `

e indicato dall’ offset posizione, che

vale 0 per il punto iniziale dell’arco e cresce per i punti successivi,

men-tre il codice fermata vale 0 se il punto non `

e collocato su una fermata,

altrimenti assume il codice della fermata.

- Elenco delle zone, contiene i dati relativi alle zone.

L’applicazione si propone di fornire all’utente informazioni sulle fermate

po-sizionate all’interno dell’area di interesse e relative linee che transitano su di

(38)

esse. In particolare, per quanto concerne le linee, `

e opportuno indicarne il

nu-mero e la destinazione, ovvero il capolinea, in modo che l’utente comprenda

su quale lato della strada transiter`

a l’autobus diretto alla sua destinazione.

Come si pu`

o notare dalla descrizione precedente, tale informazione non `

e

presente esplicitamente all’interno del database, ma pu`

o essere ricavata

ese-guendo alcune queries.

Data una fermata F ed una linea L che transita su di essa, il capolinea si

ricava come ultima fermata dell’ultimo arco del percorso di L di cui fa parte

F. Segue una descrizione dettagliata della query, implementata in mysql, che

restituisce la destinazione delle linee di ogni fermata, e delle sottoqueries che

la compongono, partendo dalla sottoquery pi`

u innestata a quella generale.

(39)

1) Query Archi Fermata

Seleziona per ogni fermata tutti gli archi incidenti su di essa.

C R E A T E V I E W Q u e r y _ A r c h i _ F e r m a t a AS S E L E C T E l e n c o _ A r c h i . c o d i c e _ f e r m a t a , E l e n c o _ F e r m a t e . D e n o m i n a z i o n e , E l e n c o _ F e r m a t e . U b i c a z i o n e , E l e n c o _ F e r m a t e . Comune , E l e n c o _ F e r m a t e . L a t i t u d i n e , E l e n c o _ F e r m a t e . L o n g i t u d i n e , E l e n c o _ F e r m a t e . Zona , E l e n c o _ A r c h i . c o d i c e AS c o d i c e _ a r c o F R O M E l e n c o _ F e r m a t e I N N E R J O I N E l e n c o _ A r c h i ON E l e n c o _ F e r m a t e . c o d i c e = E l e n c o _ A r c h i . c o d i c e _ f e r m a t a ;

(40)

2) Query Archi Fermata Linea

Seleziona per ogni linea tutti gli archi incidenti su ciascuna delle sue fermate.

C R E A T E V I E W Q u e r y _ A r c h i _ F e r m a t a _ L i n e a AS S E L E C T Q u e r y _ A r c h i _ F e r m a t a . c o d i c e _ f e r m a t a , Q u e r y _ A r c h i _ F e r m a t a . D e n o m i n a z i o n e , Q u e r y _ A r c h i _ F e r m a t a . U b i c a z i o n e , Q u e r y _ A r c h i _ F e r m a t a . Comune , Q u e r y _ A r c h i _ F e r m a t a . L a t i t u d i n e , Q u e r y _ A r c h i _ F e r m a t a . L o n g i t u d i n e , Q u e r y _ A r c h i _ F e r m a t a . Zona , L i n e e _ S e q u e n z a _ A r c h i . c o d i c e _ l i n e a , L i n e e _ S e q u e n z a _ A r c h i . verso , L i n e e _ S e q u e n z a _ A r c h i . p e r c o r s o , L i n e e _ S e q u e n z a _ A r c h i . p o s i z i o n e , L i n e e _ S e q u e n z a _ A r c h i . c o d i c e _ a r c o F R O M L i n e e _ S e q u e n z a _ A r c h i I N N E R J O I N Q u e r y _ A r c h i _ F e r m a t a ON L i n e e _ S e q u e n z a _ A r c h i . c o d i c e _ a r c o = Q u e r y _ A r c h i _ F e r m a t a . c o d i c e _ a r c o ;

(41)

3) Query Linea Percorso UltimaPosizione

Seleziona l’ultima posizione di ogni percorso effettuato da ciascuna linea.

C R E A T E V I E W Q u e r y _ L i n e a _ P e r c o r s o _ U l t i m a P o s i z i o n e AS S E L E C T c o d i c e _ l i n e a , verso , p e r c o r s o ,

MAX ( p o s i z i o n e ) AS u l t i m a _ p o s i z i o n e F R O M L i n e e _ S e q u e n z a _ A r c h i

(42)

4) Query Linea Percorso UltimoArco

Seleziona l’ultimo arco di ogni percorso effettuato da ciascuna linea.

C R E A T E V I E W Q u e r y _ L i n e a _ P e r c o r s o _ U l t i m o A r c o AS S E L E C T L i n e e _ S e q u e n z a _ A r c h i . c o d i c e _ l i n e a , L i n e e _ S e q u e n z a _ A r c h i . verso , L i n e e _ S e q u e n z a _ A r c h i . p e r c o r s o , Q u e r y _ L i n e a _ P e r c o r s o _ U l t i m a P o s i z i o n e . u l t i m a _ p o s i z i o n e , L i n e e _ S e q u e n z a _ A r c h i . c o d i c e _ a r c o AS u l t i m o _ a r c o F R O M L i n e e _ S e q u e n z a _ A r c h i I N N E R J O I N Q u e r y _ L i n e a _ P e r c o r s o _ U l t i m a P o s i z i o n e ON ( L i n e e _ S e q u e n z a _ A r c h i . p o s i z i o n e = Q u e r y _ L i n e a _ P e r c o r s o _ U l t i m a P o s i z i o n e . u l t i m a _ p o s i z i o n e ) AND ( L i n e e _ S e q u e n z a _ A r c h i . v e r s o = Q u e r y _ L i n e a _ P e r c o r s o _ U l t i m a P o s i z i o n e . v e r s o ) AND ( L i n e e _ S e q u e n z a _ A r c h i . p e r c o r s o = Q u e r y _ L i n e a _ P e r c o r s o _ U l t i m a P o s i z i o n e . p e r c o r s o ) AND ( L i n e e _ S e q u e n z a _ A r c h i . c o d i c e _ l i n e a = Q u e r y _ L i n e a _ P e r c o r s o _ U l t i m a P o s i z i o n e . c o d i c e _ l i n e a );

(43)

5) Query Fermata Linea Percorso Verso UltimoArco

Seleziona, per ogni fermata, ogni possibile arco finale dei percorsi seguiti da

ciascuna linea che transita su di essa.

C R E A T E V I E W Q u e r y _ F e r m a t a _ L i n e a _ P e r c o r s o _ V e r s o _ U l t i m o A r c o AS S E L E C T D I S T I N C T Q u e r y _ A r c h i _ F e r m a t a _ L i n e a . c o d i c e _ f e r m a t a , Q u e r y _ A r c h i _ F e r m a t a _ L i n e a . D e n o m i n a z i o n e , Q u e r y _ A r c h i _ F e r m a t a _ L i n e a . U b i c a z i o n e , Q u e r y _ A r c h i _ F e r m a t a _ L i n e a . Comune , Q u e r y _ A r c h i _ F e r m a t a _ L i n e a . L a t i t u d i n e , Q u e r y _ A r c h i _ F e r m a t a _ L i n e a . L o n g i t u d i n e , Q u e r y _ A r c h i _ F e r m a t a _ L i n e a . Zona , Q u e r y _ A r c h i _ F e r m a t a _ L i n e a . c o d i c e _ l i n e a , Q u e r y _ A r c h i _ F e r m a t a _ L i n e a . verso , Q u e r y _ A r c h i _ F e r m a t a _ L i n e a . p e r c o r s o , Q u e r y _ L i n e a _ P e r c o r s o _ U l t i m o A r c o . u l t i m o _ a r c o

(44)

F R O M Q u e r y _ L i n e a _ P e r c o r s o _ U l t i m o A r c o I N N E R J O I N Q u e r y _ A r c h i _ F e r m a t a _ L i n e a ON ( Q u e r y _ L i n e a _ P e r c o r s o _ U l t i m o A r c o . p e r c o r s o = Q u e r y _ A r c h i _ F e r m a t a _ L i n e a . p e r c o r s o ) AND ( Q u e r y _ L i n e a _ P e r c o r s o _ U l t i m o A r c o . v e r s o = Q u e r y _ A r c h i _ F e r m a t a _ L i n e a . v e r s o ) AND ( Q u e r y _ L i n e a _ P e r c o r s o _ U l t i m o A r c o . c o d i c e _ l i n e a = Q u e r y _ A r c h i _ F e r m a t a _ L i n e a . c o d i c e _ l i n e a );

6) Query Archi OffsetMax

Seleziona l’offset posizione massimo per ogni arco.

Figura 2.6: Query 6

C R E A T E V I E W Q u e r y _ A r c h i _ O f f s e t M a x AS S E L E C T E l e n c o _ A r c h i . codice , Max ( E l e n c o _ A r c h i . o f f s e t _ p o s i z i o n e ) AS o f f s e t _ p o s i z i o n e _ m a x F R O M E l e n c o _ A r c h i G R O U P BY E l e n c o _ A r c h i . c o d i c e ;

(45)

7) Query Archi Offset UltimaFermata

Seleziona l’ultima fermata di ogni arco, ovvero quella con l’offset posizione

massimo.

C R E A T E V I E W Q u e r y _ A r c h i _ O f f s e t _ U l t i m a F e r m a t a AS S E L E C T E l e n c o _ A r c h i . c o d i c e AS c o d i c e _ a r c o , E l e n c o _ A r c h i . o f f s e t _ p o s i z i o n e , E l e n c o _ A r c h i . c o d i c e _ f e r m a t a AS u l t i m a _ f e r m a t a F R O M E l e n c o _ A r c h i I N N E R J O I N Q u e r y _ A r c h i _ O f f s e t M a x ON ( E l e n c o _ A r c h i . c o d i c e = Q u e r y _ A r c h i _ O f f s e t M a x . c o d i c e ) AND ( E l e n c o _ A r c h i . o f f s e t _ p o s i z i o n e = Q u e r y _ A r c h i _ O f f s e t M a x . o f f s e t _ p o s i z i o n e _ m a x );

(46)

8) Query Fermata Linea Percorso Verso

UltimoArcoUltimaFermata

Presa una determinata fermata, per ogni percorso delle linee che la

preve-dono, viene selezionato il codice della fermata capolinea. Si noti che pi`

u

percorsi di una linea possono avere lo stesso capolinea.

C R E A T E V I E W

Q u e r y _ F e r m a t a _ L i n e a _ P e r c o r s o _ V e r s o _ U l t i m o A r c o U l t i m a F e r m a t a AS

(47)

S E L E C T Q u e r y _ F e r m a t a _ L i n e a _ P e r c o r s o _ V e r s o _ U l t i m o A r c o . c o d i c e _ f e r m a t a , Q u e r y _ F e r m a t a _ L i n e a _ P e r c o r s o _ V e r s o _ U l t i m o A r c o . D e n o m i n a z i o n e , Q u e r y _ F e r m a t a _ L i n e a _ P e r c o r s o _ V e r s o _ U l t i m o A r c o . U b i c a z i o n e , Q u e r y _ F e r m a t a _ L i n e a _ P e r c o r s o _ V e r s o _ U l t i m o A r c o . Comune , Q u e r y _ F e r m a t a _ L i n e a _ P e r c o r s o _ V e r s o _ U l t i m o A r c o . L a t i t u d i n e , Q u e r y _ F e r m a t a _ L i n e a _ P e r c o r s o _ V e r s o _ U l t i m o A r c o . L o n g i t u d i n e , Q u e r y _ F e r m a t a _ L i n e a _ P e r c o r s o _ V e r s o _ U l t i m o A r c o . Zona , Q u e r y _ F e r m a t a _ L i n e a _ P e r c o r s o _ V e r s o _ U l t i m o A r c o . c o d i c e _ l i n e a , Q u e r y _ F e r m a t a _ L i n e a _ P e r c o r s o _ V e r s o _ U l t i m o A r c o . verso , Q u e r y _ F e r m a t a _ L i n e a _ P e r c o r s o _ V e r s o _ U l t i m o A r c o . p e r c o r s o , Q u e r y _ F e r m a t a _ L i n e a _ P e r c o r s o _ V e r s o _ U l t i m o A r c o . u l t i m o _ a r c o , Q u e r y _ A r c h i _ O f f s e t _ U l t i m a F e r m a t a . o f f s e t _ p o s i z i o n e , Q u e r y _ A r c h i _ O f f s e t _ U l t i m a F e r m a t a . u l t i m a _ f e r m a t a AS c o d i c e _ c a p o l i n e a F R O M Q u e r y _ F e r m a t a _ L i n e a _ P e r c o r s o _ V e r s o _ U l t i m o A r c o I N N E R J O I N Q u e r y _ A r c h i _ O f f s e t _ U l t i m a F e r m a t a ON Q u e r y _ F e r m a t a _ L i n e a _ P e r c o r s o _ V e r s o _ U l t i m o A r c o . u l t i m o _ a r c o = Q u e r y _ A r c h i _ O f f s e t _ U l t i m a F e r m a t a . c o d i c e _ a r c o ;

9) Query Fermata Linea Capolinea

Partendo dalla vista precedente, ignorando il concetto di percorso, seleziona

solo i capolinea distinti delle linee.

(48)

C R E A T E V I E W Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a AS S E L E C T c o d i c e _ f e r m a t a , D e n o m i n a z i o n e , U b i c a z i o n e , Comune , L a t i t u d i n e , L o n g i t u d i n e , Zona , c o d i c e _ l i n e a , verso , u l t i m o _ a r c o , c o d i c e _ c a p o l i n e a F R O M Q u e r y _ F e r m a t a _ L i n e a _ P e r c o r s o _ V e r s o _ U l t i m o A r c o U l t i m a F e r m a t a G R O U P BY c o d i c e _ f e r m a t a , D e n o m i n a z i o n e , U b i c a z i o n e , Comune , L a t i t u d i n e , L o n g i t u d i n e , Zona , c o d i c e _ l i n e a , verso , u l t i m o _ a r c o , c o d i c e _ c a p o l i n e a ;

10) Query Fermata Linea Capolinea CodiceZona

Associa ad ogni codice capolinea la sua Denominazione e il codice della

zona.

(49)

C R E A T E V I E W Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a AS S E L E C T Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a . c o d i c e _ f e r m a t a , Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a . D e n o m i n a z i o n e , Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a . U b i c a z i o n e , Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a . Comune , Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a . L a t i t u d i n e , Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a . L o n g i t u d i n e , Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a . Zona , Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a . c o d i c e _ l i n e a , Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a . verso , Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a . c o d i c e _ c a p o l i n e a , E l e n c o _ F e r m a t e . D e n o m i n a z i o n e AS d e n o m i n a z i o n e _ c a p o l i n e a , E l e n c o _ F e r m a t e . Z o n a AS z o n a _ c a p o l i n e a F R O M Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a I N N E R J O I N E l e n c o _ F e r m a t e ON Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a . c o d i c e _ c a p o l i n e a = E l e n c o _ F e r m a t e . c o d i c e ;

11) Query Fermata Linea ZonaCapolinea

Osservando la vista precedente si pu`

o notare che prendendo come fermata

un capolinea, questo ha come capolinea in una certa direzione se stesso.

Poich`

e lo scopo della query `

e indicare la destinazione delle linee, tutti i record

che presentano fermata e capolinea uguali devono essere eliminati.

(50)

Pertanto la vista presente associa ad ogni capolinea il nome della zona ed

elimina tutti i record nei quali la fermata e il capolinea coincidono.

C R E A T E V I E W Q u e r y _ F e r m a t a _ L i n e a _ Z o n a C a p o l i n e a AS S E L E C T Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a _ C o d i c e Z o n a . c o d i c e _ f e r m a t a , Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a _ C o d i c e Z o n a . D e n o m i n a z i o n e , Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a _ C o d i c e Z o n a . U b i c a z i o n e , Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a _ C o d i c e Z o n a . Comune , Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a _ C o d i c e Z o n a . L a t i t u d i n e , Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a _ C o d i c e Z o n a . L o n g i t u d i n e , Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a _ C o d i c e Z o n a . Zona , Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a _ C o d i c e Z o n a . c o d i c e _ l i n e a , Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a _ C o d i c e Z o n a . verso ,

(51)

Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a _ C o d i c e Z o n a . c o d i c e _ c a p o l i n e a , Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a _ C o d i c e Z o n a . d e n o m i n a z i o n e _ c a p o l i n e a , Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a _ C o d i c e Z o n a . z o n a _ c a p o l i n e a , E l e n c o _ Z o n e . d e s c r i z i o n e F R O M Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a _ C o d i c e Z o n a I N N E R J O I N E l e n c o _ Z o n e ON Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a _ C o d i c e Z o n a . z o n a _ c a p o l i n e a = E l e n c o _ Z o n e . c o d i c e W H E R E ( Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a _ C o d i c e Z o n a . c o d i c e _ f e r m a t a < > Q u e r y _ F e r m a t a _ L i n e a _ C a p o l i n e a _ C o d i c e Z o n a . c o d i c e _ c a p o l i n e a );

12)Query Fermate Linee Capolinea

Concretizza la vista precedente in una tabella fisica sul database. Tale tabella

verr`

a utilizzata per la ricerca delle fermate interne all’area di interesse.

C R E A T E T A B L E F e r m a t e _ L i n e e _ C a p o l i n e a (

id INT NOT N U L L A U T O _ I N C R E M E N T P R I M A R Y KEY , c o d i c e _ f e r m a t a V A R C H A R (10) , D e n o m i n a z i o n e V A R C H A R (30) , U b i c a z i o n e V A R C H A R (30) , C o m u n e V A R C H A R (30) , L a t i t u d i n e D O U B L E (8 ,6) , L o n g i t u d i n e D O U B L E (8 ,6) , Z o n a V A R C H A R (10) , c o d i c e _ l i n e a V A R C H A R (10) , v e r s o V A R C H A R (4) , c o d i c e _ c a p o l i n e a V A R C H A R (10) , d e n o m i n a z i o n e _ c a p o l i n e a V A R C H A R (30) , z o n a _ c a p o l i n e a V A R C H A R (10) , I N D E X l a t i t u d i n e I D X ( L a t i t u d i n e ) ) S E L E C T c o d i c e _ f e r m a t a , D e n o m i n a z i o n e , U b i c a z i o n e , Comune , L a t i t u d i n e , L o n g i t u d i n e , Zona , c o d i c e _ l i n e a , c o d i c e _ c a p o l i n e a , d e n o m i n a z i o n e _ c a p o l i n e a , z o n a _ c a p o l i n e a F R O M Q u e r y _ F e r m a t a _ L i n e a _ Z o n a C a p o l i n e a ;

(52)

Mediante la query

S E L E C T c o d i c e _ f e r m a t a , D e n o m i n a z i o n e , U b i c a z i o n e , c o d i c e _ l i n e a , verso , c o d i c e _ c a p o l i n e a , d e n o m i n a z i o n e _ c a p o l i n e a F R O M F e r m a t e _ L i n e e _ C a p o l i n e a W H E R E ( c o d i c e _ l i n e a = 14) AND ( D e n o m i n a z i o n e = C e r t o s a );

si ottiene la vista seguente, che riporta i capolinea corretti come si pu`

o

veri-ficare con le fig. 2.3 e 2.4.

Al fine di migliorare le prestazioni delle queries sono stati aggiunti alcuni

indi-ci sui campi interessati dai join, in particolare alla tabella Linee Sequenza Archi

sono stati aggiunti l’indice multiplo percorsoLineaIDX sui campi codice linea,

verso, percorso, posizione e l’indice codiceArcoIDX sul campo codice arco.

C R E A T E I N D E X p e r c o r s o L i n e a I D X ON L i n e e _ S e q u e n z a _ A r c h i ( c o d i c e _ l i n e a , verso , p e r c o r s o , p o s i z i o n e );

C R E A T E I N D E X c o d i c e A r c o I D X ON L i n e e _ S e q u e n z a _ A r c h i ( c o d i c e _ a r c o );

Mentre nella tabella Elenco Archi `

e stato creato l’indice codiceFermataIDX.

C R E A T E I N D E X c o d i c e F e r m a t a I D X ON E l e n c o _ A r c h i ( c o d i c e _ f e r m a t a );

Infine allo scopo di migliorare la ricerca delle fermate all’interno dell’area di

interesse, che viene fatta sulla base delle coordinate geografiche sono stati

inseriti gli indici latitudineIDX e longitudineIDX.

C R E A T E I N D E X l o n g i t u d i n e I D X

ON F e r m a t e _ L i n e e _ C a p o l i n e a ( L o n g i t u d i n e ); C R E A T E I N D E X l a t i t u d i n e I D X

(53)

Progetto dell’Applicazione

3.1

Geocoding

L’utente interagisce con l’applicazione, come descritto nella sezione 2.1

inse-rendo inizialmente la sua posizione e il massimo tempo di percorrenza che

vuole impiegare per raggiungere una fermata. La posizione pu`

o essere

espres-sa in formato di indirizzo postale oppure di coordinate geografiche (latitudine

e longitudine). Nel primo caso `

e necessaria una traduzione, in letteratura

no-ta con il nome di Geocoding, da indirizzo posno-tale a coordinate geografiche,

ovvero latitudine e longitudine. A tale scopo viene utilizzato il servizio di

Geocoding di open.mapquestapi.com[21], il quale utilizza gli OpenData di

OpenStreetMap[7].

Si pu`

o interagire con esso attraverso il protocollo HTTP inviando messaggi nei

quali si specifica l’indirizzo, e il formato dell’output. Di seguito viene

ripor-tato l’header del messaggio HTTP per richiedere la traduzione dell’indirizzo di

Piazza Maggiore di Bologna in coordinate geografiche con output in formato

xml. Si noti che per poter usufruire del servizio `

e necessario specificare una

chiave, che viene fornita previa registrazione sul sito.

h t t p : // o p e n . m a p q u e s t a p i . com / g e o c o d i n g / v1 / a d d r e s s ? key = Y O U R \ _ K E Y \ _ H E R E & c a l l b a c k = r e n d e r G e o c o d e &

o u t F o r m a t = xml & l o c a t i o n = p i a z z a m a g g i o r e b o l o g n a

Segue un frammento del file xml in output dove vengono riportati

l’indiriz-zo postale della richiesta effettuata, e le coordinate latitudine e longitudine

corrispondenti.

Figura

Figura 1.1: Classifica elaborata dalla EPSI (European Public Sector Infor- Infor-mation [9]) ottenuta dalla media di diversi fattori: l’implementazione della direttiva PSI, la pratica di riuso, i formati, il prezzo, accordi esclusivi, PSI locale, eventi e
Figura 1.2: Linking Open Data cloud (2011): dataset pubblicati e le loro relazioni.
Figura 2.1: Form dell’Hello Bus Web Server di Tper
Figura 2.2: Pagina web degli OpenData di Tper. Vengono posti in evidenza quelli utilizzati nell’applicazione.
+7

Riferimenti

Documenti correlati

Il risultato è una tabella che comprende tutte le righe di IMPIEGATO per cui il valore Dipart è uguale ad almeno uno dei valori di Nome in DIPARTIMENTO, limitatamente alle tuple

Lo studente dovrà sviluppare capacità di: comprensione di testi orali e scritti su argomenti comuni relativi alla vita quotidiana; produzione di testi orali e scritti per riferire

Il tempo di propagazione è importante quando la linea è cosi lunga o la frequenza così alta che il segnale impiega una parte apprezzabile del ciclo o addirittura più cicli

Successivamente viene descritta l’attività di ricerca condotta all’interno di una specifica Azienda Sanitaria attraverso l’analisi del contesto in cui è inserita, del

FULGENZIA - (dando una gomitata ad Andreina) La dottoressa Pazienza ha voluto rendersi conto della situazione… domani scenderà di nuovo anche monsignor Ciborio

La foto identificazione è una valida alternativa alla tradizionale marcatura degli animali, in sintesi si fotografa da ambo i lati la pinna dorsale dei delfini per poi

Forse provengono da strati più antichi delle stesse località, oppure sono stati raccolti in località differenti ed in seguito confusi con i resti delle

Nel quarto capitolo viene presentata l’esperienza nell’ambito della qualità di C.re.a., una Cooperativa sociale di Viareggio, il tutto è preceduto dalla descrizione della storia