<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:formula="http://xbrl.org/2008/formula" xmlns:gen="http://xbrl.org/2008/generic" xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:table="http://xbrl.org/2014/table" xmlns:variable="http://xbrl.org/2008/variable" xmlns:xl="http://www.xbrl.org/2003/XLink" elementFormDefault="qualified" targetNamespace="http://xbrl.org/2014/table">
    
    <annotation>
        <appinfo>
            <link:arcroleType arcroleURI="http://xbrl.org/arcrole/2014/table-breakdown" cyclesAllowed="undirected" id="table-breakdown">
                <link:definition>
                    breakdown used on the axes of a table
                </link:definition>
                <link:usedOn>
                    table:tableBreakdownArc
                </link:usedOn>
            </link:arcroleType>
            <link:arcroleType arcroleURI="http://xbrl.org/arcrole/2014/breakdown-tree" cyclesAllowed="undirected" id="breakdown-tree">
                <link:definition>
                    root node of a breakdown tree
                </link:definition>
                <link:usedOn>
                    table:breakdownTreeArc
                </link:usedOn>
            </link:arcroleType>
            <link:arcroleType arcroleURI="http://xbrl.org/arcrole/2014/table-filter" cyclesAllowed="undirected" id="table-filter">
                <link:definition>
                    filter applied to table
                </link:definition>
                <link:usedOn>
                    table:tableFilterArc
                </link:usedOn>
            </link:arcroleType>
            <link:arcroleType arcroleURI="http://xbrl.org/arcrole/2014/table-parameter" cyclesAllowed="undirected" id="table-parameter">
                <link:definition>
                    parameter of a table
                </link:definition>
                <link:usedOn>
                    table:tableParameterArc
                </link:usedOn>
            </link:arcroleType>
        </appinfo>
    </annotation>
    
    <import namespace="http://www.xbrl.org/2003/XLink" schemaLocation="http://www.xbrl.org/2003/xl-2003-12-31.xsd"/>
    <import namespace="http://xbrl.org/2008/variable" schemaLocation="http://www.xbrl.org/2008/variable.xsd"/>
    <import namespace="http://xbrl.org/2008/formula" schemaLocation="http://www.xbrl.org/2008/formula.xsd"/>
    <import namespace="http://xbrl.org/2008/generic" schemaLocation="http://www.xbrl.org/2008/generic-link.xsd"/>

    <complexType name="table.type">
        <complexContent>
            <extension base="xl:resourceType">
                <attribute default="parent-first" name="parentChildOrder" type="table:parentChildOrder.type" use="optional"/>
                <!-- Allow for extension -->
                <anyAttribute namespace="##other" processContents="lax"/>
            </extension>
        </complexContent>
    </complexType>

    <complexType name="breakdown.type">
        <complexContent>
            <extension base="xl:resourceType">
                <attribute name="parentChildOrder" type="table:parentChildOrder.type" use="optional"/>
                <!-- Allow for extension -->
                <anyAttribute namespace="##other" processContents="lax"/>
            </extension>
        </complexContent>
    </complexType>

    <attributeGroup name="definitionNode.attrs">
        <annotation>
          <documentation>
          Attributes for definition nodes.
          </documentation>
        </annotation>
        <attribute name="tagSelector" type="NCName" use="optional"/>
        <!-- Allow for extension -->
        <anyAttribute namespace="##other" processContents="lax"/>
    </attributeGroup>

    <complexType name="definitionNode.type">
        <complexContent>
            <extension base="xl:resourceType">
                <attributeGroup ref="table:definitionNode.attrs"/>
            </extension>
        </complexContent>
    </complexType>

    <simpleType name="parentChildOrder.type">
        <restriction base="token">
            <enumeration value="parent-first"/>
            <enumeration value="children-first"/>
        </restriction>
    </simpleType>

    <complexType name="closedDefinitionNode.type">
        <complexContent>
            <extension base="table:definitionNode.type">
                <attribute name="parentChildOrder" type="table:parentChildOrder.type" use="optional"/>
            </extension>
        </complexContent>
    </complexType>

    <complexType name="simpleAspectSpec.type">
      <complexContent>
          <restriction base="anyType">
            <!-- Allow for extension -->
            <anyAttribute namespace="##other" processContents="lax"/>
          </restriction>
      </complexContent>
    </complexType>

    <element abstract="true" id="xml-abstract-aspect-spec" name="aspectSpec" type="anyType"/>

    <element id="xml-concept-aspect-spec" name="conceptAspect" substitutionGroup="table:aspectSpec" type="table:simpleAspectSpec.type"/>

    <element id="xml-unit-aspect-spec" name="unitAspect" substitutionGroup="table:aspectSpec" type="table:simpleAspectSpec.type"/>

    <element id="xml-entity-identifier-aspect-spec" name="entityIdentifierAspect" substitutionGroup="table:aspectSpec" type="table:simpleAspectSpec.type"/>

    <element id="xml-period-aspect-spec" name="periodAspect" substitutionGroup="table:aspectSpec" type="table:simpleAspectSpec.type"/>

    <complexType name="dimensionAspectSpec.type">
        <simpleContent>
          <extension base="QName">
            <attribute default="false" name="includeUnreportedValue" type="boolean" use="optional"/>
            <!-- Allow for extension -->
            <anyAttribute namespace="##other" processContents="lax"/>
          </extension>
        </simpleContent>
    </complexType>

    <element id="xml-dimension-aspect-spec" name="dimensionAspect" substitutionGroup="table:aspectSpec" type="table:dimensionAspectSpec.type"/>
     
    <element id="xml-table" name="table" substitutionGroup="xl:resource" type="table:table.type"/>
    <element id="xml-breakdown" name="breakdown" substitutionGroup="xl:resource" type="table:breakdown.type"/>
    <element abstract="true" id="xml-abstract-definition-node" name="definitionNode" substitutionGroup="xl:resource" type="table:definitionNode.type"/>
    <element abstract="true" id="xml-abstract-closed-definition-node" name="closedDefinitionNode" substitutionGroup="table:definitionNode" type="table:closedDefinitionNode.type"/>

    <simpleType name="axis.type">
        <restriction base="token">
            <enumeration value="x"/>
            <enumeration value="y"/>
            <enumeration value="z"/>
        </restriction>
    </simpleType>     
    
    <element id="xml-table-breakdown-arc" name="tableBreakdownArc" substitutionGroup="gen:arc">
        <complexType>
            <complexContent>
                <extension base="gen:genericArcType">
                    <attribute name="axis" type="table:axis.type" use="required"/>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element id="xml-breakdown-tree-arc" name="breakdownTreeArc" substitutionGroup="gen:arc">
        <complexType>
            <complexContent>
                <extension base="gen:genericArcType"/>
            </complexContent>
        </complexType>
    </element>

    <element id="xml-table-filter-arc" name="tableFilterArc" substitutionGroup="gen:arc">
        <complexType>
            <complexContent>
                <extension base="gen:genericArcType">
                    <attribute name="complement" type="boolean" use="required"/>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element id="xml-table-parameter-arc" name="tableParameterArc" substitutionGroup="gen:arc">
        <complexType>
            <complexContent>
                <extension base="gen:genericArcType">
                    <attribute name="name" type="variable:QName" use="required"/>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <annotation>
        <appinfo>
            <link:arcroleType arcroleURI="http://xbrl.org/arcrole/2014/definition-node-subtree" cyclesAllowed="undirected" id="definition-node-subtree">
                <link:definition>
                    arc between a parent and child definition node.
                </link:definition>
                <link:usedOn>
                    table:definitionNodeSubtreeArc
                </link:usedOn>
            </link:arcroleType>
        </appinfo>
    </annotation>

    <element id="xml-definition-node-subtree-arc" name="definitionNodeSubtreeArc" substitutionGroup="gen:arc">
        <complexType>
            <complexContent>
                <extension base="gen:genericArcType"/>
            </complexContent>
        </complexType>
    </element>

    <complexType name="ruleSet.type">
      <sequence maxOccurs="unbounded" minOccurs="0">
        <element ref="formula:abstract.aspect"/>
      </sequence>
      <attribute name="tag" type="NCName" use="required"/>
    </complexType>

    <complexType name="ruleNode.type">
        <complexContent mixed="true">
            <extension base="table:closedDefinitionNode.type">
                <sequence maxOccurs="unbounded" minOccurs="0">
                  <choice>
                    <element ref="formula:abstract.aspect"/>
                    <element name="ruleSet" type="table:ruleSet.type" id="xml-rule-set"/>
                  </choice>
                </sequence>
                <attribute default="false" name="abstract" type="boolean"/>
                <attribute default="false" name="merge" type="boolean"/>
            </extension>
        </complexContent>
    </complexType>

    <element id="xml-rule-node" name="ruleNode" substitutionGroup="table:closedDefinitionNode" type="table:ruleNode.type"/>

    <complexType name="relationshipNode.type">
        <complexContent>
            <extension base="table:closedDefinitionNode.type">
            </extension>
        </complexContent>
    </complexType>

    <simpleType name="conceptRelationshipFormulaAxis.type">
        <restriction base="token">
            <enumeration value="descendant"/>
            <enumeration value="descendant-or-self"/>
            <enumeration value="child"/>
            <enumeration value="child-or-self"/>
            <enumeration value="sibling"/>
            <enumeration value="sibling-or-self"/>
            <enumeration value="sibling-or-descendant"/>
            <enumeration value="sibling-or-descendant-or-self"/>
        </restriction>
    </simpleType>

    <complexType name="conceptRelationshipNode.type">
        <complexContent mixed="true">
            <extension base="table:relationshipNode.type">
                <sequence>
                    <choice maxOccurs="unbounded" minOccurs="0">
                        <element maxOccurs="unbounded" minOccurs="0" name="relationshipSource" type="QName"/>
                        <element maxOccurs="unbounded" minOccurs="0" name="relationshipSourceExpression" type="variable:expression"/>
                    </choice>
                    <choice maxOccurs="1" minOccurs="0">
                        <element name="linkrole" type="xl:nonEmptyURI"/>
                        <element name="linkroleExpression" type="variable:expression"/>
                    </choice>
                    <choice maxOccurs="1" minOccurs="1">
                        <element name="arcrole" type="xl:nonEmptyURI"/>
                        <element name="arcroleExpression" type="variable:expression"/>
                    </choice>
                    <choice maxOccurs="1" minOccurs="0">
                        <element name="formulaAxis" type="table:conceptRelationshipFormulaAxis.type"/>
                        <element name="formulaAxisExpression" type="variable:expression"/>
                    </choice>
                    <choice maxOccurs="1" minOccurs="0">
                        <element name="generations" type="nonNegativeInteger"/>
                        <element name="generationsExpression" type="variable:expression"/>
                    </choice>
                    <choice maxOccurs="1" minOccurs="0">
                        <element name="linkname" type="QName"/>
                        <element name="linknameExpression" type="variable:expression"/>
                    </choice>
                    <choice maxOccurs="1" minOccurs="0">
                        <element name="arcname" type="QName"/>
                        <element name="arcnameExpression" type="variable:expression"/>
                    </choice>
                </sequence>
            </extension>
        </complexContent>
    </complexType>

    <simpleType name="dimensionRelationshipFormulaAxis.type">
        <restriction base="token">
            <enumeration value="descendant"/>
            <enumeration value="descendant-or-self"/>
            <enumeration value="child"/>
            <enumeration value="child-or-self"/>
        </restriction>
    </simpleType>

    <complexType name="dimensionRelationshipNode.type">
        <complexContent mixed="true">
            <extension base="table:relationshipNode.type">
                <sequence>
                    <choice maxOccurs="unbounded" minOccurs="0">
                        <element maxOccurs="unbounded" minOccurs="0" name="relationshipSource" type="QName"/>
                        <element maxOccurs="unbounded" minOccurs="0" name="relationshipSourceExpression" type="variable:expression"/>
                    </choice>
                    <choice maxOccurs="1" minOccurs="0">
                        <element name="linkrole" type="xl:nonEmptyURI"/>
                        <element name="linkroleExpression" type="variable:expression"/>
                    </choice>
                    <element maxOccurs="1" minOccurs="1" name="dimension" type="QName" />
                    <choice maxOccurs="1" minOccurs="0">
                        <element name="formulaAxis" type="table:dimensionRelationshipFormulaAxis.type"/>
                        <element name="formulaAxisExpression" type="variable:expression"/>
                    </choice>
                    <choice maxOccurs="1" minOccurs="0">
                        <element name="generations" type="nonNegativeInteger"/>
                        <element name="generationsExpression" type="variable:expression"/>
                    </choice>
                </sequence>
            </extension>
        </complexContent>
    </complexType>

    <element id="xml-concept-relationship-node" name="conceptRelationshipNode" substitutionGroup="table:closedDefinitionNode" type="table:conceptRelationshipNode.type"/>
    <element id="xml-dimension-relationship-node" name="dimensionRelationshipNode" substitutionGroup="table:closedDefinitionNode" type="table:dimensionRelationshipNode.type"/>
   
    <annotation>
        <appinfo>
            <link:arcroleType arcroleURI="http://xbrl.org/arcrole/2014/aspect-node-filter" cyclesAllowed="undirected" id="aspect-node-filter">
                <link:definition>
                    filter applied to aspect node
                </link:definition>
                <link:usedOn>
                    table:aspectNodeFilterArc
                </link:usedOn>
            </link:arcroleType>
        </appinfo>
    </annotation>
    
    <complexType name="aspectNode.type">
        <complexContent mixed="true">
            <extension base="table:definitionNode.type">
                <sequence>
                    <element ref="table:aspectSpec"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
   
    <element id="xml-aspect-node" name="aspectNode" substitutionGroup="table:definitionNode" type="table:aspectNode.type"/>
    
    <element id="xml-aspect-node-filter-arc" name="aspectNodeFilterArc" substitutionGroup="gen:arc">
        <complexType>
            <complexContent>
                <extension base="gen:genericArcType">
                    <attribute default="false" name="complement" type="boolean" use="optional"/>
                </extension>
            </complexContent>
        </complexType>
    </element>
</schema>
