====== Repository ======

The repository object handles the source of the data, the page object handles the content of the data. Therefor something went wrong when any other object outside the repository needs to know a file name. The page object uses filehandles, but it needs the repository to open them.

The repository is the object that manages where data comes from and where it goes to when you save it. The default repository maps the pages to simple text files, but adds some logic to deal with things like case-sensitivity. The GUI only has to deal with one repository object, it is not possible to open multiple repositories. All page names are resolved within this repository. But it is possible to have "child" repositories under this root repository. This model can be thought of as a filesystem with mount-points. A child repository takes control of one namespace and all namespaces below that node.

Pages within the repository can be organized with namespaces. In the default repository these map to directories. But if a repository maps to a table in a database these namespaces would probably just be another column in this table. Repositories that do not have a hierarchical representation don't have to show a namespace list at all.

The GUI is always allowed to ask to load a page that does not exist and/or is not shown in the namespace list. In this case either a new page can be created or the request can be ignored.
