<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
  <meta name="GENERATOR" content="amaya 8.5, see http://www.w3.org/Amaya/" />
  <title>&#xc8;&#xf1;&#xef;&#xee;&#xeb;&#xfc;&#xe7;&#xee;&#xe2;&#xe0;&#xed;&#xe8;&#xe5;
  &#xf4;&#xe0;&#xe9;&#xeb;&#xe0; HTML.trans</title>
  <style type="text/css">
  </style>
  <link href="style.css" rel="stylesheet" type="text/css" />
</head>

<body xml:lang="ru" lang="ru">

<table border="0" width="100%" summary="toc">
  <tbody>
    <tr>
      <td><p><img alt="W3C" src="../images/w3c_home" /> <img alt="Amaya"
        src="../images/amaya.gif" /></p>
      </td>
      <td><p align="right"><a
        href="editing_documents/about_merging_elements.html.ru"
        accesskey="p"><img alt="Предыдущий" src="../images/left.gif" /></a>
        <a href="Changing.html.ru" accesskey="t"><img alt="Вверх"
        src="../images/up.gif" /></a></p>
      </td>
    </tr>
  </tbody>
</table>

<div id="page_body">
<h1>Использование файла HTML.trans</h1>

<p>Этот документ является введением в механизм структурного преобразования
предоставляемый <strong>Amaya</strong>. Он описывает синтаксис языка
преобразования и то, каким образом выполняются эти преобразования с помощью
редактора.</p>

<p>Файл <code>amaya/HTML.trans</code> содержит описания доступных
преобразований. Этот файл может редактироваться во время работы
<strong>Amaya</strong>. Во время вызова процедуры преобразования, редактор
может динамично выполнять синтаксический анализ на предмет добавления новых
преборазований в течении текущего сеанса редактирования.</p>

<p><strong>Внимание</strong>: Так как содержание файла описания
преобразований может содержать тэги, <strong>не</strong> редактируйте файл
<code>HTML.trans</code> с помощью <strong>Amaya</strong>. Используйте любой
текстовый редактор.</p>
<hr />

<h2>Синтаксис языка преобразований Amaya</h2>

<p>Комментарии начинаются символом<code><strong>!</strong></code>и
продолжаются до конца линии.</p>

<p>Файл содержит список описаний преобразований. Каждое преобразование
описывается тремя частями :</p>
<ul>
  <li><em>имя</em> заканчивается двоеточием
  <strong><code>:</code></strong></li>
  <li><em>исходный образец</em> заканчивается точкой с
    запятой<strong><code>;</code></strong></li>
  <li>и список <em>правил</em> заключённый между фигурными скобками
    <strong><code>{ }</code></strong> , каждое правило заканчивается точкой с
    запятой <strong><code>;</code></strong></li>
</ul>

<p>Для удобства конечного пользователя имена появляются в меню
<strong>Преобразовать</strong> для идентификации самого преобразования.</p>

<h3>Образец</h3>

<p>Образец описывает определенную организацию элементов преобразования. Он
работает как дополнительный фильтр к HTML dtd. Целью образца является
идентификация специфической комбинации элементов, применяемого
преобразования. В образце возможно указать условия на последовательность
тэгов, на содержании тэга, на существование и значения атрибутов.</p>

<p>Формально, образец содержит HTML тэги (возможно с атрибутами) и некоторых
операторов композиции:</p>

<p><strong><code>|</code></strong> для выбора</p>

<p><strong><code>,</code></strong>для потомков</p>

<p><strong><code>+</code></strong> для последовательности</p>

<p><strong><code>?</code></strong> для опций</p>

<p><strong><code>( )</code></strong> для группируемых узлов</p>

<p>Фигурные с:обки <code><strong>{</strong></code>
<code><strong>}</strong></code> определяют содержание узла.</p>

<p>Символ <strong><code>*</code></strong> является маркером, соответствующий
любому типу элемента.</p>

<p>Имеется возможность переименовывать тэг предшествующий имеющемуся, имя
сопровождается двоеточием (<strong><code>:</code></strong>).</p>

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

<p><a href="#L235">Примеры</a> образцов приведены в конце этого документа.</p>

<h3>Правила</h3>

<p>Правило показывает, как некоторые элементы, идентифицированные в образце,
будут преобразованы. Правило имеет две части, разделённые символом
<strong><code>&gt;</code></strong>:</p>
<ul>
  <li>исходный тэг или имя определённое в образце,</li>
  <li>целевой список тэгов предоставляет генерируемые тэги и место, куда они
    будут вставлены при преобразовании исходного элемента.</li>
</ul>

<p>Целевой список тэгов сам разделен на две части, разделённый двоеточием
(<strong><code>:</code></strong>):</p>
<ul>
  <li>генерируемый путь местоположения (идентифицирует место куда будут
    вставляться новые тэги)</li>
  <li>список генерируемых тэгов</li>
