Bonjour,
Je vais essayer d’être clair, car depuis le temps que je me prends la tête sur ce problème, je ne suis plus sur de grand chose....
Voila j'ai un programme java, tout ce qu'il y a de plus simple, pour valider un fichier XML à partir d'un XSD. Ce programme marche très bien pour ce que je lui demande, mais voila, j'ai voulu définir un nouveau type dans mon XSD pour être mon permissif dont voici la définition dans mon fichier XSD (je ne pense pas m’être trop trompé, c'est assez simple ....)
Le problème c'est que quand je veux valider mon XML une SaxException remonte en me disant Description
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <xsd:simpleType name="VFSType"> <xsd:restriction base="xsd:normalizedString"> <xsd:pattern value="(?!(AC4[0-9]{15}|AC[0-9]{16}|ROCK)).+"/> </xsd:restriction> </xsd:simpleType>
Puis je me suis aperçu que dans Eclipse, il faisait exactement référence au mémé problème, donc je suppose que ce n'est pas une erreur de code mais plutôt au niveau du XSD.InvalidRegex: Pattern value '(?!(AC4[0-9]{15}|AC[0-9]{16}|ROCK)).+' is not a valid regular expression. The reported error was: 'Cette expression n'est pas autorisée compte tenu des options en cours.'.
J'ai regarde du coté du pattern, mais je me suis assuré sur un site (http://www.regexplanet.com/advanced/java/index.html) que le résultat était bien celui que je voulais, à savoir :
Je ne vois que la partie xsd qui peut poser problème maintenant, mais j'avoue que mes connaissance sont assez limitées dans le domaine, j'ai cherché et cherché sur notre amis à tous, mais je n'ai rien trouvé parlant de xsd avec des patterns comprenant des negatives lookaheads, donc je suis venu chercher un peu d'aide ....siouplé :o)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Regular Expression (?!(AC4[0-9]{15}|AC[0-9]{16}|ROCK)).+ as a Java string "(?!(AC4[0-9]{15}|AC[0-9]{16}|ROCK)).+" Replacement groupCount() 1 Test Target String matches() replaceFirst() replaceAll() lookingAt() find() n [start(n),end(n)] group(n) 1 CEAMOI Yes Yes Yes 0: [0,6] CEAMOI 1: [-1,-1] null 2 O40000035617 Yes Yes Yes 0: [0,12] O40000035617 1: [-1,-1] null 3 AC0000200000000294 No A A No Yes 0: [1,18] C0000200000000294 1: [0,18] AC0000200000000294 4 AC4000200000000294 No A A No Yes 0: [1,18] C4000200000000294 1: [0,18] AC4000200000000294 5 ROCK No R R No Yes 0: [1,4] OCK 1: [0,4] ROCK
Pour info ce que je voudrais, c'est prendre tout sauf (AC4[0-9]{15}|AC[0-9]{16}|ROCK) qui est un regexp qui marche dans mon xsd.
Voila je pense avoir tout dit, a vot' bon cœur :o)
Merci
Partager