The daisyskin source is a Cocoon (Excalibur/Avalon) source. Sources in Cocoon are additional schemes you can use in URLs, for the daisyskin source this means you can use URLs of the form "daisyskin:something". Compared to normal file URLs, the daisyskin source has "fallback" behaviour: if a file doesn't exist in a skin, it will be loaded from its base skin.

URL structure

Most of the time one will use relative URLs like for example:


This will load the file images/foo.png from the directory of the current skin (how the current skin is determined is described further on). If this file isn't available in the skin, it will be loaded from this skins' base, or the base skin of that skin, and so on, until it is found (or not found).

Additionally, the URL can specify the name of the skin using the following syntax:


In its fullest form (the absolute URL, if you wish), the URL can also specify the path to the skin directory:


Determination of the current skin and the skins directory

If the name of the skin and the location of the skins directory are not specified in the URL, they are retrieved from request attributes on the Cocoon Request object.

For the name of the skin, the attribute should be named "skin" and contain a String object.

For the skins directory, the name of the attribute is "daisySkinsDir" and it should contain a java.io.File object.

Specifying the base skin

The base skin of a skin is specified by having a file called baseskin.txt in the directory of the skin. This file should simply contain one line (with no blanks before it) with the name of the base skin. The presence of the baseskin.txt file is optional, a skin isn't required to have a base skin. Recursive base skin references are of course not allowed (and are detected).

Note about caching

The content of the baseskin.txt files is cached, this cache is updated assynchronously, with a certain frequency, by default every 10 seconds. So if you change the content of a baseskin.txt file, it can take up to 10 seconds before the change will be noticed. The file-changed-checks are performed by a component called the ActiveMonitor, see the cocoon.xconf to change its execution interval.

Other then this, nothing is cached so file additions or removals are detected immediately.