<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v2004 rel. 4 U (http://www.xmlspy.com) by Kelli Wiseth (student) -->
<xs:schema elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="AddressBook">
		<xs:annotation>
			<xs:documentation>Root node of a contact database</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence maxOccurs="unbounded">
				<xs:element name="Contact">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="PrimaryInfo">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="Name">
											<xs:complexType>
												<xs:sequence>
													<xs:element name="First" type="xs:string"/>
													<xs:element name="Middle" type="xs:string" minOccurs="0"/>
													<xs:element name="Last" type="xs:string"/>
												</xs:sequence>
												<xs:attribute name="Nickname" type="xs:string" use="optional"/>
											</xs:complexType>
										</xs:element>
										<xs:element name="Email" minOccurs="0">
											<xs:complexType>
												<xs:choice>
													<xs:element name="WorkEmail" type="EmailType"/>
													<xs:element name="HomeEmail" type="EmailType"/>
												</xs:choice>
												<xs:attribute name="AlternativeEmail" type="EmailType" use="optional"/>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
							<xs:element name="Addresses">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="Home">
											<xs:complexType>
												<xs:sequence>
													<xs:element name="HomeAddress" type="AddressType"/>
													<xs:element name="Phones" type="PhoneNumbers" minOccurs="0"/>
													<xs:element name="Website" type="WebAddressType" minOccurs="0"/>
												</xs:sequence>
											</xs:complexType>
										</xs:element>
										<xs:element name="Work">
											<xs:complexType>
												<xs:sequence>
													<xs:element name="WorkAddress" type="AddressType" minOccurs="0"/>
													<xs:element name="WorkPhones" type="PhoneNumbers" minOccurs="0"/>
													<xs:element name="WorkWebsite" type="WebAddressType" minOccurs="0"/>
												</xs:sequence>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
							<xs:element name="Dates">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="Birthday" type="xs:date"/>
										<xs:element name="Anniversary" type="xs:date" minOccurs="0"/>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
							<xs:element name="Notes" type="xs:string" minOccurs="0"/>
							<xs:element name="PersonalInfo">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="Spouse" minOccurs="0">
											<xs:complexType>
												<xs:sequence>
													<xs:element name="sName" type="NameType"/>
												</xs:sequence>
												<xs:attribute name="sBirthday" type="xs:date" use="optional"/>
											</xs:complexType>
										</xs:element>
										<xs:element name="Children" minOccurs="0" maxOccurs="unbounded">
											<xs:complexType>
												<xs:sequence>
													<xs:element name="cName" type="NameType"/>
												</xs:sequence>
												<xs:attribute name="cBirthday" type="xs:date" use="optional"/>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:simpleType name="EmailType">
		<xs:restriction base="xs:string">
			<xs:minLength value="5"/>
			<xs:pattern value="[a-zA-Z0-9\-_]{1,}@[a-zA-Z0-9\-_]{1,}\.[a-zA-Z0-9\-_]{1,}([a-zA-Z0-9\-_]{1,})?"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="ZipType">
		<xs:restriction base="xs:string">
			<xs:minLength value="5"/>
			<xs:maxLength value="10"/>
			<xs:pattern value="[0-9]{5}(\-[0-9]{4})?"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="NameType">
		<xs:sequence>
			<xs:element name="First">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:minLength value="2"/>
						<xs:maxLength value="50"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:element>
			<xs:element name="Middle" minOccurs="0">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:minLength value="2"/>
						<xs:maxLength value="50"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:element>
			<xs:element name="Last">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:minLength value="2"/>
						<xs:maxLength value="50"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="AddressType">
		<xs:sequence>
			<xs:element name="Street">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:maxLength value="50"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:element>
			<xs:element name="Suite_or_Apt">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:maxLength value="50"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:element>
			<xs:element name="City">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:maxLength value="50"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:element>
			<xs:element name="State">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:maxLength value="2"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:element>
			<xs:element name="Zip" type="ZipType"/>
			<xs:element name="Country">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:maxLength value="25"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="PhoneNumbers">
		<xs:sequence>
			<xs:element name="Landline" type="PhoneType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Mobile" type="PhoneType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Fax" type="PhoneType" minOccurs="0"/>
			<xs:element name="Pager" type="PhoneType" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:simpleType name="PhoneType">
		<xs:restriction base="xs:string">
			<xs:minLength value="10"/>
			<xs:maxLength value="16"/>
			<xs:pattern value="[0-9]{3}\-[0-9]{3}\-[0-9]{4}([0-9]{1,6})?"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="ContactType">
		<xs:sequence>
			<xs:element name="PrimaryInfo">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Name" type="NameType"/>
						<xs:element name="Email" type="EmailType"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="Addresses">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Home" minOccurs="0">
							<xs:complexType>
								<xs:sequence>
									<xs:element name="Address" type="AddressType"/>
									<xs:element name="Phones" type="PhoneNumbers"/>
									<xs:element name="Website" minOccurs="0">
										<xs:simpleType>
											<xs:restriction base="xs:string">
												<xs:pattern value="[a-zA-Z0-9\-_]{1,}\.[a-zA-Z0-9\-_]{1,}\.([a-zA-Z0-9\-_]{1,})?"/>
											</xs:restriction>
										</xs:simpleType>
									</xs:element>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
						<xs:element name="Work" minOccurs="0">
							<xs:complexType>
								<xs:sequence>
									<xs:element name="Address" type="AddressType"/>
									<xs:element name="Phones" type="PhoneNumbers"/>
									<xs:element name="WorkWebsite" minOccurs="0">
										<xs:simpleType>
											<xs:restriction base="xs:string">
												<xs:pattern value="[a-zA-Z0-9\-_]\.[a-zA-Z0-9\-_]\.([a-zA-Z0-9\-_])?"/>
											</xs:restriction>
										</xs:simpleType>
									</xs:element>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="Dates">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Birthday" type="xs:date" minOccurs="0"/>
						<xs:element name="Anniversary" type="xs:date" minOccurs="0"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="Notes" minOccurs="0">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:maxLength value="500"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:element>
			<xs:element name="PersonalInfo">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Spouse" minOccurs="0">
							<xs:complexType>
								<xs:sequence>
									<xs:element name="sName" type="NameType"/>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
						<xs:element name="Children" maxOccurs="unbounded">
							<xs:complexType>
								<xs:sequence>
									<xs:element name="cName" type="NameType"/>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:simpleType name="WebAddressType">
		<xs:restriction base="xs:string">
			<xs:pattern value="[a-zA-Z0-9/\-_~\?]{1,}\.[a-zA-Z0-9/\-_~\?]{1,}\.([a-zA-Z0-9/\-_~\?]{1,})?"/>
		</xs:restriction>
	</xs:simpleType>
</xs:schema>
