Освоение и настройка Model Publishing в IBM Rational Software Modeler/Architect

Майк Бойерсмит, Штатный инженер-программист, IBM Ченг-Е Лин, Менеджер по разработке, IBM Rational

Цель

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

Схема статьи

Эта статья разбита на три раздела:

  • Краткий обзор продукта IBM Rational Software Modeler (RSM) и функций, предоставляемых Model Publishing.
  • "Поваренная книга", которая выступает в качестве руководства "Быстрый старт" для выполнения общих задач по настройке.
  • Погружение в детали дизайна, советы и методики, которые вы можете с выгодой использовать.

Замечание об актуальности статьи

Эта статья написана конкретно для функций публикации модели в продукте RSM и IBM Rational Software Architect (RSA), версии 6.0.0. Более новые версии публикации модели могут сделать информацию в этой статье устаревшей.


Что такое RSM и публикация модели?

RSM - это визуальное инструментальное средство моделирования, использующее UML (Unified Modeling Language) для описания всего, что может быть смоделировано. Обратите внимание, что продукт RSA расположен на верхнем уровне RSM и содержит такой же набор базовых функциональных возможностей, что и RSM. Когда в этой статье упоминается RSM, это также относится к аналогичной функциональности, присутствующей в RSA.

RSM и RSA предоставляют платформу разработки программного обеспечения, которую вы можете использовать в качестве Model Development Architecture (MDA) для разработки прикладных программ. Среди основных возможностей, поддерживаемых в RSM, присутствует способность к совместному использованию и передаче смоделированной сложности внутри вашей группы разработки (или между группами) посредством публикации модели.

Например, вы могли бы захотеть смоделировать систему с поведением платежной системы. Вы можете визуально смоделировать эту систему при помощи RSM. Как только моделирование будет закончено, вы, вероятно, захотите обменяться информацией о модели с другими. Используя публикацию модели, вы можете опубликовать модель в формате HTML; кроме того, вы можете создать и сгенерировать ваши собственные отчеты из созданных моделей.

На рисунке 1 изображена копия экрана RSM с открытым проектом UML Modeling.

Рисунок 1: Проект UML в RSM

Для опубликования модели на рисунке 1 просто нажмите Modeling > Publish > Web. Если вы хотите сгенерировать отчет, нажмите Modeling > Publish > Report. На рисунке 2 показано, как выглядит опубликованная модель, а на рисунке 3 показан пример отчета.

Рисунок 2: Общий вид модели

Рисунок 3: Пример отчета

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

"Поваренная книга" быстрого старта

В этом разделе приводятся несколько простых прецедентов (use case), которые вы можете добавить в XSL. Прежде всего вы рассмотрите процесс создания шаблонов отчетов, а также узнаете, как внедрить шрифт в PDF-отчет. Затем вы изучите, как настраивать опубликованную стартовую страницу (например, добавление логотипа компании). И, наконец, вы увидите, как настраивается XSL обработчика UML-элементов для отображения пользовательской документации.

Примечание: XSL можно редактировать, используя ваш любимый текстовый редактор.

Создание пользовательского PDF-отчета

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

Ключевым объектом для поиска является каталог с подключаемыми модулями; в зависимости от установки программного обеспечения этот каталог может быть в различных местах по отношению к INSTALLDIR:

[INSTALLDIR]/rsm/eclipse/plugins/com.ibm.xtools.publish.uml2_6.0.0

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

../com.ibm.xtools.publish.uml2_6.0.0/resources/reports

Прежде всего необходимо выполнить следующие действия:

  1. Добавить записи в файл reports.manifest для регистрации вашего нового отчета с RSM
  2. Создать файл report.xsl и вывести XSL-преобразование

Файл reports.manifest содержит информацию, предоставленную интерфейсом пользователя (UI) для заполнения списка отчетов, которые вы можете сгенерировать. Внутри файл reports.manifest имеет следующую структуру:

< reports > 
   < reportManifest > 
      
   < /reportManifest > 
   < reportManifest > 
       
   < /reportManifest > 
   у………
< /reports > 

Чтобы добавить отчет, вставьте запись < reportManifest > в этот файл. Для этого скопируйте существующую запись в манифесте отчета и измените значения соответственно вашим требованиям. Например:

< reportManifest
      name="My UML Metric Report"
      description="My Metric report to test adding my own report "
      author="Me"
      XSLFile="resources/reports/MyReport.xsl"
      outFileExt="pdf"
      USING_ICONS="false"
      EXTRACTING_DIAGRAMS="false"
      DIAGRAM_FORMAT="JPG"
      DETAIL_LEVEL="FULL" > 
   < /reportManifest > 

Ключевыми измененными полями были: name, description, author и XSLFile. Также обратите внимание на запись outFileExt, указывающую тип генерируемого вами выходного документа. В этом примере отчет будет сгенерирован как PDF-документ.

Каждое поле в reportManifest описано в таблице 1. Необязательные поля отмечены.

Таблица 1: Поля манифеста отчета

name Имя отчета, показанное в UI.
description Описание отчета, показанное в UI.
author Автор отчета.
XSLFile Где может быть найден XSL-шаблон.
outFileExt Расширение создаваемого вами документа.
oclSelfType UML-тип данных для выбора. Это необязательное поле, но если оно используется, то необходимо поле oclQuery. Примерами UML-типов являются Class или Package.
oclQuery Выражение Object Constraint Language (OCL), используемое для выбора данных из элементов типа oclSelfType. Это необязательное поле, но если оно используется, необходимо также поле oclSelfType. (См. примеры, приведенные ниже).
USING_ICONS Атрибут типа boolean, указывающий, включаются ли в диаграмму пиктограммы.
EXTRACTING_DIAGRAMS Атрибуты типа boolean, указывающие, должны ли создаваться диаграммы. Если false, диаграмма выведется только в текстовом режиме.
DIAGRAM_FORMAT Используемый формат для файлов диаграммы, созданных при значении EXTRACTING_DIAGRAMS равном true. Корректными значениями являются GIF, BMP, JPG или JPEG.
DETAIL_LEVEL Уровень детализации. Корректными значениями являются FULL для включения всего, или MIMINUM для включения только документацией.

Ниже приведен пример OCL-запроса, использующего необязательные OCL-записи манифеста отчета.

<reportManifest
  name="Package Report"
  description="Reports on packages"
  author="John Doe"
  xsltFile="resources/PackageReports.xsl"
  oclSelfType="Package"
  oclQuery="self.oclIsKindOf(Package) and not(self.oclIsKindOf(Model))"
  outFileExt="pdf"
  USING_ICONS="true"
  EXTRACTING_DIAGRAMS="true"
  DIAGRAM_FORMAT="GIF"
  DETAIL_LEVEL="FULL">
/reportManifest>

Затем для создания вашего отчета возьмите существующий пример отчета, скопируйте его и переименуйте его MyReport.xsl для соответствия информации, добавленной в файл reports.manifest.

Теперь откройте файл в текстовом редакторе и найдите следующее:

< xsl:text > Sample UML Metric Report for #topLevelName< /xsl:text >

Измените эту строку на следующую:

< xsl:text > My First Metric Report for #topLevelName< /xsl:text >

Далее сохраните файл и вызовите UI для отчетов. Вы должны увидеть ваши отчеты в списке, как показано на рисунке 4.

Рисунок 4: Список отчетов

Выберите соответствующий отчет и сгенерируйте его. Проверьте, что вы видите My First Metric Report в вашем HTML-браузере. Это все, что касается данного вопроса.

Работа с PDF-отчетами, использующими символические наборы знаков

Если вы хотите создать отчет, содержащий специфические знаки или расширенные символические знаки (например, набор шрифтов Chinese) вы должны будете внедрить шрифт в PDF-документ. Это требования формата PDF. К счастью, функция опубликования модели имеет надстройку, позволяющую вам использовать UI не только для генерирования вашего отчета, но и предоставлять шрифты, необходимые вам в ваших отчетах. Для встраивания специализированного шрифта в отчет вы должны выполнить следующие действия:

  1. Определите шрифт, который хотите внедрить.
  2. Сгенерируйте файл метрики из шрифта при помощи инструментальных средств Format Object Processing (FOP), составляющих Java API (application program interface) с открытыми исходными текстами.
  3. Сконфигурируйте файл userconfig.xml для описания:
    1. Где расположен файл метрики шрифта
    2. Где расположен шрифт для встраивания
  4. Отредактируйте файл с XSL-отчетом и создайте ссылки на шрифт, который хотите использовать.

