SlideShare ist ein Scribd-Unternehmen logo
1 von 71
Social Network per la gestione di risorse umane Anno Accademico: 2008/2009 Componenti Gruppo: Bello Giuseppe, Campanale Lorella, Guglielmi Michele, Spadaro Alessandro.
Scopo progetto ,[object Object],[object Object]
1° grande Vantaggio: ,[object Object],[object Object],[object Object],Vogliamo ricercare profili più adatti al lavoro in questione Proporre ai lavoratori/utenti i lavori a cui sono più interessati
Scenario attuale: ,[object Object],Hostess Promoter Addetti agli stand ,[object Object],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 ,[object Object]
Requisiti: agenzia ,[object Object]
Requisiti: lavoratore e agenzia ,[object Object]
Soluzione: Social Network ,[object Object],Lavoratore: ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],Soluzione: Social Network
[object Object],Soluzione: Social Network
Progettazione: profilo utente
Progettazione: home lavoratore
Progettazione: home agenzia
Progettazione: profilo agenzia
Perchè usare una social network? ,[object Object]
Confronto con realtà esistenti nel web ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Non esiste una realtà simile alla nostra!
Cosa abbiamo realizzato:  ,[object Object],[object Object],[object Object],[object Object]
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;>  ]> ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
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 ,[object Object],[object Object],[object Object],[object Object],[object Object],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 ,[object Object],[object Object],[object Object],[object Object],[object Object],<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 ,[object Object],[object Object],[object Object],[object Object],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 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],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 ,[object Object],[object Object],[object Object],[object Object],[object Object],<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 ,[object Object],[object Object],[object Object],[object Object],<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 ,[object Object],[object Object],[object Object],[object Object],[object Object],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 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Agency Manager ,[object Object],[object Object],[object Object]
Job Manager ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
FeedBack Manager ,[object Object],[object Object],[object Object]
Availability Manager ,[object Object],[object Object]
Messages Manager ,[object Object],[object Object],[object Object]
Casi D’uso: Login ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
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 ,[object Object],[object Object],[object Object]
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à ,[object Object],[object Object]
Casi D’uso: Trova Lavoro ,[object Object],[object Object],[object Object],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) ,[object Object],[object Object],[object Object],I Web Service più utilizzati sono:
Studio del Carico di lavoro (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],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  ,[object Object],[object Object],[object Object]
[object Object],[object Object],Furto d’identità
Conclusioni(1) ,[object Object]
Conclusioni (2) ,[object Object],[object Object],[object Object],[object Object],[object Object]

Weitere ähnliche Inhalte

Andere mochten auch

Controversy with embryonic stem cell research
Controversy with embryonic stem cell researchControversy with embryonic stem cell research
Controversy with embryonic stem cell researchJONATHAN RAMIREZ
 
Celina’S Presentation Autocad
Celina’S   Presentation  AutocadCelina’S   Presentation  Autocad
Celina’S Presentation Autocadguestfe06dc
 
Sun Valley - Ketchum City Budget Comparison 030409 V4
Sun Valley - Ketchum City Budget Comparison 030409 V4Sun Valley - Ketchum City Budget Comparison 030409 V4
Sun Valley - Ketchum City Budget Comparison 030409 V4NextNewsNet
 

Andere mochten auch (10)

Kia dvd-player
Kia dvd-playerKia dvd-player
Kia dvd-player
 
Impaired
ImpairedImpaired
Impaired
 
Marketing plan
Marketing planMarketing plan
Marketing plan
 
Photostory Presentation (1)
Photostory Presentation (1)Photostory Presentation (1)
Photostory Presentation (1)
 
Controversy with embryonic stem cell research
Controversy with embryonic stem cell researchControversy with embryonic stem cell research
Controversy with embryonic stem cell research
 
United kingdom
United kingdomUnited kingdom
United kingdom
 
Celina’S Presentation Autocad
Celina’S   Presentation  AutocadCelina’S   Presentation  Autocad
Celina’S Presentation Autocad
 
