— Как делишки?
— Отлично. Не жалуюсь. Сегодня Билаабо рассказал про JavaScript. Не все, конечно, но тоже немало. Я конечно еще на JS ничего не писал, но думаю, что это несложно.
А Элли рассказала про сериализацию в JSON. И ты рассказывал о Jackson framework и как настраивать «полиморфную десериализацию» с помощью аннотаций.
— Нифига себе, ты умный теперь, Амиго! Серьезный мужик!
— А то!
— Ладно. Давай к работе. Сегодня новая и интересная тема – XML.
XML – это стандарт представления данных, которые легко могут быть прочитаны человеком, и еще легче – программой. Пример xml-файла:
<data>
<owner first="Nikolay" last="Ivanovich">
<address>Moscow</address>
</owner>
<cat name="Murka" age="15"/>
</data>
Основа XML – это теги. Тег – это слово в треугольных скобках (знаки меньше и больше). Теги бывают открывающие и закрывающие. Одному открывающему всего соответствует один закрывающий тег. Открывающие теги могут иметь атрибуты.
В тег можно складывать другие теги, получая, таким образом, дерево элементов. Тег верхнего уровня называют корнем (root): у него есть дочерние теги, у них свои дочерние теги.
Примеры:
Тег | Описание |
---|---|
<data> | Открывающий тег «data» |
</data> | Закрывающий тег «data» |
<cat name="Murka" age="15"> | Тег с атрибутами. Значения атрибутов берутся в кавычки |
<data> <owner> <cat name="Murka"/> </owner> </data> |
Вложенные теги. |
<cat name="Murka" age="15" /> | Автозакрывающийся тег. Такому тегу не нужен закрывающий. Не может содержать дочерние теги. |
<info> Тут может быть любая информация </info> |
Тег может содержать текстовые данные |
<info> Тут может <data xxx="yyy"> </data> быть любая <data 2xxx="yyy"/> информация </info> |
Тег может содержать текстовые данные и другие теги вперемешку. |
— Выглядит несложно. А какие теги бывают?
— Любые. Никаких зарезервированных тегов нет. XML – это язык, для описания любых данных. Люди сами придумывают теги для своих нужд и договариваются, как их использовать.
Фактически, XML – это способ записать данные в виде дерева элементов, понятный компьютеру.
— Вроде ясно. Кстати, у меня вопрос.
Вот JSON используется для передачи данных с браузера на сервер, а где используется XML?
— Да там же, где и JSON: для хранения и передачи данных.
Ладно, продолжим.
Представь, что есть один общий XML-файл, который хранит данные программы, которую пишут двадцать человек. Тогда каждый из них придумывает теги для себя и очень скоро они начинают мешать друг другу.
Чтобы гарантировать уникальность тегов, им были придуманы префиксы. Выглядит это так:
Теги | Описание |
---|---|
<animal:cat> | Тег cat с префиксом animal |
<animal:cat> </animal:cat> <zoo:cat> </zoo:cat> |
Два тега cat с разными префиксами. |
<animal:cat zoo:name="MX"> | Тег cat с префиксом animal, атрибут name с префиксом zoo. |
Префиксы еще называют namespace – пространство имен. Тогда последнее предложение в таблице будет звучать так «Тег cat из пространства имен animal с атрибутом name из пространства имен zoo».
Кстати, помнишь в Java у класса есть короткое имя, а есть длинное уникальное имя, в которое входит название пакета, его еще указывают при импорте?
— Ага.
— Так вот, у префиксов тоже есть уникальное длинное имя и его тоже указывают при импорте:
<data xmlns:soap="http://cxf.apache.org/bindings/soap"> <soap:item> <soap:info/> </soap:item> </data>
«xmlns:soap» значит «XML—namespace SOAP»
Более того, если есть теги без префикса, можно задать и их уникальное имя:
<data xmlns="http://www.springframework.org/schema/beans" xmlns:soap="http://cxf.apache.org/bindings/soap" xmlns:task="http://www.springframework.org/schema/task"> <soap:item> <soap:info/> <task:info/> </soap:item> </data>
«xmlns=…» задает namespace для пустого префикса – т.е. для тегов без префикса, таких как data.
В документе может быть сколько угодно namespace, но у каждого должно быть свое уникальное имя.
— Ясно. А почему такие странные «уникальные имена» у этих namespace?
— Обычно там указывают URL, по которому находится документ, который описывает этот namespace и/или его XML-теги.
— Не так уж и мало на меня сегодня вылили информации. Что еще?
— Еще немного осталось.
Во-первых, у XML есть заголовок – специальная строка, которая описывает версию этого XML и кодировку файла.
Выглядит она обычно так:
<?xml version="1.0" encoding="UTF-8"?>
<data xmlns:soap="http://cxf.apache.org/bindings/soap">
<soap:item>
<soap:info/>
</soap:item>
</data>
Еще в XML можно вставлять комментарии. Для начала комментария используют «<!—», а для конца «—>».
<?xml version="1.0" encoding="UTF-8"?>
<data xmlns:soap="http://cxf.apache.org/bindings/soap">
<soap:item>
<!-- <soap:info/> -->
</soap:item>
<!-- это тоже комментарий -->
</data>
— Пока понятно.
— Из-за того, что в XML используются символы « < > “ &», их нельзя использовать в других местах. Для их описания используют так называемые «эскейп последовательности» — набор символов для представления других символов/символа. Вот список некоторых из них:
Escape-последовательность | Символ, который она заменяет |
---|---|
& | & |
" | " |
< | < |
> | > |
' | ‘ |
А вот пример кода, который хранится в XML:
Java-код | Он же, в XML |
---|---|
|
<code> if (a < b) System.out.println("a is minimum"); </code> |
— М-да. Выглядит не очень красиво.
— А ты помнишь, в Java тоже экранируются некоторые символы — например «\». И тоже для его написания в строке приходится писать его дважды. Так что это часто встречаемое явление.
— Ок.
— У меня на сегодня все.
— Ура. Наконец-то я отдохну.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