\documentclass{report}

\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{color}
\usepackage{enumerate}
\usepackage{float}
\usepackage{graphicx}
\usepackage{multirow}
\usepackage{slashbox, pict2e}
\usepackage[super,square,comma,sort&compress]{natbib}
\usepackage{wrapfig}

\makeatletter
\renewcommand{\thesection}{%
  \ifnum\c@chapter<1 \@arabic\c@section
  \else \thechapter.\@arabic\c@section
  \fi
}
\makeatother

\makeatletter
\renewenvironment{thebibliography}[1]
     {\section*{\bibname}% <-- this line was changed from \chapter* to \section*
      \@mkboth{\MakeUppercase\bibname}{\MakeUppercase\bibname}%
      \list{\@biblabel{\@arabic\c@enumiv}}%
           {\settowidth\labelwidth{\@biblabel{#1}}%
            \leftmargin\labelwidth
            \advance\leftmargin\labelsep
            \@openbib@code
            \usecounter{enumiv}%
            \let\p@enumiv\@empty
            \renewcommand\theenumiv{\@arabic\c@enumiv}}%
      \sloppy
      \clubpenalty4000
      \@clubpenalty \clubpenalty
      \widowpenalty4000%
      \sfcode`\.\@m}
     {\def\@noitemerr
       {\@latex@warning{Empty `thebibliography' environment}}%
      \endlist}
\makeatother

\renewcommand\bibname{References}

\begin{document}

\pagestyle{empty}
\pagenumbering{gobble}

\begin{titlepage}
\begin{center}
{\LARGE Leveraging eXist-db for Efficient\\[0.1in]TEI Document Management}\\[0.75in]

\begin{minipage}{0.4\textwidth}
\begin{center} \large
Kyle Morgan\\
knmorgan@vt.edu
\end{center}
\end{minipage}
\begin{minipage}{0.4\textwidth}
\begin{center} \large
Kyle Schutt
kschutt@vt.edu
\end{center}
\end{minipage}\\[1.5in]

Final project report for CS 5604, Fall 2012 (Project Byron)\\[1.5in]

In collaboration with Professor David Radcliffe,\\
Purdom Lindblad, and Keith Battleson

\vfill
Department of Computer Science\\
Virginia Tech\\
11 December 2012
\end{center}
\end{titlepage}

\tableofcontents

\begin{abstract}
Professor David Radcliffe has created Lord Byron and his Times (LBT), a large
digital archive of works surrounding Lord Byron and his contemporaries. The
original website was unusable slow due to the expensive XSLT transformations
and XPath queries being applied to TEI documents.  By removing the reliance
on XSL and using eXist-db and XQuery, while relying on ubiquitous and
well-documented CSS for client-side styling, we have been able to increase
performance dramatically without sacrificing features or functionality.
In this paper, we go over an overview of the project, including challenges
and potential solutions, and performance metrics of the original system in
section 1.  Section 2 contains a user's manual detailing difference between
the old and proposed systems.  Section 3 contains a developer's manual, which
contains overviews of various technologies that were being used in the system
designed by Professor Radcliffe.  The fourth section describes technologies
relevant to the proposed system.  Finally, documentation and installation
instructions are given in the fifth section.  The rest of the paper contains
a VTechWorks inventory, contacts for everyone involved with the LBT project,
and references.
\end{abstract}

\pagestyle{plain}
\pagenumbering{arabic}

\section{Project Details}
This section outlines the details of the project including a brief description
of the project's contract between the stakeholder and the developers. This
section aims to provide high-level managerial information on the project's
scope, challenges, solutions, and future deliverables.

\subsection{Overview}
The project proposed by Professor David Radcliffe was to create a new
information server for the current Lord Byron and His Times (LBT)~\cite{byron} system,
with a focus on an architectural design that can accommodate an increasing
number of TEI-XML~\cite{tei} documents in the repository. The new system must be capable
of indexing TEI-XML documents for quick and effective retrieval of
interconnected documents and persons. The system must be scalable and flexible
to accommodate new indexes or documents, and updates to existing documents.

The main goals of the project are broken down into two categories: performance
metrics and development. In order to determine a proper architecture
recommendation, a performance analysis of the former system was necessary to
identify any weaknesses. The second goal was development, specifically the
development of a new XML-based database system with indexing, full-text
searching modules, and proper templating in the browser. Later in this
document, each goal will be discussed in more detail.

The overall architectural design envisioned by Radcliffe was one focused on
increased performance, scalability, and flexibility. By focusing on the goals
mentioned above, this project addresses each of these concerns in turn to
provide an enhanced experience for Radcliffe's clients. The remainder of this
document aims to detail these goals, the methods used, and future deliverables
for the project.

\subsection{Management}
The management team involves three types of personnel: stakeholders, software
engineers, and collaborators. The primary and solitary stakeholder of the
project is Professor David Radcliffe, curator of LBT under the Center for
Applied Technologies in the Humanities (CATH)~\cite{cath} at the Virginia Polytechnic
Institute and State University (VT). The software engineers are Kyle Morgan
and Kyle Schutt, both members of Dr. Edward Fox's CS5604: Information Storage
and Retrieval class in the Fall of 2012. Dr. Fox, Purdom Lindblad, and Keith
Battleson are the main collaborators who provided guidance in the areas of
information design, architectural design, and encouragement.

We would like to thank all of those involved for their support throughout this
project.

\subsection{Challenges}
The two main challenges of our project was both understanding and quantifying
the relationships between the current indexes and their corresponding documents,
and properly indexing existing documents such that the efficiency of Lucene and
eXist-db~\cite{exist} is maximized. Some of the current indexes are redundant and bloated
with unnecessary text; these indexes needed to be identified and minimized
before being re-indexed into eXist. This re-indexing and reclassification of
existing indexes also required changes in the underlying document retrieval
system that uses XQuery~\cite{xquery} instead of XPath. 

\subsection{Solutions}
In order to address these challenges, we focused on maintaining a working
knowledge of the current indexes and focused on modifying these indexes prior
to implementing the retrieval system. This reduced the maintenance and
development costs associated with refactoring existing code. Indexing in
Lucene and eXist is fairly consistent for the majority of time, but it is
possible to cause a massive increase in the index size when the definition is
incorrect. The failure to index properly caused a large amount of downstream
performance degradation when fetching documents. Therefore, the index
definition currently used has been tuned over several iterations to the point
where we feel that it is quite stable.

\subsection{Performance Metrics}
Prior to analysis, there was much speculation over which parts of the system
were causing performance degradation, such as, the TEI-XML documents, XML
indexes, or the XSLT Processor. After performing analyses and profiling on a
subset of large TEI-XML documents and XSL documents, it was determined that the
major bottleneck for processing time was within the XSL documents and,
therefore, the XSLT Processor. Additionally, XSLT processing is a synchronous,
blocking function that causes the browser to wait until it is complete. This
function provides little information to the user about its current action or
when it will be completed. This gives the impression to the user that the
website itself is slow, and may be slow to the point that it is unusable (even
if it is working properly). In Figure~\ref{profiling}, we can see an example of
a long-running function of fetching data from a single document. In this case,
we are fetching data from a very large XML document in a very large XSL
document which has already been tuned. In the modern era of high-speed Internet
connections, a response of more than ten seconds from a web-server is
unacceptable. With this in mind, we aimed to tackle this problem on two fronts:
minimize the time it takes to display some content on the web-page, and minimize
the time it takes to load all the data asynchronously.

\begin{figure}[h]
\begin{center}
\includegraphics[width=0.95\textwidth]{performance.png}
\end{center}
\caption{Profiling example of an XSL document using oXygen~\cite{oxygen}}
\label{profiling}
\end{figure}

\subsection{Development}
With the results of the performance metrics in mind, we were able to focus on
specific areas that required tuning. Re-indexing and substituting a flat-file
system of an XML database system was not going to solve all the issues in
performance. While an XML database system provides certain improvements in
terms of caching and in-memory fetching for common documents, it does not
address the problem of transferring large amount of data to a client over the
web. Therefore, we implemented an asynchronous batch-loading system that stores
data within an in-memory session variable on the server. Additionally, the
client-side template system fetches the data asynchronously from the server. As
the client receives data, it is automatically displayed on the client's browser
such that they can begin exploring the site without having to wait for the
entire page to load. While they are browsing, the system will continue to load
new data that it has fetched.

\subsection{Future Deliverables}
This section aims to detail future deliverables for the LBT project with respect
to migration, maintenance, and future development. The major deliverables are
listed below, and further discussion of each deliverable is available in
Developer's Manual.

\begin{enumerate}
\item Monograph migration -- migrate the display of documents to the new system.
\item Styling simplification -- eliminated hardcoded styles in the TEI-XML
documents by using the defined CSS~\cite{css} classes.
\item Index consolidation -- eliminate redundant and unused index by creating
a single index per category; i.e., a person and document index.
\end{enumerate}

\section{User's Manual}
This user's manual aims to provide an overview of the current LBT website.

\subsection{Overview}
The former LBT system is fairly straight-forward website with a navigation bar
on the left-side that is context sensitive, and a content pane that provides
details of the currently selected navigation item. The current LBT system aims
to mimic the look-and-feel of the former to provide a consistent and
unnoticeable transition for users. There are minor changes in the display,
especially for batch-loading large documents.

\subsection{Screenshots}
\begin{figure}[H]
\begin{center}
\includegraphics[width=0.45\textwidth]{before.png}
\includegraphics[width=0.4\textwidth]{after.png}
\end{center}
\caption{Before and after, respectively, of the Project Byron website. Note the similarity in styling.}
\label{profiling}
\end{figure}
\begin{figure}[H]
\begin{center}
\includegraphics[width=0.95\textwidth]{batchloading.png}
\end{center}
\caption{Batch loading the Correspondence to and from Sir Walter Scott.}
\label{profiling}
\end{figure}
\begin{figure}[H]
\begin{center}
\includegraphics[width=0.95\textwidth]{search.png}
\end{center}
\caption{Using Lucene to search and score documents for the term ``Byron'' in all indexed documents.}
\label{profiling}
\end{figure}

\clearpage
\section{Developer's Manual}

\subsection{LBT Overview}
Professor Radcliffe has been maintaining Lord Byron and his Times (LBT) in
conjunction with the Center for Applied Technology in the Humanities (CATH)
for many years.  The LBT website contains a large digital archive of various
works predominantly written during the 18th and 19th centuries.  The website
is a great tool for illustrating connections between people.  When viewing
a letter of correspondence between two people, LBT generates footnotes for
references to other people or works from within the document.  A user may
click on a person's name, for instance, to view a footnote containing more
information about that person.  One may search for references to a certain
person in other documents, or find references to works authored by that
person.

The LBT website as it originally existed was slow for ``popular'' people.
That is, people with a large number of references or who have authored a
large number of works. Finding references to Sir Walter Scott, for instance,
takes roughly 15 seconds on the original LBT site. This is simply too slow,
especially when considering scalability.

\subsection{TEI}
The Text Encoding Initiative (TEI) is a standard for maintaining digital
archives of text~\cite{tei}.  TEI is largely used in the humanities for
maintenance of digital archives, and is used extensively throughout the LBT
project.  TEI is an XML format containing several hundred tags that can
be used for marking up text with varying levels of granularity.  It should
be noted that TEI \emph{is not} a presentational markup language.  That is,
it is not sufficient markup for presentation in, say, a web browser.  Some
computation is required to translate a TEI XML format into XHTML which will
be displayed within a browser.  An example of TEI markup used by Professor
Radcliffe is below.

\begin{verbatim}
Moreover, his reasoning as to
<persName>Mr. Moore's</persName>
conduct with regard to
<persName>Lord Byron's</persName>
<name type="title" key="LdByron.Memoir">Memoirs</name>
, seems to us to be at once vague and inapplicable.
\end{verbatim}

In the archives maintained by Professor Radcliffe, much of the TEI markup
is references to a person's name as well as references to written works and
correspondence.  In the above example, you may notice that Lord Byron's name
is placed in a TEI tag, as well as a tag for work a work entitled
\emph{Memoir}.  When the TEI is processed, the first two \verb|persName| tags
will not be processed into some sort of reference as they contain no key.
However, the \verb|name| tag will be converted into a footnote as it contains
a key referencing that particular document.  In the existing system,
XPath~\cite{xpath} is used to generate these footnotes.  In the proposed
system, XQuery will be used instead.  Ultimately, the TEI will be processed
and displayed in a web browser in a pleasing format, which will be seen in the
next section.

\subsection{XSL and XSLT}

Technically, XSL is a language for expressing stylesheets that consists of XPath
and XSLT as subcomponents~\cite{xsl,xslt,xpath}.  XPath is a query language used
to access certain parts of XML documents, and is used extensively throughout the
LBT project to generate references between works and people. XSLT (or XSL
Transformations) is a language used to transform XML documents into other XML
documents.  XSLT is used to transform TEI documents (which are XML documents as
discussed previously) into XHTML documents to be displayed in a web browser.
Figure~\ref{markup} is an example of an XHTML document generated using TEI,
XSLT, and XPath.

\begin{figure}
\begin{center}
\includegraphics[width=0.95\textwidth]{markup.png}
\end{center}
\caption{An example of what a marked up document looks like.}
\label{markup}
\end{figure}

\subsection{Current Architecture}

In this section, we will describe the architecture designed in implemented by
Professor Radcliffe, which can be viewed in figure~\ref{prev_arch}.  In this
architecture, a web browser requests a page from an Apache web server.  A PHP
page then fetches the relevant XSL stylesheets, XPath queries, and TEI
documents, and the XSLT processor (SAXON, in this case~\cite{saxon}) then
generates an XHTML document. This document is sent back to the web browser for
viewing.

In the above pipeline, XPath is used to grab references and generate footnotes.
Professor Radcliffe had hand-built a number of XML indexes for the purpose of
looking up someone's full name, the works associated with them, their birth and
death date, etc.

\begin{figure}
\begin{center}
\includegraphics[width=0.95\textwidth]{prev_arch.pdf}
\end{center}
\caption{Existing architecture built by Professor Radcliffe.}
\label{prev_arch}
\end{figure}

As discussed previously, we found the XSLT processing to be far too slow.
Moreover, we felt that maintaining a number of hand-built indexes would be
far too cumbersome and scales poorly once more data is accumulated.  Our
goal was thus to propose a new system that removes the XSLT processor from
the pipeline and attempt to streamline it with XQuery.  We also wanted to
use XQuery, along with eXist, to reduce the reliance on multiple indexes.

\subsection{Proposed Architecture}
In this section, we discuss the proposed architecture which was implemented 
as part of the final project. As previously stated, we have removed the XSLT processor 
and moved all templating and styling to the client side. Figure~\ref{proposed_arch}
shows how styling is done primarily on the client-side with CSS. Specific CSS classes 
still need to be attributed to specific XML elements in eXist when a desired effect is 
required. The web-pages are displayed using HTML and data is fetched from the 
eXist-db using asynchronous JavaScript HTTP calls using YAHOO!'s Connection 
Manager.

On the server side, eXist-db provides several points of access through its web portal 
and WebDav endpoints. Additionally, it provides a powerful XQuery processing engine 
that allows us to obtain data through the eXist-db and Lucene indexes. Lucene indexes 
the documents using the same collection definition that we used to 
index in eXist-db. Lucene provides us with a robust search engine that allows us to 
parse and index each individual TEI document based on specific parameters. The new 
architecture allows us to perform operations asynchronously and in parallel 
to help speed up computation and retrieval of documents.


\begin{figure}[h]
\begin{center}
\includegraphics[width=0.95\textwidth]{proposed_arch.pdf}
\end{center}
\caption{Proposed architecture, minimizing reliance on XSLT and XPath.}
\label{proposed_arch}
\end{figure}

\section{Technologies}

\subsection{eXist-db with Lucene}
Our implementation of eXist-db and Lucene is available on VTechWorks (see
section below for more details). The version used in our project is eXist-db
version 1.4.2 Build 20120416 on an Amazon EC2 Enterprise Red Hat Linux machine
(Small Instance)~\cite{amazon}.

eXist-db is an XML-based database management system. The current installation
of eXist provides several different technologies straight of the box,
including Lucene, WebDav, XQuery processing, WebApp development, collection
management, and documentation. The eXist-db and Lucene indexes use
the same collection definition at \verb|/system/config/db/LBT/collection.xconf|
in the WebDav portal to eXist-db. This example configuration assumes the
eXist-db collection is called LBT.

The current system uses Jetty as the web server, but eXist-db can be configured
to work with Apache, if needed. However, eXist-db and the website must be
hosted together because of cross-domain security concerns. These can be
alleviated by leveraging domain-agnostic HTTP request libraries in Ajax or
YAHOO!~\cite{yahoo}. 

The Lucene module provided by the eXist-db installation provides all the power
of full-text searching offered by Lucene. This module replaces the legacy
searching module within eXist-db for the release used in our project. The same
type of configuration for Lucene in a standalone application can be created
within eXist-db, anything from boosting fields to custom analyzers and ranking
specific results that were queried from the database. We will see that we can
combine our Lucene queries uses XQuery to generate search results that are based
on rank, and show custom views and explanations as to why a particular document
was chosen by Lucene. 

The WebDav and WebApp modules of eXist-db allow us to easily manage documents
within a particular database. There is no need to remote into a machine and
edit documents on the server. By using the RESTful end-points offered by
eXist-db, developers and researchers can access and modify remote documents in
a local environment. Additionally, by hosting the website within eXist-db, we
can executes XQuery scripts easily while taking advantage of eXist-db's caching
structure for commonly viewed pages and queries.

The eXist-db installation can be retrieved from VTechWorks.

\subsection{YAHOO! Connection Manager and jQuery}
We have discussed a lot about batch-loading and the caching system within
eXist-db, but in order to access that system we must perform asynchronous HTTP
requests to our XQuery scripts while modifying the HTML~\cite{html} document. The YAHOO!
Connection Manager (YCM) provides us the ability to perform asynchronous
requests to any endpoint within our domain. The main reasons we chose YCM over
Ajax was because it is a smaller library, more efficient with resources, and
executed slightly faster that basic Ajax request. Additionally, YCM has greater
cross-browser support and cross-domain executions are available (although
unnecessary for this project).  YCM works within JavaScript, and we use jQuery~\cite{jquery}
to make modification to the HTML DOM object when we receive new data. By
performing these modifications on the client-side, we can offload some of the
computation and styling from the server-side. The former LBT system performed
all modifications on the server-side which tied up resources from performing
necessary server-side functions (like processing additional requests). Modern
web-browsers have more than enough processing power to modify and apply styling
and data to web pages on the fly.

Example scripts and files can be retrieved from VTechWorks. In particular, see 
``example\_byron.js" for scripting information.

\subsection{Client-side Templating (HTML/CSS)}
We have discussed both modifying the content of the HTML and styling on the
client-side, but how exactly are we going to do this? The former LBT system
defined styles in-line using the standard HTML styles attribute. However, this
method is not the best design. For example, if you reuse a specific style for
many different elements such as a navigation item, if you wish to change the
color or font-size you have to go through every single entry and change the
font-size for every styles attribute. Using CSS classes, we can eliminate this
bottleneck by defining a specific type of styles class, and then use the class
attribute to assign a style to a particular element within the HTML document.
This decreases the complexity and increases the readability of our code without
losing contextual information for a particular element.

Examples scripts and files can be retrieved from VTechWorks. In particular, see 
``example\_byron.css" for styling information.

\subsection{XQuery}
By migrating to eXist-db from flat-XML files, and discontinuing the use of XSL
stylesheets, we are required to use XQuery scripts to process and generate XML
data from eXist-db. XQuery, in and of itself, is fairly similar to XPath, which
is used within XSL. XQuery takes advantage of the power behind eXist-db by
directly accessing the index and retrieving documents as quickly as possible.
It also allows us to store variables in-memory during execution, which enables
us to perform batch-loading on large documents.

Examples scripts and files can be retrieved from VTechWorks. In particular, see 
``example\_documents.xq" for XQuery information.

\subsection{Example Migration}
This section aims to provide a real-world migration example by modifying a
section of XSL in the former LBT system for the current LBT system. This
example focuses on transforming the ``Documents by Date'' listing into the new
architecture design.

\begin{enumerate}
\item
The first step is to locate the ``index.xsl'' document and open it in your
favorite text editor.

\item
Locate the tag where we test if the input is ``AllDocs'' (approximately line
number 709).
\begin{enumerate}
\item This is where the ``index.xsl'' generates the output
\end{enumerate}

\item 
We need to separate all styling from this, so make note the two ``style''
attributes for the outermost ``div'' tags
\begin{enumerate}
\item There is also another ``style'' attribute for each of the items in the
list.
\end{enumerate}

\item We can add these two styles to our CSS definitions:
\begin{verbatim}
.document_title {
    margin-left: 60px;
    text-indent: -40px;
}

.document_list {
    font-variant: small-caps;
    font-size: 20px;
    letter-spacing: .1em;
    margin-top: 250px;
    margin-bottom: 20px
}
\end{verbatim}

\item
Next, we must fetch all the data required by the XSL stylesheet by creating an
XQuery script. This can include the title, all subtitles, bibliographic
information, and publisher information. There are predefined functions that
allow you to access certain types of data that are popular to ascertain. Please
see below for a full listing.
\begin{enumerate}
\item 
The first function is simply fetching all the data, returning a header, and a
``results'' element tag, and storing all the items in-memory on the server.
\item
The first part of the function does not require a request parameter.
\end{enumerate}

\item
Once we have the data, we can generate our header "div" with the class set to
``document\_list'' as above. This header will also contain the number of
``hits'' or pages that were generated (there are 20 items per page).

\item
Secondly, we need to handle when a request comes in for a particular page number.
\begin{enumerate}
\item 
We go out and fetch the page from memory, and generate a list of the items
stored for the page based on the details mentioned in Step 5.
\item
We apply the ``document\_title'' style class to each item and return the XML
document.
\end{enumerate}

\item
So far we have only worked on the server-side, let's take a look at the
client-side. 

\item
We need to execute the JavaScript function that will kick-off our XQuery
script.

\begin{verbatim}
function fetchDocumentsByDate() {
    loadData(`/exist/rest/db/LBT/queries/documents.xq',
             true, false);
}
\end{verbatim}

\item
The JavaScript function `loadData' will take care of iterating over each page
found and displaying in contents.

\begin{figure}[h!]
\centering
\includegraphics[width=0.95\textwidth]{batch.png}
\label{batch}
\caption{Current LBT System fetching all documents by date using batch-loading.}
\end{figure}

\item
That is pretty much all you need to know about migrating from XSL to XQuery and
JavaScript.
\end{enumerate}

\section{Installation and Documentation}
This section aims to provide an overview of installing, operating, and maintain
the eXist-db and its associated modules. Additionally, this sections aims to
provide a high-level documentation of some of the available functions for
XQuery and JavaScript.

\subsection{eXist-db Installation}
There are two methods for installing eXist-db: custom or prebuilt.

\subsubsection{Custom Install}
\begin{enumerate}
\item
Follow the QuickStart guide at http://exist-db.org/exist/quickstart.xml for
your platform.

\item
Connect to the eXist-db WebDav endpoint:\\
\verb|http://<host>/exist/webdav/db/|

\item
Create a new database folder called \verb|LBT|.

\item
Copy LBT XML Files and Queries from VTechWorks into the LBT folder.

\item
Create a folder under \verb|/system/config/db/| called \verb|LBT|.

\item
Copy the \verb|collection.xconf| file into this new folder; this sets up the
indexing scheme for eXist-db and Lucene. An example is located in VTechWorks 
under  \verb|example_collection.xconf|.

\item
Copy the web site data into the \verb|WebApp| folder of the eXist-db install
folder.

\item
Go to ``Start Jetty''.
\end{enumerate}

\subsubsection{Prebuilt Install}
\begin{enumerate}
\item
Download the LBT folder from VTechWorks.
\item
Go to ``Start Jetty''.
\end{enumerate}

\subsubsection{Start Jetty}
\begin{enumerate}
\item
Navigate to the eXist-db install location.

\item
Execute the command: \verb|export EXIST_HOME=<install location>|

\item
Execute the command: \verb|./bin/startup.sh &|

\item
Enjoy!
\end{enumerate}

\subsection{eXist-db Notes}
Occasionally the environment variable \verb|EXIST_HOME| gets reset, please be
mindful that you may need to set \verb|EXIST_HOME|.

\section{VTechWorks Inventory}
This section outlines the files and inventory loaded on the Byron VTechWorks
collection.
\begin{enumerate}
\item
\texttt{ProjByron.zip} - the new website files for Project Byron.
\item
\texttt{exist.tar} - the full install of eXist-db for Project Byron with all files.
\item
\texttt{example\_byron.css} -  CSS stylesheet for Byron items, divs, and elements.
\item
\texttt{example\_byron.js} - JavsScript for accessing XQuery documents on eXist-db and other jQuery functions.
\item
\texttt{example\_collection.xconf} - Collection Index Definition for Lucene and eXist-db indexing.
\item
\texttt{example\_documents.xq} - XQuery for fetching documents by date.
\item
\texttt{example\_index.html} - Generic HTML file for displaying information about Project Byron.
\item
\texttt{This Document} - Final report for the Project Byron group.
\end{enumerate}

\section{Contacts}
\begin{center}
\tabcolsep=0.11cm
\begin{tabular}{|l|l|l|l|}\hline
\textbf{Name} & \textbf{Email} & \textbf{Expertise} & \textbf{Role}\\\hline
David Radcliffe & drad@vt.edu & Lord Byron & Stakeholder\\\hline
Kyle Morgan & knmorgan@vt.edu & Software Engineering & Graduate Student\\\hline
Kyle Schutt & kschutt@vt.edu & Software Engineering & Graduate Student\\\hline
Purdom Lindblad & purdom6@vt.edu & Library Services & Collaborator\\\hline
Keith Battleson & keith12@vt.edu & Information Technology & Collaborator\\\hline
Edward Fox & fox@vt.edu & Information Storage/Retrieval & Collaborator\\\hline
\end{tabular}
\end{center}
\newpage
\begin{thebibliography}{99}
\bibitem{exist}
eXist-db. (2012, Nov.) eXist-db Open Source Native XML Database. [Online].
http://exist-db.org/exist/index.xml

\bibitem{lucene}
Michael McCandless, Erik Hatcher, and Otis Gospodnetic, Lucene in Action.
Safari Books Online: Manning Publications, 2010.

\bibitem{jquery}
The jQuery Foundation. (2012, Nov.) jQuery: The Write Less, Do More, JavaScript
Library. [Online]. http://jquery.com/

\bibitem{yahoo}
YAHOO! Developer Network. (2012, Nov.) YUI 2: Connection Manager. [Online].
http://developer.yahoo.com/yui/connection/

\bibitem{amazon}
Amazon. (2012, Nov.) Amazon Web Services LLC. [Online].
http://aws.amazon.com/ec2/

\bibitem{jetty}
Mort Bay Consulting. (2012, Nov.) Jetty WebServer. [Online].
http://jetty.codehaus.org/jetty/

\bibitem{oxygen}
SyncRO Soft SRL. (2012, Nov.) XSLT Editor. [Online].
http://oxygenxml.com/xml\_editor/xslt\_editor.html

\bibitem{xpath}
XML Path Language. (2012, Oct.) XPath Documentation. [Online].
http://www.w3.org/TR/xpath/

\bibitem{xquery}
The eXist Project. (2012, Oct.) XQuery Documentation. [Online].
http://exist-db.org/exist/xquery.xml

\bibitem{tei}
TEI: Text Encoding Initiative. (2012, Oct.) TEI: Text Encoding Initiative.
[Online]. http://www.tei-c.org/index.xml

\bibitem{xsl}
w3.org. (2012, Oct.) The Extensible Stylesheet Language Family (XSL). [Online].
http://www.w3.org/Style/XSL/

\bibitem{xslt}
w3.org. (2012, Oct.) XSL Transformations (XSLT). [Online].
http://www.w3.org/TR/xslt

\bibitem{saxon}
SAXON. (2012, Dec.) The XSLT and XQuery Processor. [Online].
http://saxon.sourceforge.net

\bibitem{php}
The PHP Group. (2012) PHP: Hypertext Preprocessor. [Online]. http://php.net/

\bibitem{html}
W3C. (2012) W3C HTML. [Online]. http://www.w3.org/html/

\bibitem{css}
W3C. (2012) Cascading Style Sheets. [Online]. http://www.w3.org/Style/CSS/

\bibitem{cath}
Center for Applied Technologies in the HUmanities. (2012) Welcome to CATH.
[Online]. http://wiz2.cath.vt.edu

\bibitem{byron}
David H Radcliffe. (2012) The Life and Times of Lord Byron. [Online].
http://lordbyron.cath.lib.vt.edu/
\end{thebibliography}

\end{document}
