Formulaires : vers la sémantique
© 2014-05 Jean-Marc Vanel deductions-software.com - license Creative Commons License by-nc-nd 3.0
[Version de réference de cet article ]
Table
Les formulaires c'est le nerf de la guerre de l'informatique.
Autrefois tout partait de la spécification d'une suite d'"écrans".
Maintenant on le fait en HTML, enfin pas toujours, car on a inventé l'orienté objet. Et une classe orientée objet n'est pas directement isomorphe à un formulaire de l'application.
On peut faire un formulaire en HTML pur, mais les nuances n'y sont pas en HTML (champs obligatoires ou non, validation). On met alors du JavaScript, ou ça retourne au serveur HTTP. Bref ça n'est pas très déclaratif.
A moins que HTML5 apporte quelque chose ?
Toutes les variétés de RAD ( Développement_rapide_d'applications ) utilisent tous des éditeurs / générateurs de formulaires, qui peuvent ou non être confondus avec les éditeurs de modèle de données. Voir une liste des Outils_RAD.
Il y a aussi les générateurs de processus métier (alias BMP, workflow) (Bonita, etc).
Il y a les formulaires en XML via XForms, liés à XML Schema.
Les principaux cadriciels Web comme Ruby on Rails, Play! , Simfony, ou Drupal ont leur façon de créer des formulaires, soit à partir des tables SQL, soit du modèle objet.
Certains cadriciels Web comme Play! ou Simfony sont plus flexibles que les autres en ce qui concerne la liaison entre le stockage et le formulaire.
Dans le monde du Web Sémantique, le plus naturel est de créer un formulaire à partir d'une liste de propriétés RDF.
Si l'on veut ajouter des "nuances", le plus naturel est d'ajouter des propriétés aux champs du formulaire.
C'est ce que fait Fresnel, qui est, plus largement, un vocabulaire pour afficher des données RDF. Par exemple ceci :
:foafPersonDefaultLens rdf:type fresnel:Lens ;
fresnel:classLensDomain foaf:Person ;
fresnel:showProperties ( foaf:name
foaf:surname
foaf:depiction ) .
exprime cela: "ceci s'applique à la classe person de FOAF et c'est une
vue
contenant les 3 propriétés name, surname, depiction
". La
syntaxe
() exprime un ordre, ce qui convient à un formulaire.
De toute façon, Fresnel est un vocabulaire d'affichage, pas directement pour l'entrée de données. Il est cependant réutilisable à cette fin.
Ce projet développe un vocabulaire pour les formulaires, en alignement avec Fresnel pour compatibilité avec les outils existants ou futurs: vocabulary/forms.owl.ttl
Un autre exemple est le composant Data manager GUI dans le cadriciel EulerGUI. A partir d'une instance (URI resource) il affiche tous les triplets directs (ou inverse) existants, et donne la possibilité d'ajouter des litéraux ou des URI, suivant que la propriété est datatype ou objet. DomainApplication est un autre composant générique qui permet de saisir une nouvelle instance d'une classe donnée. Il affiche toutes les propriétés dont le domaine correspond ( domaines inférés aussi pour super-classes ).
Voici un example du composant générique DomainApplication, avec 2 icônes de création d'instance ( personne FOAF et musique de Musical Ontology) , après avoir appuyé sur la première icône. Toutes les propriétés du domaine personne FOAF sont affichées:
Quelques références sur Fresnel :
http://www.w3.org/2005/04/fresnel-info/
Présentation : https://www.lri.fr/~pietriga/2006/11/fresnelISWC06.pdf
http://www.w3.org/2005/04/fresnel-info/manual/
Hélas, après un intérêt entre 2004 et 2008, Fresnel n'a plus été implémenté, sauf récemment comme on va voir plus loin.
De plus, la métaphore optique (lentilles de Fresnel) n'est pas près du sujet.
Enfin, Fresnel ne traite que les problématiques d'affichage, et pas du tout d'édition.
rdfs:label
ou autre propriété suivant le type;
tenir compte de la langue de l'applicationimage, son, vidéo ( utiliser prédicats avec image comme range, ou
le content-type
),
HTML,
tel: , urn:, isbn: , ...
rdfs:range
qui est
une owl:ObjectProperty
(ou une rdf:Property
):
au choix:
rdfs:range
de la propriété );owl:SomeValueFrom
, et autres axiomes ; mais aussi nécessité de configuration spécifique
au formulaire<SUJET> ?P ?V. ?V
?P1 ?V1.
typiquement ?V représente une resource liée seulement à <SUJET>, comme l'adresse postale de quelqu'un;
c'est souvent un noeud anonyme (blank node);
( correspond à la notion d'agrégation en UML, ou en SQL delete en cascade)
il convient de détecter et afficher ces triplets "secondaires", comme le fait VIE
comment ? dans la configuration un prédicat portant sur le prédicat ?P
rdfs:label
Fonc. | Dom.App. | swing-rules3 | VIE | Conjecto | PixelHumain | BigData explorer |
1 | x | x | ||||
2 | x | x | ||||
3.1 | x | |||||
3.2 | x | |||||
3.3 | x | |||||
3.4 | x | |||||
3.5 | x | |||||
4.1 | x | |||||
4.2 | ||||||
4.3 | x | x | ||||
4.4 | ||||||
5 | x | |||||
6 | ||||||
7 | x | |||||
8 | ||||||
9 | x | x | x | |||
10.1 | x | |||||
10.2 | x | |||||
10.3 | x | |||||
10.4 | x | |||||
10.5 | ||||||
11 | x | |||||
13.1 | x | x | ||||
13.2 | ||||||
14 | x | x | ||||
15.1 | x | |||||
15.2 | x | |||||
16 | x | x | ||||
Une recherche avec
semantic web RDF "Forms" field
donne quelques resources:
http://www.swcs2013.org/SWCS-Rutledge-final2.pdf
http://semantic-mediawiki.org/wiki/SMWCon_Fall_2013/OWL_Wiki_Forms_%28OWF%29:_A_Style_Language_that_Generates_Wikis_from_Semantic_Web_Ontologies
http://fr.slideshare.net/Lloyd.Rutledge/smwcon-fall-2013-owl-wiki-forms
https://groups.drupal.org/node/152939
http://mes.github.io/marbles/ a server-side application that formats Semantic Web content for XHTML clients using Fresnel lenses and formats. Colored dots are used to correlate the origin of displayed data with a list of data sources, hence the name.
http://dzineblog.com/2012/01/guide-to-building-semantic-web-forms.html
Semantic Forms in Drupal: Making the Semantic Web Usable ...
https://groups.drupal.org/node/152939
1 juin 2011 - 6 messages - 4 auteurs
Are there any current initiatives for semantic forms in Drupal? ... make it easy for people to use semantic identifiers as values in form fields. .... work the Web application does doesn't need to be SemWeb-y... the RDF just needs ...
Help:SMW extensions - semantic-mediawiki.org
https://semantic-mediawiki.org/.../Help:SMW_extensi...
11 juin 2013 - 1.1 Semantic Forms; 1.2 Semantic Image Input; 1.3 Semantic Forms Inputs ... 2.1 Frequent Pattern Tag Cloud; 2.2 Semantic Drilldown; 2.3 Semantic Web Browser; 2.4 SolrStore ... 5 Storing data via an RDF triplestore ... property helps determine what sort of input will show up for that field in the form.
Guide to Building Semantic Web Forms - DzineBlog.com
dzineblog.com/.../guide-to-building-semantic...
De Jake Rocheleau - Dans 1 977 cercles Google+
18 janv. 2012 - Semantic forms deal with the concept of data-driven web forms and how ... This doesn't work so well on password fields since the placeholder ...
Le plus prometteur est le premier article (à la 10th Extended Semantic Web Conference, ESWC 2013, Montpellier, France, May 27th, 2013), qui commence par "nous décrivons une transformation à partir d'une ontologie OWL vers des données de style Fresnel, et de là vers des wikis sémantiques à base de formulaires" , et intitulé:
From Ontology to Wiki – Generating Cascadable Default
Fresnel Style from Given Ontologies for Creating
Semantic Wiki Interfaces
Lloyd Rutledge
OWF utilise SPARQL 1.1 à la fois pour accéder aux ontologies, et pour inférer et écrire les spécifications Fresnel dans la base SPARQL.
Donc cette partie est indépendante de Semantic Media Wiki (un gros pâté de PHP et SQL).
http://is.cs.ou.nl/OWF/index.php5/Main_Page
http://is.cs.ou.nl/OWF/index.php5/OWL_Wiki_Forms_v0.2_installation
Quand on regarde là-dedans, il y a surtout les 444 lignes de SpecialOWLwikiForms.php , et là -dedans la partie "utile" est la
function ontos2DefFresnel ( $inOntosStr )
Et, dans cette fonction, 2 requêtes SPARQL, une pour les propriétés avec un ou plusieurs domaines affirmés ou or inferrés, et une pour les autres propriétés.
Voici la 1ère, brute en PHP avec insertion SPARQL:
endpointUpd ( <<<EOT INSERT { ?lensuri rdf:type fresnel:Lens ; fresnel:classLensDomain ?domain ; fresnel:showProperties ?prop . } WHERE { ?prop a rdf:Property ; rdfs:domain ?domain . FILTER ( ! bound(?subDomain) ) FILTER ( ! regex(str( ?prop ), "http://www.w3.org/1999/02/22-rdf-syntax-ns#" ) ) FILTER ( ! regex(str( ?prop ), "http://www.w3.org/2000/01/rdf-schema#" ) ) FILTER ( ! regex(str( ?prop ), "http://www.w3.org/2002/07/owl#" ) ) FILTER ( ! regex(str( ?prop ), "http://www.w3.org/2004/09/fresnel#" ) ) BIND(IRI(CONCAT(" EOT . WIKIURI . 'defaultLens", ' . <<<EOT REPLACE(str(?domain), "[^A-Za-z0-9]", "", "i" ) )) AS ?lensuri) OPTIONAL { ?prop rdfs:domain ?subDomain . ?subDomain rdfs:subClassOf ?domain . FILTER ( ! sameterm ( ?domain , ?subDomain) ) } } EOT );
Simple et parfaitement réutilisable !
Cependant ça ne va pas très loin, en fait ça réutilise le raisonneur de Fuseki qui s'appelle :
<http://jena.hpl.hp.com/2003/OWLFBRuleReasoner> .
via cette confiuguration:
<#OWF> a ja:RDFDataset ; rdfs:label "OWF" ; ja:defaultGraph [ rdfs:label "OWF" ; ja:reasoner <#Reasoner> ] . <#Reasoner> ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner> .
C'est quelque chose qui n'est pas très bien documenté sur les sites Jena :
http://jena.apache.org/documentation/serving_data/#fuseki-configuration-file
http://jena.apache.org/documentation/assembler/index.html
http://jena.apache.org/documentation/inference/#OWLconfiguration
A VOIR:
Est-ce que Jena TDB et l'infrastructure Jena pour inférence peuvent travailler ensemble ?
http://svn.code.sf.net/p/eulergui/code/trunk/eulergui/html/semantic_based_apps_review.html