## Copyright 2002-2004 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.
##
## Database template used by the sample XmlBeans Velocity integration.
## Using the SchemaTypeSystem of XmlBeans this template produces an 
## Jakarta commons-sql datamodel.xml file.
## This template expoits the SchemaTypeSystem XmlBeans object
## present in the Velocity context using the $xsd identifier.
<?xml version="1.0" encoding="UTF-8"?>

<database name="sample">

    <!-- Global Elements -->
#foreach($global in $xsd.globalElements())## SchemaGlobalElement[]

    <!-- Table $global.name -->
    <table name="$global.name.localPart.toUpperCase()">

    #set($global = $global.type)
    #parse("global.vm")

    </table>
#end

    <!-- Global Types -->
#foreach($global in $xsd.globalTypes())## SchemaType[]

    <!-- Table $global.name -->
    <table name="$global.name.localPart.toUpperCase()">

    #parse("global.vm")

    </table>
#end

</database>
