Многие знают (читали мои опусы), но я на всякий случай напомню, я довольно много лет работал со SWIFT и непосредственно в SWIFT как инженер поддержки, аналитик, консультант, тренер, разработчик, в общем, занимался многими вещами.
Нынче я работаю аналитиком в конторе, которая пишет программное обеспечение для центробанков, расчётных платёжных систем, систем мгновенных платежей, и, в числе прочих активностей мы разрабатываем стандарты и форматы для обеспечения работы всех этих систем и бизнес процедур для различных стран (наши продукты работают более чем в 50 странах мира). В том числе мы много и плотно общаемся со SWIFT по вопросам совместимости форматов и стандартов сообщений, выработки новых стандартов и прочим подобным вопросам.
Небольшое введение про то, как вообще платёжные системы работают и причём тут форматы сообщений. Принципиально есть две схемы,
(1) цепочка, когда деньги переправляются от дебитора кредитору через участников по очереди и
(2) работа через центральных клиринговый узел, когда участники отправляют свои сообщения в центральную систему, а она уже сама раскладывает платежи и учитывает позиции участников.
Первая схема универсальна, и она работает в принципе всегда, были бы только взаимные счета у участников в цепочке, чтобы деньги переложить.
Вторая схема требует выполнения некоторых предварительных приседаний, самым главным из которых которых является условие "подключиться к центральной системе" (как подключиться, напрямую или через участника расчётов не важно, главное, что все участники должны иметь доступ к центральной системе).
Очевидно, что любые взаимодействия между большим количеством участников требуют неких единых стандартов оформления бизнес-процедур, а также единых форматов сообщений.
Таким образом, для каждой такой центральной системы (далее я буду использовать термин Market Infrastructure -- MI), используются свои стандарты и форматы, свои обозначения и правила для номеров счетов и идентификации как участников, так и конечных бенефициаров расчётов. Всё это определяет регулятор MI, обычно это платёжная система страны (или объединения нескольких стран в регионе, тогда правила устанавливают центробанки этих стран совместно).
Первый способ, передача сообщений по цепочке также требует неких единых стандартов форматов, полей, принципов именований, кодовых страниц, с тем, чтобы все участники в цепочке могли без принципиальных преобразований передавать информацию далее.
Очевидно, что задачи выработки форматов и стандартов, а также общих принципов бизнес-процедур для трансграничных обменов сообщениями должны неким образом координироваться между всеми участниками во всём мире. И действительно, SWIFT, созданный в 1972 году, должен был решить эту задачу, выработав единые форматы и стандарты. Именно тогда и появились стандарты FIN MT.
С течением времени их стало не хватать (активности изменялись и расширялись) и была сделана попытка преобразовать FIN MT в стандарт ISO15022. К сожалению, этот стандарт разрабатывали совсем другие люди, которые уже не помнили (а то и вовсе не понимали) того, что было раньше, кроме того, хотели сохранить совместимость с предыдущими форматами, и в результате получилось, мягко говоря, не очень.
Простейший пример: именование платежа. Именований платежа есть два, между двумя ближайшими точками в рамках цепочки (point-to-point) и между началом и концом в цепочке (end-to-end).
Для point-to-point было предусмотрено поле 20 -- Transaction Reference Number из 16 символов в 4-ом блоке сообщения (это блок непосредственно финансовой информации), но потом оказалось, что транзакций в одном сообщении может быть несколько, а для end-to-end предложили использовать поле Message User Reference (MUR) в 3-м блоке (пользовательские служебные параметры сообщения).
И дальше началось...
МТ103: клиентский одинарный платёж, поле 20 называется "Референс отправителя"
МТ102: клиентский множественный платеж, когда в одном сообщении может быть несколько транзакций, поле 20 называется "Референс файла", т.е. общий референс на всю пачку, но при этом на каждой транзакции в пачке есть поле 21, которое и называется "Референс транзакции".
МТ200: банковский перевод, поле 20 так и осталось "Референс транзакции".
МТ202: банковский перевод для подкрепления счёта клиента, поле 20 опять называется "Референс транзакции", но при этом появляется поле 21, которое называется "Связанный референс", в нём пишется референс (поле 20) соответствующего МТ103.
В ISO15022 была сделана попытка всю эту непотребщину хотя бы немного причесать, приведя к каким-то одинаковостям, но как мы видим, попытка кончилась ничем. А поле MUR в третьем блоке, которое должно использоваться для end-to-end референса, используют как попало, более того, поскольку третий блок не входит в финансовую информацию, его и вовсе игнорируют при дальнейшей пересылке.
Потом появились стандарты ISO20022, и в них стало ещё хуже. С одной стороны в каждом сообщении появился User Header Block с кучей полей, куда можно было бы затолкать референсы транзакций, с другой стороны в блоке финансовой информации тоже появились какие-то поля для референсов, и всё это непонятно как коррелирует с предыдущим FIN. Про ISO20022 и его приколы также можно написать отдельную юмористическую статью, но, боюсь, она будет сильно специфической и неинтересной большинству читателей.
Надо сделать одно важное замечание. С самого начала SWIFT разрабатывался как система передачи трансграничных платежей (сообщений) и никак не вписывался в локальные платёжные системы, каждый раз, когда требовалась некоторая совместимость, либо делались ужасающие извращения (вроде нашего RUR6), либо SWIFT специально дорабатывал (за очень большие деньги) свои системы для обработки таких локальных стандартов.
Время шло, и к началу 21 века практически все локальные платёжные системы внедрили свои форматы, основанные на ISO20022, который и стал промышленным стандартом передачи финансовой информации во всём мире.
Во всём мире, кроме SWIFT. Трансграничные платежи так и остались в форматах FIN. И тут начали возникать проблемы, связанные с конвертацией сообщений из XML в MT и обратно. XML стандарты ISO20022 гораздо шире, включают множество полей, которых нет в FIN MT, а те, которые есть, расширены, например тот же референс транзакции стал не 16 символов, а 35.
SWIFT последние лет 25 рассказывает о том, что вот вот буквально завтра наступит светлое будущее с XML, но при этом все эти 25 лет всё это колыхалось ни шатко ни валко. Как я уже сказал, все MI перешли на ISO20022 со своими доработками и мучались с преобразованиями в трансграничные обмены SWIFT.
Надо сказать, что стандарты ISO20022 настолько широки, что туда можно затолкать практически всё, что угодно, вплоть до собственных расширений. Чем все и пользовались.
Но SWIFT это SWIFT, у них всё вертится в головах не вокруг того, чего хотят банки, а вокруг того, чего хочет сам SWIFT (точнее вокруг того, чего хотят топ-50 мировых банков, которые и хотят определять развитие финансовых коммуникаций).
И вот SWIFT выкатил FINplus, который был призван заменить FIN, новая технология поддерживающая до некоторой степени обратную конвертацию в FIN, с тем, чтобы миграция по замене пошла гладко и безошибочно. Описывать FINplus я сейчас не буду (это тема отдельной статьи, если интересно, напишите в комментариях), но на одном моменте остановлюсь. Как и FIN, FINplus принципиально заточен под платёжные цепочки трансграничных сообщений и не работает с центральными клиринговыми системами, в нём принципиально нет соответствующих полей и кодовых слов. Да, путём разных извращений, можно одно в другое затолкать, но это, мягко говоря, требует очень значительных накладных расходов и не всегда получается корректно, в смысле дальней поддержки, расширения и масштабируемости.
Кроме того, SWIFT выкатил технологию, которую он назвал "My standards". На основе стандартов ISO20022 можно разрабатывать свои ограничения на типы сообщений, загружать их в центральный движок SWIFT и в рамках своей MI получать работающую локальную инфраструктуру обмена сообщениями, используя SWIFT как транспортную систему и третью независимую сторону с контролем синтаксиса и семантики сообщений, а также аудита, аутентификации , ограничения доступа и прочих кошерных вещей, которыми славен SWIFT. Нужно зарегистрировать свою закрытую группу, в ней отдельный сервис, раздать правда доступа, определить параметры, зарегистрировать участников... Разумеется, всё это стоит денег, и немаленьких денег. Ну и у этих "Моих стандартов" есть кучка неприятных ограничений, но в прицнипе с ними жить можно.
Затем SWIFT решил подмять под себя и локальные рынки. С этого момента начинается самое интересное.
Итак, SWIFT разработал подмножество ISO20022, которое он обозвал ISO Acceleration Pack (в девичестве High Value Payments plus -- HVPS+). Этот набор сообщений с одной стороны был предназначен для работы в локальных MI, а с другом стороны был максимально совместим с FINplus. Чтобы можно было бесшовно стыковать трансграничные платежи с внутренними.
И теперь SWIFT пытается нагнуть все центробанки и MI с тем, чтобы они у себя заменили свои собственные уже готовые и работающие форматы/стандарты на SWIFT-овый IAP, и за это заплатили в SWIFT денег. Потому что SWIFT им готов всё это доработать и выдать указания рекомендации, как у них всё должно быть. Ну и заодно SWIFT даст небольшую скидку на использование "My standards", ведь без него это всё не зафурычит.
Центробанки от таких радостных перспектив обомлели и с оторопью взирают на этот праздник идиотизма, густо приправленный жаждой наживы. Проблема тут не только в том, чтобы в центральной системе поменять обработку форматов, проблема в том, что все участники должны в своих системах также поменять обработку форматов. А это задача, которую решают долго, трудно, очень дорого, и самое главное, в ней нет никакого смысла, так как уже всё много лет назад сделано и работает.
Чем всё это закончится, я не знаю, скорее всего ничем, просто потому что в каждой стране есть свой регулятор, который и регулирует правила и порядки, а также вытекающие из них форматы и стандарты. Наверное лет 20 назад, на волне всеобщей глобализации, это начинание бы прокатило, но не сейчас, когда идёт обратный процесс с максимальным разграничением внутренних платёжных систем и внешних.
У SWIFT есть ещё парочка таких же оголтелых инициатив, но про них я напишу как-нибудь в другой раз.
Комментарии
Так получается ISO20022 это стандарт, который продвигает SWIFT, под видом общемирового?
Не так. Наверное надо написать отдельную статью про ISO20022.
ISO20022 -- это максимально широкий международный стандарт, который включает в себя вообще всё что только возможно и нет.
SWIFT при этом запилил некоторые подмножества этого очень широкого стандарта и пытается теперь всех под эти подмножества нагнуть).
Инициатор ISO20022 кто тогда?
International Organization for Standardization, как бы подсказывает Капитан Очевидность.
SWIFT там привлечен как участник и один из разработчиков, но в целом там вот так:
- The Registration Management Group (RMG),
- Technical Support Group (TSG) and
- Standards Evaluation Groups (SEG)
have been created to support the ISO 20022 registration process.
In addition, the Cross SEG Harmonisation Group (CSH) has been created by the RMG to resolve harmonisation issues that exist across business domains.
А что там с нашим ответом
Илону МаскуSWIFT-у?СПФС или пойдем на CIPS?
Это вообще разные вещи, и СПФС, и CIPS системы платёжные, а SWIFT система транспортная.
Почти как X.509 (и с аналогичными перспективами в части 8полноты* реализации)?
Каталог Х.509 со всеми его возможностями в SWIFTNet запилен.
[кося взглядом в сторону *L*DAP] Именно так (во ВСЕЙ ПОЛНОТЕ)?
☺
X.500 и X.509 работают уже лет 20 как. Собственно стандарт обращения по адресу BIC нынче выглядит как обращение по адресу в каталоге Х.500.
Наверное, всё таки High Value Payments Systems, а не High Value Payments Payments
Просто High Value Payments.
Баден-Баден, блин.
High Value Payments Systems Разве не это? (Могу ошибаться)
https://www.swift.com/news-events/news/high-value-payments-plus-hvps-next-stage-step-towards-iso-20022-harmonisation
Спасибо, почитал.
Интересно. Повторяет судьбу Нокии,монополизм и забронзовелость.)
То есть, если коротко, SWIFT решил самоотключиться от мировой финансовой системы.
В добрый путь!!!!
Пока нет, но судя по тому, что SWIFT творит, к этому всё идёт.
Я, честно говоря, наблюдаю за этим с видом реднеков из фильмы "Убойные каникулы"
Жуть какая!!!! Брррр!
Но похоже на SWIFT. Они уже на примере России показали, что без SWIFTа жизнь всё равно есть, а также подтолкнули банковскую общественность на поиски альтернативных путей сообщения между банками. Ну а вот такие фортели, как описали Вы - один из последних гвоздей в их крышку гроба, если не одумаются, конечно, и не подстроятся под всеобщий тренд (что вряд ли).
STEFI
Специализированные банки ненужны.
Спасибо, класс! Приятно было ознакомиться.
xml-говно. если кто думает xml или что ещё, то выбирайте по времени создания: s-expression,yaml,json. Для людей лучше yaml-а зверя нет.
XML не говно и для разработки схем финансовых сообщений он как раз на своём месте.
Никакие прочие форматы там и рядом не стояли.
Не-не-не, Дэвид Блейн! Эксемель не просто говно, а токсичное радиоактивное говно. Вот как только кто-то подумает, что он не говно и давай-ка его применим для организации обмена с произвольным контрагентом (клиентом, абонентом), а то и с живым человечком, так сразу он становится ядовитым говном и начинает убивать вокруг всё живое. Для обмена между программами, он может применяться, фигня вопрос. Межпрограммная коммуникация может быть вообще любой и на любых принципах, стандартах, парадигмах. Хрень только в том, что для обмена между программами он избыточен и потому не нужен. Для обмена между не-программами он принципиально непригоден.
+100.
Не питаю пристрастий к XML, но всё же единственный недостаток вами приведённый - избыточность, - не является недостатком сама по себе. Где-то это преимущество. Но вот с чем я согласен - вкупе с использованием этого преимущества рано или поздно проект приезжает в дебри сложности и несовместимости. Привет XMPP/Jabber.
Я ненавижу эксемель за то, что он нарушает kiss-принцип, если без эмоций и красивостей. Эксемель прямая и глумливая антитеза kiss-принципу.
Я - исключительно за многословность и человеконечитабельность. Так-то JSON тоже можно сделать слабочитаемым, но xml справляется с этим намного эффективнее. Ну и объёмы. Ну и да, в большинстве проектов это жуткое техническое переусложнение. Когда проект с конфигом в десяток пар ключ-значение тащит xml, вопрос "но зачем!?" меня преследует неотвязно.
> проект с конфигом в десяток пар ключ-значение тащит xml
Это и есть нарушение kiss-принципа.
В этом месте мне обычно вспоминается аналогия из обсуждавшегося мира баз данных: стандартный принцип OLC он как соотносится с принципом KISS?
И куда потерялся принцип монизма бытия?
Ну, должны же быть вредные привычки?
не понимаю в чём сыр-бор. Написать 10 строк ini файла конечно проще в yaml/json. Но вопрос в том если это цель зачем вообще городить огород? В kernel32 емнип есть функции для прописывания всяких примитивных ini c 80-х годов. Но если же речь о файле в несколько мегабайт то все эти форматы одинаково неудобоваримые, так что какая разница? каждый упарывается как хочет.
+1 красиво сказали. ;-)
Угу. Сложные проблемы всегда имеют простые для понимания и реализации неправильные решения.
¯\_(ツ)_/¯
Мне лень спорить, ей Богу.
Ни в json, ни в yaml, ни в какой-то там ещё формате невозможно реализовать то, что в XML сделано из коробки. Я очень сильно советую открыть iso20022.org, и оттуда почитать описание например клиентского платежа pacs.008 (а это не только xsd схема, а ещё и т.н. Message Validation Rules), а потом попробовать всё это сделать в чём-то другом.
Это и пространства имён, и версии, и комментарии, и расширения, и бинарные данные. И всё это реализовано на уровне всеми поддерживаемых промышленных стандартов (w3c), а не у каждого своё как ему удобно.
> xsd схема, а ещё и т.н. Message Validation Rules
> на уровне всеми поддерживаемых промышленных стандартов
Вот в этом и беда с вашим мышлением. Вы не видите в отцитированных мною строчках противоречий. Меня бы спросили, я бы просто отказался от текстового формата. Эта пакость в принципе не читабельна, с нею невозможно работать через простой текстовый редактор, так что зачем и огород городить? И парсить бинарный файл стало бы в тысячи раз легче, и возможностей стало бы в сотни раз больше.
Не вижу. Потому что я знаю как устроены платёжные системы, что у них внутри, и почему это сделано именно так.
Все комментирующие, и вы в том числе, категорически не хотите принимать во внимание предметную область.
Отсюда и все изумительные в своей наивности предложения.
Вы, опять же, не видите, что претензии к xml возникают тогда, когда он из узкой ниши, в которой он приемлем (что, вообще-то, сомнительно, он нигде не нужен, но там, в глубине, он и не вреден, пока его люди не видят), вылезает в мир, прикидываясь удобным форматом обмена данными.
> Потому что я знаю как устроены платёжные системы, что у них внутри, и почему это сделано именно так.
Я знаю, как это происходит. Как нечто делается на ровном месте, людьми без опыта и теории, людьми, не подозревающими о том, какие проблемы вылезут при эксплуатации. Всё у них получается, но не потому, что они гениальны, или придумали что-то действительно хорошее, а потому, что пока объёмы работы достаточно малы, чтобы допиливать напильником и поправлять на лету. Потом всё это обрастает кучей костылей и мясом наработанных решений и заточенных вот под это бизнес-процессов, навыков исполнителей и логики руководителей. Постепенно приходят новые люди, которые как в той байке про пять обезьян, бананы и обливание холодной водой не представляют, что можно было бы иначе, они сразу обучаются вот этому дерьму как правильному пути. И в итоге проще терпеть весь этот скам чем ломать и строить что-то лучшее. Потому как лучшее придётся строить не с нуля, а из глубины того кратера, который останется после бадабума от обрушившегося бизнес-процесса. Как наглядный пример можно привести ipv4. Сам я в паре таких процессов участвовал, конечно же, в многотысячекратно в меньших масштабах, но принцип прочувствовал.
И всё это ну вот никак не делает идеологию и практику xml не дерьмом, не токсичным и не радиоактивным дерьмом. И да, как программист в отставке скажу ещё раз - то, что делается текстовым эксемелем, в сто раз удобнее и эффективнее делалось бы бинарным форматом. Даже тупо перевести теги в бинарный вид уже даст выигрыш в скорости обработки. И что самое смешное, человеку с таким форматом работать было бы удобнее, чем сейчас с эксемелем.
В 1972 году swift терминалы работали на платформе unisys, были такие st-100, потом появились st-200, тоже unisys и dec, потом st-400, dec vax, ibm 360/370, и всякие прочие. Затем к ним добавились aix и solaris в начале 80-х. Потом дело дошло и до Intel. Это только эволюция терминалов swift.
А в мейнфреймах банковских систем всё куда консервативнее.
Поэтому везде используется т.н. swift x character set, который является сильно обрезанным ascii.
Какие бинарные форматы вы собираетесь гонять между dec vax, ibm 370 и aix? Как вы собираетесь хранить эти бинарные данные в базах данных? Как вы собираетесь передавать бинарные данные через х.25, decnet, tcpip и ещё какую-нибудь шнягу от IBM? И это самый первый из множества пикантных нюансов.
Вы даже близко не понимаете, почему так делается и зачем.
> В 1972 году swift терминалы работали на платформе unisys
Ну так я об чём.
> А в мейнфреймах банковских систем всё куда консервативнее.
"Здесь так принято" - та самая байка про обезьян.
> Какие бинарные форматы вы собираетесь гонять между
Ну есть же такой зверь, как ууенкоде, хи-хи. Что, в свифте национальных языков не предусмотрено? Если да, то вы нам, конечно же, расскажете, что это правильно, полезно и так пребудет вовек. Если предусмотрено, то какие проблемы с передачей бинарных данных в принципе могут быть?
Но пассаж про невозможность передавать бинарные данные по tcpip меня особенно впечатлил.
> Вы даже близко не понимаете, почему так делается и зачем.
Я в предыдущем каменте исчерпывающе объяснил почему и зачем.
Да, не предусмотрено.
Шапочка из фольги поможет изолировать верхний моск от приёма телепатем из астрала.
На мейнфреймах ibm кодировка ebcdic, 8 bit, на других системах, например dec vax ascii 7 bit. Даже с передачей текста есть проблемы.
> На мейнфреймах ibm кодировка ebcdic, 8 bit, на других системах, например dec vax ascii 7 bit. Даже с передачей текста есть проблемы.
Эти проблемы перестали для человечества быть проблемами лет двадцать назад по самым пессимистичным оценкам. Вы про проблемы с кодировками рассказываете человеку, чью почту перекодировали сумасшедшие админы почтовых серверов, считающие, что почта должна быть в кои8, даже если она уже в кои8.
> Шапочка из фольги поможет изолировать верхний моск от приёма телепатем из астрала.
Ваш сарказм должен свидетельствовать о том, что вы считаете не так, как я предположил?
Я в прошлом комментарии упустил вот эту прелесть:
> Как вы собираетесь хранить эти бинарные данные в базах данных?
Сударь, вы и сейчас не храните в базах данных тэги эксемеля. Данные храните, а теги, в которые те данные были завёрнуты - нет. Это раз. Двас - в базах данных, если хочется, бинарные данные прекрасненько хранятся, блоб и нет проблем. Не говоря уж о том, что сами базы данных это такой бинарник, что любой текст там фиг найдёшь не только текстовым, но и хекс-редактором. Только через программный интерфейс к базе. С любым иным бинарным форматом всё точно так же, берётся специальная для него программа и данные показываются человеку не бинарной кашей, а в удобоваримыми текстовом (или графическом) виде.
Я устал объяснять про обратную совместимость, которая тянется ещё с 60-х годов 20 века. И про множество других нюансов, которые xml решает, а прочие форматы нет.
¯\_(ツ)_/¯
Вы, опять же, не видите, что претензии к xml возникают тогда, когда он из узкой ниши, в которой он приемлем (что, вообще-то, сомнительно, он нигде не нужен, но там, в глубине, он и не вреден, пока его люди не видят), вылезает в мир, прикидываясь удобным форматом обмена данными.
Я уже раз написал, но набижали тупые говнокодеры, которые кроме циферок ничего не понимают и давай истерить.
Повторю ещё один раз. Я ничего не говорил о том, что xml отличный универсальный инструмент для всего на свете. Я написал, что выбор xml для ISO20022 в частности и финансовых коммуникаций вообще был осознанным, и никакой другой формат не позволит решать проблемы этой предметной области.
Ну а наверно надо было ... надо было сказать, что вещь именно универсальная, потому и не удобная для частных и узких задач. Во все-все и не только перечисленные говно-текст форматы прямо из коробки легко конвертируется и демасштабируется. И бинарные данные там тоже запросто есть, как в любом тексте - base64, но you are welcome to use кости динозавров почивших в вашей ОС и как-то там их обработать ). Ну и если xml в 100 гигабайт - это полный @-сец, то в такого рода Json Вы просто не верите... совсем.
Эммм.... А зачем протокол для обмена между непрограммами? Сейчас слава богу факс читать не надо, расшифровывая всю ересь. Везде все пишут свой интерфейс и выдают этот хмл в удобочитаемом виде. А если в суде исходник понадобится то его специально обученные люди в любом случае читать будут.
Вопрос... Тем более, что опыт создания отчётов в XBRL говорит мне, что xml удобен.
Он удобен, если в создании формата участвовали грамотные специалисты и всё делали с "0", а не "адаптировали" разработанную 25 лет назад студентом схему под новые требования.
Формат отчётов ГосАлкогольРегулирования - вот где жесть видел. Уровня "office open XML" от Микрософт (которую тот сумел пропихнуть через ISO с закрытыми битовыми полями и 7 кажется разными форматами представления времени и даты в "новом" стандарте документов - хотя у ISO такой формат уже был очень давно стандартизован).
Некоторые поля - явные атрибуты - надо передавать как теги (кто-то в программе/документации буковку не ту поставил - O вместо A).
Значения тегов вида ПоставщикПродукцииЮридическийАдрес начинают перемежаться с doc00000000000007 - причём этот doc00000000000007 не уникален, как могло бы показаться - а имеет кучу разных вариантов внутри разных тегов.
Ну в целом жить, конечно, можно...
Не покупать же программу (которую никто в 2021 году и не продавал: только услуги по заполнению и отправки отчётности "за вас") - чтобы послать отчёты о перевозке 20 декалитров спирта для собственных нужд предприятия (электронная промышленность) на своём транспорте :) Отчёт о перевозке, отчёт о покупке, хранению и использованию жалкой бочки спирта...
Пара часов на чтение документации, просмотра старого отчёта из старой "бесплатной" программы и коррекция полей по новым правилам...
Такая же интересная штука с отчётами по ГОЗ. Когда нигде никто не покажет правильный отчёт. Читайте документацию. А что делать с делением на ноль в полях "процент использования" - когда планируемая сумма=0. Но там было куда интереснее с формированием самой подписи. Но тоже получилось.
+1. Вот именно. Причём тут форматер, если нет стандарта на даты, на координаты, на цвета, на фиг знает что ещё с плотностями и давлениями. Зато xml - универсальный формат! Тот, кто это гламурие придумал, получил большую премию. И путёвку в ад заодно.
Спор ни о чём. XML, WBXML, JSON, BSON, YAML, TOML, Protobuf, CBOR, Bencode, s-выражения, и десятки других форматов - это всего лишь транспортное представление данных. Абсолютно фиолетово, какое из них в каждом конкретном случае выбрано. Семантические вопросы (что именно хранить, и как именно система будет работать на основе выбранной схемы данных) никак не пересекаются с уровнем представления.
Характерный пример - Apple Property List. Обычные, ничем не выделяющиеся комки данных. Агрегаты из чисел, булевых значений, строк, массивов и ассоциативных массивов, всё как у всех. При этом изоморфно сериализуемые/десериализуемые на выбор в 5 различных транспортных представлений (а может уже и больше). Вся разница - лишь в балансе между компактностью и производительностью сериализации/десериализации, исходя из этого и выбирают формат. И только! На прикладном уровне всё остаётся как и было, без изменений.
Страницы