Связывание данных XML-документа с HTML-страницей

Определение типа документа (DTD)

Данные, представленные в формате XML, обычно проходят процедуру валидации, т.е. проверки грамматики документа на соответствие определенным схемам. В таких схемах находится описание структур данных XML-документа. Необходимость проверки грамматики XML-документов заключается в следующем:

· XML-документ может быть предназначен для другой системы;

· XML-документ может содержать некорректные данные;

· XML-документ может содержать ошибки в структуре.

При обработке XML данных валидация – это фундамент для дальнейших действий с XML-документом, информация в валидном XML-документе может быть отправлена да дальнейшую обработку в целевой модуль. Существуют три основные разновидности схем: DTD, XDR и XML-схемы (XSD). На сегодняшний день актуальными являются DTD схемы и более современный подход – XML-схемы (XSD).

Схема DTD

DTD (Document Type Definition, определение типа документа) - это язык описания структуры XML-документа, который используется для проверки грамматики XML-документа и его соответствия определенному стандарту. Это позволяет парсеру на этапе обработки определить, соответствует ли документ необходимым требованиям, т.е. является ли документ валидным. DTD описывает:

· Какие элементы могут присутствовать в документе;

· Вхождение элементов (повторения и т.п.);

· Возможные атрибуты элементов;

· Обязательные / необязательные атрибуты;

· PCDATA и CDATA;

· Применяемые в документе сущности.

Например:

<?xml version="1.0"?>

