Опубликован: 24.11.2006 | Уровень: специалист | Доступ: платный
Лекция 1:

Программирование для интернета с использованием COM

Лекция 1: 12345678910 || Лекция 2 >

Интеграция XML и XSL

Класс clsChair поддерживает обобщение логики представления. Функция GetChairState создает упорядоченную версию объекта "стул" потребителю, осуществляющему построение страницы. Как правило, веб-приложения COM используют ASP-страницу для анализа представления HTML, реализации классов и упрощения прорисовки страницы посредством связывания XML-объектов с документами XML, необходимыми для построения страницы. В ситуации COMASPXSL (или XSLT) можно создать многозвенное приложение, обобщающее типы логики и технологии, приведенные в таблице 1.1.

Таблица 1.1. Звенья и технологии в веб-приложении COM
Название звена Поддерживаемая технология
Логика представления Лист XSL или XSLT
Бизнес-логика VB COM и ASP.
Логика доступа к данным ADO
Логика данных SQL Server

Страница ASP является уникальной частью программного решения, поскольку объединяет бизнес-логику и логику представления. В программном решении, представленном выше, ASP не была чистым обобщением бизнес-звена или звена представления, поскольку содержала аспекты каждого из них. В листинге 1.14 приведен исходный код страницы-диспетчера ASP, использовавшейся с clsChair. XMLCOMChair.asp не содержит кода HTML, вся страница отображается на листе XSL. Независимо от способа отображения данных из clsChair в браузере, ASP не требует внесения изменений. ASP должна иметь сведения об интерфейсе класса clsChair, поэтому в код включена бизнес-логика. Если в класс clsChair добавляются новые функции или свойства, то нужно отредактировать код ASP. ASP легко параметризуется в соответствии с настраиваемой системой запуска классов, полностью абстрагируясь от бизнес-логики и логики представления.

<%@ Language=VBScript %>
<%
'~~~~~~~~~~~~~~~~~~~~~~~~~~~
' Drawpage
' handles XML transformation
'~~~~~~~~~~~~~~~~~~~~~~~~~~~
sub Drawpage(sXML)

CONST XSL_FILE = "formatChair.xsl"

dim oXML
dim oXMLXSL

 Set oXMLXSL = Server.CreateObject("Microsoft.XMLDOM")
 Set oXML = Server.CreateObject("Microsoft.XMLDOM")

 'load XML
 oXML.loadXML(sXML)
 
 'load the XSL
 oXMLXSL.load(Server.MapPath(XSL_FILE))
 
 'write the page
 Response.Write(oXML.transformNode(oXMLXSL))

 'destroy object
 set oXML = nothing
 set oXMLXSL = nothing
end sub


'~~~~~~~~~~~~~~~~~~~~~~~~~~~
' main
' dispatches calls
'~~~~~~~~~~~~~~~~~~~~~~~~~~~
sub Main()

dim o
dim XMLDOM

 'create the object chair
 set o = Server.CreateObject("ConfigSeat.clsChair")
 
 'check for color setting
 if len(Request("color"))>0 then
 o.color = Request("color")
 end if

 'decide what to do
 select case Request("Action")
 case "New"
 o.CreateChair
 case "Open"
 o.OpenChair Request("ID")
 end select

 'get the object state
 set XMLDOM = o.GetChairState()
 
 'write the page
 Drawpage XMLDOM.XML
 
 'destroy object
 set o = nothing
 set XMLDOM = nothing
 
end sub

'~~~~~~~~~~~~~~~~~~~~~~~~~~~
' Script entry point
'~~~~~~~~~~~~~~~~~~~~~~~~~~~
Main()

%>
Листинг 1.14. Source Code for XMLCOMChair.asp object dispatcher

После выполнения экземпляром класса clsChair своей бизнес-логики состояние clsClass преобразуется в XML и используется для построения страницы HTML. Имя листа XSLformatChair.xsl – хранится в коде ASP, но его можно получить другим способом, например, с помощью аргументов HTTP в представлениях форм или ссылках. Подпрограмма Drawpage при помощи строкового аргумента, содержащего XML, прорисовывает конечную веб-страницу. Лист XSL определяет способ построения веб-страницы и отображение значений в XML. В XSL можно расположить и другие данные, например, сценарии JavaScript, предназначенные для выполнения в браузере. В листинге 1.15 приведен код листа XSL formatChair.xsl.

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">

<xsl:comment>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
XSL Sheet primarily for the purposes of building an
HTML page to allow a user to open or create a new
chair and see the results with the presentation
logic abstracted completely
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

