Я оспариваю приведенные причины, по которым это имело бы смысл.
В основном, предлагаемое решение использования XML просто использует другой формат сериализации.Давайте посмотрим, сможем ли мы достичь заявленной цели:
, чтобы сохранить ненужное повторение тегов для каждой записи
с помощью YAML.Исходя из вашего примера, предположим, что у нас есть name
и computer_name
как «простые» данные, и список времен с некоторыми данными, прикрепленными как «данные сбора» .Тривиальный подход будет выглядеть примерно так:
name: My Name
computer_name: My Computer
collection:
- time: 1:30
data: foo
- time: 2:20
data: bar
Нет повторяющихся тегов.При десериализации в правильный тип YAML будет знать, что значение collection:
будет списком точек данных без явных тегов.Однако у нас есть издержки, потому что мы каждый раз указываем имена полей time
и data
.Итак, давайте попробуем избавиться от них:
name: My Name
computer_name: My Computer
collection:
- [ 1:30, foo ]
- [ 2:20, bar ]
Большинство сред YAML предоставляют необходимые функции для десериализации этих последовательностей YAML в соответствующие классы данных.Мы все еще в пределах синтаксиса YAML.Теперь давайте посмотрим, сможем ли мы получить действительный CSV там:
name: My Name
computer_name: My Computer
collection: |
1:30;foo
2:20;bar
Используя скалярный литеральный блок YAML, мы теперь вводим данные сбора в виде скаляров, которые затем мы можем проанализировать с помощью синтаксического анализатора CSV.Мы даже можем дать указание нашей реализации YAML сделать это немедленно при обнаружении значения collection:
.
Было бы более сложно сделать это с JSON в качестве основного формата сериализации, поскольку JSON не оснащен блочными скалярами,XML также будет работать, но сам по себе очень вздут.
Пока мы находимся в YAML, есть еще одно возможное решение: использовать маркер конца документа , чтобы сообщить синтаксическому анализатору YAML, чтоНа этом документ YAML заканчивается, и после него помещаются данные CSV.Подобные вещи делаются в Джекиле, чтобы отделить «YAML переднюю тему » от содержимого.Это будет выглядеть так:
name: My Name
computer_name: My Computer
...
1:30;foo
2:20;bar
...
- маркер конца документа.Вместо этого Jekyll использует ---
, что в соответствии со спецификацией положит там второй документ YAML, и я не знаю, почему они решили это сделать....
является более подходящим для спецификации способом.