2009-07-17 2 views
11

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

+0

Понятие о том, что есть инструменты, доступные для него, основано на идее, что она широко принята для начала. Но с точки зрения синтаксиса, почему? Та же информация могла бы быть представлена ​​в гораздо более сжатом виде. Это похоже на чтение некоторых характеристик, которые я получаю на работе, 10 страниц плиты котла, на 3 страницы информации. Это не дает мне веских оснований для ПОЧЕМУ, что он использовался на первом месте. – NoMoreZealots

ответ

11

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

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

+0

+1: Многие забывают, что есть форматы помимо XML, которые делают почти то же самое. Я никогда не работал с YAML, но JSON - отличная «легкая» альтернатива XML (не говоря уже о том, что проще разбираться на большинстве языков программирования). –

+0

О, geeze, это приятно Я искал некоторые ЯМЛ и JSON. И это ДЕЙСТВИТЕЛЬНО дает мне мой ответ. Существуют, безусловно, более совершенные форматы, отличные от формата, чем XML. – NoMoreZealots

+0

Для многих случаев JSON определенно лучше работать с XML. Там, где XML усиливает тягу, при работе со стандартизованными схемами и при объединении схем вместе (пространства имен - одна хорошая идея!). Если вам это не нужно, и особенно если вы создаете специальный формат для своих нужд, перейдите в JSON или YAML. – jcdyer

4

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

6

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

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

+0

Хорошо, я дам иерархический против CSV. Но если я думаю о сложной объектно-ориентированной среде, синтаксис для представления данных на C++ или Java намного легче. Я действительно думал о написании парсера данных стиля C-Structure, потому что синтаксис настолько чище. – NoMoreZealots

2

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

+0

хороший пример: как вы имеете дело с данными, содержащими запятую в CSV? XML имеет документированный ПРАВО-способ борьбы с такими случаями. – russau

+0

CSV является стандартом: http://www.rfc-editor.org/rfc/rfc4180.txt – pmf

+0

Это не повод для использования XML. –

1

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

1

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

16

Преимущества

ряд преимуществ XML имеет более CSV:

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

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

Пример

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

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

Недостатки

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

  • Медленнее для разбора, чем другие форматы
  • синтаксических избыточность может ухудшить читаемость
  • раздувание
  • Документ может повлиять на затраты на хранение
  • не может легко моделировать перекрытием (неиерархические) структуры данных
  • Плохо (в моем опыте, ссылки)

Вопросы, относящиеся

См. Также: Why Should I Use A Human Readable File Format.

+1

+1 точно, есть целая экосистема инструментов и спецификаций вокруг XML. Еще один: цифровые подписи XML предоставляют вам стандартный способ аутентификации данных. http://www.w3.org/Signature/ –

4

Хорошо 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. Скоро вы создадите свой собственный язык запросов.

+0

Не знаю, формат файла на самом деле занимает больше места, чем фактический DATA. DATA, т. Е. Материал, который вам действительно нужен, чтобы ЗНАТЬ! Если я делаю это из программы, а не вручную, то хорошо « data» - это всего лишь материал, который я должен забивать с помощью HD и тратить часы на циклы, и для больших файлов он не является ДЕЙСТВИТЕЛЬНО читаемым в любом случае , – NoMoreZealots

+0

Возможно, вы хотите, чтобы строка заголовка типа «имя пользователя, пароль, регат, электронная почта» была первой, и если вы действительно не можете запомнить свои поля. – erjiang

3

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

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

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

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

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

+0

Мне нравится комментарий молотка. Bob Fett просто кажется, хорошо немой по сравнению с Бобом, Феттом, 100. – NoMoreZealots

1

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

2

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

1

Мне нравится думать о главном различии в этом случае, поскольку XML основан на TREE, в то время как CSV основан на ТАБЛИЦЕ.

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

Смежные вопросы