</xsl:comment>



<xsl:comment> Start the HTML page here </xsl:comment>
<HTML>
 <HEAD>
 <TITLE>XML COM page</TITLE>
 </HEAD>
<BODY>

<xsl:comment> 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build table for chair data
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</xsl:comment>

<xsl:for-each select="Chair">
 <P>current</P>
 <TABLE BORDER="1" CELLSPACING="0" CELLPADDING="0">
 <TR>
 <TH>ID</TH>
 <TH>Color</TH>
 </TR>
 <TR>
 <TD><xsl:value-of select="@ID"/></TD>
 <TD><xsl:value-of select="@Color"/></TD>
 </TR> 
 </TABLE>
</xsl:for-each>

<xsl:comment> 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
XSL parts are completed

Please never forget, all HTML must be well formed
also. XSL is also case sensitive.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</xsl:comment>


<P>command </P>
<xsl:comment> 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build table for commanding new chair data
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</xsl:comment>

<FORM METHOD = "POST" ACTION = "XMLCOMChair.asp" ID = "frmImage" 
NAME = "getInfo" >
 <TABLE BORDER="1" CELLSPACING="0" CELLPADDING="0">
 <TR>
 <TD>Action</TD>
 <TD>
 <input TYPE="text" NAME="Action" VALUE="Open or New">
 </input>
 </TD>
 </TR> 
 <TR>
 <TD>ID</TD>
 <TD><input TYPE="text" NAME="ID" VALUE=""></input></TD>
 </TR>
 <TR>
 <TD>color</TD>
 <TD>
 <input TYPE="text" NAME="color" VALUE="puce">
 </input>
 </TD>
 </TR>
 </TABLE>
 <input ID="subFull" NAME="subR" TYPE="submit" VALUE="Go"></input>
</FORM>


</BODY>
</HTML>

</xsl:template>
</xsl:stylesheet>
Листинг 1.15. Source code for formatChair.xsl

При XSL-программировании следует иметь в виду несколько важных моментов. Любой файл XSL должен быть правильно сформирован, т.е. соответствовать стандартам XML, принятым Консорциумом WWW (W3C). Ошибки в формировании файлов, как правило, вызываются следующими проблемами в коде XML.

  • Теги элементов не соответствуют друг другу. Убедитесь, что в коде используются соответствующие друг другу начальные и конечные теги (включая теги HTML).
  • Несоответствующее расстояние между символами. Необходимо соблюдать правильное количество пробелов между отдельными частями элементов. Лишний пробел между символами "/" и ">" становится причиной некорректного формирования XML.
  • Присутствие специальных символов. Значения элементов и атрибутов не должны содержать специальных символов. Обратитесь к инструкции "Специальные символы в коде XML" для получения более подробной информации.

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

Когда программное решение целиком отгружено на сервер, и браузер запрашивает XMLCOMChair.asp, то отображаемая страница должна иметь следующий вид (см. рис. 1.21).


Рис. 1.21.

Специальные символы в коде XML

В XML для описания данных используется обычный текст, поэтому возможны проблемы, связанные с расшифровкой данных из структуры XML. Возьмем, к примеру, имя сотрудника компании O'Brien. Что произойдет, если программа поместит список сотрудников, в который входит и O'Brien, в документ XML, предназначенный для отображения в браузере? Элемент XML будет выглядеть так: <имя сотрудника="O'Brien">. Если апостроф не будет закодирован как специальный символ, то в анализаторе XML при загрузке кода произойдет ошибка. При кодировании специальных символов соответствующим образом элемент XML примет вид: <имя сотрудника="O&apos;Brien">.

Многие символы требуют кодирования. Специальные символы представляются в виде числовых ссылок из набора символов ISO/IEC 10646. Некоторым символам присвоены специальные знаковые последовательности, вид которых соответствует обозначаемому символу.

Символ Последовательность знаков общей сущности
& &amp;
< &lt;
> &gt;
' &apos;
" &quot;

Например, числовая ссылка на символ "&" имеет вид "&#38;", можно использовать и представление "&amp;". Числовым представлением символа "=" является "&#61;". Для данного символа отсутствует знаковая последовательность. Для получения информации о других символах и эквивалентных им представлениях обратитесь к Приложению. Дополнительная информация по XML приведена на странице http://www.w3.org/TR/REC-xml, где можно ознакомиться с W3C-спецификацией для XML.

Лекция 1: 12345678910 || Лекция 2 >
Дмитрий Васюков
Дмитрий Васюков
Россия, Брянск
Maxim Kuzmin
Maxim Kuzmin
Россия