I add one answer and one comment:

   1. isValidCharacter(char c) will be very very expensive in term of computation. In this codec various items are made to try to be as much as possible optimized (in particular, we allow mixed types of variable, in memory or on disk according to a size, and we try when possible to check arrays directly without getting bytes one by one). So putting this will lead to obviously a slow down in the overall process. So I feel like this is not a good idea. The pattern, even if costly too, should be faster than one by one check.

   2. On my "pre" test to make this Abstract class with static property Pattern, I must admit that, even if it is not as clean as I would like, it is really helpful, since:
   - no more constructor with or without argument on each "data" to specify if we want to check and how the name W3C rule
   - only the factory has those constructors (and those without a specific pattern will cause the pattern to be the standard one)
   - In more than 90%, I feel like once someone decides to use a specific pattern (or the default one), he/she probably stick with this one for every implementation in one VM.

So while answering 90% of the case (one way used to verify the W3C conformity), there is still some cases where perhaps some people could want to have several web services in the same VM using different patterns. In this case, what could be done is to specify the "less" restrictive pattern for all, and then explicitely call an helper class (put on Data classes) that could check the name with a specific (maybe one shot) pattern given as parameter, thus allowing to check various levels of conformance.

WDYT?