Quelques requêtes MySql avec Omeka S

Il est d’ordinaire peu recommandé de modifier la base d’un gestionnaire de contenu à l’aide de requêtes MySql. Cependant, cela rend parfois possible et rapide des manipulations inhabituelles, qui auraient été “galère” voire impossible autrement. Il convient en premier lieu de tester les requêtes sur une installation en local,

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.

1. Affichage de contenus

1.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

1.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

1.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

1.4 Afficher les champs Date renseignés

2 syntaxes pour les jointures internes. 1.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

1.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

1.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

2. Modification de 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.

2.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)

2.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'

2.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'

2.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
1 Star2 Stars3 Stars4 Stars5 Stars (Pas encore noté)
Loading...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *