Тестовый проект

Давайте создадим небольшое тестовое Intranet-приложение, которое закрепит наши знания в этой области. Я предлагаю создать простенький форум, так как он позволит нам продемонстрировать наиболее характерные особенности SQLXML.

Цели и ограничения

Форум должен быть создан без единой строчки серверного кода, т.е. кода на ASP или ASP.NET. Вся серверная логика должна реализовываться с помощью хранимых процедур, которые должны быть доступны клиенту как Web-методы. Данные клиенту должны передаваться в формате XML с помощью шаблонов SQLXML. Преобразование XML в HTML будет производиться на основе XSLT-схемы, также на клиенте. Форум должен поддерживать персонализацию, т.е. возможность регистрироваться и создавать авторские сообщения. Сообщения может просматривать любой посетитель, но для создания нового сообщения необходима учетная запись. Сама страничка сообщений должна поддерживать разбивку на страницы. При этом пользователь может сам задавать размер страницы, т.е. количество сообщений на ней.

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

Дизайн

Начнем с проектирования структуры базы данных. В приложении будут участвовать объекты: пользователи, роли пользователей и сообщения. Связь между пользователями и ролями – «многие ко многим», а между сообщениями и пользователями – «многие к одному». К атрибутам пользователя относятся: имя, полное имя, дата регистрации и пароль. Имя пользователя и пароль должны быть уникальными. Кроме этого, ни пароль, ни имя не должны допускать пустых строк. К атрибутам сообщения относятся: дата создания сообщения, тело сообщения и заголовок сообщения. Диаграмма таблиц представлена на рисунке 4.


Рисунок 4. Диаграмма таблиц БД.

Для работы с таблицами необходимы хранимые процедуры, которые будут доступны как Web-методы. Их, как и таблиц, немного:

  • AddMessage – добавление сообщения. В качестве параметров передается идентификатор пользователя, заголовок и тело сообщения.
  • AddUser – регистрация пользователя. В качестве параметров передается имя пользователя, пароль и полное имя.
  • IsUserRegistered – проверка пользователя. В качестве параметров передается имя пользователя и его пароль.

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

Наше Web-приложение будет состоять из нескольких файлов:

  • Board.htm – главная страничка форума, на которой расположены сообщения. Сообщения загружаются постранично через шаблон board.xml.
  • Login.htm – страничка входа в систему. Открывается со страницы board.htm модально. Для проверки пользователя вызвает метод IsUserRegistered. Возвращает результат (имя пользователя и его идентификатор) через свойство returnValue.
  • Register.htm – страничка регистрации пользователя. Открывается со страницы login.htm модально. Для регистрации пользователя вызывает метод AddUser. Возвращает результат (имя пользователя и его идентификатор) через свойство returnValue.
  • Post.htm – страничка создания нового сообщения. Открывается модально со страницы board.htm. Для создания сообщения вызывает метод AddMessage.

Диаграмма сайта приведена на рисунке 5.


Рисунок 5. Диаграмма сайта.

Сообщения будут передаваться на страницу board.htm в формате xml, с помощью шаблона board.xml. Если вы не знакомы с шаблонами SQLXML, прочитайте соответствующий раздел первой части статьи.

Формат XML-документа, представляющего сообщения:

<board> <info.../> <message posted="дата создания сообщения" author="автор сообщения" title="заголовок" id="идентификатор сообщения"> тело сообщения </message></board>

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

Board.xml

<?xml version="1.0" encoding="windows-1251"?> <board xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:header> <sql:param name="Page">0</sql:param> <sql:param name="PageSize">10</sql:param> </sql:header> <sql:query> exec GetMessages @Page,@PageSize </sql:query> <sql:query> select 1 as tag,0 as parent, (count(*)-1)/@PageSize + 1 as 'info!1!pages' from Messages for xml explicit </sql:query></board>

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: