\chapter{Object store} \label{chap-object-store} The \emph{object store} is a system-wide database containing any kind of objects. Each object is a \emph{capability}. An object in the store can optionally be associated with a certain number of \emph{attributes}. An attribute is a \emph{pair} consisting of the \emph{attribute name} and the \emph{attribute value}. The attribute name is a symbol in the \texttt{keyword} package. The attribute value can be any object. \begin{tabularx}{\linewidth}% {|>{\setlength\hsize{.2\hsize}}X|% >{\setlength\hsize{.8\hsize}}X|} \hline Keyword & Possible values\\ \hline\hline \textbf{category} & The nature of the object such as \textbf{movie}, \textbf{music}, \textbf{article}, \textbf{book}, \textbf{user manual}, \textbf{dictionary}, \textbf{course}, \textbf{lecture}, \textbf{recipe}, \textbf{program}, \textbf{bank statement}, \textbf{email}. These would be chosen from an editable set that is defined per user.\\ \hline \textbf{name} & A string that is displayed with the object, such as "A Dramatic Turn of Events", "Three seasons", "Alternative energy".\\ \hline \textbf{author} & An object identifying a person, an organization, a company, etc. \\ \hline \textbf{genre} & \textbf{progressive metal}, \textbf{science}, \textbf{algorithms}, \textbf{garbage collection}, \textbf{game}, \textbf{programming language implementation}, \textbf{operating system}. These would be chosen from an editable set that is defined per user.\\ \hline \textbf{format} & This attribute can be used to identify the file type of documents such as \textbf{PDF}, \textbf{ogg/vorbis}, \textbf{MPEG4}, \textbf{PNG}, in which case the attribute can be assigned automatically, but also to identify the source format of files in a directory containing things like articles or user manuals, for example \textbf{LaTeX}, \textbf{Texinfo}, \textbf{HTML}. These would be chosen from an editable set that is defined per user. \\ \hline \textbf{date of creation} & A date interval.\\ \hline \textbf{composer} & An object representing a person. On a compilation album there can be more than one attribute of this kind. \\ \hline \textbf{language} & An object representing a natural language such as \textbf{English}, \textbf{Vietnamese}, or a programming languages such as \textbf{Lisp}, \textbf{Python}. These would be chosen from an editable set that is defined per user. If appropriate, a document can have several of these attributes, for instance if some program uses multiple programming languages, or if a document is written using several languages, such as a dictionary. \\ \hline \textbf{duration} & An object representing a duration. \\ \hline \textbf{source control} & \textbf{GIT}, \textbf{SVN}, \textbf{CVS}, \textbf{darcs}, etc. These would be chosen from an editable set that is defined per user.\\ \hline \end{tabularx} In a typical operating system installation, there are many fairly large objects such as movies, music files, pictures, etc. The amount of data associated with such an object that would be stored in the object store is typically very small compared to the object itself. Even a fairly modest text file probably has $10^4 - 10^5$ characters in it, whereas the meta-data probably takes up no more than $10^2 - 10^3$ bytes. It is therefore likely that the entire object store will fit in main memory. Scanning the entire object store would then take at most a few second of CPU time. For better performance, one or more \emph{indexes} could be created. The objects could for instance be divided by \emph{category}. Searching the object store amounts to defining a \emph{filter}, i.e. a function that, given a set of keyword/value pairs, returns \emph{true} if and only if the corresponding object should be included in the search result. The result is returned to the user in the form of a \emph{directory object} which is a list of \emph{object entries} where each entry contains the object itself and the attributes of the object from the store, if any.