Разное

Http www w3 org 1999: The Extensible HyperText Markup Language (Second Edition)

24.06.2023

XSLT — Преобразование

Корневым элементом, декларирующим документ таблицы стилей XSL, является <xsl:stylesheet> или <xsl:transform>.

Примечание: Элементы <xsl:stylesheet> и <xsl:transform> являются полными синонимами, и для декларации таблицы стилей можно использовать любой из них!

Согласно рекомендации консорциума W3C таблица стилей XSL декларируется следующим образом:

<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

или:

<xsl:transform version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

Чтобы получить доступ к элементам, атрибутам и другим функциям XSLT, необходимо в начале документа декларировать пространство имен XSLT.

Строка xmlns:xsl=»http://www.w3.org/1999/XSL/Transform» указывает на официальное пространство имен XSLT консорциума W3C. Если вы используете это пространство имен, то вы также должны указывать и атрибут version=»1.

0″.

Начнем с чистого XML документа

Предположим, что нам нужно преобразовать следующий XML документ («cd_catalog.xml») в XHTML:

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
   <cd>
     <title>Empire Burlesque</title>
     <artist>Bob Dylan</artist>
     <country>USA</country>
     <company>Columbia</company>
     <price>10.90</price>
     <year>1985</year>
   </cd>
 .
 .
</catalog>

Просмотр XML файлов в IE, Chrome, Firefox, Safari и Opera: Откройте XML файл (нажмите на ссылку ниже) — XML документ будет отображаться в виде окрашенных в разные цвета корневого и дочерних элементов и их содержимого (кроме браузера Safari). Часто слева от элементов XML дерева выводится знак плюса (+) или минуса (-), при нажатии на который можно развернуть/свернуть структуру элемента. Чтобы просмотреть исходный код документа, нажмите правой кнопкой мыши на XML файл и в контекстном меню выберите пункт «Исходный код» (Opera) или «Просмотреть код страницы» (Chrome)!

Посмотреть «cd_catalog. xml»

Создание таблицы стилей XSL

Теперь создаем таблицу стилей XSL («cd_catalog.xsl») с шаблоном преобразования:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
   <html>
   <body>
   <h3>My CD Collection</h3>
   <table border="1">
     <tr bgcolor="#9acd32">
       <th>Title</th>
       <th>Artist</th>
     </tr>
     <xsl:for-each select="catalog/cd">
     <tr>
       <td><xsl:value-of select="title"/></td>
       <td><xsl:value-of select="artist"/></td>
     </tr>
     </xsl:for-each>
   </table>
   </body>
   </html>
</xsl:template>
</xsl:stylesheet> 

Просмотреть «cd_catalog.xsl»

Подключаем таблицу стилей XSL к XML документу

Добавляем ссылку на таблицу стилей XSL в XML документ («cd_catalog.

xml»):

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="//msiter.ru/cd_catalog.xsl"?>
<catalog>
   <cd>
     <title>Empire Burlesque</title>
     <artist>Bob Dylan</artist>
     <country>USA</country>
     <company>Columbia</company>
     <price>10.90</price>
     <year>1985</year>
   </cd>
 .
 .
</catalog>

Если вы используете XSLT совместимый браузер, то вы увидите корректно преобразованный из XML в XHTML документ.

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

xsl:namespace-alias ⚡️ XSLT с примерами кода

Элемент xsl:namespace-alias назначает пространству имен выходящего документа пространство имен, которое будет подменять его в преобразовании, иначе говоря — псевдоним.

Не поддерживается браузером Mozilla Firefox.

Синтаксис

<xsl:namespace-alias
  stylesheet-prefix="префикс | #default"
  result-prefix="префикс | #default"
/>

Атрибуты:

result-prefix
обязательный атрибут, указывает, какому пространству имен назначается псевдоним.
stylesheet-prefix
обязательный атрибут, указывает, какое пространство имен будет использоваться в качестве его псевдонима в преобразовании.

Оба атрибута содержат префиксы пространств имен, которые, естественно, должны быть ранее объявлены в преобразовании.

В XSLT 2.0 атрибуты result-prefix и stylesheet-prefix могут принимать значение #default. Естественно, это приведет к ошибке при отсутствии пространства имен по умолчанию. Пространство имен по умолчанию определяется записью xmlns=.

