Skip to content
monpase007 edited this page Dec 17, 2020 · 27 revisions

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

XML-документ состоит из деклараций, элементов, комментариев, специальных символов и директив. Все эти составляющие документа описаны в данной главе.

Элементы и атрибуты

XML — это теговый язык разметки документов. Иными словами, любой документ на языке XML представляет собой набор элементов, причем начало и конец каждого элемента обозначается специальными пометками, называемыми тегами. Элемент состоит из трех частей: начального тега, содержимого и конечного тега. Тег — это текст, заключенный в угловые скобки "<" и ">". Конечный тег имеет то же имя, что начальный тег, но начинается с косой черты "/". Пример 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-документ состоит из пролога и корневого элемента, например:

<title>Марш одиноких</title> Довлатов, Сергей В этом примере пролог сводится к единственной директиве (первая строка документа), указывающей версию 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-документы могут содержать комментарии, которые игнорируются приложением, обрабатывающим документ. Комментарии строятся по тем же правилам, что и в HTML:

•	начинайте комментарий с символов "<!--",
•	завершайте комментарий символами "-->",
•	не используйте внутри комментария символов "--".

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

<!-- это комментарий -->
<!-- а вот еще комментарий,   занимающий более одной строки -->

Имена и данные

Все имена элементов, атрибутов и разделов должны начинаться с буквы Unicode и состоять из букв, цифр, символов точки (.), подчеркивания (_) и дефиса (-). Единственное ограничение состоит в том, что они не должны начинаться с комбинации букв xml в любом регистре; подобные имена зарезервированы для будущих расширений языка. Существенно, что стандарт допускает использование в именах не только английских букв, но и любых других, хотя существующие XML-процессоры часто ограничены теми системами кодировок, которые в них заложены создателями. Поэтому мы в своих примерах пишем имена по-английски.

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

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

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

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

Секции CDATA

Еще одним способом включения в содержимое XML-элементов недопустимых символов является использование т. н. секций CDATA (сокр. от Character DATA, т. е. символьные данные). Допустим, что мы хотим сделать содержимым элемента layout фрагмент HTML-текста, например:

<layout>
<H1>Заголовок</H1>
</layout>

Подобная конструкция неверна, т. к. HTML-тег H1 будет в данном случае воспринят как тег XML. Для того, чтобы все содержимое элемента layout воспринималось как данные, мы должны заключить его в секцию CDATA:

<layout>
<![CDATA[<H1>Заголовок</H1>]]>
</layout>

Как мы видим из этого примера, секция CDATA заключается в ограничители . Все внутри этой секции считается символьными данными; в частности, секции CDATA не могут вкладываться друг в друга.

Синтаксис и конструкции XSD

Существуют и другие средства для описания структуры XML-документов с большими возможностями (....). Наиболее употребительным является язык XSD (XML Schema Definision, или XML-Schema) [...]. Поддержка этого языка включена в последнюю версию Microsoft Office. Программа Microsoft Word повзоляет создавать и редактировать XML-документы по заданному описанию в виде XML-Schema. Описание схемы само является XML-документом и позволяется более точно описывать типы значений элементы. Для описания простых элементов используется тег element, в атрибутах которого задаются имя и тип элемента. Например,

 <xs:element name="author" type="xs:string"/>

К простым типам относятся также: decimal, integer, boolean,date,time. Может быть указано значение по умолчанию (присваемое, если не указано иное значение):

 <xs:element name="color" type="xs:string" default="red"/>

Фиксированное значение присваивается элементу автоматически без всяких условий:

<xs:element name="color" type="xs:string" fixed="red"/>

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

 <xs:attribute name="ISBN" type="xs:string"/>

