<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://www.o-xml.org/extensions/document/" 
	   xmlns:xs="http://www.w3.org/2001/XMLSchema"
	   xmlns:doc="http://www.o-xml.org/extensions/document/"
	   elementFormDefault="qualified"
	   attributeFormDefault="unqualified">

  <xs:group name="top-level">
    <xs:choice>
      <xs:element ref="doc:p"/>
      <xs:element ref="doc:see"/>
      <xs:element ref="doc:same"/>
      <xs:element ref="doc:return"/>
      <xs:element ref="doc:param"/>
      <xs:element ref="doc:example"/>
      <xs:any namespace="##any" processContents="skip"/>
    </xs:choice>
  </xs:group>

  <xs:group name="inline">
    <xs:choice>
      <xs:element ref="doc:param"/>
      <xs:element ref="doc:type"/>
      <xs:element ref="doc:link"/>
      <xs:element ref="doc:bug"/>
      <xs:any namespace="##any" processContents="skip"/>
    </xs:choice>
  </xs:group>

  <xs:element name="p">
    <xs:complexType mixed="true">
      <xs:group ref="doc:inline" minOccurs="0" maxOccurs="unbounded"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="example">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
	<xs:any namespace="##any" processContents="skip"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <xs:element name="return">
    <xs:complexType mixed="true">
      <xs:group ref="doc:inline" minOccurs="0" maxOccurs="unbounded"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="see">
    <xs:complexType mixed="true">
      <xs:group ref="doc:inline" minOccurs="0" maxOccurs="unbounded"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="same">
    <xs:complexType mixed="true">
      <xs:group ref="doc:inline" minOccurs="0" maxOccurs="unbounded"/>
    </xs:complexType>
  </xs:element>

  <!-- param may be top-level or inline  -->
  <xs:element name="param">
    <xs:complexType mixed="true">
      <xs:group ref="doc:inline" minOccurs="0" maxOccurs="unbounded"/>
      <xs:attribute name="name" type="doc:QName" use="optional"/>
    </xs:complexType>
  </xs:element>

  <!-- inline elements -->
  <xs:element name="type">
    <xs:complexType mixed="true">
      <xs:attribute name="name" type="doc:QName" use="optional"/>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="link">
    <xs:complexType mixed="true">
      <xs:attribute name="url" type="xs:anyURI" use="optional"/>
      <xs:attribute name="type" type="doc:QName" use="optional"/>
      <xs:attribute name="function" type="doc:QName" use="optional"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="bug">
    <xs:complexType>
      <xs:attribute name="ref" type="xs:string" use="required"/>
      <xs:attribute name="status" type="doc:QName" use="optional"/>
    </xs:complexType>
  </xs:element>

  <xs:simpleType name="QName">
    <!-- QName does not have to be prefix qualified -->
    <xs:union memberTypes="xs:NCName xs:QName"/>
  </xs:simpleType>

</xs:schema>
