<?xml version="1.0" encoding="UTF-8"?>
<!--
  Schema for the 0.2 snapshot of Pie/Echo/Atom/Whatever
  IMPORTANT: This authoritative version of this schema is in Relax NG
   compact syntax; i.e. its name ends in ".rnc".  It would be very unwise
   to edit any other version.
  
  V0.2: T. Bray, August 2003
   July 12: fix sequence in feed/entry 
            clean up "mode" attribute dispatching
            s/Person/Writer/
   August 16: Update for 0.2 snapshot
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://purl.org/atom/ns#" xmlns:atom="http://purl.org/atom/ns#">
  <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd"/>
  <!--
    Structural elements
    -------------------
  -->
  <xs:element name="feed">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="atom:title"/>
        <xs:element ref="atom:link"/>
        <xs:element ref="atom:modified"/>
        <xs:element minOccurs="0" ref="atom:author"/>
        <xs:element minOccurs="0" ref="atom:tagline"/>
        <xs:element minOccurs="0" ref="atom:id"/>
        <xs:element minOccurs="0" ref="atom:generator"/>
        <xs:element minOccurs="0" ref="atom:copyright"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="atom:contributor"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="atom:entry"/>
      </xs:sequence>
      <xs:attributeGroup ref="atom:XLang"/>
      <xs:attributeGroup ref="atom:Version"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="entry">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="atom:title"/>
        <xs:element ref="atom:link"/>
        <xs:element ref="atom:id"/>
        <xs:element ref="atom:issued"/>
        <xs:element ref="atom:modified"/>
        <xs:element minOccurs="0" ref="atom:created"/>
        <xs:element minOccurs="0" ref="atom:summary"/>
        <xs:element minOccurs="0" ref="atom:author"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="atom:contributor"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:group ref="atom:TopContent"/>
          <xs:group ref="atom:AltContent"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="atom:XLang"/>
    </xs:complexType>
  </xs:element>
  <xs:group name="TopContent">
    <xs:sequence>
      <xs:element name="content">
        <xs:complexType>
          <xs:group maxOccurs="unbounded" ref="atom:AltContent"/>
          <xs:attributeGroup ref="atom:XLang"/>
          <xs:attribute name="type" use="required">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="multipart/alternative"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="AltContent">
    <xs:sequence>
      <xs:element name="content">
        <xs:complexType mixed="true">
          <xs:group minOccurs="0" ref="atom:XML"/>
          <xs:attributeGroup ref="atom:XLang"/>
          <xs:attribute name="type" use="required"/>
          <xs:attribute name="mode">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="xml"/>
                <xs:enumeration value="escaped"/>
                <xs:enumeration value="base64"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <!--
    Attributes
    ----------
  -->
  <xs:attributeGroup name="Version">
    <xs:attribute name="version" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="0.2"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>
  <xs:attributeGroup name="XBase">
    <xs:attribute ref="xml:base" use="required"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="XLang">
    <xs:attribute ref="xml:lang"/>
  </xs:attributeGroup>
  <!--
    Payload elements, alphabetical order
    ------------------------------------
  -->
  <xs:element name="author" type="atom:Writer"/>
  <xs:element name="contributor" type="atom:Writer"/>
  <xs:element name="copyright">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="atom:XLang"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="created" type="xs:dateTime"/>
  <xs:element name="generator">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:anyURI">
          <xs:attribute name="name" use="required"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="id" type="xs:anyURI"/>
  <xs:element name="issued" type="xs:dateTime"/>
  <xs:element name="link" type="xs:anyURI"/>
  <xs:element name="modified" type="xs:dateTime"/>
  <xs:element name="summary">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="atom:XLang"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="tagline">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="atom:XLang"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="title">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="atom:XLang"/>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="Writer">
    <xs:sequence>
      <xs:element ref="atom:name"/>
      <xs:element minOccurs="0" ref="atom:url"/>
      <xs:element minOccurs="0" ref="atom:email"/>
    </xs:sequence>
    <xs:attributeGroup ref="atom:XLang"/>
  </xs:complexType>
  <xs:element name="name" type="xs:string"/>
  <xs:element name="url" type="xs:anyURI"/>
  <xs:element name="email" type="xs:string"/>
  <!--
    Non-Atom content
    ----------------
  -->
  <xs:group name="NonAtom">
    <xs:sequence>
      <xs:any namespace="##other" processContents="skip"/>
    </xs:sequence>
  </xs:group>
  <xs:group name="XML">
    <xs:sequence>
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="atom:NonAtom"/>
    </xs:sequence>
  </xs:group>
</xs:schema>