|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre émérite
![]() Ingénieur Inscription : janvier 2009 Messages : 494 ![]() |
Bonjour,
Tout d'abord, je précise que je me lance dans l'écriture de schémas XML aussi je ne suis pas encore très à l'aise, ni sur d'utiliser les bons termes à la suite. N'hésitez pas à me corriger si besoin. Le schéma que j'ai écrit s'applique à des fichiers XML qui décrivent des modèles de données. On y décrit des objets géographiques et notamment leurs propriétés/attributs (élément <field> à la suite - je vous épargne le schéma dans sa totalité, ce n'est à priori pas utile). Code :
Code :
Dans le XML, les types de certains éléments peuvent dépendre du contenu (la partie "texte") d'un autre élément : val, default dépendent du contenu de type (l'élément de nom type). Peut-être les fichiers XML correspondants ont-ils été, à l'origine, mal conçus/pensés mais ils sont utilisés depuis un bon bout de temps et par de nombreuses applications : il n'est guère envisageable d'en changer, sauf à reprendre toutes les applications les utilisant ... Comment rendre "plus strict" (et est-ce même possible ?) le schéma pour que, par exemple, quand <type> contient "shrt" (entier sur 2 octets), un élément <val> contenant le texte "abcd" fasse couiner le validateur utilisant le schéma (et n'accepte que des valeurs de "-32768" à "32767") ? Quelquechose qui marchera, à coup sur, c'est de prévoir autant de type pour <field> qu'il y a de possibilités pour le contenu/texte de <type> et, dans l'élément parent, utiliser un "choice" mais j'ai ... 15 types différents ... Est-ce qu'il faut "jongler" avec de nombreuses déclarations de types (simple et/ou complexe) et d'éléments (les "all", "sequence", "choice", etc... je n'ai pas encore en tête toutes les possibilités) ou y a-t-il un "mécanisme" déjà prévu qui répondrait à mon problème ? Merci d'avance pour vos réponses |
||||
|
|
00
|
|
|
#2 | |
![]() ![]() |
Non. Il faut le faire gérer par l'application utilisatrice. Pas par le validateur XSD.
Les connaisseurs aiment dire que "la validation s'occupe de valider la grammaire du format, pas sa sémantique." Les valeurs possibles que peut prendre un short, c'est une question de sémantique, pas de grammaire. Citation:
Et de toute façon, XSD n'est pas capable d'une précision telle que demandée, quels que soit les choix pris. |
|
|
|
00
|
|
|
#3 | ||||
|
Membre émérite
![]() Ingénieur Inscription : janvier 2009 Messages : 494 ![]() |
Merci thelvin pour ta réponse. Voici ce que ça m'inspire (n'oublie pas que je débute dans ce domaine; ce sont des réactions de novice en la matière)
Citation:
Si la validation d'un XML via un schéma ne s'occupait pas des types des éléments (simples) et des attributs, ça perdrait beaucoup de son intérêt. Question format, une "digestion" brutale via une bibliothèque façon DOM me dirait si, oui ou non, le XML est bien formé. Resterait à s'occuper des inclusions possibles des éléments entre eux et de la cardinalité. Là, pour mon exemple, si une validation via un schéma ne me fait pas "tout" ("bon formattage", tags, inclusions, cardinalités, attributs, types), je laisserai carrément tomber. En Python, ça devrait me prende moins de lignes de code que de lignes dans le schéma, et ce serait tout aussi (voire plus) maintenable dans la mesure où ça n'évolue qu'exceptionnellement. Passer par des schémas c'était aussi une façon de "m'y mettre" et de pouvoir généraliser cette approche pour d'autres XML. Citation:
|
||||
|
|
00
|
|
|
#4 | ||||
|
Membre émérite
![]() Ingénieur Inscription : janvier 2009 Messages : 494 ![]() |
(re) Bonjour
Ce n'est pas du tout un "up" mais je pense que j'étais un peu à côté de la plaque en lisant la réponse de thelvin et en y répondant (j'avais prévenu, je débute et il faut encore me mettre les points sur les 'i' dans ce domaine). J'ai cru que les conseils de thelvin étaient plutôt à considérer comme des "bonnes pratiques". Mais pas comme des impossibilités. J'ai continué mes tests avec l'espoir d'y arriver (la fameuse chance du débutant) en passant, par des "group", des "union", etc... Voilà à quoi j'étais arrivé (le schéma n'est d'aucune utilité, sauf de valider (ou pas ...) l'approche) : Code :
Code :
"The content model is not determinist" : je pense que ce sont les définitions de <val>, et dans le groupe "specifique_entier", et dans le groupe "specifique_chaine", qui posent problème. En y réfléchissant, comment xmllint pourrait-il valider un XML où il trouverait un élément <val>12abcd</val>, non accompagné d'un élément <unite> ? chaine valide ? entier erroné ? J'en conclus (arrétez-moi si besoin) que, quels que soient les moyens détournés (passage par des types, des groupes, etc..., des combinaisons de tout ça) que l'on pourrait utiliser, on ne pourra faire valider deux mêmes valeurs de tags quand on les définit avec des types différents. J'en conclus également que des XML, même bien formés (jusque là on cause seulement "chaine de caractères"), peuvent ne pas être "validables" via un schéma. Y réfléchir à deux fois quand on définit la "structure" de ces fichiers ! |
||||
|
|
00
|
|
|
#5 | |||||||
![]() ![]() |
Citation:
Corollaire : je m'en sers donc aussi peu que possible, et je suis loin d'être un expert. Mais je sais pourquoi je ne m'en sers pas, et je peux toujours transmettre ce savoir-là. Citation:
Citation:
Mais cela : - est peu pratique, comme tout le reste de XSD - nécessite de faire évoluer les fichiers XML, pour utiliser l'attribut xsi:type au lieu de l'élément typedef, ce qui n'est pas forcément possible ou souhaitable. Citation:
Mais là je parlais d'impossibilité pure et simple, oui. Citation:
Ce n'est pas quelque chose d'évident, ça aurait pu se faire autrement. Mais ça s'est fait comme ça. Ça a aussi des avantages, et beaucoup de logique, ne nous y trompons pas. Citation:
(Ou alors attendre quelqu'un de plus habitué, ça marche aussi.) Citation:
Ce n'est pas qu'une histoire de validation, il y a aussi les questions de sélections, associations, extensibilité, fragmentation en plusieurs fichiers... Plein de choses peuvent être améliorées si on y pense dès le début. Au fond c'est pareil pour tout. |
|||||||
|
|
00
|
|
|
#6 | ||
|
Membre chevronné
![]() Inscription : octobre 2011 Messages : 412 ![]() |
Boujour, il me semble qu'il faut élaborer un peu de tous les côtes de choses.
[1] w3c schéma v1.0 s'etait fait dans une atmosphère de compromise étendue. Il est très vite reconnu qu'il y a des fonctionalités bien besoin naturellement qui font défauts. C'est pour ça wxsl n'a jamais monopolisé, quoique assez dominant grâce aux nombreux d'utilités développées y dépendaient, dans le domaine de valider les documents xml. [2] Dans les fonctionnalités souvent recherchées regroupées sous le terme de "co-constraints", le langage est considéré comme beaucoup moins puissant que Schematron et Relaxng, et il laisse beaucoup à désirer. [3] La condition recherchée sur des éléments est hors de la frontière d'applicabilité de version 1.0. [4] Pourtant je veux aussi d'apporter quelque chose de positive. Le schéma version 1.1 est maintenant en statue de "proposed recommendation" en janvier 2012 incarne la leçon de Schematron et supporte xsd:assert élément. [4.1] Avec v1.1, cela peut paraître comme ça. (Je ne m'occupe pas trop de détail et la implémentation de xpath de "test" n'est certainement pas unque, elle est seulement à titre d'exemple.) Code :
|
||
|
|
20
|
|
|
#7 | |||||||
|
Membre émérite
![]() Ingénieur Inscription : janvier 2009 Messages : 494 ![]() |
Bonjour,
Citation:
Code :
Code :
Code :
<xsd:element name="unite" type="xsd:string" minOccurs="0"/>
Code :
Enfin, bref, la "bête" est chatouilleuse (problème général ou spécifique xmllint ?). En tout cas, difficile de bâtir une stratégie sur ce principe si on n'a pas prévu, à la base, des éléments radicalement différents. Merci pour vos réponses. Je regarderai plus tard dans le détail le lien vers la FAQ et le schéma de tsuji mais là "faut que j'avance". Il y a de grande chance que ça se termine, à court terme, par une validation "cool" (xsd:string pour les <val> et <default>, j'ai déjà le schéma), un réarrangement du XML avec une "remontée" de l'élément <type> pour avoir des parties bien distinctes (par applicatif - ça doit aussi pouvoir se faire via XSLT mais, question nouveautés, ça commence à faire beaucoup) et une revalidation plus musclée (le schéma "musclé" correspondra, peut-être, à une nouvelle version des modèles de données, à voir) @thelvin : ça ne va pas dans le sens de tes conseils mais c'est dû au contexte :
|
|||||||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com