-
Notifications
You must be signed in to change notification settings - Fork 17
exam06 6
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 зарезервирован и должен представляться специальным образом:
левая угловая скобка ("<") <
правая угловая скобка (">") >
амперсант ("&") &
двойная кавычка (") в значениях атрибутов "
одинарная кавычка (') в значениях атрибутов '
При желании можно пользоваться числовой кодировкой символов в стандарте Unicode. При этом символ может быть задан своим десятичным кодом (&#код;) или шестнадцатеричным кодом (&#xкод;). Например © представляет символ авторского права ©, а А – русскую букву А. Как мы увидим в дальнейшем, XML гораздо богаче, чем HTML, в использовании подобных конструкций, поскольку позволяет осуществлять подстановку в текст документов любых символьных выражений.
Еще одним способом включения в содержимое XML-элементов недопустимых символов является использование т. н. секций CDATA (сокр. от Character DATA, т. е. символьные данные). Допустим, что мы хотим сделать содержимым элемента layout фрагмент HTML-текста, например:
<layout>
<H1>Заголовок</H1>
</layout>
Подобная конструкция неверна, т. к. HTML-тег H1 будет в данном случае воспринят как тег XML. Для того, чтобы все содержимое элемента layout воспринималось как данные, мы должны заключить его в секцию CDATA:
<layout>
<![CDATA[<H1>Заголовок</H1>]]>
</layout>
Как мы видим из этого примера, секция CDATA заключается в ограничители . Все внутри этой секции считается символьными данными; в частности, секции CDATA не могут вкладываться друг в друга.
Существуют и другие средства для описания структуры 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. Они могут быть в форме массива, объекта, строки, логического значения, числа или значения 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. Он включает три пары ключей/значений, разделённых запятыми. В каждой паре у вас есть ключи (имя, фамилия и пол), за которыми следуют двоеточия, чтобы отличить их от значений (Том, Джексон, мужчина). Значения в этом примере являются строками. Вот почему они также заключены в кавычки, аналогично ключам. Использование Массивов Другой способ хранения данных — массив. Взгляните на этот пример:
{
"firstName":"Tom",
"lastName":”Jackson”,
“gender”:”male”,
"hobby":["football", "reading", "swimming"]
}
Что отличает этот метод от предыдущего, так это четвёртая пара ключей/значений. Хобби — это ключ, а в квадратных скобках есть несколько значений (футбол, чтение, плавание), которые представляют собой массив. Этот метод может быть полезным в сочетании с JSONP для преодоления междоменной проблемы. Этот процесс работает с использованием так называемых обратных вызовов (callbacks), которые будут запрашивать указанный элемент в массиве, не получая ошибку, связанную с правилом ограничения домена. К счастью, массив также поддерживает цикл for, что позволяет запускать повторяющиеся команды для поиска среди множества данных, что делает процесс более быстрым и эффективным.
XML
XSD
JSON
Выполнил: Филиппов Юрий ИДБ-17-07
Проверил: Поздеев Виктор ИДБ-17-07