Skip to content
Qoer edited this page Jan 16, 2023 · 23 revisions

Билет 15

1. Понятие единого указателя ресурса. Форма записи и основные протоколы. Понятия абсолютного и относительного пути.

2. Современные языки определения и обмена данными в интернете (XML, XSD, JSON).

◀️ Реферат к вопросам экзамена по дисциплине Интернет-технологии 1 курса магистратуры ▶️

Выполнили: Полс Андрей ИДМ-22-06, Мавлоназаров Хушнуд ИДМ-22-03, Белов Владислав ИДМ-22-02, Чурбанов Ростислав ИДМ-22-08, Кузькин Юрий ИДМ 22-04.

Понятие единого указателя ресурса. Форма записи и основные протоколы. Понятия абсолютного и относительного пути.

Единый указатель ресурсов (англ. URL — Uniform Resource Locator) — единообразный локатор (определитель местонахождения) ресурса. Ранее назывался Universal Resource Locator — универсальный локатор ресурса. URL — это стандартизированный способ записи адреса ресурса в сети Интернет.

Изначально локатор URL был разработан как система для максимально естественного указания на местонахождения ресурсов в сети. Локатор должен был быть легко расширяемым и использовать лишь ограниченный набор ASCII - символов (к примеру, пробел никогда не применяется в URL). В связи с этим, возникла следующая традиционная форма записи URL:

