Quelques requêtes MySql posées sur Omeka S

Le logiciel Omeka S se montre conçu pour héberger simultanément plusieurs sites web dédiés à la valorisation de documents numérisés (texte, image, son, vidéo), ou bien à l’élaboration de bases de données d’intérêt pour l’histoire (bases de personnes, d’organisations, d’instruments, etc.). Il est possible d’interagir avec une application Omeka S à l’aide de PhpMyAdmin et MySql directement. De telles manipulations rendent parfois possible et rapide des modifications globales. Inutile de préciser que ce genre de manœuvre doit être faite avec précautions, surtout lorsqu’un site se trouve en production et référence un nombre d’items. Il est fortement conseillé en premier lieu de tester les requêtes sur une installation en local, de sauvegarder préalablement les contenus de la base de production. Voici ici les résultats de tests rapides.

  1. Le modèle conceptuel de données
  2. Affichage de contenus
    • 2.1 Afficher les items de la collection « item_set_id = 2 »
    • 2.2 Afficher les éléments de l’item 1
    • 2.3 Afficher en plus le label
    • 2.4 Afficher les champs Date renseignés
    • 2.5 Afficher les items contenant au moins un champs Date renseigné
  3. Modification des contenus
    • 3.1 Ajouter un élément « date » de valeur « 1905 » à l’item 1
    • 3.2 Changer pour l’item 1 la valeur du champs Date « 1905 » en « 1906 »
    • 3.3 Changer tous les champs Date de valeur « 1906 » en valeur « 1906 CA »
    • 3.4 Fabriquer un identifiant
  4. Pour aller plus loin

1. Le modèle conceptuel de données

Le diagramme du modèle entité-association – le MCD (modèle conceptuel de données) pour reprendre la terminologie Merise – peut être aisément rétro-ingénieré avec le logiciel MySQL WorkBench. On obtient alors le schéma suivant :

Une portion du MCD d’Omeka S (2.0.2), avec MySQL Workbench

Les modifications envisagées concernent ici principalement les tables « resource », « item_item_set », « value », « property », « fulltext_search » d’Omeka S. Trois items et une collection sont créés dans une installation fraiche à l’aide de l’interface d’administration classique. Si on s’intéresse au contenu des tables suite à cette création, on a sous phpMyAdmin pour la table « resource » :

Table « resource » : Une collection (id=2) et trois items sont stockés dans la table

Alors que « title » donne le libellé du titre, le type de ressource (item ou collection) est spécifié dans « resource_type ».

Table « item_item_set »

L’appartenance d’un item à une collection est donné par la table « item_item_set ». Les items 1 et 3 de « resource » appartiennent à la collection, l’item 4 de « resource » est sans collection.

Table « value » : valeur des métadonnées

Les métadonnées sont stockées et qualifiées les unes à la suite des autres dans la table « value ». Dans cet exemple, l’item 1 identifié par « resource_id » admet comme éléments : Titre, « Voici un document »; Date, « 2018 », « 2019 »; Description , « Description de mon document ». Le code de la propriété stocké dans « property_id » est verbalisé dans la table « property ».

Table « property » : propriétés de différents vocabulaires.

Dans « property », le champs Dublin Core « Date » est identifié par son id de valeur 7, qui admet un libellé invariable (local_name) et un libellé possible à personaliser (local_name). Bon voilà, pas très compliqué.

2. Affichage de contenus

Maintenant que les données de test sont en place, il devient possible de faire quelques exercices de recherche et d’affichage.

2.1 Afficher les items de la collection « item_set_id = 2 »

SELECT resource.id, resource.title, item_item_set.item_set_id 
FROM resource, item_item_set 
WHERE resource.id = item_item_set.item_id 
AND item_item_set.item_set_id = 2 
Résultats requête 1 : 2 document sont dans la Collection 1

2.2 Afficher les éléments de l’item 1

SELECT value.resource_id, value.property_id, value.value
FROM value
WHERE value.resource_id = 1
Requête 2.1

2.3 Afficher en plus le libellé Dublin Core

SELECT value.resource_id, property.local_name, property.label, value.value
FROM value, property
WHERE value.property_id = property.id
AND value.resource_id = 1
Requête 2.2 : libellé + contenu de l’item 1

2.4 Afficher les champs Date renseignés

2 syntaxes pour les jointures internes.

2.4.1 Syntaxe sans JOIN

SELECT resource.id, resource.title, value.value 
FROM resource, value
WHERE resource.id = value.resource_id 
AND value.property_id = 7

2.4.2 Syntaxe avec JOIN

SELECT resource.id, resource.title, value.value
FROM resource
INNER JOIN value ON resource.id = value.resource_id
WHERE value.property_id = 7

2.5 Afficher les items contenant au moins un champs Date renseigné

SELECT resource.id, resource.title, value.value
FROM resource
JOIN value ON resource.id = value.resource_id
WHERE value.property_id = 7
GROUP BY resource.title

3. Modification des contenus

Une fois qu’une requête MySql est jouée, il convient de mettre à jour l’index du moteur de recherche. Modifiez pour cela dans un premier temps le fichier « local.config.php » selon les indications de ManOnDaMoon dans le forum de discussion d’Omeka S. Puis, dans l’interface admin/paramètres généraux, cochez « Indexer la recherche en texte intégral » et sauvegarder. Cette action lance en tâche de fond « Omeka\Job\IndexFulltextSearch ». L’index ainsi mis à jour est contenu dans la table « fulltext_search ». Le moteur a indexé les nouveautés.

Suivez cette partie du tutoriel à vos risques et périls ! Essayez en dev, procédez à une sauvegarde de la prod, et let’s go.

3.1 Ajouter un élément « date » de valeur « 1905 » à l’item 1

INSERT INTO value (resource_id, property_id, value_resource_id, type, lang, value, uri, is_public) 
VALUES (1, 7, NULL, literal, NULL, 1905, NULL, 1)

3.2 Changer pour l’item 1 la valeur du champs Date « 1905 » en « 1906 »

UPDATE value SET value.value = '1906'
WHERE resource_id = 1
AND property_id = 7
AND value.value = '1905'

3.3 Changer tous les champs Date de valeur « 1906 » en valeur « 1906 CA »

UPDATE value SET value.value = '1906 CA'
WHERE resource_id = 1
AND value.value = '1906'

3.4 Fabriquer un identifiant

Fabriquer un identifiant contenant le préfixe « HP », la « Date » et le terme fixe « ID ». Le stocker dans le champs Dublin Core « Identifiant » (10 dans la table « property »)

INSERT INTO value (resource_id, property_id, value_resource_id, type, lang, value, uri, is_public) 
SELECT resource.id, 10, NULL, 'literal', NULL, 'ID', NULL, 1
FROM resource

4. Pour aller plus loin

Laisser un commentaire