1 <?xml version="1.0" encoding="UTF-8"?>
    2 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xml:lang="en-US">
    3 
    4    <xs:element name="bookinfo">
    5       <xs:complexType>
    6          <xs:sequence>
    7             <xs:element name="author" type="Author" minOccurs="0" maxOccurs="unbounded" />
    8             <xs:element name="book" type="Book" minOccurs="0" maxOccurs="unbounded" />
    9             <xs:element name="publisher" type="Publisher" minOccurs="0" maxOccurs="unbounded" />
   10          </xs:sequence>
   11       </xs:complexType>
   12 
   13       <xs:key name="authorKey">
   14          <xs:selector xpath="author" />
   15          <xs:field xpath="@nameID" />
   16       </xs:key>
   17 
   18       <xs:key name="publisherKey">
   19          <xs:selector xpath="publisher" />
   20          <xs:field xpath="pubName" />
   21       </xs:key>
   22 
   23       <xs:key name="bookKey">
   24          <xs:selector xpath="book" />
   25          <xs:field xpath="@ISBN" />
   26       </xs:key>
   27 
   28       <xs:unique name="ISBNkey">
   29          <xs:selector xpath="book" />
   30          <xs:field xpath="@ISBN" />
   31       </xs:unique>
   32 
   33       <xs:keyref refer="authorKey" name="bookAuthorKey">
   34          <xs:selector xpath="book/authors/authorName" />
   35          <xs:field xpath="@nameID" />
   36       </xs:keyref>
   37 
   38       <xs:keyref refer="publisherKey" name="bookPublisherKey">
   39          <xs:selector xpath="book/publisherName" />
   40          <xs:field xpath="." />
   41       </xs:keyref>
   42 
   43    </xs:element>
   44 
   45 
   46    <xs:simpleType name="word">
   47       <xs:restriction base="xs:string">
   48          <xs:whiteSpace value="collapse" />
   49          <xs:pattern value="[A-Za-z]+" />
   50       </xs:restriction>
   51    </xs:simpleType>
   52 
   53 
   54    <xs:complexType name="nameType">
   55       <xs:choice>
   56          <xs:element name="fullname">
   57             <xs:simpleType>
   58                <xs:restriction base="xs:string">
   59                   <xs:whiteSpace value="collapse" />
   60                </xs:restriction>
   61             </xs:simpleType>
   62          </xs:element>
   63 
   64          <xs:element name="name">
   65             <xs:complexType>
   66                <xs:sequence>
   67                   <xs:element name="first" type="word" />
   68                   <xs:element name="middle" type="word" />
   69                   <xs:element name="last" type="word" />
   70                </xs:sequence>
   71             </xs:complexType>
   72          </xs:element>
   73       </xs:choice>
   74    </xs:complexType>
   75 
   76 
   77    <xs:simpleType name="pubNameType">
   78       <xs:restriction base="xs:string">
   79          <xs:enumeration value="Wiley" />
   80          <xs:enumeration value="Prentice-Hall" />
   81          <xs:enumeration value="McGraw-Hill" />
   82          <xs:enumeration value="Addison-Wesley" />
   83          <xs:enumeration value="O-Reilly" />
   84       </xs:restriction>
   85    </xs:simpleType>
   86 
   87 
   88    <xs:simpleType name="phoneType">
   89       <xs:restriction base="xs:string">
   90          <xs:pattern value="(\([2-9]\d{2}\))?[1-9]\d{2}-\d{4}" />
   91       </xs:restriction>
   92    </xs:simpleType>
   93 
   94 
   95    <xs:complexType name="addressType">
   96       <xs:sequence>
   97 
   98          <xs:element name="street">
   99             <xs:simpleType>
  100                <xs:restriction base="xs:string">
  101                   <xs:whiteSpace value="preserve" />
  102                </xs:restriction>
  103             </xs:simpleType>
  104          </xs:element>
  105 
  106          <xs:element name="city">
  107             <xs:simpleType>
  108                <xs:restriction base="xs:string">
  109                   <xs:whiteSpace value="collapse" />
  110                </xs:restriction>
  111             </xs:simpleType>
  112          </xs:element>
  113 
  114          <xs:element name="state">
  115             <xs:simpleType>
  116                <xs:restriction base="xs:string">
  117                   <xs:length value="2" />
  118                   <xs:whiteSpace value="collapse" />
  119                </xs:restriction>
  120             </xs:simpleType>
  121          </xs:element>
  122 
  123          <xs:element name="zipcode">
  124             <xs:simpleType>
  125                <xs:restriction base="xs:string">
  126                   <xs:pattern value="\d{5}(-\d{4})?" />
  127                </xs:restriction>
  128             </xs:simpleType>
  129          </xs:element>
  130 
  131       </</