Допустимы ли дополнительные символы в именах 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
был одним из XMLtext/*
подтипы.Соответствующая спецификация ( RFC 3023) определяет строгое значение по умолчанию
"us-ascii"
для таких документов, поэтому мы будем использовать это значение независимо от того, какую кодировку вы указали в другом месте.Если вы хотите использовать другую кодировку, вам следует разрешить браузеру отправлять эту новую информацию о кодировке.
Попробуйте автономный анализатор XML. Мой валидатор на основе Xerces-J, например, правильно идентифицирует ваш XML как правильно сформированный.
Имейте в виду, что не все символы, разрешенные NAME, разрешены в NCNAME. Таким образом, хотя XML правильно использует такие символы, он не может быть действительным в соответствии с XSD, где такие имена не допускаются.