<?xml version="1.0"?>

<schema	targetNamespace="http://www.ilog.fr/Test/JavaOne">

  <annotation>
    <documentation>
      This is a to describe the 2001 JavaOne Conference Sessions
      and to infer schedules for conference participants.
    </documentation>
  </annotation>

  <!-- ========================================================
  A representation of the JavaOne sessions and of the participants.
  ============================================================= -->

  <element name="JavaOneConference">
    <annotation>
      <documentation>
	The JavaOne sessions.
      </documentation>
    </annotation>
    <complexType>
     <sequence>
      <element
	name="session"
	type="session"
	minOccurs="1"
	maxOccurs="unbounded"/>
      <element
	name="participant"
	type="participant" 
	minOccurs="0"
	maxOccurs="unbounded"/>
     </sequence>
    </complexType>
  </element>

  <!-- ========================================================
  The ID of a session.
  ============================================================= -->

  <element name="id">
    <simpleType>
      <restriction base="string">
        <pattern value="([A-Z])+-([0-9])+"/>
      </restriction>
    </simpleType>
  </element>

  <!-- ========================================================
  A date represeting a possible date for a session.
  ============================================================= -->

  <simpleType name="adate" >
    <restriction base="string">
      <pattern value="June ([1-9]){1}"/>
    </restriction>
  </simpleType>

  <!-- ========================================================
  A time represeting the starting and ending times of a session.
  ============================================================= -->

  <simpleType name="atime">
    <annotation>
      <documentation>
        Specifies a time pattern, e.g. TT AM or TT PM
      </documentation>
    </annotation>
    <restriction base="string">
      <pattern value="[0-9]+:[0-9]+ [A,P]M"/>
    </restriction>
  </simpleType>

  <!-- ========================================================
  A session.
  ============================================================= -->

  <complexType name="session">
   <sequence>
    <element ref="id" minOccurs="0"/>
    <element name="category" type="string" nillable="true"/>
    <element name="title" type="string"/>
    <element name="url" type="string"/>
    <element name="day">
      <simpleType>
       <restriction base="string">
	<enumeration value="Monday"/>
	<enumeration value="Tuesday"/>
	<enumeration value="Wednesday"/>
	<enumeration value="Thursday"/>
	<enumeration value="Friday"/>
	<enumeration value="Saturday"/>
	<enumeration value="Sunday"/>
       </restriction>
      </simpleType>
    </element>
    <element name="date" type="adate"/>
    <element name="start" type="atime"/>
    <element name="end" type="atime"/>
   </sequence>
  </complexType>

  <!-- ========================================================
  A conference participant who has interests in different kinds of
  sessions.
  ============================================================= -->

  <complexType name="participant">
   <sequence>
    <element name="name" type="string"/>
    <element name="interest"
	type="string"
	minOccurs="1"
	maxOccurs="unbounded"/>
   </sequence>
  </complexType>

  <!-- ========================================================
  A participation is created whenever a session matches a participant's
  interests.
  ============================================================= -->

  <element name="participation">
    <complexType>
     <sequence>
      <element name="participant" type="participant"/>
      <element name="session" type="session"/>
     </sequence>
    </complexType>
  </element>

</schema>