<схема>://<логин>:<пароль>@<хост>:<порт>/<URL-путь>
  • Схема – это тот протокол передачи данных, по которому, происходит обращение к ресурсу (http/https).

  • Логин и пароль — имя пользователя и пароль, используемые для доступа к ресурсу. Связка логин и пароль не всегда используется. Например, для доступа к какой-либо веб-странице, по протоколу http – как правило, эти данные не указывают.

  • @ — разделитель между хостом и парой логин-пароль. В случае, если логин-пароль не указывается, то разделитель не указывается.

  • Хост – доменное имя или IP-адрес (ссылки) того ресурса, к которому нужно обратиться.

  • Порт – уникальный номер, который выделяется тому приложению, которое будет обрабатывать запрос пользователей.

  • URL — путь – указывается уточняющая информация о местонахождении ресурса. Зависит от используемого протокола. В случае с протоколом HTTP задается путь с указанием каталогов и подкаталогов, где лежит ресурс.

  • Параметры – следуют сразу после имени файла и пишутся после знака вопроса (?). Для разделения этих параметров используется знак амперсанда (&).

  • Якорь – это специальная строка, в которой могут иметься как буквенные символы, так и цифры. С помощью якоря ссылаются на определенное место на сайте, который открывается. Благодаря этому пользователь попадается не на главную страницу портала, а сразу в нужное место. Якорь располагается в единообразном локаторе сразу после знака решетки (#).

Общепринятые схемы (протоколы) URL включают:

  • ftp — Протокол передачи файлов FTP

  • http — Протокол передачи гипертекста HTTP

  • https — Специальная реализация протокола HTTP, использующая шифрование (как правило, SSL или TLS)

  • mailto — Адрес электронной почты [2]

Абсолютный URL-адрес содержит все сведения, необходимые для поиска ресурса.

Относительный путь описывает путь к указанному документу относительно текущего. Путь определяется с учётом местоположения веб-страницы, на которой находится ссылка. Относительные ссылки используются при создании ссылок на другие документы на одном и том же сайте. Когда браузер не находит в ссылке протокол http://, он выполняет поиск указанного документа на том же сервере.

Относительный путь содержит следующие компоненты:

  • папка (имя папки, указывающей путь к файлу);
  • файл (имя файла).

Путь для относительных ссылок имеет три специальных обозначения:

  • / — указывает на корневую директорию и говорит о том, что нужно начать путь от корневого каталога документов и идти вниз до следующей папки
  • ./ — указывает на текущую папку
  • ../ — подняться на одну папку (директорию) выше

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

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

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

Современные языки определения и обмена данными в интернете (XML, XSD, JSON).

XML ( англ. eXtensible Markup Language) — расширяемый язык разметки, предназначенный для хранения и передачи данных.

Спецификация XML описывает язык и ряд вопросов, касающихся кодировки и обработки документов. Материал этой секции представляет собой сокращённое изложение описания языка в Спецификации XML, адаптированное для настоящей статьи.

Нормативным считается английский вариант документа, поэтому основные термины приводятся с их английскими оригиналами.

Перевод основных терминов в основном следует доступному в интернете переводу Спецификации на русский язык, исключение составляют термины tag и declaration. Для термина tag здесь используется перевод тег. Для термина declaration отдано предпочтение распространённому переводу объявление (против также распространённой кальки декларация).

В литературе и интернете могут встречаться и иные переводы основных терминов.

Простейший XML-документ выглядит следующим образом:

<?xml version="1.0" encoding="windows-1251"?>
<book category="WEB">
   <title lang="en">Learning XML</title>
   <author>Erik T. Ray</author>
   <year>2003</year>
   <price></price>
</book>

Первая строка — это XML декларация. Здесь определяется версия XML (1.0) и кодировка файла. На следующей строке описывается корневой элемент документа <book> (открывающий тег). Следующие 4 строки описывают дочерние элементы корневого элемента ( title, author, year, price). Последняя строка определяет конец корневого элемента </book> (закрывающий тег).

XML документ должен содержать корневой элемент. Этот элемент является «родительским» для всех других элементов.

Все элементы в XML документе формируют иерархическое дерево. Это дерево начинается с корневого элемента и разветвляется на более низкие уровни элементов.

Все элементы могут иметь подэлементы (дочерние элементы) [4]:

<корневой>
   <потомок>
     <подпотомок>.....</подпотомок>
   </потомок>
</корневой>

XML Schema — язык описания структуры XML - документа. Спецификация XML Schema является рекомендацией W3C.

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

После проверки документа на соответствие XML Schema читающая программа может создать модель документа (конкретный тип документа как в DTD), которая включает:

  • словарь (названия элементов и атрибутов);
  • модель отношений между элементами и атрибутами и их структуру;
  • типы данных элементов и атрибутов. Каждый элемент в этой модели ассоциируется с определённым типом данных, позволяя строить в памяти как каркас (по схеме) будущего объекта, так и сам объект (при наполнении каркаса данными), соответствующие заданной структуре (схеме) XML-документа. Языкам объектно-ориентированного программирования гораздо легче иметь дело с таким объектом, чем с текстовым файлом.

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

Главными компонентами Schema являются:

  • Объявления элементов, которые определяют их свойства. К ним относятся имя элемента и целевое пространство имен. Важным свойством является тип, который ограничивает атрибуты и дочерние элементы, которые может он иметь.
  • Объявления атрибутов, которые определяют свойства атрибутов. Снова свойства включают имя атрибута и целевое пространство имен. Тип атрибута ограничивает значения, которые может принимать атрибут. Объявление атрибута может также включать значение по умолчанию или фиксированное значение.
  • Простые и сложные типы.
  • Определения групп моделей и групп атрибутов. Это группы элементов и атрибутов, которые можно повторно использовать во многих определениях различных типов.
  • Атрибут используется для репрезентации отношений сложного типа и объявления атрибута и указывает, является ли атрибут обязательным или необязательным, когда он используется в этом типе.
  • Частица элемента аналогичным образом представляет отношение сложного типа и объявления элемента и указывает минимальное и максимальное количество раз, когда элемент может появляться в содержимом.

Файл, содержащий XML Schema, обычно имеет расширение «.xsd» (XML Schema definition) [5].

Простой пример схемы на XML Schema, расположенной в файле "country.xsd" и описывающей данные о населении страны:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="country">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="country_name" type="xs:string"/>
        <xs:element name="population" type="xs:decimal"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Пример документа, соответствующего этой схеме:

<?xml version="1.0" encoding="utf-8"?>
<country>
    <country_name>France</country_name>
    <population>59.7</population>
</country>

Схемы XSD способны решать следующие задачи:

  • Перечисление элементов в документе XML и проверка наличия в документе только объявленных элементов.
  • Объявление и определение атрибутов, модифицирующих элементы документа.
  • Определение родительско-дочерних отношений между элементами.
  • Определение состояний и моделей содержания для элементов и атрибутов.
  • Задание типов данных.
  • Установка значений по умолчанию.
  • Возможность расширения.
  • Поддержка использования пространств имен.

JSON (англ. JavaScript Object Notation) — текстовый формат обмена данными, основанный на JavaScript. Как и многие другие текстовые форматы, JSON легко читается людьми. Формат JSON был разработан Дугласом Крокфордом.

Несмотря на происхождение от JavaScript (точнее, от подмножества языка стандарта ECMA-262 1999 года), формат считается независимым от языка и может использоваться практически с любым языком программирования. Для многих языков существует готовый код для создания и обработки данных в формате JSON [1].

За счёт своей лаконичности по сравнению с XML формат JSON может быть более подходящим для сериализации сложных структур. Применяется в веб-приложениях как для обмена данными между браузером и сервером (AJAX), так и между серверами (программные HTTP-сопряжения).

Поскольку формат JSON является подмножеством синтаксиса языка JavaScript, то он может быть быстро десериализован встроенной функцией JSON.parse().

JSON-текст представляет собой (в закодированном виде) одну из двух структур:

  • Набор пар ключ: значение. В различных языках это реализовано как запись, структура, словарь, хеш-таблица, список с ключом или ассоциативный массив. Ключом может быть только строка (регистрозависимость не регулируется стандартом, это остаётся на усмотрение программного обеспечения. Как правило, регистр учитывается программами — имена с буквами в разных регистрах считаются разными, например[7]), значением — любая форма. Повторяющиеся имена ключей допустимы, но не рекомендуются стандартом; обработка таких ситуаций происходит на усмотрение программного обеспечения, возможные варианты — учитывать только первый такой ключ, учитывать только последний такой ключ, генерировать ошибку.
  • Упорядоченный набор значений. Во многих языках это реализовано как массив, вектор, список или последовательность.

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

В качестве значений в JSON могут быть использованы:

  • запись — это неупорядоченное множество пар ключ:значение, заключённое в фигурные скобки «{ }». Ключ описывается строкой, между ним и значением стоит символ «:». Пары ключ-значение отделяются друг от друга запятыми.
  • массив (одномерный) — это упорядоченное множество значений. Массив заключается в квадратные скобки «[ ]». Значения разделяются запятыми. Массив может быть пустым, то есть не содержать ни одного значения. Значения в пределах одного массива могут иметь разный тип.
  • число (целое или вещественное).
  • литералы true (логическое значение «истина»), false (логическое значение «ложь») и null.
  • строка — это упорядоченное множество из нуля или более символов юникода, заключённое в двойные кавычки. Символы могут быть указаны с использованием escape-последовательностей, начинающихся с обратной косой черты «\» (поддерживаются варианты ", \, /, \t, \n, \r, \f и \b), или записаны шестнадцатеричным кодом в кодировке Unicode в виде \uFFFF.

Следующий пример показывает JSON-представление данных об объекте, описывающем человека. В данных присутствуют строковые поля имени и фамилии, информация об адресе и массив, содержащий список телефонов. Как видно из примера, значение может представлять собой вложенную структуру [6].

{
   "firstName": "Иван",
   "lastName": "Иванов",
   "address": {
       "streetAddress": "Московское ш., 101, кв.101",
       "city": "Ленинград",
       "postalCode": 101101
   },
   "phoneNumbers": [
       "812 123-1234",
       "916 123-4567"
   ]
}

На языке XML подобная структура выглядела бы примерно так:

<person>
  <firstName>Иван</firstName>
  <lastName>Иванов</lastName>
  <address>
    <streetAddress>Московское ш., 101, кв.101</streetAddress>
    <city>Ленинград</city>
    <postalCode>101101</postalCode>
  </address>
  <phoneNumbers>
    <phoneNumber>812 123-1234</phoneNumber>
    <phoneNumber>916 123-4567</phoneNumber>
  </phoneNumbers>
</person>

YAML - Yet Another Markup Language, акроним. Позднее YAML Ain't Markup Language - «дружественный» формат сериализации данных, концептуально близкий к языкам разметки, но ориентированный на удобство ввода-вывода типичных структур данных многих языков программирования. В трактовке названия отражена история развития: на ранних этапах YAML расшифровывался как Yet Another Markup Language («Ещё один язык разметки») и даже позиционировался как конкурент XML, но позже был переименован с целью акцентировать внимание на данных, а не на разметке документов. Синтаксис YAML минималистичен, особенно по сравнению с XML-синтаксисом.

Особенности YAML:

  • понятный человеку код;
  • минималистичный синтаксис;
  • заточен под работу с данными;
  • встроенный стиль, похожий на JSON (YAML является его надмножеством);
  • поддерживает комментарии;
  • поддерживает строки без кавычек;
  • считается «чище», чем JSON;
  • дополнительные возможности (расширяемые типы данных, относительные якоря и маппинг типов с сохранением порядка ключей).

Характерные особенности YAML:

Поддержка мультидокументов

Вы можете объединить несколько YAML-документов в один YAML-файл для облегчения организации файлов и парсинга данных.

Документы разделяются тремя дефисами (—):

---
player: playerOne
action: attack (miss)
---
player: playerTwo
action: attack (hit)
---

YAML позволяет добавлять комментарии после символа #, как в Python:

key: #Это однострочный комментарий
   - value line 5
   #Это
   #многострочный комментарий
 - value line 13

В синтаксисе YAML-файлов используется система отступов, как в Python. Необходимо использовать пробелы, а не табуляцию, чтобы избежать путаницы.

Это избавляет от лишних символов, которые есть в JSON и XML (кавычки, скобки, фигурные скобки).

В итоге читаемость файла значительно повышается.

YAML:

#YAML
 Imaro:
 author: Charles R. Saunders
 language: English
 publication-year: 1981
 pages: 224

JSON:

{
   "Imaro": {
      "author": "Charles R. Saunders",
      "language": "English",
      "publication-year": "1981",
      "pages": 224
   }
}

Явная и неявная типизация:

YAML предлагает как автоопределение типов, так и возможность явно указать тип данных. Чтобы использовать конкретный тип, нужно написать !![тип] перед значением.

# Это значение преобразуется в int:
is-an-int: !!int 14.10
# Превращает любое значение в строку:
is-a-str: !!str 67.43
# Значение должно быть boolean:
is-a-bool: !!bool yes

YAML поддерживает стандартные типы: int и float, boolean, string и null.

Они могут быть представлены в разных видах: шестнадцатеричном, восьмеричном или экспоненциальном. Также существуют специальные типы для математических сущностей, такие как: бесконечность, -бесконечность и NAN.

integer: 25
hex: 0x12d4 #равно 4820
octal: 023332 #равно 9946
float: 25.0
exponent: 12.3015e+05 #равно 1230150.0
boolean: Yes
string: "25"
infinity: .inf # преобразуется в бесконечность
neginf: -.Inf #преобразуется в минус бесконечность
not: .NAN #Not a Number
null: ~

Сравнительная таблица в пятибалльной шкале:

Язык JSON XML XSD YAML
Синтаксис (сложность, удобство) 5 3 4 5
Гибкость 5 2 3 4
Эффективность сжатия данных 5 1 1 3
Распространенность 5 5 3 1

Применение

XML (расширяемый язык разметки) существует уже более 3 десятилетий и является неотъемлемой частью каждого веб-приложения. Будь то файл конфигурации, картографический документ или определение схемы, XML упростил обмен данными, придав им четкую структуру и помогая в динамической настройке и загрузке переменных.

JSON хранит все свои данные в формате карты (пары ключ / значение), который является аккуратным и более простым для понимания. Пользователи делают упор на простоту моделирования данных или сопоставления непосредственно с объектами предметной области как на главное преимущество JSON перед XML, что делает его структуру более предсказуемой и легкой для понимания.

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

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

ИСТОЧНИКИ

  1. 📑 Лекции по дисциплине "Интернет-технологии"

  2. 📃 Представление об URL (универсальный указатель ресурсов), его структура

  3. 📃 Абсолютные и относительные URL-адреса

  4. 📃 I. Коротко об XML — Документация Краткое руководство по XML 01.12.2015 v2

  5. 📃 XML Schema (W3C) — Википедия

  6. 📃 JSON — Википедия

  7. 📃 YAML— Википедия

  8. 💬 JSON vs XML in 2022: Comparing Features and Examples

  9. 📃 Сравнительный анализ формата обмена данными

  10. 📃 YAML за пять минут

ИСТОЧНИКИ

  1. 📑 Учебный материал (лекция, практикум...) или стандарт

  2. 📃 Научно-популярная или техническая статья (Википедия...)

  3. 🎦 Видео-ролик

  4. 💻 Веб-приложение

  5. 💬 Чье-то мнение (хабр...)

Clone this wiki locally