<?xml version="1.0" encoding="UTF-8"?>
<!--
get http://xml.fiforms.org/xs3p/ and generate docs
xsltproc -o devhelp2.xsd.html $HOME/download/xs3p-1.1.3/xs3p.xsl devhelp2.xsd
-->
<xsd:schema
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://www.devhelp.net/book"
  xmlns="http://www.devhelp.net/book"
  elementFormDefault="qualified">

  <xsd:annotation>
    <xsd:documentation>
      Devhelp2 files are use in the 'devhelp' documentation browser.
    </xsd:documentation>
  </xsd:annotation>

  <xsd:simpleType name="keyword-type">
    <xsd:annotation>
      <xsd:documentation>
        Known keyword types.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="constant"/>
      <xsd:enumeration value="enum"/>
      <xsd:enumeration value="function"/>
      <xsd:enumeration value="macro"/>
      <xsd:enumeration value="member"/>
      <xsd:enumeration value="property"/>
      <xsd:enumeration value="signal"/>
      <xsd:enumeration value="struct"/>
      <xsd:enumeration value="typedef"/>
      <xsd:enumeration value="union"/>
      <xsd:enumeration value="variable"/>
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:simpleType name="language-type">
    <xsd:annotation>
      <xsd:documentation>
        Known programming languages.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="c"/>
      <xsd:enumeration value="c++"/>
      <xsd:enumeration value="c#"/>
      <xsd:enumeration value="java"/>
      <xsd:enumeration value="javascript"/>
      <xsd:enumeration value="perl"/>
      <xsd:enumeration value="python"/>
      <xsd:enumeration value="vala"/>
    </xsd:restriction>
  </xsd:simpleType>


  <xsd:element name="sub">
    <xsd:annotation>
      <xsd:documentation>
        Sub tags for the hierarchy of the chapters and parts.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="sub" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
       <xsd:attribute name="name" type="xsd:string" use="required"/>
       <xsd:attribute name="link" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="chapters">
    <xsd:annotation>
      <xsd:documentation>
        The chapters tag encloses the structure of the reference manual. Each
        sub unit is represented by a sub tag.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="sub" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="keyword">
    <xsd:annotation>
      <xsd:documentation>
        The keyword tag points to the documentation of a api symbol.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:attribute name="type" type="keyword-type" use="required">
        <xsd:annotation>
          <xsd:documentation>
            Type of the keyword.
          </xsd:documentation>
        </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="name" type="xsd:string" use="required">
        <xsd:annotation>
          <xsd:documentation>
            Keyword name.
          </xsd:documentation>
        </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="link" type="xsd:string" use="required">
        <xsd:annotation>
          <xsd:documentation>
            Relative link for the keyword.
          </xsd:documentation>
        </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="since" type="xsd:string">
        <xsd:annotation>
          <xsd:documentation>
            Version since that the keyword is part of the API.
          </xsd:documentation>
        </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="deprecated" type="xsd:string">
      <xsd:annotation>
        <xsd:documentation>
          Marks the keyword as deprecated.
        </xsd:documentation>
      </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="stability" type="xsd:string">
        <xsd:annotation>
          <xsd:documentation>
            Document the stability status.
          </xsd:documentation>
        </xsd:annotation>
      </xsd:attribute>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="functions">
    <xsd:annotation>
      <xsd:documentation>
        The functions tag encloses all api symbols of the reference manual. Each
        sub unit is represented by a keyword tag.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="keyword" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="book">
    <xsd:annotation>
      <xsd:documentation>
        Toplevel element of a devhelp book. A devhelp book list the structure of
        a developer manual together with development related metadata.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="chapters" minOccurs="1" maxOccurs="1"/>
        <xsd:element ref="functions" minOccurs="1" maxOccurs="1"/>
      </xsd:sequence>
      <xsd:attribute name="title" type="xsd:string" use="required">
        <xsd:annotation>
          <xsd:documentation>
            Title of the reference manual.
          </xsd:documentation>
        </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="link" type="xsd:string" use="required">
        <xsd:annotation>
          <xsd:documentation>
            Entry point to the manual. Can be given as a relative path to the
            location of the devhelp2 file.
          </xsd:documentation>
        </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="author" type="xsd:string" use="required">
        <xsd:annotation>
          <xsd:documentation>
            Author of the document. Multiple authors are separated by ','.
          </xsd:documentation>
        </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="name" type="xsd:string" use="required">
        <xsd:annotation>
          <xsd:documentation>
            Short name of the manual.
          </xsd:documentation>
        </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="version" type="xsd:integer" use="required">
        <xsd:annotation>
          <xsd:documentation>
            Version of the devhelp xml specification (2).
          </xsd:documentation>
        </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="language" type="language-type">
        <xsd:annotation>
          <xsd:documentation>
            Programming language this manual refers to.
          </xsd:documentation>
        </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="online" type="xsd:string">
        <xsd:annotation>
          <xsd:documentation>
            URL for the online version of the docs.
          </xsd:documentation>
        </xsd:annotation>
      </xsd:attribute>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>
