all repos — slides @ de054bece69a4eb0253b3604004d5f157721ee4e

Reveal-md slides I made for various occasions

octree/semantic.md (view raw)

  1---
  2author: Tim Izzo
  3paging: Slide %d / %d
  4theme: ./_themes/5ika.css
  5theme: ./slides_theme.json
  6---
  7
  8# Introduction
  9
 10L'objectif de cette prez n'ai pas de donner la maîtrise du Web
 11sémantique en 20min mais de comprendre les bases dont tout découle
 12ensuite et de vous intéresser à poser des questions ou à creuser
 13plus les trucs abordés.
 14
 15C'est technique mais (j'espère) suffisamment vulgarisé pour être
 16compris de tout le monde.
 17
 18---
 19
 20# Documents HTML
 21
 22Le Web que l'on connaît est composé de documents HTML interreliés.
 23
 24HTML est un moyen de formater du contenu pour être **lu par des humains**
 25mais il fait peu de sens pour la machine.
 26
 27La machine ne peut pas comprendre le sens du texte, saisir le contexte,
 28faire des liens conceptuels entre différentes pages.
 29
 30---
 31
 32# Natural language processing
 33
 34Le NLP est une méthode de la boite à outils "IA" qui consiste à
 35traiter du texte pour le comprendre d'un point de vue machine.
 36
 37Cela demande énormément de calculs car chaque language est différent,
 38avec beaucoup de subtilités gramaticales etc...
 39
 40En gros, ça consiste à faire de la sémantique (= recherche de sens
 41d'un texte afin de pouvoir l'appréhender informatiquement) mais
 42en employant l'artillerie lourde.
 43
 44---
 45
 46# Un exemple
 47
 48> Octree est domicilié au 23 Route de la Galaise à Plan-les-Ouates.
 49> L'entreprise réalise du développement d'outils Open-Source
 50> pour la transition écologique et sociale.
 51> Tim Izzo y occupe le poste d'admin systèmes.
 52
 53---
 54
 55Avec le NLP, on peut identifier certaines portions:
 56
 57> `Octree` est domicilié au `23 Route de la Galaise à Plan-les-Ouates`.
 58> L'entreprise réalise du `développement` d'outils `Open-Source`
 59> pour la `transition écologique et sociale`.
 60> `Tim Izzo` y occupe le poste d'`admin systèmes`.
 61
 62---
 63
 64# Web sémantique
 65
 66Plutôt que de stocker des contenus essentiellement textuels, le Web
 67sémantique consiste à considérer la données de manière plus *pure*
 68tout en gardant l'approche *interrelié* du Web.
 69
 70On garde le protocole HTTP et les URLs mais on remplace
 71le HTML par une famille de standards appelée **RDF**.
 72
 73---
 74
 75# La base
 76
 77Dans sa forme la plus pure et simple, une information est la liaison
 78 d'un **sujet** et d'une **caractéristique**.
 79
 80Par exemple:
 81
 82```
 83Tim est sysadmin.
 84```
 85
 86Dans une forme - textuelle et + machine, on dirait quelque chose du genre
 87
 88```
 89Tim --métier--> sysadmin
 90```
 91
 92- **Tim** est le `sujet`
 93- **métier** est le `prédicat`
 94- **sysadmin** est la valeur / la caractéristique / l'`objet`
 95
 96Ces 3 éléments forment ce qu'on appel un **triplet**.
 97Un triplet est donc une manière de lier une caractéristique à un sujet.
 98
 99---
100
101On a donc défini une caractéristique à un sujet mais
102le sujet `Tim` a plusieurs caractéristiques.
103
104Comment lier plusieurs caractéristques à l'entité "Tim" de manière
105sûre en considérant que les données peuvent être stockées de manière
106décentralisée ou distribuée ( = sur plusieurs serveurs, gérées par différentes personnes) ?
107
108C'est là qu'on utilise les URLs:
109
110Pour considérer le sujet "Tim", on va utiliser toujours la même URL.
111Par exemple https://octree.ch/people/Tim.
112
113---
114
115Dans la même idée, comment, à travers le Web, tout le monde peut nommer
116le métier `sysadmin` de manière constante et commune ?
117
118Pour cela, on peut aussi utiliser une URL qui pointe vers un organisme
119qui fait référence pour les types de métiers existants.
120
121Si on cherche à se baser sur des standards, on peut par exemple utiliser
122https://isco.ilo.org/2522.1 qui correspondrai à l'URL attribuée au job
123"Administrateur/ice système".
124
125
126---
127
128Toujours dans la même idée mais plus deep, il faut avoir la même logique
129pour le *prédicat* afin que la manière de dire "on parle du métier de
130cette personne" soit la même pour tout le monde.
131
132En utilisant la manière d'organiser les choses proposée par https://schema.org/,
133on peut utiliser l'URL https://schema.org/hasOccupation.
134
135---
136
137# Notre triplet avec des URLs
138
139Notre triplet devient ainsi
140
141```turtle
142<https://octree.ch/people/Tim> <https://schema.org/hasOccupation> <https://isco.ilo.org/2522.1>
143```
144
145Toujours dans l'ordre SUJET PRÉDICAT OBJET.
146
147---
148
149Tout n'est pas obligatoirement une URL qui pointe vers quelque chose de standardisé.
150Faisons un pas en arrière et considérons que l'Objet est + libre. On peut directement
151avoir une valeur textuelle ou numéraire:
152
153```turtle
154<https://octree.ch/people/Tim> <https://schema.org/hasOccupation> "Sysadmin"
155```
156
157---
158
159# Un exemple plus complet
160
161Voilà plusieurs triplets pour avec le même sujet pour mieux comprendre.
162
163```turtle
164<https://octree.ch/people/Tim>      <https://schema.org/hasOccupation>   "Sysadmin"
165<https://octree.ch/people/Tim>      a                                    <https://schema.org/Person>
166<https://octree.ch/people/Tim>      <https://schema.org/givenName>       "Tim"
167<https://octree.ch/people/Tim>      <https://schema.org/familyName>      "Izzo"
168<https://octree.ch/people/Tim>      <https://schema.org/email>           "tim@octree.ch"
169<https://octree.ch/people/Tim>      <https://schema.org/image>           "https://5ika.ch//img/5ika.webp"
170<https://octree.ch/people/Tim>      <https://schema.org/sameAs>          <https://5ika.ch/profile.ttl>
171```
172
173> Le `a` est un raccourci universel en Web sémantique pour https://www.w3.org/1999/02/22-rdf-syntax-ns#type
174
175---
176
177# RDF
178
179La famille de standards RDF est un ensemble de manière de représenter des triplets (par exemple, dans un fichier).
180
181Par rapport à la slide suivante, il ne manque pas grande chose pour que ce soit du `N-Triples`
182(juste des points à la fin).
183
184```turtle
185<https://octree.ch/people/Tim>      <https://schema.org/hasOccupation>   "Sysadmin" .
186<https://octree.ch/people/Tim>      a                                    <https://schema.org/Person> .
187<https://octree.ch/people/Tim>      <https://schema.org/givenName>       "Tim" .
188<https://octree.ch/people/Tim>      <https://schema.org/familyName>      "Izzo" .
189<https://octree.ch/people/Tim>      <https://schema.org/email>           "tim@octree.ch" .
190<https://octree.ch/people/Tim>      <https://schema.org/image>           "https://5ika.ch//img/5ika.webp" .
191```
192
193Si on veut faire du `Turtle`, bien plus pratique:
194
195```turtle
196<https://octree.ch/people/Tim>      <https://schema.org/hasOccupation>   "Sysadmin" ;
197                                    a                                    <https://schema.org/Person> ;
198                                    <https://schema.org/givenName>       "Tim" ;
199                                    <https://schema.org/familyName>      "Izzo" ;
200                                    <https://schema.org/email>           "tim@octree.ch" ;
201                                    <https://schema.org/image>           "https://5ika.ch//img/5ika.webp" .
202```
203
204Et en déclarant des *préfixes* en début de fichier, on peut éviter les parties d'URL
205souvent répétées pour un affichage plus clair:
206
207```turtle
208@prefix schema: <https://schema.org/>.
209@prefix octree: <https://octree.ch/people> .
210
211octree:Tim      a                      schema:Person ;
212                schema:hasOccupation   "Sysadmin" ;
213                schema:givenName       "Tim" ;
214                schema:familyName      "Izzo" ;
215                schema:email           "tim@octree.ch" ;
216                schema:image           "https://5ika.ch//img/5ika.webp" .
217```
218
219---
220
221# JSON-LD
222
223Il existe beaucoup de formats RDF mais Turtle est l'un des deux plus courant dans mon expérience du Web sémantique.
224L'autre est `JSON-LD`, très utilisé pour le Fediverse (Mastodon & cie).
225
226L'exemple en JSON-LD donne cela:
227
228```json
229{
230  "@context": {
231    "schema": "https://schema.org/",
232    "octree": "https://octree.ch/people"
233  },
234  "@id": "https://octree.ch/people/Tim",
235  "@type": "schema:Person",
236  "schema:hasOccupation": "Sysadmin",
237  "schema:givenName": "Tim",
238  "schema:familyName": "Izzo",
239  "schema:email": "tim@octree.ch",
240  "schema:image": "https://5ika.ch/img/5ika.webp"
241}
242
243```
244
245---
246
247Ainsi, on compose de l'information par l'accumulation de triplets attribués à un sujet.
248Ces données peuvent être stockées dans des fichiers simples en format Turtle, JSON-LD ou autre
249et être publiée comme cela. Par exemple => https://5ika.ch/profile.ttl.
250
251Mais on peut aussi stocker des triplets dans des bases de données faites pour cela.
252On les appelle des triple-store.
253
254Ce n'est pas du SQL, pas du NoSQL. C'est une sorte d'entre-deux.
255
256=> Exemple avec le Triple store d'Octree.
257
258---
259
260# Donnée distribuée
261
262Imaginons que sur mon site perso, je publie les triplets suivants:
263
264```turtle
265@prefix schema: <https://schema.org/>.
266
267<https://5ika.ch/#me>      a                      schema:Person ;
268                           schema:hasOccupation   "Sysadmin" ;
269                           schema:givenName       "Tim" ;
270                           schema:worksFor         <https://octree.ch>
271```
272
273Ce document Turtle défini un sujet identifié par `https://5ika.ch/#me`
274qui est une Personne et qui travaille pour l'entité `https://octree.ch`.
275
276Sur https://5ika.ch, rien ne défini l'entité Octree mais une personne qui cherche
277des informations à la possibilité de *suivre les liens* pour aller creuser sa recherche.
278
279Elle trouvera éventuellement sur le site https://octree.ch un fichier JSON-LD avec le contenu
280suivant:
281
282```json
283{
284  "@context": "https://schema.org/",
285  "@type": "Organization",
286  "name": "Octree",
287  "url": "https://octree.ch",
288  "logo": "https://octree.ch/logo.png",
289  "sameAs": [
290    "https://tooting.ch/octree",
291    "https://www.facebook.com/octree",
292    "https://www.linkedin.com/company/octree"
293  ],
294  "contactPoint": {
295    "@type": "ContactPoint",
296    "contactType": "Customer Service",
297    "email": "info@octree.ch",
298    "areaServed": "CH",
299    "availableLanguage": ["English", "French", "Portugese"]
300  },
301  "address": {
302    "@type": "PostalAddress",
303    "streetAddress": "23 Route de la Galaise",
304    "addressLocality": "Plan-les-Ouates",
305    "postalCode": "1228",
306    "addressCountry": "CH"
307  }
308}
309```
310
311> C'est ce genre de choses que lit Google pour afficher les infos sur la partie
312> droite lors d'une recherche.
313
314---
315
316# D'autres exemples de TTL pour Octree
317
318=> https://git.octree.ch/o/semantic-octree/-/tree/main/ttl?ref_type=heads
319
320---
321
322# Où trouver des données sémantiques ?
323
324- https://www.wikidata.org/wiki/Wikidata:Main_Page
325- https://www.dbpedia.org/
326- https://lindas.admin.ch/
327- Triple Store d'Octree
328
329---
330
331# Linked Open Data Cloud
332
333Des centaines d'organismes de tout horizons se sont rassemblés pour publier
334des données sémantiques ouvertes afin d'aider la recherche scientifique (entre autre).
335
336Plus de 30 millards de triplets.
337
338=> https://lod-cloud.net/
339
340---
341
342# Conclusion
343
344- On n'a fait qu'entrevoir la surface du Web sémantique.
345- 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
346- Il permet d'avoir des architectures d'app différentes, distribuées, plus ouvertes
347- Moins structuré que le SQL mais plus que le NoSQL => intéressant pour des projets d'Octree comme SPE sémantique et Caroster