</ul>

<p>Генерируемый путь местоположения выполняет поиск в крайнем левом
ответвлении дерева документа, начиная с родительского элемента, который
соответствует самому верхнему символу образца.</p>

<p>В целевом списке тэгов, символ точка (<code><strong>.</strong></code>)
используется для понижения в структуре дерева.</p>

<p>Если генерируемый список тэгов завершает специальный символ звездочка
(<code><strong>*</strong></code>), исходный тэг элемента не изменяется, но он
может быть перемещён в другое место в месте назначения.</p>

<p>Если исходный тэг или имя в левой части правил имеется в образце в
количестве более одного экземпляра, правило преобразовывает все элементы,
соответствующие местонахождению тэга в образце.</p>
<hr />

<h2>Процесс преобразования</h2>

<p>Когда пользователь выбирает команду <strong>Преобразовать</strong> из меню
<strong>Правка</strong>, Amaya выполняет анализ файлов
<code>HTML.trans</code> (или <code>MathML.trans</code>, и прочих). Затем
выбирает элементы, сравнивая их с образцами для каждого преобразования.
Названия сравниваемых преобразований должны быть предложены пользователю во
всплывающем меню.</p>

<p>Если выбранным элементам соответствует несколько преобразований с одним и
тем же именем, пользователю будет предложено преобразование с более высоким
уровнем. Если на одном и том же уровне имеется несколько преобразований, то
первым будет предлагаться преобразование объявленное первым в файле в
HTML.trans. Как следствие, при большом количестве преобразований,
рекомендуется определять (связывать) преобразования с определенными
образцами.</p>

<p>Как только пользователь выберет преобразование, структура места назначения
будет построена согласно правилам, в то время как выбранные элементы
пересекаются.</p>

<p>И в заключении, содержание исходных элементов (текст и изображения, но
только структурированные элементы) будет перемещено в сгенерированные
элементы.</p>

<p>Процесс преобразования HTML документов полностью описан в <a
href="http://opera.inrialpes.fr/opera/papers9696.html"><em>Интерактивная
реструктуризация HTML документов</em></a>, представленный на <a
href="http://www5conf.inria.fr/">пятой международной WWW конференции</a> в
Париже, в мае 1996 года, Cйcile Roisin и Stйphane Bonhomme.</p>
<hr />

<h2><a name="L235" id="L235">Примеры</a></h2>
<ul>
  <li>Первый пример объединяет несколько последовательных ненумерованных
    списков (UL) в уникальный список.
    <pre>Merge Lists: (ul{li+})+;
    { 
    li &gt; ul:li; 
    }</pre>
    <p>Образец соответствует последовательности ненумерованных списков (UL),
    содержащих последовательность пунктов (LI).</p>
    <p>Правило гласит, что при проходе по согласованным элементам, пункт
    будет всякий раз выпадать, когда в пределах нового UL будет создаваться
    тэг LI. Когда правило применяется в первый раз, результирующая структура
    будет пуста, так что не будет существовать никакого UL элемента, в
    котором эти LI могут быть созданы. Поэтому, правило может применяться
    только тогда, когда будет создан UL.</p>
  </li>
  <li>Второй пример преобразовывает список определения в таблицу.
    <pre>Table: dl{(dt|dd)+}; 
   { 
   dt &gt; &lt;table border=1&gt;.tbody:tr.td; 
   dd &gt; &lt;table border=1&gt;.tbody.tr:td; 
   }</pre>
    <p>Образец соответствует любому элементу списка определения (dl).</p>
    <p>Правила объясняют, как выполняется строительство таблицы путём
    приращения, при прохождении структуры выбранного списка определения:</p>
    <ul>
      <li>Каждый dt включает в себя создание новой строки (tr) в теле
      таблицы.</li>
      <li>Каждый dd включает в себя создание новой ячейки (td) в последней
        (предыдущей) существующей строке таблицы.
        <p></p>
      </li>
    </ul>
  </li>
  <li>Третий пример удаляет элемент таблицы, сохраняя её содержание
    неизмённым, но извлекая его из таблицы.
    <pre>Remove Table:
table{?caption,?(body:*{(tr{(td{(?cell_content:*)+}|
                             th{(?cell_content:*)+}
                           )})+})+};
     { 
     caption&gt;h3; 
     cell_content&gt;:*;
     }</pre>
    <p>Образец соответствует любой таблице и идентифицирует содержание каждой
    ячейки таблицы (cell_content).</p>
    <p>Второе правило гласит, что содержание каждой ячейки должно быть
    перемещено в место первоначальной таблицы.</p>
  </li>
  <li>Для более подробных примеров смотрите файл
  <kbd>amaya/HTML.trans</kbd>.</li>
</ul>
</div>
<hr />
</body>
</html>
