﻿<?xml version="1.0" encoding="utf-8"?>
<!--
   ice.NET Platform

   Copyright (c) PDTec AG. All rights reserved.
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    
    <xs:include schemaLocation="icequery.xsd"/>
    
    <xs:element name="BoBuild">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Options" minOccurs="0" maxOccurs="1">
                    <xs:complexType>
						<xs:attribute name="SuppressDetailedVersion" type="xs:boolean"/>
						<xs:attribute name="StrictCardinalities" type="xs:boolean"/>
					</xs:complexType>
                </xs:element>
                <xs:element name="Packages" minOccurs="0" maxOccurs="1">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Package" minOccurs="0" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="ObjType" minOccurs="0" maxOccurs="unbounded">
                                            <xs:complexType>
                                                <xs:sequence>
                                                    <xs:element name="RelProperty" minOccurs="0" maxOccurs="unbounded">
                                                        <xs:complexType>
                                                            <xs:attribute name="RelTypeName" type="xs:string" use="required" />
                                                            <xs:attribute name="RelDirection" type="RelDirection" use="required" />
                                                            <xs:attribute name="PropertyName" type="xs:string" use="required" />
                                                        </xs:complexType>
                                                    </xs:element>
                                                </xs:sequence>
                                                <xs:attribute name="Name" type="xs:string" />
                                                <xs:attribute name="ItfNamespace" type="xs:string" />
                                                <xs:attribute name="ItfName" type="xs:string" />
                                                <xs:attribute name="Events" type="xs:string" />
                                            </xs:complexType>
                                        </xs:element>
                                    </xs:sequence>
                                    <xs:attribute name="Name" type="xs:string" />
									<xs:attribute name="ConstantsName" type="xs:string" />
									<xs:attribute name="ConstantsPrefix" type="xs:string" />
									<xs:attribute name="Implement" type="xs:boolean" />
                                    <xs:attribute name="ItfNamespace" type="xs:string" />
                                    <xs:attribute name="ImplNamespace" type="xs:string" />
                                    <xs:attribute name="ItfTargetDir" type="xs:string" />
                                    <xs:attribute name="ImplTargetDir" type="xs:string" />
                                    <xs:attribute name="ModelFile" type="xs:string" />
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute name="Dir" type="xs:string" />
                    </xs:complexType>
                </xs:element>
                <xs:element name="Constants" minOccurs="0" maxOccurs="1">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Folders" minOccurs="0" maxOccurs="1">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="Folder" minOccurs="0" maxOccurs="unbounded">
                                            <xs:complexType>
                                                <xs:attribute name="Name" type="xs:string" use="required" />
                                                <xs:attribute name="Key" type="xs:string" use="required"/>
                                            </xs:complexType>
                                        </xs:element>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="Objects" minOccurs="0" maxOccurs="1">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="Object" minOccurs="0" maxOccurs="unbounded">
                                            <xs:complexType>
                                                <xs:attribute name="Name" type="xs:string" use="required" />
                                                <xs:attribute name="Key" type="xs:string" use="required" />
                                            </xs:complexType>
                                        </xs:element>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="Profiles" minOccurs="0" maxOccurs="1">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="Profile" minOccurs="0" maxOccurs="unbounded">
                                            <xs:complexType>
                                                <xs:attribute name="Name" type="xs:string" use="required"/>
                                                <xs:attribute name="Value" type="xs:string" use="required"/>
                                            </xs:complexType>
                                        </xs:element>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute name="Namespace" type="xs:string" />
                        <xs:attribute name="TargetDir" type="xs:string" />
                        <xs:attribute name="ClassName" type="xs:string" />
                    </xs:complexType>
                </xs:element>
                <xs:element name="Queries" minOccurs="0" maxOccurs="1">
                    <xs:complexType>
                    	<xs:choice minOccurs="0" maxOccurs="unbounded">
                            <xs:element name="JoinQuery" type="JoinQuery" />
                            <xs:element name="ExpandQuery" type="ExpandQuery" />
                            <xs:element name="FindQuery" type="FindQuery" />
                        </xs:choice>
                        <xs:attribute name="Namespace" type="xs:string" />
                        <xs:attribute name="TargetDir" type="xs:string" />
                        <xs:attribute name="SrcFileName" type="xs:string" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
            <xs:attribute name="TargetDir" type="xs:string" />
        </xs:complexType>
    </xs:element>
	
</xs:schema>