<?xml version="1.0" encoding="iso-8859-1"?>

<!-- file: xhtml-ruby-1.rng

     This is XHTML, a reformulation of HTML as a modular XML application.
     Copyright 1998-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved.
     Revision: $Id: xhtml-ruby-1.rng,v 1.1 2010/12/12 23:24:11 smccarro Exp $

     This RelaxNG module is identified by URI:
        
     http://www.w3.org/MarkUp/RELAXNG/xhtml-ruby-1.rng

     Note that this module can select between 'simple' and 
     'complex' Ruby by integrating the 'Ruby.ruby.content.simple'
     or 'Ruby.ruby.content.complex' elements into the host language
     content model.

     .................................................................... -->
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">

<define name="Ruby.ruby.content.simple">
  <group>
    <ref name="Ruby.rb"/>
    <choice>
      <ref name="Ruby.rt-simple"/>
      <group>
        <ref name="Ruby.rp"/>
        <ref name="Ruby.rt-simple"/>
        <ref name="Ruby.rp"/>
      </group>
    </choice>
  </group>
</define>

<define name="Ruby.ruby.content.complex">
  <group>
    <ref name="Ruby.rbc"/>
    <ref name="Ruby.rtc"/>
    <optional>
      <ref name="Ruby.rtc"/>
    </optional>
  </group>
</define>

<!-- default content model is simple -->
<define name="Ruby.ruby.content">
  <ref name="Ruby.ruby.content.simple"/>
</define>

<define name="Ruby.ruby">
  <element name="ruby">
    <ref name="Ruby.ruby.content"/>
    <ref name="Ruby.ruby.attlist"/>
  </element>
</define>

<define name="Ruby.ruby.attlist">
  <ref name="Ruby.Common.attrib"/>
</define>

<define name="Ruby.rbc">
  <element name="rbc">
    <ref name="Ruby.rbc.attlist"/>
    <oneOrMore>
      <ref name="Ruby.rb"/>
    </oneOrMore>
  </element>
</define>

<define name="Ruby.rbc.attlist">
  <ref name="Ruby.Common.attrib"/>
</define>

<define name="Ruby.rtc">
  <element name="rtc">
    <ref name="Ruby.rtc.attlist"/>
    <oneOrMore>
      <ref name="Ruby.rt-complex"/>
    </oneOrMore>
  </element>
</define>

<define name="Ruby.rtc.attlist">
  <ref name="Ruby.Common.attrib"/>
</define>

<define name="Ruby.rb">
  <element name="rb">
    <ref name="Ruby.rb.attlist"/>
    <ref name="Ruby.NoRuby.model"/>
  </element>
</define>

<define name="Ruby.rb.attlist">
  <ref name="Ruby.Common.attrib"/>
</define>

<define name="Ruby.rt-simple">
  <element name="rt">
    <ref name="Ruby.Common.attrib"/>
    <ref name="Ruby.NoRuby.model"/>
  </element>
</define>

<define name="Ruby.rt-complex">
  <element name="rt">
    <ref name="Ruby.NoRuby.model"/>
    <ref name="Ruby.Common.attrib"/>
    <optional>
      <attribute name="rbspan" a:defaultValue="1">
        <data type="positiveInteger">
          <param name="pattern">[1-9][0-9]*</param>
        </data>
      </attribute>
    </optional>
  </element>
</define>

<define name="Ruby.rp">
  <element name="rp">
    <ref name="Ruby.rp.attlist"/>
    <text/>
  </element>
</define>

<define name="Ruby.rp.attlist">
  <ref name="Ruby.Common.attrib"/>
</define>

<define name="Ruby.NoRuby.model" combine="choice">
  <ref name="xhtml.Inline.model"/>
</define>

<define name="Ruby.Common.attrib">
    <ref name="xhtml.Common.attrib"/>
</define>

</grammar>

