Чтение онлайн

ЖАНРЫ

Холзнер Стивен

Шрифт:

 </xsl:if>

 .

 .

 .

</xsl:stylesheet>

Проверка версии XSLT может понадобиться, если вы хотите воспользоваться возможностями, которые появились в последних версиях.

unparsed-entity-uri

Функция

unparsed-entity-uri
предоставляет доступ к объявлениям неразобранных сущностей в DTD или схеме исходного документа. Неразобранная сущность (unparsed entity) — это обычно двоичные данные, такие как файл с рисунком.
Функция применяется следующим образом:

string unparsed-entity-uri(name)

В функцию передается имя name неразобранной сущности, и функция возвращает для нее идентификатор. В следующем примере (листинг 8.6) я добавил в

planets.xml
DTD и объявил три неразобранных сущности, соответствующих рисункам планет —
image1
,
image2
и
image3
, — и обратился к ним, добавив в каждый элемент
<PLANET>
атрибут
IMAGE
.

Листинг 8.6. planets.xml с неразобранными сущностями

<?xml version="1.0"?>

<?xml-stylesheet type="text/xml" href="#"?>

<!DOCTYPE PLANETS [

<!ELEMENT PLANET (CUSTOMER)*>

<!ELEMENT CUSTOMER (NAME,MASS,RADIUS,DAY)>

<!ELEMENT NAME (#PCDATA)>

<!ELEMENT MASS (#PCDATA)>

<!ELEMENT RADIUS (#PCDATA)>

<!ELEMENT DAY (#PCDATA)>

<!ENTITY image1 SYSTEM "http://starpowder.com/image1.gif" NDATA GIF>

<!ENTITY image2 SYSTEM "http://starpowder.com/image2.gif" NDATA GIF>

<!ENTITY image3 SYSTEM "http://starpowder.com/image3.gif" NDATA GIF>

]>

<PLANETS>

 <PLANET IMAGE="image1">

<NAME>Mercury</NAME>

<MASS UNITS="(Earth = 1)">.0553</MASS>

<DAY UNITS="days">58.65</DAY>

<RADIUS UNITS="miles">1516</RADIUS>

<DENSITY UNITS="(Earth = 1)">.983</DENSITY>

<DISTANCE UNITS="million miles">43.4</DISTANCE><!--B перигелии-->

 </PLANET>

 <PLANET IMAGE="image2">

<NAME>Venus</NAME>

<MASS UNITS="(Earth = 1)">.815</MASS>

<DAY UNITS="days">116.75</DAY>

<RADIUS UNITS="miles">3716</RADIUS>

<DENSITY UNITS="(Earth = 1)">.943</DENSITY>

<DISTANCE UNITS="million miles">66.8</DISTANCE><!--В перигелии-->

 </PLANET>

 <PLANET IMAGE="image3">

<NAME>Earth</NAME>

<MASS UNITS="(Earth = 1)">1</MASS>

<DAY UNITS="days">1</DAY>

<RADIUS UNITS="miles">2107</RADIUS>

<DENSITY UNITS="(Earth = 1)">1</DENSITY>

<DISTANCE UNITS="million miles">128.4</DISTANCE><!--B
перигелии->

 </PLANET>

</PLANETS>

(Заметьте, что некоторые процессоры XSLT основаны на разборщиках XML, которые проверяют, могут ли они найти сущность по заданному URI, — потому, если вы хотите опробовать этот пример, вставьте URI каких-либо настоящих рисунков.) Теперь я могу извлечь URI рисунков в таблице стилей при помощи функции

unparsed-entity-uri
и создать элементы HTML
<IMG>
, применив эту функцию в результирующем документе (листинг 8.7).

Листинг 8.7. Применение unparsed-entity-uri

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="/PLANETS">

<HTML>

.

.

.

</HTML>

 </xsl:template>

 <xsl:template match="PLANET">

<TR>

<TD><xsl:value-of select="NAME"/>

<IMG SRC="{unparsed-entity-uri(@IMAGE)}"/>

</TD>

<TD><xsl:apply-templates select="MASS"/></TD>

<TD><xsl:apply-templates select="RADIUS"/></TD>

<TD><xsl:apply-templates select="DAY"/></TD>

</TR>

 </xsl:template>

 <xsl:template match="MASS">

<xsl:value-of select="."/>

<xsl:text> </xsl:text>

<xsl:value-of select="@UNITS"/>

 </xsl:template>

 .

 .

 .

 <xsl:template match="DAY">

<xsl:value-of select="."/>

<xsl:text> </xsl:text>

<xsl:value-of select="@UNITS"/>

 </xsl:template>

</xsl:stylesheet>

И вот результирующий документ:

<HTML>

 <HEAD>

<TITLE>

The Planets Table

</TITLE>

 </HEAD>

 <BODY>

<H1>

Поделиться с друзьями: