{"id":34071211,"url":"https://github.com/federicotorrielli/yapo","last_synced_at":"2025-12-14T08:00:13.644Z","repository":{"id":53621781,"uuid":"322576930","full_name":"federicotorrielli/yapo","owner":"federicotorrielli","description":"(Yet Another) Product Ontology: a web product catalogue ontology","archived":false,"fork":false,"pushed_at":"2021-03-20T10:04:43.000Z","size":63801,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-29T15:02:32.278Z","etag":null,"topics":["ontology","project","protege","semantic-web"],"latest_commit_sha":null,"homepage":"https://federicotorrielli.github.io/yapo","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/federicotorrielli.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-12-18T11:33:44.000Z","updated_at":"2021-11-10T04:03:08.000Z","dependencies_parsed_at":"2022-09-19T09:30:49.407Z","dependency_job_id":null,"html_url":"https://github.com/federicotorrielli/yapo","commit_stats":null,"previous_names":["federicotorrielli/modsem"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/federicotorrielli/yapo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/federicotorrielli%2Fyapo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/federicotorrielli%2Fyapo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/federicotorrielli%2Fyapo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/federicotorrielli%2Fyapo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/federicotorrielli","download_url":"https://codeload.github.com/federicotorrielli/yapo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/federicotorrielli%2Fyapo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27722625,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-14T02:00:11.348Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ontology","project","protege","semantic-web"],"created_at":"2025-12-14T08:00:12.755Z","updated_at":"2025-12-14T08:00:13.640Z","avatar_url":"https://github.com/federicotorrielli.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Progetto: (Yet Another) Product Ontology\n\n### Docente: Prof.ssa Rossana Damiano\n\n### Studenti: Ivan Spada e Federico Torrielli\n\n---\n\n# PARTE I\n\n# Motivazioni\n\n\u003e Rilevanza del dominio scelto dal punto di vista culturale, professionale, sociale, ecc.\n\n## Argomento scelto\n\nCatalogo di prodotti e servizi di una generica azienda nell'ambito di vendita e noleggio di prodotti tecnologici. In\nparticolare, nel seguente documento analizziamo il caso di una multinazionale e la gestione del suo catalogo. Di\nseguito, mostriamo una breve descrizione e la principale motivazione di sviluppo:\n\n\u003e Prendiamo in analisi i principali prodotti dell'azienda Apple, collocata nell'ambito tecnologico.\n\nSono trattati alcuni prodotti progettati e venduti in Italia a partire dall'anno 2016.\n\nAlcuni esempi di prodotti venduti sono:\n\n- iPhone\n- iPad\n- MacBook air \u0026 pro\n- Apple Watch\n- Accessori più venduti (vd. AirPods)\n\n## Motivazione 1: catalogare per vendere più in fretta\n\nAll'interno di una grande azienda come Apple, che principalmente ha il focus di produrre **pochi** dispositivi con\nsimile design ma funzioni nettamente separate è utile avere un punto di riferimento dal punto di vista\ndell'organizzazione della conoscenza per svariate motivazioni:\n\n- Guidare il potenziale *buyer* a comprare il prodotto\n- Evitare la confusione che è naturalmente generata dalla nomenclatura dei prodotti\n- Offrire la possibilità di consultare l'archivio del prodotti\n\nLa motivazione principale della creazione di questa ontologia nasce, in verità, da qualcosa che Apple **non** mette a\ndisposizione dell'utente: un tool per confrontare dispositivi simili. Per essere più chiari, proponiamo un esempio:\n\u003e L'utente *x* ha la necessità di comprare un telefono iPhone ma ha a disposizione un budget limitato e ha il desiderio\n\u003e di alcune specifiche che solo la serie iPhone X propone: si trova però davanti ad al bivio che nasce dalla\n\u003e possibilità di comprare l'iPhone XS oppure XR. Oggi come oggi, non esiste alcun tool (che non sia una ricerca\n\u003e manuale) per effettuare questo tipo di confronto, nonostante la loro accurata catalogazione che provvedono a dare\n\u003e sul sito. Ovvero, sul sito Apple il confronto avviene esclusivamente in maniera testuale ma non è possibile, ad\n\u003e esempio, filtrare i contenuti per CPU.\n\nSe il povero utente avesse avuto la possibilità di confrontare i prodotti per prezzo, si sarebbe accorto che l'azienda\nvende il modello XR ad una cifra minore con (più o meno) la stessa qualità di prodotto.\n\n## Motivazione 2: aggiornamento del catalogo\n\nL'azienda ha deciso di riproporre i propri dispositivi anche gli anni successivi mutando la fascia di clientela a cui\nerano precedentemente venduti. Alcuni dispositivi top di gamma dell'anno N risultano appartenenti alla fascia media\ndell'anno N+1 permettendo il riutilizzo dei *vecchi device* allungando la vita degli articoli e riducendo le scorte\navanzate in magazzino allo stesso tempo. L'organizzazione del catalogo attraverso una rappresentazione della conoscenza,\naggiornabile nel tempo, permette la riorganizzazione delle proposte degli anni successivi in base alle scelte di *\nmarketing* stabilite dal *team* addetto all'interno dell'azienda.\n\n# Requirements\n\n\u003e Requisiti per la creazione dell'ontologia: finalità, task, contesto e tipo di utenti a cui si rivolge\n\n## Finalità\n\n\u003e Finalità generali della codifica formale del dominio\n\nLa costruzione del dominio della seguente ontologia ha come finalità l'utilizzo della stessa al fine di creare cataloghi\ndi prodotti facilmente aggiornabili, flessibili alle modifiche e su cui si possano effettuare delle operazioni di\nricerca (sia come applicazione, sia simil-DB). Dal punto di vista aziendale, diventa sempre più complicato gestire\ncataloghi di prodotti, soprattutto se risultano simili se non identici: organizzando i dati secondo un'ontologia\ngerarchica consultabile non solo si può usufruire più facilmente del catalogo (da cliente) ma diventa altrettanto\naggiornabile.\n\n## Task e contesto\n\n\u003e I task specifici a cui è orientata e il contesto in cui si collocano\n\nIl catalogo permette l'organizzazione dei prodotti venduti dall'azienda, tiene in considerazione le fasce di clientela a\ncui gli articoli sono indirizzati e le possibili variazioni nel tempo seguendo le scelte commerciali e rispettando le\nrelazioni fra *items*. È possibile la consultazione della raccolta da parte dei clienti usufruendo di filtri in grado di\nsemplificare la ricerca, la lettura e il confronto con i *competitor*. Il contesto è la vendita e la consultazione dei\nprodotti delle aziende.\n\n## Utenti target\n\n\u003e Il tipo di utenti a cui si rivolge\n\n- Utenti che devono consultare cataloghi ed effettuare ricerche su prodotti\n- Aziende che devono catalogare prodotti e verificare/aggiornare la loro presenza in stock\n- Altri utenti che devono confrontare prodotti diversi in base a specifiche caratteristiche dei singoli\n\n# Descrizione\n\n\u003e Descrizione del dominio, con riferimenti bibliografici e/o sitografia\n\n## Dominio\n\n\u003e Descrizione del dominio\n\nIl dominio, collocato nell'ambito commerciale, ha come fine la rappresentazione dei prodotti delle aziende mettendoli in\nrelazione tra loro in base a prestazioni, qualità e *target*. Contiene le descrizioni degli articoli e le specifiche\ntecniche, permette il confronto dei prodotti e la loro organizzazione utile alle aziende e ai clienti. Infine, mantiene\ntraccia delle proposte annuali disponibili sul mercato.\n\n## Fonti\n\n\u003e Riferimenti bibliografici e sitografia\n\n### Sitografia\n\nApple (Italy). Available at: *https://www.apple.com/it/*\n\nAsus (Italy). Available at: *https://www.asus.com/it/*\n\nSamsung (Italy). Available at: *https://www.samsung.com/it/*\n\n# Documentazione sul dominio\n\n\u003e Qua verranno mostrati documenti informali, specifiche e standard esistenti ed\n\u003e un esempio reale che mostri il funzionamento della nostra ontologia.\n\n## Ontologie similari ed ispirazione\n\nPer trarre ispirazione della Simple IT Product Catalog si è partiti dalla già nota necessità di avere un ontologia dei\nprodotti, di fantasia, che potesse esplicare concetti come \"catalogo\", \"prodotto\" e \"device\". Ci si è quindi accorti che\ndurante la costruzione della stessa si stava virando sempre più verso il concetto di\n\"ontologia per l'e-commerce\": è stato quindi preso spunto da esempi come la\n[Good Relations](http://www.heppnetz.de/projects/goodrelations/) ontology, un vocabolario web appositamente creato per\nquesto genere di utilizzi, sia da aziende che da altre ontologie che ne fanno utilizzo.\n\nNonostante Good Relations fosse un buon punto di partenza, si palesava il fatto che fosse nata principalmente a scopo di\nSEO Tool per siti web che possedevano CMS (ad esempio un SEO per Wordpress!).\n\nFiglia della già nota Good Relations, la [Product Ontology](http://www.productontology.org/) un'ontologia,\nautoesplicativa nel nome, che fa riferimento a Wikipedia per esplicare i singoli prodotti, cui si è deciso di allinare\nparecchie nostre definizioni per avere anche un punto di vista interessante su una ontologia pre-esistente. La Product\nOntology è davvero particolare in quanto non ha bisogno di manualmente \"integrare\" la sua T-BOX ed A-BOX per\nl'ontologia, ma, come già accennato, prende in prestito le sue definizioni da Wikipedia, e le ordina come la comunità ha\ndeciso di allineare i concetti di partenza.\n\n## Documenti informali\n\n### Apple\n\nLa creazione dell'ontolgia si è ispirata all'organizzazione dei prodotti in catalogo di aziende come Apple, di cui è\npossibile trovare sotto alcuni esempi\n\n![Accessori1](https://i.ibb.co/K5mc9rH/image-2021-01-10-17-05-25.png)\n\n\u003e Macbook e iMac\n\n![Accessori2](https://i.ibb.co/XLzLPdB/image-2021-01-10-17-06-16.png)\n\n\u003e iPad\n\n![Accessori3](https://i.ibb.co/s68d5M7/image-2021-01-10-17-06-32.png)\n\n\u003e iPhone\n\n![Accessori4](https://i.ibb.co/jJf4c8c/image-2021-01-10-17-06-43.png)\n\n\u003e Accessori e Apple Watch\n\nSi può chiaramente vedere come la prima divisione fatta sia tramite \"tipologia\" di prodotto: i computer, poi i laptop, e\nancora gli iPad, iPhone ed infine gli accessori come Apple Watch e AirPods.\n\nAccanto ad ogni categoria è poi possibile confrontare tipi equivalenti di prodotto\n(ad es. laptop con laptop) tramite il menù \"Confronta\". Non è invece possibile fare confronti di prezzo sulle intere\ncategorie (che sarebbe uno degli obiettivi della nostra ontologia!).\n\nÈ stato notato che la classificazione dei prodotti data da Apple è confusa e chiaramente tende a far notare a primo\nimpatto i prodotti più nuovi invece che i più venduti, cosa che invece siti come MediaWorld fanno, non essendo legati ad\nun marchio soltanto.\n\n### Samsung\n\n![Samsung1](https://i.postimg.cc/SsFCmm95/image-2021-01-10-17-20-49.png)\n\nSul sito di Samsung si può già notare la differenziazione tra dispositivi portatili e non, cosa presente anche\nall'interno della nostra ontologia e che chiaramente rende più semplice la visualizzazione di un catalogo di Prodotti\nelettronici.\n\nIl fatto che Samsung abbia un'organizzazione di questo tipo fa pensare che, a differenza di Apple, i suoi prodotti non\nsono pensati per essere iconici, e che, ovviamente, il loro catalogo sia ben più vasto della già citata azienda di\nCupertino.\n\n### Asus\n\n![Asus1](https://i.postimg.cc/xCvHCByd/image-2021-01-10-17-22-25.png)\n\nQua è possibile visionare la divisione di vari computer da lavoro (sia fissi, che portatili, che ibridi). Più o meno si\nadatta lo stesso pattern di Samsung, in quanto il modello di azienda è equiparabile.\n\n## Organizzazione aziendale\n\nLa presenza di molteplici compagnie che hanno preso parte al ciclo produttivo degli articoli ha ispirato la\nclassificazione delle stesse per ruolo: progettazione e produzione.\n\nOgni azienda, nel ramo IT, o:\n\n- Rappresenta la company che commissiona produzione e design\n- Progetta solamente i prodotti\n- Produce solamente i prodotti\n\nUn esempio già citato è la Apple, che commissiona il design dei prodotti a Foxconn e la sua produzione di Chipset a\nQualcomm (non attualmente, ma è un buon esempio).\n\n## Organizzazione user\n\nI prodotti IT vengono spesso realizzati avendo in mente una tipologia (o target)\ndi clientela, come ad esempio la divisione delle serie (J,Z,M,A...) di Samsung.\n\nIn un catalogo di prodotti IT, più di altri, è importante ricordare che si tratta di vendere prodotti che solitamente\nsono costosi: un catalogo che permetta la visualizzazione per fascia di prezzo è spesso apprezzato e aiuta la clientela\na scegliere prodotti per feature/prezzo e qualità/prezzo.\n\n## Comparare i prodotti\n\n![GalaxyZ](https://i.postimg.cc/k5p0Yhkf/image-2021-01-10-17-55-26.png)\n\nNel mondo dei device tecnologici forse il più importante fattore di scelta di un prodotto piuttosto che un altro sono le\nsue specifiche tecniche. Nella precedente immagina possiamo notare come le diverse caratteristiche si dividano, a\nseconda del dispositivo, nelle sue componenti interne.\n\nLe stesse vengono anche utilizzate per proporre \"comparison\" (confronti)\ntra dispositivi in modo da poter fare una scelta più accurata.\n\n![Comparison](https://i.postimg.cc/pT5gwJvx/image-2021-01-10-18-04-35.png)\n\n# Lode\n\n[Qui il report LODE](http://150.146.207.114/lode/extract?url=https%3A%2F%2Fevilscript.altervista.org%2Fyapo.owl\u0026lang=en)\n\n# Visualizzazione\n\n## Tassonomia delle classi\n\n![Tassonomia di progetto](https://i.postimg.cc/yd7kxbw8/Modsem-taxonomy.png)\n\n## Template utilizzati per i dati (GraphDB)\n\n![Apple template](https://i.postimg.cc/13cL31hx/firefox-T1q-YKb-W2-Aj.png)\n\n![iPhone12 64GB template](https://i.postimg.cc/QMFkncq6/firefox-BYsgoai6o-C.png)\n\n## Triple di esempio\n\nSi sono voluti selezionare due esempi (rispettivamente *yapo:Apple* e *yapo:iPhone12_64*)\nper mostrare alcune delle triple più utilizzate nel progetto per descrivere istanze dell'ontologia: gli esempi sono *incompleti* di tutti i dati dell'ontologia.\n\n![Apple](https://i.imgur.com/jwJfsSi.png)\n\nSono state incluse, come si può notare, anche alcune delle inferenze che tramite GraphDB vengono esplicitate qui in tabella.\n\nPer quanto riguarda la colonna del contesto, è stata riportata ma il contesto accluso è quello di default\ndell'applicazione.\n\n![Apple2](https://i.imgur.com/bZ7zy0o.png)\n\n## Esportazione Turtle\n\n[L'esportazione Turtle si trova QUI](https://github.com/federicotorrielli/yapo/raw/master/Protege/turtle/yapo.owl)\n\n---\n\n# PARTE II\n\n# Flusso d'iterazione utente\n\n## Iterazione Utente\n\n![Operazioni utente](https://i.postimg.cc/pVcdKR4V/iteration-schema.png)\n\n## Schema di interfaccia: CLI\n\n![CLI](https://i.postimg.cc/fWYPWhhw/cli.png)\n\n## Esempio su terminale sipcp\n\n[Esempio - ASCIINEMA](https://asciinema.org/a/58fTGH48YAQ50INdwq4rX4VlO)\n\n## SPARQL\n\n### Operazione 1\n\nDescrizione:\ndato il nome dell'azienda, restituisce tutti i prodotti che vende.\n\nQuery:\n\n```SPARQL\nPREFIX rdf: \u003chttp://www.w3.org/1999/02/22-rdf-syntax-ns#\u003e\nPREFIX yapo: \u003chttps://evilscript.altervista.org/yapo.owl#\u003e\n\nSELECT ?prod WHERE{\n\t?prod rdf:type yapo:Product.\t\n\t?company rdf:type yapo:Company;\n\t\tyapo:sells ?prod.\n\tFILTER(?company = yapo:Apple)\n}\n```\n\nReturn:\n\n- yapo:AirPods_wirelessCharge\n- yapo:AppleWatchSeries6_40mm_GPS_Cellular_Nike\n- yapo:Lightning_cable\n- yapo:IpadAir_2020\n- yapo:Iphone11_64\n- yapo:MacBookAir_M1\n- yapo:iMac_27_RetinaDisplay_5k_256\n- yapo:iPhone12_64\n- yapo:iPhoneX_64\n- yapo:Beats_cuffie\n\n### Operazione 2\n\nDescrizione:\ndata una soglia di prezzo base P, restituisce tutti gli smartphone con prezzo \u003e= P e relativi azienda e prezzo prodotto\nordinati per prezzo ASC.\n\nQuery:\n\n```SPARQL\nPREFIX rdf: \u003chttp://www.w3.org/1999/02/22-rdf-syntax-ns#\u003e\nPREFIX xsd: \u003chttp://www.w3.org/2001/XMLSchema#\u003e\nPREFIX yapo: \u003chttps://evilscript.altervista.org/yapo.owl#\u003e\nPREFIX price: \u003chttp://www.ontologydesignpatterns.org/cp/owl/price.owl#\u003e\n\nSELECT ?prod ?brand ?price WHERE { \n\t?brand rdf:type yapo:Company.\n\t?price rdf:type price:Price;\n\t\tprice:hasValue ?v.\n\t?prod rdf:type yapo:Smartphone;\n\t\tyapo:hasBrand ?brand;\n\t\tprice:hasPrice ?price.\n\tFILTER (?v \u003e= '600'^^xsd:float)\n}\nORDER BY ?price\n```\n\nReturn:\n\n- yapo:Iphone11_64 yapo:Apple yapo:600Euro\n- yapo:iPhone12_64 yapo:Apple yapo:800Euro\n- yapo:SamsungGalaxyS20_5G_global yapo:Samsung yapo:800Euro\n\n### Operazione 3\n\nDescrizione:\nrestituisce gli smartwatch che sono compatibili con uno smartphone, visualizza smartwatch, brand smartwatch, prezzo\nsmartwatch, smartphone compatibile.\n\nQuery:\n\n```SPARQL\nPREFIX rdf: \u003chttp://www.w3.org/1999/02/22-rdf-syntax-ns#\u003e\nPREFIX yapo: \u003chttps://evilscript.altervista.org/yapo.owl#\u003e\nPREFIX price: \u003chttp://www.ontologydesignpatterns.org/cp/owl/price.owl#\u003e\n\nSELECT ?smartw ?brand ?pricesmartw ?smartp WHERE { \n\t?brand rdf:type yapo:Company.\n\t?pricesmartw rdf:type price:Price.\n\t?smartp rdf:type yapo:Smartphone.\n\t?smartw rdf:type yapo:Smartwatch;\n\t\tyapo:compatibleWith ?smartp;\n\t\tyapo:hasBrand ?brand;\n\t\tprice:hasPrice ?pricesmartw.\n}\n```\n\nReturn:\n\n- yapo:AppleWatchSeries6_40mm_GPS_Cellular_Nike yapo:Apple yapo:500Euro yapo:\n  Iphone11_64\n- yapo:AppleWatchSeries6_40mm_GPS_Cellular_Nike yapo:Apple yapo:500Euro yapo:\n  iPhone12_64\n- yapo:AppleWatchSeries6_40mm_GPS_Cellular_Nike yapo:Apple yapo:500Euro yapo:\n  iPhoneX_64\n\n### Operazione 4\n\nDescrizione:\ndato un prezzo base P per gli smarphone, restituisce gli smartwatch compatibili con gli smartphone con prezzo \u003e= P, il\nbrand dello smartwatch e i prezzi dei due dispositivi. Ordinato per prezzo smartphone crescente.\n\nQuery:\n\n```SPARQL\nPREFIX rdf: \u003chttp://www.w3.org/1999/02/22-rdf-syntax-ns#\u003e\nPREFIX xsd: \u003chttp://www.w3.org/2001/XMLSchema#\u003e\nPREFIX yapo: \u003chttps://evilscript.altervista.org/yapo.owl#\u003e\nPREFIX price: \u003chttp://www.ontologydesignpatterns.org/cp/owl/price.owl#\u003e\n\nSELECT ?smartw ?brand ?pricesmartw ?smartp ?pricesmartp WHERE { \n\t?brand rdf:type yapo:Company.\n\t?pricesmartw rdf:type price:Price.\n\t?pricesmartp rdf:type price:Price;\n\t\tprice:hasValue ?vsmartp.\n\t?smartp rdf:type yapo:Smartphone;\n\t\tprice:hasPrice ?pricesmartp.\n\t?smartw rdf:type yapo:Smartwatch;\n\t\tyapo:compatibleWith ?smartp;\n\t\tyapo:hasBrand ?brand;\n\t\tprice:hasPrice ?pricesmartw.\n\tFILTER (?vsmartp \u003e= \"600\"^^xsd:float)\n}\n```\n\nReturn:\n\n- yapo:AppleWatchSeries6_40mm_GPS_Cellular_Nike yapo:Apple yapo:500Euro yapo:\n  Iphone11_64 yapo:600Euro\n- yapo:AppleWatchSeries6_40mm_GPS_Cellular_Nike yapo:Apple yapo:500Euro yapo:\n  iPhone12_64 yapo:800Euro\n\n### Operazione 5\n\nDescrizione:\ndata la scelta di uno smartphone in particolare, restituisce il cavo che è contenuto all'interno della confezione di\nvendita.\n\nQuery:\n\n```SPARQL\nPREFIX rdf: \u003chttp://www.w3.org/1999/02/22-rdf-syntax-ns#\u003e\nPREFIX yapo: \u003chttps://evilscript.altervista.org/yapo.owl#\u003e\n\nSELECT ?smartp ?cable WHERE { \n\t?cable rdf:type yapo:Cable.\n\t?smartp rdf:type yapo:Smartphone;\n\t\tyapo:containsInBox ?cable.\n\tFILTER(?smartp = yapo:Iphone11_64)\n}\n```\n\nReturn:\n\n- yapo:Iphone11_64 yapo:Lightning_cable\n\n### Operazione 6\n\nDescrizione:\nrestituisce se nel catalogo Apple ci sono anche cuffie della BeatsAudio.\n\nQuery:\n\n```SPARQL\nPREFIX rdf: \u003chttp://www.w3.org/1999/02/22-rdf-syntax-ns#\u003e\nPREFIX yapo: \u003chttps://evilscript.altervista.org/yapo.owl#\u003e\n\nASK {\n\t?company rdf:type yapo:Company;\n\t    yapo:sells ?earPlugs.\n    ?earPlugs rdf:type yapo:EarPlugs.\t\n\t?brand rdf:type yapo:Company;\n\t\tyapo:isBrandOf ?earPlugs.\n\tFILTER(?company = yapo:Apple \u0026\u0026 ?brand = yapo:BeatsAudio).\n}\n```\n\nReturn:\n\n- YES\n\n### Operazione 7\n\nDescrizione:\ndata la scelta di uno device in particolare, restituisce gli altri dispositivi che hanno montata la medesima cpu.\n\nQuery:\n\n```SPARQL\nPREFIX wd: \u003chttp://www.wikidata.org/entity/\u003e\nPREFIX wdt: \u003chttp://www.wikidata.org/prop/direct/\u003e\nPREFIX rdfs: \u003chttp://www.w3.org/2000/01/rdf-schema#\u003e\nPREFIX yapo: \u003chttps://evilscript.altervista.org/yapo.owl#\u003e\nPREFIX rdf: \u003chttp://www.w3.org/1999/02/22-rdf-syntax-ns#\u003e\n\nSELECT ?prodLabel WHERE {      \n    ?device rdf:type yapo:Device;\n          yapo:CpuType ?cpu.\n    SERVICE \u003chttps://query.wikidata.org/sparql\u003e {       \n        ?chip wdt:P31 wd:Q610398;\n          rdfs:label ?label;\n          wdt:P1535 ?prod.\n        ?prod rdfs:label ?prodLabel.\n        FILTER (?device = yapo:Iphone11_64 \u0026\u0026 lang(?prodLabel) = \"it\" \u0026\u0026 lang(?label) = \"it\" \u0026\u0026 regex(?label, ?cpu)).\n    } \n}\n```\n\nReturn:\n\n- \"iPhone 11\"@it\n- \"iPhone 11 Pro\"@it\n- \"iPhone SE\"@it\n\n### Operazione 8\n\nDescrizione:\ndata la scelta di un device in particolare, restituisce lo username Instagram del brand del device.\n\nQuery:\n\n```SPARQL\nPREFIX wd: \u003chttp://www.wikidata.org/entity/\u003e\nPREFIX wdt: \u003chttp://www.wikidata.org/prop/direct/\u003e\nPREFIX rdfs: \u003chttp://www.w3.org/2000/01/rdf-schema#\u003e\nPREFIX yapo: \u003chttps://evilscript.altervista.org/yapo.owl#\u003e\nPREFIX rdf: \u003chttp://www.w3.org/1999/02/22-rdf-syntax-ns#\u003e\n\nSELECT ?usernameIG WHERE {      \n    ?device rdf:type yapo:Device;\n            yapo:hasBrand ?brand.\n    ?brand rdf:type yapo:Company;\n           rdfs:label ?labelbrand.\n    SERVICE \u003chttps://query.wikidata.org/sparql\u003e {       \n        ?company wdt:P31 wd:Q4830453;\n            wdt:P2003 ?usernameIG;\n            rdfs:label ?labelCompany.\n        FILTER (?device = yapo:Iphone11_64 \u0026\u0026 lang(?labelCompany) = \"it\" \u0026\u0026 STR(?labelCompany) = STR(?labelbrand)).\n    } \n}\n```\n\nReturn:\n\n- \"apple\"\n\n### Operazione 9\n\nDescrizione:\ndato un utente, restituisce i prodotti che ha acquistato.\n\nQuery:\n\n```SPARQL\nPREFIX rdf: \u003chttp://www.w3.org/1999/02/22-rdf-syntax-ns#\u003e\nPREFIX yapo: \u003chttps://evilscript.altervista.org/yapo.owl#\u003e\n\nSELECT ?prod WHERE{\t\n    ?prod rdf:type yapo:Product.\n\t?user rdf:type yapo:User;\n\t\tyapo:buysProduct ?prod.\n\tFILTER (?user = yapo:Giovanni_PowerUser)\n}\n```\n\nReturn:\n\n- yapo:MacBookAir_M1\n- yapo:iPhone12_64\n\n---\n\n## Altre query\n\n### Query 1\n\nDescrizione:\ndata un'azienda, restituisce le aziende che lavorano con la prima.\n\nQuery:\n\n```SPARQL\nPREFIX rdf: \u003chttp://www.w3.org/1999/02/22-rdf-syntax-ns#\u003e\nPREFIX yapo: \u003chttps://evilscript.altervista.org/yapo.owl#\u003e\n\nSELECT ?companyTo WHERE{\n\t?companyTo rdf:type yapo:Company.\t\n\t?company rdf:type yapo:Company;\n\t\tyapo:manufacturesTo ?companyTo.\n\tFILTER(?company = yapo:Apple)\n}\n```\n\nReturn:\n\n- yapo:BeatsAudio\n- yapo:Foxconn\n- yapo:Qualcomm\n- yapo:ShortFactory\n\n### Query 2\n\nDescrizione:\ndato un utente e uno specifico prodotto, registra l'acquisto del prodotto.\n\nQuery:\n\n```SPARQL\nPREFIX rdf: \u003chttp://www.w3.org/1999/02/22-rdf-syntax-ns#\u003e\nPREFIX yapo: \u003chttps://evilscript.altervista.org/yapo.owl#\u003e\n\nINSERT { \n\t?buyer yapo:buysProduct ?prod.\n} WHERE {\n\t?buyer rdf:type yapo:User.\n\t?prod rdf:type yapo:Product.\n\tFILTER(?buyer = yapo:Giovanni_PowerUser \u0026\u0026 ?prod = yapo:Iphone11_64)\n}\n```\n\nReturn:\n\n- Added 1 statements.\n\n### Query 3\n\nDescrizione:\ndato un utente e uno specifico prodotto, rimuove l'acquisto del prodotto.\n\nQuery:\n\n```SPARQL\nPREFIX rdf: \u003chttp://www.w3.org/1999/02/22-rdf-syntax-ns#\u003e\nPREFIX yapo: \u003chttps://evilscript.altervista.org/yapo.owl#\u003e\n\nDELETE { \n\t?buyer yapo:buysProduct ?prod.\n} WHERE {\n\t?buyer rdf:type yapo:User.\n\t?prod rdf:type yapo:Product.\n\tFILTER(?buyer = yapo:Giovanni_PowerUser \u0026\u0026 ?prod = yapo:Iphone11_64)\n}\n```\n\nReturn:\n\n- Removed 1 statements.\n\n# Documentazione del programma\n\n## Simple IT Product Catalog Program\n\nProgramma terminale \"sipcp\" che permette non solo di fare delle query al SIPC ma di utilizzare l'endpoint GraphDB per\ninterfacciarsi con SPARQL verso fonti esterne come WikiData etc.. etc..\n\nIl programma è completamente fatto in Python e non include una GUI.\n\nPer utilizzarlo basta installarlo con il comando `pip install sipcp` ed utilizzarlo direttamente nel terminale nel\nseguente modo:\n\n\u003e NB: la prima esecuzione del programma chiederà all'utente di inizializzare un file\n\u003e config.ini che conterrà l'URL di GraphDB in locale (o su server), da quel momento\n\u003e in poi sarà registrato in locale *nella cartella in cui è stato eseguito*\n\n- `sipcp query \"query qui\"` effettua una query in-line, non sono permessi caratteri come virgolette quindi l'utilizzo\n  rimane limitato alle query veloci e tipo \"listing\"\n- `sipcp query-from-text` effettua tutte le query prendendole da un file di testo chiamato \"do.txt\"\n  il file deve essere nella directory in cui si sta attualmente per eseguire il programma sipcp\n- `sipcp query-product Compagnia` interroga yapo alla ricerca di tutti i prodotti dalla compagnia\n  Compagnia. es: `sipcp query-product Apple` restituisce tutti i prodotti venduti dalla Apple\n- `sipcp query-subcompanies Compagnia` similare a quello prima, interroga yapo restituendo tutte le\n  compagnie che lavorano per la compagnia Compagnia.\n- `sipcp myproducts User` effettua la ricerca di tutti i prodotti comprati da un utente nel catalogo, molto utile\n  per il comando seguente\n- `sipcp cputype Prodotto` effettua la ricerca del tipo di cpu del prodotto Prodotto\n- `sipcp compatible-cables Smartphone` cerca tutti i cavi compatibili con lo smartphone specificato\n- `sipcp compatible-smartphones` cerca tutte le opzioni di compatibilità tra smartwatch e smartphones\n- `sipcp query-smartphone Prezzo` cerca tutti gli smartphones che costano di piu' della cifra specificata e li ordina\n  dal meno costoso al piu' costoso\n- `sipcp query_smartwatch_smartphone Prezzo` cerca tutti i match per compatibilità fra smartphone e smartwatch\n- `sipcp search-brand Company Brand` cerca tutti i Brand che vendono venduti sul sito di Company\n- `sipcp search-from-cpu Device` cerca tutti i devices su Wikidata che hanno la stessa CPU del device in input\n- `sipcp search-ig-profile Device` cerca la pagina instagram su Wikidata della compagnia che vende il device Device.\n\nPer invocare un help in formato internazionale, basta digitare `sipcp --help`\nSupporta Python3.6 e le versioni successive.\n\n## Note di esecuzione\n\nsipcp nasce per essere eseguito su un terminale UNIX-like (Linux, MacOS...) e supporta la maggior parte dei terminali in\ncircolazione, eseguendo anche output colorato. Su Windows funziona in ogni caso, ma le differenze principali sono:\n\n- Non si possono incollare sul terminale Query multi-lines per il comando `sipcp query \"\"`\n- L'output non è colorato (sembra banale ma rende l'interazione interessante)\n\n# Omeka-S per yapo\n\n## Motivazioni della scelta dell'estensione\n\nTra le estensioni disponibili è stata scelta quella di Omeka-S, una piattaforma CMS che è in tutto e per tutto una\nLinked Data Platform.\n\nA differenza di GraphDB, Omeka ci ha dato molta più liberta di \"giocare\" con i dati a disposizione e creare individui e\nresource templates utilizzando ciò che avevamo già in input, ma con un grado di modificabilità e visibilità maggiore\nrispetto a GraphDB.\n\nCome GraphDB possiamo effettuare query semantiche sulla KB e utilizzarle nelle pagine.\n\n## Specifiche\n\nLa piattaforma è stata installata manualmente su un server pubblico dotato di Ubuntu 20.10, fatto un setup di MySql,\nphpmyadmin e tutti gli strumenti necessari alla piattaforma per far lavorare il server senza intoppi.\n\nIl link è pubblicamente accessibile [QUI](http://51.210.104.53/omeka/s/yapo/)\n\nDalla versione di base è stato modificato il tema pre-installato, giusto per dare un \"tocco più e-commerce\" alla\npiattaforma.\n\n## Items e Item sets\n\nIn Omeka gli individuals sono chiamati \"items\": ognuno di questi item fa riferimento ad un template per la sua creazione\nchiamato il \"resource template\".\n\nSono stati creati, nel nostro caso, tre resource template rispettivamente per:\n\n- brand: ovvero, le aziende che fanno dei prodotti\n- inStock: ovvero, un prodotto che è correntemente nella condizione di essere in stock\n- outOfStock: il complementare del precedente\n\nSono quindi stati definiti degli Item sets rispettivamente:\n\n- inStockList: la lista degli item che sono inStock\n- OutOfStockList: la lista degli item che sono outOfStock\n- Brands: la lista dei brand\n\nE poi, aggiunti degli items, come si può vedere nell'immagine:\n\n![Item list](https://i.imgur.com/fJt2obp.png)\n\n## Pagine\n\nSono state create delle pagine per contenere ognuna di queste liste:\n\n- [Brands page](http://51.210.104.53/omeka/s/yapo/page/brands)\n- [OutOfStock page](http://51.210.104.53/omeka/s/yapo/page/out-of-stock)\n- [InStock page](http://51.210.104.53/omeka/s/yapo/page/in-stock)\n\nCome si può vedere, ogni pagina rimanda ad una lista di prodotti o brand che sono del dominio specificato.\n\n![Brands page](https://i.imgur.com/DP0NbcM.png)\n![InStock page](https://i.imgur.com/Xvdmk9s.png)\n![OutOfStock page](https://i.imgur.com/FHyq2p2.png)\n\nInfatti, ognuna di queste pagine invia una query in-real-time al CMS semantico chiedendo la lista dei prodotti (o dei\nbrand), senza mai mantenere una vera e propria cache.\n\n## Conclusione\n\nQuesto strumento mostra come anche un'azienda, attrezzata di un CMS come Omeka S, possa usufruire di questa tecnologia\nper pubblicare un catalogo completo di prodotti\n(e molto altro) alla fruizione del pubblico intero.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffedericotorrielli%2Fyapo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffedericotorrielli%2Fyapo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffedericotorrielli%2Fyapo/lists"}