ASCD Presentation 16MAR09
ASCD Presentation 16MAR09ASCD Presentation 16MAR09
ASCD Presentation 16MAR09
 
Sun Valley - Ketchum City Budget Comparison 030409 V4
Sun Valley - Ketchum City Budget Comparison 030409 V4Sun Valley - Ketchum City Budget Comparison 030409 V4
Sun Valley - Ketchum City Budget Comparison 030409 V4
 
PräSentation2
PräSentation2PräSentation2
PräSentation2
 

Ähnlich wie Job Finder

Web Semantico: da XHTML a RDF in 3 click
Web Semantico: da XHTML a RDF in 3 clickWeb Semantico: da XHTML a RDF in 3 click
Web Semantico: da XHTML a RDF in 3 clickSimone Onofri
 
[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
[ITA] Introduzione ai web services: SOAP, WSDL, UDDI[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
[ITA] Introduzione ai web services: SOAP, WSDL, UDDIMarco Brambilla
 
SAWSDL Restriced
SAWSDL RestricedSAWSDL Restriced
SAWSDL RestricedDario Mazza
 
I Linguaggi Del Web (1° Giornata)
I Linguaggi Del Web (1° Giornata)I Linguaggi Del Web (1° Giornata)
I Linguaggi Del Web (1° Giornata)Diego La Monica
 
Xml - progettazione unità didattica
Xml - progettazione unità didatticaXml - progettazione unità didattica
Xml - progettazione unità didatticaViola Anesin
 
Confronto fra web services framework (open source)
Confronto fra web services framework (open source)Confronto fra web services framework (open source)
Confronto fra web services framework (open source)Alberto Lagna
 
Phpday 2010: facebook php framework
Phpday 2010: facebook php frameworkPhpday 2010: facebook php framework
Phpday 2010: facebook php frameworkMatteo Baccan
 
Happy Monday #1: the Web API guidelines for happy developers
Happy Monday #1: the Web API guidelines for happy developersHappy Monday #1: the Web API guidelines for happy developers
Happy Monday #1: the Web API guidelines for happy developersBENTOSA
 
I dati strutturati in Wordpress
I dati strutturati in WordpressI dati strutturati in Wordpress
I dati strutturati in WordpressStefano Torselli
 
Semantic SEO nell’Era Post Hummingbird e WordLift 3.0
Semantic SEO nell’Era Post Hummingbird e WordLift 3.0 Semantic SEO nell’Era Post Hummingbird e WordLift 3.0
Semantic SEO nell’Era Post Hummingbird e WordLift 3.0 Andrea Volpini
 
Presentazione principi oop
Presentazione principi oopPresentazione principi oop
Presentazione principi oopgcorreddu
 
Linked data parliamo di semantica del web - v2
Linked data   parliamo di semantica del web - v2Linked data   parliamo di semantica del web - v2
Linked data parliamo di semantica del web - v2Riccardo Grosso
 
2015-06 Roberto Boselli, Dal dato non strutturato alle ontologie
2015-06 Roberto Boselli, Dal dato non strutturato alle ontologie2015-06 Roberto Boselli, Dal dato non strutturato alle ontologie
2015-06 Roberto Boselli, Dal dato non strutturato alle ontologieAndrea Rossetti
 
Enterprise Spring and Flex applications
Enterprise Spring and Flex applicationsEnterprise Spring and Flex applications
Enterprise Spring and Flex applicationsmarcocasario
 
Linked data parliamo di semantica del web - v0
Linked data   parliamo di semantica del web - v0Linked data   parliamo di semantica del web - v0
Linked data parliamo di semantica del web - v0Riccardo Grosso
 
•Blog: quali tecnologie per il futuro?
•Blog: quali tecnologie per il futuro?•Blog: quali tecnologie per il futuro?
•Blog: quali tecnologie per il futuro?IWA
 

Ähnlich wie Job Finder (20)

Web Semantico: da XHTML a RDF in 3 click
Web Semantico: da XHTML a RDF in 3 clickWeb Semantico: da XHTML a RDF in 3 click
Web Semantico: da XHTML a RDF in 3 click
 
[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
[ITA] Introduzione ai web services: SOAP, WSDL, UDDI[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
 
SAWSDL Restriced
SAWSDL RestricedSAWSDL Restriced
SAWSDL Restriced
 
I Linguaggi Del Web (1° Giornata)
I Linguaggi Del Web (1° Giornata)I Linguaggi Del Web (1° Giornata)
I Linguaggi Del Web (1° Giornata)
 
Drupal + Apache SOLR
Drupal + Apache SOLRDrupal + Apache SOLR
Drupal + Apache SOLR
 
Xml - progettazione unità didattica
Xml - progettazione unità didatticaXml - progettazione unità didattica
Xml - progettazione unità didattica
 
Confronto fra web services framework (open source)
Confronto fra web services framework (open source)Confronto fra web services framework (open source)
Confronto fra web services framework (open source)
 
Phpday 2010: facebook php framework
Phpday 2010: facebook php frameworkPhpday 2010: facebook php framework
Phpday 2010: facebook php framework
 
Happy Monday #1: the Web API guidelines for happy developers
Happy Monday #1: the Web API guidelines for happy developersHappy Monday #1: the Web API guidelines for happy developers
Happy Monday #1: the Web API guidelines for happy developers
 
Xml Xslt
Xml  XsltXml  Xslt
Xml Xslt
 
I dati strutturati in Wordpress
I dati strutturati in WordpressI dati strutturati in Wordpress
I dati strutturati in Wordpress
 
Semantic SEO nell’Era Post Hummingbird e WordLift 3.0
Semantic SEO nell’Era Post Hummingbird e WordLift 3.0 Semantic SEO nell’Era Post Hummingbird e WordLift 3.0
Semantic SEO nell’Era Post Hummingbird e WordLift 3.0
 
Presentazione principi oop
Presentazione principi oopPresentazione principi oop
Presentazione principi oop
 
Linked data parliamo di semantica del web - v2
Linked data   parliamo di semantica del web - v2Linked data   parliamo di semantica del web - v2
Linked data parliamo di semantica del web - v2
 
2015-06 Roberto Boselli, Dal dato non strutturato alle ontologie
2015-06 Roberto Boselli, Dal dato non strutturato alle ontologie2015-06 Roberto Boselli, Dal dato non strutturato alle ontologie
2015-06 Roberto Boselli, Dal dato non strutturato alle ontologie
 
Lamp Ld2008
Lamp Ld2008Lamp Ld2008
Lamp Ld2008
 
Enterprise Spring and Flex applications
Enterprise Spring and Flex applicationsEnterprise Spring and Flex applications
Enterprise Spring and Flex applications
 
Linked data parliamo di semantica del web - v0
Linked data   parliamo di semantica del web - v0Linked data   parliamo di semantica del web - v0
Linked data parliamo di semantica del web - v0
 
•Blog: quali tecnologie per il futuro?
•Blog: quali tecnologie per il futuro?•Blog: quali tecnologie per il futuro?
•Blog: quali tecnologie per il futuro?
 
HTML e CSS
HTML e CSSHTML e CSS
HTML e CSS
 

Job Finder

  • 1. Social Network per la gestione di risorse umane Anno Accademico: 2008/2009 Componenti Gruppo: Bello Giuseppe, Campanale Lorella, Guglielmi Michele, Spadaro Alessandro.
  • 2.
  • 3.
  • 4.
  • 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
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 19.
  • 20.
  • 21.
  • 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:
  • 24. Classi e proprietà modellate
  • 25.
  • 26. 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;>
  • 27. 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>
  • 28.
  • 29.
  • 30.
  • 31.
  • 32. 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>
  • 33.
  • 34. 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
  • 35.
  • 36. XSL (XML Stylesheet Language)
  • 37. 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>
  • 38. Struttura del file html generato
  • 39.
  • 40. <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>
  • 41. 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>
  • 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 )
  • 68.
  • 69.
  • 70.
  • 71.