Допустимы ли дополнительные символы в именах XML?

Согласно спецификации символы [#x10000-#xEFFFF] являются допустимыми в именах XML. Однако валидатор W3 говорит, что этот XML не правильно сформирован:

<?xml version="1.0"?>
<>value</>

(имя атрибута является символом Unicode # x10400). Некоторые браузеры, такие как Firefox, также жалуются на это (Chrome отображает XML, IE показывает пустую страницу). Это ошибка в инструментах или XML действительно не правильно сформирован?

2 ответа

Это ошибка в инструментах или XML действительно не правильно сформирован?

Это хорошо сформировано в последней спецификации, которая является XML 1.0 Fifth Edition. Но это не было правильно сформировано в предыдущем выпуске, который действовал до 2008 года.

Исходная спецификация XML 1.0 (с 1998 года) закрывала набор символов имени для символов, которые были определены как буквы в стандарте Unicode того времени. Это не включает который появился только с Unicode 3.1 несколько лет спустя.

В XML 1.1 было гораздо слабее относительно того, какие символы он будет принимать в именах (в основном по этой причине, чтобы разрешить символы из будущих версий Unicode), и это хорошо. Однако XML 1.1 никогда не завоевывал популярность, поэтому редакторы решили перенести новые, более разрешающие правила namechar оттуда к 1.0. Это было спорным и все во всем, вероятно, не очень хорошей вещи.

Это означает, что вы можете использовать в именах в документах XML 1.0 и могут быть использованы подмножеством синтаксических анализаторов, которые обновлены для пятого издания (или вообще никогда не применяли строгие правила), или вы можете использовать их в документах XML 1.1 и использовать их в другом наборе парсеры, поддерживающие XML 1.1.

Или, более реалистично, вы можете избежать тех персонажей, которые вроде как хорошо сформированы - в зависимости от всего, и чувствовать себя немного грустно.

Да, в именах XML допускаются дополнительные символы.

Ваш XML правильно сформирован, потому что имя элемента использует символы, разрешенные производством Name в Рекомендации W3C XML.

Тем не мение:

  • Онлайн-валидаторы, которые получают файл от вас по HTTP, должны будут позаботиться о кодировке символов. Похоже, что к тому времени, когда служба проверки разметки W3C получит ваш XML, ваш персонаж теряется в случайном порядке кодировки:

    Предупреждение отсутствует "charset" атрибут для "text/xml" документ.

    HTTP Content-Type заголовок (text/xml) отправлено вашим веб-браузером (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36) не содержит "charset" параметр, но Content-Type был одним из XML text/* подтипы.

    Соответствующая спецификация ( RFC 3023) определяет строгое значение по умолчанию "us-ascii" для таких документов, поэтому мы будем использовать это значение независимо от того, какую кодировку вы указали в другом месте.

    Если вы хотите использовать другую кодировку, вам следует разрешить браузеру отправлять эту новую информацию о кодировке.

    Попробуйте автономный анализатор XML. Мой валидатор на основе Xerces-J, например, правильно идентифицирует ваш XML как правильно сформированный.

  • Имейте в виду, что не все символы, разрешенные NAME, разрешены в NCNAME. Таким образом, хотя XML правильно использует такие символы, он не может быть действительным в соответствии с XSD, где такие имена не допускаются.

Другие вопросы по тегам