<!DOCTYPE note [

<!ELEMENT note (to, from, Sbj, msg)>

<!ELEMENT to (#PCDATA)>

<!ELEMENT from (#PCDATA)>

<!ELEMENT Sbj (#PCDATA)>

<!ELEMENT msg (#PCDATA)>

]>

<note>

<to>Sunny</to>

<from>Oliver</from>

<Sbj>Hello</Sbj>

<msg>This is a good day!</msg>

</note>

В рамках DTD доступны четыре определяющих инструкций для разработки определения типа документа:

· ATTLIST (список атрибутов) - объявляет список XML-атрибутов. Эти атрибуты определяются именем, типом данных, неявными значениями по умолчанию и именами любых элементов, позволяющих их использование.

· ELEMENT - объявляет имя типа XML-элемента и его допустимые вложенные (дочерние) элементы.

· ENTITY - объявляет специальные символьные ссылки, текстовые макросы (наподобие инструкции #define языка C/C++) и другое повторяющееся содержимое (наподобие инструкции #include языка C/C++).

· NOTATION - объявляет внешнее содержимое, не относящееся к XML (например, двоичные графические данные), а также внешнее приложение, которое обрабатывает это содержимое.

Инструкция ATTLIST

Инструкция ATTLIST используется для перечисления и объявления всех атрибутов, которые могут принадлежать элементу. Сначала указывается имя элемента (или элементов), к которому относится список атрибутов. Затем для всех атрибутов по очереди указывается имя, обязательность и символьные данные, допустимые в качестве значения.

Синтаксис инструкции:

<!ATTLIST elementName attributeName dataType default>

Возможные параметры:

· elementName - имя элемента, к которому относится список атрибутов.

· attributeName - имя атрибута. Этот параметр повторяется столько раз, сколько нужно для перечисления всех атрибутов, используемых с elementName.

· dataType - тип данных для атрибута, названного в параметре attributeName; должен иметь одно из следующих значений:

· CDATA – атрибут содержит только символьные данные.

· ID - значение атрибута должно быть уникальным. Оно не может повторяться в других элементах или атрибутах данного документа.

· IDREF – атрибут ссылается на значение другого атрибута типа ID из данного документа.

· ENTITY – значение атрибута должно соответствовать имени внешней сущности ENTITY, не подвергавшейся синтаксическому разбору и объявленной в том же определении DTD.

· ENTITIES - значение атрибута содержит несколько имен внешних сущностей, не подвергавшихся синтаксическому разбору и объявленных в том же определении DTD.

· NMTOKEN – значение атрибута должно быть лексемой имени. Токены имени допускают символьные значения данных, но накладывают больше ограничений, чем тип CDATA. Лексема имени может содержать буквы, цифры и некоторые знаки препинания — точки, тире, символы подчеркивания и двоеточия. Однако значения лексем имени не могут содержать никаких пробелов и приравненных к ним символов.

· Enumerated – Значения атрибута ограничены перечисленными в списке.

· default - значение по умолчанию для атрибута, заданного параметром attributeName. Возможные значения по умолчанию приведены в таблице 1:

Таблица 1. Значения по умолчанию атрибута default



Значения по умолчанию Описание
#REQUIRED Атрибут должен присутствовать в XML-документе, иначе при синтаксическом разборе будет сформирована ошибка. В некоторых случаях, чтобы избежать возникновения ошибки, можно по желанию использовать поле defaultValue, поместив его непосредственно за этим ключевым словом.
#IMPLIED Атрибут может присутствовать в XML-документе, но его отсутствие не вызывает ошибки при синтаксическом разборе. В некоторых случаях можно по желанию также использовать поле defaultValue, поместив его непосредственно за этим ключевым словом.
#FIXED Значение атрибута зафиксировано в определении DTD; изменить или переопределить его в XML-документе нельзя. При использовании этого ключевого слова непосредственно за ним нужно обязательно поместить поле defaultValue для объявления постоянного значения атрибута.
defaultValue Значение по умолчанию, или фиксированное. Синтаксический анализатор вставляет это значение в XML-документ, если атрибут отсутствует или не используется в данном XML-документе. Все значения должны быть заключены в одинарные или двойные кавычки.

Например, для XML-документа:

<price currency = “RUR” symbol = “ϼ”>120</price>

DTD-схема:

<!ATTLIST price currency CDATA #REQUIRED symbol CDATA #IMPLIED>

Инструкция ELEMENT

Инструкция ELEMENT применяется для объявления каждого элемента, который используется внутри типа документа, определенного в DTD. Сначала инструкция объявляет имя элемента, а затем определяет, какое содержимое допустимо в элементе. Синтаксис инструкции:

<!ELEMENT name content >

Возможные параметры:

· name - имя элемента. Необходимо точно воспроизвести регистр.

· Content - допустимая модель содержимого для элемента может быть одной из следующих:

· ANY — внутри элемента допускается любое содержимое. При использовании в объявлении элемента, это ключевое слово разрешает открытие неограниченной модели содержимого для элементов и всех дочерних узлов.

· EMPTY — в элементе не допускается содержимое, он должен оставаться пустым.

· Объявленное правило для содержимого — в этом случае требуется написать правило для содержимого, заключенное в круглые скобки.

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

Таблица 2. Зарезервированные слова и символы ELEMENT

Символы Описание
#PCDATA Содержимое элемента может быть анализируемыми символьными данными.
name Имя элемента. Имя определяемого элемента или других элементов, определенных в DTD, заданное с помощью дополнительных объявлений ELEMENT. Если в правиле для содержимого нет других символов или знаков пунктуации, то допускается и требуется только одно вхождение именованного элемента.
() В объявлении модели содержимого для элемента требуются как минимум одни круглые скобки (можно вкладывать дополнительные скобки). Дополнительные скобки могут понадобиться для уточнения более сложной модели содержимого для элемента.
| Вертикальная черта используется для отделения двух именованных элементов. При использовании она указывает, что любой из элементов (до или после вертикальной черты) может отображаться как дочерний элемент.
, Запятая используется для отделения двух именованных элементов или вложенных правил. При использовании она указывает на порядок отображения элементов или правил.
? Вопросительный знак используется в качестве суффикса или операнда. При использовании указывает, что предыдущий элемент или правило является необязательным. Может использоваться только один раз в данном фрагменте структуры XML-документа.
+ Знак плюс используется в качестве суффикса или операнда. При использовании указывает, что предыдущий элемент или правило является обязательным. Может использоваться более одного раза в данном фрагменте структуры XML-документа.
* Звездочка используется в качестве суффикса или операнда. При использовании указывает, что предыдущий элемент или правило является необязательным. Может использоваться более одного раза в данном фрагменте структуры XML-документа.

Например для XML-документа:

<letter>

<title>Заголовок письма</title>

<message>Текст письма</message>

</letter>

DTD-схема:

<!ELEMENT letter (title, message)>

<!ELEMENT title (#PCDATA)>

<!ELEMENT message (#PCDATA)>

Инструкция ENTITY

Инструкция ENTITY используется для определения сущностей в DTD с целью их использования как в связанном с DTD XML-документе, так и собственно в DTD. ENTITY представляет собой сокращенную запись для размещения в XML-документе. Сокращенное имя указывается для имени параметра. Инструкции ENTITY особенно полезны в ситуациях, когда требуется повторять сведения или использовать объемные текстовые блоки, которые можно хранить в отдельных файлах. В XML-документе за сокращенным именем следует символ «;» (&abbName;)

DTD-схема:

<!ENTITY name “Hello, world!”>

XML-документ:

<element>&name;</element>

Инструкция NOTATION

Инструкция NOTATION используется для определения нотаций. Нотации позволяют XML-документу передавать внешним приложениям уведомляющие сведения. Синтаксис инструкции:

<!NOTATION name [SYSTEM|PUBLIC publicID] resource>

Возможные параметры:

· Name - имя нотации. Обязательно для всех определений нотации.

· publicID - общий идентификатор нотации. Требуется только если в объявлении используется ключевое слово PUBLIC.

· resource - значение для нотации. Обязательно для всех определений нотации. Обычно если нотация является общей, то это идентификатор URI, понятный для человека, но не для компьютеров. Для системных нотаций это значение может указывать имя файла приложения в системе, которое можно использовать для обработки данных, отличных от XML. Например, можно объявить нотацию для помощи в обработке непроанализированной внешней сущности, например графического файла в формате JPEG или GIF.

<!NOTATION MyCatalog SYSTEM "http://example.microsoft.com/catalog">

К основным недостаткам DTD схем относят синтаксические отличия от языка XML, а также отсутствие возможностей работы с типами данных. Эти недостатки устранены в XML-схемах. С созданием XML-схем на языке XSD можно ознакомиться в УМК, предложенном в предыдущей теме.

Как хранятся данные XML

Когда Internet Explorer открывает HTML-страницу, его встроенный XML-процессор синтаксически анализирует XML-документ. Internet Explorer также создает программный объект, который носит название “Объект исходных данных” (Data Source Object - DSO), который хранит данные XML и обеспечивает доступ к этим данным. DSO хранит данные XML как набор записей — т.е. множество записей и их полей.

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

На странице идентификатор, который присваивается атрибуту ID во фрагменте данных, представляет DSO.

Передача HTML-разметки

По умолчанию, если символьные данные XML-поля включают HTML-разметку, HTML-элемент, сцепленный с этим полем, воспринимает и отображает символы разметки как литерал. Рассмотрим, например, следующий элемент SPAN, который сцеплен с XML-полем AUTHOR-BIO:

<SPAN DATASRC="#dsoInventory" DATAFLD="AUTHOR-BIO"></SPAN>

Если поле AUTHOR-BIO содержит элемент I (курсив), например:

<AUTHOR-BIO>Джек Лондон - американский писатель, живший с 1876 по 1916 гг., им была написана повесть &lt;I>Зов предков&lt;I> и множество других литературных произведений.</AUTHOR-BIO>

элемент SPAN, который воспринимает символы HTML-разметки как литералы, отобразит содержимое поля следующим образом:

Джек Лондон - американский писатель, живший с 1876 по 1916 гг., им была написана повесть <I>Зов предков</I> и множество других литературных произведений.

Для некоторых сцепляемых HTML-элементов, таких как SPAN, можно установить для атрибута DATAFORMATAS значение “HTML”, что заставит браузер обрабатывать любую HTML-разметку, содержащуюся в тексте поля, а не просто воспринимать ее как символы-литералы. Предположим, что вышеуказанный элемент SPAN определён следующим образом:

<SPAN DATASRC="dsoInventory" DATAFLD="AUTHOR-BIO" DATAFORMATAS="HTML"></SPAN>

Текст внутри элемента I будет воспринят как текст с курсивным начертанием:

Джек Лондон - американский писатель, живший с 1876 по 1916 гг., им была написана повесть Зов предков и множество других литературных произведений.

Присвоение атрибуту DATAFORMATAS его значения по умолчанию “TEXT” дает тот же эффект, что и пропуск этого атрибута -символы HTML-разметки будут восприниматься как литералы.

Чтобы узнать, какие элементы вы можете использовать для передачи HTML-разметки посредством установки атрибутаDATAFORMATAS=”HTML”, обратитесь к таблице 5.18. Для таких элементов в предпоследнем столбце таблицы (“Передает ли разметку HTML, содержащуюся в поле XML?”) стоит “Да”.

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

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

Определение типа документа (DTD)

Данные, представленные в формате XML, обычно проходят процедуру валидации, т.е. проверки грамматики документа на соответствие определенным схемам. В таких схемах находится описание структур данных XML-документа. Необходимость проверки грамматики XML-документов заключается в следующем:

· XML-документ может быть предназначен для другой системы;

· XML-документ может содержать некорректные данные;

· XML-документ может содержать ошибки в структуре.

При обработке XML данных валидация – это фундамент для дальнейших действий с XML-документом, информация в валидном XML-документе может быть отправлена да дальнейшую обработку в целевой модуль. Существуют три основные разновидности схем: DTD, XDR и XML-схемы (XSD). На сегодняшний день актуальными являются DTD схемы и более современный подход – XML-схемы (XSD).

Схема DTD

DTD (Document Type Definition, определение типа документа) - это язык описания структуры XML-документа, который используется для проверки грамматики XML-документа и его соответствия определенному стандарту. Это позволяет парсеру на этапе обработки определить, соответствует ли документ необходимым требованиям, т.е. является ли документ валидным. DTD описывает:

· Какие элементы могут присутствовать в документе;

· Вхождение элементов (повторения и т.п.);

· Возможные атрибуты элементов;

· Обязательные / необязательные атрибуты;

· PCDATA и CDATA;

· Применяемые в документе сущности.

Например:

<?xml version="1.0"?>

<!DOCTYPE note [

<!ELEMENT note (to, from, Sbj, msg)>

<!ELEMENT to (#PCDATA)>

<!ELEMENT from (#PCDATA)>

<!ELEMENT Sbj (#PCDATA)>

<!ELEMENT msg (#PCDATA)>

]>

<note>

<to>Sunny</to>

<from>Oliver</from>

<Sbj>Hello</Sbj>

<msg>This is a good day!</msg>

</note>

В рамках DTD доступны четыре определяющих инструкций для разработки определения типа документа:

· ATTLIST (список атрибутов) - объявляет список XML-атрибутов. Эти атрибуты определяются именем, типом данных, неявными значениями по умолчанию и именами любых элементов, позволяющих их использование.

· ELEMENT - объявляет имя типа XML-элемента и его допустимые вложенные (дочерние) элементы.

· ENTITY - объявляет специальные символьные ссылки, текстовые макросы (наподобие инструкции #define языка C/C++) и другое повторяющееся содержимое (наподобие инструкции #include языка C/C++).

· NOTATION - объявляет внешнее содержимое, не относящееся к XML (например, двоичные графические данные), а также внешнее приложение, которое обрабатывает это содержимое.

Инструкция ATTLIST

Инструкция ATTLIST используется для перечисления и объявления всех атрибутов, которые могут принадлежать элементу. Сначала указывается имя элемента (или элементов), к которому относится список атрибутов. Затем для всех атрибутов по очереди указывается имя, обязательность и символьные данные, допустимые в качестве значения.

Синтаксис инструкции:

<!ATTLIST elementName attributeName dataType default>

Возможные параметры:

· elementName - имя элемента, к которому относится список атрибутов.

· attributeName - имя атрибута. Этот параметр повторяется столько раз, сколько нужно для перечисления всех атрибутов, используемых с elementName.

· dataType - тип данных для атрибута, названного в параметре attributeName; должен иметь одно из следующих значений:

· CDATA – атрибут содержит только символьные данные.

· ID - значение атрибута должно быть уникальным. Оно не может повторяться в других элементах или атрибутах данного документа.

· IDREF – атрибут ссылается на значение другого атрибута типа ID из данного документа.

· ENTITY – значение атрибута должно соответствовать имени внешней сущности ENTITY, не подвергавшейся синтаксическому разбору и объявленной в том же определении DTD.

· ENTITIES - значение атрибута содержит несколько имен внешних сущностей, не подвергавшихся синтаксическому разбору и объявленных в том же определении DTD.

· NMTOKEN – значение атрибута должно быть лексемой имени. Токены имени допускают символьные значения данных, но накладывают больше ограничений, чем тип CDATA. Лексема имени может содержать буквы, цифры и некоторые знаки препинания — точки, тире, символы подчеркивания и двоеточия. Однако значения лексем имени не могут содержать никаких пробелов и приравненных к ним символов.

· Enumerated – Значения атрибута ограничены перечисленными в списке.

· default - значение по умолчанию для атрибута, заданного параметром attributeName. Возможные значения по умолчанию приведены в таблице 1:

Таблица 1. Значения по умолчанию атрибута default

Значения по умолчанию Описание
#REQUIRED Атрибут должен присутствовать в XML-документе, иначе при синтаксическом разборе будет сформирована ошибка. В некоторых случаях, чтобы избежать возникновения ошибки, можно по желанию использовать поле defaultValue, поместив его непосредственно за этим ключевым словом.
#IMPLIED Атрибут может присутствовать в XML-документе, но его отсутствие не вызывает ошибки при синтаксическом разборе. В некоторых случаях можно по желанию также использовать поле defaultValue, поместив его непосредственно за этим ключевым словом.
#FIXED Значение атрибута зафиксировано в определении DTD; изменить или переопределить его в XML-документе нельзя. При использовании этого ключевого слова непосредственно за ним нужно обязательно поместить поле defaultValue для объявления постоянного значения атрибута.
defaultValue Значение по умолчанию, или фиксированное. Синтаксический анализатор вставляет это значение в XML-документ, если атрибут отсутствует или не используется в данном XML-документе. Все значения должны быть заключены в одинарные или двойные кавычки.

Например, для XML-документа:

<price currency = “RUR” symbol = “ϼ”>120</price>

DTD-схема:

<!ATTLIST price currency CDATA #REQUIRED symbol CDATA #IMPLIED>

Инструкция ELEMENT

Инструкция ELEMENT применяется для объявления каждого элемента, который используется внутри типа документа, определенного в DTD. Сначала инструкция объявляет имя элемента, а затем определяет, какое содержимое допустимо в элементе. Синтаксис инструкции:

<!ELEMENT name content >

Возможные параметры:

· name - имя элемента. Необходимо точно воспроизвести регистр.

· Content - допустимая модель содержимого для элемента может быть одной из следующих:

· ANY — внутри элемента допускается любое содержимое. При использовании в объявлении элемента, это ключевое слово разрешает открытие неограниченной модели содержимого для элементов и всех дочерних узлов.

· EMPTY — в элементе не допускается содержимое, он должен оставаться пустым.

· Объявленное правило для содержимого — в этом случае требуется написать правило для содержимого, заключенное в круглые скобки.

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

Таблица 2. Зарезервированные слова и символы ELEMENT

Символы Описание
#PCDATA Содержимое элемента может быть анализируемыми символьными данными.
name Имя элемента. Имя определяемого элемента или других элементов, определенных в DTD, заданное с помощью дополнительных объявлений ELEMENT. Если в правиле для содержимого нет других символов или знаков пунктуации, то допускается и требуется только одно вхождение именованного элемента.
() В объявлении модели содержимого для элемента требуются как минимум одни круглые скобки (можно вкладывать дополнительные скобки). Дополнительные скобки могут понадобиться для уточнения более сложной модели содержимого для элемента.
| Вертикальная черта используется для отделения двух именованных элементов. При использовании она указывает, что любой из элементов (до или после вертикальной черты) может отображаться как дочерний элемент.
, Запятая используется для отделения двух именованных элементов или вложенных правил. При использовании она указывает на порядок отображения элементов или правил.
? Вопросительный знак используется в качестве суффикса или операнда. При использовании указывает, что предыдущий элемент или правило является необязательным. Может использоваться только один раз в данном фрагменте структуры XML-документа.
+ Знак плюс используется в качестве суффикса или операнда. При использовании указывает, что предыдущий элемент или правило является обязательным. Может использоваться более одного раза в данном фрагменте структуры XML-документа.
* Звездочка используется в качестве суффикса или операнда. При использовании указывает, что предыдущий элемент или правило является необязательным. Может использоваться более одного раза в данном фрагменте структуры XML-документа.

Например для XML-документа:

<letter>

<title>Заголовок письма</title>

<message>Текст письма</message>

</letter>

DTD-схема:

<!ELEMENT letter (title, message)>

<!ELEMENT title (#PCDATA)>

<!ELEMENT message (#PCDATA)>

Инструкция ENTITY

Инструкция ENTITY используется для определения сущностей в DTD с целью их использования как в связанном с DTD XML-документе, так и собственно в DTD. ENTITY представляет собой сокращенную запись для размещения в XML-документе. Сокращенное имя указывается для имени параметра. Инструкции ENTITY особенно полезны в ситуациях, когда требуется повторять сведения или использовать объемные текстовые блоки, которые можно хранить в отдельных файлах. В XML-документе за сокращенным именем следует символ «;» (&abbName;)

DTD-схема:

<!ENTITY name “Hello, world!”>

XML-документ:

<element>&name;</element>

Инструкция NOTATION

Инструкция NOTATION используется для определения нотаций. Нотации позволяют XML-документу передавать внешним приложениям уведомляющие сведения. Синтаксис инструкции:

<!NOTATION name [SYSTEM|PUBLIC publicID] resource>

Возможные параметры:

· Name - имя нотации. Обязательно для всех определений нотации.

· publicID - общий идентификатор нотации. Требуется только если в объявлении используется ключевое слово PUBLIC.

· resource - значение для нотации. Обязательно для всех определений нотации. Обычно если нотация является общей, то это идентификатор URI, понятный для человека, но не для компьютеров. Для системных нотаций это значение может указывать имя файла приложения в системе, которое можно использовать для обработки данных, отличных от XML. Например, можно объявить нотацию для помощи в обработке непроанализированной внешней сущности, например графического файла в формате JPEG или GIF.

<!NOTATION MyCatalog SYSTEM "http://example.microsoft.com/catalog">

К основным недостаткам DTD схем относят синтаксические отличия от языка XML, а также отсутствие возможностей работы с типами данных. Эти недостатки устранены в XML-схемах. С созданием XML-схем на языке XSD можно ознакомиться в УМК, предложенном в предыдущей теме.

Связывание данных XML-документа с HTML-страницей

Связывание данных является первым из методов отображения XML-документа с традиционной HTML-страницы. Отображение XML с HTML-страниц имеет все преимущества хранения данных в XML-документе, с его гибким синтаксисом для структурирования данных и маркировки каждого фрагмента информации, не теряя богатых возможностей форматирования и динамического программирования HTML.

При связывании данных сначала XML-документ соединяется с HTML-страницей, а затем встраиваются стандартные HTML-элементы, такие какSPAN или TABLE, в отдельные XML-элементы. HTML-элементы затем автоматически отображают содержимое XML-элементов, в которые они встроены.

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

Наши рекомендации