Контекст преобразования
Контекст преобразования
При выполнении преобразования каждая из его инструкций, каждый из элементов обрабатывается в некотором контексте. Контекст преобразования состоит из двух частей: из текущего множества узлов и из текущего узла, которые показывают, что именно обрабатывается в данный момент. XSLT-процессор поочередно обрабатывает каждый из узлов текущего множества (при этом делая этот узел текущим узлом) и объединяет результаты в одно дерево.
Контекст преобразования тесно связан с контекстом вычисления выражений:
? текущий узел контекста преобразования соответствует контекстному узлу вычисления выражений;
? позиция текущего узла в текущем обрабатываемом множестве соответствует позиции контекста вычисления выражений;
? размер текущего множества узлов соответствует размеру контекста вычисления выражений.
Контекст преобразования может изменяться только двумя элементами — xsl:apply-templates и xsl:for-each. Каждый из этих элементов вычисляет множество узлов, которое становится текущим и затем обрабатывается. После этого контекст преобразования восстанавливается до того состояния, каким он был перед обработкой.
Изменения контекста могут быть продемонстрированы на следующем примере.
Листинг 3.29. Входящий документ
<summer>
<month>June</month>
<month>July</month>
<month>August</month>
</summer>
Этому документу соответствует следующее дерево (рис. 3.19):
Рис. 3.19. Дерево входящего документа
Листинг 3.30. Преобразование
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title>Summer</title>
</head>
<body>
<xsl:apply-templates select="summer"/>
</body>
</html>
</xsl:template>
<xsl:template match="summer">
<table>
<tr>
<xsl:apply-templates select="month"/>
</tr>
</table>
</xsl:template>
<xsl:template match="month">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
</xsl:stylesheet>
Забегая вперед скажем, что в изначальном контексте преобразования текущее множество состоит из единственного узла — корневого узла документа. Он становится текущим и обрабатывается соответствующим шаблоном.
В нашем случае шаблонное правило, обрабатывающее корневой узел, выглядит как:
<xsl:template match="/">
<html>
<head>
<title>Summer</title>
</head>
<body>
<xsl:apply-templates select="summer"/>
</body>
</html>
</xsl:template>
Тело этого шаблона выполняется в том самом изначальном контексте, о котором мы только что упомянули: текущее множество состоит из корневого узла, он же является и текущим узлом. Мы можем показать контекст, выделяя текущее множество, пунктиром, а текущий узел — полужирной линией (рис. 3.20).
Рис. 3.20. Первоначальный контекст преобразования
Атрибут select элемента xsl:apply-templates задает выражение, вычисляющее множество узлов, которые должны быть обработаны. Выражение summer, которое содержит этот атрибут, является относительным путем выборки, который возвращает все дочерние элементы summer текущего узла. Поскольку текущим узлом в данном контексте является корневой узел дерева, значением выражения summer будет множество узлов, состоящее из субэлемента summer, корневого узла.
При выполнении элемента xsl:apply-templates процессор сделает это вычисленное множество узлов текущим множеством и начнет поочередно обрабатывать его узлы, делая их при этом текущими. Иначе говоря, выполнение элемента
<xsl:apply-templates select="summer"/>
сведется к выполнению шаблона, обрабатывающего элемент summer. Этот шаблон выглядит следующим образом:
<xsl:template match="summer">
<table>
<tr>
<xsl:apply-templates select="month"/>
</tr>
</table>
</xsl:template>
Выполняться он будет в следующем контексте (рис. 3.21):
Рис. 3.21. Контекст шаблона элемента summer
Атрибут select элемента xsl:apply-templates, который присутствует в этом шаблоне, вычисляет новое текущее множество: путь выборки month возвращает все дочерние элементы month текущего узла. Текущим узлом является элемент summer, то есть новое текущее множество будет состоять из трех его дочерних элементов month. Таким образом, процессор будет поочередно выполнять шаблоны в каждом из трех следующих контекстов, показанных на рис. 3.22.
Рис. 3.22. Изменение контекста при выполнении шаблона элемента month
Шаблон, вычисляемый в каждом из этих контекстов, имеет следующий вид:
<xsl:template match="month">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
Элемент xsl:value-of этого шаблона создает в элементе td текстовый узел, значение которого равно строковому значению выражения ".", то есть строковому значению текущего узла, и в каждом случае это будет строковое значение соответствующего элемента month.
Контекст преобразования позволяет более четко определить такие понятия, как "обработка узла", "применение шаблона к узлу" и так далее. Все эти выражения означают одно: выполнение соответствующего шаблона с данным узлом в качестве текущего.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Контекст процесса
Контекст процесса Одна из наиболее важных частей процесса— это исполняемый программный код. Этот код считывается из выполняемого файла (executable) и выполняется в адресном пространстве процесса. Обычно выполнение программы осуществляется в пространстве пользователя.
Контекст прерывания
Контекст прерывания При выполнении обработчика прерывания или обработчика нижней половины, ядро находится в контексте прерывания. Вспомним, что контекст процесса — это режим, в котором работает ядро, выполняя работу от имени процесса, например выполнение системного
Контекст рисования
Контекст рисования Рисование на канве выполняется с помощью особых свойств и методов объекта… нет, не HTMLCanvasElement, а CanvasRenderingContext2D. Этот объект представляет так называемый контекст рисования, который можно рассматривать как набор инструментов, используемый для рисования
Контекст процесса
Контекст процесса Каждый процесс UNIX имеет контекст, под которым понимается вся информация, требуемая для описания процесса. Эта информация сохраняется, когда выполнение процесса приостанавливается, и восстанавливается, когда планировщик предоставляет процессу
2.2.2.1 Контекст процесса
2.2.2.1 Контекст процесса Контекстом процесса является его состояние, определяемое текстом, значениями глобальных переменных пользователя и информационными структурами, значениями используемых машинных регистров, значениями, хранимыми в позиции таблицы процессов и в
6.3 КОНТЕКСТ ПРОЦЕССА
6.3 КОНТЕКСТ ПРОЦЕССА Контекст процесса включает в себя содержимое адресного пространства задачи, выделенного процессу, а также содержимое относящихся к процессу аппаратных регистров и структур данных ядра. С формальной точки зрения, контекст процесса объединяет в себе
Поисковый контекст
Поисковый контекст В случае с запросами из нескольких слов «Яндекс» умеет определять, каким должно быть максимальное расстояние между словами, чтобы страница наиболее точно отвечала запросу. Вы можете задать расстояние явным образом.Слова идут подрядТакой порядок слов
Контекст рисования
Контекст рисования Рисование на канве выполняется с помощью особых свойств и методов объекта… нет, не HTMLCanvasElement, а CanvasRenderingContext2D. Этот объект представляет так называемый контекст рисования, который можно рассматривать как набор инструментов, используемый для рисования
Контекст откровения
Контекст откровения Главное событие, решившее судьбу проекта, случилось 31 июля 2001 г., когда «Яндекс» запустил «Яндекс. Директ» — систему автоматического (в режиме онлайн) размещения контекстной рекламы с оплатой по кликам. Контекстная реклама по сей день остается
Контекст устройства
Контекст устройства CancelDC Функция CancelDC отменяет любую незаконченную операцию на указанном контексте устройства. BOOL CancelDC ( HDC hdc // дескриптор контекста устройства ); Параметры hdc - идентифицирует контекст устройства. Возвращаемые значения В случае успеха возвращается
Контекст транзакции
Контекст транзакции Завершенное общение между клиентом и сервером называется транзакцией. Каждая транзакция имеет уникальный контекст, что приводит к тому, что транзакция будет изолирована от всех других транзакций указанным способом. Правила для контекста транзакции
Логический контекст
Логический контекст Простой способ рассматривать транзакцию между START TRANSACTION и COMMIT или ROLLBACK - это смотреть на нее как на серию клиентских операций и взаимодействий клиента и сервера, которые точно отображают задачу. Это очень полезная модель для понимания того, как
6.3. Контекст устройства
6.3. Контекст устройства Контекст устройства – структура, определяющая набор графических объектов и связанных с ними атрибутов и графических режимов, которые воздействуют на вывод. Графические объекты включают карандаши для рисования линий, кисти для закрашивания и
1.2.1 Графический контекст
1.2.1 Графический контекст Прежде чем начать работу с графикой, программа должна выделить себе специальную структуру данных и получить указатель на нее. Эта структура называется графическим контекстом (Graphic Context (GC)). Указатель на GC используется в качестве одного из