Skip to content
Jean-Marc Vanel edited this page Dec 16, 2017 · 31 revisions

User Manual in english

Table des matières

SF, qu'est ce que c'est?

Semantic_forms est une application générique à la fois de navigation du web sémantique et d'annotation, et un cadriciel (framework) pour construire des applications d'entreprise centrées sur les formulaires (entrée ou lecture seule). Ce manuel parle de l'application générique. Pour les autres aspects, voir le Wiki.

Toutes les données et tous les modèles de données (ontologies) s'appuient sur les recommandations du Web sémantique du W3C:

Utiliser, installer

Un bac à sable est ici: http://163.172.179.125:9111/

On peut aussi télécharger la distribution et lancer l'application web sur sa machine, voir: Installation de l'application générique semantic_forms

Usages possibles

Les usages peuvent être personnels (via la distribution zip qui est une application web), ou collective lorsque hébergé sur un serveur. Avec seulement les modèles par défaut et les formulaires associés, ces usages sont possibles:

  • gestionnaire de contacts,
  • gestionnaire de projets,
  • moteur de blog,
  • gestionnaire de notes,
  • ...

On peut créer son profil FOAF (pour l'héberger en statique ailleurs ou le visualiser dans l'application), naviguer sur le Web de données en gardant trace, ou gérer tout type de gestion de données structurées.

Là où le Web Sémantique et SF brillent particulièrement, c'est pour créer des liens, liens RDF techniques, et liens humains.

Pour les aspects réseau social avec SF , voir plus bas: Réseau social: discussions .

La technologie sous-jacente

En ce qui concerne la mise en œuvre, Semantic_forms tire parti de Jena TDB, de Play! Framework, Scala et Banana-RDF.

Semantic_forms est fonctionnel en sortant de la boîte, une fois qu'on a dézippé le logiciel, ou qu'on l'a construit à partir des sources. Pas besoin d'installer séparément une base de données ou d'autres composants. Vous pouvez naviguer dans vos données RDF (Turtle, JSON-LD) chargées dans la base locale Jena TDB aussi facilement que dans les profils FOAF sur Internet, ou mélanger les deux. Semantic_forms ressemble aux pages de DBPedia (par exemple http://dbPedia.org/resource/Cycas), mais où l'on peut aussi annoter tous les champs, et charger n'importe quelles données du LOD, y compris des modèles de données et des formulaires.

Le code et la façon de construire à partir de sources sont ici: https://github.com/jmvanel/semantic_forms/tree/master/scala/forms_play .

Guide de Démarrage

Cette petite procédure est à utiliser si vous voulez créer du contenu dans l'application. Autrement, en mode consultation, vous pouvez naviguer dans le LOD à votre guise! Tout ceci est détaillé ci-dessous.

Pour commencer concrètement, je vous invite à créer votre profil personnel sur 2 sites publics (mais peu connus) , soit:

