Определение сущностей в XSLT-шаблонах

Материал из Umicms
Перейти к:навигация, поиск


Как известно, изначально в XML определены лишь следующие сущности:

 < -- &lt; 
 > -- &gt; 
 & -- &amp; 
 ' -- &apos; 
 " -- &quot;

Для того, чтобы можно было использовать свои сущности, следует их определить заранее, например, указав символьные ссылки.


Определение сущностей непосредственно в файле шаблона:

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE xsl:stylesheet [
<!ENTITY nbsp "&#160;"> 
<!ENTITY middot "&#183;">
<!ENTITY reg "&#174;">
<!ENTITY copy "&#169;">
<!ENTITY raquo "&#187;">
<!ENTITY laquo "&#171;">
<!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: &nbsp; = &#160;</p>
		<p>middot: &middot; = &#183;</p>
		<p>reg: &reg; = &#174;</p>
		<p>copy: &copy; = &#169;</p>
		<p>raquo: &raquo; = &#187;</p>
		<p>laquo: &laquo; = &#171;</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.