<xs:schema 
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:gen="http://xmlns.redhat.com/core/bebop/generator/1.0"
  xmlns="http://xmlns.redhat.com/atoz/1.0"
  elementFormDefault="qualified" 
  targetNamespace="http://xmlns.redhat.com/atoz/1.0">

  <xs:element name="categoryRoot">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        Outputs the root navigation category
      </xs:documentation>

      <xs:appinfo>
        <gen:class>com.arsdigita.london.navigation.ui.category.Root</gen:class>
      </xs:appinfo>
    </xs:annotation>

    <xs:complexType>
      <xs:sequence>
        <xs:element name="category" type="category" minOccurs="1" maxOccurs="1"/>
      </sequence>
    </xs:complexType>
  </xs:element>
 
  <xs:element name="categoryTopLevel">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        Outputs the first level navigation categories (ie immediate
        children of the root).
      </xs:documentation>

      <xs:appinfo>
        <gen:class>com.arsdigita.london.navigation.ui.category.TopLevel</gen:class>
      </xs:appinfo>
    </xs:annotation>

    <xs:complexType>
      <xs:sequence>
        <xs:element name="category" type="category" minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
    </xs:complexType>
  </xs:element>
 
  <xs:element name="categorySiblings">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        Outputs siblings of the category category (ie, those categories
        at the same level as the current category.
      </xs:documentation>

      <xs:appinfo>
        <gen:class>com.arsdigita.london.navigation.ui.category.Siblings</gen:class>
      </xs:appinfo>
    </xs:annotation>

    <xs:complexType>
      <xs:sequence>
        <xs:element name="category" type="category" minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
    </xs:complexType>
  </xs:element>
 
  <xs:element name="categoryChildren">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        Outputs immediate children of the current category
      </xs:documentation>

      <xs:appinfo>
        <gen:class>com.arsdigita.london.navigation.ui.category.Children</gen:class>
      </xs:appinfo>
    </xs:annotation>

    <xs:complexType>
      <xs:sequence>
        <xs:element name="category" type="category" minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
    </xs:complexType>
  </xs:element>
 
  <xs:element name="categoryPath">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        Outputs the categories on a path between the root navigation
        category (exclusive) and the current category (inclusive).
      </xs:documentation>

      <xs:appinfo>
        <gen:class>com.arsdigita.london.navigation.ui.category.Path</gen:class>
      </xs:appinfo>
    </xs:annotation>

    <xs:complexType>
      <xs:sequence>
        <xs:element name="category" type="category" minOccurs="1" maxOccurs="unbounded"/>
      </sequence>
    </xs:complexType>
  </xs:element>
 
  <xs:element name="categoryMenu">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        Outputs the immediate children of all categories between the 
        root navigation category & the current category (both inclusive).
        This is intended for showing a contextually-expanded tree to
        the current category.
      </xs:documentation>

      <xs:appinfo>
        <gen:class>com.arsdigita.london.navigation.ui.category.Menu</gen:class>
      </xs:appinfo>
    </xs:annotation>

    <xs:complexType>
      <xs:sequence>
        <xs:element name="category" type="nestedCategory" minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
    </xs:complexType>
  </xs:element>
 
  <xs:element name="categoryHierarchy">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        Outputs all categories, starting from the root navigation category
        and recursing.
      </xs:documentation>

      <xs:appinfo>
        <gen:class>com.arsdigita.london.navigation.ui.category.Hierarchy</gen:class>
      </xs:appinfo>
    </xs:annotation>

    <xs:complexType>
      <xs:sequence>
        <xs:element name="category" type="nestedCategory" minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
    </xs:complexType>
  </xs:element>
 

  <xs:complexType name="category">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        Represents the information for a single category. When
        generating links to the category page, the url attribute
        is the preferred method. The id attribute is merely
        present for informational purposes. 
      </xs:documentation>
    </xs:annotation>

    <xs:attribute name="id" type="xs:integer"/>
    <xs:attribute name="title" type="xs:string"/>
    <xs:attribute name="description" type="xs:string" use="optional"/>
    <xs:attribute name="url" type="xs:anyURI"/>
  </xs:complexType>

  <xs:complexType name="nestedCategory">
    <xs:extension base="category">
      <xs:sequence>
        <xs:element name="category" type="nestedCategory" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexType
</xs:schema>