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 ....)

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>
Le problème c'est que quand je veux valider mon XML une SaxException remonte en me disant Description

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.'.
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.

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 :
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
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)

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