Модуляризация XHTML - Разработка DTD с определенными и дополнительными модулями


Модуляризация XHTML - Разработка DTD с определенными и дополнительными модулями
[назад] [далее] [содержание]
Д. Разработка DTD с определенными и дополнительными модулями
Содержание
Д.1. Определение дополнительных атрибутов
Д.2. Определение дополнительных элементов
Д.3. Определение модели содержимого для набора модулей
Д.3.1. Интеграция автономного модуля в XHTML
Д.3.2. Использование нового модуля в модулях XHTML
Д.4. Создание нового DTD
Д.4.1. Создание простого DTD
Д.4.2. Создание DTD путем расширения XHTML
Д.4.3. Создание DTD путем удаления и замены модулей XHTML
Д.4.4. Создание нового DTD
Д.5. Использование нового DTD
Данный раздел является информативным.
Главной целью определения модулей XHTML и общей методологии модуляризации является упрощение разработки типов документов на базе XHTML. Эти типы могут расширять XHTML путем добавления новых возможностей (например, [SMIL]) или определять подмножество XHTML для использования специальным устройством. В данном разделе описываются технологии, позволяющие разработчикам типов документов использовать преимущества реализации XML DTD модульной архитектуры. Это делается путем применения технологий модуляризации XHTML постепенно усложняющимися способами, что приведет к созданию полного типа документа из отдельных не связанных друг с другом модулей.
Обратите внимание, что в данных примерах ни в коем случае не требуется изменение самих файловых сущностей модуля XHTML. Файловые сущности модуля XHTML полностью параметризованы, так что с помощью различных определений модулей и файлов драйверов можно настроить определение и модель содержимого каждого элемента и его иерархии.
И, наконец, помните, что большинство пользователей XHTML не обязаны быть авторами DTD. Авторы DTD - это обычно люди, определяющие специальную разметку, улучшающую читаемость и простоту представления документа или его машинную обработку, или специализированные дизайнеры, разрабатывающие специализированные DTD для конкретного клиента. Например:
Организация предоставляет информацию по подписке через Web-интерфейс. Информация о подписчиках хранится в базе данных на базе XML. Можно передавать эту информацию из базы в Web путем внедрения записей XML из базы непосредственно в документ XHTML. Можно и просто внедрять записи, но организация может определить модуль DTD с описанием записей, прикрепить его к XHTML DTD и создать тем самым полное DTD для своих страниц. Затем эта организация может получать доступ к данным с помощью новых элементов через объектную модель документов [DOM], проверять корректность документов, предоставлять определения стиля для элементов с использованием каскадных таблиц стилей [CSS2] и т.д. Потратив время на определение структуры данных и создание DTD с помощью определенных в этом разделе процессов, организация сможет воспользоваться всеми преимуществами XML.
Клиент разрабатывает специализированное устройство. Оно будет поддерживать только некоторое подмножество XHTML и всегда будет получать доступ к Интернет через прокси-сервер, выполняющий проверку корректности содержимого перед передачей его клиенту (с целью минимизации обработки ошибок клиентом). Для гарантии корректности содержимого разработчик создает DTD, являющееся подмножеством XHTML, с помощью описанных в этом разделе процессов. Затем новое DTD может использоваться прокси-сервером и устройствами, а также разработчиками контента, чтобы они могли проверить соответствие своих документов этому DTD. Эти простые действия позволяют клиенту использовать определенную в настоящем документе архитектуру, существенно удешевить разработку DTD и гарантировать полную поддержку выбранного множества XHTML.
Д.1. Определение дополнительных атрибутов
В некоторых случаях расширение XHTML может заключаться только в использовании дополнительных атрибутов. Атрибуты могут добавляться в элемент просто путем указания дополнительного ATTLIST для этого элемента, например:
<!ATTLIST %a.qname;
%MyModule.pfx;myattr CDATA #IMPLIED
%MyModule.xmlns.extras.attrib;
>
Это позволит добавить атрибут "myattr" с необязательным префиксом, определяемым "%MyModule.pfx" и значением типа CDATA, в элемент "a". Это происходит, потому что в XML допускается определение или расширение списка атрибутов элемента в любой точке DTD. Подробнее о квалифицированных именах и префиксах пространств имен см. в разделе "Определение пространства имен модуля".
На самом деле добавление атрибута в 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". В основном для такого изменения используются два способа:
Переопределение параметрической сущности ".content" для каждого элемента.
Переопределение одной или нескольких сущностей глобальной модели содержимого (обычно через параметрическую сущность ".extras").
Выбор стратегии зависит от природы объединяемых модулей и интегрируемых элементов. В оставшейся части данного раздела описаны технологии интегрирования двух различных классов или модулей.
Д.3.1. Интеграция автономного модуля в XHTML
Если модуль (помните, что модуль может быть набором других модулей) содержит элементы, связанные в своей модели содержимого только друг с другом, он называется внутренне полным. По существу, такой модуль может использоваться самостоятельно. Например, можно определить DTD, представляющее только этот модуль, и использовать один из его элементов в качестве корневого. Процесс интеграции такого модуля в XHTML состоит из трех шагов:
Определить, какие элементы будут считаться корневыми для нового модуля.
Определить, куда эти элементы должны прикрепляться в дереве содержимого XHTML.
Для каждой точки прикрепления в дереве содержимого добавить корневые элементы в определение содержимого элементов 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). Это ненамного сложнее предыдущего примера. Вот основные шаги:
Взять DTD семейства XHTML в качестве основы нового типа документа (мы будем использовать XHTML 1.1).
Выбрать модули, которые должны быть удалены из этого DTD.
Определить новое DTD, в котором эти модули отмечены как "IGNORE".
Ввести новые модули.
Например, рассмотрим устройство, использующее модули 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>
[назад] [далее] [содержание]
содержание | 2 | Бестраншейное строительство трубопроводов
Используются технологии uCoz