From 64636b7b0a6cf452b333b4da1303ebc384dcfda2 Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 7 Jun 2023 04:25:48 +0300 Subject: [PATCH 1/2] XML guide added --- data/posts/ru/2023-06-06-xml.md | 246 ++++++++++++++++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 data/posts/ru/2023-06-06-xml.md diff --git a/data/posts/ru/2023-06-06-xml.md b/data/posts/ru/2023-06-06-xml.md new file mode 100644 index 00000000..d1e790e0 --- /dev/null +++ b/data/posts/ru/2023-06-06-xml.md @@ -0,0 +1,246 @@ +--- +title: Что такое XML? +description: Простыми словами про язык разметки XML +author: Прядко Максим +--- + +## Если вкратце + +XML (*e**X**tensible **M**arkup **L**anguage*, то есть *«Расширяемый Язык Разметки»*) — это язык разметки, который используется для хранения и передачи данных (обычно из [API](https://guides.hexlet.io/ru/http-api/)), но не для отображения данных. + +XML может быть прочитан как человеком, так и компьютером по аналогии с [JSON](https://tproger.ru/articles/chto-takoe-json-vvedenie/). + +## Где используется XML? + +Много где, например: + +- Веб-сервисы: XML используется для передачи данных между веб-серверами и клиентскими приложениями. Например, [SOAP](https://ru.wikipedia.org/wiki/SOAP) (*Simple Object Access Protocol*) использует XML для кодирования запросов и ответов между веб-серверами и клиентами. + +- Базы данных: XML может использоваться для представления данных. + +- Конфигурационные файлы: файлы конфигурации веб-приложений могут быть написаны на XML. + +- Интернет-магазины: XML используется для передачи информации о заказах между интернет-магазинами и поставщиками. Например, информация о заказах может быть сохранена в формате XML и передана поставщику через веб-сервис. + +- Офисные приложения: XML может использоваться для представления данных в офисных приложениях, таких как Microsoft Excel и Microsoft Word. Документы Excel могут быть сохранены в формате XML. + +- RSS-ленты: XML используется для создания [RSS-лент](https://ru.hexlet.io/programs/frontend/projects/11), которые используются для распространения новостей и другой информации на веб-сайтах. + +## Структура + +XML-документ состоит из **пролога**, **элементов**, **текста**, **атрибутов** и **комментариев**. Подобно HTML, каждый элемент может содержать другие элементы внутри себя. + +#### Пролог + +Любой XML-документ обычно начинается с объявления XML-версии и кодировки UTF. Всё вместе это называется **пролог**: + +```xml + +``` + +Здесь `"1.0"` указывает на версию XML, а `"UTF-8"` указывает на кодировку символов. + +#### Элементы + +Далее следует **корневой элемент**, который содержит все **остальные элементы** в документе. Корневой элемент должен быть заключен в угловые скобки и иметь *открывающий* и *закрывающий* тег: + +```xml + + + + + +``` +В коде выше `root` является корневым элементом, а `frontend` и `backend` — остальными элементами. + +**Важно!** Все тэги обязательно должны быть закрыты, даже одиночные. Иначе будут ошибки: + +```xml +✅ + + + + Vue + +``` +```xml +❌ + + + + Vue + +``` + +#### Текст + +Каждый элемент может содержать **текст**, который находится между открывающим и закрывающим тегом: + +```xml + + + Иван + +``` + +Здесь `name` — это элемент, а `Иван` — это текст, содержащийся в элементе. + +#### Атрибуты + +Элементы также могут содержать **атрибуты**, которые определяют дополнительные характеристики элемента. Атрибуты указываются в открывающем теге элемента, у них есть свои имя и значение: + +```xml + + + + +``` + +Здесь `user` — это элемент, а `name`, `age` и `id` — атрибуты элемента. + +#### Комментарии + +**Комментарии** могут быть добавлены в XML-документ с помощью специальной конструкции ``: + +```xml + + + + +``` + +## Конфликт имён и пространство имён + +В HTML все теги заранее предопределены: есть `

