AndroMDA Namespace Descriptor Schema

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>