Определение сущностей в XSLT-шаблонах
Как известно, изначально в 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.