Здравствуйте, уважаемые посетители моего скромного блога для начинающих вебразработчиков и web мастеров ZametkiNaPolyah.ru. Сегодня продолжаем говорить о расширяемом языке разметки XML, продолжим разговор о XML тегах, рассмотрим, как писать сокращенные XML теги, поговорим о кодировки в XML документах, так же рассмотрим, что такое корневой элемент или иначе корень XML документа, в этой публикации мы рассмотрим вопрос о комментариях в XML документах, а так же посмотрим какие символы запрещены в XML.Разметка XML документа. XML атрибуты. Корень XML документа. Декларации в XML. Комментарии в XML. Синтаксис XML документа. Рассмотрим, что такое декларация, а так же для чего нужна декларация в XML документе и как правильно декларировать. Так же мы поговорим, о разметки XML документа. И так, продолжаем разговор о синтаксисе XML документа, начатый в статье Расширяемый язык разметки XML. Синтаксис XML. Структура XML документа. Применение XML.

Синтаксис XML документа, как декларировать XML документ, из чего состоит XML документ. Инструкции XML документа.

В первой статье, я как смог, так и объяснил, что такое синтаксис вообще и в XML документе в частности. Теперь предлагаю более подробно остановиться на данном вопросе, а так же рассмотреть, что такое декларация в XML и как декларировать XML документ. Синтаксис в XML на самом деле очень сложный, шаг влево, шаг в право и XML парсер вас уже не поймет.

Для начала, давайте рассмотри из чего состоит XML документ и соответственно рассмотрим синтаксис XML документа.

Пример XML документа:

[html]
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Пример XML документа -->
<people>
<man id="1">
<name>Василий</name>
<surname>Теркин</surname>
<nationality>Русский</nationality>
<age>30</age>
<growth unit="см">185</growth>
</man>
</people>
[/html]

Любой XML документ начинается с пролога или декларации. Что такое пролог в XML документе или иначе декларация XML документа — это начало XML документа, в примере это первая строка, как правило показывается, что это XML документ и указывается версия XML, а так же кодировка XML документа(<?xml version="1.0" encoding="UTF-8" ?>), на данный момент уже есть XML версии 1.1.

Обратите внимание на конструкцию пролога, так как в XML все очень жестко и структурировано, а именно на начало декларации(<?), любая декларативная команда в XML или команда по обработке всегда начинается с <?, если сказать грубо то эта команда дает указание парсеру начать обрабатывать XML документ. Данная команда не несет никаких данных, но она несет в себе инструкции как  эти данные обрабатывать.

Так же, помимо декларативных инструкций можно давать процессинговые инструкции или инструкции по обработке XML документа, то есть в XML документе могут находится не только сами данные, но и инструкции по их обработке, то есть указания, что с этими данными делать.

Пример процессинговых инструкций в XML документе:

[html]
<?xml version="1.0" encoding="UTF-8" ?>
<?format drive="d"?>
<document>
Дальше идет сам документ
</document>
[/html]

В этом примере я указал пролог XML документа, затем указал, что необходимо сделать с XML документом, то есть отформатировать диск D, а затем уже пошли данные самого XML документа. Этих инструкций может быть бесконечно много, так как придумываете вы их самостоятельно для решения тех или иных задач. Как и в случае с XML тегами, никаких инструкции в XML не заложено, их ноль, но когда вы решаете определенные задачи вы придумываете эти инструкции самостоятельно.

Если скопировать данный пример в текстовый редактор(например, в редактор с подсветкой синтаксиса Notepad++), а затем открыть XML документ в браузере, то ничего не произойдет, так как браузер не поймет данную инструкцию, но если вы напишите программу, которая будет знать эту инструкцию, то после работы с данными находящимися в XML документе она отформатирует диск D. И так, можно сделать вывод, что в XML прологом документа называют все, что предшествует самим данным, то есть декларация XML документа и инструкции по обработке XML документа.

XML комментарии, как правильно писать комментарии в XML документе.

Комментарии, ну наверное вы знаете для чего они нужны, если говорить научным языком, комментарии — это не анализируемая часть текста. На самом деле, в XML комментарии имеют большее значение, они могут иметь смысл, как и XML теги и реально анализироваться программой. Комментарии в XML документе — это еще одна разновидность XML конструкций.

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

