Разделы XML-документа

 

Физически XML-документ может состоять из несколько разделов (entities). При этом корневой элемент документа также является разделом, который называется разделом документа, хотя он никак специально не оформлен. Все разделы имеют содержимое; все они, кроме раздела документа и внешней DTD, имеют имя.

С точки зрения синтаксического разбора документа разделы подразделяются на анализируемые и неанализируемые. Неанализируемый раздел (unparsed entity) – это ресурс, содержимое которого XML-процессор воспринимает как внешние данные без их синтаксического анализа (например, текст, не являющийся XML-документом). Неанализируемые разделы всегда имеют нотацию, указывающую на их формат. Анализируемые разделы (parsed entities) предназначены для текстовой подстановки: всякий раз, когда XML-процессор встречает в документе имя такого раздела, он заменяет его на содержимое этого раздела.

Внутренние разделы

Декларации разделов подразделяются на внутренние и внешние. Декларация внутреннего разделавыглядит так:

 

<!ENTITY имя значение>

 

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

 

<!DOCTYPE spec [ <!ENTITY pr "проза"> <!ENTITY po "поэзия">]>

<books>

<book genre="&science;">

<title>Системы искусственного интеллекта</title>

<author>Федоров, Евгений</author>

</book> <book genre="&lections;">

<title>Введение в Semantic Web</title>

<author>Бабаков, Роман</author>

</book>

</books>

 

Из этого примера видно, что ссылка на раздел (entity reference) выглядит точно так же, как ссылка на специальный символ, т. е. имеет вид &имя;. На самом деле, специальные символы – это точно такие же ссылки, но соответствующие разделы заданы неявно во внутренней декларации языка XML. Подобные текстовые подстановки удобны для задания сокращений, позволяющих уменьшить объем документа, и для введения обозначений для часто изменяемых полей документа. Так, например, мы можем вынести во внутренний раздел дату очередной ревизии публикации и затем изменять только значение этого раздела.

Внешние разделы

Существуют два варианта деклараций внешнего раздела:

 

<!ENTITY имя SYSTEM URI [NDATA нотация]?>

<!ENTITY имя PUBLIC строка? URI [NDATA нотация]?>

 

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

- Если декларация содержит параметр NDATA, задающий нотацию раздела, то раздел является неанализируемым.

- Если параметр NDATA не задан, то раздел анализируемый, и соответствующий ресурс должен быть XML-документом. Это означает, что вместо ссылки на раздел в текст документа будет включаться текст соответствующего ресурса.

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

 

Примеры деклараций внешних ресурсов:

 

<!-- неанализируемый ресурс: GIF-образ -->

<!ENTITY photo SYSTEM "images/photo.gif" NDATA gif>

<!-- системный анализируемый ресурс -->

<!ENTITY hatch SYSTEM "http://www.textuality.com/boilerplate/hatch.xml">

<!-- публичный анализируемый ресурс -->

<!ENTITY hatch PUBLIC "-//Textuality//TEXT Standard hatch boilerplate//EN"

"http://www.textuality.com/boilerplate/hatch.xml">

 

Внешний анализируемый раздел должен начинаться с директивы <?xml …?>, которая может не содержать номера версии, но обязана содержать кодировку символов. Эта директива не входит в состав подставляемого текста.

 

Декларация типа документа

Декларация типа XML-документа (document type declaration) содержит определение типа документа(document type definition, DTD) или указывает на него. DTD — это специальная грамматика, описывающая синтаксис определенного класса документов; правила создания DTD стандартизованы, но использование DTD не рекомендовано W3C, т.к. разработана альтернатива – XSLT. Здесь приводится только описание деклараций, которые обеспечивают доступ к DTD. Декларация типа документа, как и декларация раздела, может быть внутренней или внешней. Внутренняя декларация имеет вид:

 

<!DOCTYPE имя [ тело ]>

 

а внешняя — те же два варианта, что и внешние разделы:

 

<!DOCTYPE имя SYSTEM URI [ тело ]>

<!DOCTYPE имя PUBLIC строка? URI [ тело ]>

 

Таким образом, отличие декларации типа документа от декларации раздела состоит только в том, что:

- она начинается с ключевого слова !DOCTYPE, а не !ENTITY;

- она может иметь тело, заключенное в квадратные скобки.

Имя такой декларации должно совпадать с именем корневого элемента, который она описывает, а тело должно соответствовать правилам построения DTD. Примеры внешних деклараций:

 

<!DOCTYPE spec SYSTEM "xml/1998/06/xmlspec-v20.dtd">

<!DOCTYPE spec PUBLIC "-//W3C//DTD Specification V2.0//EN"

"/XML/1998/06/xmlspec-v20.dtd">

 

Отметим, что внешняя декларация типа документа может содержать и ссылку на DTD, которая называется внешним подмножеством DTD, и тело, которое описывает дополнения к внешней DTD (оно называется внутренним подмножеством DTD).

 

Пример XML-документа. Чтобы собрать рассмотренные выше понятия в единое целое, приведем пример готового XML-документа, содержащего прейскурант книжного магазина:

 

 

<?xml version='1.0' encoding="windows-1251" standalone="yes"?>

<!DOCTYPE bookstore [

<!ENTITY po "поэзия">

<!ENTITY pr "проза">

<!ENTITY dr "драматургия"> ]>

<!--Этот файл содержит фрагмент базы данных книжного магазина-->

<bookstore>

<book genre="&pr;">

<title>Марш обреченных</title>

<author>

<first-name>Сергей</first-name>

<last-name>Довлатов</last-name>

</author>

<price>60.00</price>

</book>

<book genre="&po;">

<title>Часть речи</title>

<author>

<first-name>Иосиф</first-name>

<last-name>Бродский</last-name>

</author>

<price>55.00</price>

</book>

<book genre="&dr;">

<title>Антигона</title>

<author>

<name>Софокл</name>

</author>

<price>103.50</price>

</book>

</bookstore>

 

Таким образом, в общем случае XML-документы должны удовлетворять следующим требованиям:

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

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

- В XML учитывается регистр символов.

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

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

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

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

 


Лекция 6

 








Дата добавления: 2015-12-08; просмотров: 674;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.021 сек.