понедельник, 22 мая 2017 г.

JSON vs XML

JSON или XML? Какая из них лучше? Какой из них быстрее? Какой из них я должен использовать в своем следующем проекте? Прекратите! Эти вещи не сопоставимы. Это похоже на сравнение велосипеда и AMG S65. Серьезно, какой из них лучше? Они оба могут отвезти вас из дома в офис, не так ли? В некоторых случаях велосипед сделает это лучше. Но означает ли это, что их можно сравнить друг с другом? То же самое относится к JSON и XML. Это очень разные вещи с их собственными областями применения.

Here is how a simple JSON piece of data may look (140 characters):
{
  "id": 123,
  "title": "Object Thinking",
  "author": "David West",
  "published": {
    "by": "Microsoft Press",
    "year": 2004
  }
}
A similar document would look like this in XML (167 characters):
<?xml version="1.0"?>
<book id="123">
  <title>Object Thinking</title>
  <author>David West</author>
  <published>
    <by>Microsoft Press</by>
    <year>2004</year>
  </published>
</book>
 
Выглядит легко сравнивать, не так ли? Первый пример немного короче, его проще понять, так как он менее «загадочен», а также прекрасно разбирается в JavaScript. Вот и все. Давайте использовать JSON и объявим смерть XML! Кому нужен этот супертяжелый 15-летний XML?

Ну, на самом деле, мне он нужен, и я люблю его. Позвольте мне объяснить, почему.

И не пойми меня неправильно; Я не против JSON. Не за что. Это хороший формат данных. Но это всего лишь формат данных. Мы временно его используем для переноса части данных из точки A в точку B. В самом деле, он короче XML и более читаем. Вот и все.

XML - это не формат данных; Это язык. Очень мощный. Позвольте мне показать вам, на что он способна. Позвольте мне объяснить, почему я люблю его. И я настоятельно рекомендую вам прочитать XML в двух словах, третье издание Эллиотта Расти Гарольда и У. Скотта.

Я считаю, что существуют четыре особенности XML, которые серьезно отличают его от JSON или любого другого простого формата данных, например YAML.

XPath. Чтобы получить данные, такие как год публикации, из документа выше, я просто отправлю запрос XPath: / book / published / year / text (). Тем не менее, должен быть процессор XPath, который понимает мой запрос и возвращает 2004 год. Прелесть этого заключается в том, что XPath 2.0 является очень мощным механизмом запросов со своими собственными функциями, предикатами, осями и т.д. Вы можете в буквальном смысле сформировать запрос XPath без написания какой-либо логики перемещения в Java. Вы можете спросить: «Сколько книг было издано Дэвидом Уэстом в 2004 году?» И получить ответ, только через XPath. JSON даже не приближается к этому по возможностям.

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

XML-схема. Когда вы создаете XML-документ в одном месте, изменяете его несколько раз в другом месте, а затем переносите его в другое место, вы хотите убедиться, что его структура не нарушена ни одним из этих действий. Один из них может использовать <год> для хранения даты публикации, а другой использует <дата> с ISO-8601. Чтобы избежать этой неразберихи в структуре, создайте дополнительный документ, который называется XML Schema, и отправьте его вместе с основным документом. Все, кто хочет работать с основным документом, сначала подтвердят его правильность, используя предоставленную схему. Это своего рода интеграционное тестирование на производстве. RelaxNG - подобный, но более простой механизм; Попробуйте, если вы обнаружите, что XML-схема слишком сложна.
 
XSL. Вы можете вносить изменения в свой XML-документ без каких-либо Java / Ruby / etc.  вообще. Просто создайте документ преобразования XSL и примените его к исходному XML. В качестве результата вы получите новый XML. Язык XSL (кстати, чисто функциональный) предназначен для иерархических манипуляций с данными. Это гораздо более подходит для этой задачи, чем Java или любой другой ООП / процедурный подход. Вы можете преобразовать XML-документ во что угодно, включая обычный текст и HTML. Некоторые жалуются на сложность XSL, но, пожалуйста, попробуйте. Вам не понадобится вся эта сложность, в то время как его основная функциональность довольно проста.

Это не полный список, но эти четыре функции действительно много значат для меня. Они дают моему документу способность быть «самодостаточным». Он может проверять себя (XML Schema), он знает, как модифицировать себя (XSL), и это дает мне очень удобный доступ ко всему, что внутри него (XPath).

Есть много других языков, стандартов и приложений, разработанных вокруг XML, включая XForms, SVG, MathML, RDF, OWL, WSDL и т.д. Но вы менее склонны использовать их в основном проекте, поскольку они «нишевые».

JSON не предназначался для таких функций, хотя некоторые из них теперь пытаются найти свои места в мире JSON, включая JSONPath для запросов, некоторые инструменты для преобразований и json-schema для проверки. Но они всего лишь слабые пародии по сравнению с тем, что предлагает XML, и я не думаю, что у них есть будущее. Или скажем так: я бы хотел, чтобы они рано или поздно исчезли. Они просто превращают хороший, простой формат во что-то неповоротливое.

Таким образом, в заключение, JSON представляет собой простой формат данных без каких-либо дополнительных функций. Лучше всего использовать AJAX. Во всех остальных случаях я настоятельно рекомендую использовать XML.

Комментариев нет:

Отправить комментарий