<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements. See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership. The ASF licenses this file
  ~ to you 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.
  -->

<schema targetNamespace="http://soapinterop.org/xsd"
        xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:xsd1="http://soapinterop.org/xsd"
        elementFormDefault="qualified">

    <xs:element name="DerivedPositiveInteger" type="xs:positiveInteger"/>
	<xs:element name="DerivedNegativeInteger" type="xs:negativeInteger"/>
	<xs:element name="DerivedNonNegativeInteger" type="xs:nonNegativeInteger"/>
	<xs:element name="DerivedNonPositiveInteger" type="xs:nonPositiveInteger"/>
	<xs:element name="DerivedUnsignedShort" type="xs:unsignedShort"/>
	<xs:element name="DerivedUnsignedLong" type="xs:unsignedLong"/>
	<xs:element name="DerivedUnsignedInt" type="xs:unsignedInt"/>
	<xs:element name="DerivedUnsignedByte" type="xs:unsignedByte"/>
	<xs:element name="DerivedLong" type="xs:long"/>
	<xs:element name="DerivedShort" type="xs:short"/>
	<xs:element name="DerivedInt" type="xs:int"/>
	<xs:element name="DerivedByte" type="xs:byte"/>
	<xs:element name="DerivedToken" type="xs:token"/>
	<xs:element name="DerivedLanguage" type="xs:language"/>
	<xs:element name="DerivedNMTOKEN" type="xs:NMTOKEN"/>
	<xs:element name="DerivedNMTOKENS" type="xs:NMTOKENS"/>
	<xs:element name="DerivedID" type="xs:ID"/>
	<xs:element name="DerivedIDRef" type="xs:IDREF"/>
	<xs:element name="DerivedEntity" type="xs:ENTITY"/>
	<xs:element name="DerivedEntities" type="xs:ENTITIES"/>
	<xs:element name="DerivedName" type="xs:Name"/>
	<xs:element name="DerivedNameToken" type="xs:NMTOKEN"/>
	<xs:element name="DerivedNCName" type="xs:NCName"/>
	<xs:element name="DerivedNormalizedString" type="xs:normalizedString"/>
	<xs:element name="DerivedInteger" type="xs:integer"/>

</schema>