\section{Components} With various ULO/RDF files in place we have the aim of making the underlying data available for use with applications. For this, we should first make out the various components that might be involved in such a system. As a guide, figure~\ref{fig:components} illustrates the various components and their interplay. We will now give an overview over all involved components. Each component will later be discussed in more detail, this section serves only for the reader to get a general understanding of the developed infrastructure and its topology. \begin{figure}[]\begin{center} \includegraphics{figs/components} \caption{Components involved in the \emph{ulo-storage} system.}\label{fig:components} \end{center}\end{figure} \begin{itemize} \item ULO/RDF data is present on various locations, be it Git repositories, available on web servers via HTTP or on the local disk of a user. Regardless where this ULO/RDF data is stored, a \emph{Collecter} collects these {ULO/RDF}. In the easiest case, this involves cloning a Git repository or crawling a file system for matching files. \item With streams of ULO/RDF files at the Collecter, this information then gets passed to the \emph{Importer}. The Importer imports triplets from files into some kind of permanent storage. For use in this project, the GraphDB~\cite{graphdb} triplet store was natural fit. In practice, both Collecter and Importer end up being one piece of software, but this does not have to be the case. \item Finally, with all triplets stored in a database, an \emph{Endpoint} is where applications access the underlying knowledge base. This does not necessarily need to be any specific software, rather the programming API of the database could be understood as an endpoint of its own. However, some thought should be put into designing an Endpoint that is convenient to use. \end{itemize} Additionally, one could think of a \emph{Harvester} component. Before we assumed that the ULO/RDF triplets are already available as such. Indeed for this project this is the case as we worked on already exported triplets from the Isabelle and Coq libraries. However, this does not need to be the case. It might be desirable to automate the export from third party formats to ULO/RDF and indeed this is what a Harvester would do. It fetches mathematical knowledge from some remote source and then provides a volatile stream of ULO/RDF data to the Collecter, which then passes it to the Importer and so on. The big advantage of such an approach would be that exports from third party libraries can always be up to date and do not have to be initiated manually.