Кодирование имени элемента XML, начинающегося с цифры? - PullRequest
17 голосов
/ 18 января 2010

Я смотрю на вывод инструмента, дамп таблицы базы данных в XML.Один из столбцов называется 64 Кбит , инструмент кодирует его как таковой, и мне нужно повторить это:

 <_x0036_4kbit>0</_x0036_4kbit>

Это какая-то стандартная кодировка?Где я могу узнать больше об этом?

Ответы [ 5 ]

41 голосов
/ 31 января 2013

Официальное слово заключается в том, что ограничения, налагаемые на соглашения об именах Xml, унаследованы от родительского набора XML XML, за одним исключением: в Xml в качестве дополнительной опции имена могут начинаться с символа подчеркивания '_'.

SGML был разработан IBM в 1960-х годах группой людей, которые думали о «стиле 1960-х».

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

Итак.Вопрос все еще остается.Почему SGML не позволяет номера?Кроме того, зачем вводить какие-либо ограничения на использование любого символа, кроме управляющих символов;<,>, & и пустое место?Было бы безумием, конечно, подарить компьютерному гику столько ключей для стольких разных персонажей, только чтобы он или она не могли их использовать.

Самая значимая причина - это анализатор мышления 1960-х годов, который в некоторой степени следует правилу сложности.

'Чем проще парсер, тем быстрее он будет работать'

В алфавите всего 26 прописных + 26 некапитальных символов, и это 52. Допустимые цифры - это дополнительные десять цифр,что примерно на шестую больше!

С человеческой точки зрения это все равно, что вымыть шесть ужасно грязных горшков, каждый из которых занимает час, чтобы очистить, а затем спрятать под последним горшком - дополнительный бонусный горшок для мытья, и вы должнымыть его!Вы должны повторять эту процедуру каждый день всю оставшуюся жизнь, и это именно то, что она любит.Точно!

Документы на языке разметки имеют тенденцию увеличиваться в объеме.Таким образом, меньшее количество заданий для парсера означает прямое увеличение скорости работы.Затем преимущества постепенно сливаются в ряды, пока не превратятся в чисто прибыльные показатели.

В «Старые дни лошадей, экипажей и коммодора 64» ответственность за подсчет своих битов и байтов была гораздо большей для пользователя.вручную, чтобы килобайты позаботились о себе.Тем не менее, поскольку современный процессор способен справляться с трудностями в большей степени, чем его древний предшественник, ограничения, наложенные синтаксическим анализатором, стали более значительными, чем проблемы с производительностью.

Если это утешит меня, если я спроектирую Mark-сам язык (который, ради аргумента, мы назовем NAM-LIT-MAML, потому что удивительный язык разметки Николаса - самый удивительный язык разметки (когда-либо!), тогда он позволит вам использовать любое число из всехперсонажи во всей истории мира и даже вселенной, без исключения, и я бы очень усердно работал, чтобы создать некоторые из никогда не использовавшихся ранее символов для собственного использования языка, которые все еще можно было бы использовать в документе, используя его собственныеЭкранирующий символ, не похожий ни на один другой символ, который когда-либо использовался кем-либо раньше.

Ограничения, наложенные Xml, унаследованы от SGML, и мы все можем согласиться с тем, что в наши дни и в эпоху верблюдов космических кораблейи другие полезные роботизированные млекопитающиенеобходимо, глупо и идет вразрез с объектно-ориентированным программированием.

Дальнейшее чтение на http://www.w3.org/TR/REC-xml/

Хотя самый простой способ, который я нашел, чтобы сделать имя совместимым с xml - это включить суффикс'_', нет никакого стандарта, и поэтому используются другие методы.

В вашем примере первый символ был преобразован в шестнадцатеричное значение.Это шестнадцатеричное значение представляет символ «6» как в ASCII, так и в Unicode и, несомненно, в других.

Хорошая вещь об использовании шестнадцатеричных значений состоит в том, что все символы в наборе кодов, например, Unicode, могут быть представлены.

Плохо то, что они не так удобны для чтения.

16 голосов
/ 18 января 2010

Ну, это не кажется слишком стандартным, но XML явно запрещает числа (и некоторые другие вещи) в качестве первого символа имени элемента:

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]

Эта кодировка здесь как бы экранирует первый символ, если он не соответствует этим требованиям. Он использует шестнадцатеричное значение этого символа. _x0036_ очевидно соответствует шестнадцатеричному 0x36, который является 54 в десятичном виде и представляет цифру 6.

6 голосов
/ 18 января 2010

Имя XML не может начинаться с цифры, поэтому необходимо использовать другое представление, которое можно понимать как «6».

Инструмент выбрал вместо этого запись шестнадцатеричного представления символа в окруженииподчеркиваниемКод \x0036 - это шестнадцатеричный код для символа «6», который составляет 54 в десятичном виде.Символы подчеркивания являются допустимыми символами в начале имени XML, поэтому это работает.

Этот же метод можно использовать для удаления других символов, которые недопустимы в именах XML.Этот метод используется, например, Microsoft XmlConvert, как описано здесь , но я уверен, что есть и другие инструменты, которые тоже используют этот метод.

4 голосов
/ 30 мая 2013

IIRC (я был там, но это было очень давно), мысль была о том, что было бы очень распространенным сопоставлять элементы и атрибуты XML с конструкциями языка программирования, которые представлены переменными, и очень мало (есть? ) языки программирования допускают имена переменных, начинающиеся с цифр. Таким образом, идея заключается в том, что имена элементов / атрибутов XML должны хорошо вписываться в правила именования переменных большинства языков. Я все еще верю в это? Если бы мы снова делали XML, я бы согласился с этим? Не знаю; Это было бы интересное обсуждение.

1 голос
/ 18 января 2010

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

Эта последовательность _x0036_ представляет шестнадцатеричное число 36 (десятичное число 54), которое представляет ваш символ 6 в таблице ASCII.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...