Quelques requêtes MySql avec Omeka S

Il est possible de se servir de MySql pour compter des items avec Omeka S, voire faire différentes opérations d’ordinaire peu recommandées comme modifier la base à l’aide de requêtes. De telles manipulations rendent parfois possible et rapide des modifications. Il est fortement conseillé en premier lieu de tester les requêtes sur une installation en local.

  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

Les modifications envisagées concernent ici principalement les tables “resource”, “item_item_set”, “value”, “property”, “fulltext_search” d’Omeka S. Le diagramme du modèle entité-association – le MCD 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

Trois items et une collection sont créés dans une installation fraiche à l’aide de l’interface d’administration. Si on s’intéresse au contenu des tables suite à cette création, on a sous phpMyAdmin :

Table “resource” : 1 collection (id=2) et 3 items sont stockés dans la même table
Table “item_item_set” : les items 1 et 3 appartiennent à la collection créée, l’item 4 est sans collection
Table “value” : 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 admet comme éléments : Titre, “Voici un document”; Date, “2018”, “2019”; Description , “Description de mon document”;
Table “property” des propriétés de différents vocabulaires. Le champs Date est identifié par l’id 7 et reporté dans “value” sous le numéro “property_id=7”

Maintenant que ces données de test sont en place, il devient possible de faire quelques exercices d’affichage des métadonnées. Des exemples de création et modification sont ensuite proposés.

2. Affichage de contenus

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 label

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 que la 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. 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 indexe 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

  • Mémento de requêtes SQL pour Omeka Classic, 2022 par Jean-Baptiste Pressac : Lien
1 Star2 Stars3 Stars4 Stars5 Stars (Pas encore noté)
Loading...

Laisser un commentaire