Each Metafacades descriptor (andromda-metafacades.xml) must comply with the following XSD Schema:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<!-- Used for mapping contexts. An example for a context is: An entity is a
context for its attributes. So, the metaclass "Attribute" would be mapped to
the class for "EntityAttributeFacade" if the Attribute belongs to an entity.
If the Attribute belongs to any other Classifier, it would be mapped
to a simple "AttributeFacade" and therefore would NOT need the context -->
<xs:element name="context" type="xs:string"/>
<!-- specifies the default metafacade (if a metafacade is not explicitly
defined for an element this will be used instead) -->
<xs:element name="default">
<xs:complexType>
<xs:attribute name="class" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="metafacade">
<xs:complexType>
<xs:sequence>
<xs:element ref="mapping" minOccurs="0" maxOccurs="1"/>
<xs:element ref="property" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="class" type="xs:string" use="required"/>
<!-- You should set the context root to 'true' when the metafacade
mapping will be used as a context for other mappings -->
<xs:attribute name="contextRoot" type="xs:boolean" use="optional" default="false"/>
</xs:complexType>
<xs:unique name="uniqueMetafacadePropertyName">
<xs:selector xpath="property"/>
<xs:field xpath="@name"/>
</xs:unique>
</xs:element>
<xs:element name="mapping">
<xs:complexType>
<xs:sequence>
<xs:element ref="stereotype" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="context" minOccurs="0" maxOccurs="1"/>
<xs:element name="property" minOccurs="0" maxOccurs="unbounded">
<xs:complexType mixed="true">
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<!-- defines the class to which this mapping shall apply (can be a
metafacade or a metaclass) -->
<xs:attribute name="class" type="xs:string" use="required"/>
</xs:complexType>
<xs:unique name="uniqueMetafacadePropertyReference">
<xs:selector xpath="property"/>
<xs:field xpath="@reference"/>
</xs:unique>
</xs:element>
<xs:element name="metafacades">
<xs:complexType>
<xs:sequence>
<xs:element ref="default" minOccurs="0" maxOccurs="1"/>
<xs:element ref="property" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="metafacade" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<!-- Specifies the pattern of the classes based on the metaclass interface names,
for example '{0}Impl' might be the value, where '{0}' represents the metaclass
interface name -->
<xs:attribute name="metaclassPattern" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>
Specifies the pattern of the metaclass implementation classes based on the name of the metaclass
interface, for example <em>{0}.{1}Impl</em> might be the value, where <em>{0}</em> represents
the metaclass interface package and <em>{1}</em> the name of the metafacade. At least
one set of registered metafacades must have this attribute defined.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:unique name="uniquePropertyReference">
<xs:selector xpath="property"/>
<xs:field xpath="@reference"/>
</xs:unique>
</xs:element>
<!-- property references are properties you wish to configure on a metafacade,
through bean properties -->
<xs:element name="property">
<xs:complexType>
<xs:attribute name="reference" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="stereotype" type="xs:string"/>
</xs:schema>