В XML вы никогда не сможете написать вот такой комментарий: <!-- ----------------------- -->, если у вас возникнет необходимость отделить логически одну часть документа от другой используйте символ равно(=): <!-- ========== -->. Если же вы попробуете создать XML документ с таким комментарием <!-- ---------- -->, а затем открыть его в браузере, то обработчик выдаст ошибку, с текстом, «Ошибочный синтаксис в комментарии». То есть получается, что обработчик анализирует, все что находится в комментариях.

Два минуса в комментарий размещать нельзя, но отключить целый блок разметки при помощи комментариев можно, это всегда пожалуйста:

Пример XML комментариев:

[html]
<?xml version="1.0" encoding="UTF-8" ?>
<?format drive="d"?>
<!-- Пример XML документа -->
<people>
<man id="1">
<name>Василий</name>
<!--<surname>Теркин</surname>
<nationality>Русский</nationality>
<age>30</age>-->
<growth unit="см">185</growth>
</man>
</people></pre>
<pre style="text-align: justify;">[/html]

Блок кода, находящийся между <!-- -->, этими символами обрабатываться никак не будет. Таким образом вы можете отключать часть разметки XML документа, если вдруг возникнет необходимость посмотреть, что произойдет, но необходимости удалять код нет.

XML теги и XML элементы, правила написания XML тегов.

Из прошлой статьи, мы выяснили, что теги в XML только парные, то есть существует открывающий тег и обязательный ему закрывающий тег, XML теги регистрочувствительны, не важно в каком регистре вы пишите свой тег, важно, что если вы создали элемент people с открывающим тегом <people>, то закрывающий тег нужно будет писать в том же регистре </people>.

В название XML элементов не может быть пробелов, то есть вы не имеете права написать такой тег <takoi tag>, пробелов в названиях быть не должно. Вместо пробелов можно использовать, дефисы, нижние подчеркивания, точки(<takoi_tag><takoi-tag><takoi.tag>), все эти теги имеют право на существование, но пробелов в название XML тегов быть не должно!

Имя каждого XML элемента всегда должно начинаться с буквы, никаких цифр, минусов, запятых первым символом в название не может быть. Кстати буквы в название XML тега могут быть любыми, хоть русские, хоть китайские, любые. Например, если вы напишите тег <человек> или <男子>, обработчик XML вас прекрасно поймет, главное регистр соблюдайте.

По определению в XML не может быть одиночных тегов, любой тег должен быть закрыт. Одиночных тегов в XML нет в принципе, но бывает необходимость, когда по грамматике тег не будет иметь содержимое, то есть пустой элемент. То есть, иногда существует необходимость в XML элементах, в которых по смыслу никогда не будет содержимого, в таких случаях писать такие конструкции нет смысла(<tag></tag>).

Поэтому было придумано сокращение тегов в XML(<tag />), обратите внимание, что это не одиночный тег, а просто сокращение записи(<tag></tag>) . <tag />, такая конструкция в XML называется самозакрывающийся тег, обратите внимание, что слэш стоит справа от названия тега и пробел между название тега и слэшом обязателен. То есть, записи <tag /> и <tag></tag> — это одно и то же, а когда анализатор встроенный в браузер их обработает, он покажет одно и то же, обычно вот так: <tag />.

XML атрибуты, как правильно писать XML атрибуты

Обратите внимание на самый первый пример, у тегов <man> и <growth> имеются атрибуты, id и cm, в первом случае параметром является число-идентификатор, во втором случае единицы измерения роста — сантиметры. Все XML атрибуты вы придумываете самостоятельно(в отличие от HTML атрибутов), семантику и грамматику для XML атрибутов вы придумываете то же самостоятельно, то есть задаете для этих XML атрибутов смысл и правила.

Параметром или значением XML атрибута, может быть все, что угодно, все на что хватит вашей фантазии. А вот синтаксис у XML атрибутов строгий, значение атрибутов всегда должны быть в двойных кавычках, но некоторые парсеры XML допускают вольности и ставить одинарные кавычки, но лучше к данному подходу не привыкать. Как и в случае с XML тегами, XML атрибутов может быть бесконечно много.

Единицы измерения XML. Корневой XML элемент или корень XML документа.

В XML существует очень важное правило, минимальной единицей измерения является документ, один XML элемент это документ, и этот XML элемент является минимальной единицей измерения — всегда! Как это можно понять? XML документ всегда состоит из одного тега или элемента, по буржуйски этот тег называется root или корень XML документа, это означает, что у любого документа должен быть всегда один элемент(один тег), внутри него может быть все, что угодно, но один XML элемент в XML документе должен быть всегда.

