docs: protected boolean validateLink(CmsObject cms, I_CmsXmlContentValue value, CmsXmlContentErrorHandler errorHandler) {
  
          // if there is a value of type file reference
          if ((value == null) || (!(value instanceof CmsXmlVfsFileValue) && !(value instanceof CmsXmlVarLinkValue))) {
              return false;
          }
          // if the value has a link (this will automatically fix, for instance, the path of moved resources)
          CmsLink link = null;
          if (value instanceof CmsXmlVfsFileValue) {
              link = ((CmsXmlVfsFileValue)value).getLink(cms);
          } else if (value instanceof CmsXmlVarLinkValue) {
              link = ((CmsXmlVarLinkValue)value).getLink(cms);
          }
          if ((link == null) || !link.isInternal()) {
              return false;
          }
          try {
              String sitePath = cms.getRequestContext().removeSiteRoot(link.getTarget());
  
              // check for links to static resources
              if (CmsStaticResourceHandler.isStaticResourceUri(sitePath)) {
                  return false;
              }
              // validate the link for error
              CmsResource res = null;
              CmsSite site = OpenCms.getSiteManager().getSiteForRootPath(link.getTarget());
              // the link target may be a root path for a resource in another site
              if (site != null) {
                  CmsObject rootCms = OpenCms.initCmsObject(cms);
                  rootCms.getRequestContext().setSiteRoot("");
                  res = rootCms.readResource(link.getTarget(), CmsResourceFilter.IGNORE_EXPIRATION);
              } else {
                  res = cms.readResource(sitePath, CmsResourceFilter.IGNORE_EXPIRATION);
              }
              // check the time range
              if (res != null) {
                  long time = System.currentTimeMillis();
                  if (!res.isReleased(time)) {
                      if (errorHandler != null) {
                          // generate warning message
                          errorHandler.addWarning(
                              value,
                              Messages.get().getBundle(value.getLocale()).key(
                                  Messages.GUI_XMLCONTENT_CHECK_WARNING_NOT_RELEASED_0));
                      }
                      return true;
                  } else if (res.isExpired(time)) {
                      if (errorHandler != null) {
                          // generate warning message
                          errorHandler.addWarning(
                              value,
                              Messages.get().getBundle(value.getLocale()).key(
                                  Messages.GUI_XMLCONTENT_CHECK_WARNING_EXPIRED_0));
                      }
                      return true;
                  }
              }
          } catch (CmsException e) {
              if (errorHandler != null) {
                  // generate error message
                  errorHandler.addError(
                      value,
                      Messages.get().getBundle(value.getLocale()).key(Messages.GUI_XMLCONTENT_CHECK_ERROR_0));
              }
              return true;
          }
          return false;
      }