\chapter*{Introduction}\label{chap:intro}
\addcontentsline{toc}{chapter}{Introduction}

Education is a crucial aspect of this century characterized by rapid development, with major changes in every field of study. Web tools are not an exception and are created every moment to catch up with the trend. New services rise with a focus on the simplification of the teaching process. Web applications are in such growth because of their easy accessibility, with almost instantaneous availability and mostly they do not require the user to own the most recent hardware. In this thesis, I also strive to create a web application server that will be used as the main backbone for the new student system.

My work will be based on the existing diploma thesis of Milana Cifru, Semantic Data Model for a Course Management System \cite{MatfyzCoursesBackend}. 

I will work with the code of this existing thesis and use it to expand the functionality of the back-end part of the application. The current back end can handle requests from the client, fulfill them and send back the response. The application can handle simple requests, while complex ones are also supported. Custom routes and HTTP methods are also used in the system to give the front-end developers more possibilities. The application server communicates with the database server and supports the insertion, update, and deletion of the information. There is no common interface made for front-end developers when sending requests. Each developer invented his way of how the requests are created, thus making the debugging process in case of issues harder and the code more is complex.  The access management system is also present in the application, thus its usage is quite limited and must be improved to increase the security measure.

The database server will not be changed and I will use an RDF database server called Virtuoso. Virtuoso is flexible and connected - we can easily find out concrete attributes, e.g. User, or find out all User's first names with ease.

The main priority is to be able to query and modify data over the RDF database. For this case, I will use a GraphQL interface. Two options could have been used for this matter. The first option (HyperGraphQL) however does not support modification and extraction of schema therefore we went with a second option called UltraGraphQL.

The UltraGraphQL has to run over our RDF triple store database (Virtuoso server). It will provide an easy way to access the data in the database. However, for UltraGraphQL to be able to fetch data, we need a complete schema. Normally UltraGraphQL doesn't see the schema so it must be provided to it and thus an export script (which we call Create Script) must be created. The schema was never fully described in RDF data, but in the backend, it is written in JavaScript form as a JavaScript object. The schema will be extracted from the backend code and after that served to UltraGraphQLEndpoint. Furthermore, Create Script provides us with an easy way how to create additional instances (for example for testing) which can be even automatized.