Примечание Консорциум W3C предполагает в дальнейшем определять модули на языке XML-Schema, но пока этот язык находится в стадии разработки, модули в XHTML создаются на базе правил описания типов (DTD)
Описание модульных фрагментов в DTD основано на использовании параметрических компонентов. Для представления абстрактных составляющих модулей задействуются шесть категорий компонентов, каждая из которых подчиняется специальному соглашению по применению наименований и определяется суффиксом:
• .mod - параметрические компоненты, представляющие DTD-модуль. Могут храниться в отдельных файлах, которые идентифицируются таким же суффиксом;
• .module - в больших модулях можно включать или исключать модули DTD, используя условные секции. Управляют модулем, представленным параметрическим компонентом с указанным суффиксом, с помощью ключевых СЛОВ IGNORE И INCLUDE;
• . content - компоненты с данным суффиксом используются для параметризации модели содержания типа элементов;
• .class - элементы, принадлежащие к одному классу, описываются параметрическими компонентами с указанным суффиксом;
• . mix - элементы, относящиеся к различным классам, могут быть представлены единственным параметрическим компонентом с таким суффиксом;
• . attrib - группа имен ярлыков, которая соответствует одной или нескольким завершенным спецификациям атрибутов внутри объявления ATTLIST. Может быть описана параметрическими компонентами, принадлежащими данной категории.
Рассмотрим применение указанных компонентов в одном из предопределенных модулей - модуле List (см. также главу 16).
Модуль List
Рекомендациями W3C определено, что модули начинаются с комментариев, имени файла, условий авторского права и даты последней редакции документа:
<! — —>
<!-- XHTML Модуль списков —> <!-- Файл: xhtml-list-1.mod
XHTML является преобразованием HTML в модульное приложение XML. Создан в 1998-2000 годах специалистами консорциума W3C (MIT, INRIA, Keio). Все права зацицены.
Последняя редакция: $Id: xhtml-modularization-2 0 0 0 07 0 5.html, v 1.7 2000/07/03 13:46:01 shane Ехр$ SMI -->
Затем следуют публичные и системные идентификаторы, использованные для данного модуля и даты последней редакции:
<!-- Этот модуль зарегистрирован открытым и системным идентификаторами:
PUBLIC "-//W3С//ELEMENTS XHTML Lists 1.0//EN" SYSTEM "xhtml-1ist-1.mod"
Редакции: (отсутствуют)
-->
Следующий сегмент комментариев кратко описывает назначение данного модуля:
<!-- Списки
dl, dt, dd, ol, ul, li В данном модуле объявляются типы элементов списка и используемые ими атрибуты.
-->
Ниже приведены составные имена параметрических компонентов для каждого элемента, входящего в состав модуля. Составное имя включает в себя имя элемента и суффикс . qname. Например, составное имя параметрического компонента, представляющего элемент dl, принимает вид dl. qname.
ENTITY % dl.qname "dl
ENTITY % dt.qname "dt
ENTITY % dd.qname " dd
ENTITY % ol.qname "ol
ENTITY % ul.qname "ul
ENTITY % li.qname "li
> > > > > >
В следующей секции полное описание элемента dl сводится к объявлению одного параметрического компонента:
<! — dl: Определение списка (Definition List) -->
<!ENTITY % dl.element "INCLUDE" > <! [%dl.element; [
<!ENTITY % dl.content "( %dt.qname; I %dd.qname; )+" > <!ELEMENT %dl.qname; %dl.content; >
<!-- Завершение описания элемента dl.element -->]]>
Прочитать это описание достаточно легко, если раскрывать его по алгебраическому правилу освобождения от скобок. Сначала рассматривается параметрический компонент dl. content. При его описании задействуются два параметрических компонента . qname, используемые для элементов dt и dl. Расширенная форма синтаксиса, примененного к данным элементам, имеет вид:
<!ENTITY % dl.content "(dt|dd)+" >
Объявление элемента, следующее непосредственно за параметром dl. content, определяет сам элемент. Если его раскрыть, оно будет выглядеть так:
<!ELEMENT dl (dt|dd)+ >
Вернемся к началу секции. Параметрический компонент dl. element описывается таким образом, чтобы включать и объявление параметрического компонента dl. content, и объявление элемента, которое сведет полное описание к одному компоненту. Если используется запись типа:
<!ENTITY %dl.element "INCLUDE" >
тогда в модуль помещается не только элемент dl, но и остальная информация, которая в расширенном виде необходима анализатору.
Определение списка атрибутов элемента dl происходит по той же схеме. Перечень атрибутов описывается одним параметрическим компонентом и включается в модуль с помощью ключевого слова INCLUDE. Ссылка на коллекцию атрибутов Common, которая может находиться в любом месте завершенного описания DTD, осуществляется посредством параметрического компонента, в записи которого должен присутствовать суффикс . attrib:
<!ENTITY % dl.attlist "INCLUDE" > <! [%dl.attlist; [
<!ATTLIST %dl.qname; %Common.attrib;>
<!-- Завершение описания компонента dl.attlist -->]]>
Аналогичным образом происходит параметризация объявлений элементов и их атрибутов для остальных элементов, включенных в модуль. Полное описание модуля приведено в листинге 14.1.
Листинг 14.1. Представление модуля XHTML-списков - xhtml-list-1 .mod
<!-- -->
<!-- XHTML Модуль списков —> <!-- Файл: xhtml-list-1.mod
XHTML является преобразованием HTML в модульное приложение XML. Создан в 1998-2000 годах специалистами консорциума W3C (MIT, INRIA, Keio). Все права защищены.
Последняя редакция: $Id: xhtml-modularization-2 0 0 0 07 05.html, v 1.7 2000/07/03 13:46:01 shane Ехр$ SMI
Этот модуль зарегистрирован открытым и системным идентификаторами:
PUBLIC "-//W3С//ELEMENTS XHTML Lists 1.0//EN" SYSTEM "xhtml-list-1.mod"
Редакции: (отсутствуют)->
<!-- Списки
dl, dt, dd, ol, ul, li
В данном модуле объявляются типы элементов списка и используемые ими атрибуты
-->
<!ENTITY % dl.qname "dl
<!ENTITY % dt.qname "dt
<!ENTITY % dd.qname "dd
<!ENTITY % ol.qname "ol
<!ENTITY % ul.qname "ul
<!ENTITY % li.qname "li
> > > > > >
dl: Определение списка (Definition List) ,
<!ENTITY % dl.element "INCLUDE" > <![%dl.element;[
<!ENTITY %dl.content "( %dt.qname; I %dd.qname; )+" > <!ELEMENT %dl.qname; %dl.content; >
<!-- Завершение описания элемента dl.element -->]]> <!ENTITY % dl.attlist "INCLUDE" > <![%dl.attlist;[ <!ATTLIST %dl.qname; %Common.attrib;>
<!-- Завершение описания компонента dl.attlist -->]]>
<!-- dt: Определение понятия (Definition Term) -->
<!ENTITY % dt.element "INCLUDE" > <! [%dt.element; [
<ENTITY %dtcontent
<"( #PCDATA I %Inline.mix; )*" > ELEMENT %dl.qname; %dl.content; >
<!-- Завершение описания элемента dt.element -->]]> <!ENTITY % dt.attlist "INCLUDE" > <! [%dt.attlist; [ <!ATTLIST %dt.qname; %Common.attrib;>
<!-- Завершение описания компонента dl.attlist ->]]>
<!-- dd: Определение описаний (Definiton Description) -->
<!ENTITY % dd.element "INCLUDE" >
[%dd.element;[ ENTITY %dt.content
"( #PCDATA I %Flow.mix; )*" >
ELEMENT %dd.qname; %dd.content; > <!-- Завершение описания элемента dd.element -->]]>
<!ENTITY % dd.attlist "INCLUDE" > <! [%dd.attlist; [ <!ATTLIST %dd.qname; %Common.attrib;>
<!-- Завершение описания компонента dd.attlist -->]]>
<!-- ol: Нумерованный список (Ordered List, numbered styles)-->
<!ENTITY % ol.element "INCLUDE" >
<![%ol.element;[
<!ENTITY %ol.content "( %li.qname; )+" > <!ELEMENT %ol.qname; %ol.content; >
<!-- Завершение описания элемента ol.element -->]]> <!ENTITY % ol.attlist "INCLUDE" > <! [%ol.attlist; [ <!ATTLIST %ol.qname; %Common.attrib;
<!-- Завершение описания компонента ol.attlist —>]]>
<!-- ul: Маркированный список (Unordered List, bullet styles)-->
<!ENTITY % ul.element "INCLUDE" >
<![%ul.element;[
<!ENTITY %ul.content "( %li.qname; )+" > <!ELEMENT %ul.qname; %ul.content; >
<!-- Завершение описания элемента ul.element -->]]> <!ENTITY % ul.attlist "INCLUDE" > <! [%ul.attlist; [ <!ATTLIST %ul.qname; %Common.attrib;
[%li.attlist; [ ATTLIST %li.qname;< < < < <
%Common.attrib;>
<!-- Завершение описания компонента li.attlist -->]]> <!-- Завершение модуля xhtml-list-1.mod -->]]>
Опубликовал vovan666
April 09 2013 22:31:30 ·
0 Комментариев ·
3567 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.