XML - способ представления структурированных данных. Ну, чтобы с ними было потом легче работать.
Язык разметки - разделение данных на составные части.
HTML - не абстрактные данные, а просто html-страничку.
У всех ЯР - один "-". Они не универсальны.
XML - постарались сделать универсальный, расширяемый язык разметки данных.
Он не один - это типовой стандартный ЯР, представленный Web3org. Есть параллельные стандарты.
Например, для передачи данных - json or YАML.
Extandable Markup Language - XML.
1. Ща XML - абсолютно универсальный ЯР данных, расширяемый.
2. Независимость от платформы, ОС и программ обработки.
3. Позволяет сохранять структуру у метаданные, обязательную инфу о том, что мы собираемся сохранить, передать, перетащить. Т.е. представление произвольных данных и дополнительный метаинформации.
Прайс-лист, платежка, которую мы отправляем - это данные.
XML - документ, базирующийся стандарт. У XML - ед. измерения, квант - это документ, просто готовый документ.
Документ может содержать:
- данные (просто текст). Типа, просто текстовый документ, блокнотик. Ща уже никто так не пишет, никто не пишет в блокнот.
- структура. Нужно структурирование. Что мы предлагаем, кто мы такие и т.д. Главы, подглавы, разделы, подразделы и т.д.
- представление. То, как мы его увидим на экране или принтере.
HTML - описание довольно примитивной странички, много уступающего тому же верду.
XML - тут нет уровня представления. Описывает ТОЛЬКО ДАННЫЕ И ТОЛЬКО ОТНОШЕНИЯ.
Как отобразится это на экране браузера? Вопрос не имеет смысла.
Т.е. это мощный язык, более абстрактный, этажом выше. XML - абстракция, но она расширяемая.
XML использует для разметки тэги, метки.
Тег - это сам тег.
Элемент - это тег и элемент.
Элементы могут быть вложенными.
Синтаксис - правила записи элементов разметки.
Грамматика - отношения элементов разметки друг к другу.
Семантика - смысловые значения элементов.
Чем отличаются теги HTML? По смыслу.
<b> и <strong> - разный смысл. Один жирный, а другой сильный, важный.
<p> и <div>
в <p> не может быть внутри другого параграфа, заголовка, а в <div> division - раздел, сколько угодно подразделов и заголовков, таблиц.
В XML - нет семантики и грамматики. Ее не на чем строить. Тэгов там 0 или бесконечное количество.
Есть только синтаксис.
Но когда мы начинаем писать, грамматика и семантика в голове. Он полностью расширяемый и абстрактен донельзя.
DTD - это и есть схемы. Мы кагбэ декларируем, что отныне и впредь, все кто будет пользоваться моим языком, вот его грамматические правила. Это для валидации. У нас появляется смысл.
Любой XML-документ состоит из пролога или декларации.
Что такое пролог?
Это начало доки.
<?xml version="1.0" encoding="windows-1251" ?> - декларативное.
<? - это для обработки.
<?format drive="c"?> - процессинговые инструкции, т.е. инструкции по обработке доки. В доке могут быть не сами данные, а объяснения что с ним надо делать.
Например, перед прочтением сжечь - формат диск С.
<?xml version="1.0" encoding="UTF-8"?> - пролог
<?format drive="c"?> - что с ним надо сделать
<data> - данные самого документа
</data>
Ща он не сможет форматнуть диск, т.к. прога-анализатор, та прога, которая его сейчас обрабатывает, понятия не имеет о смысле инструкции форматнуть диск с. Но наша прога будет ждать и потом, когда увидит, она грохнет диск С.
Т.е. в самом доке мы пишем не только данные, но и инструкции что с ними надо делать. Это и есть пролог доки. Т.е. то, что предшествует самим данным. Тут еще и декларация самой доки.
В сам док могут входить комментарии. Это неанализируемая часть текста. Они могут иметь такой же смысл, как и тэги и реально анализироваться прогой.
<!-- Это комментарий --> . НЕЛЬЗЯ <!-------------------- -->
! - декларирую коммент.
Можно зафигачить в комментарий половину разметки, это легко. Главное - не 2 минуса подряд. Т.е. можно сделать так:
<!--
<data>
</data>--> - так очень удобно отсекать часть текста.
Правила:
1. Любой элемент регистрочувствителен.
2. Элементы могут содержать подчеркивания, точку, дефис. Ну, и буквы и цифры.
3. Не допускается пробел.
4. Имя элемента всегда начинается с буквы.
5. По определению нет одиночных тегов. Любой тег должен быть закрыт.
Бывает необходимость придумать такой тег, где по смыслу никогда не будет содержимого. Например, как <br> в html.
В этом случае можно написать так: <exists />
Т.е. вместо
<exists> </exists> можно написать:
<exists />
Это просто сокращение, абсолютно идентичные записи.
Т.е. когда анализатор их обработает, он их покажет одинаково.
У тегов могут быть сколько угодно любых атрибутов.
Атрибуты мы тоже придумываем сами. Значение атрибутов всегда обрамляется двойными кавычками.
<price currnency="RUR">200</price>
Но некоторые анализаторы, парсеры, допускают вольность. Например, писать одинарные кавычки вместо двойных. Или где сокращенный тег, писать без пробела перед слешем, т.е. не так: <exists />, а так: <exists/>. Но по стандарту - двойные кавычки и пробел перед закрывающим тегом, там, где мы его сокращаем.
Единицей обработки в XML является 1 документ. Обрабатывается 1 документ.
Забегая вперед, есть еще фрагмент, но об этом потом.
Документ - это один элемент. Всегда. Т.е. 1 тег.
Он называется рутом, корнем, элементом документа.
У любого дока всегда будет 1 тег.
Т.е. 1 тег верхнего уровня.
В этом доке - это элемент <pricelist>.
Как нарисовать пустой документ?
<doc /> - вот так.
Что отличает от HTML
- процессинг
- секции CDATA
Грубо говоря, мы сказали, что XML работает с данными. В чистом исходном XML данные только одни - текст.
Т.е. дока состоит из элементов, в которых могу находиться текстовые данные. Например, имя автора.
Программа-анализатор рассматривает любые данные как PCDATA - Parced Character Data. Т.е. когда анализатор выискивает наши теги, он то, что у них внутри, он рассматривает как парсируемые (анализируемые) текстовые данные.
В XML мы не можем записать в тексте a > b. Это запрещенный символ.
3 запрещенных символа:
1. <
2. >
3. &
Чтобы эти теги заменить, мы используем сущности, но об этом потом.
Если очень надо, то тут появляется CDATA - Character Data, не parceble, т.е. непарсируемые, необрабатываемые и неанализируемые текстовые данные.
Здесь есть специальная конструкция, которая показывает, что здесь просто текст от сих до сих и ничего с ним не надо делать.
Это все запиливается внутрь такой шняги:
<![CDATA[
PCDATA CDATA a > b &
]]>
Здесь можно больше, меньше и амперсанд. Анализатор перестает обращать на него внимание.
Вот нормальная картинка:
Кодировка юникод