XSL

Материал из Seo Wiki - Поисковая Оптимизация и Программирование
Перейти к навигацииПерейти к поиску

XSL (eXtensible Stylesheet Language) — расширяемый язык таблиц стилей.

Основные отличия от CSS

  • CSS и XSL — принципиально разные технологии. Их области применения пересекаются лишь частично.
  • CSS-форматирование применяется к HTML-документу браузером на клиентской стороне, а XSL-преобразование выполняется, как правило, на сервере, затем его результат отправляется в браузер клиента.
  • Языком, лежащим в основе XSL, является XML, а это означает, что XSL более гибок, универсален, и у разработчиков появляется возможность использования средств контроля за корректностью составления таких стилевых списков (используя DTD или схемы данных).

Немного деталей

Разработчики обычно не задумываются о разнице в использовании терминов XSL и XSLT. На самом деле, язык XSL состоит из трех взаимосвязанных спецификаций концерна W3C:

  • XSL Transformations (XSLT) - язык преобразований предназначен для изменения структуры документа XML или его преобразования в документ на другом диалекте XML.
  • XSL Formatting Objects (XSL-FO) - язык форматирования объектов представляет собой словарь XML, предназначенный для описания вывода документов XML на экран.
  • XPath - язык XPath представляет собой подмножество XSL, используемое языком XSLT для идентификации отдельных частей документа XML(язык запросов к узлам дерева документа XML).


XSL — трансформация

С помощью XSL можно трансформировать XML-документ в любой вид, будь то HTML, WML, RTF, PDF, SQL, даже в SWF (flash запускаемый модуль), а так же в XML и XSL. XSL несёт в себе информацию о том, как будет оформлен документ, где и как должны располагаться данные.

Самой доступной XSL-T машиной на данный момент для Microsoft Windows является MSXML (поставляется с Internet Explorer начиная с версии 4.5 и выше); для систем на основе GNU — xsltproc. Для того, чтобы обработать XML документ c помощью XSL, необходимо в XML документе написать следующую инструкцию:

<source lang="xml">

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="my-style.xsl"?>
<root>
   < !-- ... -- >
</root>

</source>

Под Linux:

<source lang="bash"> $ xsltproc -o result.html my-style.xsl document.xml </source>

XSLT

Основная статья: XSLT

Язык XSLT состоит из трёх с половиной десятков инструкций, все они имеют общий вид:

<source lang="xml"> <пространство-имен:имя-инструкции [атрибут="значение" [атрибут="значение"]]> </пространство-имён:имя-инструкции>,</source>

где пространство-имен обычно «xsl», но могут использоваться и другие.

XSLT документ всегда является состоятельным(или валидным) XML документом и имеет следующую структуру:

<source lang="xml">

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="/">
		< !-- набор инструкций -- >
	</xsl:template>
	< !-- ... -- >
</xsl:stylesheet>

</source>

xsl:stylesheet — является корневым элементом для любого XSL документа. В него могут быть вложены теги верхнего уровня. (xsl:transform — устаревший синоним для xsl:stylesheet)

XSL-FO

Основная статья: XSL-FO

Пример XSL-FO документа (взят из XSL Formatting Objects Tutorial):

<source lang="xml">

<?xml version="1.0" encoding="iso-8859-1"?>

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <fo:layout-master-set>
    <fo:simple-page-master master-name="my-page">
      <fo:region-body margin="1in"/>
    </fo:simple-page-master>
  </fo:layout-master-set>

  <fo:page-sequence master-reference="my-page">
    <fo:flow flow-name="xsl-region-body">
      <fo:block>Hello, world!</fo:block>
    </fo:flow>
  </fo:page-sequence>
</fo:root>

</source>

Секреты мастерства

Рекурсивный цикл

XML: <source lang="xml">

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="for.xsl"?>
<root/>

</source> for.xsl: <source lang="xml">

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="root">
	<HTML>
	   <BODY>
		<xsl:call-template name="for">
		    <xsl:with-param name="i" select="1"/>
		    <xsl:with-param name="n" select="5"/>
		</xsl:call-template>
	   </BODY>
	</HTML>
    </xsl:template>
	
    <xsl:template name="for">
	<xsl:param name="i"/>
	<xsl:param name="n"/>
	<xsl:value-of select="$i"/>
	<xsl:if test="$i < $n">
	   <xsl:text>, </xsl:text>
	   <xsl:call-template name="for">
		<xsl:with-param name="i" select="$i+1"/>
		<xsl:with-param name="n" select="$n"/>
	   </xsl:call-template>
	</xsl:if>
   </xsl:template>
</xsl:stylesheet>

</source> Результат:

1, 2, 3, 4, 5

Группировка и сортировка годов

XML: <source lang="xml">

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="years.xsl"?>
<root>
   <object year="2003"/>
   <object year="2001"/>
   <object year="2005"/>
   <object year="2005"/>
   <object year="2003"/>
   <object year="2006"/>
   <object year="2006"/>
   <object year="2006"/>
   <object year="2005"/>
   <object year="2001"/>
</root>

</source> years.xsl: <source lang="xml">

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	
    <xsl:key name="years" match="/root/object" use="@year" />
    <xsl:template match="root" priority="-1">
	<HTML>
	    <BODY>
		<xsl:for-each select="object[generate-id()=generate-id(key('years',@year))]">
		    <xsl:sort select="@year" order="descending"/>
		    <xsl:value-of select="@year" />
		    <xsl:if test="position()!=last()">
			<xsl:text>, </xsl:text>
		    </xsl:if>
		</xsl:for-each>
	    </BODY>
	</HTML>
   </xsl:template>
</xsl:stylesheet>

</source> Результат:

2006, 2005, 2003, 2001

См. также

Ссылки

ca:XSL cs:Extensible Stylesheet Language da:XSL de:Extensible Stylesheet Language en:Extensible Stylesheet Language es:Extensible Stylesheet Language eu:XSL fa:زبان امتدادپذیر روی‌انداز سبک fi:Extensible Stylesheet Language fr:Extensible stylesheet language he:XSL id:Extensible Stylesheet Language is:XSL it:Extensible Stylesheet Language ja:Extensible Stylesheet Language ko:XSL nl:Extensible Stylesheet Language nn:XSL no:Extensible Stylesheet Language pl:XSL pt:Extensible Stylesheet Language sk:XSL sv:XSL tr:XSL uk:Extensible Stylesheet Language zh:可扩展样式语言

Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....