You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ja...@apache.org on 2007/01/01 22:56:14 UTC

svn commit: r491649 [3/7] - in /ofbiz/site: ./ dtds/

Added: ofbiz/site/dtds/simple-methods.xsd
URL: http://svn.apache.org/viewvc/ofbiz/site/dtds/simple-methods.xsd?view=auto&rev=491649
==============================================================================
--- ofbiz/site/dtds/simple-methods.xsd (added)
+++ ofbiz/site/dtds/simple-methods.xsd Mon Jan  1 13:56:13 2007
@@ -0,0 +1,2093 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright 2001-2006 The Apache Software Foundation
+
+Licensed under the Apache License, Version 2.0 (the "License"); you may not
+use this file except in compliance with the License. You may obtain a copy of
+the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+License for the specific language governing permissions and limitations
+under the License.
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+<!--
+    ==================================================
+    ========== The Simple Methods Section ==========
+    ==================================================
+    (see further down for the Simple Map Processor Section)
+-->
+
+  <!-- Reusable artifacts (abstract elements, groups, attributeGroups -->
+    <xs:element name="CallOperations" abstract="true"/>
+    <xs:element name="EventOperations" abstract="true"/>
+    <xs:element name="ServiceOperations" abstract="true"/>
+    <xs:element name="EnvOperations" abstract="true"/>
+    <xs:element name="EntityMiscOperations" abstract="true"/>
+    <xs:element name="EntityFindOperations" abstract="true"/>
+    <xs:element name="EntityValueOperations" abstract="true"/>
+    <xs:element name="EntityListOperations" abstract="true"/>
+    <xs:element name="EntityTxOperations" abstract="true"/>
+    <xs:element name="ControlOperations" abstract="true"/>
+    <xs:element name="IfBasicOperations" abstract="true"/>
+    <xs:element name="IfOtherOperations" abstract="true"/>
+    <xs:element name="OtherOperations" abstract="true"/>
+    <xs:group name="AllOperations">
+        <xs:choice>
+            <xs:element ref="CallOperations"/>
+            <xs:element ref="EventOperations"/>
+            <xs:element ref="ServiceOperations"/>
+            <xs:element ref="EnvOperations"/>
+            <xs:element ref="EntityMiscOperations"/>
+            <xs:element ref="EntityFindOperations"/>
+            <xs:element ref="EntityValueOperations"/>
+            <xs:element ref="EntityListOperations"/>
+            <xs:element ref="EntityTxOperations"/>
+            <xs:element ref="ControlOperations"/>
+            <xs:element ref="IfBasicOperations"/>
+            <xs:element ref="IfOtherOperations"/>
+            <xs:element ref="OtherOperations"/>
+        </xs:choice>
+    </xs:group>
+
+    <xs:attributeGroup name="attlist.propertyInfoOptional">
+        <xs:attribute type="xs:string" name="resource"/>
+        <xs:attribute type="xs:string" name="property"/>
+    </xs:attributeGroup>
+    <xs:attributeGroup name="attlist.typeDefaultString">
+        <xs:attribute name="type" default="String">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="PlainString"/>
+                    <xs:enumeration value="String"/>
+                    <xs:enumeration value="BigDecimal"/>
+                    <xs:enumeration value="Double"/>
+                    <xs:enumeration value="Float"/>
+                    <xs:enumeration value="Long"/>
+                    <xs:enumeration value="Integer"/>
+                    <xs:enumeration value="Date"/>
+                    <xs:enumeration value="Time"/>
+                    <xs:enumeration value="Timestamp"/>
+                    <xs:enumeration value="Boolean"/>
+                    <xs:enumeration value="Object"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:attributeGroup>
+    <xs:attributeGroup name="attlist.operatorRequired">
+        <xs:attribute name="operator" use="required">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="less"/>
+                    <xs:enumeration value="greater"/>
+                    <xs:enumeration value="less-equals"/>
+                    <xs:enumeration value="greater-equals"/>
+                    <xs:enumeration value="equals"/>
+                    <xs:enumeration value="not-equals"/>
+                    <xs:enumeration value="contains"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:attributeGroup>
+
+  <!-- ELEMENTS start here -->
+    <xs:element name="field">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.field"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.field">
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="type"/>
+    </xs:attributeGroup>
+    <xs:element name="string">
+        <xs:complexType mixed="true">
+            <xs:attributeGroup ref="attlist.string"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.string">
+        <xs:attribute type="xs:string" name="value"/>
+    </xs:attributeGroup>
+    <xs:element name="simple-methods">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element maxOccurs="unbounded" ref="simple-method"/>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="simple-method">
+        <xs:annotation>
+            <xs:documentation>
+        A simple method can be called in either an event context from the Control
+        Servlet (or another event) or in a service context through the Service
+        Engine, or any other component that has access to a service dispatcher.
+        
+        The field-to-request and field-to-session elements will be IGNORED when
+        called in a service context. So, they are ONLY used when called in an event context.
+        
+        The field-to-result elements will be ignored in an event context, ie only used in a service.
+        
+        The parameter-map-name env entry will contain the HttpRequest parameters for
+        running in an event context and and the input context when running in a service.
+            </xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+            <xs:group minOccurs="0" maxOccurs="unbounded" ref="AllOperations"/>
+            <xs:attributeGroup ref="attlist.simple-method"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.simple-method">
+        <xs:attribute type="xs:string" name="method-name" use="required"/>
+        <xs:attribute type="xs:string" name="short-description" use="required"/>
+        <xs:attribute name="login-required" default="true">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute name="use-transaction" default="true">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute type="xs:string" name="default-error-code" default="error"/>
+        <xs:attribute type="xs:string" name="default-success-code" default="success"/>
+        <xs:attribute type="xs:string" name="parameter-map-name" default="parameters"/>
+        <xs:attribute type="xs:string" name="event-request-object-name" default="request"/>
+        <xs:attribute type="xs:string" name="event-response-object-name" default="response"/>
+        <xs:attribute type="xs:string" name="event-response-code-name" default="_response_code_"/>
+        <xs:attribute type="xs:string" name="event-error-message-name" default="_error_message_"/>
+        <xs:attribute type="xs:string" name="event-event-message-name" default="_event_message_"/>
+        <xs:attribute type="xs:string" name="service-response-message-name" default="responseMessage"/>
+        <xs:attribute type="xs:string" name="service-error-message-name" default="errorMessage"/>
+        <xs:attribute type="xs:string" name="service-error-message-list-name" default="errorMessageList"/>
+        <xs:attribute type="xs:string" name="service-error-message-map-name" default="errorMessageMap"/>
+        <xs:attribute type="xs:string" name="service-success-message-name" default="successMessage"/>
+        <xs:attribute type="xs:string" name="service-success-message-list-name" default="successMessageList"/>
+        <xs:attribute type="xs:string" name="locale-name" default="locale"/>
+        <xs:attribute type="xs:string" name="delegator-name" default="delegator"/>
+        <xs:attribute type="xs:string" name="security-name" default="security"/>
+        <xs:attribute type="xs:string" name="dispatcher-name" default="dispatcher"/>
+        <xs:attribute type="xs:string" name="user-login-name" default="userLogin"/>
+    </xs:attributeGroup>
+    <xs:element name="call-map-processor" substitutionGroup="CallOperations">
+        <xs:annotation>
+            <xs:documentation>
+        If both an external and an inline map-processor are specified, the external
+        one will be called first, allowing the inline one to override its behavior
+            </xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element minOccurs="0" ref="simple-map-processor"/>
+            </xs:sequence>
+            <xs:attributeGroup ref="attlist.call-map-processor"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.call-map-processor">
+        <xs:attribute type="xs:string" name="xml-resource"/>
+        <xs:attribute type="xs:string" name="processor-name"/>
+        <xs:attribute type="xs:string" name="in-map-name" use="required"/>
+        <xs:attribute type="xs:string" name="out-map-name" use="required"/>
+        <xs:attribute type="xs:string" name="error-list-name" default="error_list"/>
+    </xs:attributeGroup>
+    <xs:element name="set-service-fields" substitutionGroup="CallOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.set-service-fields"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.set-service-fields">
+        <xs:attribute type="xs:string" name="service-name" use="required"/>
+        <xs:attribute type="xs:string" name="map-name" use="required"/>
+        <xs:attribute type="xs:string" name="to-map-name" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="call-service" substitutionGroup="CallOperations">
+        <xs:annotation>
+            <xs:documentation>
+        The result-to-request and result-to-session elements will be IGNORED when
+        called in a service context. So, they are ONLY used when called in an event context.
+            </xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element minOccurs="0" ref="error-prefix"/>
+                <xs:element minOccurs="0" ref="error-suffix"/>
+                <xs:element minOccurs="0" ref="success-prefix"/>
+                <xs:element minOccurs="0" ref="success-suffix"/>
+                <xs:element minOccurs="0" ref="message-prefix"/>
+                <xs:element minOccurs="0" ref="message-suffix"/>
+                <xs:element minOccurs="0" ref="default-message"/>
+                <xs:choice minOccurs="0" maxOccurs="unbounded">
+                    <xs:element ref="results-to-map"/>
+                    <xs:element ref="result-to-field"/>
+                    <xs:element ref="result-to-request"/>
+                    <xs:element ref="result-to-session"/>
+                    <xs:element ref="result-to-result"/>
+                </xs:choice>
+            </xs:sequence>
+            <xs:attributeGroup ref="attlist.call-service"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.call-service">
+        <xs:attribute type="xs:string" name="service-name" use="required"/>
+        <xs:attribute type="xs:string" name="in-map-name"/>
+        <xs:attribute name="include-user-login" default="true">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute name="break-on-error" default="true">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute type="xs:string" name="error-code" default="error"/>
+        <xs:attribute type="xs:string" name="success-code" default="success"/>
+    </xs:attributeGroup>
+    <xs:element name="error-prefix">
+        <xs:complexType mixed="true">
+            <xs:attributeGroup ref="attlist.propertyInfoOptional"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="error-suffix">
+        <xs:complexType mixed="true">
+            <xs:attributeGroup ref="attlist.propertyInfoOptional"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="success-prefix">
+        <xs:complexType mixed="true">
+            <xs:attributeGroup ref="attlist.propertyInfoOptional"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="success-suffix">
+        <xs:complexType mixed="true">
+            <xs:attributeGroup ref="attlist.propertyInfoOptional"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="message-prefix">
+        <xs:complexType mixed="true">
+            <xs:attributeGroup ref="attlist.propertyInfoOptional"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="message-suffix">
+        <xs:complexType mixed="true">
+            <xs:attributeGroup ref="attlist.propertyInfoOptional"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="default-message">
+        <xs:complexType mixed="true">
+            <xs:attributeGroup ref="attlist.propertyInfoOptional"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="results-to-map">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.results-to-map"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.results-to-map">
+        <xs:attribute type="xs:string" name="map-name" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="result-to-field">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.result-to-field"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.result-to-field">
+        <xs:attribute type="xs:string" name="result-name" use="required"/>
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="field-name"/>
+    </xs:attributeGroup>
+    <xs:element name="result-to-request">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.result-to-request"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.result-to-request">
+        <xs:attribute type="xs:string" name="result-name" use="required"/>
+        <xs:attribute type="xs:string" name="request-name"/>
+    </xs:attributeGroup>
+    <xs:element name="result-to-session">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.result-to-session"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.result-to-session">
+        <xs:attribute type="xs:string" name="result-name" use="required"/>
+        <xs:attribute type="xs:string" name="session-name"/>
+    </xs:attributeGroup>
+    <xs:element name="result-to-result">
+        <xs:annotation>
+            <xs:documentation>
+        NOTE that these attributes are somewhat confusing: result-name is the name of the field in the result of this service call that the value comes FROM; 
+        service-result-name is the name of the field in the result of this simple-method called as a service where the value goes TO;
+        in other words FROM result-name and TO service-result-name
+            </xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.result-to-result"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.result-to-result">
+        <xs:attribute type="xs:string" name="result-name" use="required"/>
+        <xs:attribute type="xs:string" name="service-result-name"/>
+    </xs:attributeGroup>
+    <xs:element name="call-service-asynch" substitutionGroup="CallOperations">
+        <xs:annotation>
+            <xs:documentation>
+        Calls a service asynchronously and ignores the result, so no return messages
+        are used; that doesn't mean no errors will result, but they would just be
+        system errors like database failures, etc which all have system error messages.
+            </xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.call-service-asynch"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.call-service-asynch">
+        <xs:attribute type="xs:string" name="service-name" use="required"/>
+        <xs:attribute type="xs:string" name="in-map-name"/>
+        <xs:attribute name="include-user-login" default="true">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:attributeGroup>
+    <xs:element name="call-bsh" substitutionGroup="CallOperations">
+        <xs:annotation>
+            <xs:documentation>
+        Runs an external bsh script from the classpath if resource is specified and
+        then runs the inlined bsh script if any is specified.
+        
+        The bsh context is the current simple-method environment including maps, lists
+        and special objects whose names are defined in the simple-method attributes.
+        
+        The current env cannot be modified, but if a Map is returned by the bsh block
+        the entries in the map will be put into the current env.
+        
+        Error messages go on the error list and are handled with the check-errors tag.
+            </xs:documentation>
+        </xs:annotation>
+        <xs:complexType mixed="true">
+            <xs:attributeGroup ref="attlist.call-bsh"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.call-bsh">
+        <xs:attribute type="xs:string" name="resource"/>
+        <xs:attribute type="xs:string" name="error-list-name" default="error_list"/>
+    </xs:attributeGroup>
+    <xs:element name="call-simple-method" substitutionGroup="CallOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.call-simple-method"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.call-simple-method">
+        <xs:attribute type="xs:string" name="xml-resource"/>
+        <xs:attribute type="xs:string" name="method-name" use="required"/>
+    </xs:attributeGroup>
+    <!-- Operations to call Java methods and create Java objects -->
+    <xs:element name="call-object-method" substitutionGroup="CallOperations">
+        <xs:complexType>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+                <xs:element ref="string"/>
+                <xs:element ref="field"/>
+            </xs:choice>
+            <xs:attributeGroup ref="attlist.call-object-method"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.call-object-method">
+        <xs:attribute type="xs:string" name="obj-field-name" use="required"/>
+        <xs:attribute type="xs:string" name="obj-map-name"/>
+        <xs:attribute type="xs:string" name="method-name" use="required"/>
+        <xs:attribute type="xs:string" name="ret-field-name"/>
+        <xs:attribute type="xs:string" name="ret-map-name"/>
+    </xs:attributeGroup>
+    <xs:element name="call-class-method" substitutionGroup="CallOperations">
+        <xs:complexType>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+                <xs:element ref="string"/>
+                <xs:element ref="field"/>
+            </xs:choice>
+            <xs:attributeGroup ref="attlist.call-class-method"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.call-class-method">
+        <xs:attribute type="xs:string" name="class-name" use="required"/>
+        <xs:attribute type="xs:string" name="method-name" use="required"/>
+        <xs:attribute type="xs:string" name="ret-field-name"/>
+        <xs:attribute type="xs:string" name="ret-map-name"/>
+    </xs:attributeGroup>
+    <xs:element name="create-object" substitutionGroup="CallOperations">
+        <xs:complexType>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+                <xs:element ref="string"/>
+                <xs:element ref="field"/>
+            </xs:choice>
+            <xs:attributeGroup ref="attlist.create-object"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.create-object">
+        <xs:attribute type="xs:string" name="class-name" use="required"/>
+        <xs:attribute type="xs:string" name="field-name"/>
+        <xs:attribute type="xs:string" name="map-name"/>
+    </xs:attributeGroup>
+    <!-- Operations to copy map fields in the current env to context specific containers -->
+    <!-- Event specific operations -->
+    <xs:element name="field-to-request" substitutionGroup="EventOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.field-to-request"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.field-to-request">
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+        <xs:attribute type="xs:string" name="request-name"/>
+    </xs:attributeGroup>
+    <xs:element name="field-to-session" substitutionGroup="EventOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.field-to-session"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.field-to-session">
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+        <xs:attribute type="xs:string" name="session-name"/>
+    </xs:attributeGroup>
+    <xs:element name="request-to-field" substitutionGroup="EventOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.request-to-field"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.request-to-field">
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+        <xs:attribute type="xs:string" name="default"/>
+        <xs:attribute type="xs:string" name="request-name"/>
+    </xs:attributeGroup>
+    <xs:element name="request-parameters-to-list" substitutionGroup="EventOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.request-parameters-to-list"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.request-parameters-to-list">
+        <xs:attribute type="xs:string" name="request-name" use="required"/>
+        <xs:attribute type="xs:string" name="list-name"/>
+    </xs:attributeGroup>
+    <xs:element name="session-to-field" substitutionGroup="EventOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.session-to-field"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.session-to-field">
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+        <xs:attribute type="xs:string" name="default"/>
+        <xs:attribute type="xs:string" name="session-name"/>
+    </xs:attributeGroup>
+    <xs:element name="webapp-property-to-field" substitutionGroup="EventOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.webapp-property-to-field"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.webapp-property-to-field">
+        <xs:attribute type="xs:string" name="resource" use="required"/>
+        <xs:attribute type="xs:string" name="property" use="required"/>
+        <xs:attribute type="xs:string" name="default"/>
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+        <xs:attribute type="xs:string" name="session-name"/>
+    </xs:attributeGroup>
+    <!-- Service specific operations -->
+    <xs:element name="field-to-result" substitutionGroup="ServiceOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.field-to-result"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.field-to-result">
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+        <xs:attribute type="xs:string" name="result-name"/>
+    </xs:attributeGroup>
+    <!-- Environment specific operations -->
+    <xs:element name="map-to-map" substitutionGroup="EnvOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.map-to-map"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.map-to-map">
+        <xs:attribute type="xs:string" name="map-name" use="required"/>
+        <xs:attribute type="xs:string" name="to-map-name"/>
+    </xs:attributeGroup>
+    <xs:element name="field-to-list" substitutionGroup="EnvOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.field-to-list"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.field-to-list">
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+        <xs:attribute type="xs:string" name="list-name" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="list-to-list" substitutionGroup="EnvOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.list-to-list"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.list-to-list">
+        <xs:attribute type="xs:string" name="list-name" use="required"/>
+        <xs:attribute type="xs:string" name="to-list-name" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="order-map-list" substitutionGroup="EnvOperations">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element maxOccurs="unbounded" ref="order-by"/>
+            </xs:sequence>
+            <xs:attributeGroup ref="attlist.order-map-list"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.order-map-list">
+        <xs:attribute type="xs:string" name="list-name" use="required"/>
+    </xs:attributeGroup>
+
+    <xs:element name="set" substitutionGroup="EnvOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.set"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.set">
+        <xs:attribute type="xs:string" name="field" use="required"/>
+        <xs:attribute type="xs:string" name="from-field"/>
+        <xs:attribute type="xs:string" name="value"/>
+        <xs:attribute type="xs:string" name="default-value"/>
+        <xs:attribute name="type">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="PlainString"/>
+                    <xs:enumeration value="String"/>
+                    <xs:enumeration value="BigDecimal"/>
+                    <xs:enumeration value="Double"/>
+                    <xs:enumeration value="Float"/>
+                    <xs:enumeration value="Long"/>
+                    <xs:enumeration value="Integer"/>
+                    <xs:enumeration value="Date"/>
+                    <xs:enumeration value="Time"/>
+                    <xs:enumeration value="Timestamp"/>
+                    <xs:enumeration value="Boolean"/>
+                    <xs:enumeration value="Object"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute name="set-if-null" default="false">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute name="set-if-empty" default="true">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:attributeGroup>
+    <xs:element name="string-append" substitutionGroup="EnvOperations">
+        <xs:annotation><xs:documentation>NOTE: the prefix and suffix will only be used IFF the current string and the string to be appended are both not empty</xs:documentation></xs:annotation>
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.string-append"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.string-append">
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="string" use="required"/>
+        <xs:attribute type="xs:string" name="arg-list-name"/>
+        <xs:attribute type="xs:string" name="prefix"/>
+        <xs:attribute type="xs:string" name="suffix"/>
+    </xs:attributeGroup>
+    <xs:element name="string-to-list" substitutionGroup="EnvOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.string-to-list"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.string-to-list">
+        <xs:attribute type="xs:string" name="string" use="required"/>
+        <xs:attribute type="xs:string" name="list-name" use="required"/>
+        <xs:attribute type="xs:string" name="arg-list-name"/>
+        <xs:attribute type="xs:string" name="message-field-name"/>
+    </xs:attributeGroup>
+    <xs:element name="to-string" substitutionGroup="EnvOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.to-string"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.to-string">
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+        <xs:attribute type="xs:string" name="format"/>
+        <xs:attribute type="xs:string" name="numeric-padding"/>
+    </xs:attributeGroup>
+    <xs:element name="clear-field" substitutionGroup="EnvOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.clear-field"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.clear-field">
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="first-from-list" substitutionGroup="EnvOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.first-from-list"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.first-from-list">
+        <xs:attribute type="xs:string" name="entry-name" use="required"/>
+        <xs:attribute type="xs:string" name="list-name" use="required"/>
+    </xs:attributeGroup>
+    <!--
+        These operations are used to interact with a data source through the entity
+        engine and facilitate related operations.
+    -->
+    <xs:element name="transaction-begin" substitutionGroup="EntityTxOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.transaction-begin"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.transaction-begin">
+        <xs:attribute type="xs:string" name="began-transaction-name" default="beganTransaction"/>
+    </xs:attributeGroup>
+    <xs:element name="transaction-commit" substitutionGroup="EntityTxOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.transaction-commit"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.transaction-commit">
+        <xs:attribute type="xs:string" name="began-transaction-name" default="beganTransaction"/>
+    </xs:attributeGroup>
+    <xs:element name="transaction-rollback" substitutionGroup="EntityTxOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.transaction-rollback"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.transaction-rollback">
+        <xs:attribute type="xs:string" name="began-transaction-name" default="beganTransaction"/>
+    </xs:attributeGroup>
+
+    <xs:element name="sequenced-id-to-env" substitutionGroup="EntityMiscOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.sequenced-id-to-env"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.sequenced-id-to-env">
+        <xs:attribute type="xs:string" name="sequence-name" use="required"/>
+        <xs:attribute type="xs:string" name="env-name" use="required"/>
+        <xs:attribute name="get-long-only" default="false">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute type="xs:string" name="stagger-max"/>
+    </xs:attributeGroup>
+    <xs:element name="make-next-seq-id" substitutionGroup="EntityMiscOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.make-next-seq-id"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.make-next-seq-id">
+        <xs:attribute type="xs:string" name="value-name" use="required"/>
+        <xs:attribute type="xs:string" name="seq-field-name" use="required"/>
+        <xs:attribute type="xs:string" name="numeric-padding" default="5"/>
+        <xs:attribute type="xs:string" name="increment-by" default="1"/>
+    </xs:attributeGroup>
+
+    <xs:element name="entity-data" substitutionGroup="EntityMiscOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.entity-data"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.entity-data">
+        <xs:attribute type="xs:string" name="location" use="required"/>
+        <xs:attribute type="xs:string" name="delegator-name" use="optional"/>
+        <xs:attribute type="xs:integer" name="timeout" default="-1"/>
+        <xs:attribute type="xs:string" name="error-list-name" default="error_list"/>
+        <xs:attribute name="mode" default="load">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="load"/>
+                    <xs:enumeration value="assert"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:attributeGroup>
+
+    <xs:element name="find-by-primary-key" substitutionGroup="EntityFindOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.find-by-primary-key"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.find-by-primary-key">
+        <xs:attribute type="xs:string" name="entity-name"/>
+        <xs:attribute type="xs:string" name="map-name" use="required"/>
+        <xs:attribute type="xs:string" name="value-name" use="required"/>
+        <xs:attribute type="xs:string" name="use-cache" default="false"/>
+        <xs:attribute type="xs:string" name="fields-to-select-list"/>
+        <xs:attribute type="xs:string" name="delegator-name"/>
+    </xs:attributeGroup>
+    <xs:element name="find-by-and" substitutionGroup="EntityFindOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.find-by-and"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.find-by-and">
+        <xs:attribute type="xs:string" name="entity-name" use="required"/>
+        <xs:attribute type="xs:string" name="map-name" use="required"/>
+        <xs:attribute type="xs:string" name="order-by-list-name"/>
+        <xs:attribute type="xs:string" name="delegator-name"/>
+        <xs:attribute type="xs:string" name="use-cache" default="false"/>
+        <xs:attribute name="use-iterator" default="false">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute type="xs:string" name="list-name" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="entity-one" substitutionGroup="EntityFindOperations">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element minOccurs="0" maxOccurs="unbounded" ref="field-map"/>
+                <xs:element minOccurs="0" maxOccurs="unbounded" ref="select-field"/>
+            </xs:sequence>
+            <xs:attributeGroup ref="attlist.entity-one"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.entity-one">
+        <xs:attribute name="entity-name" type="xs:string" use="required"/>
+        <xs:attribute name="value-name" type="xs:string" use="required"/>
+        <xs:attribute type="xs:string" name="use-cache" default="false"/>
+        <xs:attribute name="auto-field-map" default="true">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:attributeGroup>
+    <xs:element name="entity-and" substitutionGroup="EntityFindOperations">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element maxOccurs="unbounded" ref="field-map"/>
+                <xs:element minOccurs="0" maxOccurs="unbounded" ref="select-field"/>
+                <xs:element minOccurs="0" maxOccurs="unbounded" ref="order-by"/>
+                <xs:choice minOccurs="0">
+                    <xs:element ref="limit-range"/>
+                    <xs:element ref="limit-view"/>
+                    <xs:element ref="use-iterator"/>
+                </xs:choice>
+            </xs:sequence>
+            <xs:attributeGroup ref="attlist.entity-and"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.entity-and">
+        <xs:attribute name="entity-name" type="xs:string" use="required"/>
+        <xs:attribute type="xs:string" name="use-cache" default="false"/>
+        <xs:attribute name="filter-by-date" default="false">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                    <xs:enumeration value="by-name"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute name="list-name" type="xs:string" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="entity-condition" substitutionGroup="EntityFindOperations">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:choice minOccurs="0">
+                    <xs:element ref="condition-expr"/>
+                    <xs:element ref="condition-list"/>
+                    <xs:element ref="condition-object"/>
+                </xs:choice>
+                <xs:element minOccurs="0" ref="having-condition-list"/>
+                <xs:element minOccurs="0" maxOccurs="unbounded" ref="select-field"/>
+                <xs:element minOccurs="0" maxOccurs="unbounded" ref="order-by"/>
+                <xs:choice minOccurs="0">
+                    <xs:element ref="limit-range"/>
+                    <xs:element ref="limit-view"/>
+                    <xs:element ref="use-iterator"/>
+                </xs:choice>
+            </xs:sequence>
+            <xs:attributeGroup ref="attlist.entity-condition"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.entity-condition">
+        <xs:attribute name="entity-name" type="xs:string" use="required"/>
+        <xs:attribute type="xs:string" name="use-cache" default="false"/>
+        <xs:attribute name="filter-by-date" default="false">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                    <xs:enumeration value="by-name"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute name="distinct" default="false">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute name="delegator-name" type="xs:string"/>
+        <xs:attribute name="list-name" type="xs:string" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="condition-list">
+        <xs:complexType>
+            <xs:choice maxOccurs="unbounded">
+                <xs:element ref="condition-expr"/>
+                <xs:element ref="condition-list"/>
+                <xs:element ref="condition-object"/>
+            </xs:choice>
+            <xs:attributeGroup ref="attlist.condition-list"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.condition-list">
+        <xs:attribute name="combine" default="and">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="and"/>
+                    <xs:enumeration value="or"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:attributeGroup>
+    <xs:element name="having-condition-list">
+        <xs:complexType>
+            <xs:choice maxOccurs="unbounded">
+                <xs:element ref="condition-expr"/>
+                <xs:element ref="condition-list"/>
+                <xs:element ref="condition-object"/>
+            </xs:choice>
+            <xs:attributeGroup ref="attlist.having-condition-list"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.having-condition-list">
+        <xs:attribute name="combine" default="and">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="and"/>
+                    <xs:enumeration value="or"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:attributeGroup>
+    <xs:element name="condition-expr">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.condition-expr"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.condition-expr">
+        <xs:attribute name="field-name" type="xs:string" use="required"/>
+        <xs:attribute name="operator" default="equals">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="less"/>
+                    <xs:enumeration value="greater"/>
+                    <xs:enumeration value="less-equals"/>
+                    <xs:enumeration value="greater-equals"/>
+                    <xs:enumeration value="equals"/>
+                    <xs:enumeration value="not-equals"/>
+                    <xs:enumeration value="in"/>
+                    <xs:enumeration value="between"/>
+                    <xs:enumeration value="like"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute name="env-name" type="xs:string"/>
+        <xs:attribute name="value" type="xs:string"/>
+        <xs:attribute name="ignore-if-null" default="false">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute name="ignore-if-empty" default="false">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute name="ignore-case" default="false">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:attributeGroup>
+    <xs:element name="condition-object">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.condition-object"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.condition-object">
+        <xs:attribute name="field-name" type="xs:string" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="select-field">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.select-field"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.select-field">
+        <xs:attribute name="field-name" type="xs:string" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="order-by">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.order-by"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.order-by">
+        <xs:attribute name="field-name" type="xs:string" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="limit-range">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.limit-range"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.limit-range">
+        <xs:attribute name="start" type="xs:string" use="required"><xs:annotation><xs:documentation>Should resolve into a non-negative integer.</xs:documentation></xs:annotation></xs:attribute>
+        <xs:attribute name="size" type="xs:string" use="required"><xs:annotation><xs:documentation>Should resolve into a non-negative integer.</xs:documentation></xs:annotation></xs:attribute>
+    </xs:attributeGroup>
+    <xs:element name="limit-view">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.limit-view"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.limit-view">
+        <xs:attribute name="view-index" type="xs:string" use="required"><xs:annotation><xs:documentation>Should resolve into a non-negative integer.</xs:documentation></xs:annotation></xs:attribute>
+        <xs:attribute name="view-size" type="xs:string" use="required"><xs:annotation><xs:documentation>Should resolve into a positive integer.</xs:documentation></xs:annotation></xs:attribute>
+    </xs:attributeGroup>
+    <xs:element name="use-iterator">
+        <xs:complexType/>
+    </xs:element>
+    <xs:element name="field-map">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.field-map"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.field-map">
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+        <xs:attribute type="xs:string" name="env-name"/>
+        <xs:attribute type="xs:string" name="value"/>
+    </xs:attributeGroup>
+    <xs:element name="entity-count" substitutionGroup="EntityFindOperations">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:choice>
+                    <xs:element ref="condition-expr"/>
+                    <xs:element ref="condition-list"/>
+                    <xs:element ref="condition-object"/>
+                </xs:choice>
+                <xs:element minOccurs="0" ref="having-condition-list"/>
+            </xs:sequence>
+            <xs:attributeGroup ref="attlist.entity-count"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.entity-count">
+        <xs:attribute name="entity-name" type="xs:string" use="required"/>
+        <xs:attribute name="delegator-name" type="xs:string"/>
+        <xs:attribute name="count-name" type="xs:string" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="get-related-one" substitutionGroup="EntityFindOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.get-related-one"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.get-related-one">
+        <xs:attribute name="value-name" type="xs:string" use="required"/>
+        <xs:attribute name="relation-name" type="xs:string" use="required"/>
+        <xs:attribute type="xs:string" name="use-cache" default="false"/>
+        <xs:attribute type="xs:string" name="to-value-name" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="get-related" substitutionGroup="EntityFindOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.get-related"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.get-related">
+        <xs:attribute type="xs:string" name="value-name" use="required"/>
+        <xs:attribute type="xs:string" name="relation-name" use="required"/>
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="order-by-list-name"/>
+        <xs:attribute type="xs:string" name="use-cache" default="false"/>
+        <xs:attribute type="xs:string" name="list-name" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="order-value-list" substitutionGroup="EntityFindOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.order-value-list"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.order-value-list">
+        <xs:attribute type="xs:string" name="list-name" use="required"/>
+        <xs:attribute type="xs:string" name="to-list-name"/>
+        <xs:attribute type="xs:string" name="order-by-list-name" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="filter-list-by-and" substitutionGroup="EntityFindOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.filter-list-by-and"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.filter-list-by-and">
+        <xs:attribute type="xs:string" name="list-name" use="required"/>
+        <xs:attribute type="xs:string" name="to-list-name"/>
+        <xs:attribute type="xs:string" name="map-name"/>
+    </xs:attributeGroup>
+    <xs:element name="filter-list-by-date" substitutionGroup="EntityFindOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.filter-list-by-date"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.filter-list-by-date">
+        <xs:attribute type="xs:string" name="list-name" use="required"/>
+        <xs:attribute type="xs:string" name="to-list-name"/>
+        <xs:attribute type="xs:string" name="valid-date-name"/>
+        <xs:attribute type="xs:string" name="from-field-name" default="fromDate"/>
+        <xs:attribute type="xs:string" name="thru-field-name" default="thruDate"/>
+        <xs:attribute name="all-same" default="true">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:attributeGroup>
+    <xs:element name="make-value" substitutionGroup="EntityValueOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.make-value"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.make-value">
+        <xs:attribute type="xs:string" name="value-name" use="required"/>
+        <xs:attribute type="xs:string" name="entity-name" use="required"/>
+        <xs:attribute type="xs:string" name="map-name"/>
+    </xs:attributeGroup>
+    <xs:element name="clone-value" substitutionGroup="EntityValueOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.clone-value"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.clone-value">
+        <xs:attribute type="xs:string" name="value-name" use="required"/>
+        <xs:attribute type="xs:string" name="new-value-name" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="create-value" substitutionGroup="EntityValueOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.create-value"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.create-value">
+        <xs:attribute type="xs:string" name="value-name" use="required"/>
+        <xs:attribute name="do-cache-clear" default="true">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:attributeGroup>
+    <xs:element name="store-value" substitutionGroup="EntityValueOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.store-value"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.store-value">
+        <xs:attribute type="xs:string" name="value-name" use="required"/>
+        <xs:attribute name="do-cache-clear" default="true">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:attributeGroup>
+    <xs:element name="refresh-value" substitutionGroup="EntityValueOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.refresh-value"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.refresh-value">
+        <xs:attribute type="xs:string" name="value-name" use="required"/>
+        <xs:attribute name="do-cache-clear" default="true">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:attributeGroup>
+    <xs:element name="remove-value" substitutionGroup="EntityValueOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.remove-value"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.remove-value">
+        <xs:attribute type="xs:string" name="value-name" use="required"/>
+        <xs:attribute name="do-cache-clear" default="true">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:attributeGroup>
+    <xs:element name="remove-related" substitutionGroup="EntityValueOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.remove-related"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.remove-related">
+        <xs:attribute type="xs:string" name="value-name" use="required"/>
+        <xs:attribute type="xs:string" name="relation-name" use="required"/>
+        <xs:attribute name="do-cache-clear" default="true">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:attributeGroup>
+    <xs:element name="remove-by-and" substitutionGroup="EntityValueOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.remove-by-and"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.remove-by-and">
+        <xs:attribute type="xs:string" name="entity-name" use="required"/>
+        <xs:attribute type="xs:string" name="map-name" use="required"/>
+        <xs:attribute name="do-cache-clear" default="true">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:attributeGroup>
+    <xs:element name="clear-cache-line" substitutionGroup="EntityValueOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.clear-cache-line"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.clear-cache-line">
+        <xs:attribute type="xs:string" name="entity-name" use="required"/>
+        <xs:attribute type="xs:string" name="map-name"/>
+    </xs:attributeGroup>
+    <xs:element name="clear-entity-caches" substitutionGroup="EntityValueOperations">
+        <xs:complexType/>
+    </xs:element>
+    <xs:element name="set-pk-fields" substitutionGroup="EntityValueOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.set-pk-fields"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.set-pk-fields">
+        <xs:attribute type="xs:string" name="value-name" use="required"/>
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute name="set-if-null" default="true">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:attributeGroup>
+    <xs:element name="set-nonpk-fields" substitutionGroup="EntityValueOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.set-nonpk-fields"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.set-nonpk-fields">
+        <xs:attribute type="xs:string" name="value-name" use="required"/>
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute name="set-if-null" default="true">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:attributeGroup>
+    <xs:element name="store-list" substitutionGroup="EntityListOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.store-list"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.store-list">
+        <xs:attribute type="xs:string" name="list-name" use="required"/>
+        <xs:attribute name="do-cache-clear" default="true">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:attributeGroup>
+    <xs:element name="remove-list" substitutionGroup="EntityListOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.remove-list"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.remove-list">
+        <xs:attribute type="xs:string" name="list-name" use="required"/>
+        <xs:attribute name="do-cache-clear" default="true">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:attributeGroup>
+
+    <!-- =================== CONTROL OPERATIONS =================== -->
+    <xs:element name="iterate" substitutionGroup="ControlOperations">
+        <xs:complexType>
+            <xs:group minOccurs="0" maxOccurs="unbounded" ref="AllOperations"/>
+            <xs:attributeGroup ref="attlist.iterate"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.iterate">
+        <xs:attribute type="xs:string" name="entry-name" use="required"/>
+        <xs:attribute type="xs:string" name="list-name" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="iterate-map" substitutionGroup="ControlOperations">
+        <xs:complexType>
+            <xs:group minOccurs="0" maxOccurs="unbounded" ref="AllOperations"/>
+            <xs:attributeGroup ref="attlist.iterate-map"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.iterate-map">
+        <xs:attribute type="xs:string" name="key-name" use="required"/>
+        <xs:attribute type="xs:string" name="value-name" use="required"/>
+        <xs:attribute type="xs:string" name="map-name" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="loop" substitutionGroup="ControlOperations">
+        <xs:complexType>
+            <xs:group minOccurs="0" maxOccurs="unbounded" ref="AllOperations"/>
+            <xs:attributeGroup ref="attlist.loop"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.loop">
+        <xs:attribute type="xs:string" name="count" use="required"/>
+        <xs:attribute type="xs:string" name="field" use="optional"/>
+    </xs:attributeGroup>
+    <xs:element name="check-errors" substitutionGroup="ControlOperations">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element minOccurs="0" ref="error-prefix"/>
+                <xs:element minOccurs="0" ref="error-suffix"/>
+                <xs:element minOccurs="0" ref="message-prefix"/>
+                <xs:element minOccurs="0" ref="message-suffix"/>
+            </xs:sequence>
+            <xs:attributeGroup ref="attlist.check-errors"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.check-errors">
+        <xs:attribute type="xs:string" name="error-code" default="error"/>
+        <xs:attribute type="xs:string" name="error-list-name" default="error_list"/>
+    </xs:attributeGroup>
+    <xs:element name="add-error" substitutionGroup="ControlOperations">
+        <xs:complexType>
+            <xs:choice>
+                <xs:element ref="fail-message"/>
+                <xs:element ref="fail-property"/>
+            </xs:choice>
+            <xs:attributeGroup ref="attlist.add-error"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.add-error">
+        <xs:attribute type="xs:string" name="error-list-name" default="error_list"/>
+    </xs:attributeGroup>
+    <xs:element name="return" substitutionGroup="ControlOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.return"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.return">
+        <xs:attribute type="xs:string" name="response-code" default="success"/>
+    </xs:attributeGroup>
+
+    <xs:element name="assert" substitutionGroup="IfOtherOperations">
+        <xs:annotation>
+            <xs:documentation>
+                Each condition under the assert element will be checked and if it fails an error will be added to the given error list.
+                Note that while the definitions for the if-* operations are used, the tags should be empty because of the differing semantics.
+            </xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+            <xs:group maxOccurs="unbounded" ref="IfConditions"/>
+            <xs:attributeGroup ref="attlist.assert"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.assert">
+        <xs:attribute type="xs:string" name="title"/>
+        <xs:attribute type="xs:string" name="error-list-name" default="error_list"/>
+    </xs:attributeGroup>
+
+    <!--
+        Operations that conditionally execute blocks within them; they mimic the
+        simple-map-processor process operations that validate incoming data
+    -->
+    <xs:group name="IfConditions">
+        <xs:choice>
+            <xs:element ref="IfCombineConditions"/>
+            <xs:element ref="IfBasicOperations"/>
+        </xs:choice>
+    </xs:group>
+    <xs:element name="IfCombineConditions" abstract="true"/>
+    <xs:element name="if" substitutionGroup="IfOtherOperations">
+        <xs:annotation><xs:documentation>Note that while the definitions for the if-* operations are used, the tags should be empty because of the differing semantics.</xs:documentation></xs:annotation>
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element ref="condition"/>
+                <xs:element ref="then"/>
+                <xs:element minOccurs="0" maxOccurs="unbounded" ref="else-if"/>
+                <xs:element minOccurs="0" ref="else"/>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="while" substitutionGroup="IfOtherOperations">
+        <xs:annotation><xs:documentation>While loop operation, uses the same condition element as the if operation.</xs:documentation></xs:annotation>
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element ref="condition"/>
+                <xs:element ref="then"/>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="condition">
+        <xs:complexType>
+            <xs:group ref="IfConditions"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="then">
+        <xs:complexType>
+            <xs:group minOccurs="0" maxOccurs="unbounded" ref="AllOperations"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="else-if">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element ref="condition"/>
+                <xs:element ref="then"/>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="else">
+        <xs:complexType>
+            <xs:group minOccurs="0" maxOccurs="unbounded" ref="AllOperations"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="or" substitutionGroup="IfCombineConditions">
+        <xs:complexType>
+            <xs:group maxOccurs="unbounded" ref="IfConditions"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="xor" substitutionGroup="IfCombineConditions">
+        <xs:complexType>
+            <xs:group maxOccurs="unbounded" ref="IfConditions"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="and" substitutionGroup="IfCombineConditions">
+        <xs:complexType>
+            <xs:group maxOccurs="unbounded" ref="IfConditions"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="not" substitutionGroup="IfCombineConditions">
+        <xs:complexType>
+            <xs:group ref="IfConditions"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="if-validate-method" substitutionGroup="IfBasicOperations">
+        <xs:annotation><xs:documentation>if-validate-method calls a static Java method that takes a String and returns a boolean</xs:documentation></xs:annotation>
+        <xs:complexType>
+            <xs:sequence>
+                <xs:group minOccurs="0" maxOccurs="unbounded" ref="AllOperations"/>
+                <xs:element minOccurs="0" ref="else"/>
+            </xs:sequence>
+            <xs:attributeGroup ref="attlist.if-validate-method"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.if-validate-method">
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+        <xs:attribute type="xs:string" name="method" use="required"/>
+        <xs:attribute type="xs:string" name="class" default="org.ofbiz.base.util.UtilValidate"/>
+    </xs:attributeGroup>
+    <xs:element name="if-instance-of" substitutionGroup="IfBasicOperations">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:group minOccurs="0" maxOccurs="unbounded" ref="AllOperations"/>
+                <xs:element minOccurs="0" ref="else"/>
+            </xs:sequence>
+            <xs:attributeGroup ref="attlist.if-instance-of"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.if-instance-of">
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+        <xs:attribute type="xs:string" name="class" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="if-compare" substitutionGroup="IfBasicOperations">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:group minOccurs="0" maxOccurs="unbounded" ref="AllOperations"/>
+                <xs:element minOccurs="0" ref="else"/>
+            </xs:sequence>
+            <xs:attributeGroup ref="attlist.if-compare"/>
+            <xs:attributeGroup ref="attlist.operatorRequired"/>
+            <xs:attributeGroup ref="attlist.typeDefaultString"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.if-compare">
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+        <xs:attribute type="xs:string" name="value" use="required"/>
+        <xs:attribute type="xs:string" name="format"/>
+    </xs:attributeGroup>
+    <xs:element name="if-compare-field" substitutionGroup="IfBasicOperations">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:group minOccurs="0" maxOccurs="unbounded" ref="AllOperations"/>
+                <xs:element minOccurs="0" ref="else"/>
+            </xs:sequence>
+            <xs:attributeGroup ref="attlist.if-compare-field"/>
+            <xs:attributeGroup ref="attlist.operatorRequired"/>
+            <xs:attributeGroup ref="attlist.typeDefaultString"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.if-compare-field">
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+        <xs:attribute type="xs:string" name="to-map-name"/>
+        <xs:attribute type="xs:string" name="to-field-name"/>
+        <xs:attribute type="xs:string" name="format"/>
+    </xs:attributeGroup>
+    <xs:element name="if-regexp" substitutionGroup="IfBasicOperations">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:group minOccurs="0" maxOccurs="unbounded" ref="AllOperations"/>
+                <xs:element minOccurs="0" ref="else"/>
+            </xs:sequence>
+            <xs:attributeGroup ref="attlist.if-regexp"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.if-regexp">
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+        <xs:attribute type="xs:string" name="expr" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="if-empty" substitutionGroup="IfBasicOperations">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:group minOccurs="0" maxOccurs="unbounded" ref="AllOperations"/>
+                <xs:element minOccurs="0" ref="else"/>
+            </xs:sequence>
+            <xs:attributeGroup ref="attlist.if-empty"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.if-empty">
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="if-not-empty" substitutionGroup="IfOtherOperations">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:group minOccurs="0" maxOccurs="unbounded" ref="AllOperations"/>
+                <xs:element minOccurs="0" ref="else"/>
+            </xs:sequence>
+            <xs:attributeGroup ref="attlist.if-not-empty"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.if-not-empty">
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="if-has-permission" substitutionGroup="IfBasicOperations">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:group minOccurs="0" maxOccurs="unbounded" ref="AllOperations"/>
+                <xs:element minOccurs="0" ref="else"/>
+            </xs:sequence>
+            <xs:attributeGroup ref="attlist.if-has-permission"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.if-has-permission">
+        <xs:attribute type="xs:string" name="permission" use="required"/>
+        <xs:attribute type="xs:string" name="action"/>
+    </xs:attributeGroup>
+    <xs:element name="check-permission" substitutionGroup="IfOtherOperations">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element minOccurs="0" maxOccurs="1" ref="accept-userlogin-party"/>
+                <xs:element minOccurs="0" maxOccurs="unbounded" ref="alt-permission"/>
+                <xs:choice>
+                    <xs:element ref="fail-message"/>
+                    <xs:element ref="fail-property"/>
+                </xs:choice>
+            </xs:sequence>
+            <xs:attributeGroup ref="attlist.check-permission"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.check-permission">
+        <xs:attribute type="xs:string" name="permission" use="required"/>
+        <xs:attribute type="xs:string" name="action"/>
+        <xs:attribute type="xs:string" name="error-list-name" default="error_list"/>
+    </xs:attributeGroup>
+    <xs:element name="accept-userlogin-party">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.accept-userlogin-party"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.accept-userlogin-party">
+        <xs:attribute type="xs:string" name="party-id-env-name" default="partyId"/>
+    </xs:attributeGroup>
+    <xs:element name="alt-permission">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.alt-permission"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.alt-permission">
+        <xs:attribute type="xs:string" name="permission" use="required"/>
+        <xs:attribute type="xs:string" name="action"/>
+    </xs:attributeGroup>
+    <xs:element name="check-id" substitutionGroup="IfOtherOperations">
+        <xs:complexType>
+            <xs:choice minOccurs="0">
+                <xs:element ref="fail-message"/>
+                <xs:element ref="fail-property"/>
+            </xs:choice>
+            <xs:attributeGroup ref="attlist.check-id"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.check-id">
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="error-list-name" default="error_list"/>
+    </xs:attributeGroup>
+    <!-- the "Other" Operations -->
+    <xs:element name="log" substitutionGroup="OtherOperations">
+        <xs:complexType>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+                <xs:element ref="field"/>
+                <xs:element ref="string"/>
+            </xs:choice>
+            <xs:attributeGroup ref="attlist.log"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.log">
+        <xs:attribute name="level" use="required">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="verbose"/>
+                    <xs:enumeration value="timing"/>
+                    <xs:enumeration value="info"/>
+                    <xs:enumeration value="important"/>
+                    <xs:enumeration value="warning"/>
+                    <xs:enumeration value="error"/>
+                    <xs:enumeration value="fatal"/>
+                    <xs:enumeration value="always"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute type="xs:string" name="message"/>
+    </xs:attributeGroup>
+    <xs:element name="now-timestamp-to-env" substitutionGroup="OtherOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.now-timestamp-to-env"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.now-timestamp-to-env">
+        <xs:attribute type="xs:string" name="env-name" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="now-date-to-env" substitutionGroup="OtherOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.now-date-to-env"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.now-date-to-env">
+        <xs:attribute type="xs:string" name="env-name" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="property-to-field" substitutionGroup="OtherOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.property-to-field"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.property-to-field">
+        <xs:attribute type="xs:string" name="resource" use="required"/>
+        <xs:attribute type="xs:string" name="property" use="required"/>
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+        <xs:attribute type="xs:string" name="default"/>
+        <xs:attribute name="no-locale" default="false">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute type="xs:string" name="arg-list-name"/>
+    </xs:attributeGroup>
+    <xs:element name="set-current-user-login" substitutionGroup="OtherOperations">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.set-current-user-login"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.set-current-user-login">
+        <xs:attribute type="xs:string" name="value-name" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="calculate" substitutionGroup="OtherOperations">
+        <xs:complexType>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+                <xs:element ref="calcop"/>
+                <xs:element ref="number"/>
+            </xs:choice>
+            <xs:attributeGroup ref="attlist.calculate"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.calculate">
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="field-name" use="required"/>
+        <xs:attribute name="type" default="Double">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="String"/>
+                    <xs:enumeration value="Double"/>
+                    <xs:enumeration value="Float"/>
+                    <xs:enumeration value="Long"/>
+                    <xs:enumeration value="Integer"/>
+                    <xs:enumeration value="BigDecimal"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute name="rounding-mode" default="HalfEven">
+            <xs:annotation><xs:documentation>Rounding mode for BigDecimal calculation, primarily for divide operation.</xs:documentation></xs:annotation>
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="Ceiling"><xs:annotation><xs:documentation>Rounding mode to round towards positive infinity</xs:documentation></xs:annotation></xs:enumeration>
+                    <xs:enumeration value="Floor"><xs:annotation><xs:documentation>Rounding mode to round towards negative infinity</xs:documentation></xs:annotation></xs:enumeration>
+                    <xs:enumeration value="Up"><xs:annotation><xs:documentation>Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round up</xs:documentation></xs:annotation></xs:enumeration>
+                    <xs:enumeration value="Down"><xs:annotation><xs:documentation>Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round down</xs:documentation></xs:annotation></xs:enumeration>
+                    <xs:enumeration value="HalfUp"><xs:annotation><xs:documentation>Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round up</xs:documentation></xs:annotation></xs:enumeration>
+                    <xs:enumeration value="HalfDown"><xs:annotation><xs:documentation>Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round down</xs:documentation></xs:annotation></xs:enumeration>
+                    <xs:enumeration value="HalfEven"><xs:annotation><xs:documentation>Rounding mode to round towards the "nearest neighbor" unless both neighbors are equidistant, in which case, round towards the even neighbor</xs:documentation></xs:annotation></xs:enumeration>
+                    <xs:enumeration value="Unnecessary"><xs:annotation><xs:documentation>Rounding mode to assert that the requested operation has an exact result, hence no rounding is necessary</xs:documentation></xs:annotation></xs:enumeration>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute type="xs:string" name="decimal-scale" default="2">
+            <xs:annotation><xs:documentation>Initial scale to use for the internal BigDecimal. Defaults to 2 for monetary calculations.</xs:documentation></xs:annotation>
+        </xs:attribute>
+        <xs:attribute type="xs:string" name="decimal-format"/>
+    </xs:attributeGroup>
+    <xs:element name="calcop">
+        <xs:complexType>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+                <xs:element ref="calcop"/>
+                <xs:element ref="number"/>
+            </xs:choice>
+            <xs:attributeGroup ref="attlist.calcop"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.calcop">
+        <xs:attribute name="operator" use="required">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="get"/>
+                    <xs:enumeration value="add"/>
+                    <xs:enumeration value="subtract"/>
+                    <xs:enumeration value="multiply"/>
+                    <xs:enumeration value="divide"/>
+                    <xs:enumeration value="negative"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute type="xs:string" name="map-name"/>
+        <xs:attribute type="xs:string" name="field-name"/>
+    </xs:attributeGroup>
+    <xs:element name="number">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.number"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.number">
+        <xs:attribute type="xs:string" name="value" use="required"/>
+    </xs:attributeGroup>
+    <!--
+        ======================================================
+        ========== The Simple Map Processor Section ==========
+        ======================================================
+    -->
+    <xs:element name="simple-map-processors">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element maxOccurs="unbounded" ref="simple-map-processor"/>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="simple-map-processor">
+        <xs:annotation>
+            <xs:documentation>
+            The Simple Map Processor Mini-Language performes two primary tasks: validation and conversion. 
+            It does this in a context of moving values from one Map to another. 
+            The input map will commonly contain Strings, but can contain other object types like Integer, Long, Float, Double, java.sql.Date, Time, and Timestamp.
+            </xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element minOccurs="0" maxOccurs="unbounded" ref="make-in-string"/>
+                <xs:element minOccurs="0" maxOccurs="unbounded" ref="process"/>
+            </xs:sequence>
+            <xs:attributeGroup ref="attlist.simple-map-processor"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.simple-map-processor">
+        <xs:attribute type="xs:string" name="name" use="required"/>
+    </xs:attributeGroup>
+    <!-- Make In String & Operations -->
+    <xs:element name="make-in-string">
+        <xs:annotation>
+            <xs:documentation>
+                In addition to dealing with the fields already in the incoming Map you can build Strings and add them to the in-Map before the processing begins with the make-in-string tag. 
+                You can have zero or many make-in-string tags, and they must all come before the process tags. 
+                Inside each make-in-string is a list of snippets to concatenate together to make the final String. 
+                Each snippet can be another field in the in-Map (in-field element), a value from a properties file (property element), or a constant (constant element).
+            </xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+                <xs:element ref="in-field"/>
+                <xs:element ref="property"/>
+                <xs:element ref="constant"/>
+            </xs:choice>
+            <xs:attributeGroup ref="attlist.make-in-string"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.make-in-string">
+        <xs:attribute type="xs:string" name="field" use="required"/>
+    </xs:attributeGroup>
+    <xs:element name="in-field">
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.in-field"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.in-field">
+        <xs:attribute type="xs:string" name="field" use="required"/>
+    </xs:attributeGroup>

[... 262 lines stripped ...]