Параметрические компоненты компоненты, объявление и применение которых осуществляются только в рамках конкретного описания типов документа (DTD). В основном их использование обусловлено существованием некоторой формы сокращения. Вместо повторяющихся определений атрибутов, которые могут включаться в различные элементы, создается заменяющий их компонент-параметр.
Пример. Атрибут align используется в большинстве текстосодержащих элементов: заголовках, абзацах и т.д. Для замещения повторяющихся полных описаний данного атрибута в элементах отдельного документа вводится параметр Text Align:
<!ENTITY %TextAlign "align (left I center I right) #IMPLIED">
Следовательно, там, где в определении требуется атрибут align (выравнивание изображения фрагментов текста), вместо его полного описания достаточно поставить символ %, а за ним - имя соответствующего компонента-параметра. Именно так сделано для элемента hi:
<!ELEMENT hi %Inline;> <!ATTLIST hi
%attrs;
%TextAlign;>
Здесь присутствуют еще два компонента-параметра: inline и attrs. Один из них применяется для замещения описаний элемента, другой - для замещения списка значений атрибутов. Параметрические описания в XHTML обеспечивают удобство анализа правил описаний типов данных. Рассмотрим каждый параметр и результирующую структуру объявлений.
Первый компонент, inline, который отвечает за модель содержания для элемента hi, определен следующим образом:
<!ENTITY %Inline "(#PCDATA | %inline; I %misc;)*">
Компонент inline отражает только модель содержания, выбор между отсутствием и множеством для элементов #РСРАТАЛИ6О модель, представленную компонентами inline или misc. Заменив компонент inline его расширением, получим следующее объявление для элемента hi:
<!ELEMENT hi (#PCDATA | %inline; I %misc;)*>
Теперь обратимся к компоненту inline:
<!ENTITY %inline
"a I %special; I %fontstyle; I %phrase; I %inline.forms;">
Раскрыв все включения, получим результирующее объявление для элемента hi в виде:
<!ELEMENT hi (#PCDATA I а I %special; I %fontstyle; I %phrase; I %inline.forms; I %misc;)*>
На следующем этапе дадим полное определение компонента special:
<!ENTITY %special
"br I span I bdo I object I applet I img I map I iframe">
В последней записи дополнительные компоненты отсутствуют, а представленные элементы полностью раскрывают содержимое компонента special. Следовательно, объявление элемента hi принимает вид:
<!ELEMENT hi
(#PCDATA I a I br I span I bdo I object I applet I img I map I iframe I%fontstyle; I %phrase; I %inline.forms; I %misc;)* >
Далее необходимо раскрыть компонент f ontstyle. Его описание в XHTML DTD располагается сразу за объявлением компонента special:
<!ENTITY %fontstyle
"tt I i I b I big I small I u I s I strike I font I basefont ">
В том же документе раскрыты описания компонентов phrase, inline.forms, misc: <!ENTITY %phrase
"em I strong I dfn I code I q I sub I sup I samp I Mod I var I cite I abbr I acronym "> <!ENTITY %inline.forms
"input I select I textarea I label I button"> <!ENTITY %misc
"ins I del I script I noscript "> Описание элемента hi примет вид:
<!ELEMENT hi
(#PCDATA I a I br I span I bdo I objects I applet I img I map iframe I tt I i I b I big I small I u I s I strike I font I basefont I em I strong I dfn I code I q I sub I sup I samp I Mod I var I cite I abbr I acronym I input I select I textarea label I button I ins I del I script I noscript)*>
Теперь можно перейти к объявлению ATTLIST - списка атрибутов элемента hi:
<!ATTLIST hi %attrs; %TextAlign;
>
Компонент attrs определен следующим образом:
<!ENTITY % attrs "%coreattrs; %I18N; %events;"> при этом раскрывается предыдущее описание списка атрибутов:
<!ATTLIST hi %coreattrs; %I18N; events; %TextAlign;
>
Продолжим действия, предпринятые на предыдущих этапах, применительно к атрибутам. Начнем с компонента coreattrs :
<!ENTITY % coreattrs
"id ID #IMPLIED
class CDATA #IMPLIED
style %StyleSheet; #IMPLIED
title %Text; #IMPLIED"
>
Добавив к существующей записи ATTLIST эти определения, получим:
<!ATTLIST hi
id ID #IMPLIED
class CDATA #IMPLIED
style %StyleSheet; #IMPLIED
title %Text; #IMPLIED
%I18N;
%events; %TextAlign;
>
Анализируя представление компонента coreattrs, на следующем шаге необходимо раскрыть содержимое его составляющих - stylesheet и Text:
Раскроем содержимое IISN:
<!ENTITY % "lang xml:lang dir
I18N %LanguageCode; %LanguageCode; (ltrIrtl)
#IMPLIED #IMPLIED #IMPLIED"
>
В этих записях необходимо раскрыть только компонент LanguageCode: <!ENTITY % LanguageCode "NMTOKEN">
Примечание
В правилах описания типов наложение дополнительных ограничений на тип NMTOKEN, кроме тех, которые диктуются требованиями по присвоению имен, невозможно. Однако в комментариях к DTD указывается, что ярлык должен соответствовать кодировкам списка языков, представленных в документе RFC1766.
Расширенная запись для ATTLIST принимает вид:
<!ATTLIST id
class
style title lang
xml:lang dir %events; %TextAlign;
>
Параметр events раскрывается следующим образом:
<!ENTITY % events
"onclick %Script
ondblclick onmousedown onmouseup onmouseover onmousemove onmouseout onkeypress onkeydown onkeyup
#IMPLIED #IMPLIED #IMPLIED #IMPLIED #IMPLIED #IMPLIED #IMPLIED #IMPLIED #IMPLIED #IMPLIED"
>
В представленных записях необходимо раскрыть только содержимое компонента
Script:
<!ENTITY %Script "CDATA">
Включим полученные результаты в представленное описание hi ATTLIST:
<!ATTLIST id hi
ID #IMPLIED
class CDATA #IMPLIED
style title CDATA CDATA #IMPLIED #IMPLIED
lang NMTOKEN #IMPLIED
xml:lang dir NMTOKEN (ltr|rtl) #IMPLIED #IMPLIED
onclick CDATA #IMPLIED
ondblclick CDATA #IMPLIED
onmousedown CDATA #IMPLIED
onmouseup CDATA #IMPLIED
onmouseover CDATA #IMPLIED
onmousemove CDATA #IMPLIED
onmouseout CDATA #IMPLIED
onkeypress CDATA #IMPLIED
onkeydown CDATA #IMPLIED
onkeyup %TextAlign; CDATA #IMPLIED
>
На заключительном этапе следует расшифровать запись для атрибута TextAlign и включить ее в объявление ATTLIST:
<!ENTITY %TextAlign "align (left I center I right) #IMPLIED">
id ID #IMPLIED
class CDATA #IMPLIED
style title CDATA CDATA #IMPLIED #IMPLIED
lang NMTOKEN #IMPLIED
xml:lang dir NMTOKEN (ltr|rtl) #IMPLIED #IMPLIED
onclick ondbclick CDATA CDATA #IMPLIED #IMPLIED
onmousedown CDATA #IMPLIED
onmouseup CDATA #IMPLIED
onmouseover CDATA #IMPLIED
onmousemove CDATA #IMPLIED
onmouseout CDATA #IMPLIED
onkeypress CDATA #IMPLIED
onkeydown CDATA #IMPLIED
onkeyup align (left CDATA #IMPLIED center|right) #IMPLIED
Вернемся к параметризованной версии - она удобнее и проще:
<!ELEMENT hi %Inline;> <!ATTLIST hi %attrs; %TextAlign; >
Аналогичный процесс раскрытия сути параметризованного описания объектов можно провести для любого элемента или атрибута, представленных в описании типов XHTML DTD либо данных конкретного приложения.
Опубликовал vovan666
April 08 2013 14:58:38 ·
0 Комментариев ·
3802 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.