Проектирование интерпретатора - Разработка веб-редактора для описания лексико-семантических шаблонов на визуальном языке

Для того, чтобы интерпретировать XML представление в язык JAPE, был использован язык преобразования XSLT [18]. Данный язык и будет служить транслятором, с его помощью исходный код диаграммы возможно модифицировать по усмотрению разработчика. Как было показано на рисунке 2.9, синтаксический анализ исходной страницы XML будет проводиться на стороне сервера.

Для того, чтобы преобразование было возможным на стороне сервера, необходимо использовать XSLT API, TransformerFactory. МетодnewTransformer(stylesource) позволяет создать трансформер, на основе переданного набора шаблонов на языке XSLT. Далее, для запуска трансформации, необходимо запустить метод transform(source, result), в который передается файл для трансформации и переменная, в которую необходимо поместить результат преобразования [19].

Так, на сервер будет отправлен файл в формате. txt, далее он будет преобразован в формат. jape и сохранен в облачное хранилище. Для преобразования XMLпредставления необходимо опустить все атрибуты стиля, такие как: цвет границы, тип и размер шрифта; опустить позиционирующие объект атрибуты (координаты и трансформации над фигурой). В связи с тем, что все необходимые атрибуты для описания лексико-семантического шаблона на языке JAPE находятся именно в фигурах (обозначаемых тегами <rect>и <ellipse>), было решено пропускать теги <text> в виду их не информативности, т. к. они предназначены лишь для работы с пользователем. Все фигуры, связанные линиями (элементы с тэгом <path>) последовательно, будут преобразованы в правила, объединенные логическим "И". Если будут найдены линии, у которых второй объект (obj2) будет совпадать, это означает, что два этих правила будут объединены логическим "ИЛИ". Одна диаграмма (начинающаяся с элемента "Start" и заканчивающаяся "Finish"), будет объединена в фигурные скобки и выделена как отдельное правило JAPE.

С помощью XSLT были разработаны средства для извлечения нужных атрибутов для формирования правил на языке jape. Например, ниже представлен отрывок из. xml документа, в котором описан " Lookup"со всеми необходимыми для отображения этого объекта на диаграмме атрибутами:

<div id="svgout" priority="5" phase="ExtractTitle" rule="ExtractWithoutSs" onclick="getEventElement()"><svg height="760" version="1.1" width="1000">

...

<rect x="204" y="76" width="37.25" height="40" rx="10" ry="10" fill="#0000ff" stroke="#0000ff" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); fill-opacity: 0; cursor: move;" stroke-width="2" fill-opacity="0" indexInArray="8" ident="id_1464204248325" objectType="Lookup" propertyName="majorType" propertyValue="Title" operation="==" propertyType="String"></rect>

...

</svg></div>

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

<xsl:stylesheet ...>

<xsl:template match="div">

Phase: <xsl:value-of select="@phase"/>

Rule: <xsl:value-of select="@rule"/>

Priority: <xsl:value-of select="@priority"/>

<xsl:apply-templates/>

</xsl:template>

<xsl:template match="svg">

(<xsl:apply-templates select="rect"/> )

</xsl:template>

<xsl:template match="rect">

<xsl:if test="@objectType= 'Lookup'">{

<xsl:value-of select="@objectType"/>.

<xsl:value-of select="@propertyName"/>

<xsl:value-of select="@operation"/>

<xsl:value-of select="@propertyValue"/>}

</xsl:if>

</xsl:template>

</xsl:stylesheet>

Первый шаблон обращен к корневому элементу (<div>), из которого можно извлечь необходимые для описания лексико-семантического шаблона на языке JAPE атрибуты: название фазы, название правила и приоритет правила. После этого к элементу применяется ("xsl:apply-templates") следующий шаблон - templatematch="svg". При помощи него мы опускаемся на ступень ниже по иерархии тегов в <svg>элемент.

Под тэгом <svg>и будут находиться все объекты диаграммы, например <rect>. Однако, в связи с тем, что все типы объектов ("Lookup", "Token") представлены одинаковым тегом, необходимо различать их по атрибуту "objectType". Для этого добавлен оператор сравнения "if", который проверяет атрибут на эквивалентность со строкой "Lookup". В результате трансформации представленного отрывка. xml файла при помощи шаблонов из. xsl, будет получен следующий результат:

Phase: ExtractTitleRule:ExtractWithoutSsPriority: 5

({ Lookup. majorType==Title})

Данная строка уже практически соответствует готовому шаблону на языке JAPE, не хватает лишь правой части правила. Как было описано выше, элементы правой части будут извлекаться из объектов диаграммы начала и конца.

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

Похожие статьи




Проектирование интерпретатора - Разработка веб-редактора для описания лексико-семантических шаблонов на визуальном языке

Предыдущая | Следующая