Cette note d'architecture décrit la structure du système et son fonctionnement global.
| version | date | changements |
|---|---|---|
| 1.0 | 23/02/2024 | v. initiale |
| 1.1 | 11/02/2025 | modif scripts Extraction_Donnees |
Lorsqu'une requête est envoyée au serveur, celui-ci remonte le chemin de l'url. Si l'on a http://www.serveur.fr/makki/lexique?coverage=Nord+du+Liban, et que le dossier makki est là où se trouvent les fichiers du site, le serveur s'arrête là à la lecture de l'url car le fichier .htaccess définit une règle de réécriture qui renvoie toute requête lui parvenant au script php index.php.
Ce script récupère les principales informations de configuration de config et instancie un objet de la classe RequestHandler, qui effectue la majeure partie du travail et coordonne tout le traitement de la requête.
C'est ensuite le RequestParser qui s'occupe de découper l'url :
/lexique/bladonne alors{'collection' : 'lexique', 'target' : 'bla'}/fr/lexique?coverage=Tripolidonne{'collection' : 'lexique', 'lang' : 'fr', 'query' : {'coverage' : 'Tripoli'}}/images/logo.pngdonne{'collection' : 'images', 'target' : 'logo.png'}
Et ainsi de suite...
L'utilisateur est ensuite authentifié si un cookie de session est fourni, notamment en s'appuyant sur l'implémentation de signature, vérification, chiffrement et déchiffrement de tokens.
L'étape suivante est la négociation de langue : définir un ordre de priorité des langues disponibles en fonction des informations de l'utilisateur. L'idée est la suivante :
- On récupère dans la base de données les langues d'interface disponibles
- Si une langue est précisée dans l'url et qu'elle est disponible, on la considère comme étant la plus importante
- Les langues définies à travers l'en-tête HTTP Accept-Language et disponibles sont classées selon l'ordre défini par le navigateur (grâce au coefficient q)
- Toutes les autres langues disponibles sont ensuite ajoutées, avec la plus faible priorité.
Une fois cela fait, on passe au traitement de la requête proprement dit. Le système gère trois méthodes HTTP :
- GET, qui permet de récupérer des informations du serveur sous la forme de documents (on parle de "représentation de ressource") ; il peut s'agir d'images, de scripts, d'html, de json, de xml... Le type de contenu (dit aussi type MIME, et défini dans la réponse par l'en-tête HTTP Content-Type) est défini de deux manières possibles : si la
collectionestimages,scripts,stylesoufonts, il s'agit d'une ressource visuelle ou interactive, on détermine le type par rapport au fichier ciblé. Autrement, le type est défini via l'en-tête HTTP Accept. - POST, qui permet de transférer des données au serveur, soit pour se connecter, soit pour alimenter la base de données (contenu, traductions, etc.)
- DELETE, qui supprime des données du serveur.
DELETE nécessite obligatoirement d'être authentifié, ce qui est aussi le cas de POST dans la majorité des cas (excepté l'authentification elle-même, évidemment).
Le système s'occupe après de récupérer ou de verser les données nécessaires depuis ou vers la base de données à travers DB. Si des fichiers sont à télécharger, ils sont temporairement stockés par FileUploader dans /uploads/<id_utilisateur> puis supprimés. Enfin, si une représentation doit être générée dynamiquement, cela se fait à travers le sérialiseur correspondant au type demandé (association définie dans mimes.json).
index.php envoit ensuite les en-tête de réponse nécessaires à partir du RequestHandler puis envoie le corps généré.
---
title: Fonctionnement
---
flowchart LR
index[index.php]
RequestHandler
RequestParser
Serializer
DB[(DB)]
JsonWebProcess
FileUploader
JWT -.->|isa| JsonWebProcess
JWS -.->|isa| JsonWebProcess
JWE -.->|isa| JsonWebProcess
HTMLSerializer -.->|isa| Serializer
TEISerializer -.->|isa| Serializer
JSONSerializer -.->|isa| Serializer
RDFSerializer -.->|isa| Serializer
TTLSerializer -.->|isa| Serializer
index -->|"Lance"| RequestHandler
HTMLSerializer -->|"Récupère les traductions" | DB
RequestHandler -->|"Génère la représentation de ressource"| Serializer
RequestHandler -->|"Découpe l'URL, les queries"| RequestParser
RequestHandler -->|"Récupère les langues, les données"| DB
RequestHandler -->|"Signe les tokens"| JWS
RequestHandler -->|"Chiffre les tokens"| JWE
RequestHandler -->|"Met en forme les tokens"| JWT
RequestHandler -->|"Télécharge les fichiers temporaires"| FileUploader
Seuls les dossiers et fichiers directement impliqués dans le fonctionnement du système (en incluant l'extraction et pré-traitement des données) seront notés ici. Le présent fichier, .gitignore et consorts ne sont pas inclus.
| Description | |
|---|---|
.htaccess |
Permet de définir index.php comme unique point d'entrée à partir de ce dossier. |
index.php |
Point d'entrée du système. Récupère la configuration et lance le traitement de la requête utilisateur. |
| api | Dossier contenant les fichiers PHP pour le traitement des requêtes, la génération des documents de sortie, l'interaction avec la base de données et la sécurisation des échanges. |
| config | Contient les différents fichiers de configuration du système. |
| html | Contient les ressources nécessaires à la génération des sorties, comme les patrons html, les feuilles de style, les scripts et les polices d'écriture. |
| traductions | Contient les fichiers de traduction du site. |
| extract_data | Scripts python destinés à extraire les donneés des fichiers .docx du lexique pour une conversion en fichier RDF. Ces scripts sont contenus dans un fichier Google Colab pour une utilisation, obligatoirement externe, plus simple pour les administrateurs. |
| uploads | (à créer, voir la note de portabilité) Dossier accueillant des sous-dossiers pour chaque administrateur, stockant temporairement les fichiers téléversés. |
| secure | (à créer, voir la note de portabilité) Dossier accueillant les fichiers de clés pour le chiffrement, déchiffrement et signature des tokens. |
| Description | |
|---|---|
handler.php |
Coordonne le traitement des requêtes en mettant en oeuvre les différentes étapes de traitement. |
parser.php |
Met à disposition des fonctions permettant d'extraire les informations des URI, des queries, et des headers Accept et Accept-Language. |
db.php |
Permet d'interagir avec la base de données. |
jwt.php |
Introduit des classes permettant de chiffrer, déchiffrer et signer des JSON Web Tokens, ainsi que de générer les clés nécessaires. |
upload.php |
Classe permettant de gérer l'upload de fichiers. |
tools.php |
Fichier fourre-tout permettant de stocker des fonctions diverses. |
composer.json |
Fichier listant les dépendances du projet. Utilisé par Composer pour installer ces dépendances. |
| serializers | Contient les classes de génération des documents de sortie. |
| simple_html_dom | Dépendance externe indisponible avec Composer, et permettant de lire et modifier du HTML. |
| Description | |
|---|---|
serializer.php |
Définit la classe abstraite pour tous les sérialiseurs (et donc un cadre commun). |
*.php |
Permet de générer les sorties dans différents formats (en fonction de leur type MIME). |
| Description | |
|---|---|
db.json |
(à créer, voir la note de portabilité) Permet de configurer l'accès à la base de données. |
db.sql |
Script permettant de mettre en place la base de données à la première utilisation. |
headers.json |
Définit les headers HTTP par défaut, à inclure dans chaque requête. |
mimes.json |
Définit les types mimes acceptés pour les sorties, et les sérialiseurs associés. |
pages.json |
Permet d'associer un patron HTML à une collection (premier élément de l'URI si pas de langue spécifiée). |
prefixes.ttl |
Préfixes RDF à inclure dans chaque requête au TripleStore. |
server.txt |
(à créer, voir la note de portabilité) Permet au système de connaître l'URL de base, sans le path. Cela est particulièrement nécessaire dans le cas où le site se trouve dans un sous-dossier de public_html. |
| Description | |
|---|---|
Extraction_de_donnees.ipynb |
Fichier Python Notebook (Google Colab) contenant les scripts permettant de convertir un fichier docx en un fichier JSON, puis un fichier JSON en un fichier rdf importable. |
| Description | |
|---|---|
*.html |
Patrons de page HTML. |
| fonts | Polices d'écritures du site. |
| images | Images du site. |
| scripts | Scripts Javascript. |
| styles | Feuilles de style CSS. |