Peut-être étonnamment, il n'y a aucune expression régulière qui correspond exactement à toutes les expressions régulières valides (et rien d'autre). C'est parce que la grammaire pour les expressions régulières est récursive, ce qui signifie que ce n'est pas une grammaire régulière (au sens informatique du terme), ce qui signifie qu'elle ne peut pas être décrite par une expression régulière.
Vous pourriez le faire (avec un truc) en utilisant des assertions dans XSD 1.1. L'astuce repose sur le fait qu'une assertion qui échoue avec une erreur XPath est traitée comme si l'assertion était fausse. Donc l'assertion
matches("", $value) or true()
échoue si $ value n'est pas une expression rationnelle valide, et renvoie vrai sinon. Cependant, vous devrez peut-être faire un peu plus de supercherie pour éviter que l'optimiseur XPath intelligent ne le fasse. Il est probablement sûr de l'écrire comme
if (matches("", $value))
then string-length($value) gt 0
else string-length($value) ne 0
Une mise en garde mineure: Ce test contre le dialecte d'expression régulière XPath qui est légèrement différent du dialecte d'expression régulière XSD.
C'est exactement ce que je voulais éviter. Comme XSD supporte nativement la regex, je m'attendrais à ce qu'ils fournissent aussi une validation intégrée comme définition de pièce ... mais il semble que ça ne marche pas comme ça ... –