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>