Pour cela :

  • Créer un compte: "login" en haut à droite ( le nom d'utilisateur peut être un mail ou un nom simple comme pierre-dupond, jmvanel ,etc ) (à partir de là vous pouvez créer vos données)
  • Créer un profil personnel: appuyer sur "Importer Afficher Créer", appuyer sur "Créer" (à droite), remplir le formulaire, en particulier les centres d'intérêt (complétion en anglais), et les conpétences
  • Revendiquer ce profil de personne pour l'associer au compte (bouton "Claim" )

Authentification et comptes

Avant créer du contenu, il faut s'authentifier ou créer un compte avec un nom d'utilisateur et un mot de passe.

Ensuite, vous pouvez revendiquer une identité FOAF foaf:Person sur la page de cette foaf:Person, grâce au bouton "revendiquer".

Cela permet d'associer au compte un mail, et toutes les données habituelles . Lors de développements ultérieurs, les centres d'intérêts, les personnes connues pourront être utilisés pour créer des vues personalisées.

NOTE Si un nom d'utilisateur comme XXX n'est pas un URI absolu (comme "u:uu"), il est transformé en user:XXX (ou en mailto:x@x.com s'il contient un arobase @). Le nom d'utilisateur peut être votre mail, précédé par mailto: , ce qui est un URI absolu valide.

Naviguer

Essayez de glisser / déposer cet URI dans le champ "Afficher": http://dbpedia.org/resource/Bobby_Bland

Vous allez voir des paires propriété-valeur au sujet de ce chanteur, Bobby Bland. Cela constitue autant de triplets sujet-propriété-valeur, qui sont l'essence du Web Sémantique. On peut voir aussi des statistiques sur les données téléchargées depuis cet URI, par exemple:

23 subjects, 229 triples, 52 predicates, 148 objects, 148 objects from page URI 

Pour s'initier au Web Sémantique, à part l'utilisation de Semantic_forms, vous pouvez regarder cette courte introduction . Voir aussi la page wikipedia.org Web Sémantique.

D'une manière générale, coller dans le champ "Afficher" un URI téléchargeable, disons <U1>, que ce soit un dbpedia ou profil FOAF, ou une ontologie, affiche les triplets au sujet de <U1> , c'est à dire:

<U1> ?P ?O.

comme l'application web DBPedia.org le fait aussi. Ensuite, vous pouvez naviguer de liens en liens, tout comme dans DBPedia (et aussi dans le LOD, ce que DBPedia.org ne fait pas).

Pour voir les liens "inverses"

?S ?P <U1> .

cela se passe différemment de DBPedia.org . Comme ils peuvent être très nombreux, ils ne sont pas affichés dans la même page, il y a un bouton "liens inverses" sur la page (et sur chaque triplet).

Si on ne trouve pas ce qu'on veut dans les "liens inverses", on peut lancer la "recherche étendue". Celle ci va chercher tout ce qui est à 2 sauts dans le graphe global (4 possibilités: direct-direct, direct-inverse, inverse-direct, inverse-inverse).

Il y a quelques points de départ dans le champ de saisie "URI pour afficher", cliquez sur le triangle sur la droite.

Recherche textuelle

Il s'agit d'une recherche à la Google. On cherche dans tous les triplets la chaîne de caractères donnée. On utilise la liaison avec Lucene, afin d'avoir une recherche plus robuste (accents, etc). Les résultats sont classés via un comptage de liens RDF, analogue RDF du Google page rank. Pour des raisons de performance, le comptage de liens est recalculé à chaque ajout ou modification via /display , /edit , /create .

Chargement de données sémantiques

En naviguant comme ci-dessus, vous avez visualisé, et vous avez aussi chargé. Qu'est ce que des données sémantiques? Il s'agit d'URL (URI) qui contiennent non pas du contenu destiné à la visualisation directe (HTML), mais des triplets. C'est ce qu'on appelle LOD (Données Ouvertes Liées, Linked Open Data). Typiquement, ces URI téléchargeables sont:

  • des profils personnels FOAF: exemple: mon profil FOAF public
  • des entrées de dbpedia.org comme ci-dessus
  • un URI d'un conteneur LDP (Linked Data Platform): exemple: les URI créés par Semantic_forms lui-même.

En quoi consiste le chargement des données sémantiques? La navigation et l'affichage d'un URI téléchargeable charge également dans la base de données (base SPARQL Jena TDB). Et ensuite, les données téléchargées sont ré-utilisées partout dans l'applications: affichage des triplets, des formulaires, des libellés (à partir de rdfs:label et autres prédicats), recherche, ... Ainsi, au fur et à mesure de la navigation, on se fait sa propre sélection de l'Internet des données. Et si c'est une instance partagée de Semantic_forms, on partage:

  1. la connaissance de ce qui a été créé par chacun, via la page historique sur le bac à sable, historique sur localhost ),
  2. les URI sémantiques mis en cache depuis Internet, comme expliqué ci-dessus,
  3. la possibilité de créer des liens sémantiques via un menu déroulant (voir édition plus bas)
  4. la traceabilité de ce que chacun a édité sur le même sujet RDF (auteur et date)

Le cache RDF dans la base de données RDF

La base de données Jena TDB agit comme un cache (indexé par horodatage Last-Updated par ETag, par Expires) pour les données RDF Internet, ce qui signifie:

  • Afficher la deuxième fois est beaucoup plus rapide;
  • En tenant compte des en-têtes HTTP, les données peuvent être rechargées si la source distante est modifiée

A l'intérieur de la base de données RDF (SPARQL), les triplets téléchargés à partir de l'URI <U1> sont chargés dans un graphe nommé dont le nom est aussi <U1>. C'est ce qu'on appelle le "cache sémantique".

Vous pouvez avoir une vue sur les graphes nommés dans la page "outils"; ici dans le sandbox : http://163.172.179.125:9111/tools , et ici en local.

On parle de "Cache Sémantique".

Contenu de la base de données RDF

  • ontologies préchargées, chacune dans son graphe à son URI
  • données utilisateur (celles entrées dans les formulaires), chacune dans un graphe user:XXX
  • documents RDF provenant d'Internet, chacun dans son graphe à son URI

Avertissement sur l'usage

Si vous voulez juste naviguer sur la source de données dbPedia.org, par exemple dbPedia.org, sans vouloir enrichir la base commune avec les URL parcourus, il vaut mieux ne pas utiliser une instance partagée de Semantic_forms. Dans ce cas, vous pouvez naviguer à peu près de la même façon sur dbPedia.org lui-même.

Édition

Modification des données existantes

Lors de l'affichage d'un objet par son URI, cliquez sur l'icône "crayon" pour afficher un formulaire de saisie pour cet URI. Vous pouvez modifier n'importe quel triplet créé par vous, et créer plusieurs valeurs avec le bouton "+". Lorsque vous avez terminé l'édition, le bouton SAUVER met à jour la base de données.

NOTES:

  • Vous ne pouvez modifier n'importe quel triplet, car les triplets provenant d'Internet, et ceux créés par d'autres utilisateurs leur appartiennent; ils ne sont modifiables que par eux.
  • l'auteur et l'horodatage de chaque triplet sont indiqués en mode visualisation

Pour enlever un triplet, enlever le contenu du champ de saisie. La donnée sera supprimée dans la base lors de l'appui sur le bouton SAUVER.

ATTENTION: il n'y a pas de vérification que des données entrées pourraient être perdues si on appuie sur autre chose que le bouton SAUVER.

Création d'une nouvelle ressource d'un certain type RDF

Choix de la classe

Il y a deux manières. On peut d'abord simplement se baser sur les classes suggérées définies dans la page Web. On sélectionne dans le menu déroulant à proximité du bouton "Créer" l'une des classes pré-définies (les classes FOAF, etc). on appuie sur le bouton "Créer", et le formulaire inféré pour la classe sera affiché.

Vous pouvez prendre également n'importe quelle classe OWL ou RDF Schéma, qui soit auto-hébergée. C'est à dire que l'URI (URL dans ce cas) de la classe permet de de télécharger les triplets qui définissent celle-ci, ou bien toute l'ontologie à laquelle elle appartient. Cela fait partie des bonnes pratiques du web sémantique (cf les 5 étoiles sur la tasse de Tim B.L. ).

Donc vous pouvez coller l'URI d'une classe dans le champ "Créer", Essayez de chercher une classe RDF depuis les moteurs de recherche LOV ou Swoogle, et de le glisser / déposer dans le champ "créer une instance". Par exemple glisser-déposer cette URL pour créer une espèce biologique: http://dbpedia.org/ontology/Species

REMARQUE: par défaut de nombreuses ontologies utiles sont pré-chargées, comme l'ontologie DBPedia (voir "README updading RDF content"  pour en pré-charger plus). Dans le cas où l'ontologie ne serait pas pré-chargée, cela marchera quand, parce que SF va la télécharger. Vous pouvez aussi la charger explicitelent , comme tous les types de données, à partir de son URL, comme expliqué ci-dessus dans Navigation. A noter que, après le téléchargement de l'ontologie, vous ne verrez pas grand'chose, car vous ne verrez typiquement que les triplets au sujet de l'ontologie elle même. Cependant toutes les classes et propriétés sont bien là, comme le montrent les statistiques de téléchargement.

Edition des formulaires

Les champs littéraux (chaînes de caractères) sont entrés en fonction de leur type de données (chaîne simple, nombre, date, ...) avec des champs d'entrée conformes à HTML5. Le bouton "EDIT" à proximité ouvre une fenêtre pour entrer un texte de plusieurs lignes. Cela permet de remplir un billet (post) : http://semantic-forms.cc:9111/create?uri=&uri=http%3A%2F%2Frdfs.org%2Fsioc%2Fns%23Post#form

Les champs de resources (liens sémantiques) sont saisis soit par:

  1. le choix d'une valeur possible par menu déroulant, et qui a été inférée des triplets contenant rdfs:domain, rdfs:range, rdf:type et rdfs:subclassOf,
  2. Coller, ou glisser-déposer, un URI venant d'ailleurs (page web ordinaire, ou application Semantic_forms),
  3. Entrer n'importe quelle chaîne, qui sera ajoutée dans la base de données comme un URI (les espaces seront remplacés par des soulignés; le rdf:type de cette nouvelle URI est défini selon les ontologies dans la base de données (lors de l'enregistrement du formulaire).

L'option 3 crée une nouvelle ressource dans la base de données, qui pourrait déjà exister; il vaut mieux regarder d'abord dans le menu déroulant pour entrer une ressource déjà existante. Ce comportement est similaire à un Wiki ordinaire, où l'on crée un lien (rouge) que l'on peuplera ensuite. Mais ici c'est un "wiki sémantique", où chaque noeud est typé.

Remarquez les champs marqués avec "complétion dbPedia», comme compétences et points d'intérêt. Là, on tape quelques lettres, et c'est complété par les concepts pertinents de Wikipedia (en anglais). La complétion fonctionne sur Firefox, Chrome, Opéra, et Android (mais il se peut que le serveur dbPedia Lookup soit hors service).

Annotation de sites web

Si on "charge" un site web non sémantique (non RDFa ni microdata), il se passe ceci dans semantic_forms:

  • le type foaf:Document lui est attribué
  • un formulaire approprié est ouvert en édition, qui permet de lui ajouter des métadonnées, et notamment des dc:subject via la complétion dbPedia

On a un ainsi une fonctionnalité de type Diigo, mais avec le vaste thésaurus de Wikipedia. On peut dire que ce sont des hyperliens commentés.

Graphe et diagrammes

Les bases de données en graphe (structure mathématique avec des noeuds et des liens) sont à la mode. Justement le Web Sémantique constitue un immense graphe, dont les noeuds sont les URI des resources traitées, et les liens sont représentés par les triplets sujet-propriété-objet.

Cet immense graphe est la réunion de tous les documents RDF (ou Turtle ou JSON-LD) publics (Linked Open Data) ou même privés. Dès qu'un même URI est référencé par deux documents RDF, les graphes sont ainsi connectés.

Bien sûr, cet immense graphe (la partie publique) n'est pas couramment chargé dans une base de données. Mais c'est possible. Ce qu'on fait, plus modestement, dans Semantic_forms est de charger au fur et à mesure de la navigation. On maintient ainsi un graphe pertinent par rapport aux usages. Les (multiples) chemins d'un URI à un autre prennent en compte toutes les sources chargées. Ces chemins sont navigables par des pages de l'application, mais aussi et surtout par programme:

  • requêtes SPARQL
  • algorihmes de graphes

La structure de graphe est plus générale que celles d'arbre et de table. Ce qui signifie que les arbres et les tables peuvent facilement se reformuler en graphes. Et dans l'autre sens, une table peut de manière naturelle être vue comme un graphe.

A partir de l'application Semantic_forms, on peut tracer des diagrammes en appuyant sur les icones au triangle avec 3 ronds. On ne peut (encore) ajouter / enlever des noeuds dans ces diagrammes, voir l'issue: https://github.com/jmvanel/semantic_forms/issues/91

A noter qu'on peut générer un diagramme à partir d'une requête quelconque, dans la page /tools . On peut ainsi confectionner son graphe à volonté, par exemple, mes amis et les amis de mes amis:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

CONSTRUCT {
  <http://jmvanel.free.fr/jmv.rdf#me> foaf:knows ?FRIEND .
  ?FRIEND foaf:familyName ?N1 .
  ?FRIEND foaf:knows ?FF .
  ?FF foaf:familyName ?N2 .
} WHERE {
  GRAPH ?GR {
   <http://jmvanel.free.fr/jmv.rdf#me> foaf:knows ?FRIEND .
  }
  {
    GRAPH ?GR2 {
     { ?FRIEND foaf:familyName ?N1 . }
     UNION { ?FRIEND foaf:knows ?FF . }
    }
  } UNION {
  GRAPH ?GR3 {
     ?FF foaf:familyName ?N2 .
    }
  }
}

Inférences, vous avez dit inférences?

semantic_forms ne fait pas d'inférence a posteriori sur la base SPARQL. Par exemple, lors de la création d'une foaf:Person, semantic_forms n'ajoutera pas un triplet pour dire que cette foaf:Person est aussi un foaf:Agent (ce qui est vrai). Les seules inférences sont celles applquées en mode édition d'un formulaire, afin de proposer des propriétés conformes à la classe demandée (en mode création) et aux classes constatées (en mode re-édition). Voir dans Edition des formulaires les inférences effectuées lors de la génération des formulaires.

NOTE Certaines bases SPARQL, comme BlazeGraph, font automatiquement des inférences simples (RDFS+). Jena TDB, la base SPARQL de semantic_forms n'en fait pas.

Usages spéciaux, trucs et conseils

SF et Wiki

Comme expliqué dans Edition des formulaires, il est possible d'entrer une chaîne quelconque pour un lien RDF (transformée en URL avec le préfixe du serveur suivi de /ldp/). Par la suite , on pourra compléter cet URL sémantique en cliquant dessus, comme dans un Wiki. Mais ici, il s'agit d'un Wiki appuyé sur un réseau sémantique RDF.

Réseau social: discussions

Les classes sioc:Post et sioc:Thread permettent d'entrer des billets et des fils de discussion. Ainsi des forums et des blogs peuvent être construits. On peut attaquer directement avec un billet, et par la suite on peut y répondre via le champ "a répondu" (note: c'est la traduction français "officielle" dans le corps du vocabulaire).

Comme tout ce qui est SF, on ne peut modifier les billets de autres. Si on veut juste réclamer ponctuellement une correction quelque part, il suffit d'appuyer sur le bouton "+" le plus proche; quand l'autre utilisateur aura modifié, on peut alors détruire son entrée.

Réseau social: communautés, vues ciblées

Un frein important à un usage étendu de semantic_forms est qu'on risque d'être envahi par des choses qui ne nous intéressent pas. On a besoin de d'un analogue à la page d'accueil de Facebook. On a besoin de pouvoir commodément afficher plusieurs communautés dans SF. On est dans les données ouvertes, donc le critère d'affichage n'est pas nécessairement "mes amis" à la Facebook. On voudrait avoir une vue centrée sur un concept, qui montre ce qui s'est passé récemment là-dessus. Grâce à la fonctionnalité /history?uri= , c'est justement ce qu'on peut faire. Le bouton avec l'image http://semantic-forms.cc:9112/assets/images/radial_layout.png lance exactement ça. Précisément il montre les URI atteints à partir de là par des chemins RDF de longueur <= 2, triés dans l'ordre historique. On peut voir cela comme un moyen d'expliciter des communautés d'intérêts. On peut se centrer sur n'importe que URI: une entrée de Wikipedia/dbPedia, un projet, une personne, etc. Exemples: Pendant la journée biodiversité à ISWC on a lancé une communauté "biodiversité": /history?uri=http://dbpedia.org/resource/Biodiversity

On peut envisager des tas de communautés centrées sur des sujets techniques, comme le TAL (Traitement Automatique des Langues): /history?uri=http://dbpedia.org/resource/Natural_language_processing

Et tout simplement pour avoir tout ce qui se rattache au développement logiciel: /history?uri=http://dbpedia.org/resource/Computer_programming

Evidemment, il faut avoir suffisamment de liens, et des liens suffisamment sémantiques, pour avoir des vues assez remplies.

Pour accrocher ensemble tous les participants d'une communauté, on a besoin d'un URI "central" par rapport à cette communauté. S'il n'y en existe pas déjà:

  • créer un projet ad-hoc dans vos projets de votre profil foaf:Person
  • ensuite les autres participants vont l'ajouter dans leurs foaf:currentProject

De cette façon plusieurs communautés peuvent cohabiter sans se confondre. On pourrait filtrer aussi sur un foaf:Group ad-hoc.

Pour afficher un tableau de bord centré sur quelque chose, Jazz par exemple:

Fonctionnalités à venir

On peut être encore plus flexible, et potentiellement utiliser une requête SPARQL pour filter ce qu'on veut voir. Ensuite, comme dans /history actuellement, on afficherait dans l'ordre chonologique inverse. On aurait besoin aussi de gérer ses pages d'accueil préférées.

Trucs et astuces, FAQ

  • afficher la liste des instances(membres) d'une classe: utiliser la recherche sans mot de recherche, mais avec une classe dans le chemp classe à côté, par exemple foaf:Person
  • j'ai oublié mon nom d'utilisateur: le retrouver parmi les foaf:OnlineAccount

Divers

Outils

Ce site offre un convertisseur commode entre RDFa, Turtle, etc: http://www.easyrdf.org/converter