Rendre le Bazar sémantique

Qu'est-ce que le web sémantique ?


Selon Wikipedia , « le Web sémantique fournit un modèle qui permet aux données d'être partagées et réutilisées entre plusieurs applications, entreprises et groupes d'utilisateurs ». L'expression a été inventée par Tim Berners-Lee (inventeur du Web et directeur du W3C), qui supervise le développement des technologies communes du Web sémantique. Il le définit comme « une toile de données qui peuvent être traitées directement et indirectement par des machines pour aider leurs utilisateurs à créer de nouvelles connaissances ». Pour y parvenir, le Web sémantique met en œuvre le Web des données qui consiste à lier et structurer l'information sur Internet pour accéder simplement à la connaissance qu'elle contient déjà.

Pour résumer, si ouvrir ces données c'est bien, les ouvrir avec de la sémantique permet aux différentes applications de mieux comprendre le sens des données partagées, et donc d'en avoir un usage plus facile. Utiliser de la sémantique, c'est utiliser des languages que d'autres machines peuvent comprendre et traiter.

Pourquoi rendre le Bazar sémantique ?

Voir la présentation faite ici pour plus de contexte

La base de donnée Bazar n'est pas sémantique par défaut, mais elle peut le devenir en ajoutant certaines métadonnées sur les objets et les champs. Cela permet ensuite d'exporter les données sous format JSON-LD (en plus du format non-sémantique JSON). Un bouton "JSON-LD" apparait alors à côté des boutons "CSV" et "JSON".

La page d'un objet Bazar peut aussi être vue sous forme JSON-LD en utilisant ce header:

Accept: application/ld+json

Finallement, si le vocabulaire sémantique ActivityStreams est utilisé, cela permet de configurer l'extension webhooks pour utiliser ActivityPub.

Comment rendre le Bazar sémantique ?

Soit en important des modèles de formulaires existant (par exemple ceux de https://yeswiki.net), soit en créant ses propres modèles :

1. Cliquez sur la roue dentée en haut à droite et cliquez sur "Base de données" ((?BazaR))
2. Editez un formulaire existant ou créez en un nouveau
3. Cliquez sur "Configuration avancée" en bas du formulaire
4. Entrez un contexte sémantique, soit une simple URL (p.ex. https://www.w3.org/ns/activitystreams), soit un contexte plus compliqué sous forme de JSON. Dans l'exemple ci-dessous, on a un contexte principal ActivityStreams et un contexte plus particulier schema.org.

[
  "https://www.w3.org/ns/activitystreams",
  { "schema": "https://schema.org/" }
]

5. Entrez un type sémantique en dessous. Cela défini le type de l'objet entier. Vous pouvez définir le type avec un simple nom (Si vous entrez Article, cela utilisera l'objet https://www.w3.org/ns/activitystreams#Article), soit une liste de types séparés par une virgule. Dans l'exemple ci-dessous, le préfix schema: renvoie au contexte défini ci-dessus:

Article, schema:Article

6. Définissez le type sémantique de chaque champ. Pour cela, vous devez utiliser le 15ème des champs possibles du formulaire, séparé par trois étoiles. Voilà un exemple de formulaire, où le titre utilise la propriété https://www.w3.org/ns/activitystreams#title et https://schema.org/name.

texte***bf_titre***Titre***255***255*** *** *** ***1***0*** *** *** *** ***title, schema:name
textelong***bf_description***Contenu***40***30*** *** *** ***1***0*** *** *** *** ***content
image***bf_image***Image de présentation (facultatif)***140***140***600***600***right*** *** ***Votre image doit être au format .jpg ou .gif ou .png*** *** *** ***image

Si vous revenez sur la page principale, vous devriez avoir un bouton "JSON-LD" qui s'affiche sur la ligne du formulaire que vous avez modifié. Si vous cliquez dessus et que vous avez déjà entré des données dans ce formulaire, vous devriez voir les donnes représentées de cette manière :
[
  {
    @context: [
      "https://www.w3.org/ns/activitystreams",
      {
        schema: "https://schema.org/"
      }
    ],
    @type: [
      "Article",
      "schema:Article"
    ],
    @id: "http://localhost/?MonPremierArticle",
    title: "Mon premier article",
    schema:name: "Mon premier article",
    content: "Le premier article de mon blog est maintenant en ligne."
  }
]

Vous retrouvez toutes les informations définies ci-dessus. A noter que le champ titre est dupliqué, ce qui est obligatoire lorsqu'on a un même champ qui a plusieurs définitions sémantiques. A noter également que si vous n'aviez pas défini la définition sémantique d'un champ de ce bazar, il n'aurait pas été retourné dans le JSON ci-dessus.

Comment développer des templates Bazar spécifiques à un type sémantique ?

A partir du moment où un formulaire Bazar est sémantique, une nouvelle propriété "semantic" est ajoutée aux objets $fiche et $html, qui sont généralement utilisés pour récupérer et afficher les données d'une fiche donnée. Cette propriété contient un objet JSON-LD complet, avec le contexte, le type, l'ID et toutes les propriétés typées que vous avez définies.

Il est aussi possible de créer des templates particuliers à un type, pour une utilisation plus large par la communauté YesWiki. Un exemple se trouve dans le fichier /tools/bazar/presentation/templates/activitystreams/note.tpl.html. Ce template est automatiquement appliqué à tout objet qui a pour type une Note ActivityStreams.

  • Pour ajouter d'autres types ActivityStreams, il suffit d'ajouter d'autres fichiers dans le même dossier (en utilisant le nom du type en minuscule).

  • Pour faire un mapping avec d'autres vocabulaires sémantiques, il suffit d'éditer la variable globale "baz_semantic_types_mapping".

  • Si vous ne voulez pas utiliser le template par défaut d'un type sémantique, il suffit de décocher le champ "Utiliser un template sémantique s'il est disponible pour ce type d'objet" dans la configuration avancée du formulaire de l'objet.