В первом нашем примере корневым элементом является, элемент <people>, внутри него можно размещать все, что угодно, делать какие угодно ветвления и вложения, но создавать элемент уровня <people> уже нельзя.

Пример того как можно составлять XML документ:

[html]
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Пример XML документа -->
<people>
<man id="1">
<name>Василий</name>
<surname>Теркин</surname>
<nationality>Русский</nationality>
<age>30</age>
<growth unit="см">185</growth>
</man>
<woman id="1">
<name>Сонька</name>
<surname>Золотая Ручка</surname>
<nationality>Русская</nationality>
<age>26</age>
<growth unit="см">176</growth>
</woman>
</people>
[/html]

В данном примере, элементы woman и man лежат внутри корневого XML элемента people, поэтому здесь ничего не нарушено и XML документ составлен правильно.

Пример того как нельзя составлять XML документ:

[html]
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Пример XML документа -->
<people>
<man id="1">
<name>Василий</name>
<surname>Теркин</surname>
<nationality>Русский</nationality>
<age>30</age>
<growth unit="см">185</growth>
</man>
<woman id="1">
<name>Сонька</name>
<surname>Золотая Ручка</surname>
<nationality>Русская</nationality>
<age>26</age>
<growth unit="см">176</growth>
</woman>
</people>
<animal>
<cat>Большой, толстый кот</cat>
</animal>
[/html]

Данный пример по своей сути не правильный и XML обработчик выдаст ошибку, так как у XML документа может быть только один корневой элемент, а в данном примере их два, это people и animal, что противоречит стандарту XML. Еще раз повторюсь, у XML документа может быть только один корневой элемент, внутри которого должны располагаться все остальные элементы. Если же вы все-таки напишите два корневых элемента, анализатор вам так и скажет, «В XML документах, допускается один элемент верхнего уровня».

Так же не может быть XML документов состоящих только из пролога, в XML документе должен быть хотя бы один XML элемент.

Так писать XML документы нельзя:

[html]
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Пример XML документа -->
[/html]

Нельзя, потому что внутри XML документа должен быть один тег, а в данном случае нет ни одного тега. XML документа без корня существовать не может. Если вам интересно как создать пустой XML документ, то тут все очень просто.

Пример пустого XML документа:

[html]
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Пример XML документа -->
<tag />
[/html]

Данный документ пустой и содержит один элемент(tag), то есть корень XML документа, поэтому он удовлетворяет XML стандарту. XML документ это всегда один главный тег, то есть все прологи, процесинговые инструкции, это все не так важно, XML документ — это один тег.

Типы данных в XML. CDATA и PCDATA.

Как  я уже говорил, XML работает только с данными, в чистом XML данные одни — текст. XML документ состоит из элементов, внутри которых расположены текстовые данные. Любые данные находящиеся внутри XML документа рассматриваются как PCDATA (Parsed Character Data), это означает, что XML анализатор будет рассматривать данные, как парсируемые, анализируемые текстовые данные, то есть XML парсер анализирует не только теги и атрибуты, но и то что находится внутри них.

С одной стороны это удобно, но допустим если у вас появится желание поместить внутрь XML элемента пример 3+4>2, у вас это не получится, так знак «>» запрещенный символ, всего в XML три запрещенных символа (<, >, &). И если анализатор XML встретит эти символы внутри элемента, он будет их анализировать и естественно ругаться, говоря что вы допустили синтаксическую ошибку.

В связи с этим, в XML ввели еще один тип данных CDATA, которые анализатор XML вообще не трогает никак, грубо говоря мы ему указываем, что от этого места до этого просто текст, с которым ничего делать не надо.Что бы указать XML анализатору, что данные являются CDATA, надо сделать декларацию(<!), затем пишется следующая конструкция [CDATA[, после чего вы можете писать все, что захотите, после того как вы разместили нужные данные конструкция закрывается(]]>)

[html]
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Пример XML документа -->
<data>
<new.tag>
<![CDATA[
Внутри этой конструкции можно размещать любые символы, даже
запрещенные(>,<,&)
]]>
</new.tag>
</data>
[/html]

