1. Social Network per la gestione di risorse umane Anno Accademico: 2008/2009 Componenti Gruppo: Bello Giuseppe, Campanale Lorella, Guglielmi Michele, Spadaro Alessandro.
8. Dominio del problema: Tre entità: Dati Agenzia, contatti, sede,dettagli, affidabilità Dati Personali, contatti, dettagli, preferenze, disponibilità lavorativa Tipo di lavoro, quando, dove, agenzia
23. Tecnologie del semantic web utilizzate URI: stringa che identifica univocamente una risorsa IRI: estensione dell’URI Metalinguaggio che fornisce un meccanismo di interpretazione dei contenuti Linguaggio usato per descrivere le proprietà di una risorsa identificata da URI/IRI RDF Schema: espone la sintassi per definire schemi e vocabolari per i metadati Estende RDFS per descrivere le proprietà associate a una risorsa Elementi dello stack da noi utilizzati per specificare l’ontologia:
26. Classe Lavoratore Proprietà: <owl:Restriction> <rdfs:label xml:lang="it">Nome del lavoratore</rdfs:label> <owl:onProperty rdf:resource="&foaf;givenname" /> <owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:cardinality> </owl:Restriction> Associamo un nome alla classe Definiamo la relazione di sottoclasse Definiamo tale classe come l’intersezione di una serie di proprietà <owl:Class rdf:about="&jf;Person"> <rdfs:label xml:lang="it">Lavoratore</rdfs:label> < rdfs:subClassOf rdf:resource="&foaf;Person" /> < owl:intersectionOf rdf:parseType="Collection">
27. Proprietà jf: Object Property <owl: ObjectProperty rdf:about="&jf;placeOfBorn"> <rdfs:label xml:lang="it">Luogo di nascita del lavoratore</rdfs:label> <rdfs:domain rdf:resource="&jf;Person" /> <rdfs:range rdf:resource="&jf;City" /> </owl: ObjectProperty > Denota il numero esatto di occorrenze di una proprietà <owl:Restriction> <rdfs:label xml:lang="it">Luogo di nascita del lavoratore</rdfs:label> <owl:onProperty rdf:resource="&jf;placeOfBorn" /> <owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:cardinality> </owl:Restriction>
28.
29.
30.
31.
32. Classe Availability La disponibilità lavorativa viene specificata con le proprietà obbligatorie: startDate e endDate <owl:ObjectProperty rdf:about="&jf;workAvailability"> <rdfs:label xml:lang="it">Disponibilità lavorativa</rdfs:label> <rdfs:domain rdf:resource="&jf;Person"/> <rdfs:range rdf:resource="&jf;Availability" /> </owl:ObjectProperty> <owl:Class rdf:about="&jf;Availability"> <rdfs:label xml:lang="it">Disponibilità</rdfs:label> <rdfs:subClassOf> <owl:Restriction> <rdfs:label xml:lang="it">Data di inizio lavoro</rdfs:label> < owl:onProperty rdf:resource="&jf;startDateAvailability " /> <owl:cardinality>1</owl:cardinality> </owl:Restriction> </rdfs:subClassOf> <rdfs:subClassOf> <owl:Restriction> <rdfs:label xml:lang="it">Data di fine lavoro</rdfs:label> < owl:onProperty rdf:resource="&jf;endDateAvailability " /> <owl:cardinality>1</owl:cardinality> </owl:Restriction> </rdfs:subClassOf> </owl:Class>
33.
34. Classe Reputation Nel momento in cui si inserisce la reputation bisogna inserire un punteggio e un commento (obbligatorio) <owl:Class rdf:about="&jf;Reputation"> <rdfs:label xml:lang="it">Affidabilità dell'Agenzia</rdfs:label> <rdfs:subClassOf> <owl:Restriction> <rdfs:label xml:lang="it">Punteggio Reputation</rdfs:label> <owl:onProperty rdf:resource="&jf; scoreReputation " /> <owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:cardinality> </owl:Restriction> </rdfs:subClassOf> <rdfs:subClassOf> <owl:Restriction> <rdfs:label xml:lang="it">Commenti Reputation </rdfs:label> <owl:onProperty rdf:resource="&jf; commentsReputation " /> <owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:maxCardinality> </owl:Restriction> </rdfs:subClassOf> </owl:Class> <owl:ObjectProperty rdf:about="&jf;agencyReputation"> <rdfs:label xml:lang="it">Affidabilità dell'Agenzia</rdfs:label> <rdfs:domain rdf:resource="&jf;Agency" /> <rdfs:range rdf:resource="&jf;Reputation" /> </owl:ObjectProperty> score
41. E non dimentichiamoci la reputation <jf:jobRole rdf:resource="&jf;hostess"/> <jf:jobFirm>MetropolitanClub</jf:jobFirm> <jf:jobStart>2009-03-10</jf:jobStart> <jf:jobEnd>2009-03-13</jf:jobEnd> <jf:remunerationWork>90.00</jf:remunerationWork> <jf:necessaryPeopleNumber>4</jf:necessaryPeopleNumber> <jf:competenciesRequired>bella presenza</jf:competenciesRequired> <jf:materialRequired>abito e scarpe eleganti</jf:materialRequired>
42. Database User: contiene i profili di tutti gli utenti registrati alla rete sociale. Agency: contiene i profili di tutte le agenzie registrate alla rete sociale. Job: contiene i lavori offerti dalle agenzie ai lavoratori. Friend: contiene le relazioni di amicizia tra un utente e un altro. Gli utenti vengono rappresentati tramite le loro chiavi primarie che fanno riferimento ai rispettivi profili. Availability: contiene le disponibilità di ciascun utente. Gli utenti vengono rappresentati tramite le loro chiavi primarie. HystoricalJob: In questa entità ciascun utente è legato ai lavori che ha svolto in passato. Gli utenti e i lavori sono rappresentati tramite le loro chiavi primarie. La conferma dell’associazione tra utente e lavoro deve essere effettuata dall’agenzia tramite il campo confirmed. FeebBackAgency: contiene i feedback rilasciati da un utente ad una determinata agenzia. La chiave primaria è data dalla coppia (chiave utente, chiave agenzia) in modo che ciascun utente possa inserire un solo feedback per ogni agenzia. Analogamente per FeedBackWork . Message: Contiene tutti i messaggi scambiati nella rete sociale. Il mittente e il destinatario di ogni messaggio vengono rappresentati dalle rispettive chiavi primarie(riferite o all’agenzia o all’utente).
43. Web Services gestisce l'accesso ai dati degli utenti e le relazioni di amicizia. gestisce l'accesso ai dati delle agenzie. gestisce il rilascio dei feedback da parte degli utenti sia alle agenzie che ai lavori. gestisce l'accesso ai dati riguardanti la disponibilità lavorativa degli utenti. gestisce la messaggistica interna tra utente e utente o tra utente e agenzia. gestisce l'accesso ai dati riguardanti i lavori e dello storico.
44.
45.
46.
47.
48.
49.
50.
51. Casi D’uso: Profilo utente Per generare il profilo: la pagina invia una richiesta al web service “UserManager” invocando il metodo “getProfile” che a sua volta interroga il database “User” e restituisce il profilo dell'utente. 1. Per generare la disponibilità: la pagina invia una richiesta al web service “AvailabilityManager” invocando il metodo “getAvailability” che a sua volta interroga il database “Availability” e restituisce la disponibilità dell'utente. 2. 3. Per generare la lista amici: la pagina invia una richiesta al web service “UserManager” invocando il metodo “getFriends” che a sua volta interroga il database “Friend” per trovare gli amici dell'utente. Il metodo “getFriends” effettua una JOIN tra gli ID degli amici e i loro profili per recuperare dall’ID il nome, il cognome e gli altri dati dell’amico.
52.
53. Casi D’uso: Aggiungi Amico L'utente “User” vuole aggiungere l'utente “Friend” ai suoi amici. 1. La pagina per la richiesta di amicizia invoca il web service “UserManager” per aggiungere l'utente “Friend” con il metodo “AddFriend” alla lista amici. 2. Quando l'utente “Friend” riceve la richiesta di amicizia decide se accettarla o meno inviando una richiesta al web service “UserManager” e invocando il metodo “ConfirmFriendship” che aggiunge un record al database “Friend” con la nuova relazione di amicizia.
54.
55.
56. Casi D’uso: Trova Lavoratore L'agenzia vuole cercare un lavoratore in base ad alcuni filtri: area geografica, figura professionale, disponibilità e filtro storico. La pagina web della ricerca effettua le seguenti chiamate: 1. Invia una richiesta al web service “UserManager” invocando il metodo “FindWorker” 3. “FindWorker” invia una richiesta al web service “AvailabilityManager” invocando il metodo “GetUserAvailability” che restituisce la disponibilità degli utenti. A questo punto “FindWorker” filtra nuovamente gli utenti in base alla loro disponibilità. 4. “FindWorker” invia una richiesta al web service “JobManager” invocando il metodo “GetHysoricalUserJob” che restituisce lo storico degli utenti(facendo una JOIN tra l’utente e i lavori che ha svolto). A questo punto “FindWorker” filtra nuovamente gli utenti in base al loro storico e ritorna il risultato alla pagina web. 2. FindWorker” inizia a filtrare gli utenti con una selezione sul database “User” filtrandoli in base all'area geografica e alla figura professionale.
57. Casi D’uso: Feedback Agenzia 1. La pagina viene creata inviando una richiesta al web service “AgencyManager” invocando il metodo “getProfile” che a sua volta interroga il database “Agency” e restituisce il profilo dell'agenzia. 2. La pagina web invia una richiesta al web service “FeedbackManager” invocando il metodo “AddFeedAgency” che a sua volta interroga il database “FeedBack Agency” e inserisce il nuovo feedback. 3. Inolte il metodo “AddFeedAgency” aggiorna il punteggio dell'agenzia inviando una richiesta al web service “AgencyManager” invocando il metodo “UpadteScore” che a sua volta aggiorna il database “Agency”. Analogamente per rilasciare il feedback ad un lavoro. L'utente vuole rilasciare un feedback ad un'agenzia accedendo alla pagina web del profilo dell'agenzia.
58. Casi D’uso: Inserisci Dati Storico L'utente (User) vuole inserire un lavoro nel suo storico: 1. La pagina web invia una richiesta al web service “JobManager” invocando il metodo “getJob” che a sua volta interroga il database “Job” e restituisce i lavori svolti dall'utente. 2. Dopo che l'utente ha scelto uno dei lavori da aggiungere allo storico la pagina web invia una richiesta al web service “JobManager” invocando il metodo “addJob” che a sua volta inserisce nel database “HystoricalJob” il lavoro (come lavoro in attesa di approvazione dell'agenzia). L'utente (User) vuole visualizzare il suo storico: La pagina web invia una richiesta al web service “JobManager” invocando il metodo “GetJobs” che interroga il database “HystoricalJob” restituendo tutti i lavori inseriti nello storico dell'utente, per avere i dettagli sui lavori il metodo “getJobs” effettua una JOIN tra i lavori “HystoricalJob” e i dettagli di ciascun lavoro contenuti in “Job”. L'agenzia vuole confermare il lavoro di un utente: La pagina web invia una richiesta al web service “JobManager” invocando il metodo “ConfirmJob” che a sua volta modifica il database “HystoricalJob” confermando il lavoro svolto dall'utente.
59. Casi D’uso: Gestione Messaggi L'utente (Sender) vuole inviare un messaggio: La pagina web invia una richiesta al web service “MessagesManager” invocando il metodo “SendMessages” che inserisce il messaggio nel database “Messaeges”. InBox L'utente accede alla sua pagina InBox. 1. La pagina web invia una richiesta al web service “MessagesManager” invocando il metodo “ViewInBox” che interroga il database “Messaeges” e restituisce i messaggi dell'utente. 2. Il metodo “ViewInBox” invia una richiesta al web service “UserManager” invocando il metodo “GetProfile” per ottenere i nomi di mittente e destinatario. L'utente accede alla sua pagina OutBox. 1. La pagina web invia una richiesta al web service “MessagesManager” invocando il metodo “ViewOutBox” che interroga il database “Messaeges” e restituisce i messaggi dell'utente. 2. Il metodo “ViewOutBox” invia una richiesta al web service “UserManager” invocando il metodo “GetProfile” per ottenere i nomi di mittente e destinatario.
60.
61.
62. Problema: Privacy Utente Applicato per l’intero profilo Applicato per il singolo dato PROBLEMA: Nel momento in cui gli utenti inseriscono dati riservati nel proprio profilo, dati che, magari, non si vogliono rendere pubblici a tutti, ma si vuole, al contrario, che rimangano riservati.
63. Problema: Privacy Agenzia Applicato per l’intero profilo Applicato per il singolo dato Lo stesso discorso fatto per i lavoratori, si può applicare alle agenzie
64. Problema: Privacy Lavoro ? PROBLEMA: Come fa l’utente a capire impostazioni legate a determinate impostazioni SOLUZIONE: Pop-up javascript
66. Reputation System per il lavoro Cosa accade : tutti gli utenti che assegnano un rate al lavoro hanno lo stesso peso; pertanto, la reputation del lavoro sarà calcolata come media matematica dei voti degli utenti
67. Reputation System per l’agenzia Valutazione Agenzia: (7/20) * 5 + (13/20) * 8 = 6,95 (voto 7 )