Что такое код xslt_errno

Содержание

FPublisher

Web-технологии: База знаний

Документация PHP

xslt_errno

xslt_errno — Returns an error number

Описание

int xslt_errno ( resource $xh )

Returns an error code describing the last error that occurred on the passed XSLT processor.

Список параметров

The XSLT processor link identifier, created with xslt_create().

Возвращаемые значения

Returns the error code, as an integer.

Смотрите также

Последние поступления:

ТехЗадание на Землю

Размещена 14 марта 2020 года

Пpоект Genesis (из коpпоpативной пеpеписки)

Шпаргалка по работе с Vim

Размещена 05 декабря 2020 года

Vim довольно мощный редактор, но работа с ним не всегда наглядна.
Например если нужно отредактировать какой-то файл например при помощи crontab, без знания специфики работы с viv никак.

Ошибка: Error: Cannot find a val >Размещена 13 сентабря 2020 года

Если возникает ошибка на centos 5 вида
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. Invalid release/

Linux Optimization

Размещена 30 июля 2012 года

Устранимые ошибки XSLT Recoverable XSLT Errors

Рекомендация W3C по XSL-преобразованиям (XSLT) версии 1.0 включает в себя такие области, в которых поставщик реализации может решать, как обрабатывать ситуацию. The W3C XSL Transformations (XSLT) Version 1.0 Recommendation includes areas in which the implementation provider may decide how to handle a situation. Эти области считаются предоставленными на усмотрение поставщика. These areas are considered to be discretionary behavior. Например, в разделе 7.3 «Инструкции по обработке при создании» рекомендаций XSLT 1.0 указывается на ошибку, которая возникает, если при формировании экземпляра содержимого xsl:processing-instruction создаются узлы, отличные от текстовых. For example, in section 7.3 Creating Processing Instructions, the XSLT 1.0 recommendation states that it is an error if instantiating the content of xsl:processing-instruction creates nodes other than text nodes. Для некоторых проблем в рекомендациях XSLT 1.0 указывается решение, которое следует принять, если обработчик решает устранить ошибку. For some problems, the XSLT 1.0 recommendation indicates what decision should be made if the processor decides to recover from the error. Для проблемы, приведенной в разделе 7.3, W3C заявляет, что реализация может устранять эту ошибку, игнорируя узлы и их содержимое. For the problem given in section 7.3, the W3C says that the implementation can recover from this error by ignoring the nodes and their content.

Возможные поведения Discretionary Behaviors

В следующей таблице перечислены возможные поведения, разрешенные рекомендациями XSLT 1.0, и способы обработки этих поведений классом XslCompiledTransform. The following table lists each of the discretionary behaviors allowed by the XSLT 1.0 recommendation, and how these behaviors are handled by the XslCompiledTransform class.

«Восстановление» указывает, что класс XslCompiledTransform устраняет эту ошибку. Recover indicates that the XslCompiledTransform class will recover from this error. Событие XsltArgumentList.XsltMessageEncountered может быть использовано, чтобы сообщать о любых событиях из обработчика XSLT. The XsltArgumentList.XsltMessageEncountered event can be used to report any events from the XSLT processor.

«Ошибка» указывает, что для этого условия формируется исключение. Error indicates that an exception is raised for this condition.

Условие XSLT XSLT condition Раздел Section Поведение XslCompiledTransform XslCompiledTransform behavior
Текстовый узел соответствует как xsl:strip-space , так и xsl:preserve-space . A text node matches both xsl:strip-space and xsl:preserve-space . 3.4 3.4 Восстановление Recover
Исходный узел соответствует более одному правилу шаблона. A source node matches more than one template rule. 5.5 5.5 Восстановление Recover
URI-код пространства имен объявлен в качестве псевдонима для нескольких URI-кодов пространств имен, каждый из которых имеет одинаковый приоритет импорта. A namespace URI is declared to be an alias for multiple namespace URIs, all having the same import precedence. 7.1.1 7.1.1 Восстановление Recover
Атрибут name в узлах xsl:attribute и xsl:element , сформированный из значения атрибута, не является QName. The name attribute in xsl:attribute and xsl:element generated from an attribute value is not a QName. 7.1.2, 7.1.3 7.1.2, 7.1.3 Ошибка* Error*
Два набора атрибутов с одинаковым именем импорта и развернутым именем имеют общий атрибут, и не существует другого набора атрибутов, содержащего общий атрибут с таким же именем, имеющего большую важность. Two attribute sets with the same import and expanded-name have an attribute in common and there is no other attribute set containing the common attribute having the same name with higher importance. 7.1.4 7.1.4 Восстановление Recover
Добавление атрибута к элементу после добавления к нему потомков. Adding an attribute to an element after children have been added to it. 7.1.3 7.1.3 Ошибка* Error*
Создание атрибута с именем «xmlns» Creating an attribute with the name ‘xmlns’ 7.1.3 7.1.3 Ошибка* Error*
Добавление атрибута к узлу, который не является элементом. Adding an attribute to a node that is not an element. 7.1.3 7.1.3 Ошибка* Error*
Создание узлов, отличных от текстовых узлов, во время создания экземпляра содержимого атрибута xsl:attribute . Creating nodes other than text nodes during the instantiation of the content of the xsl:attribute attribute. 7.1.3 7.1.3 Ошибка* Error*
Атрибут name в узле xsl:processing-instruction не содержит NCName и назначения инструкции по обработке. The name attribute of an xsl:processing-instruction does not yield both an NCName and a processing instruction target. 7.3 7.3 Ошибка* Error*
При создании экземпляра содержимого xsl:processing-instruction создаются узлы, отличные от текстовых. Instantiating the content of xsl:processing-instruction creates nodes other than text nodes. 7.3 7.3 Ошибка* Error*
Результат создания экземпляра содержимого узла xsl:processing-instruction содержит строку «?>» The result of instantiating the content of the xsl:processing-instruction contains the string «?>» 7.3 7.3 Восстановление Recover
Результат создания экземпляра содержимого узла xsl:processing-instruction содержит строку «—» или заканчивается на «-». The result of instantiating the content of the xsl:processing-instruction contains the string «—» or ends with «-«. 7.4 7.4 Восстановление Recover
Результат создания экземпляра содержимого узла xsl:comment создает узлы, отличные от текстовых узлов. The result of instantiating the content of the xsl:comment creates nodes other than text nodes. 7.4 7.4 Ошибка* Error*
Шаблон внутри привязывающегося к переменной элемента возвращает узел атрибута или узел пространства имен. The template within a variable-binding element returns an attribute node or a namespace node. 11.2 11.2 Ошибка* Error*
Ошибка при извлечении ресурса по URI-идентификатору, переданного в функцию документа. There is an error retrieving the resource from the URI passed into the document function. 12.1 12.1 Error Error
URI-ссылка в функции документа содержит идентификатор фрагмента, и возникает ошибка обработки идентификатора фрагмента. The URI reference in the document function contains a fragment identifier and there is an error processing the fragment identifier. 12.1 12.1 Восстановление* Recover*
Существует несколько атрибутов с одним именем, но различными значениями, которые не являются именованными элементами cdata-section в узле xsl:output с тем же приоритетом импорта. There are multiple attributes with the same name, but different values, that are not named cdata-section elements in xsl:output with the same import precedence. 16 16 Восстановление Recover
Обработчик не поддерживает кодирование в атрибуте кодировки узла xsl:output . The processor does not support the encoding in the xsl:output encoding attribute. 16.1 16.1 Восстановление Recover
Отключение экранирования выхода для текстового узла, который используется в качестве узла, отличного от текстового, в дереве результатов. Disabling output escaping for a text node that is used for something other than a text node in the result tree. 16.4 16.4 Восстановление* Recover*
Преобразование фрагмента дерева результатов в число или строку, если этот фрагмент содержит текстовый узел с включенным экранированием выходных данных. Converting a result tree fragment to a number or string if the result tree fragment contains a text node with output escaping enabled. 16.4 16.4 Восстановление* Recover*
Экранирование выхода отключено для символа, который нельзя представить в кодировке, используемой обработчиком XSLT для выхода. Output escaping is disabled for a character that cannot be represented in the encoding that the XSLT processor is using for output. 16.4 16.4 Восстановление* Recover*
Добавление узла пространства имен к элементу после того, как к нему был добавлен потомок или атрибуты. Adding a namespace node to an element after children have been added to it or after attributes have been added to it. поправка 25 errata 25 Ошибка* Error*
Атрибут value в узле xsl:number имеет значение NAN, бесконечное или менее 0,5. The value attribute of an xsl:number is NAN, infinite or less than 0.5 поправка 24 errata 24 Восстановление Recover
Второй аргумент node-set функции документа пуст, поэтому URI-ссылка является относительной. The second argument node-set to the document function is empty and the URI reference is relative. поправка 14 errata 14 Восстановление Recover

* Это поведение отличается от класса XslTransform. * This behavior is different than that of the XslTransform class. См. дополнительные сведения по реализации избирательного поведения в классе XslTransform. For more information, see Implementation of Discretionary Behaviors in the XslTransform Class.

xml — Требования PHP XSLT Prozessor

Я пытаюсь запрограммировать домашнюю страницу с некоторыми преобразованиями XML с помощью XSLT. Я использую lampp в системе Fedora. Я начинаю с этого php-кода:

Сообщение об ошибке, которое я получаю, следующее:

Неустранимая ошибка: вызов неопределенной функции xslt_create() в /opt/lampp/htdocs/test/test.php в строке 2

Я думал, что это сработает, если я установлю libxml2 , libxml-devel , libxslt и libxslt-devel , но в итоге появилось одно и то же сообщение об ошибке. Я также пробовал php-xml , но безуспешно. Может, это из-за лампочки? Любые другие идеи или решения для моей проблемы?

    3 1
  • 18 апр 2020 2020-04-18 09:59:59
  • Chris

1 ответ

Функциональность XSL доступна в пакете php-dom для PHP 5.

Вместо этого есть XSL-расширение Docs, которое работает с PHP 5 (текущая версия PHP, PHP 4 мертва).

IIRC существует некоторая резервная библиотека, написанная в самом PHP-коде, которая может имитировать синтаксис расширения PHP 4 с текущим расширением DOM. Но я не могу сказать вам, где и как хорошо, потому что это давно, и я не очень хорошо помню. также проще использовать новое расширение.

АВТОМИР

Преобразования из XML в XML

Преобразования XML-XML иногда рассматриваются как SQL для Интернета, поскольку они позволяют оперировать запросами к базе данных в XML-документах. Ниже приведен пример. Используемый нами файл planets.xml содержит достаточно много данных о каждой планете:

Что, если нам нужно только подмножество этих данных — например, имя и масса каждой планеты? В терминах баз данных planets.xml представляет собой таблицу, и мы хотим создать новую таблицу, содержащую подмножество данных из первой. В базах данных для этого служит язык SQL, а для документов XML мы можем использовать XSLT.

В листинге 1.6 приведена новая версия файла planets.xsl , осуществляющая требуемое преобразование: выбираются только имя и масса каждой планеты, которые отправляются в выходной документ. В особенности обратите внимание на то, что мы осуществляем преобразование XML-XML, поэтому я использую элемент , атрибут method которого установлен в «xml» (фактически тип выходных данных обычно и есть XML, но если процессор XSLT видит тег , он обычно по умолчанию генерирует HTML).

Листинг 1.6. Выбор только имени и массы

C:planets>java org.apache.xalan.xslt.Process -IN planets.xml -XSL planets.xsl -OUT new.xml

Вот как выглядит результирующий документ XML, new.xml:

Отметьте, что этот файл выглядит во многом похоже на исходный файл planets.xml , за тем исключением, что каждый элемент

Содержит только элементы и . Таким образом, мы смогли получить подмножество данных первоначального документа XML.

Конечно, можно проводить любое число такого рода преобразований XML-XML. Можно обрабатывать данные в документе XML для создания совершенно новых XML-документов. Например, можно взять XML-документ с именами студентов и их отметками и создать новый документ, отображающий средние оценки. В XSLT есть много встроенных функций, позволяющих работать с данными подобным образом, — мы познакомимся с ними в главе 8.

В дополнение следует сказать, что многие программы используют XML для обмена данными в Интернете, и, так как обычно они форматируют свои документы XML по-разному, еще одним популярным способом использования преобразований XML-XML в Интернете является преобразование XML из формата, используемого одной программой, в формат другой программы.

Из книги C++ автора Хилл Мюррей

8.5.6 Преобразования Конструктор, получающий один параметр, определяет преоразование из типа своего параметра в тип своего класса. Такие преобразования неявно применяются дополнительно к стандартным пробразованиям (#6.6-7). Поэтому присваивание объекту из класса X

R.4.7 Преобразования ссылок Всюду, где ссылки (§R.8.2.2) инициализируются (включая передачу параметров (§R.5.2.2) и возврат значения функции (§R.6.6.3)) или используются иным образом, возможны следующие преобразования:Ссылка на данный класс может быть преобразована в ссылку на

R.12.3 Преобразования Преобразования объектов класса можно задать с помощью конструкторов или функций преобразования.Такие преобразования, обычно называемые пользовательскими, используются неявно в совокупности со стандартными преобразованиями (§R.4). Например, функцию

R.12.3.2 Функции преобразования Функция-член класса X, имя которой имеет вид,имя-функции-преобразования: operator имя-типа-преобразованияимя-типа-преобразования: список-спецификаций-типа opt операция-ptr optзадает преобразование из типа X в тип, определяемый конструкцией

18.5.4. Средства преобразования Вторая крупнейшая проблема, связанная с DocBook, состоит в необходимости преобразования старой разметки уровня представления в разметку DocBook. Человек обычно может автоматически преобразовать представление документа в логическую структуру,

Преобразования CSS В главе 22, ведя разговор о канве и программном рисовании на ней, мы узнали о преобразованиях системы координат. С помощью особых расширений CSS мы можем проделать аналогичные действия над любым элементом Web-страницы: сместить его, повернуть, растянуть или

Преобразования из XML в XML Преобразования XML-XML иногда рассматриваются как SQL для Интернета, поскольку они позволяют оперировать запросами к базе данных в XML-документах. Ниже приведен пример. Используемый нами файл planets.xml содержит достаточно много данных о каждой

Модель преобразования Во вводной главе мы говорили, что преобразования в XSLT являются наборами шаблонных правил, каждое из которых обрабатывает определенный фрагмент входящего документа с тем, чтобы сгенерировать фрагмент выходящего

Контекст преобразования При выполнении преобразования каждая из его инструкций, каждый из элементов обрабатывается в некотором контексте. Контекст преобразования состоит из двух частей: из текущего множества узлов и из текущего узла, которые показывают, что именно

Выполнение преобразования Несмотря на полную свободу в порядке выполнения шаблонов, правила изменения контекста и компоновки результирующего дерева, спецификация XSLT оговаривает очень четко — это делает XSLT весьма гибким языком, программы на котором при этом

Упрощенные преобразования Многие простые преобразования состоят из единственного правила, которое обрабатывает корневой узел входящего документа. Общий вид такого рода преобразований показан в следующем листинге.Листинг 4.2. Простое

Преобразования по умолчанию Большинство операций языка Си выполняют преобразование типов для приведения своих операндов к общему типу либо для того, чтобы расширить значения коротких по размеру типов до размера, используемого в машинных операциях. Преобразования,

Преобразования типов Преобразование типов производится либо неявно, например при преобразовании по умолчанию или в процессе присваивания, либо явно, путем выполнения операции приведения типа. Преобразование типов выполняется также, когда преобразуется значение,

Преобразования Преобразований, предусматриваемых Flash, всего два. Однако с их помощью можно задать весьма сложное движение выделенного нами фрагмента

Аннотация: Рассматривается генерация кода преобразованиями XSLT. Изучается синтаксис XSLT, особенности применения преобразований, а также выполнение таких операций, как фильтрация, сортировка, выборка по условию в шаблонах. Выполнение трансформации программным путем в C#. Преимущества и недостатки технологии.

Язык преобразований XSLT

Во второй лекции мы уже рассматривали пример с использованием XSLT . В этой лекции мы рассмотрим эту технологию более подробно. XSL (eXtensible Stylesheet Language) переводится как Расширяемый Язык Стилей, и представляет собой язык для создания стилей XML документов. XSLT(XSL Transformations) — это язык преобразований XSL и является его частью. Стиль XSLT предназначен для преобразования иерархической структуры и формата документа XML . Результатами преобразования могут стать XML — файл , текстовый файл , программный код, HTML — файл , файл в формате PDF , и так далее. Этот язык предоставляет мощные возможности для манипуляции данными, информацией, текстом в иерархическом виде.

А это как раз то, что нужно для генерации кода. Применение XSLT может существенно помочь в генерации кода. Кроме того, он предоставляет удобную альтернативу технологии шаблонов Т4.

XSLT был разработан консорциумом W3C (World Wide Web Consortium) . Первая версия языка XSLT 1.0 стала рекомендацией 16 ноября 1999 года, а версия XSLT 2.0 стала рекомендацией 23 января 2007 года. Обе версии используются достаточно активно, и в этой лекции мы рассмотрим ту базовую функциональность, которая является для них общей. А это значит, что рассматривать будем в основном первую версию. Также упомянем некоторые команды из второй версии.

Как работает XSLT

Модель XSLT включает в себя такие части как:

  • документы XML,
  • стили XSLT ,
  • процессор XSLT ,
  • выходные документы.

Документы XML являются входными данными, которые нужно преобразовать в другие документы. Документ стиля XSLT является корректным (well formed) документом XML и содержит набор правил для выполнения преобразования. Иными словами, документ стиля является шаблоном.

Процессор XSLT является приложением, которое принимает в качестве входных данных документы XML и стили XSLT . Он выполняет трансформацию, то есть применение набора правил в стилях XSLT к документам XML . Результатом этой работы являются выходные документы .

Процессоры XSLT имеют множество реализаций и встроены во многие браузеры вроде Internet Explorer, Firefox, Mozilla, Opera и другие. В Internet Explorer используется инструмент MSXML, разработанный Microsoft. XSLT — процессор встроен в Internet Explorer, начиная с версии 4.5. Сгенерированный результат примеров данной лекции можно просматривать путем открытия XML -файлов в одном из браузеров. В конце лекции мы рассмотрим возможности запуска трансформации программным путем, используя соответствующие классы языка программирования.

XPath

Другой частью технологии XSL является язык XPath , предназначенный для доступа к узлам документа XML путем задания путей и выражений. Язык Xpath используется в файлах стилей для навигации внутри XML -документов, определения частей исходного XML -документа, которые совпадают с одним или более заранее заданными шаблонами. При нахождении совпадения процессор XSLT применит к нему соответствующие правила из файла стиля и преобразует его в часть результирующего документа. В файлах стилей XSLT выражения XPath используются весьма интенсивно.

Применение XSLT

Язык XSLT состоит из множества инструкций, записанных в виде тегов. Имя каждой инструкции обычно начинается с символов xsl . Для выполнения трансформации документ стиля XSLT должен являться корректным документом XML .

Для преобразования документа XML необходимо добавить в начало документа инструкцию, подобную следующей:

XSL — файл стилей обычно содержит множество элементов, самым главным из которых является элемент xsl :stylesheet . Именно он указывает, что данный XML — файл является файлом стилей. Кроме него могут содержаться другие элементы, например xsl :template , xsl :value-of . Документ XML и файл стиля передается в XSLT — процессор , который обрабатывает данные файлы, выполняет преобразование и выводит результат трансформации.

Ниже представлен документ XML , содержащий список языков программирования.

C# Visual Basic Delphi Prolog Пример 5.1. Файл languages.xml

Необходимо вывести этот список в формате HTML . Для этой цели используем инструкцию xsl :for-each , которая будет применять часть шаблона к секциям документа, наименование которых указано в атрибуте select . В нашем случае укажем select=»languages/language» .

Файл стилей будет применяться следующий:

Мои любимые языки:

Шаблон внутри xsl :for-each выводит содержимое каждого элемента language из languages . Для этой цели используется инструкция xsl :value-of и задаваемый атрибут select=».» . Это означает, что процессор должен выбирать текст содержимого текущего элемента в документе. Кроме отражения содержимого можно задавать имена конкретных тегов, а также атрибутов для выборки значений, хранящихся в них. Примеры будут рассмотрены далее.

Откроем XML файл через Internet Explorer или другой браузер . Будет выведен такой текст:

Мои любимые языки:

Одним из самых главных элементов в стиле является xsl :template . Служит для определения повторно используемого шаблона и содержит правила, по которым будет преобразован документ XML . В атрибуте match содержится выражение для отбора узлов, к которым будет применен шаблон . Также может присутствовать атрибут name . В этом случае есть возможность вызывать шаблон по имени инструкцией xsl :apply-templates .

Для повторения вывода шаблона для каждого элемента документа применяется инструкция xsl :for-each . Шаблон выполняется для каждого элемента, соответствующего условию, указанному в атрибуте select .

Инструкция xsl :value-of служит для вычисления выражения, записанного в атрибуте select с последующим выводом результата в том месте, где расположен сам элемент.

Фильтрация

Мы рассмотрели случай, когда считываются значения каждого узла. Однако часто возникает необходимость выбирать только часть данных, то есть их надо фильтровать. Шаблоны XSLT поддерживают два способа фильтрации.

Один из них — это применение атрибута select инструкции xsl :for-each , а второй — применение атрибута match элемента xsl :template . Применение match мы рассмотрим позже, а сейчас рассмотрим select .

Изменим немного файл с данными: добавим атрибут high , обозначающий, является ли язык из нашего списка языком высокого уровня. Также расширим сам список языков.

C# Visual Basic Delphi Prolog Assembler Java Perl Пример 5.3. Файл languages4.xml

Заметим, что значение false для атрибута high стоит только для значения «Assembler» . Изменим немного файл таблицы стилей:

Языки высокого уровня:

В секции [@ high =»true»] мы указываем, что выбирать следует только те узлы документа, у которых атрибут high имеет значение «true» . Знак @ является символом, указывающим на то, что после него стоит имя атрибута.

Посмотрим на результат:

Языки высокого уровня:

Как видим, значение «Assembler» не отображается в списке языков, то есть процессор XSLT отфильтровал данные согласно заданным условиям.

Сортировка

Кроме фильтрации другой часто применяемой операцией при генерации кода является сортировка . Атрибут order-by инструкции xsl :for-each служит для сортировки результата, для обозначения порядка прохода узлов документа при выполнении трансформации. Сортируемые поля перечисляются через точку с запятой, а также имеют перед своим названием знаки «+» или «-» , означающие сортировку по возрастанию или убыванию.

Рассмотрим немного измененный вариант документа — вместо атрибута high будем использовать элемент level , принимающий значения high или low . А имя языка запишем в элемент name .

C# high Visual Basic high Delphi high Prolog high Assembler low Java high Perl high Пример 5.5. Файл languages6.xml

В следующей таблице стилей для инструкции xsl :for-each применим атрибут order-by со значением +name , где знак плюса означает, что надо отсортировать по возрастанию.

Языки высокого уровня:

В атрибуте select мы фильтруем по значению элемента level . Также в атрибуте select инструкции

Не прошло и трёх лет с тех пор, как у меня зародилась мысль о том, что пора изучать XSLT -))). Мысль зародилась, а везде ещё стоял PHP 4 и зверствовал Salbotron , который, мягко говоря, не отличался высокой производительностью. Да и редко какой браузер мог похвастаться поддержкой этого самого XSLT. По этим соображениям изучение столь перспективного направления я отложил до лучших времён. На данный момент можно смело заявить, что эти времена настали, поскольку вышел PHP 5 с поддержкой XSLT и сносной объектной моделью, а все топовые браузеры уже сами уверенно держат преобразования, только подавай XML. :)

  • http://w3c.org — комитет по разработке и продвижению стандартов всемирной паутины Internet. На данный момент он является первоисточником практически всех веб-ориентированных стандартов и рекомендаций.
  • http://www.w3.org/TR/xml — спецификация расширяемого языка разметки XML , который является основой современного веба. На момент написания статьи доступна пятая редакция версии 1.0, а также вторая редакция версии 1.1.
  • http://www.w3.org/TR/xml-names — спецификация использования пространств имён в XML.
  • http://www.w3.org/TR/xpath — спецификация по использованию языка поиска частей XML-документа XPath .
  • http://www.w3.org/TR/xsl/ — спецификация расширенного языка стилей XSL .
  • http://www.w3.org/TR/xslt — спецификация языка преобразований XSLT .
  • http://validator.w3.org/ — валидатор HTML .
  • http://www.w3.org/TR/xhtml1/ — спецификация XHTML1.0 .

Переводы на русский язык:

  • http://www.rol.ru/news/it/helpdesk/xml01.htm — Расширяемый язык разметки XML1.0 (вторая редакция). /Радик Усманов/
  • http://www.rol.ru/news/it/helpdesk/xnamsps.htm — Пространства имен в XML. /Радик Усманов/
  • http://www.rol.ru/news/it/helpdesk/xpath01.htm — Язык XML Path (XPath ). /Радик Усманов/
  • http://www.rol.ru/news/it/helpdesk/xslt01.htm — Язык преобразований XSL (XSLT ). /Радик Усманов/

Для лучшего понимания всего происходящего я рекомендую читать спецификации в следующем порядке:

  1. XML (это основа!)
  2. пространства имён (механизм разнородного XML-кода в одном файле)
  3. XPath (язык выборки элементов из дерева структуры)
  4. XSLT (преобразования)
  5. XHTML (то, к чему нужно стремиться)

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

2. Валидный XHTML

Что такое валидный XHTML? В первую очередь, это XML-документ, который должен соответствовать спецификации XML. Во-вторую, почти обычная HTML-страница, к которой все привыкли.

Почему нужен именно XHTML? Исключительно из соображений совместимости и кросс-браузерности. Страница в XHTML будет с большей вероятностью отображаться корректно в популярных браузерах, чем обычный HTML.

Для рядового клепателя страниц словосочетание XML-документ должно означать следующее:

  1. Документ содержит объявление XML-документа в самом начале страницы:
  2. Документ содержит один корневой элемент, в котором находятся все остальные.
  3. Все элементы (тэги) должны иметь закрывающую часть (
    , ).
  4. Атрибуты всегда имеют значение, которое обязательно указывается в кавычках (одинарных или двойных). Например, «radio» disabled=»disabled» /> .
  5. Управляющие символы & , всегда должны маскироваться. Например, «?a=1&b=2» > & . Исключение составляет только , внутри которого спецсимволы можно не маскировать.

Также сам XHTML обязывает выполнять следующие условия:

  1. Документ должен объявлять пространство имён, в рамках которого будут использоваться элементы HTML.
  2. Документ должен объявлять DOCTYPE перед корневым элементом и указывать в нём один из типов XHTML и соответствующий DTD.

Пример простого документа XHTML1.0:

И так обо всём по порядку.

Объявление XML-документа, в котором указывается его версия и кодировка.

Объявление пространства имён и используемого языка.

Три версии XHTML1.0 предназначены для лучшей обратной совместимости:

  • Strict — обеспечивает наибольшее соответствие рекомендациям W3C со стороны браузеров. Однако и сам HTML-код должен следовать этим рекомендациям.
  • Transitional — менее строгое соответствие, которое заставляет браузер вести себя так, как если бы это был обычный HTML-документ.
  • Frameset — позволяет использовать фреймы.

XHTML1.1 по сути является тем же XHTML1.0 Strict и призван вытеснить другие версии XHTML1.0. Однако, по сравнению с XHTML1.0 Strict, у него есть ряд отличий :

  1. Удалён атрибут lang , его роль выполняет xml:lang . (Модуль [ XHTMLMOD ])
  2. Для элементов a и map вместо атрибута name нужно использовать атрибут id . (Модуль [ XHTMLMOD ])
  3. Доступен набор элементов ruby . (Модуль [ RUBY ])

Итак, если вам нужна наибольшая кросс-браузерность и совместимость с рекомендациями W3C, то XHTML1.1 самое оно!

Из этих соображений результатом моих преобразований будет именно XHTML1.1.

3. XSLT-преобразования

Что такое XSLT? Это язык преобразований XML-документа, который был разработан как часть расширенного языка стилей (XSL).

Зачем нужен XSLT? Он позволяет реализовать схему, при которой данные хранятся отдельно, а их представление отдельно. То есть, один XML-документ преобразуется с помощью другого XML-документа (XSL, в котором находятся XSLT-шаблоны) в конечный документ. Результатом может быть XML, HTML или текстовый документ любого формата.

Для того, чтобы воспользоваться XSLT-преобразованиями, в первую очередь нужно сформировать правильный стиль XSL и подключить его к XML-файлу.

Валидным XSL-документом является XML-документ, у которого задано пространство имён xsl и присутствует корневой элемент stylesheet. В самом простом случае стиль может выглядеть, например, так:

Этот стиль не содержит каких-либо явных определений шаблонов или других элементов XSL. Однако, его уже можно использовать. Чтобы посмотреть результат, достаточно сформировать произвольный XML-документ и подключить к нему этот стиль:

За подключение стиля отвечает строка:

При этом кодировка результата будет UTF-8, несмотря на то, что исходный документ был сформирован в windows-1251. К сожалению, браузеры обычно не позволяют просмотреть код результирующего документа, но модуль XSLT в PHP5 даёт возможность передать результирующий код в переменную, которую можно сохранить в файл. Поэтому, используя PHP, я приведу исходный код результирующего документа:

Этот код не является валидным XML-документом и тем более XHTML1.1. Для того, чтобы сформировать нужный код, я усложню исходный XSL-стиль и добавлю туда необходимые шаблоны и преобразования. При этом исходный XML-документ останется без изменений.

В качестве примера я приведу XSL-стиль, который при помощи XSLT будет выводить список атрибутов исходного XML-документа с их значениями, при этом будет формироваться валидный XHTML1.1. Итак, стиль:

XSLT первый шаг

1. Введение

Не прошло и трёх лет с тех пор, как у меня зародилась мысль о том, что пора изучать XSLT -))). Мысль зародилась, а везде ещё стоял PHP 4 и зверствовал Salbotron , который, мягко говоря, не отличался высокой производительностью. Да и редко какой браузер мог похвастаться поддержкой этого самого XSLT. По этим соображениям изучение столь перспективного направления я отложил до лучших времён. На данный момент можно смело заявить, что эти времена настали, поскольку вышел PHP 5 с поддержкой XSLT и сносной объектной моделью, а все топовые браузеры уже сами уверенно держат преобразования, только подавай XML. :)

Важные ссылки по теме, первоисточники:

  • http://w3c.org — комитет по разработке и продвижению стандартов всемирной паутины Internet. На данный момент он является первоисточником практически всех веб-ориентированных стандартов и рекомендаций.
  • http://www.w3.org/TR/xml — спецификация расширяемого языка разметки XML, который является основой современного веба. На момент написания статьи доступна пятая редакция версии 1.0, а также вторая редакция версии 1.1.
  • http://www.w3.org/TR/xml-names — спецификация использования пространств имён в XML.
  • http://www.w3.org/TR/xpath — спецификация по использованию языка поиска частей XML-документа XPath.
  • http://www.w3.org/TR/xsl/ — спецификация расширенного языка стилей XSL.
  • http://www.w3.org/TR/xslt — спецификация языка преобразований XSLT.
  • http://validator.w3.org/ — валидатор HTML.
  • http://www.w3.org/TR/xhtml1/ — спецификация XHTML1.0.

Переводы на русский язык:

Для лучшего понимания всего происходящего я рекомендую читать спецификации в следующем порядке:

  1. XML (это основа!)
  2. пространства имён (механизм разнородного XML-кода в одном файле)
  3. XPath (язык выборки элементов из дерева структуры)
  4. XSLT (преобразования)
  5. XHTML (то, к чему нужно стремиться)

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

2. Валидный XHTML

Что такое валидный XHTML? В первую очередь, это XML-документ, который должен соответствовать спецификации XML. Во-вторую, почти обычная HTML-страница, к которой все привыкли.

Почему нужен именно XHTML? Исключительно из соображений совместимости и кросс-браузерности. Страница в XHTML будет с большей вероятностью отображаться корректно в популярных браузерах, чем обычный HTML.

Для рядового клепателя страниц словосочетание XML-документ должно означать следующее:

  1. Документ содержит объявление XML-документа в самом начале страницы:
  2. Документ содержит один корневой элемент, в котором находятся все остальные.
  3. Все элементы (тэги) должны иметь закрывающую часть (
    ,

).

  • Атрибуты всегда имеют значение, которое обязательно указывается в кавычках (одинарных или двойных). Например, «radio» disabled= «disabled» /> .
  • Управляющие символы & , и > всегда должны маскироваться. Например, «?a=1&b=2» > & . Исключение составляет только , внутри которого спецсимволы можно не маскировать.
  • Также сам XHTML обязывает выполнять следующие условия:

    1. Документ должен объявлять пространство имён, в рамках которого будут использоваться элементы HTML.
    2. Документ должен объявлять DOCTYPE перед корневым элементом и указывать в нём один из типов XHTML и соответствующий DTD.

    Пример простого документа XHTML1.0:

    И так обо всём по порядку.

    Объявление XML-документа, в котором указывается его версия и кодировка.

    Для большей безопасности кодировку нужно всегда выставлять, иначе могут возникнуть проблемы с невалидными (по отношению к дефолтной кодировке) символами.

    Объявление типа документа и его схемы.

    Для XHTML 1.0 есть три типа — Strict (строгое соответствие рекомендациям W3C), Transitional (переходный тип) и Frameset (использование фреймов). Для каждого из них предусмотрен отдельный DTD.

    Объявление пространства имён и используемого языка.

    Очень важно указывать ссылку именно в таком регистре и никак иначе. Это связано с тем, что в XML имена элементов и содержимое их атрибутов регистрозависимы.

    Три версии XHTML1.0 предназначены для лучшей обратной совместимости:

    • Strict — обеспечивает наибольшее соответствие рекомендациям W3C со стороны браузеров. Однако и сам HTML-код должен следовать этим рекомендациям.
    • Transitional — менее строгое соответствие, которое заставляет браузер вести себя так, как если бы это был обычный HTML-документ.
    • Frameset — позволяет использовать фреймы.

    Помимо XHTML1.0 на данный момент доступен XHTML1.1:

    XHTML1.1 по сути является тем же XHTML1.0 Strict и призван вытеснить другие версии XHTML1.0. Однако, по сравнению с XHTML1.0 Strict, у него есть ряд отличий:

    1. Удалён атрибут lang , его роль выполняет xml:lang . (Модуль [ XHTMLMOD ])
    2. Для элементов a и map вместо атрибута name нужно использовать атрибут id . (Модуль [ XHTMLMOD ])
    3. Доступен набор элементов ruby . (Модуль [ RUBY ])

    Итак, если вам нужна наибольшая кросс-браузерность и совместимость с рекомендациями W3C, то XHTML1.1 самое оно!

    Из этих соображений результатом моих преобразований будет именно XHTML1.1.

    3. XSLT-преобразования

    Что такое XSLT? Это язык преобразований XML-документа, который был разработан как часть расширенного языка стилей (XSL).

    Зачем нужен XSLT? Он позволяет реализовать схему, при которой данные хранятся отдельно, а их представление отдельно. То есть, один XML-документ преобразуется с помощью другого XML-документа (XSL, в котором находятся XSLT-шаблоны) в конечный документ. Результатом может быть XML, HTML или текстовый документ любого формата.

    Для того, чтобы воспользоваться XSLT-преобразованиями, в первую очередь нужно сформировать правильный стиль XSL и подключить его к XML-файлу.

    Валидным XSL-документом является XML-документ, у которого задано пространство имён xsl и присутствует корневой элемент stylesheet. В самом простом случае стиль может выглядеть, например, так:

    Этот стиль не содержит каких-либо явных определений шаблонов или других элементов XSL. Однако, его уже можно использовать. Чтобы посмотреть результат, достаточно сформировать произвольный XML-документ и подключить к нему этот стиль:

    За подключение стиля отвечает строка:

    Если файлы text.xml и test.xsl созданы и находятся в одной папке, то с помощью любого XSLT-парсера можно преобразовать исходный test.xml в результирующий документ. В качестве парсера могут выступать все популярные браузеры (IE5+, FF2+, Opera9+ и другие), а также модули в языках программирования, например, в PHP. Если вы используете браузер, то достаточно открыть test.xml, и он сразу отобразит примерно такой результат:

    При этом кодировка результата будет UTF-8, несмотря на то, что исходный документ был сформирован в windows-1251. К сожалению, браузеры обычно не позволяют просмотреть код результирующего документа, но модуль XSLT в PHP5 даёт возможность передать результирующий код в переменную, которую можно сохранить в файл. Поэтому, используя PHP, я приведу исходный код результирующего документа:

    Этот код не является валидным XML-документом и тем более XHTML1.1. Для того, чтобы сформировать нужный код, я усложню исходный XSL-стиль и добавлю туда необходимые шаблоны и преобразования. При этом исходный XML-документ останется без изменений.

    В качестве примера я приведу XSL-стиль, который при помощи XSLT будет выводить список атрибутов исходного XML-документа с их значениями, при этом будет формироваться валидный XHTML1.1. Итак, стиль:

    Чтобы понять, как он работает, я распишу каждое действие отдельно:

    Документ сформирован в кодировке windows-1251, о чём сообщается в атрибуте encoding. Версию XML-документа желательно всегда указывать, это рекомендация W3C.

    Затем идёт объявление корневого элемента, стиля:

    Обязательным атрибутом является определение пространства имён xsl через атрибут xmlns:xsl= «http://www.w3.org/1999/XSL/Transform» .

    Следующим шагом в корневом элементе stylesheet объявляется, каким образом нужно формировать результирующий документ:

    • method= «xml» — метод вывода документа. Результирующий документ будет в формате XML.
    • encoding= «windows-1251» — кодировка результирующего документа.
    • omit-xml-declaration= «no» — пропускать или нет начальное объявление XML-документа ( ). Может иметь значение «yes» или «no» (актуально только для html).
    • indent= «yes» — формировать отступы согласно уровню вложенности. Может иметь значение «yes» или «no».
    • media-type= «text/xml» — MIME-тип результирующего документа (используется только для метода вывода html).
    • doctype-public= «-//W3C//DTD XHTML 1.1//EN» — тип результируюшего документа (DOCTYPE)
    • doctype-system= «http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd» — ссылка на DTD

    Если метод вывода объявлен html, то значения атрибутов encoding и media-type будут подставлены в заголовок страницы ( . ) посредством метатега.

    Объявление основного шаблона:

    Именно этот XSLT-шаблон соответствует корню исходного дерева и будет вызван первым для преобразования. Атрибут match принимает значения, которые должны соответствовать языку поиска элементов XPath.

    Остальные шаблоны, если таковые имеются, должны подключаться из этого шаблона при помощи средств XSLT.

    Формирование XHTML-страницы. Оно начинается с элемента , у которого указано пространство имён xhtml:

    Атрибут xmlns= «http://www.w3.org/1999/xhtml» указывает на пространство имён xhtml, которое будет применено по умолчанию к этому элементу и всем дочерним элементам, у которых оно не задано явно.

    Атрибут xml:lang= «ru» указывает на язык, в котором сформирована страница (будущая).

    Эта часть стиля была нужна для формирования атрибутики валидного XHTML1.1 кода.

    Теперь что касается XSLT-преобразований:

    Вставка простого текста:

    Текст «Мой список:» будет подставлен в тег

    Организация цикла по выборке:

    Атрибут select принимает выражение XPath, на основе которого делает выборку. Если выборка вернула список узлов, то начинает работать цикл по каждому элементу.

    В данном случае выборка вернёт список атрибутов для этого (корневого) и всех дочерних элементов.

    В данном случае проверяется на чётность позиция элемента в списке выборки. Если тест возвращает true (порядковый номер элемента чётный), то срабатывает содержимое этого элемента.

    Управление атрибутами вышестоящего элемента:

    В данном случае, если позиция элемента чётная (определяется вышестоящим if), то в стиль элемента
    будет прописан серый цвет фона.

    Вывод значений элемента:

    Этот код подставит в вышестоящий элемент строку, собранную из имени текущего элемента и его значения. Содержимое атрибута select соответствует XPath.

    Вывод ссылки на разработчика парсера XSLT:

    Этот небольшой код XSLT формирует ссылку на разработчика парсера XSLT. Во многих случаях она будет разная и содержать разные значения.

    Результатом обработки этого стиля ( test.xsl ) станет такой код:

    Этот код соответствует стандарту XHTML1.1 и был сформирован на основе исходного XML-документа. Для проверки можно воспользоваться валидатором от W3C, который расположен по адресу http://validator.w3.org/.

    В браузере этот код выглядит примерно так:

    IE 6 FireFox 3 Opera 9.02

    4. Приложение

    Ссылки на исходный код

    Постоянный адрес статьи //anton-pribora.ru/articles/xml/xslt-first-step/. /Автор: Прибора Антон Николаевич, 2009 год/

    Использование PHP5 для обработки XSLT

    Для получения результирующего документа при помощи PHP5 я использовал такой код:

    Дополнительную информацию по использованию XSLT в PHP5 можно найти по адресу http://ru2.php.net/manual/ru/book.xslt.php.

    Мысли вслух

    «Товарищи, мы стоим на краю огромной пропасти! И я предлагаю сделать большой, решительный шаг вперёд!»

    © 2020 Антон Прибора. При копировании материалов с сайта, пожалуйста, указывайте ссылку на источник.

    Новые книги

    xslt_errno — возвращает номер ошибки.

    Описание

    int xslt_errno (resource xh)

    Возвращает error-код, описывающий последнюю ошибку, возникшую в переданном XSLT-процессоре.

    Что такое код xslt_errno

    Задача
    Есть XML-документ и таблица стилей XSL. Необходимо преобразовать документ с помощью XSLT и представить результаты. Это позволит применять таблицы стилей к данным и создавать различные версии содержания для представления в разных средствах информации.

    Решение
    Используйте расширение PHP XSLT:

    Преобразованный текст сохраняется в переменной $results.

    Обсуждение
    XML-документы описывают содержание данных, но в них нет никакой информации о том, как отображать эти данные. Однако если содержание документа связано с таблицей стилей, описываемой с помощью XSL (eXtensible Stylesheet Language – открытый язык таблиц
    стилей), то это содержание будет отображаться согласно определенным правилам визуализации.

    Связующим звеном между XML и XSL является XSLT, который определяет преобразования открытого языка таблиц стилей. Эти преобразования применяют к XML-данным наборы правил, перенумерованные в таблице стилей. Поэтому точно так же, как PHP анализирует
    программу и объединяет ее с пользовательским вводом при создании динамической страницы, XSLT-программа использует XSL и XML для вывода новой страницы, дополнительно содержащей XML, HTML или какой-либо другой формат, который вы можете описать.Сейчас существует небольшое количество XSLT-программ с различными возможностями и ограничениями. PHP в настоящее время поддерживает лишь XSLT-процессор Sablotron. В будущем станут доступны и другие программы, такие как Xalan и Libxslt. Sablotron можно загрузить с адреса http://www.gingerall.com. Чтобы разрешить использование процессора Sablotron для XSLT-обработки, в конфигурации PHP нужно указать две опции: —enable-xslt и —with-xslt-sablot.

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

    Мы начинаем с определения переменных для хранения имен файлов, содержащих XML-данные и таблицу стилей XSL. Эти переменные будут выступать в качестве второго и третьего параметров функции преобразования xslt_process(). Если, как в данном случае, четвертый элемент опущен или установлен в значение NULL, функция вернет нам результаты преобразования. В противном случае она сохранит результаты преобразования в файле с указанным именем:

    Если вы хотите извлекать данные XML и XSL из переменных, а не из файлов, используйте функцию xslt_process() с указанием пятого параметра, который позволяет заменить файлы строковыми переменными заполнителями:

    При чтении и записи файлов Sablotron поддерживает два типа URI.

    В PHP значением по умолчанию является «file:», поэтому Sablotronищет данные в файловой системе. Sablotron также может использовать пользовательский URI «arg:», который разрешает в качестве альтернативы передавать данные с помощью аргументов. Именно эта возможность используется в нашем примере.

    В предыдущем примере данные для XML и XSL поступают из базы данных, но точно так же они могут быть получены и из других источников, например могут быть загружены с удаленного ресурса (URL) или получены в результате передачи методом POST. При получении данных создается массив $args. Таким образом, устанавливается связь
    между именами аргументов и именами переменных. Ключи ассоциативного массива являются именами аргументов, переданных функции xslt_process(); значения аргументов – переменные, содержащие данные. По соглашению именами аргументов являются /_xml и /_xsl, однако можно использовать и другие имена.

    Затем вызывается функция xslt_process() и вместо имени файла data.xml используется arg:/_xml со строкой arg:, которая указывает расширению, что нужно заглянуть в массив $args. Так как массив $args передается в качестве пятого параметра, то в качестве четвертого параметра необходимо передать NULL; это заставит функцию вернуть результаты.

    Проверка наличия ошибок выполняется с помощью функций xslt_error() и xslt_errno():

    Функция xslt_error() возвращает форматированное сообщение, описывающее ошибку, функция xslt_errno() – числовой код ошибки.

    Чтобы установить свою собственную программу обработки ошибок, зарегистрируйте нужную функцию с помощью xslt_set_error_handler().

    В случае возникновения ошибок эта функция будет автоматически вызываться вместо любого встроенного обработчика.

    Хотя PHP прекращает работу любого открытого XSLT-процессора по завершении запроса, ниже показано, как вручную закрыть процессор и освободить занимаемую им память:

    xml — Требования PHP XSLT Prozessor

    Я пытаюсь запрограммировать домашнюю страницу с некоторыми преобразованиями XML с помощью XSLT. Я использую lampp в системе Fedora. Я начинаю с этого php-кода:

    Сообщение об ошибке, которое я получаю, следующее:

    Неустранимая ошибка: вызов неопределенной функции xslt_create() в /opt/lampp/htdocs/test/test.php в строке 2

    Я думал, что это сработает, если я установлю libxml2 , libxml-devel , libxslt и libxslt-devel , но в итоге появилось одно и то же сообщение об ошибке. Я также пробовал php-xml , но безуспешно. Может, это из-за лампочки? Любые другие идеи или решения для моей проблемы?

      4 1
    • 18 апр 2020 2020-04-18 09:59:59
    • Chris

    1 ответ

    Функциональность XSL доступна в пакете php-dom для PHP 5.

    Вместо этого есть XSL-расширение Docs, которое работает с PHP 5 (текущая версия PHP, PHP 4 мертва).

    IIRC существует некоторая резервная библиотека, написанная в самом PHP-коде, которая может имитировать синтаксис расширения PHP 4 с текущим расширением DOM. Но я не могу сказать вам, где и как хорошо, потому что это давно, и я не очень хорошо помню. также проще использовать новое расширение.

    АВТОМИР

    Преобразования из XML в XML

    Преобразования XML-XML иногда рассматриваются как SQL для Интернета, поскольку они позволяют оперировать запросами к базе данных в XML-документах. Ниже приведен пример. Используемый нами файл planets.xml содержит достаточно много данных о каждой планете:

    Что, если нам нужно только подмножество этих данных — например, имя и масса каждой планеты? В терминах баз данных planets.xml представляет собой таблицу, и мы хотим создать новую таблицу, содержащую подмножество данных из первой. В базах данных для этого служит язык SQL, а для документов XML мы можем использовать XSLT.

    В листинге 1.6 приведена новая версия файла planets.xsl , осуществляющая требуемое преобразование: выбираются только имя и масса каждой планеты, которые отправляются в выходной документ. В особенности обратите внимание на то, что мы осуществляем преобразование XML-XML, поэтому я использую элемент , атрибут method которого установлен в «xml» (фактически тип выходных данных обычно и есть XML, но если процессор XSLT видит тег , он обычно по умолчанию генерирует HTML).

    Листинг 1.6. Выбор только имени и массы

    C:planets>java org.apache.xalan.xslt.Process -IN planets.xml -XSL planets.xsl -OUT new.xml

    Вот как выглядит результирующий документ XML, new.xml:

    Отметьте, что этот файл выглядит во многом похоже на исходный файл planets.xml , за тем исключением, что каждый элемент

    Содержит только элементы и . Таким образом, мы смогли получить подмножество данных первоначального документа XML.

    Конечно, можно проводить любое число такого рода преобразований XML-XML. Можно обрабатывать данные в документе XML для создания совершенно новых XML-документов. Например, можно взять XML-документ с именами студентов и их отметками и создать новый документ, отображающий средние оценки. В XSLT есть много встроенных функций, позволяющих работать с данными подобным образом, — мы познакомимся с ними в главе 8.

    В дополнение следует сказать, что многие программы используют XML для обмена данными в Интернете, и, так как обычно они форматируют свои документы XML по-разному, еще одним популярным способом использования преобразований XML-XML в Интернете является преобразование XML из формата, используемого одной программой, в формат другой программы.

    Из книги C++ автора Хилл Мюррей

    8.5.6 Преобразования Конструктор, получающий один параметр, определяет преоразование из типа своего параметра в тип своего класса. Такие преобразования неявно применяются дополнительно к стандартным пробразованиям (#6.6-7). Поэтому присваивание объекту из класса X

    R.4.7 Преобразования ссылок Всюду, где ссылки (§R.8.2.2) инициализируются (включая передачу параметров (§R.5.2.2) и возврат значения функции (§R.6.6.3)) или используются иным образом, возможны следующие преобразования:Ссылка на данный класс может быть преобразована в ссылку на

    R.12.3 Преобразования Преобразования объектов класса можно задать с помощью конструкторов или функций преобразования.Такие преобразования, обычно называемые пользовательскими, используются неявно в совокупности со стандартными преобразованиями (§R.4). Например, функцию

    R.12.3.2 Функции преобразования Функция-член класса X, имя которой имеет вид,имя-функции-преобразования: operator имя-типа-преобразованияимя-типа-преобразования: список-спецификаций-типа opt операция-ptr optзадает преобразование из типа X в тип, определяемый конструкцией

    18.5.4. Средства преобразования Вторая крупнейшая проблема, связанная с DocBook, состоит в необходимости преобразования старой разметки уровня представления в разметку DocBook. Человек обычно может автоматически преобразовать представление документа в логическую структуру,

    Преобразования CSS В главе 22, ведя разговор о канве и программном рисовании на ней, мы узнали о преобразованиях системы координат. С помощью особых расширений CSS мы можем проделать аналогичные действия над любым элементом Web-страницы: сместить его, повернуть, растянуть или

    Преобразования из XML в XML Преобразования XML-XML иногда рассматриваются как SQL для Интернета, поскольку они позволяют оперировать запросами к базе данных в XML-документах. Ниже приведен пример. Используемый нами файл planets.xml содержит достаточно много данных о каждой

    Модель преобразования Во вводной главе мы говорили, что преобразования в XSLT являются наборами шаблонных правил, каждое из которых обрабатывает определенный фрагмент входящего документа с тем, чтобы сгенерировать фрагмент выходящего

    Контекст преобразования При выполнении преобразования каждая из его инструкций, каждый из элементов обрабатывается в некотором контексте. Контекст преобразования состоит из двух частей: из текущего множества узлов и из текущего узла, которые показывают, что именно

    Выполнение преобразования Несмотря на полную свободу в порядке выполнения шаблонов, правила изменения контекста и компоновки результирующего дерева, спецификация XSLT оговаривает очень четко — это делает XSLT весьма гибким языком, программы на котором при этом

    Упрощенные преобразования Многие простые преобразования состоят из единственного правила, которое обрабатывает корневой узел входящего документа. Общий вид такого рода преобразований показан в следующем листинге.Листинг 4.2. Простое

    Преобразования по умолчанию Большинство операций языка Си выполняют преобразование типов для приведения своих операндов к общему типу либо для того, чтобы расширить значения коротких по размеру типов до размера, используемого в машинных операциях. Преобразования,

    Преобразования типов Преобразование типов производится либо неявно, например при преобразовании по умолчанию или в процессе присваивания, либо явно, путем выполнения операции приведения типа. Преобразование типов выполняется также, когда преобразуется значение,

    Преобразования Преобразований, предусматриваемых Flash, всего два. Однако с их помощью можно задать весьма сложное движение выделенного нами фрагмента

    Аннотация: Рассматривается генерация кода преобразованиями XSLT. Изучается синтаксис XSLT, особенности применения преобразований, а также выполнение таких операций, как фильтрация, сортировка, выборка по условию в шаблонах. Выполнение трансформации программным путем в C#. Преимущества и недостатки технологии.

    Язык преобразований XSLT

    Во второй лекции мы уже рассматривали пример с использованием XSLT . В этой лекции мы рассмотрим эту технологию более подробно. XSL (eXtensible Stylesheet Language) переводится как Расширяемый Язык Стилей, и представляет собой язык для создания стилей XML документов. XSLT(XSL Transformations) — это язык преобразований XSL и является его частью. Стиль XSLT предназначен для преобразования иерархической структуры и формата документа XML . Результатами преобразования могут стать XML — файл , текстовый файл , программный код, HTML — файл , файл в формате PDF , и так далее. Этот язык предоставляет мощные возможности для манипуляции данными, информацией, текстом в иерархическом виде.

    А это как раз то, что нужно для генерации кода. Применение XSLT может существенно помочь в генерации кода. Кроме того, он предоставляет удобную альтернативу технологии шаблонов Т4.

    XSLT был разработан консорциумом W3C (World Wide Web Consortium) . Первая версия языка XSLT 1.0 стала рекомендацией 16 ноября 1999 года, а версия XSLT 2.0 стала рекомендацией 23 января 2007 года. Обе версии используются достаточно активно, и в этой лекции мы рассмотрим ту базовую функциональность, которая является для них общей. А это значит, что рассматривать будем в основном первую версию. Также упомянем некоторые команды из второй версии.

    Как работает XSLT

    Модель XSLT включает в себя такие части как:

    • документы XML,
    • стили XSLT ,
    • процессор XSLT ,
    • выходные документы.

    Документы XML являются входными данными, которые нужно преобразовать в другие документы. Документ стиля XSLT является корректным (well formed) документом XML и содержит набор правил для выполнения преобразования. Иными словами, документ стиля является шаблоном.

    Процессор XSLT является приложением, которое принимает в качестве входных данных документы XML и стили XSLT . Он выполняет трансформацию, то есть применение набора правил в стилях XSLT к документам XML . Результатом этой работы являются выходные документы .

    Процессоры XSLT имеют множество реализаций и встроены во многие браузеры вроде Internet Explorer, Firefox, Mozilla, Opera и другие. В Internet Explorer используется инструмент MSXML, разработанный Microsoft. XSLT — процессор встроен в Internet Explorer, начиная с версии 4.5. Сгенерированный результат примеров данной лекции можно просматривать путем открытия XML -файлов в одном из браузеров. В конце лекции мы рассмотрим возможности запуска трансформации программным путем, используя соответствующие классы языка программирования.

    XPath

    Другой частью технологии XSL является язык XPath , предназначенный для доступа к узлам документа XML путем задания путей и выражений. Язык Xpath используется в файлах стилей для навигации внутри XML -документов, определения частей исходного XML -документа, которые совпадают с одним или более заранее заданными шаблонами. При нахождении совпадения процессор XSLT применит к нему соответствующие правила из файла стиля и преобразует его в часть результирующего документа. В файлах стилей XSLT выражения XPath используются весьма интенсивно.

    Применение XSLT

    Язык XSLT состоит из множества инструкций, записанных в виде тегов. Имя каждой инструкции обычно начинается с символов xsl . Для выполнения трансформации документ стиля XSLT должен являться корректным документом XML .

    Для преобразования документа XML необходимо добавить в начало документа инструкцию, подобную следующей:

    XSL — файл стилей обычно содержит множество элементов, самым главным из которых является элемент xsl :stylesheet . Именно он указывает, что данный XML — файл является файлом стилей. Кроме него могут содержаться другие элементы, например xsl :template , xsl :value-of . Документ XML и файл стиля передается в XSLT — процессор , который обрабатывает данные файлы, выполняет преобразование и выводит результат трансформации.

    Ниже представлен документ XML , содержащий список языков программирования.

    C# Visual Basic Delphi Prolog Пример 5.1. Файл languages.xml

    Необходимо вывести этот список в формате HTML . Для этой цели используем инструкцию xsl :for-each , которая будет применять часть шаблона к секциям документа, наименование которых указано в атрибуте select . В нашем случае укажем select=»languages/language» .

    Файл стилей будет применяться следующий:

    Мои любимые языки:

    Шаблон внутри xsl :for-each выводит содержимое каждого элемента language из languages . Для этой цели используется инструкция xsl :value-of и задаваемый атрибут select=».» . Это означает, что процессор должен выбирать текст содержимого текущего элемента в документе. Кроме отражения содержимого можно задавать имена конкретных тегов, а также атрибутов для выборки значений, хранящихся в них. Примеры будут рассмотрены далее.

    Откроем XML файл через Internet Explorer или другой браузер . Будет выведен такой текст:

    Мои любимые языки:

    Одним из самых главных элементов в стиле является xsl :template . Служит для определения повторно используемого шаблона и содержит правила, по которым будет преобразован документ XML . В атрибуте match содержится выражение для отбора узлов, к которым будет применен шаблон . Также может присутствовать атрибут name . В этом случае есть возможность вызывать шаблон по имени инструкцией xsl :apply-templates .

    Для повторения вывода шаблона для каждого элемента документа применяется инструкция xsl :for-each . Шаблон выполняется для каждого элемента, соответствующего условию, указанному в атрибуте select .

    Инструкция xsl :value-of служит для вычисления выражения, записанного в атрибуте select с последующим выводом результата в том месте, где расположен сам элемент.

    Фильтрация

    Мы рассмотрели случай, когда считываются значения каждого узла. Однако часто возникает необходимость выбирать только часть данных, то есть их надо фильтровать. Шаблоны XSLT поддерживают два способа фильтрации.

    Один из них — это применение атрибута select инструкции xsl :for-each , а второй — применение атрибута match элемента xsl :template . Применение match мы рассмотрим позже, а сейчас рассмотрим select .

    Изменим немного файл с данными: добавим атрибут high , обозначающий, является ли язык из нашего списка языком высокого уровня. Также расширим сам список языков.

    C# Visual Basic Delphi Prolog Assembler Java Perl Пример 5.3. Файл languages4.xml

    Заметим, что значение false для атрибута high стоит только для значения «Assembler» . Изменим немного файл таблицы стилей:

    Языки высокого уровня:

    В секции [@ high =»true»] мы указываем, что выбирать следует только те узлы документа, у которых атрибут high имеет значение «true» . Знак @ является символом, указывающим на то, что после него стоит имя атрибута.

    Посмотрим на результат:

    Языки высокого уровня:

    Как видим, значение «Assembler» не отображается в списке языков, то есть процессор XSLT отфильтровал данные согласно заданным условиям.

    Сортировка

    Кроме фильтрации другой часто применяемой операцией при генерации кода является сортировка . Атрибут order-by инструкции xsl :for-each служит для сортировки результата, для обозначения порядка прохода узлов документа при выполнении трансформации. Сортируемые поля перечисляются через точку с запятой, а также имеют перед своим названием знаки «+» или «-» , означающие сортировку по возрастанию или убыванию.

    Рассмотрим немного измененный вариант документа — вместо атрибута high будем использовать элемент level , принимающий значения high или low . А имя языка запишем в элемент name .

    C# high Visual Basic high Delphi high Prolog high Assembler low Java high Perl high Пример 5.5. Файл languages6.xml

    В следующей таблице стилей для инструкции xsl :for-each применим атрибут order-by со значением +name , где знак плюса означает, что надо отсортировать по возрастанию.

    Языки высокого уровня:

    В атрибуте select мы фильтруем по значению элемента level . Также в атрибуте select инструкции

    Не прошло и трёх лет с тех пор, как у меня зародилась мысль о том, что пора изучать XSLT -))). Мысль зародилась, а везде ещё стоял PHP 4 и зверствовал Salbotron , который, мягко говоря, не отличался высокой производительностью. Да и редко какой браузер мог похвастаться поддержкой этого самого XSLT. По этим соображениям изучение столь перспективного направления я отложил до лучших времён. На данный момент можно смело заявить, что эти времена настали, поскольку вышел PHP 5 с поддержкой XSLT и сносной объектной моделью, а все топовые браузеры уже сами уверенно держат преобразования, только подавай XML. :)

    • http://w3c.org — комитет по разработке и продвижению стандартов всемирной паутины Internet. На данный момент он является первоисточником практически всех веб-ориентированных стандартов и рекомендаций.
    • http://www.w3.org/TR/xml — спецификация расширяемого языка разметки XML , который является основой современного веба. На момент написания статьи доступна пятая редакция версии 1.0, а также вторая редакция версии 1.1.
    • http://www.w3.org/TR/xml-names — спецификация использования пространств имён в XML.
    • http://www.w3.org/TR/xpath — спецификация по использованию языка поиска частей XML-документа XPath .
    • http://www.w3.org/TR/xsl/ — спецификация расширенного языка стилей XSL .
    • http://www.w3.org/TR/xslt — спецификация языка преобразований XSLT .
    • http://validator.w3.org/ — валидатор HTML .
    • http://www.w3.org/TR/xhtml1/ — спецификация XHTML1.0 .

    Переводы на русский язык:

    • http://www.rol.ru/news/it/helpdesk/xml01.htm — Расширяемый язык разметки XML1.0 (вторая редакция). /Радик Усманов/
    • http://www.rol.ru/news/it/helpdesk/xnamsps.htm — Пространства имен в XML. /Радик Усманов/
    • http://www.rol.ru/news/it/helpdesk/xpath01.htm — Язык XML Path (XPath ). /Радик Усманов/
    • http://www.rol.ru/news/it/helpdesk/xslt01.htm — Язык преобразований XSL (XSLT ). /Радик Усманов/

    Для лучшего понимания всего происходящего я рекомендую читать спецификации в следующем порядке:

    1. XML (это основа!)
    2. пространства имён (механизм разнородного XML-кода в одном файле)
    3. XPath (язык выборки элементов из дерева структуры)
    4. XSLT (преобразования)
    5. XHTML (то, к чему нужно стремиться)

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

    2. Валидный XHTML

    Что такое валидный XHTML? В первую очередь, это XML-документ, который должен соответствовать спецификации XML. Во-вторую, почти обычная HTML-страница, к которой все привыкли.

    Почему нужен именно XHTML? Исключительно из соображений совместимости и кросс-браузерности. Страница в XHTML будет с большей вероятностью отображаться корректно в популярных браузерах, чем обычный HTML.

    Для рядового клепателя страниц словосочетание XML-документ должно означать следующее:

    1. Документ содержит объявление XML-документа в самом начале страницы:
    2. Документ содержит один корневой элемент, в котором находятся все остальные.
    3. Все элементы (тэги) должны иметь закрывающую часть (
      , ).
    4. Атрибуты всегда имеют значение, которое обязательно указывается в кавычках (одинарных или двойных). Например, «radio» disabled=»disabled» /> .
    5. Управляющие символы & , всегда должны маскироваться. Например, «?a=1&b=2» > & . Исключение составляет только , внутри которого спецсимволы можно не маскировать.

    Также сам XHTML обязывает выполнять следующие условия:

    1. Документ должен объявлять пространство имён, в рамках которого будут использоваться элементы HTML.
    2. Документ должен объявлять DOCTYPE перед корневым элементом и указывать в нём один из типов XHTML и соответствующий DTD.

    Пример простого документа XHTML1.0:

    И так обо всём по порядку.

    Объявление XML-документа, в котором указывается его версия и кодировка.

    Объявление пространства имён и используемого языка.

    Три версии XHTML1.0 предназначены для лучшей обратной совместимости:

    • Strict — обеспечивает наибольшее соответствие рекомендациям W3C со стороны браузеров. Однако и сам HTML-код должен следовать этим рекомендациям.
    • Transitional — менее строгое соответствие, которое заставляет браузер вести себя так, как если бы это был обычный HTML-документ.
    • Frameset — позволяет использовать фреймы.

    XHTML1.1 по сути является тем же XHTML1.0 Strict и призван вытеснить другие версии XHTML1.0. Однако, по сравнению с XHTML1.0 Strict, у него есть ряд отличий :

    1. Удалён атрибут lang , его роль выполняет xml:lang . (Модуль [ XHTMLMOD ])
    2. Для элементов a и map вместо атрибута name нужно использовать атрибут id . (Модуль [ XHTMLMOD ])
    3. Доступен набор элементов ruby . (Модуль [ RUBY ])

    Итак, если вам нужна наибольшая кросс-браузерность и совместимость с рекомендациями W3C, то XHTML1.1 самое оно!

    Из этих соображений результатом моих преобразований будет именно XHTML1.1.

    3. XSLT-преобразования

    Что такое XSLT? Это язык преобразований XML-документа, который был разработан как часть расширенного языка стилей (XSL).

    Зачем нужен XSLT? Он позволяет реализовать схему, при которой данные хранятся отдельно, а их представление отдельно. То есть, один XML-документ преобразуется с помощью другого XML-документа (XSL, в котором находятся XSLT-шаблоны) в конечный документ. Результатом может быть XML, HTML или текстовый документ любого формата.

    Для того, чтобы воспользоваться XSLT-преобразованиями, в первую очередь нужно сформировать правильный стиль XSL и подключить его к XML-файлу.

    Валидным XSL-документом является XML-документ, у которого задано пространство имён xsl и присутствует корневой элемент stylesheet. В самом простом случае стиль может выглядеть, например, так:

    Этот стиль не содержит каких-либо явных определений шаблонов или других элементов XSL. Однако, его уже можно использовать. Чтобы посмотреть результат, достаточно сформировать произвольный XML-документ и подключить к нему этот стиль:

    За подключение стиля отвечает строка:

    При этом кодировка результата будет UTF-8, несмотря на то, что исходный документ был сформирован в windows-1251. К сожалению, браузеры обычно не позволяют просмотреть код результирующего документа, но модуль XSLT в PHP5 даёт возможность передать результирующий код в переменную, которую можно сохранить в файл. Поэтому, используя PHP, я приведу исходный код результирующего документа:

    Этот код не является валидным XML-документом и тем более XHTML1.1. Для того, чтобы сформировать нужный код, я усложню исходный XSL-стиль и добавлю туда необходимые шаблоны и преобразования. При этом исходный XML-документ останется без изменений.

    В качестве примера я приведу XSL-стиль, который при помощи XSLT будет выводить список атрибутов исходного XML-документа с их значениями, при этом будет формироваться валидный XHTML1.1. Итак, стиль:

    Новые книги

    Подход, предложенный Люком Вроблевски, произвел настоящую революцию в области веб-дизайна. Его суть проста: чтобы сайт наиболее полно удовлетворял потребности пользователей любых устройств, сначала следует проектировать его мобильную версию.

    В своей книге Люк подробно рассказывает о том, как перейти от создания обычных сайтов к разработке их мобильных версий, какие особенности поведения владельцев мобильных устройств следует учитывать при проектировании интерфейса, как правильно организовать контент и навигацию и о многом-многом другом.

    Следуя его рекомендациям, вы сможете создать максимально удобный дизайн, который обеспечит высокую посещаемость вашего сайта в самое ближайшее время.

    Издано с разрешения A Book Apart LLC На русском языке публикуется впервые.

    Все права защищены.

    Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.

    Илон Маск рекомендует:  Что такое код asp certcheckmode
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL
    Учебник РНР
    НазадВперёд