` для крупных заголовков, `
` для переноса строки или `
` для описания блочного элемента. В XML все теги мы определяем самостоятельно. + +Допустим, мы хотим описать комнату и вещи, которые в ней находятся. В HTML есть специальный тег ``, который определяет таблицу, поэтому добавим общий список всех объектов в комнате. А затем отдельно добавим компьютерный стол и тоже назовём его `
`. + +И если в одном документе встретятся оба тега `
`, у которых разное значение, то произойдёт **конфликт имён**: + +```xml + + +
+ + + + +
МебельТехника
+ + + Компьютерный стол + ПВХ +
+ +``` +Чтобы избежать этого, используются **пространства имён**. Для каждой `` нужно добавить атрибут `xmlns` с [URI-ссылкой](https://ru.wikipedia.org/wiki/URI) на документ с пространством имён. + +Значение атрибута `xmlns` не указывает на фактический ресурс в Интернете, а используется только для идентификации пространства имен в XML-документе. Поэтому, когда определяется значение `xmlns`, важно использовать уникальный идентификатор, который не будет конфликтовать с другими идентификаторами в XML-документе. + +Для HTML-таблицы это будет ссылка на `w3`, а для XML-таблицы — несуществующая ссылка на абстрактный стол: + +```xml + + +
+ + + + +
МебельТехника
+ + + Компьютерный стол + ПВХ +
+ +``` +Чтобы всё обрабатывалось правильно, осталось добавить префиксы с двоеточием для каждой таблицы: + +```xml + + + + + Мебель + Техника + + + + + Компьютерный стол + ПВХ + + +``` +А ещё можно определить `xmlns` сразу в корне: + +```xml + + + + +``` + +Теперь элементы `` относятся к разным пространствам имён и конфликта не произойдёт! + +## XML vs. JSON vs. HTML + +В качестве вывода тезисно обозначим особенности XML, JSON и HTML, чтобы понять разницу: + +#### XML + +- Предназначен для хранения и передачи данных, а не для отображения +- Все теги создаются с нуля, нужно придумывать их самому +- Код XML легко понятен человеку +- XML — дополнение к HTML +- XML легко расширяемый, похожий на HTML +- В протоколе [SOAP](https://ru.wikipedia.org/wiki/SOAP) можно применять только XML + +Пример кода: + +```xml + + Код. Тайный язык информатики + Ч. Петцольд + 1999 + +``` + +#### JSON + +- Код JSON также легко понятен человеку +- [REST](https://guides.hexlet.io/ru/rest-api/) поддерживает как JSON, так и XML +- JSON поддерживает разные типы данных: `string`, `number`, `boolean`, `array`, `object`, `null` +- JSON не нужно парсить, в отличие от XML, когда мы пишем на JavaScript +- JSON «легче» и быстрее, чем XML + +Пример кода: + +```json +{ + "book": { + "title": "Код. Тайный язык информатики", + "author": "Ч. Петцольд", + "published": "1999" + } +} +``` + +#### HTML + +- Язык разметки, который отображают браузеры +- Поддерживает гиперссылки +- Браузеры могут сами исправлять код, если в нём есть ошибки +- Есть предопределённые теги +- Нет чувствительности к регистру + +Пример кода: + +```html +
+

Код. Тайный язык информатики

+

Ч. Петцольд

+

1999

