<?xml version="1.0" ?>
<schema targetNamespace="http://www.mozilla.org/schema/test"
        xmlns:test="http://www.mozilla.org/schema/test"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
        attributeFormDefault="qualified"
        xmlns="http://www.w3.org/2001/XMLSchema">

  <import namespace="http://www.mozilla.org/schema/test_imported" schemaLocation="schema_imported.xsd" />

  <simpleType name="integer-test-1">
    <restriction base='integer'>
      <totalDigits value="3"/>
      <maxExclusive value="101"/>
      <minExclusive value="5"/>
    </restriction>
  </simpleType>

  <simpleType name="integer-test-2">
    <restriction base='integer'>
      <totalDigits value="3"/>
      <maxInclusive value="2"/>
      <minInclusive value="-40"/>
    </restriction>
  </simpleType>

  <simpleType name="nonPositiveInteger-test-1">
    <restriction base='nonPositiveInteger'>
      <totalDigits value="3"/>
    </restriction>
  </simpleType>

  <simpleType name="nonNegativeInteger-test-1">
    <restriction base='nonNegativeInteger'>
      <totalDigits value="3" />
      <maxInclusive value="500" />
    </restriction>
  </simpleType>

  <simpleType name="positiveInteger-test-1">
    <restriction base='positiveInteger'>
      <totalDigits value="3"/>
    </restriction>
  </simpleType>

  <simpleType name="negativeInteger-test-1">
    <restriction base='negativeInteger'>
      <totalDigits value="3"/>
    </restriction>
  </simpleType>

  <simpleType name='long-test-1'>
    <restriction base='long'>
    </restriction>
  </simpleType>

  <simpleType name='int-test-1'>
    <restriction base='int'>
    </restriction>
  </simpleType>

  <simpleType name='short-test-1'>
    <restriction base='short'>
    </restriction>
  </simpleType>
          
  <simpleType name='unsignedLong-test-1'>
    <restriction base='unsignedLong'>
    </restriction>
  </simpleType>

  <simpleType name='unsignedInt-test-1'>
    <restriction base='unsignedInt'>
    </restriction>
  </simpleType>

  <simpleType name='unsignedShort-test-1'>
    <restriction base='unsignedShort'>
    </restriction>
  </simpleType>

  <simpleType name='unsignedByte-test-1'>
    <restriction base='unsignedByte'>
    </restriction>
  </simpleType>

  <simpleType name="byte-test-1">
    <restriction base='byte'>
    </restriction>
  </simpleType>

  <simpleType name="byte-test-2">
    <restriction base='byte'>
      <totalDigits value="2"/>
      <maxExclusive value="40"/>
      <minExclusive value="-40"/>
    </restriction>
  </simpleType>

  <simpleType name="byte-test-3">
    <restriction base='byte'>
      <maxInclusive value="40"/>
      <minInclusive value="-40"/>
    </restriction>
  </simpleType>

  <simpleType name="float-test-1">
    <restriction base='float'>
      <maxExclusive value="3.34"/>
      <minExclusive value="0.98"/>
    </restriction>
  </simpleType>

  <simpleType name="float-test-2">
    <restriction base='float'>
      <maxInclusive value="3.34"/>
      <minInclusive value="-1.98"/>
    </restriction>
  </simpleType>

  <simpleType name="float-test-3">
    <restriction base="float">
      <maxExclusive value="INF" />
      <minInclusive value="-INF" />
    </restriction>
  </simpleType>

  <simpleType name="double-test-1">
    <restriction base='double'>
      <maxExclusive value="3.34"/>
      <minExclusive value="0.98"/>
    </restriction>
  </simpleType>

  <simpleType name="double-test-2">
    <restriction base='double'>
      <maxInclusive value="3.34E45"/>
      <minInclusive value="1.98e-13"/>
    </restriction>
  </simpleType>

  <simpleType name="double-test-3">
    <restriction base="double">
    </restriction>
  </simpleType>

  <simpleType name="double-test-4">
    <restriction base="double">
      <maxExclusive value="INF" />
      <minInclusive value="-INF" />
    </restriction>
  </simpleType>

  <simpleType name="decimal-test-1">
    <restriction base='decimal'>
    </restriction>
  </simpleType>

  <simpleType name="decimal-test-2">
    <restriction base='decimal'>
      <maxExclusive value="220.343435"/>
      <minExclusive value="100.34"/>
    </restriction>
  </simpleType>


  <simpleType name="decimal-test-3">
    <restriction base='decimal'>
      <maxInclusive value="220.343435"/>
      <minInclusive value="100.34"/>
    </restriction>
  </simpleType>

  <simpleType name="decimal-test-4">
    <restriction base='decimal'>
      <totalDigits value="3"/>
      <fractionDigits value="2"/>
    </restriction>
  </simpleType>

  <simpleType name="string-test-1">
    <restriction base='string'>
      <length value="5"/>
    </restriction>
  </simpleType>

  <simpleType name="string-test-2">
    <restriction base='string'>
      <minLength value="4"/>
      <maxLength value="17"/>
    </restriction>
  </simpleType>

  <simpleType name="string-test-3">
    <restriction base='string'>
      <enumeration value="test"/>
      <enumeration value="test2"/>
    </restriction>
  </simpleType>

  <simpleType name="boolean-test-1">
    <restriction base='boolean'>
    </restriction>
  </simpleType>

  <simpleType name="gday-test-1">
    <restriction base='gDay'>
    </restriction>
  </simpleType>

  <simpleType name="gday-test-2">
    <restriction base='gDay'>
      <maxExclusive value="---21"/>
      <minExclusive value="---05"/>
    </restriction>
  </simpleType>

  <simpleType name="gday-test-3">
    <restriction base='gDay'>
      <maxInclusive value="---21Z"/>
      <minInclusive value="---05"/>
    </restriction>
  </simpleType>

  <simpleType name="gmonth-test-1">
    <restriction base='gMonth'>
    </restriction>
  </simpleType>

  <simpleType name="gmonth-test-2">
    <restriction base='gMonth'>
      <maxExclusive value="--11Z"/>
      <minExclusive value="--05"/>
    </restriction>
  </simpleType>

  <simpleType name="gmonth-test-3">
    <restriction base='gMonth'>
      <maxInclusive value="--11"/>
      <minInclusive value="--05"/>
    </restriction>
  </simpleType>

  <simpleType name="gyear-test-1">
    <restriction base='gYear'>
    </restriction>
  </simpleType>

  <simpleType name="gyear-test-2">
    <restriction base='gYear'>
      <maxInclusive value="10000"/>
      <minInclusive value="1900"/>
    </restriction>
  </simpleType>

  <simpleType name="gyear-test-3">
    <restriction base='gYear'>
      <maxExclusive value="10000"/>
      <minExclusive value="1900"/>
    </restriction>
  </simpleType>

  <simpleType name="gyearmonth-test-1">
    <restriction base='gYearMonth'>
    </restriction>
  </simpleType>

  <simpleType name="gyearmonth-test-2">
    <restriction base='gYearMonth'>
      <maxExclusive value="10000-11Z"/>
      <minExclusive value="1990-01Z"/>
    </restriction>
  </simpleType>

  <simpleType name="gyearmonth-test-3">
    <restriction base='gYearMonth'>
      <maxInclusive value="10000-11Z"/>
      <minInclusive value="1990-02Z"/>
    </restriction>
  </simpleType>

  <simpleType name="gmonthday-test-1">
    <restriction base='gMonthDay'>
    </restriction>
  </simpleType>

  <simpleType name="gmonthday-test-2">
    <restriction base='gMonthDay'>
      <maxExclusive value="--08-03Z"/>
      <minExclusive value="--02-21Z"/>
    </restriction>
  </simpleType>

  <simpleType name="gmonthday-test-3">
    <restriction base='gMonthDay'>
      <maxInclusive value="--08-03Z"/>
      <minInclusive value="--02-21Z"/>
    </restriction>
  </simpleType>

  <simpleType name="datetime-test-1">
    <restriction base='dateTime'>
    </restriction>
  </simpleType>

  <simpleType name="datetime-test-2">
    <restriction base='dateTime'>
      <maxExclusive value="2004-02-18T12:21:03Z"/>
      <minExclusive value="2001-02-18T12:21:03Z"/>
    </restriction>
  </simpleType>

  <simpleType name="datetime-test-3">
    <restriction base='dateTime'>
      <maxInclusive value="2004-02-18T12:21:03Z"/>
      <minInclusive value="2001-02-18T12:21:03Z"/>
    </restriction>
  </simpleType>

  <simpleType name="date-test-1">
    <restriction base='date'>
    </restriction>
  </simpleType>

  <simpleType name="date-test-2">
    <restriction base='date'>
      <maxExclusive value="2004-02-18"/>
      <minExclusive value="2001-02-18"/>
    </restriction>
  </simpleType>

  <simpleType name="date-test-3">
    <restriction base='date'>
      <maxInclusive value="2004-02-18"/>
      <minInclusive value="2001-02-18"/>
    </restriction>
  </simpleType>

  <simpleType name="time-test-1">
    <restriction base='time'>
    </restriction>
  </simpleType>

  <simpleType name="time-test-2">
    <restriction base='time'>
      <minExclusive value="12:30:45"/>
      <maxExclusive value="22:30:45"/>
    </restriction>
  </simpleType>

  <simpleType name="time-test-3">
    <restriction base='time'>
      <minInclusive value="12:30:45"/>
      <maxInclusive value="22:30:45"/>
    </restriction>
  </simpleType>

  <simpleType name="duration-test-1">
    <restriction base='duration'>
    </restriction>
  </simpleType>

  <simpleType name="duration-test-2">
    <restriction base='duration'>
      <maxExclusive value="P5M"/>
      <minExclusive value="P1M"/>
    </restriction>
  </simpleType>

  <simpleType name="duration-test-3">
    <restriction base='duration'>
      <maxInclusive value="P5M"/>
      <minInclusive value="P1M"/>
    </restriction>
  </simpleType>

  <simpleType name="anyuri-test-1">
    <restriction base='anyURI'>
    </restriction>
  </simpleType>

  <simpleType name="anyuri-test-2">
    <restriction base='anyURI'>
      <maxLength value="50"/>
      <minLength value="17"/>
    </restriction>
  </simpleType>

  <simpleType name="anyuri-test-3">
    <restriction base='anyURI'>
      <length value="17"/>
    </restriction>
  </simpleType>

  <simpleType name="base64-test-1">
    <restriction base='base64Binary'>
    </restriction>
  </simpleType>

  <simpleType name="base64-test-2">
    <restriction base='base64Binary'>
      <length value="14"/>
    </restriction>
  </simpleType>

  <simpleType name="base64-test-3">
    <restriction base='base64Binary'>
      <maxLength value="14"/>
      <minLength value="3"/>
    </restriction>
  </simpleType>

  <simpleType name="hexbinary-test-1">
    <restriction base='hexBinary'>
    </restriction>
  </simpleType>

  <simpleType name="qname-test-1">
    <restriction base='QName'>
      <maxLength value="13"/>
      <minLength value="3"/>
    </restriction>
  </simpleType>

  <simpleType name="name-test-1">
    <restriction base='Name'>
      <maxLength value="13"/>
      <minLength value="3"/>
    </restriction>
  </simpleType>

  <simpleType name="ncname-test-1">
    <restriction base='NCName'>
      <maxLength value="13"/>
      <minLength value="3"/>
    </restriction>
  </simpleType>

  <simpleType name="id-test-1">
    <restriction base='ID'>
      <maxLength value="13"/>
      <minLength value="3"/>
    </restriction>
  </simpleType>

  <simpleType name="idref-test-1">
    <restriction base='IDREF'>
      <maxLength value="13"/>
      <minLength value="3"/>
    </restriction>
  </simpleType>

  <simpleType name="idrefs-test-1">
    <restriction base='IDREFS'>
      <maxLength value="13"/>
      <minLength value="3"/>
    </restriction>
  </simpleType>

  <simpleType name="nmtoken-test-1">
    <restriction base='NMTOKEN'>
      <maxLength value="13"/>
      <minLength value="3"/>
    </restriction>
  </simpleType>

  <simpleType name="nmtokens-test-1">
    <restriction base='NMTOKENS'>
      <maxLength value="13"/>
      <minLength value="3"/>
    </restriction>
  </simpleType>

  <simpleType name='better-us-zipcode'>
    <restriction base='string'>
      <pattern value='[0-9]{5}(-[0-9]{4})?'/>
    </restriction>
  </simpleType>

  <simpleType name="list-test-1">
    <list itemType="boolean"/>
  </simpleType>

  <simpleType name="list-test-2">
    <list>
      <simpleType>
        <restriction base="integer">
          <enumeration value="100" />
          <enumeration value="4" />
          <enumeration value="33" />
        </restriction>
      </simpleType>
    </list>
  </simpleType>

  <simpleType name="union-test-1">
    <union>
      <simpleType>
        <restriction base="integer"/>
      </simpleType>
      <simpleType>
        <restriction base="string">
          <enumeration value="N/A"/>
        </restriction>
      </simpleType>
    </union>
  </simpleType>

  <simpleType name="TypeCode">
    <restriction base="test:UrType">
      <enumeration value="Applicanter"/>
      <enumeration value="Applicant"/>
      <enumeration value="Third_Party"/>
      <enumeration value="Trustee"/>
      <maxLength value="50"/>
    </restriction>
  </simpleType>

  <simpleType name="UrType">
    <restriction base="string">
    </restriction>
  </simpleType>

  <simpleType name="IndividualRole">
    <restriction base="test:TypeCode">
      <enumeration value="Applicant"/>
      <enumeration value="Third_Party"/>
      <enumeration value="Trustee"/>
    </restriction>
  </simpleType>

  <simpleType name='IndividualRoleList'>
    <list itemType='test:IndividualRole'/>
  </simpleType>

  <simpleType name='IndividualRoleListType'>
    <restriction base='test:IndividualRoleList'>
      <maxLength value='4'/>
    </restriction>
  </simpleType>

  <simpleType name='IndividualRoleListType2'>
    <restriction base='test:IndividualRoleList'>
      <length value='4'/>
    </restriction>
  </simpleType>

  <simpleType name='IndividualRoleListType3'>
    <restriction base='test:IndividualRoleList'>
      <minLength value='4'/>
    </restriction>
  </simpleType>

  <simpleType name="RoleUnion">
    <union>
      <simpleType>
        <restriction base="test:IndividualRoleListType"/>
      </simpleType>
      <simpleType>
        <restriction base="string">
          <enumeration value="N/A"/>
        </restriction>
      </simpleType>
      <simpleType>
        <restriction base="string">
          <maxLength value="4"/>
        </restriction>
      </simpleType>
    </union>
  </simpleType>

  <simpleType name='IndividualRoleListType5'>
    <restriction base='test:IndividualRoleList'>
      <enumeration value='Applicant Trustee'/>
    </restriction>
  </simpleType>

  <!-- complex types -->
	<element name="foo" type="test:duration-test-2"/>


  <attributeGroup name="attrgroup-1">
    <attribute name="id" type="string" form="unqualified"/>
  </attributeGroup>

  <element name="transaction">
    <complexType>
      <sequence minOccurs="0">
        <element name="date" type="date"/>
        <element name="desc" type="string"/>
        <element name="withdraw" type="boolean"/>
        <element name="amount" type="decimal"/>
      </sequence>
    </complexType>
  </element>

	<element name="balance">
		<complexType>
			<sequence>
				<element ref="test:transaction" />
			</sequence>
      <attributeGroup ref="test:attrgroup-1"/>
		</complexType>
	</element>

	<element name="balance2">
		<complexType>
			<sequence>
				<element name="transaction">
					<complexType>
						<sequence>
							<element name="date" type="date"/>
							<element name="desc" type="string"/>
							<element name="withdraw" type="boolean"/>
							<element name="amount" type="decimal" minOccurs="0"/>
						</sequence>
					</complexType>
				</element>
			</sequence>
      <attributeGroup ref="test:attrgroup-1"/>
		</complexType>
	</element>

  <element name="balance3">
		<complexType>
			<sequence>
				<element name="transaction">
					<complexType>
						<sequence>
							<element name="date" type="date"/>
							<element name="desc" type="string" minOccurs="0"/>
							<element name="withdraw" type="boolean"/>
							<element name="amount" type="decimal" minOccurs="0"/>
						</sequence>
					</complexType>
				</element>
			</sequence>
      <attributeGroup ref="test:attrgroup-1"/>
		</complexType>
	</element>

  <element name="balance4">
		<complexType>
			<sequence>
				<element name="transaction">
					<complexType>
						<sequence minOccurs="0" maxOccurs="unbounded">
							<element name="date" type="date"/>
							<element name="desc" type="string" minOccurs="0"/>
							<element name="withdraw" type="boolean"/>
							<element name="amount" type="decimal" minOccurs="0"/>
						</sequence>
					</complexType>
				</element>
			</sequence>
      <attributeGroup ref="test:attrgroup-1"/>
		</complexType>
	</element>

  <element name="balance5">
		<complexType>
			<sequence>
				<element name="transaction">
					<complexType>
						<sequence minOccurs="2" maxOccurs="4">
							<element name="date" type="date"/>
							<element name="desc" type="string" minOccurs="0"/>
							<element name="withdraw" type="boolean"/>
							<element name="amount" type="decimal" minOccurs="0"/>
						</sequence>
					</complexType>
				</element>
			</sequence>
      <attributeGroup ref="test:attrgroup-1"/>
		</complexType>
	</element>

  <element name="balance6">
		<complexType>
			<sequence>
				<element name="transaction">
					<complexType>
						<sequence>
							<element name="date" type="date"/>
							<element name="amount" type="decimal" minOccurs="0"/>
							<element name="desc" type="string" minOccurs="0" maxOccurs="3"/>
							<element name="withdraw" type="boolean"/>
							<element name="amount" type="decimal" minOccurs="0"/>
						</sequence>
					</complexType>
				</element>
			</sequence>
      <attributeGroup ref="test:attrgroup-1"/>
		</complexType>
	</element>

  <attribute name="testAttr3" type="boolean" />
  <attribute name="testAttr4" type="boolean"/>

  <element name="balance7">
		<complexType>
			<sequence>
				<element name="transaction">
					<complexType>
						<sequence>
							<element name="date" type="date"/>
							<element name="desc" type="string" minOccurs="0"/>
							<element name="withdraw" type="boolean"/>
							<element name="amount" type="decimal" minOccurs="0"/>
						</sequence>
            <attribute name="testAttr" type="boolean" use="required"/>
            <attribute name="testAttr2" type="boolean" use="optional" form="unqualified"/>
            <attribute ref="test:testAttr3" use="optional"/>
					  <attribute ref="test:testAttr4" use="required"/>
					</complexType>
				</element>
			</sequence>
      <attributeGroup ref="test:attrgroup-1"/>
		</complexType>
	</element>

  <element name="balance8">
		<complexType>
			<sequence>
				<element name="transaction">
					<complexType>
						<sequence>
							<element name="date" type="date"/>
							<element name="desc" type="string" minOccurs="0"/>
							<element name="withdraw" type="boolean"/>
							<element name="amount" type="decimal" minOccurs="0"/>
						</sequence>
					</complexType>
				</element>
				<sequence minOccurs="0" maxOccurs="unbounded">
				  <element name="name" type="string"/>
				  <element name="lastname" type="string" minOccurs="0"/>
			  </sequence>
			</sequence>
      <attributeGroup ref="test:attrgroup-1"/>
		</complexType>
	</element>

  <element name="balance9">
		<complexType>
			<sequence>
				<element name="transaction">
					<complexType>
						<sequence>
							<element name="date" type="date"/>
							<element name="desc" type="string" minOccurs="0"/>
							<element name="withdraw" type="boolean"/>
							<element name="amount" type="decimal" minOccurs="0"/>
						</sequence>
					</complexType>
				</element>
				<sequence minOccurs="0" maxOccurs="unbounded">
				  <element name="name" type="string"/>
				  <element name="lastname" type="string" minOccurs="0"/>
			  </sequence>
				<sequence>
				  <element name="test" type="string"/>
				  <element name="test2" type="string" />
			  </sequence>
			</sequence>
      <attributeGroup ref="test:attrgroup-1"/>
		</complexType>
	</element>

  <element name="balance10">
		<complexType>
			<sequence>
				<element name="transaction">
					<complexType>
						<sequence>
							<element name="date" type="date"/>
							<element name="desc" type="string" minOccurs="0"/>
							<element name="withdraw" type="boolean"/>
							<element name="amount" type="decimal" minOccurs="0"/>
						</sequence>
					</complexType>
				</element>
				<sequence minOccurs="0" maxOccurs="unbounded">
				  <element name="name" type="string"/>
				  <element name="lastname" type="string" minOccurs="0"/>
			  </sequence>
      </sequence>
      <attributeGroup ref="test:attrgroup-1"/>
		</complexType>
	</element>

  <element name="balance11">
		<complexType>
			<sequence>
				<element name="transaction">
					<complexType>
						<sequence>
							<element name="date" type="date"/>
							<element name="desc" type="string" minOccurs="0"/>
							<element name="withdraw" type="boolean"/>
							<element name="amount" type="decimal" minOccurs="0"/>
              <element name="foopy">
                <complexType>
                  <sequence minOccurs="2" maxOccurs="4">
			              <element ref="test:balance9"/>
                  </sequence>
                </complexType>
              </element>
						</sequence>
					</complexType>
				</element>
			</sequence>
      <attributeGroup ref="test:attrgroup-1"/>
		</complexType>
	</element>

  <element name="balance12">
		<complexType>
			<sequence>
				<element name="transaction">
					<complexType>
						<choice minOccurs="1" maxOccurs="3">
              <element name="amount2" type="decimal"/>
              <sequence>
							  <element name="date" type="date"/>
							  <element name="desc" type="string" minOccurs="0"/>
							  <element name="withdraw" type="boolean"/>
							  <element name="amount" type="decimal" minOccurs="0"/>
              </sequence>
						  <element name="date2" type="date"/>
						</choice>
					</complexType>
				</element>
			</sequence>
      <attributeGroup ref="test:attrgroup-1"/>
		</complexType>
	</element>

  <element name="date" type="date"/>

	<element name="balance13">
		<complexType>
			<sequence>
				<element ref="test:date"/>
			</sequence>
      <attributeGroup ref="test:attrgroup-1"/>
		</complexType>
	</element>

  <!-- Chilled -->
  <simpleType name="chilledDecimal">
    <restriction base="decimal">
      <totalDigits value="5"/>
      <fractionDigits value="2"/>
      <minInclusive value="0"/>
    </restriction>
  </simpleType>

  <simpleType name="milk">
    <restriction base="string">
      <enumeration value="full-cream"/>
      <enumeration value="semi-skimmed"/>
      <enumeration value="skimmed"/>
    </restriction>
  </simpleType>

  <simpleType name="milk2">
    <restriction base="test:milk">
      <enumeration value="full-cream"/>
    </restriction>
  </simpleType>

  <simpleType name="butter">
      <restriction base="string">
          <enumeration value="salted"/>
          <enumeration value="non-salted"/>
      </restriction>
  </simpleType>

  <element name="volume">
      <complexType>
          <simpleContent>
              <extension base="test:chilledDecimal">
                  <attribute name="uom" fixed="litres" type="string" form="unqualified"/>
              </extension>
          </simpleContent>
      </complexType>
  </element>

  <element name="weight">
    <complexType>
      <simpleContent>
        <extension base="test:chilledDecimal">
          <attribute name="uom" fixed="kg" type="string" form="unqualified"/>
        </extension>
      </simpleContent>
    </complexType>
  </element>

  <element name="fridge">
    <complexType>
      <sequence>
        <element name="contents">
          <complexType>
            <sequence>
              <element name="dairyProduce" type="test:dairy_Produce" minOccurs="0"/>
            </sequence>
          </complexType>
        </element>
      </sequence>
      <attributeGroup ref="test:attrgroup-1"/>
    </complexType>
  </element>

  <complexType name="dairy_Produce">
    <sequence>
      <element name="milk" minOccurs="1" maxOccurs="unbounded">
        <complexType>
            <sequence>
                <element ref="test:volume"/>
            </sequence>
            <attribute name="type" type="test:milk" form="unqualified"/>
            <attribute name="type2" type="test:milk2" use="optional" form="unqualified"/>
        </complexType>
      </element>
      <element name="butter" minOccurs="0" maxOccurs="unbounded">
        <complexType>
            <sequence>
                <element ref="test:weight"/>
            </sequence>
            <attribute name="type" type="test:butter" form="unqualified"/>
        </complexType>
      </element>
    </sequence>
    <attributeGroup ref="test:attrgroup-1"/>
  </complexType>

  <element name="dairy" type="test:dairy_Produce"/>

  <!-- xsd:all checks -->
  <element name="name" type="string"/>
  <element name="born" type="date"/>
  <element name="dead" type="date"/>

  <element name="author">
    <complexType>
      <all>
        <element ref="test:name"/>
        <element ref="test:born"/>
        <element ref="test:dead" minOccurs="0"/>
      </all>
      <attributeGroup ref="test:attrgroup-1"/>
    </complexType>
  </element>

  <element name="author-2">
    <complexType>
      <sequence>
        <element ref="test:author"/>
        <element ref="test:transaction"/>
      </sequence>
      <attributeGroup ref="test:attrgroup-1"/>
    </complexType>
  </element>

  <element name="author-3">
    <complexType>
      <sequence>
        <element ref="test:author" minOccurs="0"/>
        <element ref="test:transaction"/>
      </sequence>
      <attributeGroup ref="test:attrgroup-1"/>
    </complexType>
  </element>

  <element name="author-4">
    <complexType>
      <all minOccurs="0">
        <element ref="test:name"/>
        <element ref="test:born"/>
        <element ref="test:dead" minOccurs="0"/>
      </all>
      <attributeGroup ref="test:attrgroup-1"/>
    </complexType>
  </element>

  <!-- attr group -->
  <attributeGroup name="attrgroup-2">
    <attributeGroup ref="test:attrgroup-1"/>
    <attribute name="test" type="boolean" use="optional"/>
  </attributeGroup>

	<element name="balance-attrgroup-1">
		<complexType>
			<sequence>
			  <element ref="test:transaction" />
			</sequence>
             <attributeGroup ref="test:attrgroup-2"/>
		</complexType>
	</element>

  <!-- group -->
  <group name="group-1">
    <sequence>
      <element ref="test:name"/>
      <element ref="test:born"/>
      <element ref="test:dead" minOccurs="0"/>
    </sequence>
  </group>

	<element name="balance-group-1">
    <complexType>
      <sequence>
        <group ref="test:group-1" />
      </sequence>
      <attributeGroup ref="test:attrgroup-1"/>
    </complexType>
	</element>

  <!-- deriviation by extension -->
  <complexType name="deriv-base">
    <sequence>
      <element ref="test:name"/>
      <element ref="test:born"/>
    </sequence>
    <attributeGroup ref="test:attrgroup-1"/>
  </complexType>

  <complexType name="deriv-ext-type-1">
    <complexContent>
      <extension base="test:deriv-base">
        <sequence>
          <element ref="test:dead"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>

  <element name="deriv-ext-1" id="deriv-ext-1-1" type="test:deriv-ext-type-1"/>

  <!-- deriviation by restriction-->
  <complexType name="deriv-res-base">
    <sequence>
      <element ref="test:name"/>
      <element ref="test:born"/>
      <element ref="test:dead" minOccurs="0"/>
    </sequence>
    <attribute name="id" type="string" form="unqualified" use="required"/>
  </complexType>

  <element name="deriv-res-1">
    <complexType>
      <complexContent>
        <restriction base="test:deriv-res-base">
          <sequence>
            <element ref="test:name"/>
            <element ref="test:born"/>
          </sequence>
        </restriction>
      </complexContent>
    </complexType>
  </element>

  <element name="deriv-res-2">
    <complexType>
      <complexContent>
        <restriction base="test:deriv-res-base">
          <sequence>
            <element ref="test:name"/>
            <element ref="test:born"/>
            <element ref="test:dead"/>
          </sequence>
        </restriction>
      </complexContent>
    </complexType>
  </element>

  <!-- DERIVATION_EXTENSION_COMPLEX -->
  <complexType name="personName">
   <sequence>
    <element name="title" type="string" minOccurs="0"/>
    <element name="forename" type="string" minOccurs="0" maxOccurs="unbounded"/>
    <element name="surname" type="string"/>
   </sequence>
   <attributeGroup ref="test:attrgroup-1"/>
  </complexType>

  <complexType name="extendedName">
   <complexContent>
    <extension base="test:personName">
     <sequence>
      <element name="generation" type="string" minOccurs="0"/>
     </sequence>
    </extension>
   </complexContent>
  </complexType>

  <element name="deriv-ext-complex-1" type="test:extendedName"/>

  <!-- DERIVATION_RESTRICTION_COMPLEX -->
  <complexType name="simpleName">
   <complexContent>
    <restriction base="test:personName">
     <sequence>
      <element name="forename" type="string" minOccurs="1" maxOccurs="1"/>
      <element name="surname" type="string"/>
     </sequence>
    </restriction>
   </complexContent>
  </complexType>

  <element name="deriv-ext-restriction-1" type="test:simpleName"/>

  <!-- EMPTY_CONTENT_COMPLEX -->
  <complexType name="emptyContent">
   <attributeGroup ref="test:attrgroup-1"/>
   <attribute name="att1" type="string"/>
  </complexType>

  <element name="empty-complex-1" type="test:emptyContent" />

  <complexType name="emptyContent2">
   <sequence>
     <element name="e1" type="string" minOccurs="0" />
   </sequence>
   <attributeGroup ref="test:attrgroup-1"/>
   <attribute name="att1" type="string"/>
  </complexType>

  <element name="empty-complex-2" type="test:emptyContent2" />

</schema>

