xslt

XSLT пространство имен и ключи для выборки

Использование пространства имен

Перед использованием пространств имен их надо определить в начале документа:

<xsl:stylesheet version="1.0"
   xslns:xsl="http://www.w3.org/1999/XSL/Transform"
   xslns:fb2="http://www.gribuser.ru/xml/fictionbook/2.0">

Ключи и выборка узлов по ключу

В базах данных ускорение выборки, доступа к отдельному элементу (или нахождение конкретных элементов), делается с помощью индексов — заранее предрасчитанных значений. База данных своими средствами заранее просматривает всю таблицу с данными и строит для себя список указателей на ту или иную запись. Т.е. индекс — это список заранее предрасчитанных значений, хранящихся в сортированном виде (что значительно ускоряет поиск).

Хотя индексы и потребляют лишнюю память, но они используются повсеместно, т.е. в несколько раз ускоряют выборку. Что-то похожее есть и в XSLT. Это называется — ключи.

Рассмотрим работу с ключом:

<!-- определение ключа -->
<xsl:key
   name="name" <!-- имя ключа -->
   match="pattern" <!-- какие узлы документа процессор должен вернуть -->
   use="expression"/> <!-- по какому выражению производить отбор -->

Т.е. я говорю процессору: я хочу заранее сформировать список выборки узлов по какому-то условию. Т.е. мне надо часто получать доступ к определенным узлам входного документа, указывая ему какое-то условие отбора этих узлов. И процессор перед основной работой строит у себя в памяти этот индекс. У него в памяти появятся предрасчитанные значения. И тогда я могу в десятки раз быстрее получить доступ к выбранным узлам, не просто применяя Xpath, а используя функцию key ():

key('keyName','value')

Пример выборки по 1 ключу:

<!-- у нас есть список книг -->
<xsl:key name="bookTitle" match="./book" use="title"/>
<!-- сама выборка по ключевому слову в названии книги -->
<xsl:apply-templates select="key('bookTitle','php')"/>

Выборка по нескольким ключам:

<!-- у нас есть список книг -->
<xsl:key name="bookTitle" match="./book" use="concat(title, author)"/>
<!-- сама выборка по ключевым словам -->
<xsl:apply-templates select="key('bookTitle',concat('php','Leonov'))"/>

Т.е. в последнем примере используем конкатенацию — склеивание строк.




Добавить комментарий

Ваш e-mail не будет опубликован.