XML - это всерьёз и надолго

Что такое XML для программистов и пользователей

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

Итак, давайте, во-первых, расшифруем аббревиатуру XML, в которой, как оказывается, ничего загадочного-то и нет... XML - это eXtensible Markup Language, что в переводе значит "расширенный язык разметки". Вроде бы, не очень-то понятно на первый взгляд, не так ли? Однако на самом-то деле всё довольно просто. XML - это способ записи данных в структурированном виде, который будет читаем для пользователя, но при этом удобен для обработки программному обеспечению. Вот пример данных в виде 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-документах, это подтверждение того, что формат действительно XML, а не что-нибудь другое. Кроме того, она имеет ещё одну важную функцию - в ней указывается кодировка символов, используемых в документе. После этой опознавательной строки следует, собственно, содержимое документа. Наименьший "кусочек" документа, ограниченный парой "скобок" < и >, - это тег. Такое название пришло из языка гипертекстовой разметки HTML, который используется во Всемирной паутине для оформления web-страниц. XML вообще "вырос" из HTML, но об этом дальше. При помощи тегов формируются элементы документа - данные, ограниченные парой тегов <tag> и </tag>. Элементы могут содержать в себе атрибуты - например, во второй строке нашего с вами примера атрибутами элемента Recipe будут name, prep_time и cook_time. Также внутри этого элемента ещё содержатся другие, вложенные элементы - это содержимое элемента. Вместо пары тегов для обозначения границ элемента может использоваться один тег вида <tag/>, но тогда у такого элемента не может быть вложенных элементов.

Как видите, содержимое XML-документа можно представить в виде дерева. Не того, которое растёт за окном, а в виде древовидной структуры данных. При этом стандарт XML требует, чтобы у этого дерева был "ствол" - корневой элемент, который будет содержать внутри себя все остальные. Корневой элемент должен быть единственным, то есть XML-документ, где два и больше корневых элементов, - это документ, сформированный неправильно.

Как и в HTML-разметке, специальные символы (амперсанд - &, знаки неравенства, кавычки и апостроф) должны быть записаны в виде специальных символьных комбинаций, которые называются предопределёнными сущностями. Аналогично можно вставлять ссылки на сущности - это символическая замена какой-либо сущности (то есть комбинации символов) выражением вида "&имя_сущности;" (без кавычек в документе). При этом ссылка может быть на предопределённую сущность или на какую-то сущность, хранящуюся в DTD-документе.

DTD (Document Type Definition - описание типа документа) - документ, в котором описывается структура XML-документа. В последнее время формат описания структуры DTD всё больше меняется на XML Schema, поскольку последний стандарт рекомендован консорциумом W3. Оба эти формата описывают, какие элементы должен содержать в себе XML-документ, какими атрибутами могут обладать эти самые элементы и какого типа должны быть значения атрибутов и элементов.

Синтаксисы DTD и Schema существенно отличаются. Описание документа при помощи DTD выглядит примерно следующим образом:

<!ELEMENT list (item*)>
<!ELEMENT item (par1, par2?)>
<!ELEMENT par1 (#PCDATA) >
<!ELEMENT par2 (#PCDATA) >

Здесь мы видим следующую картину: корневой элемент - это list, а элементы, содержащиеся внутри него, - это item. Значок "*" означает, что этих элементов может быть любое число, от 0 до практически бесконечности. Каждый элемент item содержит в себе элементы par1 и par2, причём значок вопроса означает, что присутствие par2 не является обязательным.

С помощью 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-разметку (собственно, если присмотреться, это она и есть). В общем-то, поэтому и происходит медленная, но верная, а главное - повсеместная замена DTD на XML Schema.

Возникновение и развитие XML как международного стандарта было обусловлено множеством причин. Но вряд ли XML был бы таким, каким мы видим его сейчас, если бы в мире не существовало другого стандарта - HTML. Именно из него в своё время развился XML. Собственно, если разобраться, то сейчас уже можно сказать, что HTML - это такой частный случай XML, который описывает форматирование текста и вставку в него картинок, флэш-мультиков, ссылок, раскраску фона и прочие вещи. То есть создатели XML просто расширили эту концепцию, позволив с помощью тегов описывать любые данные любой сложности. То есть, фактически, если данные можно представить в виде древовидной структуры, то их можно "запихнуть" в XML-документ. Активное применение этого правила можно уже сейчас увидеть на примере... да чего далеко ходить за примерами? Возьмём, например, тот же Microsoft Office 2007. Новый формат этого пакета представляет собой совокупность XML-документов, которые сохраняются в одном архиве. В этом случае XML, как и HTML, описывает форматирование текста и прочих элементов на страницах, только, естественно, уже при помощи иной, отличной от HTML, разметки.

XML в последнее время начинает использоваться всё более активно по всему миру. И на то есть множество объективных причин. Одной из главных специалисты обычно называют доступность XML для чтения человеком. Собственно, это, конечно, само по себе неплохо, однако при этом XML довольно удобно обрабатывать и компьютерными средствами, то есть с помощью специального программного обеспечения. Именно поэтому XML и стал столь популярной формой хранения информации и нашёл применение в таком большом количестве разнообразных технологий. Это стало причиной того, что сейчас в мире существует великое множество инструментов для работы с XML, которые могут применять как программисты, так и конечные пользователи программного обеспечения. Это тоже можно считать отдельным достоинством XML как стандарта, хотя это всего лишь следствие других достоинств XML. Также большим плюсом XML является то, что этот стандарт позволяет описывать данные практически любой структуры и сложности, поскольку данные представляются в древовидной форме. К тому же, поскольку любые данные в XML - это просто текст, то и работать с ними можно как с текстом: кодировать, набирать XML-документы в блокноте, а в случае потери части данных остальные будут по-прежнему читабельны. Кроме того, поскольку XML - это просто текст, то его можно использовать на любой платформе.

Очень широкое применение стандарт XML нашёл во Всемирной паутине. На базе XML разработана технология XSL, с помощью которой XML-документы преобразуются специальным образом, в соответствии со стандартами и правилами, в HTML-документы, которые уже можно отображать в браузере. Хотя на самом деле суть технологии XSL значительно шире, и её можно применять для преобразования XML-документа в практически любой формат.

Существует большое количество подмножеств XML, которые привязывают этот язык разметки к конкретным сферам человеческой деятельности. Например, MathML - это специальный, основанный на XML язык для записи математических выражений и формул. Существуют аналогичные языки для химических формул, для описания графов. Есть свои языки для медицинской электронной документации, а также подмножество XML, основанное на HTML - XHTML.

Чем знания об XML пригодятся тому, кто считает себя "просто пользователем"? Сложно сказать. Скорее всего, тот, кто не лезет во внутренности программ, не столкнётся с XML непосредственно. Он будет работать с программой, даже не подозревая, что в её недрах используется эта самая технология. Впрочем, знания ещё никому не повредили!

Вадим СТАНКЕВИЧ

Версия для печатиВерсия для печати

Номер: 

02 за 2007 год

Рубрика: 

Internet
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!
 

Комментарии

Аватар пользователя Инкогнито
>В последнее время формат описания структуры DTD всё больше меняется на XML Schema, поскольку последний стандарт рекомендован консорциумом W3.

В последнее время XML Schema меняется на Relax NG :-)

Аватар пользователя Инкогнито
Предположим, один из атрибутов является символьной строкой, заключённой, как положено, в кавычки. А что, если сама эта строка должна содержать кавычку - как они кодируются?
Аватар пользователя Вадим Станкевич
Для атрибутов используются двойные кавычки. То есть, если встречается два идущих подряд символа кавычек (""), то они заменяются одним на выходе и не рассматриваются как управлющий символ. При этом в именах атрибутов символов кавычек содержаться не должно.
Аватар пользователя Инкогнито
Чего вы паритесь все они произошли от GML
Аватар пользователя Bob
Relax NG рулит намного больше чем Schema ИМХО. А вообще XML достал - на 10 процентов информации 90 процентов тэгов...
Аватар пользователя Инкогнито
>Bob

>Relax NG рулит намного больше чем Schema ИМХО. А вообще XML достал - на 10 процентов информации 90 процентов тэгов...

ну это какая у тебя информация. Может ты скажешь что CSV тоже рулит в инете :)

Аватар пользователя Ламер
В XML определены два метода записи специальных символов: ссылка на сущность и ссылка по номеру символа. Сущностью (англ. entity) в XML называются именованные данные, обычно текстовые, в частности спецсимволы. Ссылка на сущность (англ. entity references) указывается в том месте, где должна быть сущность и состоит из амперсанда («&»), имени сущности и точки с запятой («;»). Полный список предопределённых сущностей состоит из & («&»), < («<»), > («>»), ' («'»), и " («"») — последние две полезны для записи разделителей внутри значений атрибутов. (http://ru.wikipedia.org/wiki/XML)
Аватар пользователя Инкогнито
Согласен с мнением что XML - "на 10 процентов информации 90 процентов тэгов"

Хорошая альтернатива - JSON

Аватар пользователя mr
)

учите теорию граматику + фрэймворки для работы с ней и создавайте себе форматы данных + парсеры + сериализаторы хоть по 2 раза на дню

кстати ни один из фанатов relaxng не смог мне объяснить чем "Relax NG рулит намного больше чем Schema" - фактов не дали - одни эмоции.

relaxng - мёртвый стандарт до тех пор пока не появится нормальной поддержки к примеру уровня xmlbeans jaxb(не та альфа версия которая есть сейчас)