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

       

Подмодуль Qualified Names/Квалифицированные Имена


Сначала Вам нужно определить подмодуль квалифицированных имён (подмодуль это обычный файловый объект, который отделён таким образом, что он может быть вставлен в результирующее ОТД в соответствующей точке). Подмодуль квалифицированных имён конструируется с прохождением следующих этапов (где строка MODULE заменена на соответствующую строку нового модуля):

  • Определить объект параметра MODULE с префиксом, извещающим о том, используются ли элементы модуля с именами с префиксами ПИ XML, или нет. Значение по умолчанию этого объекта параметра должно быть "%NS.prefixed;". Объект параметра NS.prefixed определён каркасом XHTML как IGNORE по умолчанию и может использоваться в объекте документа для запуска (switch on) префиксирования для всех включённых пространств имён (в том числе и ПИ модулей XHTML).
  • Определить объект параметра MODULE.xmlns, содержащий идентификатор ПИ для этого модуля.
  • Определить объект параметра MODULE.prefix, содержащий строку префикса по умолчанию для использования при запущенном префиксировании (enabled).
  • Определить объект параметра MODULE.pfx, являющийся "%MODULE.prefix;:", если префиксирование запущено, и "" -  если не запущено.
  • Определить объект параметра MODULE.xmlns.extra.attrib, содержащий объявление любых атрибутов ПИ XML для ПИмён, на которые ссылается данный модуль (напр., xmlns:xlink).

    Если %MODULE.prefixed установлен в INCLUDE, этот атрибут должен включать также объявление xmlns:%MODULE.prefix;.

  • Определить объект параметра XHTML.xmlns.extra.attrib как MODULE.xmlns.extra.attrib. Обычно это переопределяется файлом драйвера типа документа, но если это не так, то данное определение принимается как определение по умолчанию.
  • Для каждого элемента, определённого модулем, создать объект параметра в форме "MODULE.NAME.qname", в котором будет содержаться квалифицированное имя. Значение этого объекта параметра обязано быть "%MODULE.pfx;NAME". Таким образом, разобранное значение будет "PREFIX:NAME", если префиксирование запущено, и "NAME" - в противном случае.


    Если модуль добавляет атрибуты к элементам, определённым в модуле, не разделяющем (share) ПИ данного модуля, объявите эти атрибуты так, чтобы они использовали префикс %MODULE.pfx. Например:

    <ENTITY % MODULE.img.myattr.qname "%MODULE.pfx;myattr" >

    Пример подмодуля qname для гипотетического Inventory Module приведён ниже:

    <!-- ...................................................................... --> <!-- Inventory Qname Module ................................................... --> <!-- file: inventory-qname-1.mod

    PUBLIC "-//MY COMPANY//ELEMENTS XHTML Inventory Qnames 1.0//EN" SYSTEM "http://www.example.com/DTDs/inventory-qname-1.mod"

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

    <!-- Объявляется значение по умолчанию для префиксирования элементов этого модуля --> <!-- Заметьте, штаа NS.prefixed будет переопределён в XHTML Framework или объектом документа. --> <!ENTITY % NS.prefixed "IGNORE" > <!ENTITY % Inventory.prefixed "%NS.prefixed;" >

    <!-- Объявляется действующее ПИ данного модуля --> <!ENTITY % Inventory.xmlns "http://www.example.com/xmlns/inventory" >

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

    <!-- Объявляется префикс для данного модуля --> <![%Inventory.prefixed;[ <!ENTITY % Inventory.pfx "%Inventory.prefix;:" > ]]> <!ENTITY % Inventory.pfx "" >

    <!-- Объявляется атрибут ПИ xml для данного модуля --> <![%Inventory.prefixed;[ <!ENTITY % Inventory.xmlns.extra.attrib "xmlns:%Inventory.prefix; %URI.datatype; #FIXED '%Inventory.xmlns;'" > ]]> <!ENTITY % Inventory.xmlns.extra.attrib "" >

    <!-- Объявляется дополнительное ПИ. которое должно быть включено в элементы XHTML --> <!ENTITY % XHTML.xmlns.extra.attrib %Inventory.xmlns.extra.attrib; >

    <!-- Теперь определяются квалифицированные имена для всех элементов модуля --> <!ENTITY % Inventory.shelf.qname "%Inventory.pfx;shelf" > <!ENTITY % Inventory.item.qname "%Inventory.pfx;item" > <!ENTITY % Inventory.desc.qname "%Inventory.pfx;desc" > <!ENTITY % Inventory.sku.qname "%Inventory.pfx;sku" > <!ENTITY % Inventory.price.qname "%Inventory.pfx;price" >


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