Подтвердить что ты не робот

Кодирование имени элемента XML, начинающегося с числа?

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

 <_x0036_4kbit>0</_x0036_4kbit>

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

4b9b3361

Ответ 1

Ну, это не кажется слишком стандартным, но 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_, очевидно, соответствует hexadeximal 0x36, который равен 54 в десятичной форме и представляет цифру 6.

Ответ 2

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

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

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

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

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

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

Алфавит составляет 26 капиталов + 26 неоткрытых символов в целом, и это 52. Разрешающие числа - это еще десять цифр, что примерно на шестой!

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

Языковые документы разметки имеют тенденцию к выпуклости в содержании. Таким образом, тем меньше рабочих мест для парсера означает прямое увеличение производительности. Преимущества затем просачиваются через ряды, пока они не превратятся в чистую прибыльную производительность.

В "Ye olde days of horse, car and Commodore 64" было гораздо больше ответственности за счет своих бит и байтов вручную, чтобы килобайты сами позаботились о себе. Однако, поскольку современный процессор более способен справиться, чем его древний предшественник, ограничения, накладываемые парсером, стали более значительными, чем проблемы с производительностью.

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

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

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

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

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

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

Плохо то, что они не так читаемы с первого взгляда.

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

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