Модуляризация XHTML

         

Использование модуля как отдельного (stand-alone) ОТД


Иногда необходимо, чтобы модуль XHTML использовался также в качестве отдельного ОТД (Определения Типа Документа). Хорошим примером может служить вышеприведённый модуль Inventory. Его объекты должны быть внедряемы в документ XHTML и доступны как отдельные самостоятельные документы, извлечённые из базы данных (к примеру). Проще всего сделать это путём определения файла ОТД, который устанавливает компоненты Вашего модуля.

Подобное ОТД могло бы иметь такую структуру:

  • Включить модуль XHTML Datatypes (Ваш модуль qnames скорее всего использует некоторые из этих типов данных - он обычно использует тип данных URI для атрибута xmlns).
  • Включить модуль Qnames для Вашего модуля.
  • Определить объект параметра NS.decl.attrib как %MODULE.xmlns.extra.attrib;.
  • Включить модуль(и) Declaration для Вашего модуля.
  • Пример этого для нашего модуля Inventory приведён здесь:

    <!-- ...................................................................... --> <!-- Inventory Elements DTD ............................................... --> <!-- file: inventory-1.dtd

    PUBLIC "-//MY COMPANY//DTD XHTML Inventory 1.0//EN" SYSTEM "http://www.example.com/DTDs/inventory-1.dtd"

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

    <!-- Inventory Module

    shelf item sku desc price

    Этот модуль определяет простую структуру инвентаризации -->

    <!-- Вставляет типы данных --> <!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 % Inventory-qname.mod SYSTEM "inventory-qname-1.mod" > %Inventory-qname.mod;

    <!ENTITY % NS.decl.attrib "%Inventory.xmlns.extra.attrib;">

    <!ENTITY % Inventory.mod SYSTEM "inventory-1.mod" > %Inventory.mod;


    <!-- end of inventory-1.dtd -->

    На это ОТД могут затем ссылаться документы, которые используют только элементы из Вашего модуля:

    <!DOCTYPE shelf SYSTEM "inventory-1.dtd"> <shelf xmlns="http://www.example.com/xmlns/inventory"> <item> <desc> this is a description. </desc> <sku> this is the price. </sku> <price> this is the price. </price> </item> </shelf>

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

    <!DOCTYPE inventory:shelf SYSTEM "inventory-1.dtd" [ <!ENTITY % Inventory.prefixed "INCLUDE"> ]> <inventory:shelf xmlns:inventory="http://www.example.com/xmlns/inventory"> <inventory:item> <inventory:desc> this is a description. </inventory:desc> <inventory:sku> this is the sku. </inventory:sku> <inventory:price> this is the price. </inventory:price> </inventory:item> </inventory:shelf>

    Наконец, объект документа может использовать другой префикс пространства имён XML путём переобъявления его с внутренними поднаборами в шапке DOCTYPE:

    <!DOCTYPE i:shelf SYSTEM "inventory-1.dtd" [ <!ENTITY % Inventory.prefixed "INCLUDE"> <!ENTITY % Inventory.prefix "i"> ]> <i:shelf xmlns:i="http://www.example.com/xmlns/inventory"> <i:item> <i:desc> this is a description. </i:desc> <i:sku> this is the price. </i:sku> <i:price> this is the price. </i:price> </i:item> </i:shelf>


    Содержание раздела