Все, что размещено в этой конструкции(<![CDATA[............]]>), анализатор будет считать обычным текстом и не будет обращать на него внимание. Правильно эта конструкция называется секция CDATA, то есть раздел непарсируемых данных.

Пролог в XML документе. Кодировка XML документа. Русские XML теги. Кодировка Unicode.

Как я уже говорил, в XML документе есть пролог, в котором указывается язык XML, его версия и кодировка XML документа, но писать пролог не обязательно и все будет прекрасно работать, до тех пор пока вы не напишите хотя бы одну букву не входящую в латинский алфавит.

Все дело в том, что проблема с кодировкой в XML решена очень грамотно, в XML нет понятия битой кодировки, то есть каракозябры в XML вы никогда не увидите. Если вы не указываете в прологе кодировку, то в XML документе можно использовать только латинские буквы. Если вы в своем документе использовали хотя бы одну букву не латинского алфавита, то вы обязаны декларировать, какую кодировку вы используете, в XML документе кодировки могут быть любые.

Причем, после того, как вы укажете кодировку, символы из этой кодировки вы можете использовать любые и в любом месте XML документа, в название тегов, атрибутов, значений атрибутов, сами данные и так далее. Кодировку для XML документа, я бы посоветовал использовать UTF-8. Сейчас объясню почему.

Unicode — это универсальное средство, которое позволяет использовать помимо стандартных символов и графики использовать какие-либо частные символы, дополнительные графические элементы, национальные языки и многое другое, универсальность его намного больше, чем однобайтовых кодировках.

Unicode, на самом деле один, но у него есть множество способов кодирования. UTF — это способ кодирования файлов. И вот этих UTF много, порядка 10 штук, можете поискать(UTF-7,  UTF-8, UTF-16, UTF-32), цифра показывает минимальное число бит на один символ.

И так, нам необходимо указывать кодировку своих документов, причем указывать и для редактора и для анализатора, хорошо, если вы используете какой-нибудь Notepad++, где вы явно указываете кодировку и нет никаких проблем, а если вы используете обычный блокнот windows.

Предлагаю попробовать создать пустой документ, с расширением txt в обычном блокноте. И затем его сохранить. Размер этого документа будет ноль байт.

Размер сохраненного документа 0 байт

А теперь попробуйте пересохранить этот же пустой документ, но уже в кодировки Unicode, я выберу способ кодирования UTF-8, а теперь посмотрите, какой размер будет у пустого файла в кодировки UTF-8. Документ в кодировки UTF-8 будет весить 3 байта, но откуда взялись эти 3 байта, в документе по прежнему ничего нет, он пустой.

Так вот, блокноту нужно как-то подсказывать, какая кодировка используется, для этих целей в Unicode придумали Byte Order Mark, или сокращенно BOM, это метка порядка чередования байтов. Идея разработчиков Unicode очень проста. Поскольку в Unicode миллиарды различных символов, включая полную типографику, в которой только с десяток символов пробелов(узкий пробел, широкий пробел, неразрывный пробел, широкий пробел с переносом, неразрывный пробел и так далее). Среди множества этих пробелов есть один хитрый пробел, который называется неразрывный непечатный пробел, он применяется для разделение частей многосложных слов, его невидно, но он есть, как суслик, ты его не видишь, а он есть.

И не менее хитрые разработчики Unicode придумали такую штуку, если файл начинается с неразрывного непечатного пробела, программа поймет, во-первых, что вы используете Unicode, а во-вторых, способ кодирования. Неразрывный непечатный пробел и есть BOM, метка, которая показывает какую кодировку вы используете, а при способе кодирования UTF-8 неразрывный непечатный пробел кодируется тремя байтами, поэтому наш пустой документ имеет размер три байта.

Так вот, если этот BOM есть, любая виндовая программа определит, что документ закодирован в Unicode. Некоторые Unix интерпретаторы косячат, когда видят BOM, поэтому старайтесь кодировать все свои документы(не только XML) без BOM.

Для нас же(людей использующих русский язык) наличие BOM в начале XML документа означает, что мы можем использовать любые символы в документе явно не указывая кодировку. То есть парсер поймет какая кодировка у XML документу по наличию BOM, это единственное исключения, когда можно не писать для русского языка кодировку, но лучше не надейтесь на BOM и всегда указывайте кодировку.

XML подведение итогов. Well-formed document или хорошо сформированный XML документ.

И так, расширяемый язык разметки XML, применяется для хранения, обработки и передачи каких-либо данных. Во многих случаях вы даже не догадываетесь, что используется XML. Чистый XML имеет только синтаксис, синтаксис XML очень и очень жесткий, грамматику и семантику XML придумывает разработчик.

Так же мы поговорили про анализатор XML, который прежде чем, что-то делать с документом проверяет его и в случае малейшей ошибки должен отказаться от работы с XML документом. Well-formed document — это первый уровень правильности написания XML документа, грубо говоря — это соблюдение всех синтаксических правил.

Любой XML документ считается синтаксически правильно сформированным, если выполняются следующие синтаксические правила в XML документе:

  1. Документ XML соответствует своей кодировке и кодировка указанна внутри XML документ.
  2. XML документ имеет только один корневой элемент.
  3. Все элементы внутри корня XML документа корректно закрыты и вложены.
  4. Правильно соблюден регистр имен элементов и деклараций
  5. Значение XML атрибутов заключены в двойные кавычки.
  6. Внутри одного тега нет повторяющегося атрибута, один и тот же атрибут два раза в одном теге находиться не могут

Если все эти правила соблюдены в XML документе, то первый уровень проверки XML документа пройден — анализатор может его легко обработать, документ считается правильным или валидным. Собственно это и есть весь XML, кроме одной весчи, о которой мы поговорим в следующих статьях

На этом всё, спасибо за внимание, надеюсь, что был хоть чем-то полезен и до скорых встреч на страницах блога для начинающих вебразработчиков и вебмастеров ZametkiNaPolyah.ru 

    Возможно, вам будет интересно:

Что такое SEO, определение SEO. Черное SEO. Белое SEO

Заметки о Drupal

Как создать сайт используя Drupal. Установка Drupal на локальный сервер. Локализация Drupal. Как русифицировать Drupal при помощи .po файл. Перевод Друпала при помощи архива

Логическое форматирование HTML-документов. Непосредственное форматирование HTML документов. HTML тэги, часть 3

HTML атрибуты, для чего используются HTML атрибуты, какие бывают HTML атрибуты, синтаксис и назначение атрибутов в HTML

HTML теги, часть 1. Тэг PRE авторское форматирование, тэг BR перенос строк. Пробельные символы

Блочные и строчные элементы. Теги HTML заголовков H1-H6

Структура HTML документа. Тэги html, head, body и title

Что такое теги, какие теги бывают и где их искать

Панель инструментов Google — Google WebMaster Tools. Регистрация и возможности предоставляемые Google WebMaster Tools

Google Analytics — регистрация, установка и получение кода счетчика посещаемости. Работа со статистикой

Что такое RSS лента и поток. Программы для чтения RSS лент — RSS reader. Иконки и кнопки RSS для сайта. Как устроен формат RSS.

Счетчики посещений

Заметки о XML и XLST

Расширяемый язык разметки XML. Синтаксис XML. Структура XML документа. Применение XML

Конфликты в XML. Пространство имен в XML. Способы именования пространства имен в XML. Как использовать HTML теги в XML документах

Заметки по JavaScript

Алгоритмический язык программирования JavaScript. Методы вывода данных в JavaScript alert (), confirm и document.write (). Вставка JavaScript в HTML страницы

Все о реляционных базах данных и системе управления базами данных MySQL. MySQL сервер

Система управления базами данных. Реляционные базы данных. Где скачать MySQL сервер, как настроить и установить

Возможно, эти записи вам покажутся интересными


Выберете удобный для себя способ, чтобы оставить комментарий

This article has 4 comments

  1. Reine Reply

    Некоторые моменты после прочтения все равно непонятны, не осилить мне этот XML!!!(((

  2. Chester Reply

    А я все голову ломал почему у меня XML документы не правильные получаются, а тут вон как все строго оказывается. Продолжайте эту рубрику, вы очень понятно и доступно пишите, а то последняя публикации здесь была давно!

    • Storyte11er Reply

      Ну да, ты прав, что-то я в последнее время увлекся рубриками MySQL и JavaScript, надо чего-нибудь в другие рубрики написать, как вариант, что-нибудь про XML.

  3. Hydr0 Reply

    Спасибо вам большое! А вы собираетесь продолжать рубрику XML? Редко в интернете можно найти про XML что-то стоящее и понятное для новичков? И еще один вопрос, чем отличается HTML от XHTML?

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Loading Disqus Comments ...