Schema

The following is the schema to follow when writing mapping specifications:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"  
targetNamespace="http://www.curamsoftware.com/schemas/GUMBO/Map"
    xmlns:mp="http://www.curamsoftware.com/schemas/GUMBO/Map"
    elementFormDefault="qualified">

    <xs:simpleType name="TargetEntityRoleType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="parent"/>
            <xs:enumeration value="child"/>
        </xs:restriction>
    </xs:simpleType>
    
    <xs:simpleType name="AttachmentType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="case"/>
        </xs:restriction>
    </xs:simpleType>
    
    <xs:complexType name="MapAttributeType">
        <xs:attribute name="from" type="xs:NCName" use="required"/>
        <xs:attribute name="to" type="xs:NCName" use="required"/>
        <xs:attribute name="mapping-function" type="xs:string" 
          use="optional"/>
        <xs:attribute name="mapping-rule" type="xs:string" 
          use="optional"/>
        <xs:attribute name="entity" type="xs:NCName" use="optional"/>
    </xs:complexType>
    
    <xs:complexType name="SetAttributeType">
        <xs:attribute name="name" type="xs:NCName"/>
        <xs:attribute name="value" type="xs:string"/>
    </xs:complexType>
    
    <xs:element name="set-attribute" type="mp:SetAttributeType"/>
    
    <xs:complexType name="TargetEntityType">
        <xs:sequence>            
            <xs:element name="map-attribute" type="mp:MapAttributeType" 
minOccurs="0" 
              maxOccurs="unbounded"/>
            <xs:element ref="mp:set-attribute" minOccurs="0" 
              maxOccurs="unbounded"/>
            <xs:element ref="mp:condition" minOccurs="0" 
              maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="name" type="xs:NCName"/>
        <xs:attribute name="type" type="mp:TargetEntityRoleType"/>
        <xs:attribute name="attachment" type="mp:AttachmentType"/>
        <xs:attribute name="id" type="xs:ID" use="optional"/>
    </xs:complexType>
    
    <xs:element name="target-entity" type="mp:TargetEntityType"/>
    
    <xs:complexType name="ConditionType">
        <xs:choice>
            <xs:element ref="mp:target-entity" minOccurs="0" 
              maxOccurs="unbounded"/>
            <xs:element ref="mp:target-entities" minOccurs="0" 
              maxOccurs="unbounded"/>
            <xs:element ref="mp:set-attribute" minOccurs="0" 
              maxOccurs="unbounded"/>
            <xs:element ref="mp:map-entity" minOccurs="0" 
              maxOccurs="unbounded"/>
        </xs:choice>
        <xs:attribute name="expression" type="xs:string"/>
    </xs:complexType>
    
    <xs:element name="condition" type="mp:ConditionType"/>
    
    <xs:complexType name="MapEntityType">
        <xs:sequence>
            <xs:element ref="mp:target-entity" minOccurs="0" 
              maxOccurs="unbounded"/>
            <xs:element ref="mp:target-entities" minOccurs="0" 
              maxOccurs="unbounded"/>
            <xs:element  ref="mp:condition" minOccurs="0" 
              maxOccurs="unbounded"/>
            <xs:element ref="mp:map-entity" minOccurs="0" 
              maxOccurs="unbounded"/>
            <xs:element ref="mp:follow-association" minOccurs="0" 
              maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="source" type="xs:NCName"/>
    </xs:complexType>
    
    <xs:element name="map-entity" type="mp:MapEntityType"/>
    
    <xs:element name="follow-association" type="mp:MapEntityType"/>
    
    <xs:complexType name="MapEntitiesType">
        <xs:sequence>
            <xs:element ref="mp:target-entity" minOccurs="0" 
              maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    
    <xs:element name="target-entities" type="mp:MapEntitiesType"/>
    
    <xs:complexType name="MapCodeTableValueType">
        <xs:attribute name="source" type="xs:string"/> 
        <xs:attribute name="target" type="xs:string"/>
    </xs:complexType>
    
    <xs:complexType name="MapCodeTableType">
        <xs:sequence>
            <xs:element name="map-value" 
              type="mp:MapCodeTableValueType" minOccurs="1" 
                maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="context" type="xs:NCName" use="optional"/>
        <xs:attribute name="source-codetable" type="xs:NCName"/>
        <xs:attribute name="target-codetable" type="xs:NCName"/>
        <xs:attribute name="source-package" type="xs:NCName" 
use="optional"/>
        <xs:attribute name="target-package" type="xs:NCName" 
use="optional"/>
    </xs:complexType>
    
    <xs:complexType name="MapType">
        <xs:sequence>            
            <xs:element name="map-code-table" type="mp:MapCodeTableType" 
              minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="mp:map-entity" minOccurs="0" 
              maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="name" type="xs:NCName"/>
        <xs:attribute name="from-schema" type="xs:NCName"/>
        <xs:attribute name="to-schema" type="xs:NCName"/>
    </xs:complexType>

    <xs:element name="map" type="mp:MapType"/>
    
</xs:schema>