====== Namespaces ======

In [[DokuWiki]] you can use so called "namespaces" to categorize your pages. For names of namespaces the same restrictions hold as for [[pagename |pagenames]].

===== Creating Namespaces =====

You don't need to create namespaces separately; simply create pages with colons in the [[pagename]]. The token after the last colon will be the name of the page itself, while all other tokens are namespaces. All namespaces used in your pagename that don't exist already will be created by DokuWiki automatically.

^Examples:^^
|example\\ .example\\ .:example|refers to the page "example" in the **current** namespace.|
|:example|refers to the page "example" in the **root** namespace.|
|..example\\ ..:example\\ .:..:example|refers to the page "example" in the **parent** namespace|
|wiki:example|refers to the page "example" in the namespace "wiki". The namespace "wiki" is located **beneath the root** namespace.|
|ns1:ns2:example\\ :ns1:ns2:example|refers to the page "example" in the namespace ns2. The namespace ns2 is located beneath the namespace ns1; the namespace ns1 is located **beneath the root** namespace.|
|.ns1:ns2:example\\ .:ns1:ns2:example|refers to the page "example" in the namespace ns2. The namespace ns2 is located beneath the namespace ns1; the namespace ns1 is located **beneath the current** namespace.|
|..ns1:ns2:example\\ ..:ns1:ns2:example|refers to the page "example" in the namespace ns2. The namespace ns2 is located beneath the namespace ns1; the namespace ns1 is located **beside the current** namespace (i.e. both ns1 and the current namespace are beneath the same parent namespace, wherever according to the root namespace this parent may be located itself).|
|.ns1:ns2:|refers to the page "start" in the namespace ns2. The namespace ns2 is located beneath the namespace ns1; the namespace ns1 is located beneath the current namespace.\\ \\ (The default page can be named something other than "start" by adjusting the [[wiki:config#start]] configuration setting.)|


===== Deleting Namespaces =====

When all pages inside a namespace are removed the namespace logically doesn’t exist anymore. DokuWiki usually deletes the now empty directory as well. 

===== How to rename namespaces? =====

You can use the [[plugin:PageMove]] plugin to move each of the pages from the old namespace to the new one. Please consult the documentation to see if this fits your needs.

The manual way is more difficult:
  * Rename the folders that represent the namespace in:
    * ''data/pages''
    * ''data/media'' (if this exists)
  * Remove metadata for the namespace under ''data/meta''
  * Remove attic data for the namespace under ''data/attic'' (or move that over as well, if you want to preserve old versions)
  
For example, on a Unix host, you could:
  * ''mv /dokuwiki_base/data/pages/old_namespace /dokuwiki_base/data/pages/new_namespace''
  * ''mv /dokuwiki_base/data/media/old_namespace /dokuwiki_base/data/media/new_namespace''
  * ''rm -Rf /dokuwiki_base/data/meta/old_namespace''
  * ''rm -Rf /dokuwiki_base/data/attic/old_namespace''

Note that the ''old_namespace'' and/or ''new_namespace'' words may need to be encoded if they are on a non-latin character set (ie Greek, Russian etc).

  * Correct (by editing them) all the links to the pages under the //moved// namespace (you can discover those before moving the namespace by reviewing each page's [[wiki:backlinks]].

  * Browse each and every page under the new namespace. This will create the missing indexing information and metadata for the pages under the moved namespace.

However, you will still have lots of junk left around. For example in ''data/changes.log'', various files under cache (including the ''.idx'' files etc). If possible you could just start from a ''blank state'' as follows (again under Unix) but be warned that this will mean losing all your historical information (ie ''recent changes''):

  * ''cat /dev/null > /dokuwiki_base/data/changes.log''
  * ''rm -Rf /dokuwiki_base/data/attic/*''
  * ''rm -Rf /dokuwiki_base/data/cache/?''
  * ''rm -Rf /dokuwiki_base/data/cache/*.idx''
  * ''rm -Rf /dokuwiki_base/data/cache/purgefile''
  * Browse each and every page of your Wiki.

I understand this is convoluted (and maybe I missed/messed a couple of things you should also do). All in all this is a [[PITA]]. You may also use a couple of [[wiki:plugins]] that are available for (re)building the searchindex for the complete wiki, erasing entire cache and/or old wiki revisions thus avoiding to do this manually.



===== Namespace Default Linking =====

It is possible to link to a default file of a namespace ending the linkid
with a colon: %%[[foo:bar:]]%%. To which page the link links is dependent on the
existance of certain named files. For %%[[foo:bar:]]%% the following pages are
checked:

<code>
foo:bar:$conf['start']
foo:bar:bar
foo:bar
</code>

The pages are checked in that order and whatever page is found first will be
linked to. Autoplural linking is not done for those links

:!: **This feature is only available in 2006-09-28 RC1 version and above.**

