The AndroMDA namespace descriptor must comply with the following XSD Schema:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="component">
<xs:annotation>
<xs:documentation>
Defines a <em>namespace component</em> (that is a component that can be
registered with a namespace).
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="path" type="xs:string" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
Defines a path (relative to the namespace component) of where to find the
component descriptor.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="componentName" use="required">
<xs:annotation>
<xs:documentation>
The unique name of the component type.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:simpleType name="componentName">
<xs:annotation>
<xs:documentation> Stores the possible component names </xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="cartridge">
<xs:annotation>
<xs:documentation>
Represents the 'cartridge' component. Use this to register a cartridge in a namespace.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="metafacades">
<xs:annotation>
<xs:documentation>
Represents the 'metafacades' component. Use this to register a set of metafacades in a namespace.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="profile">
<xs:annotation>
<xs:documentation>
Represents the 'profile' component. Use this to register a profile in a namespace.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="repository">
<xs:annotation>
<xs:documentation>
Represents the 'repository' component. Use this to register a repository in a namespace.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="translation-library">
<xs:annotation>
<xs:documentation>
Represents the 'translation-library' component. Use this to register a translation-library in your namespace.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:element name="components">
<xs:complexType>
<xs:sequence>
<xs:element ref="component" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="uniqueComponentName">
<xs:selector xpath="component"/>
<xs:field xpath="@name"/>
</xs:unique>
</xs:element>
<xs:element name="default" type="xs:string"/>
<xs:element name="documentation" type="xs:anyType"/>
<xs:element name="namespace">
<xs:complexType>
<xs:sequence>
<xs:element ref="components" minOccurs="1" maxOccurs="1"/>
<xs:element ref="properties" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>
Defines the name of the namespace, this name should be unique among the
namespaces that will be used at a given time.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="shared" type="xs:boolean" use="optional">
<xs:annotation>
<xs:documentation>
Indicates if component(s) registered by this namespace should be treated as <em>shared</em>.
Shared can mean for example: these metafacades will be made available to <strong>ALL</strong> namespaces.
An example of this in use is: we have the "uml" namespace marked as shared because we want these
to be able to be used by all cartridges.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="property">
<xs:annotation>
<xs:documentation>
Represents a <em>namespace property</em>. This are properties
used to configure aspects within namespace components (such as cartridges,
metafacades, etc).
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element ref="default" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>
The default value given to the property if one isn't explicitly defined.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="documentation" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>
Defines any documentation about this property.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>
The name of the property.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="required" type="xs:boolean" use="optional" default="true">
<xs:annotation>
<xs:documentation>
Whether or not this property is required (AndroMDA will issue a warning
if the property is required but is undefined).
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="propertyGroup">
<xs:annotation>
<xs:documentation>
Groups properties logical by some common aspect (such as 'Outlets'
for example).
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element ref="documentation" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>
Any documentation about this <em>group</em> of properties.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="property" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>
The name of this property group such as "Outlets".
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="properties">
<xs:annotation>
<xs:documentation>
Groups all properties for this given namespace.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element ref="propertyGroup" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="uniquePropertyGroupName">
<xs:selector xpath="propertyGroup"/>
<xs:field xpath="@name"/>
</xs:unique>
<xs:unique name="uniquePropertyName">
<xs:selector xpath="propertyGroup/property"/>
<xs:field xpath="@name"/>
</xs:unique>
</xs:element>
</xs:schema>