C++ CSS HTML Java JavaScript MySQL Oracle PERL PHP SQL Unix VBScript XHTML XML Сети
Модуляризация XHTML - Разработка DTD с определенными и дополнительными модулями
 

Д. Разработка DTD с определенными и дополнительными модулями

Содержание

Данный раздел является информативным.

(например, [SMIL] DTD модульной архитектуры. Это делается путем применения технологий модуляризации XHTML постепенно усложняющимися способами, что приведет к созданию полного типа документа из отдельных не связанных друг с другом модулей.

Обратите внимание, что в данных примерах ни в коем случае не требуется изменение самих файловых сущностей модуля XHTML. Файловые сущности модуля XHTML полностью параметризованы, так что с помощью различных определений модулей и файлов драйверов можно настроить определение и модель содержимого каждого элемента и его иерархии.

И, наконец, помните, что большинство пользователей XHTML не дизайнеры, разрабатывающие специализированные DTD для конкретного клиента. Например:

Д.1. Определение дополнительных атрибутов

например:

<!ATTLIST %a.qname;
      %MyModule.pfx;myattr   CDATA        #IMPLIED
      %MyModule.xmlns.extras.attrib;
>

"myattr" с необязательным префиксом, определяемым "%MyModule.pfx" и значением типа CDATA, в элемент "a". Это происходит, потому что в XML допускается определение или расширение списка атрибутов элемента в любой точке DTD. Подробнее о квалифицированных именах и префиксах пространств имен см. в разделе "Определение пространства имен модуля".

информации, доступ к которой будет осуществляться с помощью скриптов через объектную модель документа (например).

Д.2. Определение дополнительных элементов

Определение дополнительных элементов ненамного сложнее определения дополнительных атрибутов. Обычно авторы DTD должны писать объявление для каждого элемента:

<!-- В подмодуле qname -->
<!ENTITY % MyModule.myelement.qname  "%MyModule.pfx;myelement" >
<!ENTITY % MyModule.myotherelement.qname  "%MyModule.pfx;myotherelement" >

<!-- В подмодуле declaration -->
<!ELEMENT %MyModule.myelement.qname; 
           ( #PCDATA | %MyModule.myotherelement.qname; )* >
<!ATTLIST %MyModule.myelement.qname;
          myattribute    CDATA    #IMPLIED
>

<!ELEMENT %MyModule.myotherelement.qname; EMPTY >

После определения элементы необходимо интегрировать в модель содержимого. Стратегии интеграции новых элементов или наборов элементов в модель содержимого обсуждаются в следующем разделе.

Д.3. Определение модели содержимого для набора модулей

Поскольку модель содержимого модулей XHTML полностью параметризована, авторы DTD могут изменять модель содержимого для каждого элемента каждого модуля. Подробно интерфейс модуля DTD определен в разделе "Построение модулей DTD". В основном для такого изменения используются два способа:

  1. Переопределение параметрической сущности ".content" для каждого элемента.
  2. Переопределение одной или нескольких сущностей глобальной модели содержимого (обычно через параметрическую сущность ".extras").

Выбор стратегии зависит от природы объединяемых модулей и интегрируемых элементов. В оставшейся части данного раздела описаны технологии интегрирования двух различных классов или модулей.

Д.3.1. Интеграция автономного модуля в XHTML

Если модуль (помните, что модуль может быть набором других модулей) содержит элементы, связанные в своей модели содержимого только друг с другом, он называется внутренне полным. По существу, такой модуль может использоваться самостоятельно. Например, можно определить DTD, представляющее только этот модуль, и использовать один из его элементов в качестве корневого. Процесс интеграции такого модуля в XHTML состоит из трех шагов:

  1. Определить, какие элементы будут считаться корневыми для нового модуля.
  2. Определить, куда эти элементы должны прикрепляться в дереве содержимого XHTML.
  3. Для каждой точки прикрепления в дереве содержимого добавить корневые элементы в определение содержимого элементов XHTML.

Рассмотрим прикрепление элементов, определенных выше. В этом примере элемент myelement является корневым. Чтобы прикрепить его под элементом img и только для элемента img XHTML, нужно сделать следующее:

<!ENTITY % img.content "( %MyModule.myelement.qname; )*">

DTD, определенное с такой моделью содержимого, позволит существовать документам с фрагментами наподобие следующего:

<img src="...">
<myml:myelement >Содержимое локально определенного элемента</myml:myelement>
</img>

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

Д.3.2. Использование нового модуля в модулях XHTML

Расширим приведенный выше пример. Чтобы прикрепить наш модуль к любому модулю, в котором допустима группа модели %Flow.mix, потребуется следующее:

<!ENTITY % Misc.extra
     "| %MyModule.myelement.qname;" >

Поскольку класс модели содержимого %Misc.extra используется в параметрической сущности %Misc.class, а эта параметрическая сущность используется во всех модулях XHTML, новый модуль будет доступен во всех расширенных типах документов XHTML.

Д.4. Создание нового DTD

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

Д.4.1. Создание простого DTD

Используя приведенный выше тривиальный пример, можно легко определить новое DTD, использующее и расширяющее модули XHTML. Для начала определим новые элементы и их модель содержимого в модуле:

<!-- Файл: simpleml-model-1.mod -->

<!-- Объявим параметрическую сущность, определяющую внешние пространства имен, 
     используемые в этом модуле -->

<!-- Установим параметрическую сущность (ПС), используемую во всех ATTLIST в этом модуле
     NS.prefixed.attrib инициализируется в модуле xhtml-qname, а 
     SimpleML.ns.noprefix.attrib - в файле драйвера SimpleML 
     DTD.-->
<!ENTITY % SimpleML.xmlns.attrib
  "%NS.decl.attrib;"
>

<!ENTITY % SimpleML.Common.attrib
  "%SimpleML.xmlns.attrib;
   id           ID           #IMPLIED"
>

<!ENTITY % SimpleML.element.qname "%SimpleML.pfx;element" >
<!ENTITY % SimpleML.otherelement.qname "%SimpleML.pfx;otherelement" >

<!ELEMENT %SimpleML.element.qname;
          ( #PCDATA | %SimpleML.otherelement.qname; )* >
<!ATTLIST %SimpleML.element.qname;
          myattribute    CDATA    #IMPLIED
          %SimpleML.Common.attrib;
>
<!ELEMENT %SimpleML.otherelement.qname; EMPTY >
<!ATTLIST %SimpleML.otherelement.qname;
          %SimpleML.Common.attrib;
>

<!ENTITY % SimpleML.img.myattr.qname "%SimpleML.pfx;myattr" >
<!ATTLIST %img.qname;
          %SimpleML.img.myattr.qname;  CDATA  #IMPLIED
>

<!-- Добавим наши элементы в модель содержимого XHTML -->
<!ENTITY % Misc.class
     "| %SimpleML.element.qname;" >

<!-- Введем модель содержимого XHTML Basic -->
<!ENTITY % xhtml-basic-model.mod
     PUBLIC "-//W3C//ENTITIES XHTML Basic 1.0 Document Model 1.0//EN"
            "http://www.w3.org/TR/xhtml-basic/xhtml-basic10-model-1.mod" >
%xhtml-basic-model.mod;

Затем определим драйвер DTD для нового языка:

<!-- файл: simpleml-1_0.dtd -->

<!-- Введем типы данных XHTML -->
<!ENTITY % xhtml-datatypes.mod
     PUBLIC "-//W3C//ENTITIES XHTML Datatypes 1.0//EN"
            "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-datatypes-1.mod" >
%xhtml-datatypes.mod;

<!-- Объявим фактическое пространство имен данного модуля -->
<!ENTITY % SimpleML.xmlns "http://www.example.com/xmlns/simpleml1" >

<!-- Отключим по умолчанию префиксацию для нового модуля -->
<!ENTITY % NS.prefixed "IGNORE" >
<!ENTITY % SimpleML.prefixed "%NS.prefixed;" > 

<!-- Префикс по умолчанию для элементов и атрибутов модуля -->
<!ENTITY % SimpleML.prefix "simpleml" >

<!-- Если в пространстве имен модуля используется префиксация -->
<![%SimpleML.prefixed;[
  <!ENTITY % SimpleML.pfx  "%SimpleML.prefix;:" >
]]>
<!ENTITY % SimpleML.pfx  "" >

<![%SimpleML.prefixed;[
  <!ENTITY % SimpleML.xmlns.extra.attrib 
       "xmlns:%SimpleML.prefix; %URI.datatype; #FIXED '%SimpleML.xmlns;'" >
]]>
<!ENTITY % SimpleML.xmlns.extra.attrib "" >

<!ENTITY % XHTML.xmlns.extra.attrib
       "%SimpleML.xmlns.extra.attrib;"
>
<!-- Установим модель содержимого нашего языка -->
<!ENTITY % xhtml-model.mod
     SYSTEM "simpleml-model-1.mod" >
<!-- Инициализируем xhtml basic DTD для всей работы -->
<!ENTITY % xhtml-basic.dtd
     PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" 
            "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd" >
%xhtml-basic.dtd;

При использовании этого DTD можно использовать префиксы пространства имен XML. При этом начало документа, использующего это новое DTD, может выглядеть так:

<!DOCTYPE html SYSTEM "simpleml-1_0.dtd" [
  <!ENTITY % SimpleML.prefixed "INCLUDE">
]>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:simpleml="http://www.example.com/xmlns/simpleml1" >
<head>
<title>Пример использования значений по умолчанию</title>
</head>
<body>
<p>Содержимое пространства имен XHTML</p>
<simpleml:element>
  Содержимое пространства имен SimpleML.
  <simpleml:otherelement />
</simpleml:element>
<p><img src="missing" alt="Изображение отсутствует" simpleml:myattr="value"/></p>
</body>
</html>

Д.4.2. Создание DTD путем расширения XHTML

Бывают ситуации, когда в XHTML (или в подмножество XHTML) добавляются полные, дополнительные или сложные модули. По существу такая ситуация не отличается от приведенного выше тривиального примера, единственное различие заключается в том, что добавляемый модуль объединяется в DTD по ссылке, а не путем явного включения новых определений в DTD.

Одним из таких сложных модулей является DTD для [MATHML]. Чтобы объединить MathML и XHTML в одно DTD, автор может просто определить, где содержимое MathML будет допустимо в пределах документа, и добавить корневой элемент MathML в эту точку модели содержимого. Сначала определим модуль модели содержимого, инициализирующий MathML DTD и подключающий его к модели содержимого:

<!-- Файл: mathml-model.mod -->
<!ENTITY % XHTML1-math
     PUBLIC "-//W3C//DTD MathML 2.0//EN"
            "http://www.w3.org/TR/MathML2/dtd/mathml2.dtd" >
%XHTML1-math;

<!ENTITY % Inlspecial.extra 
     "%a.qname; | %img.qname; | %object.qname; | %map.qname; 
      | %Mathml.Math.qname;" >

Затем определим драйвер DTD, идентифицирующий наш новый модуль модели как модель содержимого для DTD и передающий обработку драйверу XHTML 1.1 (например):

<!-- Файл: xhtml-mathml.dtd -->
<!ENTITY % xhtml-model.mod
      SYSTEM "mathml-model.mod" >
<!ENTITY % xhtml11.dtd
     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
            "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" >
%xhtml11.dtd;

Д.4.3. Создание DTD путем удаления и замены модулей XHTML

Еще один способ использования модулей XHTML авторами DTD - определение DTD, являющегося подмножеством семейства типов документов XHTML (если, например, они создают устройства или программное обеспечение, поддерживающее только подмножество XHTML). Это ненамного сложнее предыдущего примера. Вот основные шаги:

  1. Взять DTD семейства XHTML в качестве основы нового типа документа (мы будем использовать XHTML 1.1).
  2. Выбрать модули, которые должны быть удалены из этого DTD.
  3. Определить новое DTD, в котором эти модули отмечены как "IGNORE".
  4. Ввести новые модули.

Например, рассмотрим устройство, использующее модули XHTML, но без форм и таблиц. DTD для такого устройства будет выглядеть следующим образом:

<!-- Файл: xhtml-simple.dtd -->
<!ENTITY % xhtml-form.module "IGNORE" >
<!ENTITY % xhtml-table.module "IGNORE" >
<!ENTITY % xhtml-table.module "IGNORE" >
<!-- Введем основной модуль таблиц -->
<!ENTITY % xhtml-basic-table.mod
     PUBLIC "-//W3C//ELEMENTS XHTML Basic Tables 1.0//EN"
       "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-basic-table-1.mod"
>
%xhtml-basic-table.mod;
<!ENTITY % xhtml11.mod
     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
            "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" >
%xhtml11.mod;

Обратите внимание, что фактически модель содержимого XHTML 1.1 DTD не изменяется. Однако, поскольку XML игнорирует не определенные в модели содержимого элементы, элементы форм и таблиц автоматически выбрасываются из модели.

Д.4.4. Создание нового DTD

И, наконец, некоторым авторам DTD может понадобиться начать все с нуля, используя модуляризацию XHTML в качестве средства построения нового языка разметки. Язык должен состоять из необходимого минимального числа модулей XHTML. Кроме того, он может содержать другие модули, определенные с помощью XHTML, или какие-либо другие модули, которые хочет использовать автор. В данном примере мы возьмем обязательные модули XHTML, добавим некоторые модули, определенные с помощью XHTML, и добавим определенный выше модуль.

Первый шаг - использовать для нового модуля квалифицированных имен XHTML-шаблон, измененный таким образом, чтобы он позволял определять квалифицированные имена и пространства имен для наших новых элементов.

<!-- файл: myml-qname-1.mod -->

<!-- Введем типы данных - для объявления xmlns attributes используется
     ПС URI.datatype. -->
<!ENTITY % MyML-datatypes.mod
         PUBLIC "-//W3C//ENTITIES XHTML Datatypes 1.0//EN"
         "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-datatypes-1.mod" >
%MyML-datatypes.mod;

<!-- Отключим по умолчанию префиксацию для этого модуля -->
<!ENTITY % NS.prefixed "IGNORE" >
<!ENTITY % MyML.prefixed "%NS.prefixed;" >

<!-- Объявим фактическое пространство имен данного модуля -->
<!ENTITY % MyML.xmlns "http://www.example.com/xmlns/myml" >

<!-- Объявим префикс по умолчанию для данного модуля -->
<!ENTITY % MyML.prefix "myml" >

<!-- Если в пространстве имен модуля используется префиксация -->
<![%MyML.prefixed;[
  <!ENTITY % MyML.pfx  "%MyML.prefix;:" >
]]>
<!ENTITY % MyML.pfx  "" >

<!-- Объявим параметрическую сущность, определяющую внешние пространства имен, 
     используемые в этом модуле -->
<!ENTITY % MyML.xmlns.extra.attrib "" >

<!-- Объявим ПС, определяющую атрибуты xmlns для использования MyML. -->
<![%MyML.prefixed;[
<!ENTITY % MyML.xmlns.attrib
   "xmlns:%MyML.prefix;  %URI.datatype;  #FIXED '%MyML.xmlns;'
   %MyML.xmlns.extra.attrib;"
>
]]>
<!ENTITY % MyML.xmlns.attrib
   "xmlns   %URI.datatype;  #FIXED '%MyML.xmlns;'
    %MyML.xmlns.extra.attrib;"
>

<!-- Убедимся, что атрибуты пространства имен MyML включены в набор
     атрибутов XHTML -->
<![%NS.prefixed;[
<!ENTITY % XHTML.xmlns.extra.attrib
    "%MyML.xmlns.attrib;" >
]]>
<!ENTITY % XHTML.xmlns.extra.attrib
    ""
>
<!-- Теперь объявим имена элементов -->

<!ENTITY % MyML.myelement.qname "%MyML.pfx;myelement" >
<!ENTITY % MyML.myotherelement.qname "%MyML.pfx;myotherelement" >

Затем определим модуль, определяющий элементы и атрибуты, с использованием XHTML-шаблона.

<!-- ...................................................................... -->
<!-- Модуль My Elements ................................................... -->
<!-- файл: myml-elements-1_0.mod

     PUBLIC "-//MY COMPANY//ELEMENTS XHTML MyML Elements 1.0//EN"
     SYSTEM "http://example.com/DTDs/myml-elements-1_0.mod"

     xmlns:myml="http://example.com/DTDs/myml-1_0.dtd"
     ...................................................................... -->

<!-- Модуль My Elements

     myelement
     myotherelement

     Этот модуль только предоставляет структуру для некоторого
     содержимого PCDATA.
-->

<!ELEMENT %MyML.myelement.qname;
     ( #PCDATA | %MyML.myotherelement.qname; )* >
<!ATTLIST %MyML.myelement.qname;
     myattribute    CDATA    #IMPLIED
     %MyML.xmlns.attrib;
>

<!ELEMENT %MyML.myotherelement.qname; EMPTY >
<!ATTLIST %MyML.myotherelement.qname;
      %MyML.xmlns.attrib;
>

<!ENTITY % MyML.img.myattr.qname "%MyML.pfx;myattr" >
<!ATTLIST %img.qname;
      %MyML.img.myattr.qname;   CDATA  #IMPLIED
      %MyML.xmlns.attrib;
>

<!-- конец myml-elements-1_0.mod -->

Теперь построим описание модели содержимого, объединяющее новые элементы и атрибуты с прочими элементами XHTML. Следующий пример построен на модели содержимого XHTML, но является полным и автономным модулем модели содержимого:

<!-- ...................................................................... -->
<!-- Модуль MyML Model ................................................... -->
<!-- файл: myml-model-1.mod

     PUBLIC "-//MY COMPANY//ELEMENTS XHTML MyML Model 1.0//EN"
     SYSTEM "http://example.com/DTDs/myml-model-1_0.mod"

     xmlns:myml="http://www.example.com/xmlns/myml"
     ...................................................................... -->

<!-- Определим модель содержимого для Misc.extra -->
<!ENTITY % Misc.class
     "| %MyML.myelement.qname; ">

<!-- ....................  Встроенные элементы  ......................... -->

<!ENTITY % HeadOpts.mix  
     "( %meta.qname; )*" >

<!ENTITY % I18n.class "" >

<!ENTITY % InlStruct.class "%br.qname; | %span.qname;" >

<!ENTITY % InlPhras.class
     "| %em.qname; | %strong.qname; | %dfn.qname; | %code.qname; 
      | %samp.qname; | %kbd.qname; | %var.qname; | %cite.qname; 
      | %abbr.qname; | %acronym.qname; | %q.qname;" >

<!ENTITY % InlPres.class
     "" >

<!ENTITY % Anchor.class "| %a.qname;" >

<!ENTITY % InlSpecial.class "| %img.qname; " >

<!ENTITY % Inline.extra "" >

<!-- %Inline.class; включает все встроенные элементы,
     используемые в качестве компонентов в смесях
-->
<!ENTITY % Inline.class
     "%InlStruct.class;
      %InlPhras.class;
      %InlPres.class;
      %Anchor.class;
      %InlSpecial.class;"
>

<!-- %InlNoAnchor.class; включает все устроенные элементы, не являющиеся якорями,
     используемые в качестве компонентов в смесях
-->
<!ENTITY % InlNoAnchor.class
     "%InlStruct.class;
      %InlPhras.class;
      %InlPres.class;
      %InlSpecial.class;"
>

<!-- %InlNoAnchor.class; включает все устроенные элементы, не являющиеся якорями
-->
<!ENTITY % InlNoAnchor.mix
     "%InlNoAnchor.class;
      %Misc.class;"
>

<!-- %Inline.mix; включает все встроенные элементы, включая %Misc.class;
-->
<!ENTITY % Inline.mix
     "%Inline.class;
      %Misc.class;"
>

<!-- .....................  Элементы уровня блока  ...................... -->

<!ENTITY % Heading.class 
     "%h1.qname; | %h2.qname; | %h3.qname; 
      | %h4.qname; | %h5.qname; | %h6.qname;" >

<!ENTITY % List.class "%ul.qname; | %ol.qname; | %dl.qname;" >

<!ENTITY % BlkStruct.class "%p.qname; | %div.qname;" >

<!ENTITY % BlkPhras.class 
     "| %pre.qname; | %blockquote.qname; | %address.qname;" >

<!ENTITY % BlkPres.class "" >

<!ENTITY % Block.extra "" >

<!-- %Block.class; включает все элементы уровня блока,
     используемые в качестве компонентов в смесях
-->
<!ENTITY % Block.class
     "%BlkStruct.class;
      %BlkPhras.class;
      %BlkPres.class;
      %Block.extra;"
>

<!-- %Block.mix; включает все элементы уровня блока плюс %Misc.class;
-->
<!ENTITY % Block.mix
     "%Heading.class;
      | %List.class;
      | %Block.class;
      %Misc.class;"
>

<!-- ................  Все элементы содержимого  .................. -->

<!-- %Flow.mix; включает все текстовое содержимое, уровня блока и встроенное
-->
<!ENTITY % Flow.mix
     "%Heading.class;
      | %List.class;
      | %Block.class;
      | %Inline.class;
      %Misc.class;"
>

<!-- специальная модель содержимого для элемента pre -->
<!ENTITY % pre.content
    "( #PCDATA
     | %Inline.class; )*"
>

<!-- конец myml-model-1.mod -->

И, наконец, будем использовать XHTML-шаблон нового DTD, соответствующим образом измененный для нашего языка разметки:

<!-- ....................................................................... -->
<!-- MYML DTD  ............................................................. -->
<!-- файл: myml-1_0.dtd -->

<!-- Это драйвер DTD для myml 1.0.

     Используйте для его определения следующий общий формальный идентификатор:

         "-//MY COMPANY//DTD XHTML MYML 1.0//EN"

     И следующее пространство имен для уникальных для myml элементов:

         xmlns:myml="http://www.example.com/xmlns/myml"
-->
<!ENTITY % XHTML.version  "-//MY COMPANY//DTD XHTML MYML 1.0//EN" >

<!-- зарезервировано для использования с профилями документов ------->
<!ENTITY % XHTML.profile  "" >

<!-- Указать на использование модуля квалифицированных имен в качестве
дополнительного драйвера qname -->
<!ENTITY % xhtml-qname-extra.mod
     SYSTEM "myml-qname-1.mod" >

<!-- Определим используемую модель содержимого -->
<!ENTITY % xhtml-model.mod
     SYSTEM "myml-model-1.mod" >

<!-- Отключим поддержку двунаправленного текста -->
<!ENTITY % XHTML.bidi  "IGNORE" >

<!-- Введем структуру XHTML -->
<!ENTITY % xhtml-framework.mod
     PUBLIC "-//W3C//ENTITIES XHTML Modular Framework 1.0//EN"
            "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-framework-1.mod" >
%xhtml-framework.mod;

<!-- Модуль основного текста (обязателен)  ............................... -->
<!ENTITY % xhtml-text.mod
     PUBLIC "-//W3C//ELEMENTS XHTML Basic Text 1.0//EN"
            "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-text-1.mod" >
%xhtml-text.mod;

<!-- Модуль гипертекста (обязателен) .................................... -->
<!ENTITY % xhtml-hypertext.mod
     PUBLIC "-//W3C//ELEMENTS XHTML Hypertext 1.0//EN"
            "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-hypertext-1.mod" >
%xhtml-hypertext.mod;

<!-- Модуль списков (обязателен)  .......................................... -->
<!ENTITY % xhtml-list.mod
     PUBLIC "-//W3C//ELEMENTS XHTML Lists 1.0//EN"
            "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-list-1.mod" >
%xhtml-list.mod;

<!-- Модуль My Elements ................................................... -->
<!ENTITY % MyML-elements.mod
     SYSTEM "myml-elements-1.mod" >
%MyML-elements.mod;

<!-- Модуль изображений XHTML .................................... -->
<!ENTITY % xhtml-image.mod
     PUBLIC "-//W3C//ELEMENTS XHTML Images 1.0//EN"
            "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-image-1.mod" >
%xhtml-image.mod;

<!-- Модуль метаинформации документа ..................................... -->
<!ENTITY % xhtml-meta.mod
     PUBLIC "-//W3C//ELEMENTS XHTML Metainformation 1.0//EN"
            "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-meta-1.mod" >
%xhtml-meta.mod;

<!-- Модуль структуры документа (обязателен)  .............................. -->
<!ENTITY % xhtml-struct.mod
     PUBLIC "-//W3C//ELEMENTS XHTML Document Structure 1.0//EN"
            "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-struct-1.mod" >
%xhtml-struct.mod;

Д.5. Использование нового DTD

Когда разработка нового DTD завершена, оно может использоваться в любом документе. Использование DTD достигается путем ссылки на него в объявлении DOCTYPE документа:

<!DOCTYPE html SYSTEM "myml-1_0.dtd" >
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Пример использования значений по умолчанию</title>
</head>
<body>
<p>Содержимое пространства имен XHTML</p>
<myelement>
  Содержимое пространства имен SimpleML.
  <myotherelement />
</myelement>
<p><img src="missing" alt="Изображение отсутствует" myattr="value"/></p>
</body>
</html>

С помощью префиксов в этом документе могут использоваться и элементы, лежащие за пределами пространства имен XHTML:

<!DOCTYPE html SYSTEM "myml-1_0.dtd" [
  <!ENTITY % MyML.prefixed "INCLUDE" >
]>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Пример использования значений по умолчанию</title>
</head>
<body>
<p>Содержимое пространства имен XHTML</p>
<myml:myelement>
  Содержимое пространства имен myml.
  <myml:myotherelement />
</myml:myelement>
<p><img src="missing" alt="Изображение отсутствует" myml:myattr="value"/></p>
</body>
</html>


Главная