FAQ
Pourquoi gapline est plus rapide que gtfs-validator ?
Section intitulée « Pourquoi gapline est plus rapide que gtfs-validator ? »Trois raisons :
- Pas de démarrage JVM à froid. gapline est un binaire Rust statique.
gtfs-validatorpaie une à deux secondes de démarrage JVM à chaque run, ce qui domine les workloads sur petits flux. - Parallélisme en mémoire. La validation exécute les règles en parallèle sur les lignes via rayon. Les règles qui peuvent travailler indépendamment sur différents fichiers ou plages de lignes le font sans locks.
- Layout de données contigu. La représentation du flux est basée sur
Vecavec des index inverses construits une fois au chargement. Pas de graphe d’objets, pas d’allocation heap par ligne pendant la validation.
Sur un flux réel de taille moyenne, cela donne 7–9× plus rapide de bout en bout. Sur un petit flux (< 1 Mo), le coût de démarrage JVM pousse le ratio vers 90×.
Puis-je utiliser gapline sur GTFS-Realtime ?
Section intitulée « Puis-je utiliser gapline sur GTFS-Realtime ? »Non. gapline cible GTFS Schedule uniquement — les horaires statiques. GTFS-Realtime est une spec protobuf séparée (mises à jour de trajets, positions véhicule, alertes) et est hors scope.
Puis-je ajouter des règles de validation custom ?
Section intitulée « Puis-je ajouter des règles de validation custom ? »Pas sans fork aujourd’hui. Les règles sont compilées dans le binaire ; il n’y a pas d’interface plugin ni de hook scripting. Si vous avez une règle qui a sa place dans la suite par défaut, ouvrez une issue sur GitHub — la plupart des règles actuelles ont atterri ainsi.
Pour des vérifications ad-hoc, un gapline read <target> --where "..." --format json piped dans jq couvre la majorité des one-offs.
Mon flux échoue en validation structurelle. Qu’est-ce que ça veut dire ?
Section intitulée « Mon flux échoue en validation structurelle. Qu’est-ce que ça veut dire ? »La validation structurelle est le premier stage. Elle vérifie que l’archive contient les fichiers requis, qu’ils parsent en CSV, et que les colonnes requises sont là. Les stages suivants (champs, références, sémantique) ne tournent pas de façon pertinente si le structurel échoue — corrigez-le d’abord.
Erreurs structurelles courantes : un fichier requis manquant (stops.txt, routes.txt, trips.txt, stop_times.txt), un fichier non UTF-8, une ligne avec moins de colonnes que l’en-tête.
Y a-t-il un binaire Windows ?
Section intitulée « Y a-t-il un binaire Windows ? »Oui. Dans PowerShell :
Invoke-WebRequest https://gapline.dev/install.ps1 | Invoke-ExpressionL’installeur dépose gapline.exe dans %USERPROFILE%\.local\bin et met à jour le PATH utilisateur. Voir installation.
gapline envoie-t-il de la télémétrie ?
Section intitulée « gapline envoie-t-il de la télémétrie ? »Non. gapline est 100% hors-ligne. Il ne contacte aucun service, ne lit/écrit rien en dehors des fichiers passés en ligne de commande et de la chaîne de config (./gapline.toml, ~/.config/gapline/config.toml).
Si un firewall ou un sandbox bloque le trafic sortant, gapline fonctionne exactement comme sur une machine connectée.
gapline marche-t-il sur les flux non UTF-8 ?
Section intitulée « gapline marche-t-il sur les flux non UTF-8 ? »Non. GTFS impose UTF-8 ; gapline rejette les fichiers non UTF-8 avec un message clair (quel fichier, quel offset). Si un opérateur livre en Latin-1 ou Windows-1252, transcodez avec iconv avant. Voir corriger les problèmes courants.
Quelle taille de flux gapline peut-il gérer ?
Section intitulée « Quelle taille de flux gapline peut-il gérer ? »Les tests réels tournent sur des flux de plusieurs millions de lignes stop_times sans souci. Le bottleneck principal est la RAM disponible — le flux est en mémoire — mais la représentation est compacte (quelques mégaoctets pour un opérateur typique).
Si vous heurtez un plafond mémoire sur un très gros flux, découpez l’archive par opérateur ou par période avant la validation.
À quoi sert le format .gl ?
Section intitulée « À quoi sert le format .gl ? »Les fichiers .gl chaînent plusieurs commandes gapline en un script reproductible unique. Le flux est chargé une fois, chaque commande agit sur la copie en mémoire, et une seule écriture atomique en fin persiste le résultat. C’est l’outil pour les nettoyages hebdomadaires, les patches pilotés par la CI, ou tout ce que vous voulez versionner.
Voir écrire des scripts .gl pour un parcours et syntaxe .gl pour la grammaire.
Pourquoi delete me prompte toujours ?
Section intitulée « Pourquoi delete me prompte toujours ? »Parce qu’un delete sur un flux relationnel a une zone d’impact plus large que ne le suggère la ligne de commande — retirer un arrêt peut cascader vers des centaines de lignes stop_times. Le prompt montre l’aperçu complet avant application. Passez --confirm en script, mais prévisualisez le match avec gapline read d’abord.
Puis-je faire tourner gapline dans Docker ?
Section intitulée « Puis-je faire tourner gapline dans Docker ? »Oui. Le script Linux marche dans n’importe quelle image glibc. Exemple minimal :
FROM debian:stable-slimRUN apt-get update && apt-get install -y curl ca-certificates \ && curl -fsSL https://gapline.dev/install.sh | sh -s -- --version 1.0.1 \ && ln -s /root/.local/bin/gapline /usr/local/bin/gaplineENTRYPOINT ["gapline"]Pour Alpine / musl, compilez depuis les sources — le binaire du script est glibc aujourd’hui.
Comment trouver l’ID d’une règle à désactiver ?
Section intitulée « Comment trouver l’ID d’une règle à désactiver ? »gapline rules listgapline rules list --severity warninggapline rules list | grep -i speedPassez l’ID à --disable-rule :
gapline validate -f gtfs.zip --disable-rule speed_validationL’autocomplétion shell suggère aussi les IDs enregistrés — voir autocomplétion shell.
Voir aussi
Section intitulée « Voir aussi »- Introduction — ce qu’est gapline et pourquoi.
- Quickstart — première validation en cinq minutes.
- Concepts — idées de fond derrière le CLI.