<x:schema xmlns:x="http://www.w3.org/2000/10/XMLSchema">

<!--
  Generated by $Id: test.xsd,v 1.1 2001/04/20 13:48:15 bbos Exp $
  on Thu Mar 15 13:44:08 2001 GMT
  from the following MNBF source:

db          : record*;
record	    : name address cuisine review;
name	    : STRING;
address()   : street city country tel;
review()    : date menu quality note reviewer;
street	    : STRING;
city	    : STRING;
country	    : STRING;
tel	    : STRING;
cuisine	    : STRING;
date	    : DATE;
menu	    : STRING;
quality	    : /[0-9]|10/;
note	    : note_text;
	      /* note_text is in fact (STRING | span)* but
		 we want to test recursion... */
note_text() : /* empty */ | STRING note_text | span note_text;
reviewer    : STRING;
span	    : (STRING | span)* @class?;
@class	    : S* IDENT (S+ IDENT)*;


-->

<!-- The start (root) symbol -->

  <x:element name="db" type="db" />

<!-- The types of all elements -->

  <x:complexType name="menu" mixed="true">
  </x:complexType>

  <x:complexType name="country" mixed="true">
  </x:complexType>

  <x:complexType name="name" mixed="true">
  </x:complexType>

  <x:complexType name="date" mixed="true">
  </x:complexType>

  <x:complexType name="review">
    <x:group ref="review" />
  </x:complexType>

  <x:complexType name="db">
    <x:group ref="db" />
  </x:complexType>

  <x:complexType name="reviewer" mixed="true">
  </x:complexType>

  <x:complexType name="city" mixed="true">
  </x:complexType>

  <x:complexType name="span" mixed="true">
    <x:group ref="span" />
    <x:attribute name="class" type="x:string" />
  </x:complexType>

  <x:complexType name="record">
    <x:group ref="record" />
  </x:complexType>

  <x:complexType name="address">
    <x:group ref="address" />
  </x:complexType>

  <x:complexType name="tel" mixed="true">
  </x:complexType>

  <x:complexType name="note_text" mixed="true">
    <x:group ref="note_text" />
  </x:complexType>

  <x:complexType name="quality" mixed="true">
  </x:complexType>

  <x:complexType name="street" mixed="true">
  </x:complexType>

  <x:complexType name="cuisine" mixed="true">
  </x:complexType>

  <x:complexType name="note" mixed="true">
    <x:group ref="note" />
  </x:complexType>

<!-- The content models of all elements -->

  <x:group name="menu">
    <x:sequence>
    <!-- x:string -->
    </x:sequence>
  </x:group>

  <x:group name="country">
    <x:sequence>
    <!-- x:string -->
    </x:sequence>
  </x:group>

  <x:group name="name">
    <x:sequence>
    <!-- x:string -->
    </x:sequence>
  </x:group>

  <x:group name="date">
    <x:sequence>
    <!-- x:date -->
    </x:sequence>
  </x:group>

  <x:group name="review">
    <x:sequence>
    <x:element name="date" type="date" />
    <x:element name="menu" type="menu" />
    <x:element name="quality" type="quality" />
    <x:element name="note" type="note" />
    <x:element name="reviewer" type="reviewer" />
    </x:sequence>
  </x:group>

  <x:group name="db">
    <x:sequence>
    <x:element name="record" type="record" minOccurs="0" maxOccurs="unbounded" />
    </x:sequence>
  </x:group>

  <x:group name="reviewer">
    <x:sequence>
    <!-- x:string -->
    </x:sequence>
  </x:group>

  <x:group name="city">
    <x:sequence>
    <!-- x:string -->
    </x:sequence>
  </x:group>

  <x:group name="span">
    <x:sequence>
    <x:sequence minOccurs="0" maxOccurs="unbounded">
    <x:choice>
    <x:sequence>
    <!-- x:string -->
    </x:sequence>
    <x:sequence>
    <x:element name="span" type="span" />
    </x:sequence>
    </x:choice>
    </x:sequence>
    </x:sequence>
  </x:group>

  <x:group name="record">
    <x:sequence>
    <x:element name="name" type="name" />
    <x:group ref="address" />
    <x:element name="cuisine" type="cuisine" />
    <x:group ref="review" />
    </x:sequence>
  </x:group>

  <x:group name="address">
    <x:sequence>
    <x:element name="street" type="street" />
    <x:element name="city" type="city" />
    <x:element name="country" type="country" />
    <x:element name="tel" type="tel" />
    </x:sequence>
  </x:group>

  <x:group name="tel">
    <x:sequence>
    <!-- x:string -->
    </x:sequence>
  </x:group>

  <x:group name="note_text">
    <x:sequence>
    <x:choice>
    <x:sequence>
    <!-- empty -->
    </x:sequence>
    <x:sequence>
    <x:choice>
    <x:sequence>
    <!-- x:string -->
    <x:group ref="note_text" />
    </x:sequence>
    <x:sequence>
    <x:element name="span" type="span" />
    <x:group ref="note_text" />
    </x:sequence>
    </x:choice>
    </x:sequence>
    </x:choice>
    </x:sequence>
  </x:group>

  <x:group name="quality">
    <x:sequence>
    <!-- x:pattern value="[0-9]|10" -->
    </x:sequence>
  </x:group>

  <x:group name="street">
    <x:sequence>
    <!-- x:string -->
    </x:sequence>
  </x:group>

  <x:group name="cuisine">
    <x:sequence>
    <!-- x:string -->
    </x:sequence>
  </x:group>

  <x:group name="note">
    <x:sequence>
    <x:group ref="note_text" />
    </x:sequence>
  </x:group>

</x:schema>
