FitNesse.
WikiWithinWiki [add child]
A normal wiki is a collection of pages with a flat structure. All the pages are peers. FitNesse, on the other hand, is meant to manage many projects. We'd like each project to have its own wiki so that name collisions can be avoided.

For example, project one and project two probably use completely different classpaths. We'd like each project to be able to run acceptance tests using their own classpaths. So we want a different ClassPath page for each.

FitNesse supports this by allowing you to create sub wikis. Each wiki page can be the parent of an entire new wiki. For example the name of this page is .FitNesse.WikiWithinWiki. Thus, this page is the WikiWithinWiki page whose parent is the .FitNesse page. (Put your mouse on each of these links and look at the bottom of the display to see where they will be directed.)

To create a sub wiki, simply create the parent page, and then add pages below it using the ParentPage.SubPage syntax or the shortcut ^SubPage syntax. For an example, look at the .FitNesse page.

When a sub page is displayed, any unqualified links are assumed to be at the current level. If you want to access a global page, you need to precede the link with a dot. For example the link RecentChanges[?] is really a link to .FitNesse.RecentChanges[?] (which does not exist), whereas the link .RecentChanges is a link to the global page.

The !r command searches back up the hierarchy of pages looking for pages named ClassPath. It accumulates all the paths on the way up to the topmost level. Thus you can create global classpaths, project specific classpaths, and even module specific classpaths.

The PageHeader and PageFooter classes can be used to add specific headers and footers to sub wikis. For example, the headers and footers of this page are comming from .FitNesse.PageHeader and .FitNesse.PageFooter. These headers and footers can be inherited from parent pages. So if there's no PageHeader or PageFooter at the current level, we'll search upwards until we find one.

The !contents widget will create a list of all the immediate child pages of a parent page.