.. _app-schema.secondary-namespaces:
Secondary Namespaces
====================
What is a secondary namespace?
``````````````````````````````
A secondary namespace is one that is referenced indirectly by the main schema, that is, one schema imports another one as shown below::
a.xsd imports b.xsd
b.xsd imports c.xsd
(using a, b and c as the respective namespace prefixes for a.xsd, b.xsd and c.xsd)::
a.xsd declares b:prefix
b.xsd declares c:prefix
The GeoTools encoder does not honour these namespaces and writes out::
"a:" , "b:" but NOT "c:"
The result is c's element being encoded as::
When to configure for secondary namespaces
``````````````````````````````````````````
If your application spans several namespaces which may be very common in application schemas.
A sure sign that calls for secondary namespace configuration is when prefixes for namespaces are printed out as the literal string "null" or error messages like::
java.io.IOException: The prefix "null" for element "null:something" is not bound.
.. note::
When using secondary namespaces, requests involving complex featuretypes
must be made to the **global OWS service** only, not to :ref:`virtual_services`.
This is because virtual services are restricted to a single namespace,
and thus are not able to access secondary namespaces.
In order to allow GeoServer App-Schema to support secondary namespaces, please follow the steps outlined below:
Using the sampling namespace as an example.
Step 1:Create the Secondary Namespace folder
````````````````````````````````````````````
Create a folder to represent the secondary namespace in the data/workspaces directory,
in our example that will be the "sa" folder.
Step 2:Create files
````````````````````
Create two files below in the "sa" folder:
#. namespace.xml
#. workspace.xml
Step 3:Edit content of files
````````````````````````````
Contents of these files are as follows:
namespace.xml(uri is a valid uri for the secondary namespace, in this case the sampling namespace uri)::
sa_workspace
sa
http://www.opengis.net/sampling/1.0
workspace.xml::
sa_workspace
sa
That's it.
Your workspace is now configured to use a Secondary Namespace.