Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

XML MessageBoard

0.00/5 (No votes)
12 Jun 2001 1  
An example use of XML for storage of hierarchical messages

Introduction

As part of my quest to learn more about XML and its associated technologies, I decided to implement a XML bulletin board / message board system. It serves as useful example to others learning the technology and to those who simply would like to incorporate a message board system into their website (without having to install an expensive SQL database). This version of the XML Messageboard should work correctly under the production MSXML 3.0. If you don't already have the XML 3.0 SDK, download it from the Microsoft Web Site!

The downloadable archive contains the following files:

Default.htm

The main page leading to others

Global.asa

Contains application scope logic (loading XML doc)

Post.asp

HTML form for entry of new messages

Reply.asp

HTML form for entry of message replies

Viewmessage.asp

ASP logic for displaying a single message

Viewmessage.xsl

XSL stylesheet for displaying a singlemessage

Viewmessagelist.asp

ASP logic for displaying hierarchical list of messages

Viewmessagelist.xsl

XSL stylesheet for displaying hierarchical list of msgs

Submitmessage.asp

ASP logic for inserting a message in the message tree

Messageboard.biz

XML Schema for the messageboard.XML

To install and run this XML application on your own system you will need:

  • An ASP enabled web server such as Internet Information Server
  • Microsoft’s XML parser (MSXML 3.0 and higher)

You’ll need to configure your web server’s file write access permissions in the directory where you install the above files. This can be a little tricky in IIS so be sure read the IIS documentation to find out how.

A message board system is suited to XML implementation, because it is inherently a hierarchical system.

<messageboard>
	<group>
		<message>
			<message>
			</message>
		</message>
	</group>
<messageboard>

A message is contained within a message group. A reply to a message is neatly contained within its original message. This simple structure is used to define a message tree. The entire message tree is stored in the XML flat file messageboard.xml.

The information contained in the message tree is displayed in an appropriate format using XSL style sheets. This example does not rely on the presence of an XML/XSL capable browser. It uses XSL processing on the server-side to output HTML for legacy browser
compatibly. However the example could just as easily be modified to support XSL processing on the client.

The root node (“messageboard”) in the XML message tree is constructed in the Application_OnStart method of global.asa supposing no messages have been posted. The DOMDocument object is therefore defined at application-level scope, meaning that multiple users access the same document tree in memory.

Each message in the message board contains the following attributes:

Subject = the subject of the message
Nick = the nickname of the person who wrote the message
Id = a unique identifier associated with the stored message
PostDt =  the time and date when the message was posted

The file submitmessage.asp contains ASP the logic for inserting a message node into the message tree, in response to new post and reply to message operations. The message hierarchy is stored in the file messageboard.xml. This file is automatically created if it does not exist, so don't be surprised if its missing in the distribution.

The XSL stylesheets viewmessagelist.xsl, and viewmessage.xsl, display a list of hierarchical messages in a message group and the contents of a message, respectively.

XSL parameters are used extensively, for example, to display a particular message associated with a message Id, the viewmessage.xsl stylesheet includes the tag:

  <xsl:param name="msgid"/>

The above msgid parameter is supplied prior to XSL processing in the ASP script:

xslproc.addParameter "msgid",CStr(id) xslproc.transform

where id contains the unique id of the message to be displayed.

Message IDs are used to locate messages in the message board, using the nodeFromID() method available in the MSXML-2 XMLDOMDocument object.

By far the most interesting style sheet is viewmessagelist.xsl. The style sheet displays the message hierarchy by recursively applying message templates and using the HTML DIV tag to format the output in an indented fashion.

There are a number of useful extensions that can be added to this example, if you’re keen to beef up your XML expertise:

  • Implement a search function enabling users to find messages on the message board
  • Incorporate message count statistics for each message group
  • For each user (nick) supply information on which messages have been read / not read
  • Link up message groups from different sources (i.e. web sites)

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here