Есть ли у 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/

обнаружил две вещи.

  1. принципиальным преимуществом XML перед JSON есть какие то "метаданные", и ни одного внятного примера "что и зачем" и в чем победа )). Вопрос №1 - есть ли что в XML, чего не сможет JSON. Ну и нормальный пример про это ))
  2. все примеры наводят на мысль о том, что CSV будет получше обоих. Например:

пример сравнения JSON и XML

Намного короче и читабельнее будет CSV, с разделителем -табуляцией!!

firstName   lastName
John        Doe
Anna        Smith
Peter       Jones

Итого вопрос №2 - что могут XML и JSON, чего не сможет CSV?


Ответы (3 шт):

Автор решения: CrazyElf

CSV удобнее только в том случае, когда у вас табличные данные - строго прямоугольные по форме (например, только числовые либо короткие текстовые поля, обязательные для всех записей). А если у вас сильно вложенные структуры, да с разным числом элементов, какие-то поля есть, каких-то нет, да плюс ещё в данных длинные строки разной длины, то все преимущества CSV сходят на нет, потому что у вас либо "поедет" вся красота, либо вам придётся отводить под столбцы место какого-то гигантского размера, чтобы уместилось самое длинное значение и вы будете бесконечно скроллировать данные, чтобы посмотреть что-то в дальних столбцах. И это всё-равно не решит проблему сильной вложенности разного кол-ва элементов.

JSON с данными разной длины и вложенности будет выглядеть гораздо нагляднее.

Насчёт XML ничего не скажу - сам его не люблю, за избыточность разметки. Хотя вот @Insolor правильно дополнил в комментариях, что в принципе XML может ссылаться на собственные элементы, а в JSON вы не можете несколько раз сослаться на один и тот же элемент в разных местах, вам придётся повторять его каждый раз. Поэтому XML часто используют для конфигураций.

→ Ссылка
Автор решения: Total Pusher

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 продукции, пока не заметят менеджеры.

→ Ссылка
Автор решения: Yitzhak Khabinsky

Файлы * .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.

→ Ссылка