Атрибут может быть описан, как необязательный (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"/> ...

С помощью атрибута pattern (шаблон) можно ограничивать строковые значения. Например,

 <xs:pattern value ="шаблон"

Возможные значения шаблона

 "[a-z]" - только одна буква в диапазоне a-z
   "[A-Z][A-Z][A-Z]" - строка из трех заглавных букв
   "[a-zA-Z][a-zA-Z][a-zA-Z]" - три любые буквы латинского алфавита
   "[xyz]" - одна из трх букв x, y или z
   "[0-9][0-9][0-9][0-9][0-9]" - последовательность из пяти цифр
   "[0-9]{5}" - (то же)
   "([a-z])*" - последовательность из любого число букв (от 0)
   "([a-z][a-a-9])+" - идентификатор (начинается с буквы)
   и т.п.

Имеются ограничения на способ обработки пробелов:

 <xs:whiteSpace value="preserve"/> - пробелы не удаляются
   <xs:whiteSpace value="replace"/> - пробелы (переводы строк, табуляции) удаляются

Для ограничений на длину можно использовать length, maxLength, minLength:

 <xs:length value="8"/>

Для приведенного выше примера элемент 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>

Для указания типов значения элементов здесь используется встроенный простой тип данных string - строка. Значение "required" указывает на обязательность атрибута code. Типы значений элементов можно уточнять с помощью элемента restriction (ограничение). Например, если фамилия автора должна начинаться с заглавной буквы, за которой следует последовательность прописных букв, то элемент можно задать следующим образом:

 <xs:element name="author">
      <xs:simpleType>
         <xs:restriction base="xs:string">
         <xs:pattern value="[А-Я][а-я]*"/>
         </xs:restriction>
        </xs:simpleType>
    </xs:element>

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

<xs:element name="employee" type="personinfo"/>
   <xs:complexType name="personinfo">
   <xs:sequence> ... </xs:sequence>
   </xs:complexType>

И далее

 <xs:element name="employee" type="personinfo"/>
   <xs:element name="student" type="personinfo"/>

Атрибут sequence определяет фиксированный порядок вхождений дочерних элементов. Если порядок не важен, необходимо использовать choice. В этом случае допускается и по несколько вхождений, число которых можно управлять:

   minOccurs="2" - минимальной количество 2
   maxOccurs="10" - максимальное количество 10
   maxOccurs="unbounded" - неограниченное число

В сложных типах можно использовать группы элементов, которые могут повторяться в нескольких других. Помимо возможности задания типов, имеются и другие преимущества, которые делают язык XSD более привлекательным в сравнении с DTD. Так как XSD написан на XML, для редактирования файлов XSD можно использовать любой редактор XML-файлов. Для проверки созданных файлов можно использовать XML парсер, можно манипулировать элементами XSD файла с использованием объектной модели XML DOM или преобразовывать с помощью XSLT. Созданные XSD файлы могут быть использованы неоднократно и повторно, вставлены в новые файлы XSD, типы, используемые в XSD, могут быть произвольными, основанными на стандартных типах, один и тот же документ XML может иметь ссылки на различные документы XML Schema. Эффективно XSD используется в продукте InfoPath, входящего в MS Officce 2003. По заданному файлу с XML-схемой можно создать экранную форму для создания XML-документа. Также можно конструировать форму, а XSD-файл получиться как результат работы.

JSON Синтаксис

Чтобы правильно создать файл .json, вы должны следовать правильному синтаксису.

Есть два основных элемента объекта JSON: ключи и значения.

•	Ключи должны быть строками. Они содержат последовательность символов, которые заключены в кавычки.
•	Значения являются допустимым типом данных JSON. Они могут быть в форме массива, объекта, строки, логического значения, числа или значения null.

Объект JSON начинается и заканчивается фигурными скобками {}. Внутри может быть две или больше пар ключей/значений с запятой для их разделения. Между тем за каждым ключом следует двоеточие, чтобы отличить его от значения. Вот пример:

{"city":"New York", "country":"United States "}

У нас есть две пары ключей/значений: ключи — город и страна; Нью-Йорк и США — это значения. Типы Значений Значения содержат допустимый тип данных JSON, например:

Массив

Массив — это упорядоченная коллекция значений. Он заключен в квадратные скобки [], а каждое значение внутри разделено запятой. Значение массива может содержать объекты JSON, что означает, что он использует ту же концепцию пар ключей/значений. Например:

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

Информация в квадратных скобках — это массив, в котором есть три объекта. Объект Объект содержит ключ и значение. После каждого ключа стоит двоеточие, а после каждого значения — запятая, которая также различает каждый объект. Оба они находятся внутри кавычек. Объект как значение должен подчиняться тому же правилу, что и объект. Например:

“employees”: {"firstName":"Tom", "lastName":"Jackson”}

Здесь сотрудники — ключ, а всё, что находится внутри фигурных скобок — объект.

Строки

Строка — заданная последовательность из нуля и больше символов Юникода, заключенная в две двойные кавычки. Этот пример показывает, что Том обозначает строку, поскольку является набором символов внутри двойных кавычек.

"firstName":"Tom"

Число

Число в JSON должно быть целым или с плавающей запятой, например:

{“age”:”30”}

Булевый тип

Вы можете использовать true или false в качестве значения, как показано ниже:

{“married”:”false”)

Хранимые Данные JSON

У вас есть два способа хранения данных JSON — объект и массив. Первый выглядит так: Фигурные скобки означают, что это объект JSON. Он включает три пары ключей/значений, разделённых запятыми. В каждой паре у вас есть ключи (имя, фамилия и пол), за которыми следуют двоеточия, чтобы отличить их от значений (Том, Джексон, мужчина). Значения в этом примере являются строками. Вот почему они также заключены в кавычки, аналогично ключам. Использование Массивов Другой способ хранения данных — массив. Взгляните на этот пример:

{
"firstName":"Tom",
"lastName":”Jackson”,
“gender”:”male”,
"hobby":["football", "reading", "swimming"]
}

Что отличает этот метод от предыдущего, так это четвёртая пара ключей/значений. Хобби — это ключ, а в квадратных скобках есть несколько значений (футбол, чтение, плавание), которые представляют собой массив. Этот метод может быть полезным в сочетании с JSONP для преодоления междоменной проблемы. Этот процесс работает с использованием так называемых обратных вызовов (callbacks), которые будут запрашивать указанный элемент в массиве, не получая ошибку, связанную с правилом ограничения домена. К счастью, массив также поддерживает цикл for, что позволяет запускать повторяющиеся команды для поиска среди множества данных, что делает процесс более быстрым и эффективным.

##Источники: XML(http://www.4stud.info/web-programming/xml.html) XSD(http://www.chernyshov.com/SPPO_6/theory/wt_xml.htm) JSON(https://habr.com/ru/post/248147/) Выполнил: Филиппов Юрий ИДБ-17-07

Проверил: Поздеев Виктор ИДБ-17-07

Clone this wiki locally