﻿<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid Studio (http://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="Doc">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Project">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Title" type="xs:string" />
                            <xs:element name="Description" type="xs:string" />
                            <xs:element name="AppVersion" type="xs:string">
                                <xs:annotation>
                                    <xs:documentation>The version of Liquid Studio used to create the file</xs:documentation>
                                </xs:annotation>
                            </xs:element>
                            <xs:element name="Parameter">
                                <xs:annotation>
                                    <xs:documentation>Project Properties (for custom values)</xs:documentation>
                                </xs:annotation>
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:string">
                                            <xs:attribute name="name" type="xs:string" />
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="SchemaItem" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:choice>
                                <xs:sequence>
                                    <xs:element name="Type" minOccurs="0">
                                        <xs:complexType>
                                            <xs:sequence>
                                                <xs:element ref="ItemRef" />
                                            </xs:sequence>
                                        </xs:complexType>
                                    </xs:element>
                                    <xs:element name="MinOccurs" type="xs:string" minOccurs="0" />
                                    <xs:element name="MaxOccurs" type="xs:string" minOccurs="0" />
                                    <xs:element name="Abstract" type="xs:boolean" minOccurs="0" />
                                    <xs:element name="ContentType" type="xs:string" minOccurs="0" />
                                    <xs:element name="Default" type="xs:string" minOccurs="0" />
                                    <xs:element name="Fixed" type="xs:string" minOccurs="0" />
                                    <xs:element name="Form" type="xs:string" minOccurs="0" />
                                    <xs:element name="SubstitutionGroup" minOccurs="0">
                                        <xs:complexType>
                                            <xs:sequence>
                                                <xs:element ref="ItemRef" />
                                            </xs:sequence>
                                        </xs:complexType>
                                    </xs:element>
                                    <xs:element name="Use" type="xs:string" minOccurs="0" />
                                    <xs:sequence>
                                        <xs:element name="Length" type="xs:string" minOccurs="0" />
                                        <xs:element name="MaxExclusive" type="xs:string" minOccurs="0" />
                                        <xs:element name="MaxInclusive" type="xs:string" minOccurs="0" />
                                        <xs:element name="MaxLength" type="xs:string" minOccurs="0" />
                                        <xs:element name="MinExclusive" type="xs:string" minOccurs="0" />
                                        <xs:element name="MinInclusive" type="xs:string" minOccurs="0" />
                                        <xs:element name="MinLength" type="xs:string" minOccurs="0" />
                                        <xs:element name="Pattern" type="xs:string" minOccurs="0" />
                                        <xs:element name="TotalDigits" type="xs:string" minOccurs="0" />
                                        <xs:element name="Whitespace" type="xs:string" minOccurs="0" />
                                        <xs:element name="Enumerations" minOccurs="0">
                                            <xs:complexType>
                                                <xs:sequence>
                                                    <xs:element name="Value" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
                                                </xs:sequence>
                                            </xs:complexType>
                                        </xs:element>
                                    </xs:sequence>
                                </xs:sequence>
                                <xs:element name="ElementReference">
                                    <xs:complexType>
                                        <xs:sequence>
                                            <xs:element ref="ItemRef" />
                                        </xs:sequence>
                                    </xs:complexType>
                                </xs:element>
                                <xs:element name="AttributeReference">
                                    <xs:complexType>
                                        <xs:sequence>
                                            <xs:element ref="ItemRef" />
                                        </xs:sequence>
                                    </xs:complexType>
                                </xs:element>
                            </xs:choice>
                            <xs:element name="Annotation" type="xs:string" minOccurs="0" />
                            <xs:element name="Diagram" minOccurs="0">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="HitRect" minOccurs="0" maxOccurs="unbounded">
                                            <xs:complexType>
                                                <xs:sequence>
                                                    <xs:element ref="ItemRef" />
                                                </xs:sequence>
                                                <xs:attribute name="top" type="xs:int" use="required" />
                                                <xs:attribute name="left" type="xs:int" use="required" />
                                                <xs:attribute name="bottom" type="xs:int" use="required" />
                                                <xs:attribute name="right" type="xs:int" use="required" />
                                            </xs:complexType>
                                        </xs:element>
                                    </xs:sequence>
                                    <xs:attribute name="filename" type="xs:string" use="required" />
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="Code" type="xs:anyType" minOccurs="0" />
                            <xs:choice minOccurs="0" maxOccurs="unbounded">
                                <xs:element name="Attribute">
                                    <xs:annotation>
                                        <xs:documentation>Group Attribute and AttributeAny in the same table
</xs:documentation>
                                    </xs:annotation>
                                    <xs:complexType>
                                        <xs:sequence>
                                            <xs:element name="Name" type="xs:string" />
                                            <xs:element ref="ItemRef" />
                                            <xs:element name="Default" type="xs:string" minOccurs="0" />
                                            <xs:element name="Use" type="xs:string" />
                                        </xs:sequence>
                                    </xs:complexType>
                                </xs:element>
                                <xs:element name="AttributeAny">
                                    <xs:complexType>
                                        <xs:sequence>
                                            <xs:element name="Namespace" type="xs:string">
                                                <xs:annotation>
                                                    <xs:documentation>May not match any of namespaces defined in this file</xs:documentation>
                                                </xs:annotation>
                                            </xs:element>
                                        </xs:sequence>
                                    </xs:complexType>
                                </xs:element>
                            </xs:choice>
                            <xs:choice minOccurs="0" maxOccurs="unbounded">
                                <xs:element name="ChildElement">
                                    <xs:complexType>
                                        <xs:sequence>
                                            <xs:element name="Name" type="xs:string" />
                                            <xs:element ref="ItemRef" />
                                            <xs:element name="MinOccurs" type="xs:string" minOccurs="0" />
                                            <xs:element name="MaxOccurs" type="xs:string" minOccurs="0" />
                                        </xs:sequence>
                                    </xs:complexType>
                                </xs:element>
                                <xs:element name="ChildAny">
                                    <xs:complexType>
                                        <xs:sequence>
                                            <xs:element name="NamespaceRestriction" type="xs:string" />
                                            <xs:element name="MinOccurs" type="xs:string" minOccurs="0" />
                                            <xs:element name="MaxOccurs" type="xs:string" minOccurs="0" />
                                        </xs:sequence>
                                    </xs:complexType>
                                </xs:element>
                                <xs:element name="ChildGroup">
                                    <xs:annotation>
                                        <xs:documentation>A reference to an group
Can be found using //Docs/SchemaItem[itemType='Group' and id=value)</xs:documentation>
                                    </xs:annotation>
                                    <xs:complexType>
                                        <xs:sequence>
                                            <xs:element ref="ItemRef" />
                                            <xs:element name="MinOccurs" type="xs:string" minOccurs="0" />
                                            <xs:element name="MaxOccurs" type="xs:string" minOccurs="0" />
                                        </xs:sequence>
                                    </xs:complexType>
                                </xs:element>
                            </xs:choice>
                            <xs:element name="BaseType" minOccurs="0">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element ref="ItemRef" />
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="SuperType" minOccurs="0" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element ref="ItemRef" />
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="Reference" minOccurs="0" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element ref="ItemRef" />
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="WriteLiquidLink" type="xs:boolean" />
                        </xs:sequence>
                        <xs:attribute name="id" type="xs:string" use="required">
                            <xs:annotation>
                                <xs:documentation>A unique ID for the schema item (it is also safe to use this as a filename)</xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                        <xs:attribute name="schemaID" type="xs:string">
                            <xs:annotation>
                                <xs:documentation>The id of the schema that this SchemaItem belongs to
</xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                        <xs:attribute name="name" type="xs:string" use="required">
                            <xs:annotation>
                                <xs:documentation>The actual name of the schema item as it appears in the schema</xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                        <xs:attribute name="namespace" type="xs:string">
                            <xs:annotation>
                                <xs:documentation>(optional) the namespace of the schema item, this can be cross referenced with the namespace of a SchemaItem of type Namespace.</xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                        <xs:attribute name="itemType" type="SchemItemType" use="required" />
                        <xs:attribute name="isRootItem" type="xs:boolean" use="required" />
                        <xs:attribute name="version" type="xs:string">
                            <xs:annotation>
                                <xs:documentation>(optional) the version of the schema (only valid if itemType = 'Schema'
</xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                        <xs:attribute name="targetNamespace" type="xs:string">
                            <xs:annotation>
                                <xs:documentation>(optional) the version of the schema (only valid if itemType = 'Namespace'</xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                        <xs:attribute name="prefix" type="xs:string">
                            <xs:annotation>
                                <xs:documentation>(optional) the version of the schema (only valid if itemType = 'Namespace'</xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="ItemRef">
        <xs:annotation>
            <xs:documentation>This contains either
  id - which can be looked up against /Docs/SchemaItem[@id = value]
  name - this is text only (no link)
  namespace - this is text for the namespace (no link)

The valid state is 
id | name [namespace]

When rendering links resolved from an id, the schema item may or may not have a namespace.
If a namespace is present it should be rendered prefix:name. The prefix can be looked up
by resolving the schemaItem's namespace attribute where /Docs/SchemaItem[@targetNamespace = value and itemType = 'Namespace']</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:attribute name="name" type="xs:string" />
            <xs:attribute name="namespace" type="xs:string" />
            <xs:attribute name="id" type="xs:string" />
        </xs:complexType>
    </xs:element>
    <xs:simpleType name="SchemItemType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Namespace" />
            <xs:enumeration value="Attribute" />
            <xs:enumeration value="AttributeGroup" />
            <xs:enumeration value="ComplexType" />
            <xs:enumeration value="Element" />
            <xs:enumeration value="Group" />
            <xs:enumeration value="Schema" />
            <xs:enumeration value="SimpleType" />
        </xs:restriction>
    </xs:simpleType>
</xs:schema>
