<!--
 * 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://www.example.com/IPO"
	xmlns="http://www.w3.org/2001/XMLSchema"
	xmlns:ipo="http://www.example.com/IPO">

	<annotation>
		<documentation xml:lang="en">
			International Purchase order schema for Example.com
			Copyright 2000 Example.com. All rights reserved.
		</documentation>
	</annotation>


	<element name="purchaseOrder" type="ipo:PurchaseOrderType" />

	<element name="comment" type="string" />

	<complexType name="PurchaseOrderType">
		<sequence>
			<element name="shipTo" type="ipo:Address" />
			<element name="billTo" type="ipo:Address" />
			<element ref="ipo:comment" minOccurs="0" />
			<element name="items" type="ipo:Items" />
		</sequence>
		<attribute name="orderDate" type="date" />
	</complexType>

	<complexType name="Items">
		<sequence>
			<element name="item" minOccurs="0" maxOccurs="unbounded">
				<complexType>
					<sequence>
						<element name="productName" type="string" />
						<element name="quantity">
							<simpleType>
								<restriction base="positiveInteger">
									<maxExclusive value="100" />
								</restriction>
							</simpleType>
						</element>
						<element name="USPrice" type="decimal" />
						<element ref="ipo:comment" minOccurs="0" />
						<element name="shipDate" type="date"
							minOccurs="0" />
					</sequence>
					<attribute name="partNum" type="ipo:SKU"
						use="required" />
				</complexType>
			</element>
		</sequence>
	</complexType>

	<simpleType name="SKU">
		<restriction base="string">
			<pattern value="\d{3}-[A-Z]{2}" />
		</restriction>
	</simpleType>

	<complexType name="Address">
		<sequence>
			<element name="name" type="string" />
			<element name="street" type="string" />
			<element name="city" type="string" />
		</sequence>
	</complexType>

	<complexType name="USAddress">
		<complexContent>
			<extension base="ipo:Address">
				<sequence>
					<element name="state" type="ipo:USState" />
					<element name="zip" type="positiveInteger" />
				</sequence>
			</extension>
		</complexContent>
	</complexType>

	<complexType name="UKAddress">
		<complexContent>
			<extension base="ipo:Address">
				<sequence>
					<element name="postcode" type="ipo:UKPostcode" />
				</sequence>
				<attribute name="exportCode" type="positiveInteger"
					fixed="1" />
			</extension>
		</complexContent>
	</complexType>

	<!-- other Address derivations for more countries -->

	<simpleType name="USState">
		<restriction base="string">
			<enumeration value="AK" />
			<enumeration value="AL" />
			<enumeration value="AR" />
			<enumeration value="CA" />
			<enumeration value="PA" />
			<!-- and so on ... -->
		</restriction>
	</simpleType>

	<simpleType name="Postcode">
		<restriction base="string">
			<length value="7" fixed="true" />
		</restriction>
	</simpleType>


	<simpleType name="UKPostcode">
		<restriction base="ipo:Postcode">
			<pattern value="[A-Z]{2}\d\s\d[A-Z]{2}" />
		</restriction>
	</simpleType>



</schema>

