Accueil > Plugins personnalisés YASGUI
Pour savoir comment intégrer Sparnatural avec YasQE et YasR, veuillez consulter la documentation sur l’intégration JavaScript.
Plugins personnalisés YASGUI
Strictement parlant, la portée de Sparnatural se limite à la sortie de la requête SPARQL générée par le composant. C’est tout. Il n’est pas responsable d’afficher la requête sur la page, de l’envoyer/l’exécuter, ou d’afficher les résultats de la requête. Ces 3 étapes relèvent généralement de la portée de YasGUI, et c’est pourquoi Sparnatural est souvent utilisé en combinaison avec cet outil.
C’est pourquoi certains plugins spécifiques de YasGUI sont fournis pour être utilisés en conjonction avec Sparnatural.
Plugin “TableX” : masquer l’URI derrière les libellés
Ce qu’il fait
Il y a une fonctionnalité spécifique de Sparnatural qui nécessite une intégration dédiée avec YasGUI : l’annotation core:defaultLabelProperty
de la configuration OWL (voir la référence de configuration OWL), ou l’annotation équivalente dash:propertyRole
avec la valeur dash:LabelRole
de la configuration SHACL (voir la référence de configuration SHACL). Ces annotations entraîneront l’insertion d’une nouvelle colonne dans le jeu de résultats, avec un nom de colonne défini sur xxx_label
, où xxx
est le nom de la colonne d’origine ayant une propriété de libellé par défaut (par exemple ?Person_1
et ?Person_1_label
).
Il s’agit d’un schéma utile à détecter dans le jeu de résultats car cela permet de masquer l’URI derrière le libellé correspondant, générant ainsi des liens cliquables pour l’utilisateur.
Au lieu de ceci :
Vous obtiendriez ceci :
Comment l’utiliser
Ce plugin est déjà utilisé dans la page du tutoriel “Hello Sparnatural” (voir le guide de démarrage), vous pouvez donc voir comment il est intégré.
Pour le déployer :
- Téléchargez le javascript des plugins depuis la section de publication du projet Github sparnatural-yasgui-plugins
- Chargez-le dans votre page web avec la balise
<script>
- Initialisez YasR avec ce plugin pour qu’il remplace le plugin Table par défaut de YasR :
Yasr.registerPlugin("TableX",SparnaturalYasguiPlugins.TableX);
delete Yasr.plugins['table'];
// see below
// Yasr.plugins.LabelledUriTable.defaults.uriHrefAdapter = function(uri) { }
// Yasr.plugins.LabelledUriTable.defaults.bindingSetAdapter = function(bindingSet) { }
const yasr = new Yasr(document.getElementById("yasr"), {
pluginOrder: ["TableX", "response"],
defaultPlugin: "TableX"
});
Adaptation de l’URL du lien
Parfois, l’URI des entités n’est pas directement déréférençable et cliquer dessus conduirait à une erreur 404. Pour cette raison, le plugin TableX peut être personnalisé avec des fonctions qui peuvent prétraiter le résultat avant qu’il ne soit imprimé. Les 2 fonctions sont uriHrefAdapter
et bindingSetAdapter
.
La fonction uriHrefAdapter
vous permet de changer une URI d’entrée en une autre URL de sortie. Elle est configurée comme suit :
Yasr.plugins.LabelledUriTable.defaults.uriHrefAdapter = function(uri) {
console.log("adapter called on uri "+uri);
// return anything you like that will used instead of the input uri
return uri;
};
Elle est appelée pour chaque URI dans l’ensemble de résultats, dans chaque colonne. Par exemple, elle peut être utilisée pour modifier l’URI DBPedia d’entrée vers l’article Wikipedia correspondant :
Yasr.plugins.LabelledUriTable.defaults.uriHrefAdapter = function(uri) {
if(uri.startsWith("http://fr.dbpedia.org/resource/")) {
return "http://fr.wikipedia.org/wiki/" + uri.substring("http://fr.dbpedia.org/resource/".length);
} else {
return uri;
}
};
La fonction bindingSetAdapter
vous permet de traiter un ensemble de liaisons entier, c’est-à-dire une ligne entière dans le tableau de résultats, y compris les valeurs littérales. Elle est configurée comme suit :
Yasr.plugins.LabelledUriTable.defaults.bindingSetAdapter = function(bindingSet) {
console.log("binding set adapter called on "+bindingSet);
return bindingSet;
};
Par exemple, elle peut être utilisée pour générer un lien cliquable à partir d’une valeur littérale dans l’ensemble de liaisons :
Yasr.plugins.LabelledUriTable.defaults.bindingSetAdapter = function(bindingSet) {
var newBindingSet = {};
for (var key in bindingSet) {
// if we are on a column starting with "code"...
if(key.startsWith("code")) {
// then insert a new value that is a URI based on the code literal value
newBindingSet[key] = {
type: "uri",
value: "http://fake.uri/"+bindingSet[key].value
};
// and set the code as the "xxx_label" column so that it is picked up
// as a label to display
newBindingSet[key+"_label"] = bindingSet[key];
} else {
// default, don't change anything
newBindingSet[key] = bindingSet[key];
}
}
return newBindingSet;
};