exam06 6 - stankin/design-part-1 GitHub Wiki

Основные синтаксические конструкции языков XML, XSD, JSON. Назначение и варианты использования.

Выполнил: Павлов Андрей

Проверил: Аминова Лиана

XML

XML — это сокращение от eXtensible Markup Language, а переводится это как «Расширяемый язык разметки». Смысл XML в том, чтобы выстроить внутри документа логическую структуру — чтобы было видно, что к чему относится и как всё связано между собой, в каком формате представлены данные. Он нужен для представления данных в браузере

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

<?xml version="1.0"?>

<list_of_items>

<item id="1"><first/>Первый</item>

<item id="2">Второй <sub_item>подпункт 1</sub_item></item>

<item id="3">Третий</item>

<item id="4"><last/>Последний</item>

</list_of_items>

Тело документа XML состоит из элементов разметки (markup) и непосредственно содержимого документа - данных (content). XML - тэги предназначены для определения элементов документа, их атрибутов и других конструкций языка. Более подробно о типах применяемой в документах разметки мы поговорим чуть позже. Любой XML-документ должен всегда начинаться с инструкции , внутри которой также можно задавать номер версии языка, номер кодовой страницы и другие параметры, необходимые программе-анализатору в процессе разбора документа. Правила создания XML- документа В общем случае XML- документы должны удовлетворять следующим требованиям:

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

Элемент состоит из трех частей: начального тега, содержимого и конечного тега. Тег — это текст, заключенный в угловые скобки "<" и ">". Конечный тег имеет то же имя, что начальный тег, но начинается с косой черты "/". Пример XML-элемента: Сергей Довлатов Имена элементов зависят от регистра, т. е. , и — это имена различных элементов. Наличие закрывающего тега всегда обязательно. Если тег является пустым, т. е. не имеет содержимого и закрывающего тега, то он имеет специальную форму: <элемент/> Любой элемент может иметь атрибуты, содержащие дополнительную информацию об элементе. Атрибуты всегда включаются в начальный тег элемента и имеют вид:

имя_атрибута="значение_атрибута"

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

<author country="USA">Сергей Довлатов</author>

Элементы должны либо следовать друг за другом, либо быть вложены один в другой:

<books>
<book isbn="5887821192">
<title>Часть речи</title>
<author>Бродский, Иосиф</author>

<present/>
</book>
<book isbn="0345374827">
<title>Марш одиноких</title>
<author>Довлатов, Сергей</author>
<present/>
</book>
</books>

Здесь элемент books (книги) содержит два вложенных элемента book (книга), которые, в свою очередь, имеют атрибут isbn и содержат три последовательных элемента: title (название), author (автор) и present (есть в наличии), причем последний пуст, т. к. в данном случае соответствует логическому флажку. Из приведенного описания видно, что синтаксис XML напоминает синтаксис HTML (что естественно, т. к. оба они являются диалектами одного языка SGML), но требования к оформлению правильных XML-документов выше. Еще одним очень важным отличием XML от HTML является то, что содержимое элементов, т. е. все, что содержится между начальным и конечным тегами, считается данными. Это означает, что XML не игнорирует символы пробела и разрыва строк, как это делает HTML.

Инструкция по обработке имеет следующую форму записи:

Здесь "кому" есть имя приложения, которому адресована инструкция, а "инструкция" - есть информация, передаваемая приложению. Инструкция может состоять из любой последовательности символов, кроме пары ?>. Если вы используете в качестве XML-процессора Internet Explorer, у вас есть две возможности применения инструкций по обработке: Стандартные инструкции для сообщения браузеру, как отображать документ с использованием таблицы стилей, например:

<?xml-stylesheet type="text/css" href="Sample.css"?>

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

<?MyScript detail="2"?>

Вы можете поместить инструкцию по обработке в любое место XML-документа вне других элементов разметки: в пролог документа, после корневого элемента, либо внутри содержимого элемента:

<PRODUCT> ... <?MyScript detail="2"?> ... </PRODUCT>

Использование разделов CDATA

Внутри символьных данных в содержимом элемента нельзя помещать символы угловых скобок (например, <) или знак амперсанда &. Одним из способов преодолеть это ограничение является использование ссылки на символ (< или &). Другим способом является использование ссылки на предопределённый общий примитив (< или &). Однако, в случае, если вам требуется многократно вставлять символы < и & (если, например, это какой-либо исходный код или разметка HTML), использование ссылок неудобно и затрудняет восприятие данных. В этом случае проще поместить текст, содержащий такие символы, в раздел CDATA. Раздел CDATA начинается с символов . Между этими двумя ограничителями вы можете поместить любые символы, кроме ]]>. В разделе CDATA не нужно использовать ссылки на символы или предопределённые общие примитивы, т.к. синтаксический анализатор не будет замещать такую ссылку соответствующим символом. Разделы CDATA не могут быть вложенными. Вы можете поместить раздел CDATA в любое место, занимаемое символьными данными - т.е. внутри содержимого элемента, но не внутри XML-разметки:

