Универсальный язык разметки XML, продолжение
Разделы и их декларации Разделы 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="≺"> <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-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (510)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |