<?xml version="1.0" encoding="utf-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="library">
   <xs:complexType>
      <xs:sequence>
	     <xs:element ref="book" maxOccurs="unbounded" />
	  </xs:sequence>
   </xs:complexType>
   
   <!-- the key -->
   <xs:key name="bookKey">
       <xs:selector xpath=".//book" />
	   <xs:field xpath="@isbn" />
   </xs:key>
   
   <xs:keyref name="isbnRef" refer="bookKey">
      <xs:selector xpath=".//fav" />
      <xs:field xpath="." />
   </xs:keyref>
   
   
</xs:element>

<!-- Define the book element -->
<xs:element name="book">
   <xs:complexType>
      <xs:sequence>
	     <xs:element name="title" type="xs:string" />
		 <xs:element ref="author" maxOccurs="unbounded"
		                          minOccurs="1" />
	  </xs:sequence>
	  <xs:attribute name="isbn" use="required" 
	                type="isbnType" />
	  <xs:attribute name="genre" type="genreType" />
   </xs:complexType>
</xs:element>

<xs:simpleType name="isbnType">
  <xs:restriction base="xs:string">
     <xs:pattern value="[0-9]{13}" />
  </xs:restriction>
</xs:simpleType>

<xs:simpleType name="genreType">
  <xs:restriction base="xs:string">
     <xs:enumeration value="fiction" />
     <xs:enumeration value="nonfiction" />
     <xs:enumeration value="biography" />
  </xs:restriction>
</xs:simpleType>

<!-- Define the author element -->
<xs:element name="author">
   <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:element ref="favorites" minOccurs="0" 
		             maxOccurs="1" />
	  </xs:sequence>
   </xs:complexType>
</xs:element>

<xs:element name="favorites">
   <xs:complexType>
      <xs:sequence>
	     <xs:element name="fav" type="isbnType" 
		             maxOccurs="unbounded" />
	  </xs:sequence>
   </xs:complexType>
</xs:element>


</xs:schema>