<PRODUCT> ... <![CDATA[ Text: <&> ]]> ... </PRODUCT>

Разделы CDATA отображаются браузером как содержимое элемента.

Пролог и директивы

Любой XML-документ состоит из пролога и корневого элемента, например: <?xml version="1.0"?> <books> <book isbn="0345374827"> <title>Марш одиноких</title> <author>Довлатов, Сергей</author> <present/> </book> </boos> В этом примере пролог сводится к единственной директиве (первая строка документа), указывающей версию XML. За ней следует XML-элемент с уникальным именем, который содержит в себе все остальные элементы и называется корневым. Директива (processing instruction) — это выражение, заключенное в специальные теги "" и "?>", которое содержит указания программе, обрабатывающей XML-документ. Стандарт XML резервирует только одну директиву , указывающую на версию языка XML, которой соответствует данный документ (второй версии XML пока нет). В действительности, эта директива несколько богаче и в самом общем виде выглядит так:

 <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>

Здесь атрибут encoding задает кодировку символов документа. По умолчанию считается, что XML-документы должны создаваться в формате UTF-8 или UTF-16. Если же используется какая-либо другая кодировка символов, то ее название согласно Таблицы П7.1 должно быть указано в данном атрибуте, как показано в примере. Атрибут standalone говорит о том, содержит ли данный документ внешние разделы. Значение yes означает, что таких разделов нет, значение no — что они есть.

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

Специальные символы Ряд символов в языке XML зарезервирован и должен представляться специальным образом:

