Примеры веб-сайтов со структурой JSP+XML
Автор:Eve Cole
Время обновления:2009-07-02 17:11:58
XML (расширяемый язык разметки) может выглядеть как своего рода стандарт W3C — сейчас он не имеет большого практического значения, а если он и пригодится позже, то это произойдет еще долго. Но на самом деле оно уже используется. Поэтому не ждите, пока XML будет добавлен в ваш любимый HTML-редактор, чтобы начать его использовать. Теперь он может решать различные внутренние проблемы и проблемы системы B2B.
В Sparks.com мы используем XML для стандартизации представления данных в разных системах, от объектов Java до отображения данных HTML.
В частности, мы обнаружили, что данными можно легче обмениваться и манипулировать ими, если они стандартизированы на основе очень простой структуры XML. Попутно мы обнаружили множество эффективных способов использования XML. Ниже подробно описывается наше текущее приложение.
Стандартизация. Прежде чем использовать XML, создайте формат данных XML, который отличается от информации, которую вы хотите использовать.
Создать динамический XML
Генерация HTML из базы данных не является чем-то новым, но генерация XML — новинкой. Здесь мы представляем конкретные этапы генерации.
Использование XSL в качестве языка шаблонов
XSL (расширяемый язык таблиц стилей) — хороший способ определить формат отображения данных XML, и было бы более эффективно, если бы он был написан в виде нескольких статических шаблонов.
Создать HTML
XML плюс XSL равняется HTML. Возможно, это звучит неправильно, но наши HTML-страницы, которые видят пользователи, на самом деле являются результатом комбинации XML и XSL.
1. Стандартизация
Сила XML заключается в его гибкости. Но, к сожалению, иногда он настолько гибок, что у вас остается пустая страница в размышлениях о том, как решить проблему.
В любом проекте XML первым шагом является создание стандартного формата данных. Для этого вам необходимо принять следующие решения:
&&&
Подтвердите данные:
Поскольку стандартного формата XML не существует, разработчики могут разрабатывать свои собственные форматы. Однако если ваш формат распознается только одним приложением, вы можете запустить только это приложение, чтобы использовать этот формат. Очевидно, было бы полезнее, если бы существовали другие программы, которые также могли бы читать ваш формат XML. Если формат XML изменен, возможно, потребуется изменить и использующую его систему, поэтому вам следует создать формат как можно более полным. Поскольку большинство систем игнорируют теги, которые они не распознают, самый безопасный способ изменить формат XML — добавить теги, а не изменять их.
Нажмите здесь, чтобы просмотреть примеры формата данных XML
В Sparks.com мы рассмотрели все данные о продуктах, необходимые для различных презентаций продуктов. Хотя не все страницы используют все данные, мы разработали очень полный формат данных XML, подходящий для всех данных. Например, на странице сведений о продукте отображается больше данных, чем на странице просмотра продуктов. Однако в обоих случаях мы по-прежнему используем один и тот же формат данных, поскольку шаблон XSL каждой страницы использует только те поля, которые ему необходимы.
Использовать ли DTD
В Sparks.com мы используем хорошо организованный XML, а не просто правильный XML, поскольку первый не требует DTD. DTD добавляет уровень обработки между щелчком пользователя и просмотром страницы. Мы обнаружили, что этот слой требует слишком много обработки. Конечно, по-прежнему приятно использовать DTD при общении с другими компаниями в формате XML. Потому что DTD может гарантировать правильность структуры данных при отправке и получении.
Выбор механизма синтаксического анализа Теперь можно использовать несколько механизмов синтаксического анализа. Какой из них вы выберете, почти полностью зависит от потребностей вашего приложения. Если вы решите использовать DTD, механизм синтаксического анализа должен обеспечить проверку вашего XML с помощью DTD. Вы могли бы выделить проверку в отдельный процесс, но это повлияет на производительность.
SAX и DOM — две основные модели синтаксического анализа. SAX основан на событиях, поэтому при анализе XML события отправляются в механизм. Далее события синхронизируются с выходным файлом. Механизм анализа DOM создает иерархическую древовидную структуру для динамических данных XML и таблиц стилей XSL. Путем случайного доступа к дереву DOM данные XML могут быть предоставлены так, как если бы они были определены таблицей стилей XSL. Дебаты по модели SAX в основном сосредоточены на чрезмерном сокращении памяти структуры DOM и ускорении времени анализа таблицы стилей XSL.
Однако мы обнаружили, что многие системы, использующие SAX, не используют его в полной мере. Эти системы используют его для построения структуры DOM и отправки событий через структуру DOM. При таком подходе DOM необходимо создавать из таблицы стилей перед любой обработкой XML, поэтому производительность снизится.
2. Создайте динамический XML
После того как формат XML установлен, нам нужен способ его динамического переноса из базы данных.
Генерация XML-документов относительно проста, поскольку для этого требуется только система, способная обрабатывать строки. Мы построили систему с использованием Java-сервлетов, сервера Enterprise JavaBean, JDBC и RDBMS (системы управления реляционными базами данных).
&&&&
(Дополнительную информацию о применении XSL см. в разделе XSL как язык шаблонов.)
Пример генерации XML Фактический код для создания строки документации XML на Java можно разделить на несколько методов и классов.
Код, запускающий процесс генерации XML, помещается в метод EJB. Этот экземпляр немедленно создает StringBuffer для хранения сгенерированной строки XML.
StringBuffer xml = новый StringBuffer();
xml.append(XmlUtils.beginDocument("/browse_find/browse.xsl", "browse", запрос));
xml.append(product.toXml());
xml.append(XmlUtils.endDocument("обзор");
out.print(xml.toString());
Следующие три переменные xml.append() сами по себе являются вызовами других методов.
Создание заголовка файла Первый дополнительный метод вызывает класс XmlUtils для создания заголовка файла XML. Код нашего Java-сервлета выглядит следующим образом:
public static String BeginDocument (таблица стилей String, страница String)
{
StringBuffer xml = новый StringBuffer();
xml.append("<?xml version="1.0"?> ")
.append("<?xml-таблица стилей href="")
.append(таблица стилей).append(""")
.append(" type ="text/xsl"?> ");
xml.append("<").append(page).append("> ");
вернуть xml.toString();
}
Этот код генерирует заголовок XML-файла. Тег <?xml> определяет этот файл как файл XML, поддерживающий версию 1.0. Вторая строка кода указывает на расположение правильной таблицы стилей для отображения данных. Последнее, что включено, — это тег уровня элемента (в этом примере <browse>). В конце файла необходимо закрыть только тег <browse>.
<?xml version="1.0"?> <?xml-stylesheet href="/browse_find/browse.xsl" type="text/xsl"?> <browse>
После заполнения информации о продукте и заполнения заголовка файла метод управления вызовет объект Java для генерации его XML. В этом примере вызывается объект продукта. Объект продукта использует два метода для создания своего XML-представления. Первый метод toXML() создает узел продукта путем создания тегов <product> и </product>. Затем он вызывает метод InternalXML(), который предоставляет необходимое содержимое для XML продукта. InternalXML() — это серия вызовов StringBuffer.append(). StringBuffer также преобразуется в строку и возвращается методу управления.
публичная строка toXml()
{
StringBuffer xml = новый StringBuffer("<продукт> ");
xml.append(internalXml());
xml.append("</product> ");
вернуть xml.toString();
}
публичная строка внутреннийXml()
{
StringBuffer xml = новый
Строковыйбуфер(" ")
.append(productType).append(" ");
xml.append(" ").append(idValue.trim())
.append(" ");
xml.append(" ").append(idName.trim())
.append(" ");
xml.append(" ").append(page.trim())
.append(" ");
Панг?
xml.append(" ").append(количество).append(" ");
xml.append(" ").append(поставщик).append(" ");
xml.append(" ");
xml.append(" ").append(pubDesc).append(" ");
xml.append(" ").append(venDesc).append(" ";
Панг?
вернуть xml.toString();
}
Наконец, метод XMLUtils.endDocument() вызывается после закрытия файла. Этот вызов закрывает тег XML (в данном случае) и, наконец, завершает структурированный файл XML. Весь StringBuffer из метода управления также преобразуется в строку и возвращается сервлету, который обрабатывал исходный HTTP-запрос.
3. Используйте XSL в качестве языка шаблонов.
Чтобы получить вывод в формате HTML, мы объединяем сгенерированный файл XML с шаблоном XSL, который управляет представлением данных XML. Наши шаблоны XSL состоят из тщательно организованных тегов XSL и HTML.
Начало создания шаблона Начало нашего шаблона XSL выглядит примерно так, как показано ниже. Первая строка кода является обязательной и определяет этот файл как таблицу стилей XSL. Атрибут xmlns:xsl= относится к пространству имен XML, используемому этим файлом, а атрибут version= определяет номер версии пространства имен. В конце файла закрываем тег.
Вторая строка кода, начинающаяся с <xsl:template>, определяет шаблон шаблона XSL. Атрибут Match является обязательным и указывает на тег XML <basketPage>. В нашей системе тег <basketPage> содержит тег <product>, который позволяет шаблону XSL получать доступ к информации о продукте, встроенной в тег <product>. Нам снова нужно закрыть тег <xsl:template> в конце файла.
Далее давайте взглянем на хорошо организованный HTML. Поскольку он будет обрабатываться механизмом синтаксического анализа XML, он должен соответствовать всем правилам хорошо организованного XML. По сути, это означает, что все открывающие теги должны иметь соответствующий закрывающий тег. Например, тег <P>, который обычно не закрывается, должен закрываться с помощью </P>.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
версия="1.0">
<xsl:template match="basketPage">
<html>
<голова>
<title>Корзина для покупок/Регулировка количества</title>
</голова>
<body bgcolor="
</xsl:шаблон>
</xsl:таблица стилей>
В теле шаблона имеется множество тегов XSL, используемых для обеспечения логики представления данных. Ниже описаны два часто используемых тега.
Выбирать
Тег <xsl:choose> аналогичен началу структуры if-then-else в традиционных языках программирования. В XSL тег выбора указывает, что в той части, где вводится код, назначение вызовет действие. Тег <xsl:when> с назначенными атрибутами следует за тегом выбора. Если присвоение правильное, будет использовано содержимое между открывающим и закрывающим тегами <xsl:when>. Если присвоение неверно, используется содержимое между открывающим и закрывающим тегами <xsl:otherwise>. Весь раздел заканчивается </xsl:choose>.
В этом примере тег When проверяет XML на наличие тега количества. Если тег количества содержит атрибут ошибки со значением true, в теге количества будут отображаться ячейки таблицы, перечисленные ниже. Если значение атрибута неверно, XSL в противном случае отобразит содержимое между тегами. В приведенном ниже примере, если атрибут ошибки не имеет значения true, ничего отображаться не будет.
<xsl:выбрать>
<xsl:when test="quantity[@error='true']">
<td bgcolor="src=""/></td>
<td valign="top" bgcolor="<font face="Verdana, Arial" size="1" color="<b>*Недостаточно товара на складе.</b></font>
</td>
</xsl:когда>
<xsl:иначе>
</xsl:иначе>
</xsl:выбрать>
Для каждого
Тег <xsl:for-each> можно использовать для применения одной и той же таблицы стилей к нескольким ситуациям с похожими данными XML. Для нас ряд сведений о продукте можно извлечь из базы данных и единообразно отформатировать на веб-странице. Вот пример:
<xsl:for-each select="package">
<xsl:apply-templates select="product"/>
</xsl:for-each>
Цикл for-each запускается, когда программа встречает метку. Этот цикл завершится, когда программа встретит метку. После запуска этого цикла этот шаблон будет применяться каждый раз, когда появляется метка.
4. Генерация HTML
В какой-то момент в будущем браузеры будут интегрировать механизмы анализа XML. На этом этапе вы можете отправлять файлы XML и XSL непосредственно в браузер, и браузер отображает данные XML в соответствии с правилами, перечисленными в таблице стилей. Однако до тех пор разработчикам придется создавать возможности синтаксического анализа в своих серверных системах.
В Sparks.com мы интегрировали анализатор XML в сервлет Java. Этот анализатор использует механизм XSLT (преобразование XSL) для добавления данных XML в шаблон XSL, как указано в теге XSL.
Когда наш Java-сервлет обрабатывает HTTP-запрос, он получает динамически сгенерированный XML-код, который затем передается механизму синтаксического анализа. На основе инструкций в файле XML механизм синтаксического анализа ищет соответствующую таблицу стилей XSL. Парсер создает HTML-файл из структуры DOM, а затем этот файл отправляется пользователю, который делает HTTP-запрос.
Если вы решите использовать модель SAX, синтаксический анализатор считывает источник XML и создает событие для каждого тега XML. События соответствуют данным XML, и данные в конечном итоге вставляются в таблицу стилей в соответствии с тегами XSL.