Главная » XSLT » Применение типов в целях безопасности и точности выражения намерений

0

Задача

Ограниченные средства контроля типов в XSLT 1.0 не дают написать по-на­стоящему устойчивый к ошибкам шаблон.

Решение

Пользуйтесь расширенной системой типов в XSLT 2.0 для создания безопас­ных относительно типов функций и шаблонов.

Задавайте атрибут as для элементов, содержащих или возвращающих данные

К таким элементам относятся xsl:function, xsl:param, xsl:template, xsl:variable и xsl:with-param.

Задавайте атрибут type для элементов, создающих данные

К таким элементам относятся xsl:attribute, xsl:copy, xsl:copy-of, xsl:document, xsl:elementи xsl:result-document.

Обсуждение

Все совместимые со спецификацией XSLT 2.0 процессоры позволяют приме­нять простые типы данных, к примеру xs:integer или xs:string, для описа­ния переменных и параметров. Совместно с типами можно также употреблять символы *, + и ? для описания последовательностей:

<xsl:stylesheet version="2.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2 0 01/XMLSchema" >

<!– x – последовательность из 0 или более строк –> <xsl:variable name="x" select="para" as="xs:string*"/>

<!– y – последовательность из 1 или более строк. Атрибут select написан так, что это ограничение гарантированно выполняется, хотя, если вы точно знаете, что должен быть по меньшей мере один элемент para, то это выражение можно и опустить –> <xsl:variable name="y"

select="if (para) then para else ”" as="xs:string+"/>

<!– z – последовательность из 0 или 1 строки. –> <xsl:variable name="z" select="para[1]" as="xs:string?"/>

</xsl:stylesheet>

Если процессор поддерживает схемы, то можно пойти дальше и ссылаться на простые и составные типы, описанные в схеме, определенной пользователем. Та­кому процессору информация о пользовательских типах должна передаваться с помощью команды верхнего уровня xsl:import-schema.

<xsl:stylesheet version="2.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2 0 01/XMLSchema" xmlns:my="http://www.mydomain.com/ns/my">

<xsl:import-schema schema-location="my-schema.xsd"/>

<xsl:template match="/">

<!– Проверять, что результирующий элемент имеет тип my:BookType –> <xsl:element name="Book" type="my:BookType">

<xsl:apply-templates/> </xsl:element> </xsl:template>

<!– … –> </xsl:stylesheet>

Нельзя включать команду xsl:import-schema, если ваш процессор не поддер­живает схемы. Если схемы все-таки поддерживаются, но вы хотите, чтобы ваши табли­цы стилей были совместимы и с процессорами, не поддерживающими схемы, следует использовать атрибут use-when="system-property(‘xsl:schema-aware’) = ‘yes’" для всех элементов, требующих наличия процессора с поддержкой схем.

Мангано Сэл  XSLT. Сборник рецептов. – М.: ДМК Пресс, СПБ.: БХВ-Петербург, 2008. – 864 с.: ил.

По теме:

  • Комментарии