<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">

<xsd:complexType name="authorType" content="mixed">
	<xsd:sequence>
		<xsd:element name="name" type="xsd:string"/>
		<xsd:element name="nickName" type="xsd:string"/>
		<xsd:element name="born" type="xsd:string"/>
		<xsd:element name="dead" type="xsd:string"/>
	</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="bookType" content="elementOnly">
	<xsd:sequence>
		<xsd:element name="isbn" type="xsd:int"/>
		<xsd:element name="title" type="xsd:string"/>
		<xsd:element name="author" type="xsd:string" minOccurs="1" maxOccurs="unbounded"/>
		<xsd:element name="character" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
	</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="characterType" content="mixed">
	<xsd:sequence>
		<xsd:element name="name" type="xsd:string"/>
		<xsd:element name="since" type="xsd:string"/>
		<xsd:element name="qualification" type="xsd:string"/>
	</xsd:sequence>
</xsd:complexType>

<xsd:element name="library">
	<xsd:complexType content="elementOnly">
	<xsd:sequence>
		<xsd:element name="book" type="bookType" minOccurs="0" maxOccurs="unbounded"/>
		<xsd:element name="author" type="authorType" minOccurs="0" maxOccurs="unbounded"/>
		<xsd:element name="character" type="characterType" minOccurs="0" maxOccurs="unbounded"/>
	</xsd:sequence>
	<xsd:attribute name="xmlns:xsi" type="xsd:uriReference" use="default" value="http://www.w3.org/1999/XMLSchema-instance"/>
	<xsd:attribute name="xsi:noNamespaceSchemaLocation" type="xsd:string"/>
	<xsd:attribute name="xsi:schemaLocation" type="xsd:string"/>
	</xsd:complexType>
	
	<xsd:key name="bookKey">
		<xsd:selector xpath="book"/>
		<xsd:field xpath="isbn"/>
	</xsd:key>

	<xsd:key name="authorKey">
		<xsd:selector xpath="author"/>
		<xsd:field xpath="name"/>
	</xsd:key>

	<xsd:key name="characterKey">
		<xsd:selector xpath="character"/>
		<xsd:field xpath="name"/>
	</xsd:key>

	<xsd:keyref refer="authorKey" name="book2author">
		<xsd:selector xpath="book/author"/>
		<xsd:field xpath="."/>
	</xsd:keyref>

	<xsd:keyref refer="characterKey" name="book2character">
		<xsd:selector xpath="book/character"/>
		<xsd:field xpath="."/>
	</xsd:keyref>

</xsd:element>


</xsd:schema>
