Xhtml Недопустимые символы? - PullRequest
1 голос
/ 24 июня 2011

Я создал собственный xhtml valdidator в .NET (проверка через dtd + некоторые дополнительные правила), и я заметил несоответствие между моей проверкой и проверкой w3c.

В моем валидаторе я получаю следующую ошибку, когда в идентификаторе есть двоеточие (скажем, id = "mustang: horse")

(Ошибка) Атрибут 'id' имеет недопустимое значение в соответствии с его типом данных.

Но я не получаю никаких ошибок на w3c для этого шаблона.

Я пытался найти список недопустимых символов для атрибута в xml / xhtml, но не смог его найти?

Спасибо за вашу помощь,

Ответы [ 2 ]

3 голосов
/ 24 июня 2011

Существует список, и он разрешает двоеточия.

Спецификация XHTML 1.0 гласит: http://www.w3.org/TR/xhtml1/#h-4.10

... в XHTML 1.0 атрибут id определен какиметь тип ID ...

Спецификация XML 1.0 гласит: http://www.w3.org/TR/2008/REC-xml-20081126/#id

Значения типа ID ДОЛЖНЫ совпадать с продукцией Name.

И производство Имени определено в http://www.w3.org/TR/2008/REC-xml-20081126/#NT-Name

  [4]       NameStartChar      ::=  ":" |
                       [A-Z] | "_" | [a-z] | [#xC0-#xD6] |
                       [#xD8-#xF6] | [#xF8-#x2FF] |
                       [#x370-#x37D] | [#x37F-#x1FFF] |
                       [#x200C-#x200D] | [#x2070-#x218F] |
                       [#x2C00-#x2FEF] | [#x3001-#xD7FF] |
                       [#xF900-#xFDCF] | [#xFDF0-#xFFFD] |
                       [#x10000-#xEFFFF]

  [4a]      NameChar  ::=   NameStartChar | "-" | "." |
                       [0-9] | #xB7 | [#x0300-#x036F] |
                       [#x203F-#x2040]           

  [5]       Name      ::=   NameStartChar (NameChar)*

А также выше этого формального определения сказано:

Авторам документов рекомендуется использовать имена, которые являются значащими словамиили комбинации слов в естественных языках, и избегать символических или пробельных символов в именах.Обратите внимание, что COLON , HYPHEN-MINUS, FULL STOP (точка), LOW LINE (подчеркивание) и MIDDLE DOT явно разрешены.

(Мой акцент)

1 голос
/ 08 июля 2011

Причина этого различия заключается в том, что валидатор W3C, похоже, не выполняет обработку XHTML с учетом пространства имен. Хотя документы XHTML должны находиться в пространстве имен XHTML, это на самом деле разумно, поскольку документы HTML не используют пространства имен, а нормативная допустимая структура документов XHTML (как HTML) определяется файлом DTD, а DTD фактически не осведомлены о пространстве имен.

Как @Alochi уже отметил:

Значения типа ID ДОЛЖНЫ соответствовать Имени производство.

Это верно, когда документ анализируется как не поддерживающий пространство имен, но это не так, если документ должен соответствовать пространству имен. Пространства имен в спецификации XML гласят, что идентификаторы должны соответствовать продукции NCName , что явно запрещает использование символа двоеточия. Синтаксический анализ с учетом пространства имен является распространенным соглашением, и поэтому использование двоеточия в значении идентификатора не рекомендуется, даже если это разрешено, когда анализ документа не поддерживает пространство имен.

Сводка: если пространства имен игнорируются, значение ID должно быть допустимым Name и может содержать двоеточие; в противном случае он должен быть действительным NCName и не может содержать двоеточие.

...