docs: protected CmsXmlContentErrorHandler validateValue(
          CmsObject cms,
          I_CmsXmlContentValue value,
          CmsXmlContentErrorHandler errorHandler,
          Map<String, String> rules,
          boolean isWarning) {
  
          if (validateLink(cms, value, errorHandler)) {
              return errorHandler;
          }
  
          if (CmsWidgetUtil.collectWidgetInfo(value).getWidget() instanceof CmsDisplayWidget) {
              // display widgets should not be validated
              return errorHandler;
          }
  
          String valueStr;
          try {
              valueStr = value.getStringValue(cms);
          } catch (Exception e) {
              // if the value can not be accessed it's useless to continue
              errorHandler.addError(value, e.getMessage());
              return errorHandler;
          }
  
          String regex = rules.get(value.getName());
          if (regex == null) {
              // no customized rule, check default XML schema validation rules
              return validateValue(cms, value, valueStr, errorHandler, isWarning);
          }
  
          boolean matchResult = true;
          if (regex.charAt(0) == '!') {
              // negate the pattern
              matchResult = false;
              regex = regex.substring(1);
          }
  
          String matchValue = valueStr;
          if (matchValue == null) {
              // set match value to empty String to avoid exceptions in pattern matcher
              matchValue = "";
          }
  
          // use the custom validation pattern
          if (matchResult != Pattern.matches(regex, matchValue)) {
              // generate the message
              String message = getValidationMessage(cms, value, regex, valueStr, matchResult, isWarning);
              if (isWarning) {
                  errorHandler.addWarning(value, message);
              } else {
                  errorHandler.addError(value, message);
                  // if an error was found, the default XML schema validation is not applied
                  return errorHandler;
              }
          }
  
          // no error found, check default XML schema validation rules
          return validateValue(cms, value, valueStr, errorHandler, isWarning);
      }