<?xml version="1.0"?>

<!-- This is an XML Schema corresponding to the DTD I wrote for my          -->
<!-- concert reviews.                                                       -->
<!-- See also the DTD: concert-list-20001020.dtd                            -->
<!-- This is the second version, named 20001020.                            -->
<!-- Copyright (c) 2000 Hugo Haas                                           -->
<!-- Please send comments to Hugo Haas <hugo@larve.net>                     -->
<!-- You may use this XML Schema freely, as long as you keep the copyright  -->
<!-- To learn about this file, visit:
                http://larve.net/people/hugo/2000/10/concerts/generation    -->
<!--  $Id: concert-list-20001020.xsd 753 2000-10-22 06:51:35Z hugo $   -->

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

<xsd:annotation>
  <xsd:documentation>
    Vocabulary describing a set of concert reviews.
    Version dated 20 October 2000.
    Copyright 2000 Hugo Haas
  </xsd:documentation>
</xsd:annotation>

<xsd:element name="concerts" type="concertsType"/>

<xsd:complexType name="concertsType">
  <xsd:choice minOccurs="0" maxOccurs="unbounded">
    <xsd:element name="artist" type="artistType"/>
    <xsd:element name="venue" type="venueType"/>
    <xsd:element name="concert" type="concertType"/>
  </xsd:choice>
</xsd:complexType>

<xsd:complexType name="artistType">
  <xsd:sequence>
    <xsd:element name="last" type="xsd:string"/>
    <xsd:element name="first" type="xsd:string" minOccurs="0"/>
    <xsd:element name="site" type="uri" minOccurs="0"/>
  </xsd:sequence>
  <xsd:attribute name="lang" type="xsd:NMTOKEN" value="en"/>
  <xsd:attribute name="ref" type="xsd:ID" use="required"/>
</xsd:complexType>

<xsd:complexType name="venueType">
  <xsd:sequence>
    <xsd:element name="name" type="xsd:string" minOccurs="0"/>
    <xsd:element name="city" type="xsd:string"/>
    <xsd:element name="country" type="xsd:string"/>
    <xsd:element name="site" type="uri" minOccurs="0"/>
  </xsd:sequence>
  <xsd:attribute name="ref" type="xsd:ID" use="required"/>
</xsd:complexType>

<xsd:complexType name="uri">
  <xsd:simpleContent>
    <xsd:extension base="xsd:uriReference">
      <xsd:attribute name="official" type="xsd:boolean"
		     use="default" value="true"/>
    </xsd:extension>
  </xsd:simpleContent>
</xsd:complexType>

<xsd:complexType name="concertType">
  <xsd:sequence>
    <xsd:element name="artistref" type="artistrefType" maxOccurs="unbounded"/>
    <xsd:element name="venueref" type="venuerefType"/>
    <xsd:element name="date" type="dateType"/>
    <xsd:element name="review" type="xsd:uriReference" minOccurs="0"/>
    <xsd:element name="pictures" type="uriReference" minOccurs="0"/>
  </xsd:sequence>
  <xsd:attribute name="status">
    <xsd:simpleType>
      <xsd:restriction base="xsd:string">
        <xsd:enumeration value="seen"/>
        <xsd:enumeration value="upcoming"/>
        <xsd:enumeration value="maybe"/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>
</xsd:complexType>

<xsd:complexType name="venuerefType">
  <xsd:complexContent>
    <xsd:restriction base="xsd:anyType">
      <xsd:attribute name="ref" type="xsd:IDREF" use="required"/>
    </xsd:restriction>
  </xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="artistrefType">
  <xsd:simpleContent>
    <xsd:extension base="venueref">
      <xsd:attribute name="importance" type="xsd:nonNegativeInteger"
		     use="default" value="0"/>
    </xsd:extension>
  </xsd:simpleContent>
</xsd:complexType>

<xsd:complexType name="dateType">
  <xsd:sequence>
    <xsd:element name="year" type="xsd:year"/>
    <xsd:element name="month" minOccurs="0">
      <xsd:simpleType>
        <xsd:restriction base="xsd:positiveInteger">
          <xsd:maxInclusive value="12"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:element>
    <xsd:element name="day" minOccurs="0">
      <xsd:simpleType>
        <xsd:restriction base="xsd:positiveInteger">
          <xsd:maxInclusive value="31"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:element>
  </xsd:sequence>
</xsd:complexType>

</xsd:schema>
