The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Пример использования XML/XSLT (xml web xslt)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: xml, web, xslt,  (найти похожие документы)
From: Илья Воронин <http://www.ivoronin.pp.ru/>; Newsgroups: Date: Mon, 20 Sep 2004 18:21:07 +0000 (UTC) Subject: Пример использования XML/XSLT Оригинал: http://www.zlug.pp.ru/book/view/78 Пример использования XML/XSLT Очень часто встает задача представления одних и тех-же данных в разных форматах, например HTML и plain text. Естественно поддержкой обоих документов вручную заниматься невозможно - это очень нудно Smiling . Поэтому для этого можно воспользоваться прекрасными инструментами - XML (как средством хранения данных) и XSLT (язык шаблонов, позволяющий генерировать документы (преимущественно в HTML) на основе XML деревьев). В связи с поиском работы мне понадобилось написать резюме. При этом требовалась поддержка трех его вариантов - короткое резюме в текстовом формате, полное резюме в текстовом формате и наконец полное резюме в HTML. Поддерживать одновременно три копии документа мне совсем не хотелось Smiling Поэтому я сделал так: для начала создал (note: описать DTD!) структуру своего резюме и записал её в виде XML файла - resume.xml, приблизительно такого вида (очень сильно сокращено): <?xml version="1.0"?> <resume name="Ilya Voronin" date-of-birth="23.08.1985" email="ivoronin@ivoronin.pp.ru"> <skills> <skill description="OS"> <item name="Linux"/> <item name="OpenBSD"/> <item name="FreeBSD"/> <item name="Microsoft Windows 2000"/> </skill> <skill description="UNIX Security"> <item name="GRSecurity"/> <item name="OpenWall"/> <item name="Systrace"/> <item name="AIDE"/> </skill> ... <skill description="Mail"> <item name="Sendmail"/> <item name="Postfix"/> <item name="Exim"/> <item name="QMail"/> <item name="Courier IMAP"/> </skill> </skills> <certificates> <certificate name="BrainBench Master Linux System Administrator"/> </certificates> <education> <item name="Student of Moscow State University of Applied Biotechnogy"/> </education> <experience> <organisation name="Amatis Media" time="April 2003 - March 2004" job ="System Administrator"> <item name="System Adminitrator (Debian GNU/Linux, Windows 2000 Server)"/> ... <item name="Users support"/> <item name="Python programming (for Zope WAS)"/> </organisation> </experience> </resume> Теперь необходимо получить эти данные в виде HTML (из которого в последствии легко сделать text/plain), для этого воспользуемся XSLT, и создадим два шаблона - один для краткого резюме (short.xsl): <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:import href="common.xsl"/> <xsl:template match="/resume"> <!-- Header (name, email etc> --> <xsl:value-of select="@name"/> <!-- End of header --> <br/> <!-- Skills --> Skills: <xsl:for-each select="skills/skill"> <xsl:value-of select="@description"/>: <xsl:for-each select="item"> <xsl:call-template name="wordlist"/> </xsl:for-each> </xsl:for-each> <!-- End of skills --> <br/> <!-- Certificates --> Certificates: <xsl:for-each select="certificates/certificate"> <xsl:call-template name="wordlist"/> </xsl:for-each> <!-- End of certifiactes --> <br/> <!-- Education --> Education: <xsl:for-each select="education/item"> <xsl:call-template name="wordlist"/> </xsl:for-each> <!-- End of education --> <br/> <!-- Experience --> Experience: <xsl:for-each select="experience/organisation"> <xsl:value-of select="@name"/> () - </xsl:for-each> <!-- End of experience --> </xsl:template> </xsl:stylesheet> другой для полного (full.xsl): <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:import href="common.xsl"/> <xsl:template match="/resume"> <!-- Header --> <xsl:value-of select="@name"/> (<xsl:value-of select="@date-of-birth"/>) <a><xsl:attribute name="href">mailto:<xsl:value-of select="@email"/></xsl:attri bute>< xsl:value-of select="@email"/></a><br/> <!-- End of header --> <br/> <!-- Skills --> Skills: <table border="0" cellpadding="0" cellspacing="0"><tbody> <xsl:for-each select="skills/skill"> <tr> <td valign="top"> <xsl:value-of select="@description"/>: </td> <td valign="top"> <xsl:for-each select="item"> <xsl:call-template name="wordlist"/> </xsl:for-each> </td> </tr> </xsl:for-each> </tbody></table> <!-- End of skills --> <br/> <!-- Certificates --> Certificates:<br/> <xsl:for-each select="certificates/certificate"> <xsl:call-template name="wordlist"/> </xsl:for-each> <!-- End of certifiactes --> <br/><br/> <!-- Education --> Education:<br/> <xsl:for-each select="education/item"> <xsl:call-template name="wordlist"/> </xsl:for-each> <!-- End of education --> <br/><br/> <!-- Experience --> Experience:<br/> <xsl:for-each select="experience/organisation"> <xsl:value-of select="@name"/> (<xsl:value-of select="@time"/>) - <xsl: value-of select="@job"/><br/> <xsl:for-each select="item"> <xsl:call-template name="wordlist"/> </xsl:for-each> </xsl:for-each> <!-- End of experience --> </xsl:template> </xsl:stylesheet> а также выделим функцию для генерации списка слов а отдельный файл - common.xsl <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template name="wordlist"> <xsl:value-of select="@name"/><xsl:if test="not(position()=last())">, < /xsl:if><xsl :if test="position()=last()">.</xsl:if> </xsl:template> </xsl:stylesheet> Для создания HTML нам потребуется любой XML/XSLT процессор (я взял Sablotron). Для полной автоматизации работы напишем Makefile: HTML=full.html short.html TEXT=full.text short.text all: $(HTML) $(TEXT) .SUFFIXES: .html .xsl .text .xsl.html: ${@:R}.xsl resume.xml common.xsl sabcmd ${@:R}.xsl resume.xml $@ .html.text: ${@:R}.html links -dump ${@:R}.html > $@ clean: rm -f $(HTML) rm -f $(TEXT) теперь просто наберем: $ make и получим четыре документа, содержащих одну и ту же информацию. Информация по теме: * XML и XSLT в примерах для начинающих (http://citforum.ru/internet/xmlxslt/xmlxslt.shtml) * Язык преобразований XSL (XSLT). Версия 1.0 (http://citforum.ru/internet/xslt/index.shtml) * Реализация XSL-преобразований при разработке сайтов с XML-наполнением страниц (http://citforum.ru/internet/xml/xsl_preobrazovaniy/) * Ну и конечно спецификации XML и XSTL на http://www.w3c.org/

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру