Создание простого ОТД
Используя простой предыдущий пример, можно определить новое ОТД, которое использует и довольно легко расширяет модули XHTML.
Во-первых, определим в модуле новые элементы и их модель содержимого:
<!-- Файл simpleml-model-1.mod -->
<!-- Объявляем Parameter Entity (PE)/Объект Параметра, который определяет любое внешнее пространство имён, используемое этим модулем -->
<!-- Устанавливаем PE, который используется в каждом ATTLIST данного модуля. NS.prefixed.attrib инициализирован в модуле xhtml-qname, а SimpleML.ns.noprefix.attrib инициализирован в файле ОТД драйвера SimpleML.-->
<!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;" >
<!-- Теперь вводим Basic content model XHTML --> <!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;
Затем определяем драйвер ОТД для нового языка:
<!-- Файл 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 --> <!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;
При использовании этого ОТД имеется возможность включить использование префиксов пространства имён XML. Для этого начало документа, использующего это новое ОТД, может выглядеть так:
<!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="Missing image" simpleml:myattr="value"/></p> </body> </html>