<?xml version="1.0" encoding="UTF-8"?>

<!-- NOTE: Chameleon schema, for late namespace binding (i.e. no targetNamespce = null namespce definitions) -->

<xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:ix="http://www.xbrl.org/2008/inlineXBRL"

    elementFormDefault="qualified">
        
    <xs:import
        namespace="http://www.w3.org/1999/xhtml/datatypes/"
        schemaLocation="xhtml/xhtml-datatypes-1.xsd"/>
        
    <xs:import
        namespace="http://www.xbrl.org/2008/inlineXBRL"
        schemaLocation="xhtml-inlinexbrl-1_0-definitions.xsd"/>
  
    <xs:annotation>
        <xs:documentation> 
            This is the XML Schema module of common content models for XHTML11 + Inline XBRL
        </xs:documentation>
        <xs:documentation source="xhtml-copyright-1.xsd"/>
    </xs:annotation>
        
    <xs:annotation>
        <xs:documentation> 
            XHTML Document Model 
            This module describes the groupings of elements/attributes 
            that make up common content models for XHTML elements. 
            XHTML has following basic content models: 
               xhtml.Inline.mix; character-level elements
               xhtml.Block.mix; block-like elements, e.g., paragraphs and lists
               xhtml.Flow.mix; any block or inline elements 
               xhtml.HeadOpts.mix; Head Elements 
               xhtml.InlinePre.mix; Special class for pre content model 
               xhtml.InlineNoAnchor.mix; Content model for Anchor 
            
            Any groups declared in this module may be used to create 
            element content models, but the above are considered 'global' 
            (insofar as that term applies here). XHTML has the
            following Attribute Groups 
               xhtml.Core.extra.attrib 
               xhtml.I18n.extra.attrib
               xhtml.Common.extra 
            
            The above attribute Groups are considered Global 
        </xs:documentation>
    </xs:annotation>

    <xs:attributeGroup        name="xhtml.I18n.extra.attrib">
        <xs:annotation>
            <xs:documentation> Extended I18n attribute </xs:documentation>
        </xs:annotation>
        <xs:attributeGroup
            ref="xhtml.dir.attrib">
            <xs:annotation>
                <xs:documentation> 
                "dir" Attribute from Bi Directional Text (bdo) Module
                </xs:documentation>
            </xs:annotation>
        </xs:attributeGroup>
    </xs:attributeGroup>

    <xs:attributeGroup        name="xhtml.Common.extra">
        <xs:annotation>
            <xs:documentation> Extended Common Attributes </xs:documentation>
        </xs:annotation>
        <xs:attributeGroup
            ref="xhtml.style.attrib">
            <xs:annotation>
                <xs:documentation> 
                "style" attribute from Inline Style Module 
                </xs:documentation>
            </xs:annotation>
        </xs:attributeGroup>
    </xs:attributeGroup>

    <xs:attributeGroup        name="xhtml.Core.extra.attrib">
        <xs:annotation>
            <xs:documentation> Extend Core Attributes </xs:documentation>
        </xs:annotation>
    </xs:attributeGroup>

    <xs:attributeGroup        name="xhtml.Global.core.extra.attrib">
        <xs:annotation>
            <xs:documentation> Extended Global Core Attributes </xs:documentation>
        </xs:annotation>
    </xs:attributeGroup>

    <xs:attributeGroup        name="xhtml.Global.I18n.extra.attrib">
        <xs:annotation>
            <xs:documentation> Extended Global I18n attributes </xs:documentation>
        </xs:annotation>
    </xs:attributeGroup>

    <xs:attributeGroup        name="xhtml.Global.Common.extra">
        <xs:annotation>
            <xs:documentation> Extended Global Common Attributes </xs:documentation>
        </xs:annotation>
    </xs:attributeGroup>

    <xs:group        name="xhtml.Head.extra">
        <xs:sequence/>
    </xs:group>

    <xs:group        name="xhtml.HeadOpts.mix">
        <xs:choice>
            <xs:element
                name="script"
                type="xhtml.script.type"/>
            <xs:element
                name="style"
                type="xhtml.style.type"/>
            <xs:element
                name="meta"
                type="xhtml.meta.type"/>
            <xs:element
                name="link"
                type="xhtml.link.type"/>
            <xs:element
                name="object"
                type="xhtml.object.type"/>
        
    <xs:group
                ref="xhtml.Head.extra"/>
        </xs:choice>
    </xs:group>

    <xs:group        name="xhtml.head.content">
        <xs:sequence>
        
    <xs:group
                ref="xhtml.HeadOpts.mix"
                minOccurs="0"
                maxOccurs="unbounded"/>
            <xs:choice>
                <xs:sequence>
                    <xs:element
                        name="title"
                        minOccurs="1"
                        maxOccurs="1"
                        type="xhtml.title.type"/>
                
    <xs:group
                        ref="xhtml.HeadOpts.mix"
                        minOccurs="0"
                        maxOccurs="unbounded"/>
                    <xs:sequence
                        minOccurs="0">
                        <xs:element
                            name="base"
                            type="xhtml.base.type"/>
                    
    <xs:group
                            ref="xhtml.HeadOpts.mix"
                            minOccurs="0"
                            maxOccurs="unbounded"/>
                    </xs:sequence>
                </xs:sequence>
                <xs:sequence>
                    <xs:element
                        name="base"
                        type="xhtml.base.type"
                        minOccurs="1"
                        maxOccurs="1"/>
                
    <xs:group
                        ref="xhtml.HeadOpts.mix"
                        minOccurs="0"
                        maxOccurs="unbounded"/>
                    <xs:element
                        name="title"
                        minOccurs="1"
                        maxOccurs="1"
                        type="xhtml.title.type"/>
                
    <xs:group
                        ref="xhtml.HeadOpts.mix"
                        minOccurs="0"
                        maxOccurs="unbounded"/>
                </xs:sequence>
            </xs:choice>
        </xs:sequence>
    </xs:group>

    <xs:group        name="xhtml.Edit.class">
    <!--
    ins and del are used to denote editing changes
  -->        <xs:choice>
            <xs:element
                name="ins"
                type="xhtml.edit.type"/>
            <xs:element
                name="del"
                type="xhtml.edit.type"/>
        </xs:choice>
    </xs:group>

    <xs:group        name="xhtml.Script.class">
    <!--
    script and noscript are used to contain scripts
    and alternative content
  -->        <xs:choice>
            <xs:element
                name="script"
                type="xhtml.script.type"/>
            <xs:element
                name="noscript"
                type="xhtml.noscript.type"/>
        </xs:choice>
    </xs:group>
    
    <xs:group        name="xhtml.Misc.extra">
        <xs:sequence>
          <xs:group ref="ix:xbrl.ix.inline.class"/>
        </xs:sequence>
    </xs:group>
  

    <xs:group        name="xhtml.Misc.class">
    <!--
    These elements are neither block nor inline, and can
    essentially be used anywhere in the document body.
  -->        <xs:choice>
        
          <xs:group ref="xhtml.Edit.class"/> 
          <xs:group ref="xhtml.Script.class"/> 
          <xs:group ref="xhtml.Misc.extra"/>
        </xs:choice>
    </xs:group>
    <!-- Inline Elements -->

    <xs:group        name="xhtml.InlStruct.class">
        <xs:choice>
            <xs:element
                name="br"
                type="xhtml.br.type"/>
            <xs:element
                name="span"
                type="xhtml.span.type"/>
        </xs:choice>
    </xs:group>

    <xs:group        name="xhtml.InlPhras.class">
        <xs:choice>
            <xs:element
                name="em"
                type="xhtml.em.type"/>
            <xs:element
                name="strong"
                type="xhtml.strong.type"/>
            <xs:element
                name="dfn"
                type="xhtml.dfn.type"/>
            <xs:element
                name="code"
                type="xhtml.code.type"/>
            <xs:element
                name="samp"
                type="xhtml.samp.type"/>
            <xs:element
                name="kbd"
                type="xhtml.kbd.type"/>
            <xs:element
                name="var"
                type="xhtml.var.type"/>
            <xs:element
                name="cite"
                type="xhtml.cite.type"/>
            <xs:element
                name="abbr"
                type="xhtml.abbr.type"/>
            <xs:element
                name="acronym"
                type="xhtml.acronym.type"/>
            <xs:element
                name="q"
                type="xhtml.q.type"/>
        </xs:choice>
    </xs:group>

    <xs:group        name="xhtml.InlPres.class">
        <xs:choice>
            <xs:element
                name="tt"
                type="xhtml.InlPres.type"/>
            <xs:element
                name="i"
                type="xhtml.InlPres.type"/>
            <xs:element
                name="b"
                type="xhtml.InlPres.type"/>
            <xs:element
                name="big"
                type="xhtml.InlPres.type"/>
            <xs:element
                name="small"
                type="xhtml.InlPres.type"/>
            <xs:element
                name="sub"
                type="xhtml.InlPres.type"/>
            <xs:element
                name="sup"
                type="xhtml.InlPres.type"/>
        </xs:choice>
    </xs:group>

    <xs:group        name="xhtml.I18n.class">
        <xs:sequence>
            <xs:element
                name="bdo"
                type="xhtml.bdo.type"/>
        </xs:sequence>
    </xs:group>

    <xs:group        name="xhtml.Anchor.class">
        <xs:sequence>
            <xs:element
                name="a"
                type="xhtml.a.type"/>
        </xs:sequence>
    </xs:group>

    <xs:group        name="xhtml.InlSpecial.class">
        <xs:choice>
            <xs:element
                name="img"
                type="xhtml.img.type"/>
            <xs:element
                name="map"
                type="xhtml.map.type"/>
            <xs:element
                name="object"
                type="xhtml.object.type"/>
        </xs:choice>
    </xs:group>

    <xs:group        name="xhtml.InlForm.class">
        <xs:choice>
            <xs:element
                name="input"
                type="xhtml.input.type"/>
            <xs:element
                name="select"
                type="xhtml.select.type"/>
            <xs:element
                name="textarea"
                type="xhtml.textarea.type"/>
            <xs:element
                name="label"
                type="xhtml.label.type"/>
            <xs:element
                name="button"
                type="xhtml.button.type"/>
        </xs:choice>
    </xs:group>

    <xs:group        name="xhtml.Inline.extra">
        <xs:sequence/>
    </xs:group>

    <xs:group        name="xhtml.Ruby.class">
        <xs:sequence>
            <xs:element
                name="ruby"
                type="xhtml.ruby.type"/>
        </xs:sequence>
    </xs:group>

    <xs:group        name="xhtml.Inline.class">
    <!--
    Inline.class includes all inline elements,
    used as a component in mixes
  -->        <xs:choice>
        
          <xs:group ref="xhtml.InlStruct.class"/> 
          <xs:group ref="xhtml.InlPhras.class"/> 
          <xs:group ref="xhtml.InlPres.class"/> 
          <xs:group ref="xhtml.I18n.class"/> 
          <xs:group ref="xhtml.Anchor.class"/> 
          <xs:group ref="xhtml.InlSpecial.class"/> 
          <xs:group ref="xhtml.InlForm.class"/> 
          <xs:group ref="xhtml.Ruby.class"/> 
          <xs:group ref="xhtml.Inline.extra"/>
        </xs:choice>
    </xs:group>

    <xs:group        name="xhtml.InlNoRuby.class">
    <!--
     InlNoRuby.class includes all inline elements
     except ruby
  -->        <xs:choice>
          <xs:group ref="xhtml.InlStruct.class"/> 
          <xs:group ref="xhtml.InlPhras.class"/> 
          <xs:group ref="xhtml.InlPres.class"/> 
          <xs:group ref="xhtml.I18n.class"/> 
          <xs:group ref="xhtml.Anchor.class"/> 
          <xs:group ref="xhtml.InlSpecial.class"/> 
          <xs:group ref="xhtml.InlForm.class"/> 
          <xs:group ref="xhtml.Inline.extra"/>
        </xs:choice>
    </xs:group>

    <xs:group        name="xhtml.InlinePre.mix">
    <!--
    InlinePre.mix
    Used as a component in pre model
  -->        <xs:choice>
        
            <xs:group ref="xhtml.InlStruct.class"/> 
            <xs:group ref="xhtml.InlPhras.class"/>
            <xs:element
                name="tt"
                type="xhtml.InlPres.type"/>
            <xs:element
                name="i"
                type="xhtml.InlPres.type"/>
            <xs:element
                name="b"
                type="xhtml.InlPres.type"/>
            <xs:group ref="xhtml.I18n.class"/> 
            <xs:group ref="xhtml.Anchor.class"/> 
            <xs:group ref="xhtml.Misc.class"/>
            <xs:element
                name="map"
                type="xhtml.map.type"/>
            <xs:group ref="xhtml.Inline.extra"/>
        </xs:choice>
    </xs:group>

    <xs:group        name="xhtml.InlNoAnchor.class">
    <!--
    InlNoAnchor.class includes all non-anchor inlines,
    used as a component in mixes
  -->        <xs:choice>
          <xs:group ref="xhtml.InlStruct.class"/>
          <xs:group ref="xhtml.InlPhras.class"/>
          <xs:group ref="xhtml.InlPres.class"/>
          <xs:group ref="xhtml.I18n.class"/>
          <xs:group ref="xhtml.InlSpecial.class"/>
          <xs:group ref="xhtml.InlForm.class"/>
          <xs:group ref="xhtml.Ruby.class"/>
          <xs:group ref="xhtml.Inline.extra"/>
        </xs:choice>
    </xs:group>


    <xs:group        name="xhtml.InlNoAnchor.mix">
    <!--
    InlNoAnchor.mix includes all non-anchor inlines
  -->        <xs:choice>
        
    <xs:group
                ref="xhtml.InlNoAnchor.class"/>
        
    <xs:group
                ref="xhtml.Misc.class"/>
        </xs:choice>
    </xs:group>


    <xs:group        name="xhtml.Inline.mix">
    <!--
    Inline.mix includes all inline elements, including Misc.class
  -->        <xs:choice>
        
    <xs:group
                ref="xhtml.Inline.class"/>
        
    <xs:group
                ref="xhtml.Misc.class"/>
        </xs:choice>
    </xs:group>


    <xs:group        name="xhtml.InlNoRuby.mix">
    <!--
   InlNoRuby.mix includes all of inline.mix elements
   except ruby
  -->        <xs:choice>
        
    <xs:group
                ref="xhtml.InlNoRuby.class"/>
        
    <xs:group
                ref="xhtml.Misc.class"/>
        </xs:choice>
    </xs:group>


    <xs:group        name="xhtml.Heading.class">
    <!--
    In the HTML 4 DTD, heading and list elements were included
    in the block group. The Heading.class and
    List.class groups must now be included explicitly
    on element declarations where desired.
    -->      
        <xs:choice>
            <xs:element
                name="h1"
                type="xhtml.h1.type"/>
            <xs:element
                name="h2"
                type="xhtml.h2.type"/>
            <xs:element
                name="h3"
                type="xhtml.h3.type"/>
            <xs:element
                name="h4"
                type="xhtml.h4.type"/>
            <xs:element
                name="h5"
                type="xhtml.h5.type"/>
            <xs:element
                name="h6"
                type="xhtml.h6.type"/>
        </xs:choice>
    </xs:group>


    <xs:group        name="xhtml.List.class">
        <xs:choice>
            <xs:element
                name="ul"
                type="xhtml.ul.type"/>
            <xs:element
                name="ol"
                type="xhtml.ol.type"/>
            <xs:element
                name="dl"
                type="xhtml.dl.type"/>
        </xs:choice>
    </xs:group>


    <xs:group        name="xhtml.Table.class">
        <xs:choice>
            <xs:element
                name="table"
                type="xhtml.table.type"/>
        </xs:choice>
    </xs:group>


    <xs:group        name="xhtml.Form.class">
        <xs:choice>
            <xs:element
                name="form"
                type="xhtml.form.type"/>
        </xs:choice>
    </xs:group>


    <xs:group        name="xhtml.Fieldset.class">
        <xs:choice>
            <xs:element
                name="fieldset"
                type="xhtml.fieldset.type"/>
        </xs:choice>
    </xs:group>
    

    <xs:group        name="xhtml.BlkStruct.class">
        <xs:choice>
            <xs:element
                name="p"
                type="xhtml.p.type"/>
            <xs:element
                name="div"
                type="xhtml.div.type"/>
        </xs:choice>
    </xs:group>


    <xs:group        name="xhtml.BlkPhras.class">
        <xs:choice>
            <xs:element
                name="pre"
                type="xhtml.pre.type"/>
            <xs:element
                name="blockquote"
                type="xhtml.blockquote.type"/>
            <xs:element
                name="address"
                type="xhtml.address.type"/>
        </xs:choice>
    </xs:group>


    <xs:group        name="xhtml.BlkPres.class">
        <xs:sequence>
            <xs:element
                name="hr"
                type="xhtml.hr.type"/>
        </xs:sequence>
    </xs:group>


    <xs:group        name="xhtml.BlkSpecial.class">
        <xs:choice>
          <xs:group ref="xhtml.Table.class"/>
          <xs:group ref="xhtml.Form.class"/>
          <xs:group ref="xhtml.Fieldset.class"/>
        </xs:choice>
    </xs:group>


    <xs:group        name="xhtml.Block.extra">
        <xs:sequence/>
    </xs:group>


    <xs:group        name="xhtml.Block.class">
                <!--
    Block.class includes all block elements,
    used as an component in mixes
  -->
        <xs:choice>
          <xs:group ref="xhtml.BlkStruct.class"/>
          <xs:group ref="xhtml.BlkPhras.class"/>
          <xs:group ref="xhtml.BlkPres.class"/>
          <xs:group ref="xhtml.BlkSpecial.class"/>
          <xs:group ref="xhtml.Block.extra"/>
        </xs:choice>
    </xs:group>


    <xs:group        name="xhtml.Block.mix">
    <!--
   Block.mix includes all block elements plus %Misc.class;
  -->        <xs:choice>
        
          <xs:group ref="xhtml.Heading.class"/> 
          <xs:group ref="xhtml.List.class"/>
          <xs:group ref="xhtml.Block.class"/>
          <xs:group ref="xhtml.Misc.class"/>
        </xs:choice>
    </xs:group>

    <xs:group        name="xhtml.Flow.mix">
    <!--
    All Content Elements
    Flow.mix includes all text content, block and inline
    Note that the "any" element included here allows us
    to add data from any other namespace, a necessity
    for compound document creation.
    Note however that it is not possible to add
    to any head level element without further
    modification. To add RDF metadata to the head
    of a document, modify the structure module.
  -->        <xs:choice>
        
          <xs:group ref="xhtml.Heading.class"/> 
          <xs:group ref="xhtml.List.class"/>
          <xs:group ref="xhtml.Block.class"/>
          <xs:group ref="xhtml.Inline.class"/>
          <xs:group ref="xhtml.Misc.class"/>
        </xs:choice>
    </xs:group>

    <xs:group        name="xhtml.BlkNoForm.mix">
    <!--
    BlkNoForm.mix includes all non-form block elements,
    plus Misc.class
  -->
      <xs:choice>
        <xs:group ref="xhtml.Heading.class"/>
        <xs:group ref="xhtml.List.class"/>
        <xs:group ref="xhtml.BlkStruct.class"/>
        <xs:group ref="xhtml.BlkPhras.class"/>
        <xs:group ref="xhtml.BlkPres.class"/>
        <xs:group ref="xhtml.Table.class"/>
        <xs:group ref="xhtml.Block.extra"/>
        <xs:group ref="xhtml.Misc.class"/>
      </xs:choice>
    </xs:group>
    <xs:element
        name="html"
        type="xhtml.html.type"/>
</xs:schema>