Детали встраивания шрифта

В следующем разделе этой статьи рассматривается каждый упомянутый выше шаг в процессе, описывающем, как настроить ваши шрифты для работы с генератором отчетов. Обратите внимание, что эти требования PDF задокументированы в http://xml.apache.org/fop/fonts.html. Кроме того вы можете взглянуть в FAQ на http://xml.apache.org/fop/faq.html.

Определение местонахождения внедряемого шрифта

Прежде всего, найдите шрифт для встраивания. Помните, что шрифт должен соответствовать правилам для встроенных шрифтов, разъясняемых в документации по PDF-требованиям (http://xml.apache.org/fop/fonts.html). Кроме того, вы должны рассмотреть легальность используемого вами шрифта. Вы должны спросить, "Легально ли встраивание?". Хотя этот документ указывает на инструментальное средство, которое может дать вам совет по этому вопросу, за проверку легальности отвечаете вы.

Генерирование файла метрик (Minor Minor)

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

Опять же, за детальной информацией о том, как это сделать, обратитесь к технической странице Apache http://xml.apache.org/fop/fonts.html#embedding.

Этот пример показывает, как внедрить TTF (True Type Font). Для получения метрик вам необходимо иметь инструментальные средства, которые могут извлечь эту информацию. Эти средства могут быть загружены с http://xml.apache.org/fop/download.html.

Примечание: Эту работу можно было бы упростить, создав файл сценария (пакетный или командный) и выполнив команды сценария.

Команда для извлечения моего файла метрик выглядит примерно так:

java -cp .\build\fop.jar;.\lib\avalon-framework.ja
r;.\lib\xml-apis.jar;.\lib\xercesImpl.jar;.\lib\xalan.jar org.apache.fop.fonts.
pps.TTFReader -ttcname "MS Mincho" 
D:\fop-0.20.5\msmincho.ttc 
D:\fop-0.20.5\ttfcm.xml

При этом отобразится следующая информация:

TTF Reader v1.1.1

Reading D:\fop-0.20.5\msmincho.ttc...

This is a TrueType collection file with 2 fonts
Containing the following fonts:
* MS Mincho
MS PMincho
Number of glyphs in font: 17807
Postscript format 3
Creating xml font file...

Creating CID encoded metrics
Writing xml font file D:\fop-0.20.5\ttfcm.xml...

This font contains no embedding license restrictions

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

Настройка файла userconfig.xml

Файл userconfig.xml используется для указания FOP (и, в конечном счете, нашему генератору отчетов), где найти шрифты, которые вы хотите встроить. Этот файл может быть расположен в каталоге с подключаемыми модулями (com.ibm.xtools.publish.uml2_6.0.0). Это ключ для поиска, поскольку в зависимости от установленного программного обеспечения этот каталог может быть в различных (относительно INSTALLDIR) местах:

[INSTALLDIR]/rsm/eclipse/plugins/com.ibm.xtools.publish.uml2_6.0.0

Найдя подключаемые модули вы, возможно, захотите переместиться в каталог с отчетами:

../com.ibm.xtools.publish.uml2_6.0.0/resources/reports

В этом каталоге вы увидите файл userconfig.xml. Откройте его и переместитесь вниз; вы увидите секцию шрифтов примерно такого вида:

< !--
*******************************************************
  Add fonts here
*******************************************************
-- > 
< fonts >
< font >
< /font >

< font >
< /font > 
< /fonts > 

Вы должны добавлять записи в эту секцию.

Примечание: большая часть этой секции закомментирована по умолчанию, поэтому убедитесь в том, что добавленные вами данные не закомментированы. Блок комментария начинается с < !- и заканчивается >.

Запись в userconfig.xml (на Linux-машине) может выглядеть примерно так:

< font metrics-file="/myfonts/ttfcm.xml" embed-file="/myfonts/msmincho.ttc" kerning="yes" > 
    < font-triplet name="Mincho" style="normal" weight="normal"/ > 
    < font-triplet name="Mincho" style="normal" weight="bold"/ > 
    < font-triplet name="Mincho" style="italic" weight="normal"/ > 
    < font-triplet name="Mincho" style="italic" weight="bold"/ > 
   < /font >      
< /fonts > 

После завершения добавления шрифтов сохраните файл и закройте его.

Редактирование вашего отчета для использования шрифта

Последний шаг - разрешить вашему отчету использовать шрифт. Например, для разрешения вашему примеру отчета (MetricsReport.xsl) использовать шрифт Mincho, вы должны найти все соответствующие секции < fo:block или отредактировать (или добавить) тег семейства шрифтов.

Обновленный блок может выглядеть примерно так:

< fo:block font-family="Mincho" text-align="center" font-weight="bold"  >

...< /fo:block > 

Сохраните отчет.

Теперь вы готовы запустить и сгенерировать PDF-файл, содержащий ваш специальный шрифт. Для проверки того, что ваш PDF-отчет содержит шрифт, вы можете посмотреть свойства документа в программе Adobe reader.

Альтернативное генерирование отчета

Механизм генерирования отчета является гибким и спроектирован таким образом, что вы можете добавить ваши собственные отчеты (как описано выше). Эта гибкость позволяет вам записать XSL, который выводит данные в любом формате, поддерживаемом XSL-преобразованиями. Например, обычный текст, HTML, DHTML и CDF. Далее приведен пример выпуска отчета в формате HTML.

Генерирование отчета в формате HTML

Генерирование отчета в формате HTML состоит из определения XSL-шаблона отчета, регистрации его в системе подготовки отчетов и, наконец, запуска RSA/RSM и выполнения нового зарегистрированного отчета. В этом разделе я покажу вам, как создать очень простой отчет, который будет создавать html-файл, содержащий имя модели.

Скопируйте "ModelDiagramReport.xsl" и назовите его, например, "SimpleHTMLReport.xsl".

Соединение со средой подготовки отчетов

Теперь соедините этот шаблон со средой подготовки отчетов, используя файл reports.manifest. Запись в этом файле должна выглядеть примерно так:

<reportManifest
      name="Simple HTML Report"
      description="A simple HTML report"
      author="Myself"
      xsltFile="resources/reports/SimpleHTMLReport.xsl"
      outFileExt="html"
      USING_ICONS="true"
      EXTRACTING_DIAGRAMS="true"
      DIAGRAM_FORMAT="JPG"
      DETAIL_LEVEL="FULL">
   </reportManifest>

Примечание: Полное объяснение процесса регистрации отчета приводилось ранее в этой статье.

Создание базового XSL-шаблона отчета

Откройте ваш новый шаблон "SimpleHTMLReport.xsl" в редакторе и начните с удаления всех существующих секций шаблонов и обратных вызовов расширения Java FOP для PDF-генерирования. Шаблон должен выглядеть примерно следующим образом:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
    xmlns:fo="http://www.w3.org/1999/XSL/Format" 
    xmlns:xmi="http://www.omg.org/XMI"
    xmlns:uml="http://www.eclipse.org/uml2/1.0.0/UML" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:publish="http://www.ibm.com/Rational/XTools/Publish"
    xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
    extension-element-prefixes="redirect" 
    xmlns:xalan="http://xml.apache.org/xslt"
    xmlns:java="http://xml.apache.org/xalan/java" 
    exclude-result-prefixes="xmi uml xsi publish xalan java">
    
    <!-- ===  imports, and variable assigns from the GUI==== -->
    <xsl:import href="../utilities/StringUtility.xsl"/>
    <xsl:import href="GlobalVariables.xsl"/>
    <xsl:import href="ReportUtility.xsl"/>
    <xsl:output method="xml"/>
    <!-- Style sheet parameters -->
    <xsl:param name="outputDir"/>
    <!-- Location for root of output -->
    <xsl:param name="imagesDir"/>
    <!-- Location of images directory -->
    <xsl:param name="tempDir"/>
    <!-- Location of temp directory -->
    <xsl:param name="rootFile" select="'root.html'"/>
    <!-- The name of the root html file -->
    <xsl:param name="overviewFile"/>
    <!-- The name of the overview html -->
    <xsl:param name="foContextDir"/>
    
    <!-- this is where we will add our templates in a minute-->

    
</xsl:stylesheet>

Заполнение деталями

Добавьте два шаблона в комментариях:

<!-- this is where we will add our templates in a minute-->

Для этого создайте шаблон точки входа, используя символ соответствия "/" для указания XSL места, с которого будет начинаться работа. Это выглядит примерно так:

    <!-- starting Template -->
    <xsl:template match="/">
        <xsl:apply-templates select="publish:report/uml:Model/publish:report/ownedMember"/>
    </xsl:template>

Затем добавьте секцию второго шаблона, которая вызывается из основного шаблона "/" шаблона и выглядит примерно так:

<!--called template that generates a simple html page, with model name -->
    <xsl:template match="uml:Model/ownedMember">
        <xsl:variable name="reportName">
            <xsl:value-of select="$rootFile"/>
        </xsl:variable>        
        <xsl:variable name="reportFullPathName">
            <xsl:value-of select="concat($outputDir, $fileSep, $reportName)"/>
        </xsl:variable>
        <redirect:open select="$reportFullPathName"/>
        <redirect:write select="$reportFullPathName">        
        <html>
                     <xsl:variable name="title" select="@name"/>
                    <body>
                        The Name of the Model is: <b> <xsl:value-of  select="@name"/> </b>
                    </body>
        </html>
         </redirect:write>
        <redirect:close select="$reportFullPathName"/>
        
    </xsl:template>

Обратите внимание, что трюк в генерировании HTML сводится к использованию команд XSL-обработки для вывода вашего потока данных в файл. В данном случае мы используем redirect:open, redirect: write и redirect:close для выполнения работы по выводу наших результатов в файл.

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

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

Настройка публикации модели с использованием XSL

В данном разделе рассматривается прямое изменение шаблонов публикации моделей для получения вашей модели в HTML-форме. Перед тем как начать работу с XSL-шаблонами, вы должны сохранить эти файлы.

Примечание: В этой статье предполагается, что вы знакомы с XSL, XPATH и смежными технологиями.

Модификация стартовой страницы Published Models

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

...\com.ibm.xtools.publish.core_6.0.0\resources

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

< img src="overview_banner.jpg"/ > 

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

Теперь изменим шрифт, используемый для отображения строки Published Models. Вы можете сделать это, используя преимущества CSS-информации (Cascading Style Sheet). Приведенный ниже код описывает CSS-информацию об этой строке:

< p class="LargeTitle" >

Эта строка кода по существу говорит: "используйте CSS-информацию, описанную в секции LargeTitle".

Так как же включается CSS-информация? Если вы посмотрите на верхнюю часть ProjectPublish.xsl, то увидите, что этот файл трансформации будет генерировать следующий HTML.

< link href="content\WebPublish.css" rel="stylesheet" type="text/css"/ >

Предметом рассмотрения в этом коде является "content\Webpublish.css". Это место, куда записывается реальный CSS-файл при генерировании выходной информации. То есть, теперь вопрос можно задать так: "где первоначально расположена CSS-информация?" Да, CSS-файлом первоначально является другой файл, называемый Css.xsl, который размещен в следующем каталоге:

plugins/com.ibm.xtools.publish.uml2_6.0.0/resources

Просмотрев этот файл в поисках LargeTitle, мы находим:

.LargeTitle
{
   font-size:large;
   font-weight:600;
}

Измените это на что-нибудь аналогичное следующему фрагменту:

.LargeTitle
{
   color: #ff0000; 
   font-family: Helvetica; 
   font-size: 18pt; 
   text-decoration : underline; 
}

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

Изменение отчетов элемента

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

Рисунок 5: Модель с классом, имеющим один атрибут

Первым шагом является изменение выходной информации для атрибута A1. В настоящее время (если для модели генерируется HTML) генерируется выходная информация, показанная на рисунке 6.

Рисунок 6: Отображаемые по умолчанию HTML-данные для атрибута

Давайте сделаем это более привлекательным, выполнив следующие действия:

  • Измените заголовок с простого указания имени элемента на полностью указанное имя элемента (Fully Qualified Name - FQN)
  • Измените шрифт, используемый в сигнатуре
  • Выделите таблицу голубым цветом

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

...\plugins\com.ibm.xtools.publish.uml2_6.0.0\resources\uml2content\

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

Примечание: XSL называет UML-атрибут OwnedAttribute, поскольку промежуточные узлы XML-файла (Extensible Markup Language) для атрибута называются 'OwnedAttribute'. Вот фрагмент промежуточного XML, который ваш XSL будет обрабатывать для атрибута:

...
< ownedAttribute name="A1" publish:icon="593409.jpeg"
                publish:qualifiedname="ClassModel::Package1::C1::A1"
...
< /< ownedAttribute > 
...

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

< !-- Attribute Details Table -- > Теперь в < !-- Attribute Details Table -- > ищем следующие строки: < a name="attribute{@xmi:id}" > < xsl:value-of select="@name"/ > < /a > Меняем их на: < a name="attribute{@xmi:id}" > < xsl:value-of select="@publish:qualifiedname"/ > < /a >

Это приведет к отображению FQN-атрибута тэга OwnedAttribute.

Примечание: Для эффективной настройки XSL вы должны понимать, что именно будет обрабатываться. Для этого вы можете посмотреть на промежуточную форму. Перейдите к месту, где вы публикуете модель, и просмотрите содержимое каталога, в котором вы обнаружите несколько HTML и XML-файлов. XML-файлы представляют модель, которая обрабатывается XSL. Вы можете исследовать XML при помощи XML-редактора для поиска информации о том, что будет обрабатываться. В данном примере поиск промежуточных данных для атрибута показал, как записать указанное полностью имя. Эту информацию содержит атрибут тега publish:qualifiedname . Более подробную информацию об этом вы можете найти ниже в разделе "Более глубокий взгляд на детали публикации модели".

Затем пропустите еще несколько строк для того, чтобы найти секцию XSL-кода, генерирующего сигнатуру атрибута. Для изменения шрифта сигнатуры атрибута отредактируйте следующие строки:

< pre > 
< xsl:value-of select="publish:properties/publish:property[@name='Visibility']/@publish:value"/ > 
< xsl:text >  < /xsl:text > 
< xsl:apply-templates select="./publish:properties/publish:property[@name='Type']"/ > 
< xsl:value-of select="@name"/ > 
< /pre > 

В частности вас интересует HTML-тег

< pre >

Поскольку нашей целью является добавление шрифта и цвета, он кажется хорошим местом для использования CSS-информации. Опять же, вам нужно отредактировать файл Css.xsl. Этот файл находится в корневом каталоге папки ресурсов. Отредактируйте файл Css.xsl и добавьте:

.AttributeSig
{
   font-weight:500;
   font-size:larger;
   color:#0099FF;
}    

Теперь сохраните файл Css.xsl.

Затем перейдите назад к файлу NamedElementContent.xsl и отредактируйте HTML-тег < pre >, изменив его на:

< pre class="AttributeSig" > 

Это все будет помещено в нашу информацию о стиле, поэтому при генерировании HTML сигнатура будет иметь голубой цвет.

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

< !-- Output the properties table -- > 
< xsl:apply-templates select="publish:properties" > 
< xsl:with-param name="indentCount" select="1"/ > 
< xsl:with-param name="includeTitle" select="false()"/ > 
< /xsl:apply-templates > 

Примечание: Существует два комментария в файле с названием < !-- Output the properties table -- >. Один из нужных вам находится на несколько строк ниже места нашего последнего редактирования.

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

< xsl:template name="outputPropertyTable" match="publish:properties" > 

После обнаружения шаблона поищите в теле следующую информацию:

< table class="PropertiesTable" cellpadding="4" cellspacing="0" class=borderall  > 

В данном экземпляре вам необходимо добавить еще один атрибут к тегу, поэтому измените эту строку:

< table class="PropertiesTable" cellpadding="4" cellspacing="0" class=borderall BORDERCOLOR="#0099FF" > 

Обратите внимание на то, что если вы пожелаете изменить цвет текста в таблице, то можете легко отредактировать CSS-запись PropertiesTable.

Результат вашей работы показан на рисунке 7.

Рисунок 7: Настроенный вывод информации
 

Более глубокий взгляд на детали публикации модели

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

Кратко о том, как публикуется модель

Публикация модели осуществляется в несколько шагов, которые мы кратко обсудим.

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

  1. Создать вашу модель
  2. Выбрать элемент модели
  3. Выбрать Modeling > Publish в меню

С этого момента модель публикуется, а программа создает Document Object Model (DOM) и записывает ее в промежуточный XML-файл (данные). Эти промежуточные XML-данные затем потребляются XSL-шаблонами, которые в свою очередь генерируют HTML-версию модели, отображающуюся в окне браузера. На рисунке 8 проиллюстрирован этот процесс.

Рисунок 8: От модели к HTML-страницам

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

__u0xoBbwEdmVsY8gwr-g8A_root.xml

Первая последовательность символов генерируется способом, аналогичным генерированию Globally Unique Identifier (GUID), для гарантии уникальности названия файла.

Визуальные элементы схемы

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

Начнем с внешнего вида вашей модели (показанного на рисунке 9).

Рисунок 9: Структура вашей модели

На рисунке 10 изображена начальная HTML-страница, появляющаяся при публикации этой модели.

Рисунок 10: Начальная HTML-страница

После перехода по ссылке на модель (в данном случае jdk17rev) в окне отобразится детальная информация о модели. Эта детальная информация содержит набор фреймов (frameset), показанный на рисунке 11 и состоящий из трех основных фреймов:

  • Package Navigation
  • All Elements
  • Element Context

Рисунок 11: Детальная информация о модели

Фрейм Element Context состоит из одной HTML-страницы (см. рисунок 12), содержащей:

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

Рисунок 12: Element Context

Физическая схема файловой системы

XSL-файлы расположены в каталоге установки продукта; в Linux (а также в операционной системе Microsoft Windows) они могут быть обнаружены в следующем plug-in-каталоге:

[Product Install Directory]/rsm/eclipse/plugins/com.ibm.xtools.publish.uml2_6.0.0

Как уже упоминалось раньше, com.ibm.xtools.publish.uml2_6.0.0 может находиться в другом месте в зависимости от вашей установки.

После определения каталога с подключаемыми модулями перейдите в каталог resources:

../com.ibm.xtools.publish.uml2_6.0.0/resources

Здесь вы увидите структуру, похожую на изображенную на рисунке 13:

Рисунок 13: Физическая схема файловой системы

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

Обзор схемы папок и файлов

Таблица 2: Обзор схемы папок

Название папки Описание
.(текущий каталог, например /resources/) Содержит XSL-файлы верхнего уровня, предназначенные для: построения структуры html-файла, описания схемы стиля HTML-элемента, определения глобальных переменных и хранения точки входа XSL верхнего уровня.
i10n Строковые таблицы для данного языка.
Reports Шаблоны для генерирования отчетов.
Uml2content Зависящие от типа XSL элементов модели.
Utility Вспомогательный файл для обычных XSL-преобразований.

Таблица 3: Детальная информация о файлах папки Resources

Папка Resources  Папка верхнего уровня, содержащая остальные папки.
WebPublish.xsl Точка входа, в которой XSL применяется к модели. Она включает большинство других файлов (через XSL-команды import или include); рассматривайте шаблон '/' как начальную точку для преобразования.
Css.xsl Содержит информацию о таблице стилей, используемую сгенерированными XSL HTML-элементами.
FileNameGeneration.xsl Используется для генерирования зависящих от пути имен файлов, для того чтобы элементы HTML-ссылок знали, где найти физический файл для загрузки.
GenerateAllElementsList.xsl Создает левый нижний фрейм набора фреймов и представляет собой список элементов модели.
GenerateFrameSet.xsl html-файл верхнего уровня, формирующий набор фреймов HTML.
GeneratePackageElementsList.xsl Отвечает за генерирование информации об элементах, найденных внутри пакета.
GeneratePackageList.xsl Генерирует HTML-файл списка пакетов для верхнего левого окна навигации и страницу обзора содержимого для модели или пакета верхнего уровня.
GlobalVariables.xsl Содержит глобальные переменные, используемые большинством XSL-шаблонов.
NavigationBar.xsl Содержит шаблоны, формирующие верхний фрейм, который содержит навигационную информацию, основанную на контексте выбранного элемента.

Таблица 4: Детальная информация о файлах папки i10n

Папка i10n  Каталог i10n содержит зависящие от языка строковые таблицы, используемые при генерировании HTML.
Localize.xsl Содержит шаблоны, способные извлекать локализованные строки из файла messages.xml.
messages.xml Файл с локализованными строками

Таблица 5: Детальная информация о файлах папки Reports

Папка Reports  Эта папка содержит реализации конкретных отчетов и представляет два примера отчетов MetricsReport.xsl и ModelDiagramReport.xsl.
MetricsReport.xsl Пример отчета Metrics.
ModelDiagramReport.xsl Пример отчета Diagram.
ReportUtility.xsl Вспомогательные процедуры отчетов.
Userconfig.xml Используется при встраивании пользовательских шрифтов в PDF-документ (см. раздел "Детали встраивания шрифта" для получения дополнительной информации).
Reports.manifest Место, где вы регистрируете новый пользовательский отчет.

Таблица 6: Детальная информация о файлах папки uml2content

Папка uml2content  Эта папка содержит набор файлов XSL-шаблонов, используемых при обработке элементов UML Model различного типа. Соглашение о наименовании неточно следует именам UML-элементов. Наиболее стоящие упоминания файлы в этом разделе перечислены ниже.
NamedElementContent.xsl Вызывается большинством шаблонов для фактического выполнения работы по генерированию детальной информации об элементе. (Это похоже на шаблон базового класса, большинство шаблонов в конечном итоге вызывают его.) Это самый большой и сложный шаблон.
NestedClassifierContent.xsl Работает непосредственно с вложенными классификаторами.
OwnedMemberContext.xsl Промежуточная форма содержит нотацию Owned-членов. Этот файл вызывается, когда эти члены обрабатываются.
DiagramContent.xsl Генерирует содержимое диаграммы

Таблица 7: Детальная информация о файлах папки Utility

Папка Utility  Содержит несколько вспомогательных файлов, который включают хорошо известные и часто используемые шаблоны.
HTMLUtility.xsl Содержит процедуры для форматирования и генерирования HTML-элементов, таких как таблицы, ссылки и анкеры (anchor).
StringUtility.xsl Содержит процедуры для манипулирования строками (например, подстановка строк).
UMLUtility.xsl Содержит процедуры для манипулирования промежуточными XML модели, так что вы можете обращаться к различной информации об UML-элементе, такой как параметры метода, возвращаемые значения и свойства элемента.

Отладка XSL публикации модели, советы и ресурсы

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

Для большинства небольших изменений вам, вероятно, достаточно будет использовать для редактирования XSL обычный текстовый редактор. Но для более объемной работы вы, возможно захотите использовать XSL-отладчик.

Для отладки XSL вы можете применить один из следующих подходов:

  • Добавить операторы вывода в ваш XSL (XSL-сообщение, или аналогичную встроенную XSL-процедуру)
  • Использовать редактор/отладчик

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

Редакторы / отладчики
http://www.oxygenxml.com
http://www.xmlspy.com
http://xmlbuddy.com

Примечание: мы оставляем решение о целесообразности использования любого из них за вами.

Для отладки XSL вы должны иметь несколько вещей:

  • Промежуточный XML, который был сгенерирован при публикации модели
  • Файлы XSL-преобразования
  • Отладчик

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

__u0xoBbwEdmVsY8gwr-g8A_root.xml

XSL мы рассмотрели ранее и вы, конечно, знаете, как использовать отладчик.

Благодарности

Хочется упомянуть следующих людей за их комментарии и вклад в создание этой статьи: Гэри Кларк (Gary Clarke), Сатиш Доши (Satish Doshi), Борис Дубауски (Boris Dubauski), Раджив Сикка (Rajeev Sikka) и Хип Тью (Hiep Tieu).

 


Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=2114