Есть ли у XML нечто, что не может JSON? И есть ли у XML и JSON что-то, что не может CSV
Изучая в сравнении XML и JSON,
https://msiter.ru/tutorials/javascript/js_json_xml
https://itgap.ru/post/json-vs-xml-sravnenie-tekhnologij-i-oblasti-primeneniya
https://www.w3schools.com/js/js_json_xml.asp
https://habr.com/ru/post/31225/
обнаружил две вещи.
- принципиальным преимуществом XML перед JSON есть какие то "метаданные", и ни одного внятного примера "что и зачем" и в чем победа )). Вопрос №1 - есть ли что в XML, чего не сможет JSON. Ну и нормальный пример про это ))
- все примеры наводят на мысль о том, что CSV будет получше обоих. Например:
Намного короче и читабельнее будет CSV, с разделителем -табуляцией!!
firstName lastName
John Doe
Anna Smith
Peter Jones
Итого вопрос №2 - что могут XML и JSON, чего не сможет CSV?
Ответы (3 шт):
CSV удобнее только в том случае, когда у вас табличные данные - строго прямоугольные по форме (например, только числовые либо короткие текстовые поля, обязательные для всех записей). А если у вас сильно вложенные структуры, да с разным числом элементов, какие-то поля есть, каких-то нет, да плюс ещё в данных длинные строки разной длины, то все преимущества CSV сходят на нет, потому что у вас либо "поедет" вся красота, либо вам придётся отводить под столбцы место какого-то гигантского размера, чтобы уместилось самое длинное значение и вы будете бесконечно скроллировать данные, чтобы посмотреть что-то в дальних столбцах. И это всё-равно не решит проблему сильной вложенности разного кол-ва элементов.
JSON с данными разной длины и вложенности будет выглядеть гораздо нагляднее.
Насчёт XML ничего не скажу - сам его не люблю, за избыточность разметки.
Хотя вот @Insolor правильно дополнил в комментариях, что в принципе XML может ссылаться на собственные элементы, а в JSON вы не можете несколько раз сослаться на один и тот же элемент в разных местах, вам придётся повторять его каждый раз. Поэтому XML часто используют для конфигураций.
CSV
Очень не практичен.
Плюсы:
- можно открыть и отредактировать в Excel с уровнем подготовки "секретарша"
- в том же Excel можно сделать авто-фильтры и подготовить простую отчетность
- можно сделать импорт и экспорт в БД MySQL, у этой РСУБД есть для этого встроенные средства
Минусы:
- нет иерархии
- легаси - колонки: когда ваш CSV используется как выгрузка сотнями клиентов (обмен данными между системами), нельзя просто взять и удалить устаревшие колонки, все поедет
CSV будет получше обоих
Намного короче и читабельнее будет CSV, с разделителем -табуляцией
На совсем простых данных - возможно. Чуть усложните - и не будет преимуществ, а только одни недостатки.
что могут XML и JSON, чего не сможет CSV
Снова: иерархия, и сложности при изменении структуры документа.
JSON
Практичен.
Плюсы:
- иерархия
- schema-less
Минусы:
- не предусмотрены комментарии (которые предусмотрены в YAML)
- хуже читабельность, чем в YAML
- формат: только unicode
XML
Плюсы:
- иерархия
- любая кодировка
- механизм проверки схемы на основе XSD
- киллер-фича: возможность преобразования в XHTML / HTML / другой XML документ на основе декларативного XSL - очень мощная штука
- ссылки на другие части документа
Минусы:
- многословность
YAML
Добавил и про этот формат, для полной картины.
Плюсы:
- комментарии
- минималистичность
- ссылки на другие части документа
- возможность задания типа
Минусы: не могу указать, но конечно, они есть.
Что может XML, а не может JSON
В принципе, возможности сильно совпадают, либо в JSON "дорабатываются" путем программирования. Почему JSON лучше:
- XML труднее парсить
- JSON парсится в JS объект, готовый к использованию
Что нельзя в JSON:
1. Делать трансформацию документа через XSLT
было:
<?xml version="1.0" encoding="windows-1251"?>
<Offices>
<Office id="4">
<PersTitle>Москва</PersTitle>
</Office>
</Offices>
стало:
<?xml version="1.0" encoding="utf-8"?>
<companies>
<company>
<company-id>4</company-id>
<shortname lang="ru">Офис Москва</shortname>
</company>
</companies>
Трансформация осуществляется через XSLT, в виде декларативного синтаксиса, его я не привел, это целая наука. По сути это - шаблонизатор, встроенный, и очень мощный, не зависящий от языка программирования.
Ровно таким способом превращают XML в читаемый браузером HTML. С JSON придется использовать шаблонизатор или программировать.
2. Делать валидацию через XSD
Есть встроенный механизм валидации XSD на основе декларативного систаксиса. С JSON придется программировать.
3. Делать ссылки на другие части
Делается через XPointer. С JSON придется программировать.
4. Кодировка
Она важна, если приложение работает с несколькими системами, и не все понимают unicode. Часто какая-то система выдает документ в однобайтной кодировке, например cp1251, и просто нет выбора.
Пример: почему JSON/XML лучше CSV
Допустим, на сайте сделали выгрузку для партнеров: артикул-количество.
Все партнеры запрограммировали свои системы на такой формат.
Затем бизнес сказал: давайте удалим количество, будем выдавать ранг: 0 - нет на складе, ..., 10 - полная доступность.
В CSV придется делать третий столбец, а что писать во второй? Допустим, 0. Так и застрянет этот 0 в выгрузке.
С JSON/XML - написали новое поле, старое - удалили, у партнеров сломался импорт, они посмотрели почему - и поправили у себя. А с CSV у них так и будет 0 продукции, пока не заметят менеджеры.
Файлы * .csv всегда имеют множество проблем: когда разделители столбцов, границы столбцов, невидимые символы, такие как нулевые терминаторы \ 0, и разрывы строк CrLf находятся в середине фактических данных.
Самый надежный формат для перемещения данных - XML.
XML имеет следующие стандарты w3c, поддерживаемые API:
(1) XQuery
(2) XPath
(3) XSL:
(3.1) XSLT
(3.2) XSL-FO
(4) XSD (1.0 and 1.1)
(5) LINQ to XML
(6) etc.
