\section{XML}
There are two kinds of XML files used for the website. The main
information will be stored in the Database XML, this file will be
supported by three other XML files. The information in the Database
XML will be increased by two methods. You can enter information
manually, or the information will be imported from other sites via
RSS-feeds. An RSS is the second kind XML file. This is a standard XML
file. The website will also offer information via an RSS feed.
In this section you can read how the XML files are build.
\subsection{Database XML}
All the information for the website is stored in four Database XML
files. One file contains the main information about all the liquor.
Two files contains grouping information of the liquor. And there is
one file which contains technical information for the incoming RSS
feeds. In this section we will discussed the four files. This will be
done by a description, (a part of) the file and a XML tree. We
started with grouping the two information files. Note: The
information in the XML files is the information, or a part of the
information, which the files contains at the moment this report is
written. Some files can be extended with information, because of the
dynamicallity of the website. \\
\subsubsection{LiquorTypes.xml} In this file we will store the different
kind of liquor, for which we have data in the database. Below a snippet of the XML-file.
\begin{verbatim}
GeneralBeerWineCocktail
\end{verbatim}
Every type has its own ID on which the items are related to. The name
of the LiquorTypes are also being used by the search engine of the
site. Below you see a the XML file about the liquor types: \\
On figure below it can be seen that the Data tree of the LiquorTypes XML-file. For
all elements in the XML there will be only one shown completed. If
there can be more elements, which are the same as their siblings,
they are shown dotted (without their descendants).
\begin {center}
\includegraphics[width=53.7mm]{LiquorType.png} \\
Data tree of LiquorType.xml
\end {center}
\subsubsection{NewsCategories.xml}
In this file we will store the different categories the items are from.
It is very similar to the LiquorTypes XML-file. Below you see the
XML-file.
\begin{verbatim}
NewsFunRecipe
\end{verbatim}
Every category had its own ID on which the items are related to. The
name of the LiquorTypes are also being used by the search engine of
the site. Below a snippet of the XML-file about the NewsCategories can be seen: \\
On figure below you'll see the Data tree of the NewsCategories XML-file.
All elements in the XML will be shown completed. If there can be more
elements, which are the same as their siblings, they are shown
dotted (without their descendants).
\begin {center}
\includegraphics[width=138.1mm]{NewsCategory.png} \\
Data tree of NewsCategories.xml
\end {center}
\subsubsection{DB.xml}
In this file we will store the main information of the website. Below
you see a snippet of the XML-file.
\begin{verbatim}
312008/05/15http://www.wijnspecialist.be/site/wijnnieuws/op
-restaurant-met-je-eigen-wijn.htm
Op restaurant met je eigen wijn?index.php?link=news&title=Op_restaurant_
met_je_eigen_wijn?
BYO (Bring your own) ontstond in de Engel
stalige landen. In Australië is het
zelfs de regel vanwege de torenhoge taksen
op wijn verkocht door restaurants. Dus
brengen de mensen hun eigen wijn mee en
betalen enkel een 'kurkrecht' om die op
restaurant te kunnen drinken. Het kurkr
echt is een soort vergoeding voor de se
rvice (sommelier, afwas) ...
...
\end{verbatim}
The site contains many news messages, these news messages are stored
in the item elements, which is a child of the items element. The
following elements are part of the item element:
\begin{itemize}
\item \underline{LiquorTypeID}: This is the ID of the LiquerType of
the news message. A news message can contain one or more
LiquerTypeID's.
\item \underline{NewsCategoryID}: This is the ID of the NewsCategory of
the news message. A news message can contain one or more
NewsCategoryID's.
\item \underline{pubDate}: This is the date when the news messages
are written. (If the incoming RSS feeds does not contain a date, then
the pubDate will be the date on which the news messages is added to
the site)
\item \underline{guid}: This is the link of the original news
messages on the original site.
\item \underline{title}: This is the title of the news messages.
\item \underline{intern}: This is the link of the news messages on the site. If this link is followed, the news messages is shown on the site.
\item \underline{description}: This is the news messages.
\end{itemize}
On figure below the Data tree of the DB XML-file can be seen. For all
elements in the XML-file there will be only one shown completed. If there
can be more elements, which are the same as their siblings, they are
showed dotted (without their descendants).
\begin {center}
\includegraphics[width=\textwidth]{DB.png} \\
Data tree of DB.xml
\end {center}
\subsubsection{rssfeeds.xml}
In this file we will store the RSS binding information for the incoming
RSS feed, so the website knows from which rss the information must be taken and how that it must be stored. Below you can see a part of the XML-file.
\begin{verbatim}
Goedkoopbier - Drankspellenhttp://www.goedkoopbier.nl/rss/drankspellen.xml22
...
\end{verbatim}
The following elements are part of the RSS Feed element:
\begin{itemize}
\item \underline{Name}: This is the name of the RSS feed. This is
used to show the RSS feeds bindings on the site.
\item \underline{Url}: This is the URL of the RSS feed. From this,
the website gathers the information.
\item \underline{LiquorTypeID}: This is the ID for the liquor type,
which will be bound to all the incoming messages from the RSS feed.
\item \underline{NewsCategoryID}: This is the ID for the News Category,
which will be bound to all the incoming messages from the RSS feed.
\end{itemize}
On the figure below you will see the Data tree of the DB XML-file. For all
elements in the XML there will be only one shown completed. If there
can be more elements, which are the same as their siblings, they are
shown dotted (without their descendants).
\begin {center}
\includegraphics[width=117.2mm]{rssfeeds.png} \\
Data tree of rssfeed.xml
\end {center}
\subsection{RSS-Feeds}
To gather information or deliver information the site uses RSS-Feeds.
This are standard kinds of XML-files. First we describe the types of
RSS feeds the website uses, then how a RSS-Feed looks like.
\\\\
The website uses two types of RSS feeds:
\subsubsection{Incomming RSS-feed}
This is the RSS-Feed from which the website takes its information.
There are several incoming RSS feeds and for each, the website does
the same procedures to add the information into the database. This is
done six times a day, by running a PHP script. The following procedures
will be done for every RSS feed:
\begin{enumerate}
\item Take an RSS feed and read the information from it.
\item Check for every item if the item is already in the
database. This is done by a title check. More information about this
can be read in chapter 4. If the item is already in the database continue
with point 4.
\item Add the item to the DB.xml and go on with the next item of RSS Feed
\item The news item is already there, so check if the LiquorTypeID and NewsCategoryID is
the same. If it is the same, go on with the next item of RSS Feed.
\item The news item is already there, but it has different LiquorTypeID's or NewsCategoryID's, so add the new LiquorTypeID or NewsCategoryID to the item and go on with the next item of RSS Feed.
\end{enumerate}
\subsubsection{Outgoing RSS-feed}
The website also has an outgoing RSS-Feed. In this feed the latest
twenty news messages from the database will be put into an RSS feed.
The latest twenty news messages are gained from the DB xml via an XPath Query.
This information is put via XML php statements into the
RSS Feed. A part of the XML php statements can be read below.
\begin{verbatim}
// create doctype
$dom = new DOMDocument("1.0");
// create root element
$root = $dom->createElement("rss");
$dom->appendChild($root);
$root->setAttribute("version", "2.0");
$dom->formatOutput = true;
// create channel element
$channel = $dom->createElement("channel");
$root->appendChild($channel);
// create title element
$title = $dom->createElement("title");
$channel->appendChild($title);
$text = $dom->createTextNode("Pottepei RSS feed");
$title->appendChild($text);
\end{verbatim}
This part of the code generates first a XML document with version
\textit{"1.0"}. Then it creates a root element, in this case called
\textit{"rss"}. The root gets also the attribute named
\textit{"version"} with the value \textit{"2.0"}. The statement
\textit{"\$dom-$>$formatOutput"} makes the output file readable.
\\After that the code creates a channel element and add it as a child
of the root element. Then a title element will be created and added to
the channel element as a child. This title element will contain the
text \textit{"Pottepei RSS feed"}. This is the way that the whole
RSS-feed will be build. Below is a part of the XML file which this
part of the code generates.
\begin{verbatim}
Pottepei RSS feed
\end{verbatim}
This code will be automatically executed every day.
\subsubsection{The construction of a RSS feed}
An RSS feed has a standard constructions. We use the RSS version 2.0.
There is much information which you can store in a RSS feed. We use
some of those. Below you can see a part of our RSS feed file:
\begin{verbatim}
Pottepei RSS feed
http://pottepei.schinagl.nl
Het laatste nieuws van Pottepei.nl2008/05/152008/05/15http://www.goedkoopbier.nl/nieuws/Heineken_Trom_PetHeineken Trom-PetHeineken komt voor aankomend EK weer met een
hoofddeksel op de proppen: de Trom-Pet.
...
\end{verbatim}
This file got the following elements:
\begin{itemize}
\item \underline{rss}: This is the standard element which says that
the XML file is an RSS feed. The attribute \underline{version} says
which RSS version the document is.
\item \underline{channel}: This a standard RSS element
\item \underline{title}: This is the title of the RSS feed
\item \underline{link}: This is the link of the website
\item \underline{description}: This will give a description of the
RSS feed.
\item \underline{language}: This will give the language of the RSS
feed.
\item \underline{pubDate}: When the RSS feed is published.
\item \underline{item}: This contains the information of one news
massage \subitem \underline{pubDate}: The date of the news item
\subitem \underline{guid}: The link where the news massage can be
found \subitem \underline{title}: The title of the news massage
\subitem \underline{description}: The news massage itself.
\end{itemize}
These are also the elements we use from the incoming RSS feeds. Note:
From the initial RSS feeds, the feed from www.cocktailz.nl, does not
have a pubDate, so we take the day on which the website imports the
news massage as pubDate.
On the figure below you will see the Data tree of the RSS-feed XML. For all
elements in the XML there will be only one shown completed. If there
can be more elements, which are the same as their siblings, they are
shown dotted (without their descendants).
\begin {center}
\includegraphics[width=\textwidth]{RSS.png} \\
Data tree of RSS.xml
\end {center}