XML и текстовые файлы с разделителями-запятыми

Хорошо, я прочитал пару книг по XML и написал программы, чтобы выплюнуть его, а что нет. Но вот вопрос. Оба файла с разделителями-запятыми и XML файл являются "удобочитаемыми". Но в целом, файл с разделителями-запятыми гораздо проще на моих глазах, чем файл XML; теги обычно занимают столько же, сколько не больше места, чем данные. Это просто затмевает то, что я читаю, и формат может содержать страницу, содержащую ту же информацию, которую вы можете содержать в одной строке текста в файле с разделителями-запятыми. И файл с разделителями-запятыми значительно менее сложный для синтаксического анализа. Итак, реальный вопрос - почему XML? Просто потому, что все классные дети это делают?

Ответы

Ответ 1

Это не единственные два варианта, вы также можете использовать JSON или YAML, которые намного легче, чем xml.

В общем, если у вас есть простые табличные данные со многими специальными символами, CSV - это не плохой выбор. Для структурированных данных рассмотрите возможность использования одного из других 3.

Ответ 2

<сильные > Преимущества

Множество преимуществ XML над CSV:

  • Организация иерархических данных
  • Автоматическая проверка данных (XML-схемы или DTD)
  • Легко конвертировать форматы (используя XSL)
  • Легко идентифицировать реляционную структуру
  • Может использоваться в сочетании с XML-RPC
  • Подходит для сохранения объектов (сортировки)
  • Упрощает взаимодействие между предприятиями.
  • Полезные технологии (XPath, DOM)
  • Тесная интеграция с современными веб-браузерами
  • Инструменты извлечения, преобразования и загрузки (ETL)
  • Обратная совместимость формата файла (атрибут версии)
  • Цифровые подписи

Это полностью зависит от проблемной области и того, что вы пытаетесь решить.

Пример

Последний элемент - это то, что многие люди пропускают при написании веб-страниц. Рассмотрим ситуацию, когда у вас есть большое хранилище данных песен. Песни имеют художников, альбомы, удары в минуту и ​​т.д. Вы можете экспортировать данные в XML, написать простую таблицу стилей, чтобы отобразить XML как XHTML, а затем указать браузер на странице XML. Браузер отобразит XML как веб-страницу.

Вы не можете сделать это с помощью CSV.

Недостатки

Joel Spolsky отличная статья о том, почему XML - это плохой выбор в качестве сложного хранилища данных: он медленный. (В отличие от базы данных, которая может извлекать предыдущие или следующие записи с помощью одной инструкции CPU, перемещение записей в документе XML происходит намного медленнее.) Возможно, это можно рассматривать как проблему оптимизации, разрешенную ждет 18 месяцев. Таким образом:

  • Медленнее разбора других форматов
  • Синтаксическая избыточность может ухудшить читаемость.
  • Наращивание документов может повлиять на затраты на хранение
  • Невозможно легко смоделировать перекрывающиеся (неиерархические) структуры данных
  • Плохо оформленные форматы файлов XML не являются редкостью (по моему опыту, цитата)

Связанный с нами вопрос

См. также: Почему я должен использовать формат файла для чтения человеком.

Ответ 3

XML поддерживает сложное, структурированное и иерархическое представление вещей. Это далеко не то, что CSV может хранить тривиально.

Подумайте о графе сложных объектов в объектно-ориентированной среде. Его можно легко сериализовать как XML-документ, но CSV не может справиться с такой задачей.

Ответ 4

Все зависит от того, что вам нужно делать. Если вам нужна более сложная структура данных, чем может дать простая "плоская" структура строк. например, иерархические данные, тогда XML - отличный выбор.

Ответ 5

Хорошо XML является читабельным человеком и редактируется человеком. Вы можете посмотреть XML файл и точно знать, что это такое. Файл CSV является читабельным человеком, но вы не знаете, что означает каждое значение.

Например, если мы храним учетные записи пользователей, которые вы бы предпочли?

<user>
    <username>ryeguy</username>
    <password>abc123</password>
    <regdate>3-4-08</regdate>
    <email>[email protected]</email>
</user>

ИЛИ

ryeguy,abc123,3-4-08,[email protected]

Конечно, это всего лишь пример, но представьте себе это с 30 полями или около того!

Или, что еще хуже, что делать, если мы делаем подполя?

<user>
    <username>ryeguy</username>
    <password>abc123</password>
    <regdate>3-4-08</regdate>
    <email>[email protected]</email>
    <posts>
        <post>
            <id>34</id>
            ....
        </post>
    </posts>
</user>

Это было бы болью в заднице, чтобы вставить CSV. Вскоре вы создадите собственный язык запросов.

Ответ 6

Тот факт, что XML является читаемым человеком, не означает, что это было сделано с мыслью о том, что он читает (или даже редактирует) людей.

XML имеет хороший набор свойств, которые делают его хорошим выбором для многих случаев, особенно когда у вас есть человеческие ресурсы, чтобы справиться с дополнительным бременем, которое неизбежно принесут такие свойства: валидация, четко определенный стандарт, много инструменты, очень гибкая архитектура, она хорошо отображает древовидную модель, которая используется многими программами. Его человеческая читаемость является добавленной стоимостью, которая упрощает отладку (попробуйте выполнить отладку двоичного файла...), осмотр и небольшие изменения для тривиальных случаев.

CSV, с другой стороны, легко, быстро и линейно, хотя существует много диалектов, а синтаксический анализ его хорошо далеко от тривиального (и с добавленной проблемой, что он выглядит тривиально!). Для большинства приложений, содержащих таблицу данных, CSV - идеальный выбор.

В общем, однако, есть случаи представления данных, которые вы можете решить с помощью XML, но вы не можете решить с помощью CSV (например, дерева). С другой стороны, любые данные, которые могут быть представлены в CSV, также могут быть представлены в XML, хотя он не гарантирован (и действительно также проверен), что он будет более эффективным (с точки зрения пространства, простоты разбора и т.д.). Это вопрос "степеней свободы" вашего формата. XML имеет более высокое значение степени свободы. CSV ниже. Обман по XML также относится к этому факту.

Не становитесь жертвой синдрома молота: когда у вас есть молот (XML), все выглядит как гвоздь (что-то, что вам нужно решить с помощью XML). Реальность сильно отличается и нюансирована. XML классный, но это не ответ на любую проблему.

Ответ 7

CSV никогда не был стандартом. Как раз тот же быстрый и грязный метод, с которым собралось множество людей. Конечно, некоторые из этих людей были умнее других и поняли, что вам нужно бежать от персонажей, а другие - нет. Даже MSSQL экспортирует CSV неправильно. Существует документированный ПРАВОный способ делать XML, поэтому, если вы делаете это правильно, а какое-то приложение или что-то еще не принимает его, у вас есть какое-то влияние, когда вы говорите "Это не моя вина".

Ответ 8

XML будет описывать контент, а также имеет тонну поддерживающих библиотек на разных языках... но он может быть раздутым. Если принимающий конец csv знает о макете, и он является табличным, я не вижу в этом ничего плохого.

Ответ 9

Xml может быть проверен по контракту (схема или DTD).

Ответ 10

В XML также есть бесплатные технологии, окружающие его: XmlDom, XPath, XSLT, XSD, Xml Schemas

Ответ 11

Среди причин, которые вы можете предпочесть XML по сравнению с CSV (в зависимости от задачи): * Практически все платформы и языки имеют существующие библиотеки для чтения, записи, разбора и управления XML. * XML имеет четко определенные правила для кодирования всех символов. CSV имеет неоднозначность, например, как кодировать запятые, которые являются частью данных. * XML поддерживает различные формы данных (например, иерархические), где CSV наиболее полезен, когда данные выглядят как таблица (строки и столбцы).

Ответ 12

Мне нравится думать о главном различии в этом случае, поскольку XML основан на TREE, в то время как CSV TABLE-based.

То есть вы можете вложить и повторно вложить и опустить и вообще создать сложную структуру TREE в XML, тогда как вы можете делать только простые 2D-таблицы в CSV.