• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Job Finder
 

Job Finder

on

  • 1,227 views

Presentazione della social network Job Finder, gruppo di lavoro: Bello Giuseppe, Campanale Lorella, Guglielmi Michele, Spadaro Alessandro.

Presentazione della social network Job Finder, gruppo di lavoro: Bello Giuseppe, Campanale Lorella, Guglielmi Michele, Spadaro Alessandro.

Statistics

Views

Total Views
1,227
Views on SlideShare
1,183
Embed Views
44

Actions

Likes
0
Downloads
3
Comments
0

1 Embed 44

http://dawsec.dicom.uninsubria.it 44

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Job Finder Job Finder Presentation Transcript

  • Social Network per la gestione di risorse umane Anno Accademico: 2008/2009 Componenti Gruppo: Bello Giuseppe, Campanale Lorella, Guglielmi Michele, Spadaro Alessandro.
  • Scopo progetto
    • Vogliamo realizzare una social network per lavoratori in cerca di lavoro part-time.
    • Due grandi obiettivi:
  • 1° grande Vantaggio:
    • Riduciamo al minimo le comunicazioni tra agenzia e lavoratore
    • Miglioriamo la qualità del servizio offerto dalle agenzie
    • nel momento in cui:
    Vogliamo ricercare profili più adatti al lavoro in questione Proporre ai lavoratori/utenti i lavori a cui sono più interessati
  • Scenario attuale:
    • Di che tipo di lovoro stiamo parlando?
    Hostess Promoter Addetti agli stand
    • Il ruolo delle agenzie:
    Risultato: Un gran mare di telefonate
  • Problematiche:
  • Dal lato lavoratore:
  • Dal lato agenzia:
  • Dominio del problema: Tre entità: Dati Agenzia, contatti, sede,dettagli, affidabilità Dati Personali, contatti, dettagli, preferenze, disponibilità lavorativa Tipo di lavoro, quando, dove, agenzia
  • Requisiti : utente
    • Dal punto di vista dell’ UTENTE in cerca di lavoro, deve esistere un meccanismo che imposta:
  • Requisiti: agenzia
    • Dal punto di vista dell’ AGENZIA , deve esistere un meccanismo che permetta:
  • Requisiti: lavoratore e agenzia
    • Concetto di AMICO :
  • Soluzione: Social Network
    • La piattaforma prevede l’iscrizione di due tipi di utenti
    Lavoratore:
    • Ricerca:
    • Tutte le agenzie che offrono
    • un determinato tipo di lavoro
    • in una certa area geografica.
    • Tutti i lavori disponibili, in un
    • determinato periodo e in una certa
    • area geografica.
    • Agenzia:
    Soluzione: Social Network
    • Dal lato Agenzia e Lavoratore:
    Soluzione: Social Network
  • Progettazione: profilo utente
  • Progettazione: home lavoratore
  • Progettazione: home agenzia
  • Progettazione: profilo agenzia
  • Perchè usare una social network?
    • La nostra social network non è un semplice gestionale, ma un VERO E PROPRIO SERVIZIO perché offre :
  • Confronto con realtà esistenti nel web
    • Perchè noi offriamo:
    • Informazioni real time;
    • Feedback & Reputation agenzia;
    • Preferenze lavorative specifiche;
    • Priorità lavorative;
    • Nuovo tipo di amicizia;
    • Storico;
    • Info sui colleghi.
    Non esiste una realtà simile alla nostra!
  • Cosa abbiamo realizzato:
    • Vocabolario Job Finder ( file rdf )
    • Descrizione delle classi/proprietà
    • Presentazione dell’ontologia attraverso un foglio di stile ( file xsl )
    • Esempio di visualizzazione della social network ( file rdf di istanze )
  • 1°Passo: Modellazione dell’ontologia
  • 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:
  • Classi e proprietà modellate
  • File rdf: intestazione Inidica che il contenuto XML che segue rappresenta RDF xmlns:foaf=” http://xmlns.com/foaf/0.1/&quot;, è una XML Namespace (xmlns) declaration , che specifica che tutti i tag con prefisso foaf: sono parte del namespace identificato dalla URI riportata di seguito all’uguale. <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?> <?xml-stylesheet href=&quot;jf.xsl&quot; type=&quot;text/xsl&quot;?> <!DOCTYPE rdf:RDF [ <!ENTITY rdf &quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;> <!ENTITY rdfs &quot;http://www.w3.org/2000/01/rdf-schema#&quot;> <!ENTITY xsd &quot;http://www.w3.org/2001/XMLSchema#&quot;> <!ENTITY owl &quot;http://www.w3.org/2002/07/owl#&quot;> <!ENTITY rec &quot;http://www.w3.org/2001/02pd/rec54#&quot;> <!ENTITY doc &quot;http://www.w3.org/2000/10/swap/pim/doc#&quot;> <!ENTITY contact &quot;http://www.w3.org/2000/10/swap/pim/contact#&quot;> <!ENTITY address &quot;http://daml.umbc.edu/ontologies/ittalks/address#&quot; > <!ENTITY org &quot;http://www.w3.org/2001/04/roadmap/org#&quot;> <!ENTITY dcterms &quot;http://purl.org/dc/terms#&quot;> <!ENTITY dc &quot;http://purl.org/dc/elements/1.1/&quot;> <!ENTITY foaf &quot;http://xmlns.com/foaf/0.1/&quot;> <!ENTITY jf &quot;http://www.jobfinder.com/voc#&quot;> ]>
      • <rdf:RDF xmlns:xsd = &quot;&xsd;&quot;
      • xmlns: foaf = &quot;&foaf;&quot;
      • xmlns:rdf = &quot;&rdf;&quot;
      • xmlns:rdfs = &quot;&rdfs;&quot;
      • xmlns:owl = &quot;&owl;&quot;
      • xmlns:rec = &quot;&rec;&quot;
      • xmlns:doc = &quot;&doc;&quot;
      • xmlns:org = &quot;&org;&quot;
      • xmlns: address = &quot;&address;&quot;
      • xmlns:contact = &quot;&contact;&quot;
      • xmlns:dc = &quot;&dc;&quot;
      • xmlns:dcterms = &quot;&dcterms;&quot;
      • xmlns:base = &quot;&jf;&quot;
      • xmlns = &quot;http://www.jobfinder.com/voc#&quot;
      • >
  • Classe Lavoratore Proprietà: <owl:Restriction> <rdfs:label xml:lang=&quot;it&quot;>Nome del lavoratore</rdfs:label> <owl:onProperty rdf:resource=&quot;&foaf;givenname&quot; /> <owl:cardinality rdf:datatype=&quot;&xsd;nonNegativeInteger&quot;>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=&quot;&jf;Person&quot;> <rdfs:label xml:lang=&quot;it&quot;>Lavoratore</rdfs:label> < rdfs:subClassOf rdf:resource=&quot;&foaf;Person&quot; /> < owl:intersectionOf rdf:parseType=&quot;Collection&quot;>
  • Proprietà jf: Object Property <owl: ObjectProperty rdf:about=&quot;&jf;placeOfBorn&quot;> <rdfs:label xml:lang=&quot;it&quot;>Luogo di nascita del lavoratore</rdfs:label> <rdfs:domain rdf:resource=&quot;&jf;Person&quot; /> <rdfs:range rdf:resource=&quot;&jf;City&quot; /> </owl: ObjectProperty > Denota il numero esatto di occorrenze di una proprietà <owl:Restriction> <rdfs:label xml:lang=&quot;it&quot;>Luogo di nascita del lavoratore</rdfs:label> <owl:onProperty rdf:resource=&quot;&jf;placeOfBorn&quot; /> <owl:cardinality rdf:datatype=&quot;&xsd;nonNegativeInteger&quot;>1</owl:cardinality> </owl:Restriction>
  • Proprietà jf: Datatype Property
    • <owl: DatatypeProperty rdf:about=&quot;&jf;carOwner&quot;>
    • <rdfs:label xml:lang=&quot;it&quot;>Proprietario di automezzo</rdfs:label>
    • <rdfs:domain rdf:resource=&quot;&jf;Person&quot; />
    • <rdfs:range rdf:resource=&quot;&xsd;boolean&quot; />
    • </owl: DatatypeProperty >
    La proprietà appartiene alla classe Person La proprietà assume valore booleano <owl:Restriction> <rdfs:label xml:lang=&quot;it&quot;>Proprietario di automezzo</rdfs:label> <owl:onProperty rdf:resource=&quot;&jf;carOwner&quot; /> <owl:cardinality df:datatype=&quot;&xsd;nonNegativeInteger&quot;>1</owl:cardinality> </owl:Restriction>
  • Proprietà Address
    • <owl:ObjectProperty rdf:about=&quot;&jf;homeAddress&quot;>
    • <rdfs:label xml:lang=&quot;it&quot;>Indirizzo di abitazione del lavoratore</rdfs:label>
    • <rdfs:domain rdf:resource= &quot;&jf;Person&quot; />
    • <rdfs:range rdf:resource= &quot;&address;Address&quot; />
    • </owl:ObjectProperty>
    <owl:Restriction> <rdfs:label xml:lang=&quot;it&quot;>Indirizzo di abitazione del lavoratore</rdfs:label> <owl:onProperty rdf:resource=&quot;&jf; homeAddress &quot; /> <owl:cardinality rdf:datatype=&quot;&xsd;nonNegativeInteger&quot;>1</owl:cardinality> </owl:Restriction>
  • Proprietà utilizzate da più classi
    • <owl:ObjectProperty rdf:about=&quot;&jf;mobilePhone&quot;>
    • <rdfs:label xml:lang=&quot;it&quot;>N°Cellulare del lavoratore</rdfs:label>
    • <rdfs: subPropertyOf rdf:resource=&quot;&foaf;phone&quot; />
    • </owl:ObjectProperty>
    Denota il numero minimo di occorrenze di una proprietà Gerarchie di proprietà una proprietà è una sottoproprietà di un’altra proprietà <owl:Restriction> <owl:onProperty rdf:resource=&quot;&jf;mobilePhone&quot; /> <owl:minCardinality rdf:datatype=&quot;&xsd;nonNegativeInteger&quot;>0</owl:minCardinality> </owl:Restriction>
  • Classe Role
    • <owl:Restriction>
    • <rdfs:label xml:lang=&quot;it&quot;>Figura lavorativa</rdfs:label>
    • <owl:onProperty rdf:resource=&quot;&jf;typeRole&quot; />
    • <owl:minCardinality rdf:datatype=&quot;&xsd;nonNegativeInteger&quot;>0</owl:minCardinality>
    • </owl:Restriction>
    • <owl:Class rdf:about=&quot;&jf;Role&quot;>
    • <rdfs:label xml:lang=&quot;it&quot;>Figura lavorativa</rdfs:label>
    • <owl: oneOf rdf:parseType=&quot;Collection&quot;>
    • < owl:Thing rdf:about=&quot;#hostess &quot;/>
    • <owl:Thing rdf:about=&quot;#Promoter&quot;/>
    • <owl:Thing rdf:about=&quot;#leafleting&quot;/>
    • <owl:Thing rdf:about=&quot;#clerk&quot;/>
    • <owl:Thing rdf:about=&quot;#factoryworker&quot;/>
    • <owl:Thing rdf:about=&quot;#merchandiser&quot;/>
    • </owl: oneOf >
    • </owl:Class>
    Classe enumerata: viene descritta grazie all'enumerazione delle figure lavorative - che costituiscono la classe: ATTENZIONE : I membri della classe sono esattamente l'insieme delle figure lavorative enumerate - nè più, nè meno.
  • Classe Availability La disponibilità lavorativa viene specificata con le proprietà obbligatorie: startDate e endDate <owl:ObjectProperty rdf:about=&quot;&jf;workAvailability&quot;> <rdfs:label xml:lang=&quot;it&quot;>Disponibilità lavorativa</rdfs:label> <rdfs:domain rdf:resource=&quot;&jf;Person&quot;/> <rdfs:range rdf:resource=&quot;&jf;Availability&quot; /> </owl:ObjectProperty> <owl:Class rdf:about=&quot;&jf;Availability&quot;> <rdfs:label xml:lang=&quot;it&quot;>Disponibilità</rdfs:label> <rdfs:subClassOf> <owl:Restriction> <rdfs:label xml:lang=&quot;it&quot;>Data di inizio lavoro</rdfs:label> < owl:onProperty rdf:resource=&quot;&jf;startDateAvailability &quot; /> <owl:cardinality>1</owl:cardinality> </owl:Restriction> </rdfs:subClassOf> <rdfs:subClassOf> <owl:Restriction> <rdfs:label xml:lang=&quot;it&quot;>Data di fine lavoro</rdfs:label> < owl:onProperty rdf:resource=&quot;&jf;endDateAvailability &quot; /> <owl:cardinality>1</owl:cardinality> </owl:Restriction> </rdfs:subClassOf> </owl:Class>
  • Classe Agency
    • <owl:Restriction>
    • <rdfs:label xml:lang=&quot;it&quot;>Data di fondazione Agenzia</rdfs:label>
    • <owl:onProperty rdf:resource=&quot; &foaf;birthday &quot; />
    • <owl:cardinality rdf:datatype=&quot;&xsd;nonNegativeInteger&quot;>1</owl:cardinality>
    • </owl:Restriction>
    <owl:Class rdf:about=&quot;&jf;Agency&quot;> <rdfs:label xml:lang=&quot;it&quot;>Agenzia</rdfs:label> <rdfs: subClassOf rdf:resource=&quot; &foaf;Organization &quot; /> <owl:intersectionOf rdf:parseType=&quot;Collection&quot;>
  • Classe Reputation Nel momento in cui si inserisce la reputation bisogna inserire un punteggio e un commento (obbligatorio) <owl:Class rdf:about=&quot;&jf;Reputation&quot;> <rdfs:label xml:lang=&quot;it&quot;>Affidabilità dell'Agenzia</rdfs:label> <rdfs:subClassOf> <owl:Restriction> <rdfs:label xml:lang=&quot;it&quot;>Punteggio Reputation</rdfs:label> <owl:onProperty rdf:resource=&quot;&jf; scoreReputation &quot; /> <owl:cardinality rdf:datatype=&quot;&xsd;nonNegativeInteger&quot;>1</owl:cardinality> </owl:Restriction> </rdfs:subClassOf> <rdfs:subClassOf> <owl:Restriction> <rdfs:label xml:lang=&quot;it&quot;>Commenti Reputation </rdfs:label> <owl:onProperty rdf:resource=&quot;&jf; commentsReputation &quot; /> <owl:maxCardinality rdf:datatype=&quot;&xsd;nonNegativeInteger&quot;>1</owl:maxCardinality> </owl:Restriction> </rdfs:subClassOf> </owl:Class> <owl:ObjectProperty rdf:about=&quot;&jf;agencyReputation&quot;> <rdfs:label xml:lang=&quot;it&quot;>Affidabilità dell'Agenzia</rdfs:label> <rdfs:domain rdf:resource=&quot;&jf;Agency&quot; /> <rdfs:range rdf:resource=&quot;&jf;Reputation&quot; /> </owl:ObjectProperty> score
  • Class Job
    • <owl:Class rdf:about=&quot;&jf;Job&quot;>
    • <rdfs:label xml:lang=&quot;it&quot;>Lavoro</rdfs:label>
    <owl:ObjectProperty rdf:about=&quot;&jf;executedWork&quot;> <rdfs:label xml:lang=&quot;it&quot;>Storia lavorativa</rdfs:label> <rdfs:domain rdf:resource=&quot;&jf;Person&quot; /> <rdfs:range rdf:resource=&quot;&jf;Job&quot; /> </owl:ObjectProperty> <!-- Storico Lavorativo --> L’attributo appartiene alla classe Person: specificato attraverso una o più istanze della classe Lavoro
  • XSL (XML Stylesheet Language)
  • Un po’ di codice < xsl:template match=&quot;/&quot; > … . <h3>Datatype property</h3> <xsl:apply-templates select=&quot;rdf:RDF/owl:DatatypeProperty&quot;/> … </xsl:template> <xsl:template match=&quot; rdf:RDF/owl:DatatypeProperty &quot;> <xsl:if test=&quot;//rdfs:label/@xml:lang = 'it'&quot;> <h4><xsl:value-of select=&quot;rdfs:label/text()&quot;/></h4> </xsl:if> URI reference: <a href=&quot;#{rdfs:label/text()}&quot;> <xsl:value-of select =&quot;@rdf:about &quot; /> <xsl:text> </xsl:text></a><xsl:text> </xsl:text> <xsl:if test=&quot;rdfs:domain&quot;> Dominio: <xsl:variable name=&quot; classid &quot; select=&quot;rdfs:domain/@rdf:resource&quot;/> <xsl:for-each select=&quot;/rdf:RDF/owl:Class&quot;> <xsl:if test=&quot;@rdf:about = $classid&quot;> <a href=&quot;#{rdfs:label/text()}&quot;> <xsl:value-of select=&quot;@rdf:about&quot; /></a> <xsl:text> </xsl:text> </xsl:if> </xsl:for-each> </xsl:if> </xsl:template>
  • Struttura del file html generato
  • Esempio di presentazione della piattaforma
    • Dal documento XML preleviamo informazioni come:
    • Dati agenzia
    • Contatti
    • Descrizione lavoro
    • Sfruttiamo il file xslt per la formattazione del documento
    Ma non dimentichiamoci della Reputation…
  • <jf:homeAddress> <address:Address> <address:roomNumber>5</address:roomNumber> <address:streetAddress>S.Pietrino</address:streetAddress> <address:city>Varese</address:city> <address:zip>21100</address:zip> <address:country>Italia</address:country> </address:Address> </jf:homeAddress>
  • E non dimentichiamoci la reputation <jf:jobRole rdf:resource=&quot;&jf;hostess&quot;/> <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>
  • 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).
  • 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.
  • User Manager
    • Quando questo web service genera la pagina del profilo utente deve:
    • Visualizzare il profilo dell’utente invocando il metodo “GetProfile”.
    • Visualizzare i suoi amici invocando il metodo &quot;GetFriends&quot;.
    • Quando questo web service effettua la ricerca di un lavoratore deve:
    • Cercare gli utenti tramite la loro disponibilità e per fare questo il metodo “FindWorker” invoca il metodo &quot;GetUserAvailability&quot; del web service &quot;AvailabilityManager“.
    • Cercare gli utenti tramite il loro storico e per fare questo il metodo “FindWorker” invoca il metodo “GetHystoricalUserJob” del web service “JobManager”.
    • Gestisce i profili degli utenti tramite i metodi AddProfile, GetProfile, EditProfile, DeleteProfile
    • gestisce le operazioni di Login e Logout; gestisce l’urgenza con cui l’utente cerca lavoro (getUrgence)
    • gestisce la ricerca dei lavoratori da parte delle agenzie.
    • gestisce le relazioni di amicizia tramite i metodi AddFriend, RemoveFriend, GetFriends, confirmFriendship e AddToFavourtie
  • Agency Manager
    • Gestisce i profili delle agenzie tramite i metodi AddProfile, GetProfile, EditProfile, DeleteProfile
    • Gestisce le operazioni di Login e Logout
    • Gestisce i feedback alle agenzie aggiornando il loro punteggio tramite il metodo UpdateScore.
  • Job Manager
    • Gestisce i lavori offerti delle agenzie agli utenti tramite i metodi AddJob, GetJob, EditJob, DeleteJob
    • Gestisce la ricerca di lavori da parte dell’utente
    • Gestisce i feedback ai lavori aggiornando il loro punteggio tramite il metodo UpdateScore.
    • Gestisce lo storico dei lavori svolti da un utente.
    • Quando viene cercato un lavoro dagli utenti il web service:
    • il metodo “Find”, nella visualizzazione dei risultati deve inserire i dati delle agenzie che offrono il lavoro e quindi fa una richiesta al web service &quot;AgencyManager&quot; tramite il metodo &quot;GetProfile&quot; per ottenere le informazioni relative all'agenzia.
    • Quando l’utente aggiunge un lavoro:
    • Viene invocato il metodo AddJob, il quale può essere confermato dall’agenzia con il metodo ConfirmJob.
    • Quando l’utente può visualizzare il proprio storico:
    • questo web service genera la pagina dello storico lavorativo dell'utente deve caricare i dati relativi ai lavori svolti dall'utente e per far ciò viene invocato il metodo &quot;GetJobs&quot;.
    • Quando un’agenzia cerca un lavoratore in base ai dati nello storico:
    • il metodo “FindWorker” di “UserManager” invoca il metodo “GetHysoricalUserJob”.
  • FeedBack Manager
    • Gestisce i feedback rilasciati dagli utenti alle agenzie e ai lavori tramite i metodi AddFeedAgency, EditFeedAgency, AddFeedJob, AddFeedJob.
    • Quando un utente inserisce un nuovo feedback ad un'agenzia:
    • Il metodo “AddFeedAgency” richiama il metodo &quot;UpdateScore&quot; del web service &quot;AgencyManager&quot; che salva nel profilo dell'agenzia il voto medio che ha ricevuto dagli utenti; analogamente quando deve aggiornare il voto relativo al lavoro.
  • Availability Manager
    • Gestisce le disponibilità degli utenti tramite i metodi AddAvailability, EditAvailability, DeleteAvailability, GetAvailability
    • Gestisce la ricerca di lavoratori in base alla loro disponibilità tramite il metodo getUserAvailability, che cerca gli utenti disponibili per una determinata data.
  • Messages Manager
    • Quando questo web service genera le pagine con la posta in arrivo e la posta inviata dall’utente deve:
    • visualizzare il nome mittente e nome destinatario, per fare questo i metodi “ViewInBox” e “ViewOutBox” fanno una richiesta al web service “UserManager” tramite il metodo “GetProfile ” oppure al web service “AgencyManager” tramite il metodo “GetProfile”
    • Gestisce lo scambio di messaggi tra utenti e agenzie tramite i metodi sendMessage, DeleteMessage, GetMessage
  • Casi D’uso: Login
    • L'utente (Worker) accede alla pagina di login
    • L'utente (Worker) inserisce user e password
    • La pagina invia una richiesta al web service “UserManager” invocando il metodo “login”
    • Il web service “UserManager” interroga il database “User”
    • Se l'autenticazione ha successo il web service “UserManager” effettua un redirect alla pagina del profilo dell'utente.
    • Se l'autenticazione fallisce il web service “UserManager” ritorna alla pagina di login con un messaggio di errore.
    • Analogamente funziona la pagina di Logout.
  • 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.
  • Casi D’uso: Trova Amici
    • L'utente accede alla pagina per la ricerca degli amici
    • L'utente inserisce i parametri di ricerca (nome,cognome ecc.)
    • La pagina invia una richiesta al web service “UserManager” invocando il metodo “FindFriend” che a sua volta interroga il database “User” per trovare gli utenti che corrispondono ai parametri di ricerca.
  • 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.
  • Casi D’uso: Imposta disponibilità
    • L'utente imposta i giorni in cui è disponibile sul calendario.
    • La pagina per la disponibilità invia una richiesta al web service “AvailabilityManager” invocando il metodo “AddAvailability” che a sua volta inserisce nel database “Availability” la disponibilità dell'utente.
  • Casi D’uso: Trova Lavoro
    • L'utente vuole trovare un lavoro secondo alcuni filtri di ricerca.
    • I filtri di ricerca sono l'area geografica, il periodo lavorativo e i dettagli sul tipo di lavoro.
    • Oltre a questi filtri è presente la scelta di una particolare agenzia. c
    1. Per creare l'elenco delle agenzie la pagina web invia 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. Quando l'utente preme il tasto ricerca viene invia una richiesta al web service “JobManager” invocando il metodo “Find” che a sua volta interroga il database “Job” e restituisce i lavori filtrati secondi i parametri dell'utente. Il metodo “Find” deve poter ricercare i lavori offerti da una determinata agenzia e quindi può invocare il metodo “getProfile” del web service “AgencyManager” per recuperare i dati dell'agenzia.
  • 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.
  • 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.
  • 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.
  • 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.
  • Studio del Carico di lavoro (1)
    • UserManager: ogni volta che un utente accede alla social network deve invocare questo web service per accedere al proprio profilo e per ottenere la sua lista amici. Essendo gli utenti, molti di più rispetto alle agenzie, questo è sicuramente il web service più critico e più sollecitato di tutta la rete sociale. Inoltre UserManager viene invocato in numerose richieste quali: la visualizzazione dei profili degli amici, ricerca di lavoratori da parte delle agenzie o per visualizzare i messaggi di posta relativi ad un utente.
    • AgencyManager: ogni volta che un’agenzia accede alla social network deve invocare questo web service per accedere al proprio profilo. Inoltre AgencyManager viene invocato in numerose richieste quali: la ricerca di lavoro da parte dell’utente, il rilascio del feedback o per visualizzare i messaggi di posta relativi ad un’agenzia.
    • JobManager: viene utilizzato nelle ricerche sia di lavori che di lavoratori, ma anche nella visualizzazione dello storico di un utente. Essendo queste tra le interrogazioni più costose, JobManager è uno dei web server più critici della rete sociale.
    I Web Service più utilizzati sono:
  • Studio del Carico di lavoro (2)
    • Trova lavoratore: E’ sicuramente l’interrogazione più costosa, perché deve effettuare 3 operazioni di JOIN su 4 Database diversi:
      • Sul database “User” viene effettuata una ricerca con i filtri impostati dall’utente;
      • I risultati vengono uniti con le disponibilità di ciascun utente e poi il tutto viene filtrato secondo i parametri della ricerca;
      • Inoltre se viene impostata la ricerca mediante storico, viene eseguita un’ulteriore unione dei dati precedenti con i dati dello storico di ciascun utente. Per ottenere dallo storico i lavori svolti dall’utente deve essere fatta un’ulteriore JOIN con il database Job. I risultati così ottenuti vengono filtrati secondo i parametri di ricerca.
    • Trova Lavoro: Quando un utente deve cercare un lavoro viene effettuata un’operazione di JOIN su 2 database: sul database dei lavori viene effettuata una ricerca con i filtri impostati dall’utente, i risultati vengono uniti con le agenzie che offrono il lavoro e poi il tutto viene a seconda dell’agenzia richiesta nella ricerca.
    • Visualizza Profilo utente: Viene interrogato il database User per avere i dati del profilo, inoltre viene interrogato Friend per trovare gli amici dell’utente. Da questa interrogazione risultano solo gli ID degli amici, questi devono poi essere uniti ai relativi profili tramite un’operazione di JOIN.
    Interrogazioni più costose:
  • 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.
  • 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
  • Problema: Privacy Lavoro ? PROBLEMA: Come fa l’utente a capire impostazioni legate a determinate impostazioni SOLUZIONE: Pop-up javascript
  • Accountability
  • 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
  • Reputation System per l’agenzia Valutazione Agenzia: (7/20) * 5 + (13/20) * 8 = 6,95 (voto 7 )
  • Autenticazione e Registrazione
    • Per garantire la reale esistenza dell'utente lavoratore
    • che si registra a JobFinder, utilizzeremo un sistema
    • di controllo basato su:
    • Non è possibile trovare, in tale contesto, una vera e
    • propria soluzione a al problema del furto di identità.
    Furto d’identità
  • Conclusioni(1)
    • Prima di affrontare questo corso non avevamo idea di cosa fossero linguaggi come OWL e RDF, ora non possiamo dire di conoscer a pieno l’argomento ma abbiamo appreso a pieno i suoi ampi vantaggi:
  • Conclusioni (2)
    • Il progetto “JobFinder” ci ha permesso di ideare un’ applicazione web mediante l’architettura dei “web services”.
    • Nella progettazione di un Web Service si è messi di fronte a differenti problematiche come:
      • la gestione dell’interazione tra “web services” e “database”.
      • la distribuzione del carico di lavoro su più “web services”.
    • I “Web Services” sono un’ottima soluzione per i problemi di scalabilità e di gestione del carico di una Social Network come la nostra.