Книга: Технология XSLT

Функция unparsed-entity-uri

Функция unparsed-entity-uri

Выражение для этой функции следующее:

string unparsed-entity-uri(string)

Функция unparsed-entity-uri возвращает уникальный идентификатор ресурса, который соответствует неразбираемой внешней сущности, имя которой передано как аргумент.

Пример

Описывая синтаксис XML, мы приводили пример документа, который использовал неразбираемые внешние сущности.

Листинг 8.67. Входящий документ использующий неразбираемые внешние сущности

<!DOCTYPE menu [
 <!ELEMENT menu (menuitem*)>
 <!ELEMENT menuitem EMPTY>
 <!ATTLIST menuitem
  image ENTITY #REQUIRED
  title CDATA #REQUIRED
  href CDATA #REQUIRED>
 <!NOTATION gif SYSTEM "gif-viewer.exe">
 <!NOTATION jpg SYSTEM "jpg-viewer.exe">
 <!ENTITY news SYSTEM "news.gif" NDATA gif>
 <!ENTITY products SYSTEM "prod.jpg" NDATA jpg>
 <!ENTITY support SYSTEM "support.gif" NDATA gif>
]>
<menu>
 <menuitem image="news" title="News" href="news.htm"/>
 <menuitem image="products" title="Products" href="prods.htm"/>
 <menuitem image="support" title="Support" href="support.htm"/>
</menu>

Для того чтобы вычислить местоположение графических файлов, соответствующих пунктам этого меню, нужно будет использовать функцию unparsed- entity-uri. Аргументом этой функции в данном случае будет значение атрибута image, ведь именно этот атрибут задает имя неразбираемой сущности, которая соответствует изображению пункта меню. Преобразование такого документа в HTML будет иметь приблизительно следующий вид.

Листинг 8.68. Преобразование, использующее функцию unparsed-entity-uri

<xsl:stylesheet
 version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output
  method="html"
  indent="yes"/>
 <xsl:template match="menu">
  <table>
   <xsl:apply-templates select="menuitem"/>
  </table>
 </xsl:template>
 <xsl:template match="menuitem">
  <tr>
   <td>
    <A alt="{@title}" href="{@href}">
     <img src="{unparsed-entity-uri(@image)}"/>
    </A>
   </td>
  </tr>
 </xsl:template>
</xsl:stylesheet>

Результат преобразования приведен на следующем листинге.

Листинг 8.69. Выходящий документ

<table>
 <tr>
  <td>
   <A alt="News" href="news.htm">
    <img src="file:/C:/XML/news.gif"/>
   </A>
  </td>
 </tr>
 <tr>
  <td>
   <A alt="Products" href="prods.htm">
    <img src="file:/C:/XML/prod.jpg"/>
   </A>
  </td>
 </tr>
 <tr>
  <td>
   <A alt="Support" href="support.htm">
    <img src="file:/С:/XML/support.gif"/>
   </A>
  </td>
 </tr>
</table>

Остается только добавить, что unparsed-entity-uri — это единственная функция, которая позволяет работать с неразбираемыми сущностями. Никаких средств для обработки нотаций и вспомогательных приложений, которые им соответствуют, в XSLT нет. Сказывается тот факт, что неразбираемые сущности и нотации очень редко используются в документах, поэтому их поддержка в XSLT минимальна.

Оглавление книги


Генерация: 2.864. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз