Определение сущностей в XSLT-шаблонах
Материал из Umicms
Как известно, изначально в XML определены лишь следующие сущности:
< -- < > -- > & -- & ' -- ' " -- "
Для того, чтобы можно было использовать свои сущности, следует их определить заранее, например, указав символьные ссылки.
Определение сущностей непосредственно в файле шаблона:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> <!ENTITY middot "·"> <!ENTITY reg "®"> <!ENTITY copy "©"> <!ENTITY raquo "»"> <!ENTITY laquo "«"> <!ENTITY myentity "this is my entity"> ]> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" encoding="utf-8"/> <xsl:template match="/"> <html> <body> <p>nbsp: =  </p> <p>middot: · = ·</p> <p>reg: ® = ®</p> <p>copy: © = ©</p> <p>raquo: » = »</p> <p>laquo: « = «</p> <p>myentity: &myentity; = this is my entity</p> </body> </html> </xsl:template> </xsl:stylesheet>
Обратите внимание, что для сущности myentity мы определили в качестве значения строку "this is my entity", и теперь можем так же как и с остальными символами использовать ссылку &myentity; внутри кода шаблонов. В браузер будет выведен следующий код:
<html> <body> <p>nbsp: = </p> <p>middot: · = ·</p> <p>reg: ® = ®</p> <p>copy: © = ©</p> <p>raquo: » = »</p> <p>laquo: « = «</p> <p>myentity: this is my entity = this is my entity</p> </body> </html> <!-- This page generated in 0.018381 secs -->
Определение сущностей в отдельном файле:
Можно вынести все определения сущностей в отдельный файл, например entities.dtd:
<!ENTITY yes "Да"> <!ENTITY no "Нет"> <!ENTITY welcome "Добро пожаловать,"> <!ENTITY errors "Ошибки"> <!ENTITY enter-captcha "Введите код с картинки">
А потом подключить их в шаблоны, указав путь до файла:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xsl:stylesheet SYSTEM "i18n/entities.dtd"> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" encoding="utf-8"/> <xsl:template match="/"> ... </xsl:template> </xsl:stylesheet>
В этом примере показано, как при помощи сущностей можно реализовать интернационализацию шаблонов. Для использования этой возможности наиболее эффективно в UMI.CMS существует протокол ULang.