Описание и примеры

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

Листинг 8.13. XML-документ, описывающий требуемое преобразование

<transform>
  <remove select="a" />
  <replace select="b" with="B" />
  <replace select="c" with="C" />
</transform>

Приведенный выше документ описывает преобразование, которое должно удалять из входящего документа элементы

a, а элементы b и c заменять элементами B и C соответственно. Такое преобразование может выглядеть следующим образом.

Листинг 8.14. Преобразование

<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
  <xsl:template match="a" />
  <xsl:template match="b">
    <xsl:element name="B">
      <xsl:apply-templates />
    </xsl:element>
  </xsl:template>
  <xsl:template match="c">
    <xsl:element name="C">
      <xsl:apply-templates />
    </xsl:element>
  </xsl:template>
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()" />
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

Преобразование, генерирующее такой код, не представляет особой сложности. Например, шаблон для обработки элемента replace может иметь следующий вид:

<xsl:template match="replace">
  <xsl:element name="xsl:template">
    <xsl:attribute name="match">
      <xsl:value-of select="@select" />
    </xsl:attribute>
    <xsl:element name="xsl:element">
      <xsl:attribute name="name">
        <xsl:value-of select="@with" />
      </xsl:attribute>
      <xsl:element name="xsl:apply-templates" />
    </xsl:element>
  </xsl:element>
</xsl:template>

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

<xsl:template match="replace">
  <xsl:template match="{@select}">
    <xsl:element name="{@with}">
      <xsl:apply-templates />
    </xsl:element>
  </xsl:template>
</xsl:template>

был бы некорректен. По этой причине нам пришлось генерировать все инструкции при помощи xsl:element и xsl:attribute, что сделало шаблон громоздким и малопонятным.

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

К счастью, XSLT предоставляет легкий и удобный способ для решения такого рода задачи: пространству имен можно назначить псевдоним при помощи элемента xsl:namespace-alias

.

Пример 1

Возвращаясь к генерации преобразования, мы можем изменить пространство имен генерируемых элементов так, чтобы они не воспринимались процессором как элементы XSLT. Для того чтобы в выходящем документе эти элементы все же принадлежали пространству имен XSLT, измененное пространство имен в преобразовании должно указываться как псевдоним этого пространства.

Листинг 8.15. Преобразование, использующее псевдонимы пространств имен

<xsl:stylesheet
  version="1. 0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:axsl="http://www.w3.org/1999/XSL/Transform/Alias"
>
  <xsl:namespace-alias
    stylesheet-prefix="axsl"
    result-prefix="xsl"
  />
  <xsl:template match="replace">
    <axsl:template match="{@select}">
      <axsl:element name="{@with}">
        <axsl:apply-templates />
      </axsl:element>
    </axsl:template>
  </xsl:template>
  <xsl:template match="remove">
    <axsl:template match="{@select}" />
  </xsl:template>
  <xsl:template match="transform">
    <axsl:stylesheet version="1.0">
      <xsl:apply-templates />
      <axsl:template match="@*|node()">
        <axsl:copy>
          <axsl:apply-templates select="@*|node()" />
        </axsl:copy>
      </axsl:template>
    </axsl:stylesheet>
  </xsl:template>
</xsl:stylesheet>

В этом преобразовании элемент xsl:namespace-alias указывает на то, что все элементы, принадлежащие в преобразовании пространству имен с URI

http://www. w3.org/1999/XSL/Transform/Alias

в выходящем документе должны принадлежать пространству имен с URI

http://www.w3.org/1999/XSL/Transform

то есть пространству имен XSLT.

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

Листинг 8.16. Выходящее преобразование

<axsl:stylesheet
  version="1.0"
  xmlns:axsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
  <axsl:template match="a" />
  <axsl:template match="b">
    <axsl:element name="B">
      <axsl:apply-templates />
    </axsl:element>
  </axsl:template>
  <axsl:template match="c">
    <axsl:element name="C">
      <axsl:apply-templates />
    </axsl:element>
  </axsl:template>
  <axsl:template match="@*|node()">
    <axsl:copy>
      <axsl:apply-templates select="@*|node()" />
    </axsl:copy>
  </axsl:template>