+
+``` \ No newline at end of file From fc3cb5f65811ea27127296cb886da40763b33685 Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 19 Jul 2023 00:53:50 +0300 Subject: [PATCH 2/2] XML guide updated --- data/posts/ru/2023-06-06-xml.md | 219 +++++++++++++++++++++----------- 1 file changed, 147 insertions(+), 72 deletions(-) diff --git a/data/posts/ru/2023-06-06-xml.md b/data/posts/ru/2023-06-06-xml.md index d1e790e0..4669a027 100644 --- a/data/posts/ru/2023-06-06-xml.md +++ b/data/posts/ru/2023-06-06-xml.md @@ -133,71 +133,184 @@ XML-документ состоит из **пролога**, **элементо
``` -Чтобы избежать этого, используются **пространства имён**. Для каждой `` нужно добавить атрибут `xmlns` с [URI-ссылкой](https://ru.wikipedia.org/wiki/URI) на документ с пространством имён. +Чтобы избежать этого, используются **пространства имён**. -Значение атрибута `xmlns` не указывает на фактический ресурс в Интернете, а используется только для идентификации пространства имен в XML-документе. Поэтому, когда определяется значение `xmlns`, важно использовать уникальный идентификатор, который не будет конфликтовать с другими идентификаторами в XML-документе. +В XML-документе нужно сначала объявить пространство имен с помощью атрибута `xmlns`, который должен быть добавлен к корневому элементу. Значение атрибута `xmlns` указывает на [URI](https://ru.wikipedia.org/wiki/URI) (Uniform Resource Identifier), который идентифицирует пространство имен. -Для HTML-таблицы это будет ссылка на `w3`, а для XML-таблицы — несуществующая ссылка на абстрактный стол: +URI может быть каким угодно, но обычно используется URL, указывающий на документ, где определяется пространство имен. + +Попробуем использовать пространства имён, чтобы разрешить конфликт имён: ```xml - -
+ + - - + + -
МебельТехникаСтолКресло
+ - + Компьютерный стол ПВХ -
+ ``` -Чтобы всё обрабатывалось правильно, осталось добавить префиксы с двоеточием для каждой таблицы: +Здесь мы объявляем два пространства имен с URI `http://example.com/furniture` и `http://example.com/tech`. + +Затем мы присваиваем каждому элементу свой уникальный идентификатор с помощью префикса пространства имен (`furniture:` и `tech:`). Теперь элементы `` в разных пространствах имен не конфликтуют между собой, и мы можем использовать одно и то же имя элемента в разных контекстах. + +## XSD-схема + +XSD означает ***X**ML **S**chema **D**efinition* (*Определение XML-схемы*), а если ещё проще — это описание XML-документа. + +Зачем это нужно? Представим, что у нас есть два разработчика: первый должен получить XML-документ, а второй должен отправить XML-документ. Первый разработчик составляет для второго XSD-схему, второй делает всё по ней и отправляет нам XML-документ. + +Если проверка на типы данных и их организацию не проходят, то документ считается невалидным. Если всё проходит, значит с XML можно работать дальше. Очень удобно! + +XSD определяет следующие типы данных: + +- Простые типы: целые числа, строки, булевы значения, даты и другие простые типы данных. +- Сложные типы: состоят из набора элементов, которые могут содержать другие элементы. + +Пример XSD-схемы для XML-документа, содержащего информацию о студентах: ```xml - - - - Мебель - Техника - - - - - Компьютерный стол - ПВХ - - + + + + + + + + + + + + + + + + + + + + + + + + ``` -А ещё можно определить `xmlns` сразу в корне: +В этой схеме определен элемент `students`, который содержит неограниченное количество элементов `student`. + +Каждый элемент **student** содержит элементы `name`, `age` и `address`. + +Элемент **address** содержит вложенные элементы `city` и `zip`. + +Также определены типы данных для каждого элемента, например, тип `xs:string` для элемента `name` и `xs:int` для элемента `age`, и так далее. + +Эта схема определяет структуру, которую должен иметь XML-документ, чтобы он соответствовал требованиям. Например, каждый элемент `student` должен содержать элементы `name`, `age` и `address`, а элемент `address` должен содержать вложенные элементы `city` и `zip`. + +А теперь посмотрим пример. Предположим, что у нас есть XML-документ, который описывает студентов: ```xml - - - + + + Юрий + 20 +
+ Архангельск + 163000 +
+
+ + Дарья +
+ Санкт-Петербург + 187015 +
+
+ + Николай + 22 + +
``` -Теперь элементы `
` относятся к разным пространствам имён и конфликта не произойдёт! +Всё ли в нём правильно? Нет, есть ошибки. Согласно схеме: -## XML vs. JSON vs. HTML +- У ***первого*** студента должен быть элемент ``, а не `` +- У ***второго*** студента отсутствует `` +- У ***третьего*** студента полностью отсутствует `
` -В качестве вывода тезисно обозначим особенности XML, JSON и HTML, чтобы понять разницу: +Теперь исправим всё недочёты: -#### XML + +```xml + + + + Юрий + 20 +
+ Архангельск + 163000 +
+
+ + Дарья + 19 +
+ Санкт-Петербург + 187015 +
+
+ + Николай + 22 +
+ Вологда + 160000 +
+
+
+``` + +Отлично! XML-документ прошёл валидацию и может быть обработан дальше. + + +## Вывод + +В качестве вывода тезисно обозначим особенности XML: - Предназначен для хранения и передачи данных, а не для отображения - Все теги создаются с нуля, нужно придумывать их самому - Код XML легко понятен человеку -- XML — дополнение к HTML - XML легко расширяемый, похожий на HTML - В протоколе [SOAP](https://ru.wikipedia.org/wiki/SOAP) можно применять только XML +- XSD — это схема для определения XML-документа. Важно пользоваться ей, чтобы в XMl не было ошибок + +Пример XSD-схемы: + +```xml + + + + + + + + + + + + +``` -Пример кода: +Пример XML-документа: ```xml @@ -205,42 +318,4 @@ XML-документ состоит из **пролога**, **элементо Ч. Петцольд 1999 -``` - -#### JSON - -- Код JSON также легко понятен человеку -- [REST](https://guides.hexlet.io/ru/rest-api/) поддерживает как JSON, так и XML -- JSON поддерживает разные типы данных: `string`, `number`, `boolean`, `array`, `object`, `null` -- JSON не нужно парсить, в отличие от XML, когда мы пишем на JavaScript -- JSON «легче» и быстрее, чем XML - -Пример кода: - -```json -{ - "book": { - "title": "Код. Тайный язык информатики", - "author": "Ч. Петцольд", - "published": "1999" - } -} -``` - -#### HTML - -- Язык разметки, который отображают браузеры -- Поддерживает гиперссылки -- Браузеры могут сами исправлять код, если в нём есть ошибки -- Есть предопределённые теги -- Нет чувствительности к регистру - -Пример кода: - -```html -
-

Код. Тайный язык информатики

-

Ч. Петцольд

-

1999

-
``` \ No newline at end of file