XML – одна из самых широко используемых в современном интернете технологий работы с данными. Однако в чём именно она заключается, в состоянии сказать лишь немногие пользователи Глобальной сети. Давайте попробуем вместе разобраться в XML и альтернативных ему форматах.
Что такое XML?
XML – это eXtensible Markup Language, что в переводе значит «расширенный язык разметки». Фактически, это способ записи данных в структурированном виде, который будет читаем для пользователя, но при этом удобен для обработки программному обеспечению. Вот пример данных в виде XML:
<?xml version="1.0" encoding="UTF-8"?> <Recipe name="хлеб" prep_time="5 мин" cook_time="3 час"> <title>Хлеб</title> <ingredient amount="3" unit="стакан">Мука</ingredient> <ingredient amount="0.25" unit="грамм">Дрожжи</ingredient> <ingredient amount="1.5" unit="стакан">Тёплая вода</ingredient> <ingredient amount="1" unit="чайная ложка">Соль</ingredient> <Instructions> <step>Смешать все ингредиенты и тщательно замесить.</step> <step>Закрыть тканью и оставить на один час в тёплом помещении.</step> <step>Замесить ещё раз, положить на противень и поставить в духовку.</step> </Instructions> </Recipe>
Догадались, что это? Кулинарный рецепт. Примерно так может выглядеть запись рецепта внутри XML-базы данных. Давайте посмотрим на него внимательнее. Такая первая строка обязательно присутствует во всех XML-документах, это подтверждение того, что формат действительно XML, и, кроме того, в ней указывается кодировка символов, используемых в документе. После неё уже следует собственно содержимое документа. Наименьший «кусочек» документа, ограниченной парой «скобок» < и > называется тегом. Такое название пришло из языка гипертекстовой разметки HTML, который используется во Всемирной паутине для оформления Web-страниц. При помощи тегов формируются элементы документа – данные, ограниченные парой тегов <tag> и </tag>. Элементы могут содержать в себе атрибуты – например, во второй строке нашего с вами примера атрибутами элемента Recipe будут name, prep_time и cook_time. Также внутри этого элемента ещё содержатся другие, вложенные элементы – это содержимое элемента. Вместо пары тегов для обозначения границ элемента может использоваться один тег вида <tag/>, но тогда у такого элемента не может быть вложенных элементов.
Содержимое XML-документа можно представить в виде древовидной структуры данных. При этом стандарт XML требует, чтобы у этого дерева был «ствол» ‑ корневой элемент, который будет содержать внутри себя все остальные, и такой корневой элемент должен быть единственным. Как и в HTML-разметке, специальные символы (амперсанд «&», знаки неравенства, кавычки и апостроф) должны быть записаны в виде специальных символьных комбинаций, которые называются предопределёнными сущностями. Аналогично можно вставлять ссылки на сущности – это символическая замена какой-либо сущности (то есть комбинации символов) выражением вида «&имя_сущности;» (без кавычек в документе). При этом ссылка может быть на предопределённую сущность или на какую-то сущность, хранящуюся в DTD-документе.
Что такое DTD?
DTD (англ. Document Type Definition – описание типа документа) – документ, в котором описывается структура XML-документа. Описание документа при помощи DTD выглядит примерно следующим образом:
<!ELEMENT list (item*)> <!ELEMENT item (par1, par2?)> <!ELEMENT par1 (#PCDATA) > <!ELEMENT par2 (#PCDATA) >
Здесь мы видим следующую картину: корневой элемент – это list, а элементы, содержащиеся внутри него – это item. Значок «*» означает, что этих элементов может быть любое число, от 0 до практически бесконечности. Каждый элемент item содержит в себе элементы par1 и par2, причём значок вопроса означает, что присутствие par2 не является обязательным.
В последнее время формат описания структуры DTD всё больше меняется на XML Schema. Оба эти формата описывают, какие элементы должен содержать в себе XML-документ, какими атрибутами могут обладать эти самые элементы и какого типа должны быть значения атрибутов и элементов. Синтаксисы DTD и Schema существенно отличаются. С помощью Schema то же самое можно записать следующим образом:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="list" type="List"/> <xs:complexType name="List"> <xs:sequence> <xs:element name="par1" type="xs:string"/> <xs:element name="par2" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:schema>
Как видите, описание документа при помощи Schema больше похоже на саму XML-разметку (собственно, если присмотреться, это именно она и есть).
JSON – первая альтернатива XML
Несмотря на то, что XML – очень распространённый способ записи данных, он не является единственным и неповторимым в своём роде. Одна из альтернативных текстовых форм записи данных называется JSON. Расшифровывается эта аббревиатура как JavaScript Object Notation – что-то вроде «запись объектов с помощью JavaScript». Стоит отметить, что для пользователя этот формат, на мой взгляд, удобнее, чем XML. Для того, чтобы это утверждение не выглядело голословным, приведу пример данных в JSON-представлении:
var earth = { "planet" : { "name" : "earth", "type" : "small", "info": [ "Earth is a small planet, third from the sun", "Surface coverage of water is roughly two-thirds", "Exhibits a remarkable diversity of climates and landscapes" ] } };
Пользователю гораздо проще, как говорится, отделить зёрна от плевел, чем в случае с XML, поскольку нет открывающих и закрывающих тегов. Это, кстати, приводит и к тому, что на больших объёмах данных экономится память, которую эти теги занимают. Программистам будет приятно узнать, что JSON лучше, чем XML, подходит и для использования в AJAX. Основное его преимущество – в простоте обработки JSON-данных на стороне клиента.
Вторая альтернатива: YAML
YAML – это рекурсивная аббревиатура, которая расшифровывается как «YAML Ain't Markup Language» (по-русски это будет звучать как «YAML не является языком разметки»). Чем он при этом является, правда, его создатели уточнять не берутся, но, пожалуй, определение «язык разметки» будет всё-таки довольно подходящим. Чем YAML отличается от XML? Компактностью представления данных и удобством их редактирования для человека. Вот как выглядят данные, записанные с помощью YAML:
--- - - PRIVMSG - newUri - '^http://.*' - - PRIVMSG - deleteUri - ^delete.* - - PRIVMSG - randomUri - ^random.*
YAML-разметка в больших документах больше подходит для их ручного редактирования, поскольку здесь теги не загромождают смысловую часть документа. Сейчас YAML применяется активно в некоторых инструментах программирования, но в целом эта технология ещё довольно молода, а потому не слишком распространена.
Зачем нужны XML, JSON, YAML?
XML и альтернативные форматы в последнее время начинают использоваться всё более активно по всему миру. И на то есть множество объективных причин. Одной из главных специалисты обычно называют доступность этих форматов для чтения как человеком, так и компьютером. Сейчас в мире существует великое множество инструментов для работы с XML, которые могут применять как программисты, так и конечные пользователи программного обеспечения.
Также большим плюсом XML и прочих подобных форматов является то, что они позволяют описывать данные практически любой структуры и сложности, поскольку данные представляются в древовидной форме. К тому же, поскольку любые данные в них – это просто текст, то и работать с ними можно как с текстом: кодировать, набирать XML-документы в блокноте, а в случае потери части данных остальные будут по-прежнему читабельны. Кроме того, текст можно использовать на любой платформе.
Что касается XML, то очень широкое применение этот стандарт нашёл во Всемирной паутине. На базе XML разработана технология XSL, с помощью которой XML-документы преобразуются специальным образом, в соответствии со стандартами и правилами, в HTML-документы, которые уже можно отображать в браузере. Хотя на самом деле суть технологии XSL значительно шире, и её можно применять для преобразования XML-документа в практически любой формат. JSON и YAML используются пока что реже, но у этих технологий большой потенциал, связанный с развитием Web 2.0, и в интернете можно найти всё больше мест, где они также применяются.
Комментарии
JSON используется реже?
Я уже лет 5 xml новых проектов на xml не видел. он используется там, где его ещё не успели заменить.
Раз уж идет разговор об альтернативах, то в тему было бы упомянуть еще формат HOCON, в который заложено достаточно много полезностей (а не просто более удобочитаемый формат).
Коротко, но толково