</axsl:stylesheet>

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

Атрибуты stylesheet-prefix и result-prefix элемента xsl:namespace-alias могут иметь значения «#default«. Определение вида

<xsl:namespace-alias
  stylesheet-prefix="a"
  result-prefix="#default"
/>

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

<xsl:namespace-alias
  stylesheet-prefix="#default"
  result-prefix="a"
/>

означает, что элементы, принадлежащие в преобразовании пространству имен по умолчанию, в выходящем документе должны принадлежать пространству имен a.

Пример 2

Листинг 8.17. Преобразование

<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:a="urn:a"
  xmlns="urn:b"
>
  <xsl:namespace-alias
    stylesheet-prefix="#default"
    result-prefix="a"
  />
  <xsl:namespace-alias
    stylesheet-prefix="a"
    result-prefix="#default"
  />
  <xsl:template match="root">
    <result>
      <a:element />
    </result>
  </xsl:template>
</xsl:stylesheet>

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

<result xmlns="urn:a" xmlns:a="urn:b">
  <a:element />
</result>

Результатом этого преобразования является то, что пространство имен с URI «urn:a» стало пространством имен по умолчанию, а пространство имен с URI «urn:b» изменило префикс на a.

В преобразованиях можно объявлять несколько псевдонимов пространств имен при условии, что одно и то же пространство имен преобразования не должно быть объявлено элементами xsl:namespace-alias с одинаковым порядком импорта псевдонимом для различных пространств имен выходящего документа.

Пример 3

Если преобразование a.xsl содержит определение

<xsl:namespace-alias
  stylesheet-prefix="x"
  result-prefix="a"
/>

а преобразование b.xsl — определение

<xsl:namespace-alias
  stylesheet-prefix="x"
  result-prefix="b"
/>

где в обоих преобразованиях префикс x представляет одно пространство имен, а пространства имен a и b — разные, то преобразование a. xsl не сможет включать преобразование b.xsl и наоборот, потому что они будут иметь одинаковый порядок импорта и содержать элементы xsl:namespace-alias, назначающие разным пространствам имен одинаковые псевдонимы. В одном преобразовании такие псевдонимы также не имеют права встречаться. Если же подобное все же случилось, процессор может сигнализировать ошибку или использовать определение, которое было дано в преобразовании последним.

Совсем иначе обстоит дело с импортированием. При импортировании определения старших в порядке импорта преобразований могут переопределять определения младших преобразований. Таким образом, если преобразование a.xsl будет импортировать преобразование b.xsl, пространство имен x будет назначено псевдонимом пространству имен a и наоборот.

Пример для XSLT 2.0

Чтобы продемонстрировать использование пространства имен по умолчанию с элементом <xsl:namespace-alias>, мы рассмотрим две таблицы стилей; в одной используется атрибут result-prefix="#default", а в другой – атрибут stylesheet-prefix="#default". Первая таблица стилей:

<?xml version="1.0" ?>
<!-- namespace-alias2.xsl -->
<stylesheet
  version="2.0"
  xmlns="http://www.w3.org/1999/XSL/Transform"
  xmlns:xslout="[что угодно, кроме пространства имен XSL]"
>
  <output method="xml" indent="yes" />
  <namespace-alias
    stylesheet-prefix="xslout"
    result-prefix="#default"
  />
  <template match="/">
    <xslout:stylesheet version="1.0">
      <xslout:output method="xml" />
      <xslout:template match="/">
        <xslout:copy-of select="." />
      </xslout:template>
    </xslout:stylesheet>
  </template>
</stylesheet>

Таблица стилей выдает следующий результат:

<?xml version="1.0" encoding="UTF-8" ?>
<stylesheet
  xmlns="http://www.w3.org/1999/XSL/Transform"
  version="1.0"
>
  <output method="xml" />
  <template match="/">
    <copy-of select="." />
  </template>
</stylesheet>

Исходная и сгенерированная таблицы стилей работают, так как все элементы XSLT находятся в пространстве имен по умолчанию http://www. w3.org/1999/XSL/Transform.

Вторая таблица стилей:

<?xml version="1.0" ?>
<!-- namespace-alias3.xsl -->
<xsl:stylesheet
  version="2.0"
  xmlns="[что угодно, кроме пространства имен XSL]"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
  <xsl:output method="xml" indent="yes" />
  <xsl:namespace-alias
    stylesheet-prefix="#default"
    result-prefix="xsl"
  />
  <xsl:template match="/">
    <stylesheet version="1.0">
      <output method="xml" />
      <template match="/">
        <copy-of select="." />
      </template>
    </stylesheet>
  </xsl:template>
</xsl:stylesheet>

Выходные данные этой таблицы стилей выглядят более типично:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
  <xsl:output method="xml" />
  <xsl:template match="/">
    <xsl:copy-of select=". " />
  </xsl:template>
</xsl:stylesheet>

См. также

  • namespace-uri()

Ссылки

  • xsl:namespace-alias MDN (рус.)
  • xsl:namespace-alias MSDN (en)

XHTML™ 1.1 — XHTML на основе модулей

XHTML™ 1.1 — XHTML на основе модулей — второе издание

[далее] [оглавление]


Рекомендация W3C 23 ноября 2010 г.


заменено 27 марта 2018 г.
Эта версия:
https://www.w3.org/TR/2018/SPSD-xhtml11-20180327/
Последняя версия:
http://www.w3.org/TR/xhtml11/
Предыдущая версия:
http://www.w3.org/TR/2010/REC-xhtml11-20101123
Предыдущая рекомендация:
http://www.w3.org/TR/2001/REC-xhtml11-20010531
Редакторы:
Шейн Маккаррон, Applied Testing and Technology, Inc. [email protected]
Масаясу Исикава, (до марта 2007 г. в W3C)
Версия 1.1 Редакторы:
Мюррей Альтейм, Sun Microsystems
Шейн Маккаррон, прикладное тестирование и технология

Пожалуйста, обратитесь к errata для этого документа, который может включать некоторые нормативные исправления. См. также переводы.

Copyright © 2001-2010 W3C ® (MIT, ERCIM, Keio), все права защищены. Применяются правила ответственности W3C, использования товарных знаков и документов.


Аннотация

Эта спецификация определяет тип документа XHTML, основанный на модульной структуре и модулях, определенных в модуляризации XHTML [XHTMLMOD]. Назначение этого типа документа состоит в том, чтобы служить основой для будущих расширенных «семейных» типов документов XHTML и обеспечивать согласованный, перспективный тип документа четко отделен от устаревшей функциональности HTML 4 [HTML4], которая была перенесена в типы документов XHTML 1. 0 [XHTML1]. Этот тип документа больше всего похож на XHTML 1.0 Strict, созданный с использованием XHTML-модулей. Это означает, что многие объекты, доступные в других Типы документов XHTML Family (например, XHTML Frames) недоступны в этом типе документа. Эти другие средства доступны через модули, определенные в XHTML Modularization, и авторы документов могут свободно определять типы документов на основе XHTML 1.1, которые используют эти средства (см. [XHTMLMOD] для получения информации о создании нового документа). виды).

В этом разделе описывается состояние этого документа на момент его публикации. Этот документ может быть заменен другими документами. Список текущих публикаций W3C и последняя редакция этот технический отчет можно найти в указателе технических отчетов W3C по адресу http://www.w3.org/TR/.

Данная спецификация является замененной рекомендацией. более новый существует спецификация, которая рекомендуется для нового принятия вместо эта спецификация.

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

Этот документ также заменяет предыдущую версию XHTML 1.1.

Этот документ был создан рабочей группой W3C XHTML 2 в рамках деятельности HTML.

Для целей Патентной политики W3C настоящая Замененная рекомендация имеет тот же статус, что и действующая рекомендация; он сохраняет лицензирование обязательства и остается доступным в качестве ссылки для старых — и возможно, все еще развернуты — реализации, но не рекомендуется для будущая реализация. Новые реализации должны следовать за последней версией спецификации HTML.

Версия данной спецификации на английском языке является единственной нормативной версией. Информация о переводах этого документа доступна по адресу http://www.w3.org/MarkUp/translations.

Список текущих рекомендаций W3C и других технических документов можно найти по адресу https://www. w3.org/TR/.

  • 1. Введение
  • 2. Определение соответствия
  • 3. Тип документа XHTML 1.1
  • A. Отличия от XHTML 1.0 Strict
  • Б. Ссылки
  • C. Определение типа документа XHTML 1.1
  • D. Определение XML-схемы XHTML 1.1
  • E. Благодарности
  • 1. Введение
  • 2. Определение соответствия
    • 2.1. Соответствие документа
      • 2.1.1. Строго соответствующие документы
    • 2.2. Соответствие пользовательского агента
  • 3. Тип документа XHTML 1.1
  • A. Отличия от XHTML 1.0 Strict
  • Б. Ссылки
    • Б.1. Нормативные ссылки
    • Б.2. Информативные ссылки
  • C. XHTML 1.1 Определение типа документа
    • С.1. Запись открытого каталога SGML для XHTML 1.1
    • С.2. Драйвер XHTML 1.1
    • С.3. Настройки XHTML 1.1
  • D. Определение XML-схемы XHTML 1.1
    • Д. 1. Драйвер схемы XHTML 1.1
    • Д.2. Модули схемы XHTML 1.1
    • Д.3. Настройки XHTML 1.1
    • Д.4. Реализация XML-схемы Ruby
  • E. Благодарности

[следующий] [оглавление]

xml — какое пространство имен по умолчанию используется для HTML/HTML5?

Как задокументировано W3C, который является органом, стоящим за спецификациями XML и HTML (WHATWG имеет отдельную спецификацию HTML 5, но, хотя она в некотором смысле не синхронизирована со спецификацией W3C, WHATWG по-прежнему считает ее ролью W3C чтобы стандартизировать спецификацию как REC), пространство имен для HTML при использовании с сериализацией XML (которую иногда называют XHTML) равно http://www.w3.org/1999/xhtml .

Это пространство имен охватывает все версии HTML с такими XML-сериализациями, которые были определены до сих пор, включая XHTML 1.0 и 1.1, которые широко использовались более десяти лет, XHTML 2.0, в котором было представлено несколько модульных идей, но который, возможно, был более важным как инкубатор для нескольких идей, чем реализованная версия, и «HTML5, сериализованный как XML», который иногда называют XHTML5.

Поскольку другим органом, выступающим в гонке за то, как определяется HTML 5, является WHATWG, вы можете заметить, что они также говорят, что если вы сериализуете HTML5 как XML, вы должны использовать пространство имен http://www.w3.org/1999/xhtml и с другой сериализацией либо не используют пространство имен, либо используют его. Согласно https://wiki.whatwg.org/wiki/FAQ#What_is_the_namespace_declaration.3F:

В XHTML требуется указать пространство имен.

В HTML атрибут xmlns в настоящее время разрешен для любого элемента HTML, но только если он имеет значение «http://www.w3.org/1999/xhtml». Он вообще ничего не делает, ему просто разрешено упростить миграцию с XHTML1. На самом деле это не объявление пространства имен в HTML, потому что HTML еще не поддерживает пространства имен. Смотрите вопрос, будет ли поддержка пространств имен в HTML.

Следующий FAQ также актуален здесь:

HTML определяется в терминах DOM, и во время синтаксического анализа text/html все элементы HTML будут автоматически помещаться в пространство имен HTML, http://www. w3.org/1999/xhtml . Однако, в отличие от сериализации XHTML, в сериализации HTML нет настоящего синтаксиса пространства имен (см. предыдущий вопрос). Другими словами, вам не нужно объявлять пространство имен в HTML-разметке, как в XHTML. Однако вам разрешено помещать атрибут xmlns в каждый элемент HTML, если пространство имен равно 9.0145 http://www.w3.org/1999/xhtml .

Кроме того, синтаксис HTML позволяет встраивать элементы из MathML и SVG. Элементы, размещенные внутри контейнера element math или svg , будут автоматически помещены синтаксическим анализатором в пространство имен MathML или пространство имен SVG соответственно. Синтаксис пространства имен не требуется, но опять же разрешен атрибут xmlns, если его значение соответствует правильному пространству имен.

В заключение, хотя HTML не поддерживает синтаксис пространства имен XML, существует способ встраивания MathML и SVG, а атрибут xmlns можно использовать для любого элемента с заданными ограничениями таким образом, чтобы он был разумно совместим на уровне DOM.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *