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 </