— Як справи?
— Чудово. Не скаржуся. Сьогодні Білаабо розповів про 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< /span> з префіксом 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< /span>="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 теж екрануються деякі символи. наприклад "\". І теж для його написання у рядку доводиться писати його двічі. Так що це найпоширеніше явище.
— Ок.
— У мене сьогодні все.
— Ура. Нарешті я відпочину.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