--- author: Tim Izzo paging: Slide %d / %d theme: ./_themes/5ika.css theme: ./slides_theme.json --- # Introduction L'objectif de cette prez n'ai pas de donner la maîtrise du Web sémantique en 20min mais de comprendre les bases dont tout découle ensuite et de vous intéresser à poser des questions ou à creuser plus les trucs abordés. C'est technique mais (j'espère) suffisamment vulgarisé pour être compris de tout le monde. --- # Documents HTML Le Web que l'on connaît est composé de documents HTML interreliés. HTML est un moyen de formater du contenu pour être **lu par des humains** mais il fait peu de sens pour la machine. La machine ne peut pas comprendre le sens du texte, saisir le contexte, faire des liens conceptuels entre différentes pages. --- # Natural language processing Le NLP est une méthode de la boite à outils "IA" qui consiste à traiter du texte pour le comprendre d'un point de vue machine. Cela demande énormément de calculs car chaque language est différent, avec beaucoup de subtilités gramaticales etc... En gros, ça consiste à faire de la sémantique (= recherche de sens d'un texte afin de pouvoir l'appréhender informatiquement) mais en employant l'artillerie lourde. --- # Un exemple > Octree est domicilié au 23 Route de la Galaise à Plan-les-Ouates. > L'entreprise réalise du développement d'outils Open-Source > pour la transition écologique et sociale. > Tim Izzo y occupe le poste d'admin systèmes. --- Avec le NLP, on peut identifier certaines portions: > `Octree` est domicilié au `23 Route de la Galaise à Plan-les-Ouates`. > L'entreprise réalise du `développement` d'outils `Open-Source` > pour la `transition écologique et sociale`. > `Tim Izzo` y occupe le poste d'`admin systèmes`. --- # Web sémantique Plutôt que de stocker des contenus essentiellement textuels, le Web sémantique consiste à considérer la données de manière plus *pure* tout en gardant l'approche *interrelié* du Web. On garde le protocole HTTP et les URLs mais on remplace le HTML par une famille de standards appelée **RDF**. --- # La base Dans sa forme la plus pure et simple, une information est la liaison d'un **sujet** et d'une **caractéristique**. Par exemple: ``` Tim est sysadmin. ``` Dans une forme - textuelle et + machine, on dirait quelque chose du genre ``` Tim --métier--> sysadmin ``` - **Tim** est le `sujet` - **métier** est le `prédicat` - **sysadmin** est la valeur / la caractéristique / l'`objet` Ces 3 éléments forment ce qu'on appel un **triplet**. Un triplet est donc une manière de lier une caractéristique à un sujet. --- On a donc défini une caractéristique à un sujet mais le sujet `Tim` a plusieurs caractéristiques. Comment lier plusieurs caractéristques à l'entité "Tim" de manière sûre en considérant que les données peuvent être stockées de manière décentralisée ou distribuée ( = sur plusieurs serveurs, gérées par différentes personnes) ? C'est là qu'on utilise les URLs: Pour considérer le sujet "Tim", on va utiliser toujours la même URL. Par exemple https://octree.ch/people/Tim. --- Dans la même idée, comment, à travers le Web, tout le monde peut nommer le métier `sysadmin` de manière constante et commune ? Pour cela, on peut aussi utiliser une URL qui pointe vers un organisme qui fait référence pour les types de métiers existants. Si on cherche à se baser sur des standards, on peut par exemple utiliser https://isco.ilo.org/2522.1 qui correspondrai à l'URL attribuée au job "Administrateur/ice système". --- Toujours dans la même idée mais plus deep, il faut avoir la même logique pour le *prédicat* afin que la manière de dire "on parle du métier de cette personne" soit la même pour tout le monde. En utilisant la manière d'organiser les choses proposée par https://schema.org/, on peut utiliser l'URL https://schema.org/hasOccupation. --- # Notre triplet avec des URLs Notre triplet devient ainsi ```turtle ``` Toujours dans l'ordre SUJET PRÉDICAT OBJET. --- Tout n'est pas obligatoirement une URL qui pointe vers quelque chose de standardisé. Faisons un pas en arrière et considérons que l'Objet est + libre. On peut directement avoir une valeur textuelle ou numéraire: ```turtle "Sysadmin" ``` --- # Un exemple plus complet Voilà plusieurs triplets pour avec le même sujet pour mieux comprendre. ```turtle "Sysadmin" a "Tim" "Izzo" "tim@octree.ch" "https://5ika.ch//img/5ika.webp" ``` > Le `a` est un raccourci universel en Web sémantique pour https://www.w3.org/1999/02/22-rdf-syntax-ns#type --- # RDF La famille de standards RDF est un ensemble de manière de représenter des triplets (par exemple, dans un fichier). Par rapport à la slide suivante, il ne manque pas grande chose pour que ce soit du `N-Triples` (juste des points à la fin). ```turtle "Sysadmin" . a . "Tim" . "Izzo" . "tim@octree.ch" . "https://5ika.ch//img/5ika.webp" . ``` Si on veut faire du `Turtle`, bien plus pratique: ```turtle "Sysadmin" ; a ; "Tim" ; "Izzo" ; "tim@octree.ch" ; "https://5ika.ch//img/5ika.webp" . ``` Et en déclarant des *préfixes* en début de fichier, on peut éviter les parties d'URL souvent répétées pour un affichage plus clair: ```turtle @prefix schema: . @prefix octree: . octree:Tim a schema:Person ; schema:hasOccupation "Sysadmin" ; schema:givenName "Tim" ; schema:familyName "Izzo" ; schema:email "tim@octree.ch" ; schema:image "https://5ika.ch//img/5ika.webp" . ``` --- # JSON-LD Il existe beaucoup de formats RDF mais Turtle est l'un des deux plus courant dans mon expérience du Web sémantique. L'autre est `JSON-LD`, très utilisé pour le Fediverse (Mastodon & cie). L'exemple en JSON-LD donne cela: ```json { "@context": { "schema": "https://schema.org/", "octree": "https://octree.ch/people" }, "@id": "https://octree.ch/people/Tim", "@type": "schema:Person", "schema:hasOccupation": "Sysadmin", "schema:givenName": "Tim", "schema:familyName": "Izzo", "schema:email": "tim@octree.ch", "schema:image": "https://5ika.ch/img/5ika.webp" } ``` --- Ainsi, on compose de l'information par l'accumulation de triplets attribués à un sujet. Ces données peuvent être stockées dans des fichiers simples en format Turtle, JSON-LD ou autre et être publiée comme cela. Par exemple => https://5ika.ch/profile.ttl. Mais on peut aussi stocker des triplets dans des bases de données faites pour cela. On les appelle des triple-store. Ce n'est pas du SQL, pas du NoSQL. C'est une sorte d'entre-deux. => Exemple avec le Triple store d'Octree. --- # Donnée distribuée Imaginons que sur mon site perso, je publie les triplets suivants: ```turtle @prefix schema: . a schema:Person ; schema:hasOccupation "Sysadmin" ; schema:givenName "Tim" ; schema:worksFor ``` Ce document Turtle défini un sujet identifié par `https://5ika.ch/#me` qui est une Personne et qui travaille pour l'entité `https://octree.ch`. Sur https://5ika.ch, rien ne défini l'entité Octree mais une personne qui cherche des informations à la possibilité de *suivre les liens* pour aller creuser sa recherche. Elle trouvera éventuellement sur le site https://octree.ch un fichier JSON-LD avec le contenu suivant: ```json { "@context": "https://schema.org/", "@type": "Organization", "name": "Octree", "url": "https://octree.ch", "logo": "https://octree.ch/logo.png", "sameAs": [ "https://tooting.ch/octree", "https://www.facebook.com/octree", "https://www.linkedin.com/company/octree" ], "contactPoint": { "@type": "ContactPoint", "contactType": "Customer Service", "email": "info@octree.ch", "areaServed": "CH", "availableLanguage": ["English", "French", "Portugese"] }, "address": { "@type": "PostalAddress", "streetAddress": "23 Route de la Galaise", "addressLocality": "Plan-les-Ouates", "postalCode": "1228", "addressCountry": "CH" } } ``` > C'est ce genre de choses que lit Google pour afficher les infos sur la partie > droite lors d'une recherche. --- # D'autres exemples de TTL pour Octree => https://git.octree.ch/o/semantic-octree/-/tree/main/ttl?ref_type=heads --- # Où trouver des données sémantiques ? - https://www.wikidata.org/wiki/Wikidata:Main_Page - https://www.dbpedia.org/ - https://lindas.admin.ch/ - Triple Store d'Octree --- # Linked Open Data Cloud Des centaines d'organismes de tout horizons se sont rassemblés pour publier des données sémantiques ouvertes afin d'aider la recherche scientifique (entre autre). Plus de 30 millards de triplets. => https://lod-cloud.net/ --- # Conclusion - On n'a fait qu'entrevoir la surface du Web sémantique. - Il est aujourd'hui très utilisé partout mais on ne le voit pratiquement pas car nous sommes des humains, on lit des docs HTML - Il permet d'avoir des architectures d'app différentes, distribuées, plus ouvertes - Moins structuré que le SQL mais plus que le NoSQL => intéressant pour des projets d'Octree comme SPE sémantique et Caroster