Причина этого различия заключается в том, что валидатор W3C, похоже, не выполняет обработку XHTML с учетом пространства имен. Хотя документы XHTML должны находиться в пространстве имен XHTML, это на самом деле разумно, поскольку документы HTML не используют пространства имен, а нормативная допустимая структура документов XHTML (как HTML) определяется файлом DTD, а DTD фактически не осведомлены о пространстве имен.
Как @Alochi уже отметил:
Значения типа ID ДОЛЖНЫ соответствовать Имени
производство.
Это верно, когда документ анализируется как не поддерживающий пространство имен, но это не так, если документ должен соответствовать пространству имен. Пространства имен в спецификации XML гласят, что идентификаторы должны соответствовать продукции NCName , что явно запрещает использование символа двоеточия. Синтаксический анализ с учетом пространства имен является распространенным соглашением, и поэтому использование двоеточия в значении идентификатора не рекомендуется, даже если это разрешено, когда анализ документа не поддерживает пространство имен.
Сводка: если пространства имен игнорируются, значение ID
должно быть допустимым Name
и может содержать двоеточие; в противном случае он должен быть действительным NCName
и не может содержать двоеточие.