левая угловая скобка ("<") &lt;
правая угловая скобка (">") &gt;
амперсант ("&")	&amp;
двойная кавычка (") в значениях атрибутов &quot;
одинарная кавычка (') в значениях атрибутов &apos;

При желании можно пользоваться числовой кодировкой символов в стандарте Unicode. При этом символ может быть задан своим десятичным кодом (&#код;) или шестнадцатеричным кодом (&#xкод;). Например © представляет символ авторского права ©, а А – русскую букву А. Как мы увидим в дальнейшем, XML гораздо богаче, чем HTML, в использовании подобных конструкций, поскольку позволяет осуществлять подстановку в текст документов любых символьных выражений.

XSD

XSD — это язык описания структуры XML документа. Его также называют XML Schema. При использовании XML Schema XML парсер может проверить не только правильность синтаксиса XML документа, но также его структуру, модель содержания и типы данных. Такой подход позволяет объектно-ориентированным языкам программирования легко создавать объекты в памяти, что, несомненно, удобнее, чем разбирать XML как обычный текстовый файл. Язык XML Schema Definition Language, который также называют XML Schema Language, во многом похож на язык XDR, с которым вы познакомились раньше. Схемы XSD способны решать следующие задачи:

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

Корневым элементом в схеме XML является элемент Schema, который содержит все остальные элементы в документе схемы. В рамках корневого элемента схемы XSD атрибутом xmlns определяется пространство имен XMLSchema, которое содержит элементы и атрибуты XSD схемы.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

Все элементы XSD начинаются с префикса xsd:, который указывается для пространства имен XSD, объявленного в корневом элементе экземпляра схемы.

XML-документ, который проверяется с помощью схемы, также должен содержать объявление пространства имен. Пространство имен всегда указывается в корневом элементе экземпляра документа с помощью атрибута xmlns:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

Это пространство имен содержит элементы и атрибуты XMLSchema, которые можно включать в документ XML. По общему соглашению префикс xsi используется для этого пространства имен и добавляется в начале имен всех элементов и атрибутов, принадлежащих пространству имен, отделяясь от них двоеточием. Ссылка на конкретную схему приводится в атрибуте:

xsi:schemaLocation="http://kit.znu.edu.ua/scemes/имя_файла.xsd"

Атрибут может быть описан, как необязательный (use="optional") или как обязательный (use="required"). Например,

 <xs:attribute name="lang" type="xs:string" use="required" />

На допустимые значения можно накладывать ограничения. В следующем примере элемент age может иметь значения от 0 до 10:

 <xs:element name="age">
      <xs:simpleType>
         <xs:restriction base="xs:integer">
         <xs:minInclusive value="0"/>
         <xs:maxInclusive value="100"/>
         </xs:restriction>
      </xs:simpleType>
   </xs:element>

Можно задать список допустимых значение

 <xs:element name="color">
      <xs:simpleType>
         <xs:restriction base="xs:string">
         <xs:enumeration value="RED"/>
         <xs:enumeration value="GREEN"/>
         <xs:enumeration value="BLUE"/>
         </xs:restriction>
      </xs:simpleType>
   </xs:element>

Набору ограничений можно приписать имя типа:

 <xs:element name="color" type="COL3"/>
      <xs:simpleType name="COL3"> <xs:restriction base="xs:string"> <xs:enumeration value="RED"/> ...

Процесс создания схемы включает в себя два шага — определение и объявление типов элементов или типов атрибутов. Элементы и атрибуты XML-документа объявляются элементами схемы xsd:element и xsd:attribute. Структура же XML-документа определяется элементами схемы xsd:simpleType и xsd:complexType.

Основное объявление элемента состоит из имени и типа данных:

<xsd:element name="имя_элемента" type="xsd:тип_данных"/>

В схемах XSD дескрипторы, используемые в документах XML, разделяются на две категории — сложные типы и простые типы. Элементы сложных типов могут содержать другие элементы, а также обладают определенными атрибутами; элементы простых типов такими возможностями не обладают. Атрибут - объявление простого типа, которое не может содержать другие элементы. Объявление атрибута похоже на объявление элемента:

<xsd:attribute name="имя_атрибута" type="xsd:тип_данных"/>

Для приведенного выше примера элемент book может быть описан следующей схемой:

 <?xml version="1.0"?>
   <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="book">
      <xs:complexType>
         <xs:sequence>
         <xs:element name="name" type="xs:string"/>
         <xs:element name="author" type="xs:string"/>
         </xs:sequence>
         <xs:attribute name="code" type="xs:integer" use="required"/>
         </xs:complexType>
    </xs:element>
   </xs:schema>

JSON

JSON - JavaScript Object Notation - стандартный текстовый формат для представления структурированных данных на основе синтаксиса объекта JavaScript. Он обычно используется для передачи данных в веб-приложениях (например, отправка некоторых данных с сервера клиенту,таким образом чтобы это могло отображаться на веб-странице или наоборот). Синтаксис JSON происходит от синтаксиса записи объектов JavaScript:

  • Данные записываются в виде пар "имя/значение"
  • Данные разделяются запятыми
  • В фигурных скобках записываются объекты
  • В квадратных скобках записываются массивы JSON представляет собой строку, формат которой очень похож на буквенный формат объекта JavaScript. Можно включать одни и те же базовые типы данных внутри JSON, так же как и в стандартном объекте JavaScript - строки, числа, массивы, булевы и другие объектные литералы. Это позволяет построить иерархию данных, к примеру, так:

{ "squadName": "Super hero squad", "homeTown": "Metro City", "formed": 2016, "secretBase": "Super tower", "active": true, "members": [ { "name": "Molecule Man", "age": 29, "secretIdentity": "Dan Jukes", "powers": [ "Radiation resistance", "Turning tiny", "Radiation blast" ] }, { "name": "Madame Uppercut", "age": 39, "secretIdentity": "Jane Wilson", "powers": [ "Million tonne punch", "Damage resistance", "Superhuman reflexes" ] }, { "name": "Eternal Flame", "age": 1000000, "secretIdentity": "Unknown", "powers": [ "Immortality", "Heat Immunity", "Inferno", "Teleportation", "Interdimensional travel" ] } ] }

Значение массива может содержать объекты JSON, что означает, что он использует ту же концепцию пар ключей/значений:

"students":[ 
{"firstName":"Tom", "lastName":"Jackson"},
{"firstName":"Linda", "lastName":"Garner"},
{"firstName":"Adam", "lastName":"Cooper"}]

JSON и объекты JavaScript

Формат JSON почти идентичен объектам JavaScript. В JSON ключи должны быть строками, записанные в двойных кавычках:

{ "name":"John" }

В JavaScript ключи могут быть строками, числами или именами идентификаторов:

{ name:"John" }

Значения в JSON В JSON значения должны быть одним из следующих типов данных:

  • строка
  • число
  • объект (объект JSON)
  • массив
  • boolean
  • null В JavaScript значения могут быть любого типа из приведенных выше плюс любым допустимым выражением JavaScript, включая:
  • функция
  • дата
  • undefined В JSON строковые значения должны записываться в двойных кавычках:

{ "name":"John" }

В JavaScript строковые значения можно записывать как в двойных, так и в одинарных кавычках:

{ name:'John' }

JSON использует синтаксис JavaScript Так как синтаксис JSON происходит от синтаксиса записи объектов JavaScript, то для работы с данными JSON внутри JavaScript требуется очень мало дополнительных инструментов. В JavaScript, например, можно создать объект и присвоить ему значения следующим образом:

var person = { "name":"John", "age":31, "city":"New York" };

Получить доступ к данным объекта JavaScript можно так:

// возвращает John

person.name;

Или так:

// возвращает John

person["name"];

Изменить данные объекта можно так:

person.name = "Gilbert";

Или так:

person["name"] = "Gilbert";

Источники

КОД журнал Яндекс Практикума. Что такое XML

Habr. XSD — умный XML

Язык определения схем XSD

Работа с JSON

JSON - Синтаксис

⚠️ **GitHub.com Fallback** ⚠️