<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.w3.org/1999/xhtml"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns="http://www.w3.org/1999/xhtml">

  <xs:annotation>
    <xs:documentation>
      This is the Ruby module for XHTML
      $Id: xhtml-ruby-1.xsd,v 1.4 2004/03/17 18:24:45 ahby Exp $
    </xs:documentation>
    <xs:documentation source="xhtml-copyright-1.xsd"/>
  </xs:annotation>

  <xs:annotation>
    <xs:documentation>
      "Ruby" are short runs of text alongside the base text, typically
      used in East Asian documents to indicate pronunciation or to
      provide a short annotation. The full specification for Ruby is here:
      
        http://www.w3.org/TR/2001/REC-ruby-20010531/
      
      This module defines "Ruby " or "complex Ruby" as described
      in the specification:
      
        http://www.w3.org/TR/2001/REC-ruby-20010531/#complex
    
      Simple or Basic Ruby are defined in a separate module.
      
      This module declares the elements and their attributes used to
      support complex ruby annotation markup. Elements defined here
            * ruby, rbc, rtc, rb, rt, rp
      
      This module expects the document model to define the
      following content models
        + InlNoRuby.mix                 
    </xs:documentation>
    <xs:documentation
         source="http://www.w3.org/TR/2001/REC-ruby-20010531/"/>    
  </xs:annotation>

  
  <xs:group name="ruby.content.simple">
    <xs:sequence>
      <xs:element ref="rb"/>
      <xs:choice>
        <xs:element ref="rt"/>
        <xs:sequence>
          <xs:element ref="rp"/>
          <xs:element ref="rt"/>
          <xs:element ref="rp"/>
        </xs:sequence>
      </xs:choice>
    </xs:sequence>
  </xs:group>

  <xs:group name="ruby.content.complex">
    <xs:sequence>
      <xs:element ref="rbc"/>
      <xs:element ref="rtc" maxOccurs="2"/>
    </xs:sequence>
  </xs:group>

  <!--
   add to this group any common attributes for all Ruby elements
  -->
  <xs:attributeGroup name="ruby.common.attrib"/>
  
  <xs:group name="ruby.content">
    <xs:choice>
      <xs:group ref="ruby.content.simple"/>
      <xs:group ref="ruby.content.complex"/>
    </xs:choice>
  </xs:group>

  <xs:complexType name="ruby.type">
    <xs:group ref="ruby.content"/>
    <xs:attributeGroup ref="ruby.common.attrib"/>
  </xs:complexType>

  <xs:element name="ruby" type="ruby.type"/>

  <!--
   rbc (ruby base component) element 
  -->
  <xs:attributeGroup name="rbc.attlist">
    <xs:attributeGroup ref="ruby.common.attrib"/>
  </xs:attributeGroup>
  
  <xs:group name="rbc.content">
    <xs:sequence>
      <xs:element ref="rb"/>
    </xs:sequence>
  </xs:group>  

  <xs:complexType name="rbc.type">
    <xs:group ref="rbc.content"/>
    <xs:attributeGroup ref="rbc.attlist"/>
  </xs:complexType>

  <xs:element name="rbc" type="rbc.type"/>

  <!--
   rtc (ruby text component) element
  -->
  <xs:attributeGroup name="rtc.attlist">
    <xs:attributeGroup ref="ruby.common.attrib"/>
  </xs:attributeGroup>
  
  <xs:group name="rtc.content">
    <xs:sequence>
      <xs:element ref="rt" maxOccurs="unbounded"/>
    </xs:sequence>  
  </xs:group>    

  <xs:complexType name="rtc.type">
    <xs:group ref="rt.content"/>  
    <xs:attributeGroup ref="rtc.attlist"/>
  </xs:complexType>

  <xs:element name="rtc" type="rtc.type"/>

  <!--
   rb (ruby base) element 
  -->
  <xs:attributeGroup name="rb.attlist">
    <xs:attributeGroup ref="ruby.common.attrib"/>
  </xs:attributeGroup>

  <xs:group name="rb.content">
    <xs:sequence>
       <xs:group ref="InlNoRuby.mix" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>      

  <xs:complexType name="rb.type" mixed="true">
    <xs:group ref="rb.content"/>
    <xs:attributeGroup ref="rb.attlist"/>
  </xs:complexType>
    
  <xs:element name="rb" type="rb.type"/>

  <!--
   rt (ruby text) element 
  -->
  <xs:attributeGroup name="rt.attlist">
    <xs:attributeGroup ref="ruby.common.attrib"/>
    <xs:attribute name="rbspan" type="Number" default="1"/>
  </xs:attributeGroup>

  <xs:group name="rt.content">
    <xs:sequence>
       <xs:group ref="InlNoRuby.mix" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>      
  
  <xs:complexType name="rt.type" mixed="true">
    <xs:group ref="rt.content"/>  
    <xs:attributeGroup ref="rt.attlist"/>
  </xs:complexType>

  <xs:element name="rt" type="rt.type"/>

  <!-- rp (ruby parenthesis) element  -->
  <xs:attributeGroup name="rp.attlist">
    <xs:attributeGroup ref="ruby.common.attrib"/>
  </xs:attributeGroup>
  
  <xs:group name="rp.content">
    <xs:sequence/>
  </xs:group>      
  

  <xs:complexType name="rp.type" mixed="true">
    <xs:group ref="rp.content"/>
    <xs:attributeGroup ref="rp.attlist"/>
  </xs:complexType>

  <xs:element name="rp" type="rp.type"/>

</xs:schema>
