соответствует неразбираемой внешней сущности, имя которой передано как аргумент.

Пример

Описывая синтаксис 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 минимальна.

Функция generate-id

Синтаксическая конструкция этой функции:

string generate-id(node-set? )

Функция generate-id возвращает уникальный строковый идентификатор первого в порядке просмотра документа узла, передаваемого ей в виде аргумента. Если аргумент опущен, функция возвращает уникальный идентификатор контекстного узла. Если аргументом является пустое множество, функция должна возвращать пустую строку.

Функция generate-id обладает следующими свойствами.

□ Функция generate-id возвращает для двух узлов один и тот же

Вы читаете Технология XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату