Clinique de dépannage des schémas¶
Entraînez-vous à diagnostiquer des erreurs de schéma avec la ligne de commande et l'API Python. Chaque exercice part d'un fichier volontairement altéré : vous lisez les erreurs, puis vous corrigez le fichier.
Note
Installez ddi-l en mode éditable (pip install -e .) pour que les imports de modules fonctionnent.
1. Provoquer un échec de validation¶
- Exécutez
mkdir -p clinicpour créer un espace de travail qui isole l'instance altérée des exemples sources. - Copiez
examples/Quality_of_Life.xmlversclinic/broken-instance.xml. - Supprimez un attribut obligatoire (par exemple
versionsur unStudyUnit) depuis votre éditeur. - Exécutez
ddi validate clinic/broken-instance.xmlpour lister chaque anomalie avec son message, sa ligne et son XPath. Ajoutez--format jsonpour obtenir un tableau JSON. - Notez l'XPath et le message associés au nœud fautif.
2. Reproduire l'erreur par programmation¶
-
Lancez une session Python et validez le même fichier avec le chargeur de schéma. En passant
raise_error=False, vous récupérez toute la liste d'erreurs au lieu de déclencher une exception dès la première : -
Comparez la sortie à la structure JSON de la CLI. Les deux surfaces exposent la même métadonnée d'erreur pour choisir l'approche la mieux adaptée à vos outils.
3. Relier les constats aux règles de lint¶
- Consultez
docs/validation.mdpour identifier les règles de lint capables de détecter des erreurs similaires (par exemple, identifiants d'agence manquants). - Ajoutez ces règles à votre profil de lint en appelant
configure_lint()dans une session Python ou en éditant le fichier de profil de l'équipe. -
Dans la même session Python, exécutez
run_profilesur l'instance altérée pour vérifier que l'ensemble de règles signale l'erreur avant l'échec de validation :from ddi_l.io import read from ddi_l.lint import DDI_PROFILE_DEFAULT, configure_lint, run_profile configure_lint() # resserrez éventuellement les agences, citations, etc. document = read("clinic/broken-instance.xml") result = run_profile(document, DDI_PROFILE_DEFAULT) for finding in result.lint_findings: print(finding.rule_id, finding.message)
4. Établir une check-list de remédiation¶
- Vérifiez que le préfixe d'espace de noms du nœud en erreur est enregistré afin que les recherches de schéma retrouvent correctement l'élément.
- Restaurez les attributs obligatoires et relancez
ddi validatejusqu'à obtenirDocument is valid.. - Conservez des exemples représentatifs de l'erreur et de sa correction dans le guide d'exploitation de votre équipe pour accélérer la résolution des incidents futurs.